/*******************************************************************************
* Copyright (c) 2012, 2015 Willink Transformations and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* E.D.Willink - Initial API and implementation
*******************************************************************************/
package org.eclipse.ocl.pivot.ids;
import java.util.Collection;
import java.util.Map;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.Enumerator;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.ETypedElement;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.pivot.CompleteEnvironment;
import org.eclipse.ocl.pivot.CompleteInheritance;
import org.eclipse.ocl.pivot.Element;
import org.eclipse.ocl.pivot.Operation;
import org.eclipse.ocl.pivot.Property;
import org.eclipse.ocl.pivot.StandardLibrary;
import org.eclipse.ocl.pivot.TupleType;
import org.eclipse.ocl.pivot.Type;
import org.eclipse.ocl.pivot.TypedElement;
import org.eclipse.ocl.pivot.values.BagValue;
import org.eclipse.ocl.pivot.values.CollectionValue;
import org.eclipse.ocl.pivot.values.MapValue;
import org.eclipse.ocl.pivot.values.OrderedSetValue;
import org.eclipse.ocl.pivot.values.SequenceValue;
import org.eclipse.ocl.pivot.values.SetValue;
/**
* IdResolver supports discovery/creation of rich Pivot-based objects from limited
* descriptors such as ElementIds, or from Ecore objects or from Java objects.
*/
public interface IdResolver extends IdVisitor<Element>
{
/**
* @since 1.1
*/
public interface IdResolverExtension extends IdResolver
{
org.eclipse.ocl.pivot.@Nullable Package basicGetPackage(@NonNull PackageId packageId);
@NonNull <T> EList<T> ecoreValueOfAll(@Nullable Class<T> instanceClass, @NonNull Iterable<? extends Object> values);
@Nullable Iterable<org.eclipse.ocl.pivot.@NonNull Class> getModelClassesOf(@NonNull Object value);
int oclHashCode(@Nullable Object anObject);
}
void addRoot(@NonNull EObject eObject);
@Nullable Object boxedValueOf(@Nullable Object unboxedValue);
@Nullable Object boxedValueOf(@NonNull Object unboxedValue, @Nullable EClassifier eClassifier);
@Nullable Object boxedValueOf(@NonNull Object unboxedValue, @NonNull ETypedElement eFeature, @Nullable TypeId typeId);
@NonNull BagValue createBagOfAll(@NonNull CollectionTypeId typeId, @NonNull Iterable<? extends Object> unboxedValues);
@NonNull BagValue createBagOfEach(@NonNull CollectionTypeId typeId, @NonNull Object... unboxedValues);
@NonNull CollectionValue createCollectionOfAll(boolean isOrdered, boolean isUnique, @NonNull TypeId elementTypeId, @NonNull Iterable<? extends Object> unboxedValues);
@NonNull CollectionValue createCollectionOfAll(@NonNull CollectionTypeId collectedId, @NonNull Iterable<?> unboxedValues);
@Nullable Object createInstance(@NonNull TypeId typeId, @NonNull String stringValue);
@NonNull MapValue createMapOfAll(@NonNull TypeId keyTypeId, @NonNull TypeId valueTypeId, @NonNull Map<Object, Object> mapEntries);
@NonNull OrderedSetValue createOrderedSetOfAll(@NonNull CollectionTypeId typeId, @NonNull Iterable<? extends Object> unboxedValues);
@NonNull OrderedSetValue createOrderedSetOfEach(@NonNull CollectionTypeId typeId, @NonNull Object... unboxedValues);
@NonNull SequenceValue createSequenceOfAll(@NonNull CollectionTypeId typeId, @NonNull Iterable<? extends Object> unboxedValues);
@NonNull SequenceValue createSequenceOfEach(@NonNull CollectionTypeId typeId, @NonNull Object... unboxedValues);
@NonNull SetValue createSetOfAll(@NonNull CollectionTypeId typeId, @NonNull Iterable<? extends Object> unboxedValues);
@NonNull SetValue createSetOfEach(@NonNull CollectionTypeId typeId, @NonNull Object... unboxedValues);
void dispose();
/**
* Return a value adjusted to Ecore calling conventions.
* <p>
* A numeric value is adjusted to the precision indicated by instanceClass.
* <p>
* An enumeration literal is converted to an Enumerator.
* <p>
* Collections are converted to EcoreEList.UnmodifiableEList
*/
@Nullable Object ecoreValueOf(@Nullable Class<?> instanceClass, @Nullable Object value);
/** @deprecated no longer used */
@Deprecated
@NonNull EList<Object> ecoreValuesOfAll(@Nullable Class<?> instanceClass, @NonNull Iterable<Object> values);
/** @deprecated no longer used */
@Deprecated
@NonNull EList<Object> ecoreValuesOfEach(@Nullable Class<?> instanceClass, @NonNull Object... values);
org.eclipse.ocl.pivot.@NonNull Class getClass(@NonNull TypeId typeId, @Nullable Object context);
@NonNull Type getCollectionType(@NonNull CollectionTypeId typeId);
@NonNull Type getDynamicTypeOf(@Nullable Object value);
@Nullable Type getDynamicTypeOf(@NonNull Object @NonNull ... values);
@Nullable Type getDynamicTypeOf(@NonNull Iterable<?> values);
@NonNull CompleteEnvironment getEnvironment();
@NonNull CompleteInheritance getInheritance(@NonNull EClassifier eClassifier);
org.eclipse.ocl.pivot.@NonNull Class getJavaType(@NonNull Class<?> javaClass);
@NonNull Type getMapType(@NonNull MapTypeId typeId);
@NonNull Operation getOperation(@NonNull OperationId operationId);
org.eclipse.ocl.pivot.@NonNull Package getPackage(@NonNull PackageId packageId);
@NonNull Property getProperty(@NonNull PropertyId propertyId);
@NonNull StandardLibrary getStandardLibrary();
org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value);
org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value, Object... values);
org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value, @NonNull Iterable<?> values);
@NonNull TypedElement getTuplePart(@NonNull String name, @NonNull TypeId typeId);
@NonNull TupleType getTupleType(@NonNull TupleTypeId typeId);
org.eclipse.ocl.pivot.@NonNull Class getType(@NonNull EClassifier eClassifier);
@NonNull Type getType(@NonNull TypeId typeId, @Nullable Object context);
boolean oclEquals(@Nullable Object thisValue, @Nullable Object thatValue);
@Nullable Object unboxedValueOf(@Nullable Object boxedValue);
@NonNull Enumerator unboxedValueOf(@NonNull EnumerationLiteralId enumerationLiteralId);
@NonNull EList<Object> unboxedValuesOfAll(@NonNull Collection<? extends Object> boxedValues);
@NonNull EList<Object> unboxedValuesOfEach(@Nullable Object... boxedValues);
}