org.eclipse.ocl.examples.xtext.base.cs2pivot
Class CS2PivotConversion

java.lang.Object
  extended by org.eclipse.emf.ecore.util.EcoreUtil
      extended by org.eclipse.ocl.examples.pivot.utilities.AbstractConversion
          extended by org.eclipse.ocl.examples.pivot.context.AbstractBase2PivotConversion
              extended by org.eclipse.ocl.examples.xtext.base.cs2pivot.CS2PivotConversion
All Implemented Interfaces:
Base2PivotConversion

public class CS2PivotConversion
extends AbstractBase2PivotConversion


Nested Class Summary
static class CS2PivotConversion.CacheKey<T>
           
 
Nested classes/interfaces inherited from class org.eclipse.ocl.examples.pivot.utilities.AbstractConversion
AbstractConversion.Predicate<T extends org.eclipse.emf.ecore.EObject>
 
Nested classes/interfaces inherited from class org.eclipse.emf.ecore.util.EcoreUtil
org.eclipse.emf.ecore.util.EcoreUtil.AbstractFilteredSettingsIterator<E>, org.eclipse.emf.ecore.util.EcoreUtil.ContentTreeIterator<E>, org.eclipse.emf.ecore.util.EcoreUtil.Copier, org.eclipse.emf.ecore.util.EcoreUtil.CrossReferencer, org.eclipse.emf.ecore.util.EcoreUtil.EGenericTypeConverter, org.eclipse.emf.ecore.util.EcoreUtil.EqualityHelper, org.eclipse.emf.ecore.util.EcoreUtil.ExternalCrossReferencer, org.eclipse.emf.ecore.util.EcoreUtil.FilteredSettingsIterator, org.eclipse.emf.ecore.util.EcoreUtil.ProperContentIterator<E>, org.eclipse.emf.ecore.util.EcoreUtil.ProxyCrossReferencer, org.eclipse.emf.ecore.util.EcoreUtil.UnresolvedProxyCrossReferencer, org.eclipse.emf.ecore.util.EcoreUtil.UsageCrossReferencer
 
Field Summary
static TracingOption CONTINUATION
           
protected  CS2Pivot converter
           
protected  java.util.Collection<? extends org.eclipse.emf.ecore.resource.Resource> csResources
           
 
Fields inherited from class org.eclipse.ocl.examples.pivot.utilities.AbstractConversion
metaModelManager
 
Fields inherited from class org.eclipse.emf.ecore.util.EcoreUtil
GEN_MODEL_PACKAGE_NS_URI, GET, IS_SET, SET, UNSET
 
Constructor Summary
CS2PivotConversion(CS2Pivot converter, org.eclipse.xtext.diagnostics.IDiagnosticConsumer diagnosticsConsumer, java.util.Collection<? extends org.eclipse.emf.ecore.resource.Resource> csResources)
           
 
Method Summary
 OCLExpression addBadExpressionError(ModelElementCS csElement, java.lang.String boundMessage)
           
 void addDiagnostic(ElementCS csElement, java.lang.String boundMessage)
           
 void addDiagnostic(ModelElementCS csElement, org.eclipse.emf.common.util.Diagnostic diagnostic)
           
 void addWarning(ModelElementCS csElement, java.lang.String message, java.lang.Object... bindings)
           
 java.lang.String bind(org.eclipse.emf.ecore.EObject csContext, java.lang.String messageTemplate, java.lang.Object... bindings)
           
 boolean checkForNoErrors(java.util.Collection<? extends org.eclipse.emf.ecore.resource.Resource> csResources)
           
 Dependency createTypeIsReferenceableDependency(TypeRefCS csTemplateParameter)
           
protected  void diagnoseContinuationFailure(java.util.List<BasicContinuation<?>> continuations)
           
 void garbageCollect(java.util.Map<? extends org.eclipse.emf.ecore.resource.Resource,? extends org.eclipse.emf.ecore.resource.Resource> cs2pivotResourceMap)
          Prune the pivots to eliminate: - redundant orphans - e.g.
protected  void gatherNewPackage(java.util.Set<Package> newPackages, org.eclipse.emf.ecore.EObject pivot)
           
protected  void gatherNewPackages(java.util.Set<Package> newPackages, org.eclipse.emf.ecore.resource.Resource csResource)
          Add any packages and nested packages pivoted by csResource to newPackages.
protected  void gatherOldPackages(java.util.List<? extends org.eclipse.emf.ecore.EObject> eObjects)
          Add any packages and nested packages in eObjects to oldPackages.
 CS2Pivot getConverter()
           
<T> T
getIntermediate(CS2PivotConversion.CacheKey<T> key)
           
 MetaModelManager getMetaModelManager()
           
 Package getOldPackageByQualifiedName(PackageCS csElement)
           
 Package getOldPackageBySimpleName(java.lang.String name)
           
protected  java.lang.String getQualifiedName(java.lang.StringBuilder s, Package pkg)
           
protected  java.lang.String getQualifiedName(java.lang.StringBuilder s, PackageCS csPackage)
           
protected  java.util.List<TemplateBindingCS> getTemplateBindings(ElementCS csElement)
           
protected  java.util.List<TemplateSignature> getTemplateSignatures(Element pivotElement)
           
 InterDependency<BasePreOrderVisitor.TemplateSignatureContinuation> getTypesHaveSignaturesInterDependency()
           
 void handleVisitNamedElement(NamedElementCS csNamedElement, NamedElement pivotElement)
           
 void installPivotReference(ElementRefCS csElement, Element newPivotElement, org.eclipse.emf.ecore.EReference eReference)
           
 void installPivotUsage(ModelElementCS csElement, Element newPivotElement)
           
protected  void installRootContents(org.eclipse.emf.ecore.resource.Resource csResource)
           
protected  java.util.List<BasicContinuation<?>> progressContinuations(java.util.List<BasicContinuation<?>> continuations)
          Invoke all of the continuations that can execute, returning the list of continuations till to perform, some of which may be ones that were blocked by unsatisfied dependencies, others of which may be further continuations resulting from only partial progress.
<T> T
putIntermediate(CS2PivotConversion.CacheKey<T> key, T object)
           
 void refreshComments(Element pivotElement, ElementCS csElement)
           
<T extends Element>
void
refreshList(java.lang.Class<T> pivotClass, java.util.List<T> pivotElements, java.util.List<? extends PivotableElementCS> csElements)
           
<T extends Element>
T
refreshModelElement(java.lang.Class<T> pivotClass, org.eclipse.emf.ecore.EClass pivotEClass, ModelElementCS csElement)
          Return a pivotEClass instance cast to pivotClass registered for csElement.getCSI().
<T extends Element>
void
refreshPivotList(java.lang.Class<T> pivotClass, java.util.List<? super T> pivotElements, java.util.List<? extends ModelElementCS> csElements)
           
 void refreshTemplateSignature(TemplateableElementCS csTemplateableElement, TemplateableElement pivotTemplateableElement)
           
protected  void resetPivotMappings(java.util.Collection<? extends org.eclipse.emf.ecore.resource.Resource> csResources)
           
 void setReferredIteration(LoopExp expression, Iteration iteration)
           
 void setReferredOperation(OperationCallExp expression, Operation operation)
           
protected  void specializeTemplateBindings(java.util.List<TemplateBinding> templateBindings, java.util.List<TemplateSignature> templateSignatures, java.util.List<TemplateBindingCS> csTemplateBindings)
          Update a list of TemplateBinding to match a list of TemplateSignature by moving/adding/removing existing entries.
protected  void specializeTemplateParameterSubstitutions(java.util.List<TemplateParameterSubstitution> templateParameterSubstitutions, java.util.List<TemplateParameter> templateParameters, java.util.List<TemplateParameterSubstitutionCS> csTemplateParameterSubstitutions)
          Update a list of TemplateParameterSubstitution to match a list of TemplateParameter by moving/adding/removing existing entries.
protected  TemplateableElement specializeTemplates(TypedTypeRefCS csElement)
           
protected  java.lang.String trimComments(java.lang.String string)
          Remove the internal "* " that may result from a comment formatted in the style of this comment.
 boolean update()
          Sequence the update passes to make the pivot match the CS.
protected  void visitContainment(org.eclipse.emf.ecore.EObject eObject, java.util.List<BasicContinuation<?>> continuations)
           
protected  void visitInPostOrder(org.eclipse.emf.ecore.EObject eObject, java.util.List<BasicContinuation<?>> continuations)
           
protected  void visitInPreOrder(org.eclipse.emf.ecore.EObject eObject, java.util.List<BasicContinuation<?>> continuations)
           
<T extends Element>
T
visitLeft2Right(java.lang.Class<T> pivotClass, VisitableCS csObject)
           
 
Methods inherited from class org.eclipse.ocl.examples.pivot.context.AbstractBase2PivotConversion
addUnderspecifiedTypedElement, refreshName, resolveUnderspecifiedType, resolveUnderspecifiedTypes, setClassifierContext, setContextVariable, setOperationContext, setParameterVariables, setParameterVariables, setPropertyContext, setResultVariable, setType, setTypeWithMultiplicity
 
Methods inherited from class org.eclipse.ocl.examples.pivot.utilities.AbstractConversion
basicGet, getEPackage, isId, refreshList, refreshSet
 
Methods inherited from class org.eclipse.emf.ecore.util.EcoreUtil
computeDiagnostic, convertToString, copy, copyAll, create, createFromString, delete, delete, equals, equals, filterDescendants, freeze, generateUUID, generateUUID, getAdapter, getAdapterFactory, getAllContents, getAllContents, getAllContents, getAllContents, getAllContents, getAllProperContents, getAllProperContents, getAllProperContents, getAllProperContents, getAnnotation, getConstraints, getConversionDelegateFactory, getConversionDelegates, getDocumentation, getExistingAdapter, getID, getIdentification, getInvocationDelegateFactory, getInvocationDelegates, getObjectByType, getObjectsByType, getRegisteredAdapter, getRegisteredAdapter, getRootContainer, getRootContainer, getSettingDelegateFactory, getSettingDelegates, getURI, getValidationDelegates, indexOf, isAncestor, isAncestor, isAncestor, isAncestor, isInvariant, isSuppressedVisibility, isSuppressedVisibility, remove, remove, remove, replace, replace, replace, resolve, resolve, resolve, resolveAll, resolveAll, resolveAll, setAnnotation, setConstraints, setConversionDelegates, setDocumentation, setEList, setEList, setID, setInvocationDelegates, setSettingDelegates, setSuppressedVisibility, setSuppressedVisibility, setValidationDelegates, toJavaInstanceTypeName, wrapperClassFor
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

CONTINUATION

public static final TracingOption CONTINUATION

converter

protected final CS2Pivot converter

csResources

protected final java.util.Collection<? extends org.eclipse.emf.ecore.resource.Resource> csResources
Constructor Detail

CS2PivotConversion

public CS2PivotConversion(CS2Pivot converter,
                          org.eclipse.xtext.diagnostics.IDiagnosticConsumer diagnosticsConsumer,
                          java.util.Collection<? extends org.eclipse.emf.ecore.resource.Resource> csResources)
Method Detail

addBadExpressionError

public OCLExpression addBadExpressionError(ModelElementCS csElement,
                                           java.lang.String boundMessage)

addDiagnostic

public void addDiagnostic(ModelElementCS csElement,
                          org.eclipse.emf.common.util.Diagnostic diagnostic)

addDiagnostic

public void addDiagnostic(ElementCS csElement,
                          java.lang.String boundMessage)

addWarning

public void addWarning(ModelElementCS csElement,
                       java.lang.String message,
                       java.lang.Object... bindings)

bind

public java.lang.String bind(org.eclipse.emf.ecore.EObject csContext,
                             java.lang.String messageTemplate,
                             java.lang.Object... bindings)

checkForNoErrors

public boolean checkForNoErrors(java.util.Collection<? extends org.eclipse.emf.ecore.resource.Resource> csResources)

createTypeIsReferenceableDependency

public Dependency createTypeIsReferenceableDependency(TypeRefCS csTemplateParameter)

diagnoseContinuationFailure

protected void diagnoseContinuationFailure(java.util.List<BasicContinuation<?>> continuations)

garbageCollect

public void garbageCollect(java.util.Map<? extends org.eclipse.emf.ecore.resource.Resource,? extends org.eclipse.emf.ecore.resource.Resource> cs2pivotResourceMap)
Prune the pivots to eliminate: - redundant orphans - e.g. obsolete specializations - redundant elements - e.g. pivots that are not needed as a result of a CS update - dependent caches that reference any of the above Wanted pivot elements are - all elements in all libraries - all elements locked via MetaModelManager.addLockedElement() - all elements transitively in/referenced from the above - all elements referenced by incoming CS resources - all elements in all incoming pivot resources - except pivot resources mapped to incoming CS resources this is what we're cleaning up


gatherNewPackage

protected void gatherNewPackage(java.util.Set<Package> newPackages,
                                org.eclipse.emf.ecore.EObject pivot)

gatherNewPackages

protected void gatherNewPackages(java.util.Set<Package> newPackages,
                                 org.eclipse.emf.ecore.resource.Resource csResource)
Add any packages and nested packages pivoted by csResource to newPackages. This is invoked at the end of an update to identify redundant packages.


gatherOldPackages

protected void gatherOldPackages(java.util.List<? extends org.eclipse.emf.ecore.EObject> eObjects)
Add any packages and nested packages in eObjects to oldPackages. This is invoked at the start of an update to cache the packages for re-use.


getConverter

public final CS2Pivot getConverter()

getIntermediate

public <T> T getIntermediate(CS2PivotConversion.CacheKey<T> key)

getMetaModelManager

public final MetaModelManager getMetaModelManager()

getOldPackageByQualifiedName

public Package getOldPackageByQualifiedName(PackageCS csElement)

getOldPackageBySimpleName

public Package getOldPackageBySimpleName(java.lang.String name)

getQualifiedName

protected java.lang.String getQualifiedName(java.lang.StringBuilder s,
                                            Package pkg)

getQualifiedName

protected java.lang.String getQualifiedName(java.lang.StringBuilder s,
                                            PackageCS csPackage)

getTemplateBindings

protected java.util.List<TemplateBindingCS> getTemplateBindings(ElementCS csElement)

getTemplateSignatures

protected java.util.List<TemplateSignature> getTemplateSignatures(Element pivotElement)

getTypesHaveSignaturesInterDependency

public InterDependency<BasePreOrderVisitor.TemplateSignatureContinuation> getTypesHaveSignaturesInterDependency()

handleVisitNamedElement

public void handleVisitNamedElement(NamedElementCS csNamedElement,
                                    NamedElement pivotElement)

installPivotReference

public void installPivotReference(ElementRefCS csElement,
                                  Element newPivotElement,
                                  org.eclipse.emf.ecore.EReference eReference)

installPivotUsage

public void installPivotUsage(ModelElementCS csElement,
                              Element newPivotElement)

installRootContents

protected void installRootContents(org.eclipse.emf.ecore.resource.Resource csResource)

progressContinuations

protected java.util.List<BasicContinuation<?>> progressContinuations(java.util.List<BasicContinuation<?>> continuations)
Invoke all of the continuations that can execute, returning the list of continuations till to perform, some of which may be ones that were blocked by unsatisfied dependencies, others of which may be further continuations resulting from only partial progress. Returns null if none of the continuations could execute.

Parameters:
continuations -
Returns:
continuations still to perform, null if stuck.

putIntermediate

public <T> T putIntermediate(CS2PivotConversion.CacheKey<T> key,
                             T object)

refreshComments

public void refreshComments(Element pivotElement,
                            ElementCS csElement)

refreshList

public <T extends Element> void refreshList(java.lang.Class<T> pivotClass,
                                            java.util.List<T> pivotElements,
                                            java.util.List<? extends PivotableElementCS> csElements)

refreshModelElement

public <T extends Element> T refreshModelElement(java.lang.Class<T> pivotClass,
                                                 org.eclipse.emf.ecore.EClass pivotEClass,
                                                 ModelElementCS csElement)
Return a pivotEClass instance cast to pivotClass registered for csElement.getCSI().

An existing element is re-used else an new instance is created.

The pivot element is installed as the original object of csElement.

Type Parameters:
T -
Parameters:
pivotClass -
pivotEClass -
csElement -
Returns:

refreshPivotList

public <T extends Element> void refreshPivotList(java.lang.Class<T> pivotClass,
                                                 java.util.List<? super T> pivotElements,
                                                 java.util.List<? extends ModelElementCS> csElements)

refreshTemplateSignature

public void refreshTemplateSignature(TemplateableElementCS csTemplateableElement,
                                     TemplateableElement pivotTemplateableElement)

resetPivotMappings

protected void resetPivotMappings(java.util.Collection<? extends org.eclipse.emf.ecore.resource.Resource> csResources)

setReferredIteration

public void setReferredIteration(LoopExp expression,
                                 Iteration iteration)

setReferredOperation

public void setReferredOperation(OperationCallExp expression,
                                 Operation operation)

specializeTemplateBindings

protected void specializeTemplateBindings(java.util.List<TemplateBinding> templateBindings,
                                          java.util.List<TemplateSignature> templateSignatures,
                                          java.util.List<TemplateBindingCS> csTemplateBindings)
Update a list of TemplateBinding to match a list of TemplateSignature by moving/adding/removing existing entries. Once matched each TemplateBinding.signature references the corresponding TemplateSignature, and each TemplateBinding.parameterSubstitution.formal references the corresponding TemplateSignature.ownedParameter.

Parameters:
templateBindings -
templateSignatures -

specializeTemplateParameterSubstitutions

protected void specializeTemplateParameterSubstitutions(java.util.List<TemplateParameterSubstitution> templateParameterSubstitutions,
                                                        java.util.List<TemplateParameter> templateParameters,
                                                        java.util.List<TemplateParameterSubstitutionCS> csTemplateParameterSubstitutions)
Update a list of TemplateParameterSubstitution to match a list of TemplateParameter by moving/adding/removing existing entries. Once matched each TemplateParameterSubstitution.formal references the corresponding TemplateParameter.

Parameters:
eList -
templateSignature -
templateBinding -

specializeTemplates

protected TemplateableElement specializeTemplates(TypedTypeRefCS csElement)

trimComments

protected java.lang.String trimComments(java.lang.String string)
Remove the internal "* " that may result from a comment formatted in the style of this comment.

Parameters:
string -
Returns:

update

public boolean update()
Sequence the update passes to make the pivot match the CS.

Parameters:
csResources -

visitContainment

protected void visitContainment(org.eclipse.emf.ecore.EObject eObject,
                                java.util.List<BasicContinuation<?>> continuations)

visitLeft2Right

public <T extends Element> T visitLeft2Right(java.lang.Class<T> pivotClass,
                                             VisitableCS csObject)

visitInPostOrder

protected void visitInPostOrder(org.eclipse.emf.ecore.EObject eObject,
                                java.util.List<BasicContinuation<?>> continuations)

visitInPreOrder

protected void visitInPreOrder(org.eclipse.emf.ecore.EObject eObject,
                               java.util.List<BasicContinuation<?>> continuations)