/******************************************************************************* * Copyright (c) 2010, 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 * E.D.Willink (CEA LIST) - Bug 392981 *******************************************************************************/ package org.eclipse.ocl.pivot.internal.evaluation; import org.apache.log4j.Logger; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EPackage; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.ocl.pivot.PivotPackage; import org.eclipse.ocl.pivot.Type; import org.eclipse.ocl.pivot.internal.library.executor.LazyModelManager; import org.eclipse.ocl.pivot.internal.manager.PivotMetamodelManager; import org.eclipse.ocl.pivot.internal.utilities.EnvironmentFactoryInternal; import org.eclipse.ocl.pivot.utilities.ClassUtil; import org.eclipse.ocl.pivot.utilities.ParserException; public class PivotModelManager extends LazyModelManager { private static final Logger logger = Logger.getLogger(PivotModelManager.class); protected final @NonNull EnvironmentFactoryInternal environmentFactory; private boolean generatedErrorMessage = false; public PivotModelManager(@NonNull EnvironmentFactoryInternal environmentFactory, EObject context) { super(context); this.environmentFactory = environmentFactory; } @Override protected boolean isInstance(@NonNull Type requiredType, @NonNull EObject eObject) { PivotMetamodelManager metamodelManager = environmentFactory.getMetamodelManager(); EClass eClass = eObject.eClass(); EPackage ePackage = eClass.getEPackage(); Type objectType = null; if (ePackage == PivotPackage.eINSTANCE) { String name = ClassUtil.nonNullEMF(eClass.getName()); objectType = metamodelManager.getASClass(name); } else { try { objectType = metamodelManager.getASOf(Type.class, eClass); } catch (ParserException e) { if (!generatedErrorMessage) { generatedErrorMessage = true; logger.error("Failed to load an '" + eClass.getName() + "'", e); } } } return (objectType != null) && objectType.conformsTo(environmentFactory.getStandardLibrary(), requiredType); } }