Package org.teiid.rhq.plugin

Source Code of org.teiid.rhq.plugin.VDBComponent

/*
* JBoss, Home of Professional Open Source.
* See the COPYRIGHT.txt file distributed with this work for information
* regarding copyright ownership.  Some portions may be licensed
* to Red Hat, Inc. under one or more contributor license agreements.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*/
package org.teiid.rhq.plugin;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.naming.NamingException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jboss.deployers.spi.management.ManagementView;
import org.jboss.managed.api.ComponentType;
import org.jboss.managed.api.ManagedComponent;
import org.jboss.managed.api.ManagedObject;
import org.jboss.managed.api.ManagedProperty;
import org.jboss.managed.plugins.ManagedObjectImpl;
import org.jboss.metatype.api.types.MetaType;
import org.jboss.metatype.api.types.SimpleMetaType;
import org.jboss.metatype.api.values.CollectionValueSupport;
import org.jboss.metatype.api.values.CompositeValueSupport;
import org.jboss.metatype.api.values.EnumValueSupport;
import org.jboss.metatype.api.values.GenericValue;
import org.jboss.metatype.api.values.GenericValueSupport;
import org.jboss.metatype.api.values.MetaValue;
import org.jboss.metatype.api.values.SimpleValue;
import org.jboss.metatype.api.values.SimpleValueSupport;
import org.mc4j.ems.connection.EmsConnection;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.ConfigurationUpdateStatus;
import org.rhq.core.domain.configuration.Property;
import org.rhq.core.domain.configuration.PropertyList;
import org.rhq.core.domain.configuration.PropertyMap;
import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.measurement.AvailabilityType;
import org.rhq.core.domain.measurement.MeasurementDataNumeric;
import org.rhq.core.domain.measurement.MeasurementDataTrait;
import org.rhq.core.domain.measurement.MeasurementReport;
import org.rhq.core.domain.measurement.MeasurementScheduleRequest;
import org.rhq.core.pluginapi.configuration.ConfigurationFacet;
import org.rhq.core.pluginapi.configuration.ConfigurationUpdateReport;
import org.rhq.core.pluginapi.inventory.CreateResourceReport;
import org.rhq.core.pluginapi.inventory.ResourceContext;
import org.rhq.plugins.jbossas5.connection.ProfileServiceConnection;
import org.teiid.rhq.admin.DQPManagementView;
import org.teiid.rhq.plugin.util.PluginConstants;
import org.teiid.rhq.plugin.util.ProfileServiceUtil;
import org.teiid.rhq.plugin.util.PluginConstants.Operation;
import org.teiid.rhq.plugin.util.PluginConstants.ComponentType.Platform;
import org.teiid.rhq.plugin.util.PluginConstants.ComponentType.VDB;

/**
* Component class for a Teiid VDB
*
*/
public class VDBComponent extends Facet {
  private final Log LOG = LogFactory
      .getLog(PluginConstants.DEFAULT_LOGGER_CATEGORY);

  /*
   * (non-Javadoc)
   *
   * @seeorg.teiid.rhq.plugin.Facet#start(org.rhq.core.pluginapi.inventory.
   * ResourceContext)
   */
  @Override
  public void start(ResourceContext context) {
    this.setComponentName(context.getPluginConfiguration().getSimpleValue(
        "fullName", null));
    this.resourceConfiguration = context.getPluginConfiguration();
    this.componentType = PluginConstants.ComponentType.VDB.NAME;
    super.start(context);
  }

  @Override
  protected void setOperationArguments(String name,
      Configuration configuration, Map<String, Object> valueMap) {
    // Parameter logic for VDB Metrics
    String key = VDB.NAME;
    valueMap.put(key, this.resourceConfiguration.getSimpleValue("name",
        null));
    String version = VDB.VERSION;
    valueMap.put(version, this.resourceConfiguration.getSimpleValue(
        VDB.VERSION, null));

    // Parameter logic for VDB Operations
    if (name.equals(VDB.Operations.KILL_REQUEST)) {
      valueMap.put(Operation.Value.REQUEST_ID, configuration.getSimple(
          Operation.Value.REQUEST_ID).getLongValue());
      valueMap.put(Operation.Value.SESSION_ID, configuration.getSimple(
          Operation.Value.SESSION_ID).getLongValue());
    } else if (name.equals(VDB.Operations.CLEAR_CACHE)) {
        valueMap.put(Operation.Value.CACHE_TYPE, configuration.getSimple(
          Operation.Value.CACHE_TYPE).getStringValue());
    } else if (name.equals(Platform.Operations.KILL_SESSION)) {
      valueMap.put(Operation.Value.SESSION_ID, configuration.getSimple(
          Operation.Value.SESSION_ID).getLongValue());
    } else if (name.equals(Platform.Operations.KILL_SESSION)) {
      valueMap.put(Operation.Value.SESSION_ID, configuration.getSimple(
          Operation.Value.SESSION_ID).getLongValue());
    } else if (name.equals(VDB.Operations.RELOAD_MATVIEW)) {
      valueMap
          .put(Operation.Value.MATVIEW_SCHEMA, configuration
              .getSimple(Operation.Value.MATVIEW_SCHEMA)
              .getStringValue());
      valueMap.put(Operation.Value.MATVIEW_TABLE, configuration
          .getSimple(Operation.Value.MATVIEW_TABLE).getStringValue());
      valueMap.put(Operation.Value.INVALIDATE_MATVIEW, configuration
          .getSimple(Operation.Value.INVALIDATE_MATVIEW)
          .getBooleanValue());
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.teiid.rhq.plugin.Facet#getAvailability()
   */
  @Override
  public AvailabilityType getAvailability() {
    // TODO Remove vdb version after no longer viable in Teiid
    String version = this.resourceConfiguration.getSimpleValue("version",
        null);
    String status = DQPManagementView.getVDBStatus(getConnection(),
        this.name);
    if (status.equals("ACTIVE")) {
      return AvailabilityType.UP;
    }

    return AvailabilityType.DOWN;
  }

  @Override
  protected void setMetricArguments(String name, Configuration configuration,
      Map<String, Object> valueMap) {
    // Parameter logic for VDB Metrics
    String key = VDB.NAME;
    valueMap.put(key, this.name);
  }

  @Override
  public void getValues(MeasurementReport report,
      Set<MeasurementScheduleRequest> requests) throws Exception {

    DQPManagementView view = new DQPManagementView();

    Map<String, Object> valueMap = new HashMap<String, Object>();
    setMetricArguments(VDB.NAME, null, valueMap);

    for (MeasurementScheduleRequest request : requests) {
      String name = request.getName();
      LOG.debug("Measurement name = " + name); //$NON-NLS-1$

      Object metricReturnObject = view.getMetric(getConnection(),
          getComponentType(), this.getComponentIdentifier(), name,
          valueMap);

      try {
        if (request.getName().equals(
            PluginConstants.ComponentType.VDB.Metrics.ERROR_COUNT)) {
          String message = "";
          if (((Integer) metricReturnObject) > 0) {
            message = "** There are "
                + ((Integer) metricReturnObject)
                + " errors reported for this VDB. See the Configuration tab for details. **";
          } else {
            message = "** There are no errors reported for this VDB. **";
          }

          report.addData(new MeasurementDataTrait(request, message));
        } else {
          if (request
              .getName()
              .equals(
                  PluginConstants.ComponentType.VDB.Metrics.QUERY_COUNT)) {
            report.addData(new MeasurementDataTrait(request,
                (String) metricReturnObject));
          } else {
            if (request
                .getName()
                .equals(
                    PluginConstants.ComponentType.VDB.Metrics.SESSION_COUNT)) {
              report.addData(new MeasurementDataNumeric(request,
                  (Double) metricReturnObject));
            } else {
              if (request
                  .getName()
                  .equals(
                      PluginConstants.ComponentType.VDB.Metrics.STATUS)) {
                if (((String) metricReturnObject)
                    .equals("ACTIVE")) {
                  report.addData(new MeasurementDataTrait(
                      request, "UP"));
                } else {
                  report.addData(new MeasurementDataTrait(
                      request, "DOWN"));
                }
              } else {
                if (request
                    .getName()
                    .equals(
                        PluginConstants.ComponentType.VDB.Metrics.LONG_RUNNING_QUERIES)) {
                  report.addData(new MeasurementDataNumeric(
                      request,
                      (Double) metricReturnObject));
                }
              }

            }
          }
        }

      } catch (Exception e) {
        LOG.error("Failed to obtain measurement [" + name //$NON-NLS-1$
            + "]. Cause: " + e); //$NON-NLS-1$
        // throw(e);
      }
    }

  }

  @Override
  String getComponentType() {
    return PluginConstants.ComponentType.VDB.NAME;
  }

  /**
   * The plugin container will call this method when it has a new
   * configuration for your managed resource. Your plugin will re-configure
   * the managed resource in your own custom way, setting its configuration
   * based on the new values of the given configuration.
   *
   * @see ConfigurationFacet#updateResourceConfiguration(ConfigurationUpdateReport)
   */
  public void updateResourceConfiguration(ConfigurationUpdateReport report) {

    Configuration resourceConfig = report.getConfiguration();
    resourceConfiguration = resourceConfig.deepCopy();

    // First update simple properties
    super.updateResourceConfiguration(report);

    // Then update models
    ManagementView managementView = null;
    ComponentType componentType = new ComponentType(
        PluginConstants.ComponentType.VDB.TYPE,
        PluginConstants.ComponentType.VDB.SUBTYPE);

    ManagedComponent managedComponent = null;
    CollectionValueSupport modelsMetaValue = null;
    report.setStatus(ConfigurationUpdateStatus.SUCCESS);
    try {

      managementView = getConnection().getManagementView();
      managedComponent = managementView.getComponent(this.name,
          componentType);
      modelsMetaValue = (CollectionValueSupport) managedComponent
          .getProperty("models").getValue();
      GenericValue[] models = (GenericValue[]) modelsMetaValue
          .getElements();
      List<Property> multiSourceModelsPropertyList = resourceConfiguration
          .getList("multiSourceModels").getList();
      List<Property> singleSourceModelsPropertyList = resourceConfiguration
          .getList("singleSourceModels").getList();
      ArrayList<List<Property>> sourceMappingList = new ArrayList<List<Property>>();
      sourceMappingList.add(singleSourceModelsPropertyList);
      sourceMappingList.add(multiSourceModelsPropertyList);
      PropertyMap model = null;
      Iterator<List<Property>> sourceMappingListIterator = sourceMappingList
          .iterator();
      while (sourceMappingListIterator.hasNext()) {
        List<Property> sourceList = sourceMappingListIterator.next();
        for (int i = 0; i < sourceList.size(); i++) {
          model = (PropertyMap) sourceList.get(i);
          String sourceName = ((PropertySimple) model
              .get("sourceName")).getStringValue(); //$NON-NLS-1$
          if (sourceName.equals("See below"))
            continue; // This is a multisource model which we will
                  // handle separately
          String modelName = ((PropertySimple) model.get("name")) //$NON-NLS-1$
              .getStringValue();
          String dsName = ((PropertySimple) model.get("jndiName")) //$NON-NLS-1$
              .getStringValue();

          ManagedObject managedModel = null;
          if (models != null && models.length != 0) {
            for (GenericValue genValue : models) {
              ManagedObject mo = (ManagedObject) ((GenericValueSupport) genValue)
                  .getValue();
              String name = ProfileServiceUtil.getSimpleValue(mo,
                  "name", String.class); //$NON-NLS-1$
              if (modelName.equals(name)) {
                managedModel = mo;
                break;
              }
            }
          }

          ManagedProperty sourceMappings = null;
          if (managedModel != null) {

            sourceMappings = managedModel
                .getProperty("sourceMappings");//$NON-NLS-1$

            if (sourceMappings != null) {
              CollectionValueSupport mappings = (CollectionValueSupport) sourceMappings
                  .getValue();
              GenericValue[] mappingsArray = (GenericValue[]) mappings
                  .getElements();
              for (GenericValue sourceGenValue : mappingsArray) {
                ManagedObject sourceMo = (ManagedObject) ((GenericValueSupport) sourceGenValue)
                    .getValue();
                String sName = ProfileServiceUtil
                    .getSimpleValue(sourceMo,
                        "name", String.class);//$NON-NLS-1$
                if (sName.equals(sourceName)) {
                  // set the jndi name for the ds.
                  ManagedProperty jndiProperty = sourceMo
                      .getProperty("connectionJndiName"); //$NON-NLS-1$
                  jndiProperty
                      .setValue(ProfileServiceUtil.wrap(
                          SimpleMetaType.STRING,
                          dsName));
                  break;
                }
              }
            }
          }
        }
      }

      try {
        managementView.updateComponent(managedComponent);
        managementView.load();
      } catch (Exception e) {
        LOG.error("Unable to update component ["
            + managedComponent.getName() + "] of type "
            + componentType + ".", e);
        report.setStatus(ConfigurationUpdateStatus.FAILURE);
        report.setErrorMessageFromThrowable(e);
      }
    } catch (Exception e) {
      LOG.error("Unable to process update request", e);
      report.setStatus(ConfigurationUpdateStatus.FAILURE);
      report.setErrorMessageFromThrowable(e);
    }

  }

  @Override
  public Configuration loadResourceConfiguration() {

    ManagedComponent mcVdb = null;
    try {
      mcVdb = ProfileServiceUtil.getManagedComponent(getConnection(),
          new org.jboss.managed.api.ComponentType(
              PluginConstants.ComponentType.VDB.TYPE,
              PluginConstants.ComponentType.VDB.SUBTYPE),
          this.name);
    } catch (NamingException e) {
      final String msg = "NamingException in loadResourceConfiguration(): " + e.getExplanation(); //$NON-NLS-1$
      LOG.error(msg, e);
    } catch (Exception e) {
      final String msg = "Exception in loadResourceConfiguration(): " + e.getMessage(); //$NON-NLS-1$
      LOG.error(msg, e);
    }

    String vdbName = ProfileServiceUtil.getSimpleValue(mcVdb, "name",
        String.class);
    Integer vdbVersion = ProfileServiceUtil.getSimpleValue(mcVdb,
        "version", Integer.class);
    String vdbDescription = ProfileServiceUtil.getSimpleValue(mcVdb,
        "description", String.class);
    String vdbStatus = ProfileServiceUtil.getSimpleValue(mcVdb, "status",
        String.class);
    String connectionType = ProfileServiceUtil.getSimpleValue(mcVdb,
        "connectionType", String.class);
    String vdbURL = ProfileServiceUtil.getSimpleValue(mcVdb, "url",
        String.class);

    // Get plugin config map for models
    Configuration configuration = resourceContext.getPluginConfiguration();

    configuration.put(new PropertySimple("name", vdbName));
    configuration.put(new PropertySimple("version", vdbVersion));
    configuration.put(new PropertySimple("description", vdbDescription));
    configuration.put(new PropertySimple("status", vdbStatus));
    configuration.put(new PropertySimple("url", vdbURL));
    configuration.put(new PropertySimple("connectionType", connectionType));

    try {
      getTranslators(mcVdb, configuration);
    } catch (Exception e) {
      final String msg = "Exception in loadResourceConfiguration(): " + e.getMessage(); //$NON-NLS-1$
      LOG.error(msg, e);
    }

    getModels(mcVdb, configuration);

    return configuration;

  }

  @Override
  public CreateResourceReport createResource(
      CreateResourceReport createResourceReport) {

    createContentBasedResource(createResourceReport);
    return createResourceReport;
  }

  /**
   * @param mcVdb
   * @param configuration
   * @throws Exception
   */
  private void getModels(ManagedComponent mcVdb, Configuration configuration) {
    // Get models from VDB
    ManagedProperty property = mcVdb.getProperty("models");
    CollectionValueSupport valueSupport = (CollectionValueSupport) property
        .getValue();
    MetaValue[] metaValues = valueSupport.getElements();

    PropertyList sourceModelsList = new PropertyList("singleSourceModels");
    configuration.put(sourceModelsList);

    PropertyList multiSourceModelsList = new PropertyList(
        "multiSourceModels");
    configuration.put(multiSourceModelsList);

    PropertyList logicalModelsList = new PropertyList("logicalModels");
    configuration.put(logicalModelsList);

    PropertyList errorList = new PropertyList("errorList");
    configuration.put(errorList);

    for (MetaValue value : metaValues) {
      GenericValueSupport genValueSupport = (GenericValueSupport) value;
      ManagedObjectImpl managedObject = (ManagedObjectImpl) genValueSupport
          .getValue();

      Boolean isSource = Boolean.TRUE;
      try {
        isSource = ProfileServiceUtil.booleanValue(managedObject
            .getProperty("source").getValue());
      } catch (Exception e) {
        LOG.error(e.getMessage());
      }

      Boolean supportMultiSource = Boolean.TRUE;
      try {
        supportMultiSource = ProfileServiceUtil
            .booleanValue(managedObject.getProperty(
                "supportsMultiSourceBindings").getValue());
      } catch (Exception e) {
        LOG.error(e.getMessage());
      }

      String modelName = managedObject.getName();
      ManagedProperty connectorBinding = managedObject
          .getProperty("sourceMappings");
      Collection<Map<String, String>> sourceList = new ArrayList<Map<String, String>>();

      getSourceMappingValue(connectorBinding.getValue(), sourceList);

      String visibility = ((SimpleValueSupport) managedObject
          .getProperty("visible").getValue()).getValue().toString();
      String type = ((EnumValueSupport) managedObject.getProperty(
          "modelType").getValue()).getValue().toString();

      // Get any model errors/warnings
      MetaValue errors = managedObject.getProperty("errors").getValue();
      if (errors != null) {
        CollectionValueSupport errorValueSupport = (CollectionValueSupport) errors;
        MetaValue[] errorArray = errorValueSupport.getElements();

        for (MetaValue error : errorArray) {
          GenericValueSupport errorGenValueSupport = (GenericValueSupport) error;

          ManagedObject errorMo = (ManagedObject) errorGenValueSupport
              .getValue();
          String severity = ((SimpleValue) errorMo.getProperty(
              "severity").getValue()).getValue().toString();
          String message = ((SimpleValue) errorMo
              .getProperty("value").getValue()).getValue()
              .toString();

          PropertyMap errorMap = new PropertyMap("errorMap",
              new PropertySimple("severity", severity),
              new PropertySimple("message", message));
          errorList.add(errorMap);
        }
      }

      for (Map<String, String> sourceMap : sourceList) {

        if (isSource) {
          String sourceName = (String) sourceMap.get("name");
          String jndiName = (String) sourceMap.get("jndiName");
          String translatorName = (String) sourceMap
              .get("translatorName");
          PropertyMap multiSourceModel = null;

          PropertyMap model = null;
          if (supportMultiSource) {
            // TODO need to loop through multisource models
            multiSourceModel = new PropertyMap("map",
                new PropertySimple("name", modelName),
                new PropertySimple("sourceName", sourceName),
                new PropertySimple("jndiName", jndiName),
                new PropertySimple("translatorName",
                    translatorName));

            multiSourceModelsList.add(multiSourceModel);

            model = new PropertyMap("map", new PropertySimple(
                "name", modelName), new PropertySimple(
                "sourceName", "See below"), new PropertySimple(
                "jndiName", "See below"), new PropertySimple(
                "translatorName", "See below"),
                new PropertySimple("visibility", visibility),
                new PropertySimple("supportsMultiSource", true));
            sourceModelsList.add(model);
          } else {
            model = new PropertyMap("map", new PropertySimple(
                "name", modelName), new PropertySimple(
                "sourceName", sourceName), new PropertySimple(
                "jndiName", jndiName), new PropertySimple(
                "translatorName", translatorName),
                new PropertySimple("visibility", visibility),
                new PropertySimple("supportsMultiSource",
                    supportMultiSource));
            sourceModelsList.add(model);
          }
        } else {
          PropertyMap model = new PropertyMap("map",
              new PropertySimple("name", modelName),
              new PropertySimple("type", type),
              new PropertySimple("visibility", visibility));

          logicalModelsList.add(model);
        }
      }
    }
  }

  /**
   * @param <T>
   * @param pValue
   * @param list
   */
  public static <T> void getSourceMappingValue(MetaValue pValue,
      Collection<Map<String, String>> list) {
    Map<String, String> map = new HashMap<String, String>();
    list.add(map);
    MetaType metaType = pValue.getMetaType();
    if (metaType.isCollection()) {
      for (MetaValue value : ((CollectionValueSupport) pValue)
          .getElements()) {
        GenericValueSupport genValue = ((GenericValueSupport) value);
        ManagedObject mo = (ManagedObject) genValue.getValue();
        String sourceName = mo.getName();
        String jndi = ((SimpleValue) mo.getProperty(
            "connectionJndiName").getValue()).getValue().toString();
        String translatorName = ((SimpleValue) mo.getProperty(
            "translatorName").getValue()).getValue().toString();
        map.put("name", sourceName);
        map.put("jndiName", jndi);
        map.put("translatorName", translatorName);
      }
    } else {
      throw new IllegalStateException(pValue
          + " is not a Collection type");
    }
  }

  /**
   * @param mcVdb
   * @param configuration
   * @throws Exception
   */
  private void getTranslators(ManagedComponent mcVdb,
      Configuration configuration) throws Exception {
    // Get models from VDB
    ManagedProperty property = mcVdb.getProperty("overrideTranslators");
    if (property == null) {
      return;
    }
    CollectionValueSupport valueSupport = (CollectionValueSupport) property
        .getValue();
    MetaValue[] metaValues = valueSupport.getElements();

    PropertyList translatorsList = new PropertyList("translators");
    configuration.put(translatorsList);

    for (MetaValue value : metaValues) {
      GenericValueSupport genValueSupport = (GenericValueSupport) value;
      ManagedObjectImpl managedObject = (ManagedObjectImpl) genValueSupport
          .getValue();

      String translatorName = ProfileServiceUtil.getSimpleValue(
          managedObject, "name", String.class);
      String translatorType = ProfileServiceUtil.getSimpleValue(
          managedObject, "type", String.class);
      ManagedProperty properties = managedObject.getProperty("property");

      if (properties != null) {
        CollectionValueSupport props = (CollectionValueSupport) properties
            .getValue();
        for (MetaValue propertyMetaData : props) {
          String propertyName = ProfileServiceUtil
              .stringValue(((CompositeValueSupport) propertyMetaData)
                  .get("name"));
          String propertyValue = ProfileServiceUtil
              .stringValue(((CompositeValueSupport) propertyMetaData)
                  .get("value"));
          PropertyMap translatorMap = null;

          translatorMap = new PropertyMap("translatorMap",
              new PropertySimple("name", translatorName),
              new PropertySimple("type", translatorType),
              new PropertySimple("propertyName", propertyName),
              new PropertySimple("propertyValue", propertyValue));
          // Only want translator name and value to show up for the
          // first row,
          // so we will blank them out here.
          translatorName = "";
          translatorType = "";
          translatorsList.add(translatorMap);
        }
      }
    }
  }

  /**
   * @param <T>
   * @param pValue
   * @param list
   */
  public static <T> void getPropertyValues(MetaValue pValue,
      Collection<Map<String, String>> list) {
    Map<String, String> map = new HashMap<String, String>();
    list.add(map);
    MetaType metaType = pValue.getMetaType();
    if (metaType.isCollection()) {
      for (MetaValue value : ((CollectionValueSupport) pValue)
          .getElements()) {
        CompositeValueSupport compValue = ((CompositeValueSupport) value);
        for (MetaValue propValue : compValue.values()) {
          String propertyName = ((CompositeValueSupport) propValue)
              .get("name").toString();
          String propertyValue = ((CompositeValueSupport) propValue)
              .get("value").toString();
          map.put("name", propertyName);
          map.put("value", propertyValue);
        }
      }
    } else {
      throw new IllegalStateException(pValue
          + " is not a Collection type");
    }
  }

  @Override
  public ProfileServiceConnection getConnection() {
    return ((PlatformComponent) this.resourceContext
        .getParentResourceComponent()).getConnection();
  }

  @Override
  public EmsConnection getEmsConnection() {
    // TODO Auto-generated method stub
    return null;
  }

}
TOP

Related Classes of org.teiid.rhq.plugin.VDBComponent

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.