Package org.platformlayer.ops.machines

Source Code of org.platformlayer.ops.machines.ServiceProviderHelpers

package org.platformlayer.ops.machines;

import java.util.List;

import javax.inject.Inject;

import org.platformlayer.core.model.ItemBase;
import org.platformlayer.core.model.PlatformLayerKey;
import org.platformlayer.core.model.ServiceInfo;
import org.platformlayer.ids.ItemType;
import org.platformlayer.ids.ServiceType;
import org.platformlayer.ops.OpsContext;
import org.platformlayer.xaas.services.ModelClass;
import org.platformlayer.xaas.services.ServiceProvider;
import org.platformlayer.xaas.services.ServiceProviderDictionary;
import org.platformlayer.xml.XmlHelper.ElementInfo;

import com.google.common.collect.Lists;

public class ServiceProviderHelpers {
  @Inject
  ServiceProviderDictionary serviceProviderDictionary;

  public <T extends ItemBase> List<ModelClass<? extends T>> getModelSubclasses(Class<T> parent) {
    List<ModelClass<? extends T>> modelClasses = Lists.newArrayList();

    for (ServiceInfo serviceInfo : serviceProviderDictionary.getAllServices()) {
      ServiceType serviceType = new ServiceType(serviceInfo.serviceType);
      ServiceProvider serviceProvider = serviceProviderDictionary.getServiceProvider(serviceType);

      for (ModelClass<?> modelClass : serviceProvider.getModels().all()) {
        Class<?> javaClass = modelClass.getJavaClass();
        if (parent.isAssignableFrom(javaClass)) {
          modelClasses.add((ModelClass<? extends T>) modelClass);
        }
      }
    }

    return modelClasses;
  }

  public ServiceType getServiceType(Class<? extends ItemBase> itemType) {
    ModelClass<?> modelClass = serviceProviderDictionary.getModelClass(itemType);
    return modelClass.getServiceType();
  }

  public ModelClass<?> getModelClass(String namespaceUri, String nodeName) {
    ServiceProvider serviceProvider = serviceProviderDictionary.getServiceProviderForNamespace(namespaceUri);

    if (serviceProvider == null) {
      throw new IllegalArgumentException("Unknown namespace: " + namespaceUri);
    }

    ModelClass<?> modelClass = null;
    for (ModelClass<?> modelClassCandidate : serviceProvider.getModels().all()) {
      if (nodeName.equals(modelClassCandidate.getXmlElementName())) {
        modelClass = modelClassCandidate;
        break;
      }
    }

    if (modelClass == null) {
      throw new IllegalArgumentException("Unknown element name: " + nodeName);
    }

    return modelClass;
  }

  public ModelClass<?> getModelClass(PlatformLayerKey platformLayerKey) {
    OpsContext ops = OpsContext.get();
    ServiceProviderDictionary serviceProviderDictionary = ops.getInjector().getInstance(
        ServiceProviderDictionary.class);

    ServiceType serviceType = platformLayerKey.getServiceType();
    ItemType itemType = platformLayerKey.getItemType();

    ServiceProvider serviceProvider = serviceProviderDictionary.getServiceProvider(serviceType);
    if (serviceProvider == null) {
      throw new IllegalArgumentException();
    }
    ModelClass<?> modelClass = serviceProvider.getModelClass(itemType);
    if (modelClass == null) {
      throw new IllegalArgumentException();
    }
    return modelClass;
  }

  public ModelClass<?> getModelClass(ElementInfo xmlElementInfo) {
    return getModelClass(xmlElementInfo.namespace, xmlElementInfo.elementName);
  }

  public ItemBase toModelType(ModelClass<?> modelClass, ItemBase item) {
    Class<?> targetClass = modelClass.getJavaClass();
    if (targetClass.equals(item.getClass())) {
      return item;
    }

    // TODO: Serialize to XML, then deserialize to desired type
    throw new UnsupportedOperationException();
  }

}
TOP

Related Classes of org.platformlayer.ops.machines.ServiceProviderHelpers

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.