blob: 93d3d8d43e2e4f9e47b39b1c06544ed5db39caa1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2018 SAP AG and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* SAP AG - initial API and implementation
******************************************************************************/
package org.eclipse.ocl.examples.impactanalyzer.util;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.ocl.ecore.opposites.DefaultOppositeEndFinder;
import org.eclipse.ocl.ecore.opposites.ExtentMap;
import org.eclipse.ocl.ecore.opposites.OppositeEndFinder;
/**
* Eases the construction of an OCL instance configured with a specific {@link OppositeEndFinder}. The OCL environments
* returned by the operations on this class use the {@link ExtentMap} which is consistently defined via the
* {@link OppositeEndFinder#getAllInstancesSeenBy(org.eclipse.emf.ecore.EClass, org.eclipse.emf.common.notify.Notifier)}
* operation definition of the {@link OppositeEndFinder} used.<p>
*
* If no specific {@link OppositeEndFinder} is provided, e.g. by using {@link #newInstance()}, the
* {@link DefaultOppositeEndFinder} will be used consistently, also for the definition of the
* {@link ExtentMap}.
*
* @author Axel Uhl (D043530)
*
*/
public class OCL {
/**
* Constructs an OCL instance that uses a {@link DefaultOppositeEndFinder} and the default package
* registry, yet uses the non-default {@link ExtentMap} which defines <code>allInstances</code>
* results consistently with the opposite end finder being used.
*/
public static org.eclipse.ocl.ecore.OCL newInstance() {
return org.eclipse.ocl.ecore.OCL.newInstance(new EcoreEnvironmentFactoryWithScopedExtentMap());
}
/**
* Constructs an OCL instance that uses the provided factory's opposite end
* finder and registry, yet uses the non-default {@link ExtentMap} which
* defines <code>allInstances</code> results consistently with the opposite
* end finder being used.
*/
public static org.eclipse.ocl.ecore.OCL newInstance(EcoreEnvironmentFactoryWithScopedExtentMap factory) {
return org.eclipse.ocl.ecore.OCL.newInstance(factory);
}
/**
* Constructs the OCL instance so that metamodel lookups are performed with the <code>registry</code>
* provided. A {@link DefaultOppositeEndFinder} is used for hidden opposite retrieval/navigation as
* well as for <code>allInstances</code> evaluation.
*/
public static org.eclipse.ocl.ecore.OCL newInstance(EPackage.Registry registry) {
return org.eclipse.ocl.ecore.OCL.newInstance(new EcoreEnvironmentFactoryWithScopedExtentMap(registry));
}
/**
* Uses the specific opposite end finder to parameterize the OCL environment returned.
* The opposite end finder is used consistently for all hidden opposite property retrievals
* and navigations as well as for <code>allInstances</code> operation calls by means of an
* {@link ExtentMap} parameterized with this opposite end finder.
*
* @param oppositeEndFinder if <code>null</code>, a {@link DefaultOppositeEndFinder} is used instead.
*/
public static org.eclipse.ocl.ecore.OCL newInstance(OppositeEndFinder oppositeEndFinder) {
return org.eclipse.ocl.ecore.OCL.newInstance(new EcoreEnvironmentFactoryWithScopedExtentMap(
oppositeEndFinder == null ? DefaultOppositeEndFinder.getInstance() : oppositeEndFinder));
}
/**
* Uses the specific opposite end finder to parameterize the OCL environment returned.
* The opposite end finder is used consistently for all hidden opposite property retrievals
* and navigations as well as for <code>allInstances</code> operation calls by means of an
* {@link ExtentMap} parameterized with this opposite end finder.
*
* @param registry the package registry to use for metamodel package lookups
* @param oppositeEndFinder if <code>null</code>, a {@link DefaultOppositeEndFinder} is used instead.
*/
public static org.eclipse.ocl.ecore.OCL newInstance(EPackage.Registry registry, OppositeEndFinder oppositeEndFinder) {
return org.eclipse.ocl.ecore.OCL.newInstance(new EcoreEnvironmentFactoryWithScopedExtentMap(registry,
oppositeEndFinder == null ? DefaultOppositeEndFinder.getInstance() : oppositeEndFinder));
}
}