Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.eclipse.emf.texo.resolver;
  
  import java.util.HashMap;
  import java.util.Map;
  
  import  org.eclipse.emf.common.util.URI;
  import  org.eclipse.emf.ecore.EAttribute;
  import  org.eclipse.emf.ecore.EClass;
  import  org.eclipse.emf.ecore.EObject;
 import  org.eclipse.emf.ecore.EcorePackage;
 import  org.eclipse.emf.ecore.InternalEObject;
 import  org.eclipse.emf.ecore.util.EcoreUtil;
Default implementation of the object resolver.

Author(s):
Martin Taal
 
 public class DefaultObjectResolver implements ObjectResolverTexoComponent {
   private static String serverUri = null;
 
   public static void setServerUri(String uri) {
      = uri;
   }
 
   public static String getServerUri() {
     return ;
   }
 
   private Map<String, EObject> uriEObjectMap = new HashMap<String, EObject>();
 
   private URI uri = null;
 
   private boolean useWebServiceUriFormat = false;
 
   private int childLevels = -1;
 
   public void clearCache() {
     .clear();
   }
 
   public void addToCache(String uriString, EObject eObject) {
     .put(uriStringeObject);
   }
 
   public void addToCache(EObject eObject) {
     final URI objectUri = toUri(eObject);
 
     // can happen if an object does not have an id eattribute
     if (objectUri != null) {
       .put(objectUri.toString(), eObject);
     }
   }

  

Returns:
the uniquely identifying uri of this object store
 
   public URI getUri() {
     if ( == null) {
       if (getServerUri() != null) {
          = URI.createURI(getServerUri());
       } else {
          = URI.createURI("http://www.eclipse.org/texo"); //$NON-NLS-1$
       }
     }
     return appendParameters();
   }

  
Sets the uniquely identifying uri of this object store.

Parameters:
uri
 
   public void setUri(URI uri) {
     this. = uri;
   }
 
   public void setUri(String uriString) {
      = URI.createURI(uriString);
   }
 
   /*
    * (non-Javadoc)
    * 
    * @see org.eclipse.emf.texo.xml.ObjectResolver#resolveToEObject(java.lang.Object)
    */
   public EObject resolveToEObject(Object object) {
     final URI toUri = toUri(object);
     if (toUri != null) {
      final EObject eObject = .get(toUri.toString());
      if (eObject != null) {
        return eObject;
      }
    }
    final ModelObject<?> modelObject = ModelResolver.getInstance().getModelObject(object);
    final EClass eClass = modelObject.eClass();
    final EObject eObject = EcoreUtil.create(eClass);
    if (toUri != null) {
      .put(toUri.toString(), eObject);
    }
    return eObject;
  }
  /*
   * (non-Javadoc)
   * 
   * @see org.eclipse.emf.texo.xml.ObjectResolver#resolveFromEObject(org.eclipse.emf.ecore.EObject)
   */
  public Object resolveFromEObject(EObject eObject) {
    final URI proxyUri = ((InternalEObject) eObject).eProxyURI();
    if (proxyUri != null) {
      // store in our map for later usage
      .put(proxyUri.toString(), eObject);
      final String fragment = proxyUri.fragment();
      if (fragment != null) {
        final boolean localRef = fragment.startsWith("/"); //$NON-NLS-1$
        if (!localRef) {
          return fromUri(proxyUri);
        }
      }
    }
    if (eObject.eClass() == EcorePackage.eINSTANCE.getEObject()) {
      // TODO: check this should maybe be moved to a factory
      // or to a new DynamicModelPackage
      final DynamicModelObject modelObject = ComponentProvider.getInstance().newInstance(DynamicModelObject.class);
      modelObject.setEClass(eObject.eClass());
      return modelObject;
    }
    try {
      final EAttribute eAttribute = IdProvider.getInstance().getIdEAttribute(eObject.eClass());
      if (eObject.eGet(eAttribute) != null) {
        final Object target = get(eObject.eClass(), eObject.eGet(eAttribute));
        if (target != null) {
          return target;
        }
      }
    } catch (IllegalStateException e) {
      // ignore on purpose
    }
    final String nsUri = eObject.eClass().getEPackage().getNsURI();
    final ModelPackage modelPackage = ModelResolver.getInstance().getModelPackage(nsUri);
    if (modelPackage == null) {
      throw new IllegalStateException("ModelPackage with ns uri: " + nsUri //$NON-NLS-1$
          + " not found, did you initialize/touch the ModelPackage at application start?"); //$NON-NLS-1$
    }
    return modelPackage.getModelFactory().create(eObject.eClass());
  }
  /*
   * (non-Javadoc)
   * 
   * @see org.eclipse.emf.texo.store.ObjectURIResolver#toUri(java.lang.Object)
   */
  public URI toUri(Object object) {
    final String idString;
    final EClass eClass;
    if (object instanceof EObject) {
      final EObject eObject = (EObject) object;
      final URI proxyURI = ((InternalEObject) eObject).eProxyURI();
      if (proxyURI != null && ModelUtils.isTempURI(proxyURI.toString())) {
        return proxyURI;
      }
      eClass = eObject.eClass();
      if (!IdProvider.getInstance().hasIdEAttribute(eClass)) {
        return null;
      }
      idString = IdProvider.getInstance().getIdAsString(eObject);
      if (idString == null || idString.trim().length() == 0) {
        return null;
      }
    } else {
      final ModelObject<?> modelObject = ModelResolver.getInstance().getModelObject(object);
      if (!IdProvider.getInstance().hasIdEAttribute(modelObject)) {
        return null;
      }
      idString = IdProvider.getInstance().getIdAsString(modelObject);
      if (idString == null || idString.trim().length() == 0) {
        return null;
      }
      eClass = modelObject.eClass();
    }
    if (isUseWebServiceUriFormat()) {
      // append a fragment to make sure that EMF correctly handles the id
      return getUri().appendSegment(ModelUtils.getQualifiedNameFromEClass(eClass)).appendSegment(idString)
          .appendFragment(""); //$NON-NLS-1$
    }
    return getUri().appendFragment(
        ModelUtils.getQualifiedNameFromEClass(eClass) + . + idString);
  }

  
Create an uri on the basis of the type and the id value.
  public URI toURI(EClass eClassString idString) {
    if (isUseWebServiceUriFormat()) {
      // append a fragment to make sure that EMF correctly handles the id
      return getUri().appendSegment(ModelUtils.getQualifiedNameFromEClass(eClass)).appendSegment(idString)
          .appendFragment("").trimQuery(); //$NON-NLS-1$
    }
    return getUri().appendFragment(
        ModelUtils.getQualifiedNameFromEClass(eClass) + . + idString);
  }
  protected URI appendParameters(URI localUri) {
    if (getChildLevels() > 0) {
      return localUri.appendQuery(. + "=" + getChildLevels()); //$NON-NLS-1$
    }
    return localUri;
  }
  /*
   * (non-Javadoc)
   * 
   * @see org.eclipse.emf.texo.store.ObjectURIResolver#fromUri(org.eclipse.emf.common.util.URI)
   */
  public Object fromUri(URI objectUri) {
    if (ModelUtils.isTempURI(objectUri.toString())) {
      final EObject eObject = getEObject(objectUri);
      if (eObject == null) {
        return null;
      }
      return get(eObject.eClass(), null);
    }
    final TypeIdTuple tuple = ModelUtils.getTypeAndIdFromUri(isUseWebServiceUriFormat(), objectUri);
    return get(tuple.getEClass(), tuple.getId());
  }
  public EObject getEObject(URI objectUri) {
    EObject eObject = .get(objectUri.toString());
    if (eObject == null) {
      return null;
    }
    return eObject;
  }
  public void removeFromCache(URI objectUri) {
    .remove(objectUri.toString());
  }

  
In this implementation creates a new model object instance. Must be overridden by specific implementations to return an EObject or read objects from a data base.
  public Object get(EClass eClassObject id) {
    final Object target = ModelResolver.getInstance().create(eClass);
    final ModelObject<?> modelObject = ModelResolver.getInstance().getModelObject(target);
    modelObject.eSet(IdProvider.getInstance().getIdEAttribute(eClass), id);
    return target;
  }

  
If true then this uri resolver will generate and parse uris of the form: http://localhost:8080/texo/wsxml/Library/1 So the EClass name and id are appended at the end with the forward slash as separator.
  public boolean isUseWebServiceUriFormat() {
    return ;
  }
  public void setUseWebServiceUriFormat(boolean useWebServiceUriFormat) {
    this. = useWebServiceUriFormat;
  }
  public int getChildLevels() {
    return ;
  }
  public void setChildLevels(int childLevels) {
    this. = childLevels;
  }
New to GrepCode? Check out our FAQ X