| /** |
| */ |
| package org.eclipse.emf.cdo.evolution.util; |
| |
| import org.eclipse.emf.cdo.evolution.Change; |
| import org.eclipse.emf.cdo.evolution.ChangeKind; |
| import org.eclipse.emf.cdo.evolution.ElementChange; |
| import org.eclipse.emf.cdo.evolution.Evolution; |
| import org.eclipse.emf.cdo.evolution.EvolutionPackage; |
| import org.eclipse.emf.cdo.evolution.FeaturePathMigration; |
| import org.eclipse.emf.cdo.evolution.Migration; |
| import org.eclipse.emf.cdo.evolution.Model; |
| import org.eclipse.emf.cdo.evolution.ModelSet; |
| import org.eclipse.emf.cdo.evolution.ModelSetChange; |
| import org.eclipse.emf.cdo.evolution.PropertyChange; |
| import org.eclipse.emf.cdo.evolution.Release; |
| import org.eclipse.emf.cdo.evolution.impl.EvolutionPlugin; |
| |
| import org.eclipse.net4j.util.collection.CollectionUtil; |
| |
| import org.eclipse.emf.common.util.BasicDiagnostic; |
| import org.eclipse.emf.common.util.Diagnostic; |
| import org.eclipse.emf.common.util.DiagnosticChain; |
| import org.eclipse.emf.common.util.EList; |
| import org.eclipse.emf.common.util.ResourceLocator; |
| import org.eclipse.emf.common.util.URI; |
| import org.eclipse.emf.ecore.EClass; |
| import org.eclipse.emf.ecore.EModelElement; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.EPackage; |
| import org.eclipse.emf.ecore.EStructuralFeature; |
| import org.eclipse.emf.ecore.EcorePackage; |
| import org.eclipse.emf.ecore.util.EObjectValidator; |
| import org.eclipse.emf.ecore.util.EcoreUtil.EqualityHelper; |
| |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Set; |
| |
| /** |
| * <!-- begin-user-doc --> |
| * The <b>Validator</b> for the model. |
| * <!-- end-user-doc --> |
| * @see org.eclipse.emf.cdo.evolution.EvolutionPackage |
| * @generated |
| */ |
| public class EvolutionValidator extends EObjectValidator |
| { |
| /** |
| * The cached model package |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public static final EvolutionValidator INSTANCE = new EvolutionValidator(); |
| |
| /** |
| * A constant for the {@link org.eclipse.emf.common.util.Diagnostic#getSource() source} of diagnostic {@link org.eclipse.emf.common.util.Diagnostic#getCode() codes} from this package. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @see org.eclipse.emf.common.util.Diagnostic#getSource() |
| * @see org.eclipse.emf.common.util.Diagnostic#getCode() |
| * @generated |
| */ |
| public static final String DIAGNOSTIC_SOURCE = "org.eclipse.emf.cdo.evolution"; |
| |
| /** |
| * A constant with a fixed name that can be used as the base value for additional hand written constants. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated NOT |
| */ |
| protected static final int GENERATED_DIAGNOSTIC_CODE_COUNT = 0; |
| |
| public static final int CODE_NO_MODEL = GENERATED_DIAGNOSTIC_CODE_COUNT + 1; |
| |
| public static final int CODE_NO_URI = CODE_NO_MODEL + 1; |
| |
| public static final int CODE_NO_RESOURCE_SET = CODE_NO_URI + 1; |
| |
| public static final int CODE_RESOURCE_NOT_FOUND = CODE_NO_RESOURCE_SET + 1; |
| |
| public static final int CODE_LOAD_PROBLEM = CODE_RESOURCE_NOT_FOUND + 1; |
| |
| public static final int CODE_CONTENT_PROBLEM = CODE_LOAD_PROBLEM + 1; |
| |
| public static final int CODE_PACKAGE_MISSING = CODE_CONTENT_PROBLEM + 1; |
| |
| public static final int CODE_PACKAGE_NOT_UNIQUE = CODE_PACKAGE_MISSING + 1; |
| |
| public static final int CODE_NSURI_NOT_UNIQUE = CODE_PACKAGE_NOT_UNIQUE + 1; |
| |
| public static final int CODE_NSURI_NOT_CHANGED = CODE_NSURI_NOT_UNIQUE + 1; |
| |
| public static final int CODE_ID_ANNOTATION_MISSING = CODE_NSURI_NOT_CHANGED + 1; |
| |
| public static final int CODE_ID_WITHOUT_VALUE = CODE_ID_ANNOTATION_MISSING + 1; |
| |
| public static final int CODE_ID_NOT_UNIQUE = CODE_ID_WITHOUT_VALUE + 1; |
| |
| public static final int CODE_MIGRATION_UNUSED = CODE_ID_NOT_UNIQUE + 1; |
| |
| public static final int CODE_FEATURE_PATH_UNKNOWN = CODE_MIGRATION_UNUSED + 1; |
| |
| // Insert new codes above. |
| |
| public static final int CODE_UNCHANGED = CODE_FEATURE_PATH_UNKNOWN + 1; |
| |
| public static final int CODE_RELEASE = CODE_UNCHANGED + 1; |
| |
| /** |
| * A constant with a fixed name that can be used as the base value for additional hand written constants in a derived class. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated NOT |
| */ |
| protected static final int DIAGNOSTIC_CODE_COUNT = CODE_RELEASE; |
| |
| /** |
| * Creates an instance of the switch. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public EvolutionValidator() |
| { |
| super(); |
| } |
| |
| @Override |
| public boolean validate_EveryReferenceIsContained(EObject eObject, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| return true; |
| } |
| |
| @Override |
| public boolean validate_EveryProxyResolves(EObject eObject, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| return true; |
| } |
| |
| /** |
| * Returns the package of this validator switch. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| @Override |
| protected EPackage getEPackage() |
| { |
| return EvolutionPackage.eINSTANCE; |
| } |
| |
| /** |
| * Calls <code>validateXXX</code> for the corresponding classifier of the model. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| protected boolean validateGen(int classifierID, Object value, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| switch (classifierID) |
| { |
| case EvolutionPackage.MODEL_SET: |
| return validateModelSet((ModelSet)value, diagnostics, context); |
| case EvolutionPackage.MODEL: |
| return validateModel((Model)value, diagnostics, context); |
| case EvolutionPackage.EVOLUTION: |
| return validateEvolution((Evolution)value, diagnostics, context); |
| case EvolutionPackage.RELEASE: |
| return validateRelease((Release)value, diagnostics, context); |
| case EvolutionPackage.CHANGE: |
| return validateChange((Change)value, diagnostics, context); |
| case EvolutionPackage.MODEL_SET_CHANGE: |
| return validateModelSetChange((ModelSetChange)value, diagnostics, context); |
| case EvolutionPackage.ELEMENT_CHANGE: |
| return validateElementChange((ElementChange)value, diagnostics, context); |
| case EvolutionPackage.PROPERTY_CHANGE: |
| return validatePropertyChange((PropertyChange)value, diagnostics, context); |
| case EvolutionPackage.MIGRATION: |
| return validateMigration((Migration)value, diagnostics, context); |
| case EvolutionPackage.FEATURE_PATH_MIGRATION: |
| return validateFeaturePathMigration((FeaturePathMigration)value, diagnostics, context); |
| case EvolutionPackage.CHANGE_KIND: |
| return validateChangeKind((ChangeKind)value, diagnostics, context); |
| case EvolutionPackage.URI: |
| return validateURI((URI)value, diagnostics, context); |
| default: |
| return true; |
| } |
| } |
| |
| @Override |
| protected boolean validate(int classifierID, Object value, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| if (diagnostics == null) |
| { |
| return true; |
| } |
| |
| if (context == null) |
| { |
| return true; |
| } |
| |
| return validateGen(classifierID, value, diagnostics, context); |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public boolean validateModelSetGen(ModelSet modelSet, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| return validate_EveryDefaultConstraint(modelSet, diagnostics, context); |
| } |
| |
| public boolean validateModelSet(ModelSet modelSet, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| if (ValidationContext.isPhase(context, ValidationPhase.RELEASE)) |
| { |
| diagnostics.add( |
| createDiagnostic(Diagnostic.INFO, DIAGNOSTIC_SOURCE, CODE_RELEASE, "_UI_Release_diagnostic", new Object[] {}, new Object[] { modelSet }, context)); |
| return true; |
| } |
| |
| return validateModelSetGen(modelSet, diagnostics, context); |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public boolean validateModel(Model model, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| if (!validate_NoCircularContainment(model, diagnostics, context)) |
| { |
| return false; |
| } |
| boolean result = validate_EveryMultiplicityConforms(model, diagnostics, context); |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryDataValueConforms(model, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryReferenceIsContained(model, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryBidirectionalReferenceIsPaired(model, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryProxyResolves(model, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_UniqueID(model, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryKeyUnique(model, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryMapEntryUnique(model, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validateModel_ModelLoaded(model, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validateModel_IDs_Exist(model, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validateModel_NamespaceReflectsChange(model, diagnostics, context); |
| } |
| return result; |
| } |
| |
| /** |
| * Validates the ModelLoaded constraint of '<em>Model</em>'. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated NOT |
| * @category MODEL_AVAILABILITY |
| */ |
| public boolean validateModel_ModelLoaded(Model model, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| if (ValidationContext.isPhase(context, ValidationPhase.MODEL_AVAILABILITY)) |
| { |
| switch (model.getStatus()) |
| { |
| case NO_URI: |
| diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_NO_URI, "_UI_NO_URI_diagnostic", new Object[] {}, |
| new Object[] { model, EvolutionPackage.Literals.MODEL__URI }, context)); |
| return false; |
| |
| case NO_RESOURCE_SET: |
| diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_NO_RESOURCE_SET, "_UI_NO_RESOURCE_SET_diagnostic", new Object[] {}, |
| new Object[] { model }, context)); |
| return false; |
| |
| case RESOURCE_NOT_FOUND: |
| diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_RESOURCE_NOT_FOUND, "_UI_RESOURCE_NOT_FOUND_diagnostic", |
| new Object[] { model.getURI().toString() }, new Object[] { model, EvolutionPackage.Literals.MODEL__URI }, context)); |
| return false; |
| |
| case LOAD_PROBLEM: |
| diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_RESOURCE_NOT_FOUND, "_UI_LOAD_PROBLEM_diagnostic", |
| new Object[] { model.getURI().toString() }, new Object[] { model, EvolutionPackage.Literals.MODEL__URI }, context)); |
| return false; |
| |
| case CONTENT_PROBLEM: |
| diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_CONTENT_PROBLEM, "_UI_CONTENT_PROBLEM_diagnostic", |
| new Object[] { model.getURI().toString() }, new Object[] { model, EvolutionPackage.Literals.MODEL__URI }, context)); |
| return false; |
| } |
| } |
| |
| return true; |
| } |
| |
| /** |
| * Validates the IDs_Exist constraint of '<em>Model</em>'. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated NOT |
| * @category IDENTITY_COMPLETENESS |
| */ |
| public boolean validateModel_IDs_Exist(Model model, final DiagnosticChain diagnostics, final Map<Object, Object> context) |
| { |
| ValidationContext validationContext = ValidationContext.getFrom(context); |
| if (validationContext != null && validationContext.getPhase() == ValidationPhase.IDENTITY_COMPLETENESS) |
| { |
| final Map<String, Object> identifiedElements = validationContext.getIdentifiedElements(); |
| EPackage rootPackage = model.getRootPackage(); |
| |
| final boolean[] result = { true }; |
| ElementHandler.execute(rootPackage, new ElementRunnable() |
| { |
| public void run(EModelElement modelElement) |
| { |
| if (IDAnnotation.getFrom(modelElement, false) == null) |
| { |
| diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_ID_ANNOTATION_MISSING, "_UI_IDsExist_AnnotationMissing_diagnostic", |
| new Object[] {}, new Object[] { modelElement, EcorePackage.Literals.EMODEL_ELEMENT__EANNOTATIONS }, context)); |
| result[0] = false; |
| } |
| else |
| { |
| String value = IDAnnotation.getValue(modelElement); |
| if (value == null) |
| { |
| diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_ID_WITHOUT_VALUE, "_UI_IDsExist_NoValue_diagnostic", new Object[] {}, |
| new Object[] { modelElement, EcorePackage.Literals.EMODEL_ELEMENT__EANNOTATIONS }, context)); |
| result[0] = false; |
| } |
| else |
| { |
| Object element = identifiedElements.get(value); |
| if (element == null) |
| { |
| identifiedElements.put(value, modelElement); |
| } |
| else if (element instanceof List<?>) |
| { |
| @SuppressWarnings("unchecked") |
| List<EModelElement> elements = (List<EModelElement>)element; |
| elements.add(modelElement); |
| } |
| else |
| { |
| List<EModelElement> elements = new ArrayList<EModelElement>(); |
| elements.add((EModelElement)element); |
| elements.add(modelElement); |
| identifiedElements.put(value, elements); |
| } |
| } |
| } |
| } |
| }); |
| |
| return result[0]; |
| } |
| return true; |
| } |
| |
| /** |
| * Validates the NamespaceReflectsChange constraint of '<em>Model</em>'. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated NOT |
| * @category MODEL_UNIQUENESS |
| */ |
| public boolean validateModel_NamespaceReflectsChange(Model model, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| if (ValidationContext.isPhase(context, ValidationPhase.MODEL_UNIQUENESS)) |
| { |
| Evolution evolution = model.getEvolution(); |
| if (evolution.isUniqueNamespaces()) |
| { |
| Map<String, Set<EPackage>> releasedPackages = evolution.getReleasedPackages(); |
| boolean result = true; |
| |
| for (EPackage ePackage : model.getAllPackages()) |
| { |
| Set<EPackage> set = releasedPackages.get(ePackage.getNsURI()); |
| if (set != null) |
| { |
| for (EPackage releasedPackage : set) |
| { |
| EqualityHelper equalityHelper = new EqualityHelper() |
| { |
| private static final long serialVersionUID = 1L; |
| |
| @Override |
| protected boolean haveEqualFeature(EObject eObject1, EObject eObject2, EStructuralFeature feature) |
| { |
| if (feature == EcorePackage.Literals.EPACKAGE__ESUBPACKAGES) |
| { |
| // Compare packages without their subpackages. |
| return true; |
| } |
| |
| return super.haveEqualFeature(eObject1, eObject2, feature); |
| } |
| }; |
| |
| if (!equalityHelper.equals(ePackage, releasedPackage)) |
| { |
| Release release = (Release)ElementHandler.getModelSet(releasedPackage); |
| |
| diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_NSURI_NOT_CHANGED, "_UI_NsUriMustChange_diagnostic", |
| new Object[] { ePackage.getNsURI(), release.getVersion() }, |
| new Object[] { ePackage, EcorePackage.Literals.EPACKAGE__NS_URI, releasedPackage, evolution }, context)); |
| result = false; |
| break; |
| } |
| } |
| } |
| } |
| |
| return result; |
| } |
| } |
| |
| return true; |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public boolean validateEvolutionGen(Evolution evolution, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| if (!validate_NoCircularContainment(evolution, diagnostics, context)) |
| { |
| return false; |
| } |
| boolean result = validate_EveryMultiplicityConforms(evolution, diagnostics, context); |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryDataValueConforms(evolution, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryReferenceIsContained(evolution, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryBidirectionalReferenceIsPaired(evolution, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryProxyResolves(evolution, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_UniqueID(evolution, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryKeyUnique(evolution, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryMapEntryUnique(evolution, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validateEvolution_NotEmpty(evolution, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validateEvolution_PackagesUnique(evolution, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validateEvolution_NoMissingPackages(evolution, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validateEvolution_IDsUnique(evolution, diagnostics, context); |
| } |
| return result; |
| } |
| |
| public boolean validateEvolution(Evolution evolution, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| if (ValidationContext.isPhase(context, ValidationPhase.RELEASE)) |
| { |
| ModelSetChange change = evolution.getChange(); |
| |
| if (change == null || change.getChildren().isEmpty()) |
| { |
| Release latestRelease = evolution.getLatestRelease(); |
| if (latestRelease == null) |
| { |
| diagnostics.add(createDiagnostic(Diagnostic.INFO, DIAGNOSTIC_SOURCE, CODE_UNCHANGED, "_UI_Unchanged_diagnostic", new Object[] {}, |
| new Object[] { evolution }, context)); |
| } |
| else |
| { |
| diagnostics.add(createDiagnostic(Diagnostic.INFO, DIAGNOSTIC_SOURCE, CODE_UNCHANGED, "_UI_UnchangedSince_diagnostic", |
| new Object[] { latestRelease.getVersion() }, new Object[] { evolution }, context)); |
| } |
| } |
| else |
| { |
| diagnostics.add( |
| createDiagnostic(Diagnostic.INFO, DIAGNOSTIC_SOURCE, CODE_RELEASE, "_UI_Release_diagnostic", new Object[] {}, new Object[] { evolution }, context)); |
| } |
| return true; |
| } |
| |
| return validateEvolutionGen(evolution, diagnostics, context); |
| } |
| |
| /** |
| * Validates the NotEmpty constraint of '<em>Evolution</em>'. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated NOT |
| * @category MODEL_AVAILABILITY |
| */ |
| public boolean validateEvolution_NotEmpty(Evolution evolution, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| if (ValidationContext.isPhase(context, ValidationPhase.MODEL_AVAILABILITY)) |
| { |
| if (evolution.getModels().isEmpty()) |
| { |
| diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_NO_MODEL, "_UI_NoModel_diagnostic", new Object[] {}, |
| new Object[] { evolution }, context)); |
| return false; |
| } |
| } |
| |
| return true; |
| } |
| |
| /** |
| * Validates the PackagesUnique constraint of '<em>Evolution</em>'. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated NOT |
| * @category MODEL_UNIQUENESS |
| */ |
| public boolean validateEvolution_PackagesUnique(Evolution evolution, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| if (ValidationContext.isPhase(context, ValidationPhase.MODEL_UNIQUENESS)) |
| { |
| boolean result = true; |
| |
| Map<URI, Set<Model>> models = new HashMap<URI, Set<Model>>(); |
| for (Model model : evolution.getModels()) |
| { |
| CollectionUtil.add(models, model.getURI(), model); |
| } |
| |
| for (Set<Model> set : models.values()) |
| { |
| if (set.size() > 1) |
| { |
| for (Model model : set) |
| { |
| diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_PACKAGE_NOT_UNIQUE, "_UI_PackageNotUnique_diagnostic", |
| new Object[] { model.getURI().toString() }, new Object[] { model, EvolutionPackage.Literals.MODEL__URI, model.getURI() }, context)); |
| result = false; |
| } |
| } |
| } |
| |
| Map<String, Set<EPackage>> packages = new HashMap<String, Set<EPackage>>(); |
| for (EPackage ePackage : evolution.getAllPackages()) |
| { |
| CollectionUtil.add(packages, ePackage.getNsURI(), ePackage); |
| } |
| |
| for (Set<EPackage> set : packages.values()) |
| { |
| if (set.size() > 1) |
| { |
| for (EPackage ePackage : set) |
| { |
| diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_NSURI_NOT_UNIQUE, "_UI_NsuriNotUnique_diagnostic", |
| new Object[] { ePackage.getNsURI() }, new Object[] { ePackage, EcorePackage.Literals.EPACKAGE__NS_URI, ePackage.getNsURI() }, context)); |
| result = false; |
| } |
| } |
| } |
| |
| return result; |
| } |
| |
| return true; |
| } |
| |
| /** |
| * Validates the NoMissingPackages constraint of '<em>Evolution</em>'. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated NOT |
| * @category MODEL_INTEGRITY |
| */ |
| public boolean validateEvolution_NoMissingPackages(Evolution evolution, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| if (ValidationContext.isPhase(context, ValidationPhase.MODEL_INTEGRITY)) |
| { |
| EList<EPackage> missingPackages = evolution.getMissingPackages(); |
| if (missingPackages.size() != 0) |
| { |
| for (EPackage missingPackage : missingPackages) |
| { |
| diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_PACKAGE_MISSING, "_UI_MissingPackage_diagnostic", |
| new Object[] { missingPackage.getName() }, new Object[] { evolution, EvolutionPackage.Literals.EVOLUTION__MISSING_PACKAGES, missingPackage }, |
| context)); |
| } |
| |
| return false; |
| } |
| } |
| |
| return true; |
| } |
| |
| /** |
| * Validates the IDsUnique constraint of '<em>Evolution</em>'. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated NOT |
| * @category IDENTITY_UNIQUENESS |
| */ |
| public boolean validateEvolution_IDsUnique(Evolution evolution, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| // TODO Validate oldValue. |
| // TODO Validate oldElement.eClass() == newElement.eClass(). |
| int xxx; |
| |
| ValidationContext validationContext = ValidationContext.getFrom(context); |
| if (validationContext != null && validationContext.getPhase() == ValidationPhase.IDENTITY_UNIQUENESS) |
| { |
| boolean result = true; |
| for (Map.Entry<String, Object> entry : validationContext.getIdentifiedElements().entrySet()) |
| { |
| Object element = entry.getValue(); |
| if (element instanceof List<?>) |
| { |
| String id = entry.getKey(); |
| |
| @SuppressWarnings("unchecked") |
| List<EModelElement> elements = (List<EModelElement>)element; |
| for (EModelElement modelElement : elements) |
| { |
| List<Object> data = new ArrayList<Object>(); |
| data.add(modelElement); |
| data.add(EcorePackage.Literals.EMODEL_ELEMENT__EANNOTATIONS); |
| data.add(id); |
| |
| for (EModelElement conflictingElement : elements) |
| { |
| if (conflictingElement != modelElement) |
| { |
| data.add(conflictingElement); |
| } |
| } |
| |
| diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_ID_NOT_UNIQUE, "_UI_IDNotUnique_diagnostic", new Object[] { id }, |
| data.toArray(new Object[data.size()]), context)); |
| result = false; |
| } |
| } |
| } |
| |
| return result; |
| } |
| |
| return true; |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public boolean validateRelease(Release release, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| return validate_EveryDefaultConstraint(release, diagnostics, context); |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public boolean validateChange(Change change, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| return validate_EveryDefaultConstraint(change, diagnostics, context); |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public boolean validateModelSetChange(ModelSetChange modelSetChange, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| return validate_EveryDefaultConstraint(modelSetChange, diagnostics, context); |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public boolean validateElementChange(ElementChange elementChange, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| if (!validate_NoCircularContainment(elementChange, diagnostics, context)) |
| { |
| return false; |
| } |
| boolean result = validate_EveryMultiplicityConforms(elementChange, diagnostics, context); |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryDataValueConforms(elementChange, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryReferenceIsContained(elementChange, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryBidirectionalReferenceIsPaired(elementChange, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryProxyResolves(elementChange, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_UniqueID(elementChange, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryKeyUnique(elementChange, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryMapEntryUnique(elementChange, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validateElementChange_FeaturePathIsKnown(elementChange, diagnostics, context); |
| } |
| return result; |
| } |
| |
| /** |
| * Validates the FeaturePathIsKnown constraint of '<em>Element Change</em>'. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated NOT |
| * @category CHANGE_VALIDITY |
| */ |
| public boolean validateElementChange_FeaturePathIsKnown(ElementChange elementChange, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| ValidationContext validationContext = ValidationContext.getFrom(context); |
| if (validationContext != null && validationContext.getPhase() == ValidationPhase.CHANGE_VALIDITY) |
| { |
| ChangeKind kind = elementChange.getKind(); |
| if (kind == ChangeKind.COPIED || kind == ChangeKind.MOVED) |
| { |
| EModelElement newElement = elementChange.getNewElement(); |
| if (newElement instanceof EStructuralFeature) |
| { |
| EStructuralFeature newFeature = (EStructuralFeature)newElement; |
| EStructuralFeature oldFeature = (EStructuralFeature)elementChange.getOldElement(); |
| |
| EClass newContainingClass = newFeature.getEContainingClass(); |
| EClass oldContainingClass = oldFeature.getEContainingClass(); |
| if (elementChange.getOldElementFor(newContainingClass) != oldContainingClass) |
| { |
| BasicDiagnostic diagnostic = createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_FEATURE_PATH_UNKNOWN, "_UI_FeaturePathIsKnown_diagnostic", |
| new Object[] { ElementHandler.getLabel(newFeature), kind.getName().toLowerCase(), ElementHandler.getLabel(oldFeature) }, |
| new Object[] { elementChange, newFeature }, context); |
| |
| Evolution evolution = validationContext.getEvolution(); |
| DiagnosticID diagnosticID = DiagnosticID.get(diagnostic); |
| |
| Migration migration = evolution.getMigration(diagnosticID.getValue()); |
| if (migration != null) |
| { |
| validationContext.getUsedMigrations().put(diagnosticID, migration); |
| return true; |
| } |
| |
| diagnostics.add(diagnostic); |
| return false; |
| } |
| } |
| } |
| } |
| |
| return true; |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public boolean validatePropertyChange(PropertyChange propertyChange, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| return validate_EveryDefaultConstraint(propertyChange, diagnostics, context); |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public boolean validateMigration(Migration migration, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| if (!validate_NoCircularContainment(migration, diagnostics, context)) |
| { |
| return false; |
| } |
| boolean result = validate_EveryMultiplicityConforms(migration, diagnostics, context); |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryDataValueConforms(migration, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryReferenceIsContained(migration, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryBidirectionalReferenceIsPaired(migration, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryProxyResolves(migration, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_UniqueID(migration, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryKeyUnique(migration, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryMapEntryUnique(migration, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validateMigration_NotObsolete(migration, diagnostics, context); |
| } |
| return result; |
| } |
| |
| /** |
| * Validates the NotObsolete constraint of '<em>Migration</em>'. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated NOT |
| * @category MIGRATION_OBSOLETENESS |
| */ |
| public boolean validateMigration_NotObsolete(Migration migration, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| ValidationContext validationContext = ValidationContext.getFrom(context); |
| if (validationContext != null && validationContext.getPhase() == ValidationPhase.MIGRATION_OBSOLETENESS) |
| { |
| String idValue = migration.getDiagnosticID(); |
| if (idValue != null && idValue.length() != 0) |
| { |
| DiagnosticID diagnosticID = new DiagnosticID(idValue); |
| if (!validationContext.getUsedMigrations().containsKey(diagnosticID)) |
| { |
| diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, CODE_MIGRATION_UNUSED, "_UI_MigrationUnused_diagnostic", |
| new Object[] { migration }, new Object[] { migration, diagnosticID }, context)); |
| return false; |
| } |
| } |
| } |
| |
| return true; |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public boolean validateFeaturePathMigration(FeaturePathMigration featurePathMigration, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| if (!validate_NoCircularContainment(featurePathMigration, diagnostics, context)) |
| { |
| return false; |
| } |
| boolean result = validate_EveryMultiplicityConforms(featurePathMigration, diagnostics, context); |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryDataValueConforms(featurePathMigration, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryReferenceIsContained(featurePathMigration, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryBidirectionalReferenceIsPaired(featurePathMigration, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryProxyResolves(featurePathMigration, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_UniqueID(featurePathMigration, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryKeyUnique(featurePathMigration, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validate_EveryMapEntryUnique(featurePathMigration, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validateMigration_NotObsolete(featurePathMigration, diagnostics, context); |
| } |
| if (result || diagnostics != null) |
| { |
| result &= validateFeaturePathMigration_NewFeatureReachable(featurePathMigration, diagnostics, context); |
| } |
| return result; |
| } |
| |
| /** |
| * Validates the NewFeatureReachable constraint of '<em>Feature Path Migration</em>'. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated NOT |
| * @category MIGRATION_VALIDITY |
| */ |
| public boolean validateFeaturePathMigration_NewFeatureReachable(FeaturePathMigration featurePathMigration, DiagnosticChain diagnostics, |
| Map<Object, Object> context) |
| { |
| if (ValidationContext.isPhase(context, ValidationPhase.MIGRATION_VALIDITY)) |
| { |
| } |
| // TODO implement the constraint |
| // -> specify the condition that violates the constraint |
| // -> verify the diagnostic details, including severity, code, and message |
| // Ensure that you remove @generated or mark it @generated NOT |
| if (false) |
| { |
| if (diagnostics != null) |
| { |
| diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0, "_UI_GenericConstraint_diagnostic", |
| new Object[] { "NewFeatureReachable", getObjectLabel(featurePathMigration, context) }, new Object[] { featurePathMigration }, context)); |
| } |
| return false; |
| } |
| return true; |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public boolean validateChangeKind(ChangeKind changeKind, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| return true; |
| } |
| |
| /** |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| public boolean validateURI(URI uri, DiagnosticChain diagnostics, Map<Object, Object> context) |
| { |
| return true; |
| } |
| |
| /** |
| * Returns the resource locator that will be used to fetch messages for this validator's diagnostics. |
| * <!-- begin-user-doc --> |
| * <!-- end-user-doc --> |
| * @generated |
| */ |
| @Override |
| public ResourceLocator getResourceLocator() |
| { |
| return EvolutionPlugin.INSTANCE; |
| } |
| |
| } // EvolutionValidator |