blob: a0924d692672db8fba8655bda063fee67262ff83 [file] [log] [blame]
/*
* Copyright (c) 2016 Ed Merks (Berlin, Germany) 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:
* Ed Merks - initial API and implementation
*/
package org.eclipse.oomph.setup.util;
import org.eclipse.oomph.internal.setup.SetupPlugin;
import org.eclipse.oomph.setup.Argument;
import org.eclipse.oomph.setup.AttributeRule;
import org.eclipse.oomph.setup.CatalogSelection;
import org.eclipse.oomph.setup.CompoundTask;
import org.eclipse.oomph.setup.Configuration;
import org.eclipse.oomph.setup.EclipseIniTask;
import org.eclipse.oomph.setup.Index;
import org.eclipse.oomph.setup.Installation;
import org.eclipse.oomph.setup.InstallationTask;
import org.eclipse.oomph.setup.LicenseInfo;
import org.eclipse.oomph.setup.LinkLocationTask;
import org.eclipse.oomph.setup.LocationCatalog;
import org.eclipse.oomph.setup.Macro;
import org.eclipse.oomph.setup.MacroTask;
import org.eclipse.oomph.setup.Parameter;
import org.eclipse.oomph.setup.PreferenceTask;
import org.eclipse.oomph.setup.Product;
import org.eclipse.oomph.setup.ProductCatalog;
import org.eclipse.oomph.setup.ProductVersion;
import org.eclipse.oomph.setup.Project;
import org.eclipse.oomph.setup.ProjectCatalog;
import org.eclipse.oomph.setup.ProjectContainer;
import org.eclipse.oomph.setup.RedirectionTask;
import org.eclipse.oomph.setup.ResourceCopyTask;
import org.eclipse.oomph.setup.ResourceCreationTask;
import org.eclipse.oomph.setup.Scope;
import org.eclipse.oomph.setup.ScopeType;
import org.eclipse.oomph.setup.SetupFactory;
import org.eclipse.oomph.setup.SetupPackage;
import org.eclipse.oomph.setup.SetupTask;
import org.eclipse.oomph.setup.SetupTaskContainer;
import org.eclipse.oomph.setup.Stream;
import org.eclipse.oomph.setup.StringSubstitutionTask;
import org.eclipse.oomph.setup.TextModification;
import org.eclipse.oomph.setup.TextModifyTask;
import org.eclipse.oomph.setup.Trigger;
import org.eclipse.oomph.setup.UnsignedPolicy;
import org.eclipse.oomph.setup.User;
import org.eclipse.oomph.setup.VariableChoice;
import org.eclipse.oomph.setup.VariableTask;
import org.eclipse.oomph.setup.VariableType;
import org.eclipse.oomph.setup.Workspace;
import org.eclipse.oomph.setup.WorkspaceTask;
import org.eclipse.oomph.util.StringUtil;
import org.eclipse.emf.common.CommonPlugin;
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.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.util.EObjectValidator;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
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.oomph.setup.SetupPackage
* @generated
*/
public class SetupValidator extends EObjectValidator
{
/**
* The cached model package
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public static final SetupValidator INSTANCE = new SetupValidator();
/**
* 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.oomph.setup";
/**
* 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
*/
private static final int GENERATED_DIAGNOSTIC_CODE_COUNT = 0;
/**
* @see #validateMacroTask_IDRequired(MacroTask, DiagnosticChain, Map)
*/
public static final int MACRO_TASK_ID_REQUIRED = GENERATED_DIAGNOSTIC_CODE_COUNT + 1;
/**
* @see #validateMacroTask_ArgumentsCorrespondToParameters(MacroTask, DiagnosticChain, Map)
*/
public static final int MACRO_TASK_ARGUMENTS_CORRESPOND_TO_PARAMETERS = GENERATED_DIAGNOSTIC_CODE_COUNT + 2;
/**
* @see #validateArgument_ConsistentParameterBinding(Argument, DiagnosticChain, Map)
*/
public static final int ARGUMENT_CONSISTENT_PARAMETER_BINDING = GENERATED_DIAGNOSTIC_CODE_COUNT + 3;
/**
* @see #validateMacro_NoRecursion(Macro, DiagnosticChain, Map)
*/
public static final int MACRO_NO_RECURSION = GENERATED_DIAGNOSTIC_CODE_COUNT + 4;
/**
* 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 = MACRO_NO_RECURSION;
private static boolean parseFilterMethodInitialized;
private static Method parseFilterMethod;
/**
* Creates an instance of the switch.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public SetupValidator()
{
super();
}
/**
* Returns the package of this validator switch.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
protected EPackage getEPackage()
{
return SetupPackage.eINSTANCE;
}
/**
* Calls <code>validateXXX</code> for the corresponding classifier of the model.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
@SuppressWarnings("unchecked")
protected boolean validate(int classifierID, Object value, DiagnosticChain diagnostics, Map<Object, Object> context)
{
switch (classifierID)
{
case SetupPackage.SETUP_TASK:
return validateSetupTask((SetupTask)value, diagnostics, context);
case SetupPackage.SETUP_TASK_CONTAINER:
return validateSetupTaskContainer((SetupTaskContainer)value, diagnostics, context);
case SetupPackage.SCOPE:
return validateScope((Scope)value, diagnostics, context);
case SetupPackage.INDEX:
return validateIndex((Index)value, diagnostics, context);
case SetupPackage.CATALOG_SELECTION:
return validateCatalogSelection((CatalogSelection)value, diagnostics, context);
case SetupPackage.PRODUCT_CATALOG:
return validateProductCatalog((ProductCatalog)value, diagnostics, context);
case SetupPackage.PRODUCT:
return validateProduct((Product)value, diagnostics, context);
case SetupPackage.PRODUCT_VERSION:
return validateProductVersion((ProductVersion)value, diagnostics, context);
case SetupPackage.PROJECT_CONTAINER:
return validateProjectContainer((ProjectContainer)value, diagnostics, context);
case SetupPackage.PROJECT_CATALOG:
return validateProjectCatalog((ProjectCatalog)value, diagnostics, context);
case SetupPackage.PROJECT:
return validateProject((Project)value, diagnostics, context);
case SetupPackage.STREAM:
return validateStream((Stream)value, diagnostics, context);
case SetupPackage.USER:
return validateUser((User)value, diagnostics, context);
case SetupPackage.ATTRIBUTE_RULE:
return validateAttributeRule((AttributeRule)value, diagnostics, context);
case SetupPackage.LOCATION_CATALOG:
return validateLocationCatalog((LocationCatalog)value, diagnostics, context);
case SetupPackage.INSTALLATION:
return validateInstallation((Installation)value, diagnostics, context);
case SetupPackage.INSTALLATION_TASK:
return validateInstallationTask((InstallationTask)value, diagnostics, context);
case SetupPackage.WORKSPACE:
return validateWorkspace((Workspace)value, diagnostics, context);
case SetupPackage.WORKSPACE_TASK:
return validateWorkspaceTask((WorkspaceTask)value, diagnostics, context);
case SetupPackage.CONFIGURATION:
return validateConfiguration((Configuration)value, diagnostics, context);
case SetupPackage.COMPOUND_TASK:
return validateCompoundTask((CompoundTask)value, diagnostics, context);
case SetupPackage.VARIABLE_TASK:
return validateVariableTask((VariableTask)value, diagnostics, context);
case SetupPackage.VARIABLE_CHOICE:
return validateVariableChoice((VariableChoice)value, diagnostics, context);
case SetupPackage.STRING_SUBSTITUTION_TASK:
return validateStringSubstitutionTask((StringSubstitutionTask)value, diagnostics, context);
case SetupPackage.REDIRECTION_TASK:
return validateRedirectionTask((RedirectionTask)value, diagnostics, context);
case SetupPackage.ECLIPSE_INI_TASK:
return validateEclipseIniTask((EclipseIniTask)value, diagnostics, context);
case SetupPackage.LINK_LOCATION_TASK:
return validateLinkLocationTask((LinkLocationTask)value, diagnostics, context);
case SetupPackage.PREFERENCE_TASK:
return validatePreferenceTask((PreferenceTask)value, diagnostics, context);
case SetupPackage.RESOURCE_COPY_TASK:
return validateResourceCopyTask((ResourceCopyTask)value, diagnostics, context);
case SetupPackage.RESOURCE_CREATION_TASK:
return validateResourceCreationTask((ResourceCreationTask)value, diagnostics, context);
case SetupPackage.TEXT_MODIFY_TASK:
return validateTextModifyTask((TextModifyTask)value, diagnostics, context);
case SetupPackage.TEXT_MODIFICATION:
return validateTextModification((TextModification)value, diagnostics, context);
case SetupPackage.PRODUCT_TO_PRODUCT_VERSION_MAP_ENTRY:
return validateProductToProductVersionMapEntry((Map.Entry<?, ?>)value, diagnostics, context);
case SetupPackage.PROJECT_TO_STREAM_MAP_ENTRY:
return validateProjectToStreamMapEntry((Map.Entry<?, ?>)value, diagnostics, context);
case SetupPackage.INSTALLATION_TO_WORKSPACES_MAP_ENTRY:
return validateInstallationToWorkspacesMapEntry((Map.Entry<?, ?>)value, diagnostics, context);
case SetupPackage.WORKSPACE_TO_INSTALLATIONS_MAP_ENTRY:
return validateWorkspaceToInstallationsMapEntry((Map.Entry<?, ?>)value, diagnostics, context);
case SetupPackage.MACRO:
return validateMacro((Macro)value, diagnostics, context);
case SetupPackage.PARAMETER:
return validateParameter((Parameter)value, diagnostics, context);
case SetupPackage.MACRO_TASK:
return validateMacroTask((MacroTask)value, diagnostics, context);
case SetupPackage.ARGUMENT:
return validateArgument((Argument)value, diagnostics, context);
case SetupPackage.SCOPE_TYPE:
return validateScopeType((ScopeType)value, diagnostics, context);
case SetupPackage.TRIGGER:
return validateTrigger((Trigger)value, diagnostics, context);
case SetupPackage.VARIABLE_TYPE:
return validateVariableType((VariableType)value, diagnostics, context);
case SetupPackage.UNSIGNED_POLICY:
return validateUnsignedPolicy((UnsignedPolicy)value, diagnostics, context);
case SetupPackage.TRIGGER_SET:
return validateTriggerSet((Set<Trigger>)value, diagnostics, context);
case SetupPackage.LICENSE_INFO:
return validateLicenseInfo((LicenseInfo)value, diagnostics, context);
case SetupPackage.FILTER:
return validateFilter((String)value, diagnostics, context);
default:
return true;
}
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateSetupTask(SetupTask setupTask, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(setupTask, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateSetupTaskContainer(SetupTaskContainer setupTaskContainer, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(setupTaskContainer, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateScope(Scope scope, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(scope, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateIndex(Index index, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(index, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateCatalogSelection(CatalogSelection catalogSelection, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(catalogSelection, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateProductCatalog(ProductCatalog productCatalog, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(productCatalog, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateProduct(Product product, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(product, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateProductVersion(ProductVersion productVersion, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(productVersion, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateProjectContainer(ProjectContainer projectContainer, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(projectContainer, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateProjectCatalog(ProjectCatalog projectCatalog, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(projectCatalog, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateProject(Project project, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(project, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateStream(Stream stream, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(stream, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateUser(User user, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(user, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateAttributeRule(AttributeRule attributeRule, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(attributeRule, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateLocationCatalog(LocationCatalog locationCatalog, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(locationCatalog, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateInstallation(Installation installation, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(installation, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateInstallationTask(InstallationTask installationTask, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(installationTask, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateWorkspace(Workspace workspace, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(workspace, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateWorkspaceTask(WorkspaceTask workspaceTask, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(workspaceTask, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateConfiguration(Configuration configuration, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(configuration, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateCompoundTask(CompoundTask compoundTask, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(compoundTask, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateVariableTask(VariableTask variableTask, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(variableTask, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateVariableChoice(VariableChoice variableChoice, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(variableChoice, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateStringSubstitutionTask(StringSubstitutionTask stringSubstitutionTask, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(stringSubstitutionTask, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateRedirectionTask(RedirectionTask redirectionTask, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(redirectionTask, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateEclipseIniTask(EclipseIniTask eclipseIniTask, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(eclipseIniTask, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateLinkLocationTask(LinkLocationTask linkLocationTask, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(linkLocationTask, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validatePreferenceTask(PreferenceTask preferenceTask, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(preferenceTask, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateResourceCopyTask(ResourceCopyTask resourceCopyTask, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(resourceCopyTask, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateResourceCreationTask(ResourceCreationTask resourceCreationTask, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(resourceCreationTask, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateTextModifyTask(TextModifyTask textModifyTask, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(textModifyTask, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateTextModification(TextModification textModification, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(textModification, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateProductToProductVersionMapEntry(Map.Entry<?, ?> productToProductVersionMapEntry, DiagnosticChain diagnostics,
Map<Object, Object> context)
{
return validate_EveryDefaultConstraint((EObject)productToProductVersionMapEntry, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateProjectToStreamMapEntry(Map.Entry<?, ?> projectToStreamMapEntry, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint((EObject)projectToStreamMapEntry, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateInstallationToWorkspacesMapEntry(Map.Entry<?, ?> installationToWorkspacesMapEntry, DiagnosticChain diagnostics,
Map<Object, Object> context)
{
return validate_EveryDefaultConstraint((EObject)installationToWorkspacesMapEntry, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateWorkspaceToInstallationsMapEntry(Map.Entry<?, ?> workspaceToInstallationsMapEntry, DiagnosticChain diagnostics,
Map<Object, Object> context)
{
return validate_EveryDefaultConstraint((EObject)workspaceToInstallationsMapEntry, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateMacro(Macro macro, DiagnosticChain diagnostics, Map<Object, Object> context)
{
if (!validate_NoCircularContainment(macro, diagnostics, context))
{
return false;
}
boolean result = validate_EveryMultiplicityConforms(macro, diagnostics, context);
if (result || diagnostics != null)
{
result &= validate_EveryDataValueConforms(macro, diagnostics, context);
}
if (result || diagnostics != null)
{
result &= validate_EveryReferenceIsContained(macro, diagnostics, context);
}
if (result || diagnostics != null)
{
result &= validate_EveryBidirectionalReferenceIsPaired(macro, diagnostics, context);
}
if (result || diagnostics != null)
{
result &= validate_EveryProxyResolves(macro, diagnostics, context);
}
if (result || diagnostics != null)
{
result &= validate_UniqueID(macro, diagnostics, context);
}
if (result || diagnostics != null)
{
result &= validate_EveryKeyUnique(macro, diagnostics, context);
}
if (result || diagnostics != null)
{
result &= validate_EveryMapEntryUnique(macro, diagnostics, context);
}
if (result || diagnostics != null)
{
result &= validateMacro_NoRecursion(macro, diagnostics, context);
}
return result;
}
/**
* Validates the NoRecursion constraint of '<em>Macro</em>'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public boolean validateMacro_NoRecursion(Macro macro, DiagnosticChain diagnostics, Map<Object, Object> context)
{
Map<Macro, MacroTask> visitedMacros = new LinkedHashMap<Macro, MacroTask>();
MacroTask fakeRootMacroTask = SetupFactory.eINSTANCE.createMacroTask();
if (isRecursive(visitedMacros, macro, fakeRootMacroTask))
{
if (diagnostics != null)
{
List<String> choices = new ArrayList<String>();
List<Object> data = new ArrayList<Object>();
data.add(macro);
data.add(SetupPackage.Literals.SETUP_TASK_CONTAINER__SETUP_TASKS);
// Gather the chain of objects that lead to the recursion.
// The fake root macro task will have been replaced with an actual macro task that finally resulted in the recursion.
MacroTask finalRecursiveMacroTask = null;
for (Map.Entry<Macro, MacroTask> entry : visitedMacros.entrySet())
{
Macro otherMacro = entry.getKey();
choices.add(getObjectLabel(otherMacro, context));
MacroTask macroTask = entry.getValue();
if (finalRecursiveMacroTask == null)
{
// The initial replaced macro task should be last in the data list.
finalRecursiveMacroTask = macroTask;
}
else
{
data.add(macroTask);
}
if (otherMacro != macro)
{
data.add(otherMacro);
}
}
data.add(finalRecursiveMacroTask);
diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, MACRO_NO_RECURSION, "_UI_MacroNoRecursion_diagnostic",
new Object[] { getAvailableChoices(choices, true, "'", Integer.MAX_VALUE) }, data.toArray(), context));
}
return false;
}
return true;
}
private boolean isRecursive(Map<Macro, MacroTask> visitedMacros, Macro macro, MacroTask macroTask)
{
MacroTask put = visitedMacros.put(macro, macroTask);
if (put == null)
{
for (Iterator<EObject> it = macro.eAllContents(); it.hasNext();)
{
EObject eObject = it.next();
if (eObject instanceof MacroTask)
{
MacroTask reachableMacroTask = (MacroTask)eObject;
Macro reachableMacro = reachableMacroTask.getMacro();
if (reachableMacro != null)
{
if (isRecursive(visitedMacros, reachableMacro, reachableMacroTask))
{
return true;
}
}
}
}
visitedMacros.remove(macro);
return false;
}
else
{
return visitedMacros.keySet().iterator().next() == macro;
}
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateParameter(Parameter parameter, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return validate_EveryDefaultConstraint(parameter, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateMacroTask(MacroTask macroTask, DiagnosticChain diagnostics, Map<Object, Object> context)
{
if (!validate_NoCircularContainment(macroTask, diagnostics, context))
{
return false;
}
boolean result = validate_EveryMultiplicityConforms(macroTask, diagnostics, context);
if (result || diagnostics != null)
{
result &= validate_EveryDataValueConforms(macroTask, diagnostics, context);
}
if (result || diagnostics != null)
{
result &= validate_EveryReferenceIsContained(macroTask, diagnostics, context);
}
if (result || diagnostics != null)
{
result &= validate_EveryBidirectionalReferenceIsPaired(macroTask, diagnostics, context);
}
if (result || diagnostics != null)
{
result &= validate_EveryProxyResolves(macroTask, diagnostics, context);
}
if (result || diagnostics != null)
{
result &= validate_UniqueID(macroTask, diagnostics, context);
}
if (result || diagnostics != null)
{
result &= validate_EveryKeyUnique(macroTask, diagnostics, context);
}
if (result || diagnostics != null)
{
result &= validate_EveryMapEntryUnique(macroTask, diagnostics, context);
}
if (result || diagnostics != null)
{
result &= validateMacroTask_IDRequired(macroTask, diagnostics, context);
}
if (result || diagnostics != null)
{
result &= validateMacroTask_ArgumentsCorrespondToParameters(macroTask, diagnostics, context);
}
return result;
}
/**
* Validates the IDRequired constraint of '<em>Macro Task</em>'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public boolean validateMacroTask_IDRequired(MacroTask macroTask, DiagnosticChain diagnostics, Map<Object, Object> context)
{
if (StringUtil.isEmpty(macroTask.getID()))
{
if (diagnostics != null)
{
diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, MACRO_TASK_ID_REQUIRED, "_UI_MacroTaskDRequired_diagnostic", null,
new Object[] { macroTask, SetupPackage.Literals.SETUP_TASK__ID }, context));
}
return false;
}
return true;
}
/**
* Validates the ArgumentsCorrespondToParameters constraint of '<em>Macro Task</em>'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public boolean validateMacroTask_ArgumentsCorrespondToParameters(MacroTask macroTask, DiagnosticChain diagnostics, Map<Object, Object> context)
{
Macro macro = macroTask.getMacro();
if (macro != null && !macro.eIsProxy())
{
EList<Parameter> parameters = macro.getParameters();
EList<Argument> arguments = macroTask.getArguments();
Set<Parameter> boundParameters = new LinkedHashSet<Parameter>();
for (Argument argument : arguments)
{
boundParameters.add(argument.getParameter());
}
Set<String> unboundParameters = new LinkedHashSet<String>();
for (Parameter parameter : parameters)
{
if (!boundParameters.contains(parameter) && parameter.getDefaultValue() == null)
{
unboundParameters.add(parameter.getName());
}
}
if (!unboundParameters.isEmpty())
{
if (diagnostics != null)
{
diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, MACRO_TASK_ARGUMENTS_CORRESPOND_TO_PARAMETERS,
"_UI_MacroTaskMissingArgument_diagnostic", new Object[] { getAvailableChoices(unboundParameters, true, "'", Integer.MAX_VALUE) },
new Object[] { macroTask, SetupPackage.Literals.MACRO_TASK__ARGUMENTS }, context));
}
return false;
}
}
return true;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateArgument(Argument argument, DiagnosticChain diagnostics, Map<Object, Object> context)
{
if (!validate_NoCircularContainment(argument, diagnostics, context))
{
return false;
}
boolean result = validate_EveryMultiplicityConforms(argument, diagnostics, context);
if (result || diagnostics != null)
{
result &= validate_EveryDataValueConforms(argument, diagnostics, context);
}
if (result || diagnostics != null)
{
result &= validate_EveryReferenceIsContained(argument, diagnostics, context);
}
if (result || diagnostics != null)
{
result &= validate_EveryBidirectionalReferenceIsPaired(argument, diagnostics, context);
}
if (result || diagnostics != null)
{
result &= validate_EveryProxyResolves(argument, diagnostics, context);
}
if (result || diagnostics != null)
{
result &= validate_UniqueID(argument, diagnostics, context);
}
if (result || diagnostics != null)
{
result &= validate_EveryKeyUnique(argument, diagnostics, context);
}
if (result || diagnostics != null)
{
result &= validate_EveryMapEntryUnique(argument, diagnostics, context);
}
if (result || diagnostics != null)
{
result &= validateArgument_ConsistentParameterBinding(argument, diagnostics, context);
}
return result;
}
@Override
protected boolean validate_MultiplicityConforms(EObject eObject, EStructuralFeature eStructuralFeature, DiagnosticChain diagnostics,
Map<Object, Object> context)
{
if (eStructuralFeature == SetupPackage.Literals.ARGUMENT__PARAMETER && ((Argument)eObject).getParameter() != null)
{
// Because the parameter, even when present, will be considered not set when it's properly a parameter of the containing macro task's macro,
// we will get a validation error, because it's a required unsettable feature, and we don't want that.
return true;
}
return super.validate_MultiplicityConforms(eObject, eStructuralFeature, diagnostics, context);
}
/**
* Validates the ConsistentParameterBinding constraint of '<em>Argument</em>'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public boolean validateArgument_ConsistentParameterBinding(Argument argument, DiagnosticChain diagnostics, Map<Object, Object> context)
{
boolean result = true;
Parameter parameter = argument.getParameter();
if (parameter != null && !parameter.eIsProxy())
{
if (argument.getValue() == null && parameter.getDefaultValue() == null)
{
if (diagnostics != null)
{
diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, ARGUMENT_CONSISTENT_PARAMETER_BINDING,
"_UI_ArgumentValueMustBeSpecified_diagnostic", null, new Object[] { argument, SetupPackage.Literals.ARGUMENT__VALUE }, context));
result = false;
}
else
{
return false;
}
}
MacroTask macroTask = argument.getMacroTask();
if (macroTask != null)
{
EList<Argument> arguments = macroTask.getArguments();
for (int i = 0, index = arguments.indexOf(argument); i < index; ++i)
{
if (arguments.get(i).getParameter() == parameter)
{
if (diagnostics != null)
{
diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, ARGUMENT_CONSISTENT_PARAMETER_BINDING,
"_UI_ArgumentParameterAlreadyBound_diagnostic", null, new Object[] { argument, SetupPackage.Literals.ARGUMENT__PARAMETER }, context));
result = false;
}
else
{
return false;
}
}
}
Macro macro = macroTask.getMacro();
if (macro != null && !macro.eIsProxy())
{
EList<Parameter> parameters = macro.getParameters();
if (!parameters.contains(parameter))
{
if (diagnostics != null)
{
diagnostics.add(createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, ARGUMENT_CONSISTENT_PARAMETER_BINDING,
"_UI_ArgumentParameterOutOfScope_diagnostic", null, new Object[] { argument, SetupPackage.Literals.ARGUMENT__PARAMETER }, context));
result = false;
}
else
{
return false;
}
}
}
}
}
return result;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateScopeType(ScopeType scopeType, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return true;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateTrigger(Trigger trigger, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return true;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateVariableType(VariableType variableType, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return true;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateUnsignedPolicy(UnsignedPolicy unsignedPolicy, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return true;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateTriggerSet(Set<Trigger> triggerSet, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return true;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateLicenseInfo(LicenseInfo licenseInfo, DiagnosticChain diagnostics, Map<Object, Object> context)
{
return true;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateFilter(String filter, DiagnosticChain diagnostics, Map<Object, Object> context)
{
boolean result = validateFilter_WellformedFilterExpression(filter, diagnostics, context);
return result;
}
/**
* Validates the WellformedFilterExpression constraint of '<em>Filter</em>'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public boolean validateFilter_WellformedFilterExpression(String filter, DiagnosticChain diagnostics, Map<Object, Object> context)
{
if (StringUtil.isEmpty(filter))
{
return true;
}
if (!parseFilterMethodInitialized)
{
try
{
Class<?> installableUnitClass = CommonPlugin.loadClass("org.eclipse.equinox.p2.metadata", "org.eclipse.equinox.internal.p2.metadata.InstallableUnit");
parseFilterMethod = installableUnitClass.getMethod("parseFilter", String.class);
}
catch (Throwable throwable)
{
// If p2 isn't available, we simply won't be able to validate.
}
parseFilterMethodInitialized = true;
}
if (parseFilterMethod == null)
{
// Validation isn't available so assume the value is valid.
return true;
}
Throwable throwable = null;
try
{
parseFilterMethod.invoke(null, filter);
}
catch (IllegalAccessException ex)
{
// It's a public method, so this can't happen.
}
catch (IllegalArgumentException ex)
{
// The argument is definitely of type string, so this can't happen.
}
catch (InvocationTargetException ex)
{
// Record the wrapped exception.
throwable = ex.getTargetException();
}
if (throwable != null)
{
if (diagnostics != null)
{
diagnostics.add(new BasicDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0, throwable.getLocalizedMessage(), new Object[] { filter }));
}
return false;
}
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 SetupPlugin.INSTANCE;
}
} // SetupValidator