diff options
30 files changed, 2873 insertions, 142 deletions
diff --git a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/DefaultDescriptionPreprocessor.java b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/DefaultDescriptionPreprocessor.java index a5389544a5..0c5e75f3d6 100644 --- a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/DefaultDescriptionPreprocessor.java +++ b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/DefaultDescriptionPreprocessor.java @@ -24,6 +24,7 @@ import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.sirius.common.interpreter.api.IEvaluationResult; import org.eclipse.sirius.common.interpreter.api.IInterpreter; import org.eclipse.sirius.common.interpreter.api.IVariableManager; +import org.eclipse.sirius.properties.AbstractOverrideDescription; import org.eclipse.sirius.properties.PropertiesPackage; import org.eclipse.sirius.properties.core.internal.SiriusPropertiesCorePlugin; @@ -44,8 +45,8 @@ public class DefaultDescriptionPreprocessor<SIRIUS extends EObject> implements I protected static final String EXTENDS_FEATURE_NAME = "extends"; //$NON-NLS-1$ /** - * <<<<<<< HEAD The type of Sirius description for which this default preprocessor is configured. ======= A generic - * name representing the semantic validation rules and the property validation rules. + * The type of Sirius description for which this default preprocessor is configured. A generic name representing the + * semantic validation rules and the property validation rules. */ private static final String VALIDATION_RULES_FEATURE_NAME = "validationRules"; //$NON-NLS-1$ @@ -59,14 +60,14 @@ public class DefaultDescriptionPreprocessor<SIRIUS extends EObject> implements I * Creates a new default preprocessor. * * @param descriptionClass - * the SIRIUS_DESCRIPTION class. + * the SIRIUS class. */ public DefaultDescriptionPreprocessor(Class<SIRIUS> descriptionClass) { this.descriptionClass = descriptionClass; } @Override - public EObject convert(EObject originalDescription, TransformationCache cache, IInterpreter interpreter, IVariableManager variableManager) { + public EObject convert(EObject originalDescription, TransformationCache cache, IInterpreter interpreter, IVariableManager variableManager, OverridesProvider overridesProvider) { SIRIUS processedDescription = null; if (this.descriptionClass.isAssignableFrom(originalDescription.getClass())) { EObject createdDescription = originalDescription.eClass().getEPackage().getEFactoryInstance().create(originalDescription.eClass()); @@ -75,7 +76,8 @@ public class DefaultDescriptionPreprocessor<SIRIUS extends EObject> implements I processedDescription = this.descriptionClass.cast(createdDescription); cache.put(originalDescription, processedDescription); SIRIUS siriusOriginalDescription = this.descriptionClass.cast(originalDescription); - this.processDescriptionPropertiesRecursively(processedDescription, siriusOriginalDescription, cache, interpreter, variableManager); + this.processDescriptionOverrides(processedDescription, siriusOriginalDescription, cache, interpreter, variableManager, overridesProvider); + this.processDescriptionPropertiesRecursively(processedDescription, siriusOriginalDescription, cache, interpreter, variableManager, overridesProvider); } } return processedDescription; @@ -85,22 +87,70 @@ public class DefaultDescriptionPreprocessor<SIRIUS extends EObject> implements I * Processes all the properties of a description by resolving the inheritance relations. * * @param processedDescription - * the resulting description. + * The processed description * @param originalDescription - * the original description. + * The original description * @param cache - * the processing cache. + * The transformation cache * @param interpreter - * the interpreter. + * The interpreter * @param variableManager - * the variable manager. + * The variable manager + * @param overridesProvider + * Utility class used to provide the override description + */ + private void processDescriptionOverrides(SIRIUS processedDescription, SIRIUS originalDescription, TransformationCache cache, IInterpreter interpreter, IVariableManager variableManager, + OverridesProvider overridesProvider) { + Optional<OverridesProvider> overridesProviderOpt = Optional.ofNullable(overridesProvider); + overridesProviderOpt.ifPresent(provider -> { + // We get the values of the first override we found, in case of + // multiple overrides the others are ignored + provider.getOverrideDescriptions(originalDescription).stream().findFirst().ifPresent(overrideDescription -> { + // Copy all the structural feature values from the + // override + Optional<IDescriptionPreprocessor> optionalOverrideDescriptionPreprocessor = SiriusPropertiesCorePlugin.getPlugin().getDescriptionPreprocessor(overrideDescription); + optionalOverrideDescriptionPreprocessor.ifPresent(overrideDescriptionPreprocessor -> { + IDescriptionPreprocessor descriptionPreprocessor = optionalOverrideDescriptionPreprocessor.get(); + if (descriptionPreprocessor instanceof DefaultDescriptionPreprocessor<?>) { + DefaultDescriptionPreprocessor<?> preprocessor = (DefaultDescriptionPreprocessor<?>) descriptionPreprocessor; + EObject processedOverrideDescription = preprocessor.convert(overrideDescription, cache, interpreter, variableManager, overridesProvider); + for (EStructuralFeature eStructuralFeature : processedOverrideDescription.eClass().getEAllStructuralFeatures()) { + if (processedOverrideDescription.eIsSet(eStructuralFeature)) { + if (processedDescription.eClass().getEStructuralFeature(eStructuralFeature.getName()) != null) { + processedDescription.eSet(eStructuralFeature, processedOverrideDescription.eGet(eStructuralFeature)); + } + } + } + } + }); + }); + }); + + } + + /** + * Processes all the properties of a description by resolving the inheritance relations. >>>>>>> dc995af... [496065] + * Add support for the overrides in the preprocessing. + * + * @param processedDescription + * the resulting description + * @param originalDescription + * the original description + * @param cache + * the processing cache + * @param interpreter + * the interpreter + * @param variableManager + * the variable manager + * @param overridesProvider + * Utility class used to provide the override descriptions */ protected void processDescriptionPropertiesRecursively(SIRIUS processedDescription, SIRIUS originalDescription, TransformationCache cache, IInterpreter interpreter, - IVariableManager variableManager) { + IVariableManager variableManager, OverridesProvider overridesProvider) { Optional<SIRIUS> currentDescription = Optional.of(originalDescription); while (currentDescription.isPresent()) { for (EStructuralFeature feature : currentDescription.get().eClass().getEAllStructuralFeatures()) { - this.processDescriptionFeature(feature, processedDescription, currentDescription.get(), cache, interpreter, variableManager); + this.processDescriptionFeature(feature, processedDescription, currentDescription.get(), cache, interpreter, variableManager, overridesProvider); } currentDescription = this.getParentOf(currentDescription.get()); } @@ -120,10 +170,8 @@ public class DefaultDescriptionPreprocessor<SIRIUS extends EObject> implements I EStructuralFeature extensionFeature = description.eClass().getEStructuralFeature(EXTENDS_FEATURE_NAME); if (extensionFeature instanceof EReference) { EReference extendsEReference = (EReference) extensionFeature; - if (extendsEReference.getEType().equals(description.eClass()) && !extendsEReference.isMany()) { - Optional<Object> currentExtends = Optional.ofNullable(description.eGet(extendsEReference)); - nextParent = currentExtends.filter(ref -> description.getClass().isAssignableFrom(ref.getClass())).map(ref -> this.descriptionClass.cast(ref)); - } + Optional<Object> currentExtends = Optional.ofNullable(description.eGet(extendsEReference)); + nextParent = currentExtends.map(ref -> this.descriptionClass.cast(ref)); } return nextParent; } @@ -132,20 +180,22 @@ public class DefaultDescriptionPreprocessor<SIRIUS extends EObject> implements I * Processes all the properties of the given current description. * * @param feature - * the {@link EStructuralFeature} to process. + * the {@link EStructuralFeature} to process * @param processedDescription - * the resulting description. + * the resulting description * @param currentDescription * the original description or one of its ancestors, from which properties are inherited. * @param cache - * the processing cache. + * the processing cache * @param interpreter - * the interpreter. + * the interpreter * @param variableManager - * the variable manager. + * the variable manager + * @param overridesProvider + * Utility class used to provide the override descriptions */ protected void processDescriptionFeature(EStructuralFeature feature, SIRIUS processedDescription, SIRIUS currentDescription, TransformationCache cache, IInterpreter interpreter, - IVariableManager variableManager) { + IVariableManager variableManager, OverridesProvider overridesProvider) { if (feature instanceof EAttribute) { if (!feature.isMany()) { this.processMonoValuedEAttribute((EAttribute) feature, processedDescription, currentDescription, cache); @@ -154,9 +204,9 @@ public class DefaultDescriptionPreprocessor<SIRIUS extends EObject> implements I } } else if (feature instanceof EReference) { if (!feature.isMany()) { - this.processMonoValuedEReference((EReference) feature, processedDescription, currentDescription, cache, interpreter, variableManager); + this.processMonoValuedEReference((EReference) feature, processedDescription, currentDescription, cache, interpreter, variableManager, overridesProvider); } else { - this.processMultiValuedEReference((EReference) feature, processedDescription, currentDescription, cache, interpreter, variableManager); + this.processMultiValuedEReference((EReference) feature, processedDescription, currentDescription, cache, interpreter, variableManager, overridesProvider); } } } @@ -219,14 +269,17 @@ public class DefaultDescriptionPreprocessor<SIRIUS extends EObject> implements I * the interpreter. * @param variableManager * the variable manager. + * @param overridesProvider + * Utility class used to provide the override descriptions */ protected void processMonoValuedEReference(EReference eReference, SIRIUS processedDescription, SIRIUS currentDescription, TransformationCache cache, IInterpreter interpreter, - IVariableManager variableManager) { + IVariableManager variableManager, OverridesProvider overridesProvider) { if (!processedDescription.eIsSet(eReference)) { Object currentValue = currentDescription.eGet(eReference); if (currentValue instanceof EObject) { - SiriusPropertiesCorePlugin.getPlugin().getDescriptionPreprocessor((EObject) currentValue).ifPresent(preprocessor -> { - Object processedValue = preprocessor.convert((EObject) currentValue, cache, interpreter, variableManager); + Optional<IDescriptionPreprocessor> optionalPreprocessor = SiriusPropertiesCorePlugin.getPlugin().getDescriptionPreprocessor((EObject) currentValue); + optionalPreprocessor.ifPresent(preprocessor -> { + Object processedValue = preprocessor.convert((EObject) currentValue, cache, interpreter, variableManager, overridesProvider); processedDescription.eSet(eReference, processedValue); }); } @@ -237,20 +290,22 @@ public class DefaultDescriptionPreprocessor<SIRIUS extends EObject> implements I * Processes a multi-valued {@link EReference}. * * @param eReference - * the {@link EReference} to process. + * the {@link EReference} to process * @param processedDescription - * the resulting description. + * the resulting description * @param currentDescription - * the current description. + * the current description * @param cache - * the processing cache. + * the processing cache * @param interpreter - * the interpreter. + * the interpreter * @param variableManager - * the variable manager. + * the variable manager + * @param overridesProvider + * Utility class used to provide the override descriptions */ protected void processMultiValuedEReference(EReference eReference, SIRIUS processedDescription, SIRIUS currentDescription, TransformationCache cache, IInterpreter interpreter, - IVariableManager variableManager) { + IVariableManager variableManager, OverridesProvider overridesProvider) { Object processedValue = processedDescription.eGet(eReference); Object currentValue = currentDescription.eGet(eReference); if (currentValue instanceof Iterable<?> && processedValue instanceof Iterable<?>) { @@ -261,9 +316,9 @@ public class DefaultDescriptionPreprocessor<SIRIUS extends EObject> implements I // For each current description, process it and add it to the // newValue StreamSupport.stream(currentIterable.spliterator(), false).filter(EObject.class::isInstance).map(EObject.class::cast).forEach(siriusDescription -> { - if (!isFiltered(eReference, processedDescription, siriusDescription, interpreter, variableManager)) { + if (!isFiltered(eReference, processedDescription, siriusDescription, cache, interpreter, variableManager, overridesProvider)) { SiriusPropertiesCorePlugin.getPlugin().getDescriptionPreprocessor(siriusDescription) - .map(preprocessor -> preprocessor.convert(siriusDescription, cache, interpreter, variableManager)).map(newValue::add); + .map(preprocessor -> preprocessor.convert(siriusDescription, cache, interpreter, variableManager, overridesProvider)).map(newValue::add); } }); @@ -286,53 +341,193 @@ public class DefaultDescriptionPreprocessor<SIRIUS extends EObject> implements I * @param currentDescription * The current description * @param eStructuralFeature + * The reference + * @param processedDescription + * The processed description + * @param cache + * The transformation cache + * @param interpreter + * The interpreter + * @param variableManager + * The variable manager + * @param overridesProvider + * Utility class used to provide the override descriptions + * @return True if the eObject must be filtered otherwise false + */ + protected boolean isFiltered(EStructuralFeature eStructuralFeature, EObject processedDescription, EObject currentDescription, TransformationCache cache, IInterpreter interpreter, + IVariableManager variableManager, OverridesProvider overridesProvider) { + // check the override filters + + // @formatter:off + List<AbstractOverrideDescription> overrideDescriptions = cache.getInput(processedDescription) + .filter(EObject.class::isInstance) + .map(EObject.class::cast) + .map(overridesProvider::getOverrideDescriptions) + .orElseGet(ArrayList::new); + // @formatter:on + + boolean isFiltered = overrideDescriptions.stream().anyMatch(overrideDescription -> { + return isFiltered(eStructuralFeature, overrideDescription, currentDescription, interpreter, variableManager, "Overridden"); //$NON-NLS-1$ + }); + + // Check the extends filters + if (!isFiltered) { + isFiltered = isFiltered(eStructuralFeature, processedDescription, currentDescription, interpreter, variableManager, "Extended"); //$NON-NLS-1$ + } + return isFiltered; + } + + /** + * Check if an eObject must be filtered according to a filtering expression. + * + * @param eStructuralFeature * the reference * @param processedDescription * The processed description + * @param currentDescription + * The current description * @param interpreter * The interpreter * @param variableManager * The variable manager + * @param featureKind + * The feature kind, it could be Overridden or Extended * @return True if the eObject must be filtered otherwise false */ - protected boolean isFiltered(EStructuralFeature eStructuralFeature, EObject processedDescription, EObject currentDescription, IInterpreter interpreter, IVariableManager variableManager) { - boolean returnValue = false; - String structuralFeatureName = eStructuralFeature.getName(); - // In the metamodel, it exists only one filtering expression for the - // validation rules (the semantic validation rules and the property - // validation rules) : filtereValidationRulesFromExtendedXXXExpression. - if (PropertiesPackage.Literals.GROUP_VALIDATION_SET_DESCRIPTION__SEMANTIC_VALIDATION_RULES.getName().equals(structuralFeatureName) - || PropertiesPackage.Literals.GROUP_VALIDATION_SET_DESCRIPTION__PROPERTY_VALIDATION_RULES.getName().equals(structuralFeatureName)) { // $NON-NLS-1$ - structuralFeatureName = VALIDATION_RULES_FEATURE_NAME; + private boolean isFiltered(EStructuralFeature eStructuralFeature, EObject processedDescription, EObject currentDescription, IInterpreter interpreter, IVariableManager variableManager, + String featureKind) { + // Get the name of the feature used in the filter name + String filterFeatureName = this.getFilterFeatureName(eStructuralFeature); + String parentTypeName = this.getTypeName(processedDescription); + String filterName = this.getFilterName(filterFeatureName, parentTypeName, featureKind); + + Optional<EStructuralFeature> optionalFilterFeature = Optional.ofNullable(processedDescription.eClass().getEStructuralFeature(filterName)); + Optional<String> optionalFilterExpression = optionalFilterFeature.flatMap(filterFeature -> { + return this.getFilterExpression(processedDescription, filterFeature); + }); + + return optionalFilterExpression.map(filteringExpression -> { + Map<String, Object> variables = this.computeFilterVariables(variableManager, currentDescription, filterFeatureName); + return this.evaluateFilter(filteringExpression, interpreter, variables); + }).orElse(false); + } + + /** + * Returns the name of the structural feature associated to a filter in the metamodel. Mostly, the name is equal to + * the name of the feature. The name of the feature equals the name of the parent type without the 'Description' + * suffix, for example from the filtering expression of a page we will have access to a feature named 'group', for a + * group to a feature named 'control'... It exists one special case for the validation rules and the property + * validation rules, the feature name will be 'validationRule'. + * + * @param eStructuralFeature + * The structural feature. + * @return The name of the filter feature + */ + private String getFilterFeatureName(EStructuralFeature eStructuralFeature) { + String eStructuralFeatureName = eStructuralFeature.getName(); + if (PropertiesPackage.Literals.GROUP_VALIDATION_SET_DESCRIPTION__SEMANTIC_VALIDATION_RULES.getName().equals(eStructuralFeatureName) + || PropertiesPackage.Literals.GROUP_VALIDATION_SET_DESCRIPTION__PROPERTY_VALIDATION_RULES.getName().equals(eStructuralFeatureName)) { + eStructuralFeatureName = VALIDATION_RULES_FEATURE_NAME; } - String parentTypeName = processedDescription.eClass().getName().replace("Description", ""); //$NON-NLS-1$ //$NON-NLS-2$ - String featureName = "filter" + structuralFeatureName.substring(0, 1).toUpperCase() + structuralFeatureName.substring(1) + "FromExtended" //$NON-NLS-1$ //$NON-NLS-2$ + return eStructuralFeatureName; + } + + /** + * Get the name of the type of a Sirius description. + * + * @param processedDescription + * A Sirius description + * @return The type name of the description + */ + private String getTypeName(EObject processedDescription) { + return processedDescription.eClass().getName().replace("Description", "").replace("Override", ""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ + } + + /** + * Returns the name of the filter expression for the given EStructuralFeature. + * + * @param eStructuralFeatureName + * The name of the EStructuralFeature + * @param parentTypeName + * The name of the parent type + * @param featureKind + * The kind of feature + * @return The name of the filter expression + */ + private String getFilterName(String eStructuralFeatureName, String parentTypeName, String featureKind) { + return "filter" + eStructuralFeatureName.substring(0, 1).toUpperCase() + eStructuralFeatureName.substring(1) + "From" + featureKind //$NON-NLS-1$ //$NON-NLS-2$ + parentTypeName + "Expression"; //$NON-NLS-1$ - Optional<EStructuralFeature> filterStructuralFeature = Optional.ofNullable(processedDescription.eClass().getEStructuralFeature(featureName)); - Optional<String> filteringExpression = Optional.empty(); - if (filterStructuralFeature.isPresent()) { - filteringExpression = Optional.ofNullable(processedDescription.eGet(filterStructuralFeature.get())).filter(String.class::isInstance).map(String.class::cast); - if (filteringExpression.isPresent()) { - Map<String, Object> variables = new HashMap<String, Object>(); - variables.putAll(variableManager.getVariables()); - // The name of the variable equals the name of the parent type - // without the 'Description' suffix, for example from the - // filtering expression of a page we will have acess to a - // variable named 'group', for a group to variables named - // 'control'... It exists only one special case for the semantic - // validation rules and the property validation rules, the - // variable will be 'validationRule'. - String variableName = structuralFeatureName.substring(0, structuralFeatureName.length() - 1); - variables.put(variableName, currentDescription); - IEvaluationResult evaluationResult = interpreter.evaluateExpression(variables, filteringExpression.get()); - if (evaluationResult.success()) { - Object value = evaluationResult.getValue(); - if (value != null && Boolean.class.isInstance(value)) { - returnValue = Boolean.class.cast(value); - } - } - } - } - return returnValue; + } + + /** + * Get the filter expression associated to a filter feature. + * + * @param processedDescription + * The Sirius description + * @param eStructuralFeature + * The filter feature + * @return The filter expression + */ + private Optional<String> getFilterExpression(EObject processedDescription, EStructuralFeature eStructuralFeature) { + // @formatter:off + return Optional.ofNullable(processedDescription.eGet(eStructuralFeature)) + .filter(String.class::isInstance) + .map(String.class::cast); + // @formatter:on + } + + /** + * Compute the filter variables. + * + * @param variableManager + * The variable manager + * @param currentDescription + * The current description + * @param eStructuralFeatureName + * The filter feature name + * @return The variables + */ + private Map<String, Object> computeFilterVariables(IVariableManager variableManager, EObject currentDescription, String eStructuralFeatureName) { + Map<String, Object> variables = new HashMap<>(); + variables.putAll(variableManager.getVariables()); + String variableName = this.getVariableName(eStructuralFeatureName); + variables.put(variableName, currentDescription); + return variables; + } + + /** + * Get the variable name. The variable name is equal to the feature name without the last 's', i.e: for a 'groups' + * feature, the variable will be 'group'. + * + * @param eStructuralFeatureName + * The structural feature name + * @return The variable name + */ + private String getVariableName(String eStructuralFeatureName) { + return eStructuralFeatureName.substring(0, eStructuralFeatureName.length() - 1); + } + + /** + * Evaluate the filtering expression. + * + * @param filteringExpression + * The filtering expression + * @param interpreter + * The interpreter + * @param variables + * The variables + * @return The evaluation result + */ + private boolean evaluateFilter(String filteringExpression, IInterpreter interpreter, Map<String, Object> variables) { + IEvaluationResult evaluationResult = interpreter.evaluateExpression(variables, filteringExpression); + + // @formatter:off + return Optional.ofNullable(evaluationResult) + .filter(IEvaluationResult::success) + .map(IEvaluationResult::getValue) + .filter(Boolean.class::isInstance) + .map(Boolean.class::cast) + .orElse(false); + // @formatter:on } } diff --git a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/DefaultDescriptionPreprocessorWithFiltering.java b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/DefaultDescriptionPreprocessorWithFiltering.java index 0fda45fd91..8ccd5dd89d 100644 --- a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/DefaultDescriptionPreprocessorWithFiltering.java +++ b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/DefaultDescriptionPreprocessorWithFiltering.java @@ -50,11 +50,11 @@ public class DefaultDescriptionPreprocessorWithFiltering<SIRIUS extends EObject> * The constructor. * * @param descriptionClass - * the SIRIUS_DESCRIPTION class. + * the SIRIUS class * @param featuresToFilter * the collection of features of {@code descriptionClass} that must be ignored during the preprocessing. * @param featuresToCopy - * the collection of features of {@code descriptionClass} that must be copied during the preprocessing. + * the collection of features of {@code descriptionClass} that must be copied during the preprocessing */ public DefaultDescriptionPreprocessorWithFiltering(Class<SIRIUS> descriptionClass, Collection<EStructuralFeature> featuresToFilter, Collection<EStructuralFeature> featuresToCopy) { super(descriptionClass); @@ -67,30 +67,32 @@ public class DefaultDescriptionPreprocessorWithFiltering<SIRIUS extends EObject> * methods that do the copying. * * @param feature - * the {@link EStructuralFeature} to process. + * the {@link EStructuralFeature} to process * @param processedDescription - * the resulting description. + * the resulting description * @param currentDescription - * the original description or one of its ancestors, from which properties are inherited. + * the original description or one of its ancestors, from which properties are inherited * @param cache - * the processing cache. + * the processing cache * @param interpreter - * the interpreter. + * the interpreter * @param variableManager - * the variable manager. + * the variable manager + * @param overridesProvider + * Utility class used to provide the override descriptions */ @Override protected void processDescriptionFeature(EStructuralFeature feature, SIRIUS processedDescription, SIRIUS currentDescription, TransformationCache cache, IInterpreter interpreter, - IVariableManager variableManager) { + IVariableManager variableManager, OverridesProvider overridesProvider) { if (!featuresToFilter.contains(feature)) { if (featuresToCopy.contains(feature)) { if (!feature.isMany()) { processMonoValuedFeatureByCopying(feature, processedDescription, currentDescription, cache); } else { - processManyValuedFeatureByCopying(feature, processedDescription, currentDescription, cache, interpreter, variableManager); + processManyValuedFeatureByCopying(feature, processedDescription, currentDescription, cache, interpreter, variableManager, overridesProvider); } } else { - super.processDescriptionFeature(feature, processedDescription, currentDescription, cache, interpreter, variableManager); + super.processDescriptionFeature(feature, processedDescription, currentDescription, cache, interpreter, variableManager, overridesProvider); } } } @@ -136,9 +138,11 @@ public class DefaultDescriptionPreprocessorWithFiltering<SIRIUS extends EObject> * The interpreter * @param variableManager * The variable manager + * @param overridesProvider + * Utility class used to provide the override descriptions */ protected void processManyValuedFeatureByCopying(EStructuralFeature manyValuedFeature, SIRIUS processedDescription, SIRIUS currentDescription, TransformationCache cache, IInterpreter interpreter, - IVariableManager variableManager) { + IVariableManager variableManager, OverridesProvider overridesProvider) { Object processedValue = processedDescription.eGet(manyValuedFeature); Object currentValue = currentDescription.eGet(manyValuedFeature); if (currentValue instanceof Iterable<?> && processedValue instanceof Iterable<?>) { @@ -149,7 +153,7 @@ public class DefaultDescriptionPreprocessorWithFiltering<SIRIUS extends EObject> // For each current description create a copy and set it in the new // values StreamSupport.stream(currentIterable.spliterator(), false).filter(EObject.class::isInstance).map(EObject.class::cast).forEach(object -> { - if (!this.isFiltered(manyValuedFeature, processedDescription, object, interpreter, variableManager)) { + if (!this.isFiltered(manyValuedFeature, processedDescription, object, cache, interpreter, variableManager, overridesProvider)) { EObject newEObject = EcoreUtil.copy(object); cache.put(object, newEObject); newValue.add(newEObject); diff --git a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/DefaultRulesProvider.java b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/DefaultRulesProvider.java index 1e6ceb51f2..cca2eb6546 100644 --- a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/DefaultRulesProvider.java +++ b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/DefaultRulesProvider.java @@ -72,14 +72,18 @@ public final class DefaultRulesProvider { if (!optionalResource.isPresent()) { SiriusPropertiesCorePlugin.getPlugin().error(Messages.DefaultRulesProvider_DefaultPropertiesNotFound); - } else { - Resource resource = optionalResource.get(); - Optional<Group> optionalGroup = resource.getContents().stream().filter(Group.class::isInstance).map(Group.class::cast).findFirst(); - Optional<ViewExtensionDescription> optionalViewExtensionDescription = optionalGroup.flatMap(group -> { - return group.getExtensions().stream().filter(ViewExtensionDescription.class::isInstance).map(ViewExtensionDescription.class::cast).findFirst(); - }); - return optionalViewExtensionDescription.get(); } - return null; + + // @formatter:off + return optionalResource.flatMap(resource -> { + return resource.getContents().stream() + .filter(Group.class::isInstance) + .map(Group.class::cast) + .flatMap(group -> group.getExtensions().stream()) + .filter(ViewExtensionDescription.class::isInstance) + .map(ViewExtensionDescription.class::cast) + .findFirst(); + }).orElse(null); + // @formatter:on } } diff --git a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/DialogModelOperationPreprocessor.java b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/DialogModelOperationPreprocessor.java index 7288e9f535..80e5c9135d 100644 --- a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/DialogModelOperationPreprocessor.java +++ b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/DialogModelOperationPreprocessor.java @@ -46,6 +46,11 @@ public class DialogModelOperationPreprocessor { private IVariableManager variableManager; /** + * The overrides provider. + */ + private OverridesProvider overridesProvider; + + /** * The constructor. * * @param dialogModelOperation @@ -54,11 +59,14 @@ public class DialogModelOperationPreprocessor { * The interpreter * @param variableManager * The variable manager + * @param overridesProvider + * The overrides provider */ - public DialogModelOperationPreprocessor(DialogModelOperation dialogModelOperation, IInterpreter interpreter, IVariableManager variableManager) { + public DialogModelOperationPreprocessor(DialogModelOperation dialogModelOperation, IInterpreter interpreter, IVariableManager variableManager, OverridesProvider overridesProvider) { this.dialogModelOperation = dialogModelOperation; this.interpreter = interpreter; this.variableManager = variableManager; + this.overridesProvider = overridesProvider; } /** @@ -121,7 +129,7 @@ public class DialogModelOperationPreprocessor { Optional.ofNullable(this.dialogModelOperation.getPage()).ifPresent(pageDescription -> { Optional<IDescriptionPreprocessor> optionalPreprocessor = SiriusPropertiesCorePlugin.getPlugin().getDescriptionPreprocessor(pageDescription); optionalPreprocessor.ifPresent(preprocessor -> { - EObject convertedEObject = preprocessor.convert(pageDescription, cache, interpreter, variableManager); + EObject convertedEObject = preprocessor.convert(pageDescription, cache, interpreter, variableManager, overridesProvider); if (convertedEObject instanceof PageDescription) { convertedDialogModelOperation.setPage((PageDescription) convertedEObject); } @@ -141,7 +149,7 @@ public class DialogModelOperationPreprocessor { this.dialogModelOperation.getGroups().forEach(groupDescription -> { Optional<IDescriptionPreprocessor> optionalPreprocessor = SiriusPropertiesCorePlugin.getPlugin().getDescriptionPreprocessor(groupDescription); optionalPreprocessor.ifPresent(preprocessor -> { - EObject convertedEObject = preprocessor.convert(groupDescription, cache, interpreter, variableManager); + EObject convertedEObject = preprocessor.convert(groupDescription, cache, interpreter, variableManager, overridesProvider); if (convertedEObject instanceof GroupDescription) { convertedDialogModelOperation.getGroups().add((GroupDescription) convertedEObject); } diff --git a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/IDescriptionPreprocessor.java b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/IDescriptionPreprocessor.java index 8e15f658e0..283dca0e54 100644 --- a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/IDescriptionPreprocessor.java +++ b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/IDescriptionPreprocessor.java @@ -45,9 +45,11 @@ public interface IDescriptionPreprocessor { * the interpreter * @param variableManager * the variable manager + * @param overridesProvider + * Utility class used to provide the override descriptions * @return a semantically equivalent description to * {@code originalDescription}, but with inheritance and extension * relations unfolded. */ - EObject convert(EObject description, TransformationCache cache, IInterpreter interpreter, IVariableManager variableManager); + EObject convert(EObject description, TransformationCache cache, IInterpreter interpreter, IVariableManager variableManager, OverridesProvider overridesProvider); } diff --git a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/OverridesProvider.java b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/OverridesProvider.java new file mode 100644 index 0000000000..5166025106 --- /dev/null +++ b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/OverridesProvider.java @@ -0,0 +1,75 @@ +/******************************************************************************* + * Copyright (c) 2017 Obeo. + * 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: + * Obeo - initial API and implementation + *******************************************************************************/ +package org.eclipse.sirius.properties.core.api; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature.Setting; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.util.ECrossReferenceAdapter; +import org.eclipse.sirius.business.api.session.Session; +import org.eclipse.sirius.properties.AbstractOverrideDescription; + +/** + * Utility class used to provide the {@link AbstractOverrideDescription}. + * + * @author mbats + */ +public class OverridesProvider { + /** + * The Sirius session. + */ + private Session session; + + /** + * The constructor. + * + * @param session + * The Sirius session + */ + public OverridesProvider(Session session) { + this.session = session; + } + + /** + * Provides the {@link AbstractOverrideDescription} for the given + * {@link EObject}. + * + * @param eObject + * The sirius description + * @return The collection of the {@link AbstractOverrideDescription} + * overriding the given description + */ + public List<AbstractOverrideDescription> getOverrideDescriptions(EObject eObject) { + List<AbstractOverrideDescription> descriptions = new ArrayList<>(); + + Optional<ECrossReferenceAdapter> optionalCrossReferencer = Optional.ofNullable(session).map(Session::getSemanticCrossReferencer); + optionalCrossReferencer.ifPresent(crossReferencer -> { + // @formatter:off + crossReferencer.getInverseReferences(eObject, true).stream() + .filter(setting -> "overrides".equals(setting.getEStructuralFeature().getName())) //$NON-NLS-1$ + .map(Setting::getEObject) + .filter(AbstractOverrideDescription.class::isInstance) + .map(AbstractOverrideDescription.class::cast) + .forEach(descriptions::add); + // @formatter:on + }); + + return descriptions.stream().filter(description -> { + List<Resource> activatedViewpointResources = session.getSelectedViewpoints(true).stream().map(EObject::eResource).collect(Collectors.toList()); + return activatedViewpointResources.contains(description.eResource()); + }).collect(Collectors.toList()); + } +} diff --git a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/PreconfiguredPreprocessor.java b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/PreconfiguredPreprocessor.java index dc9e5a7b63..ac1351cc59 100644 --- a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/PreconfiguredPreprocessor.java +++ b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/PreconfiguredPreprocessor.java @@ -58,9 +58,9 @@ public class PreconfiguredPreprocessor<SIRIUS extends EObject> extends DefaultDe @Override protected void processManyValuedFeatureByCopying(EStructuralFeature manyValuedFeature, SIRIUS processedDescription, SIRIUS currentDescription, TransformationCache cache, IInterpreter interpreter, - IVariableManager variableManager) { + IVariableManager variableManager, OverridesProvider overridesProvider) { if (!PropertiesPackage.Literals.WIDGET_ACTION.equals(manyValuedFeature.getEType())) { - super.processManyValuedFeatureByCopying(manyValuedFeature, processedDescription, currentDescription, cache, interpreter, variableManager); + super.processManyValuedFeatureByCopying(manyValuedFeature, processedDescription, currentDescription, cache, interpreter, variableManager, overridesProvider); } Object processedValue = processedDescription.eGet(manyValuedFeature); @@ -74,7 +74,7 @@ public class PreconfiguredPreprocessor<SIRIUS extends EObject> extends DefaultDe StreamSupport.stream(currentIterable.spliterator(), false).filter(EObject.class::isInstance).map(EObject.class::cast).forEach(object -> { Optional<IDescriptionPreprocessor> preprocessor = SiriusPropertiesCorePlugin.getPlugin().getDescriptionPreprocessor(object); if (preprocessor.isPresent()) { - Object processedWidgetAction = preprocessor.get().convert(object, cache, interpreter, variableManager); + Object processedWidgetAction = preprocessor.get().convert(object, cache, interpreter, variableManager, overridesProvider); newValue.add(processedWidgetAction); } }); diff --git a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/ViewDescriptionPreprocessor.java b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/ViewDescriptionPreprocessor.java index 108c9f34da..1f756cd2ec 100644 --- a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/ViewDescriptionPreprocessor.java +++ b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/ViewDescriptionPreprocessor.java @@ -50,14 +50,16 @@ public class ViewDescriptionPreprocessor { * The interpreter * @param variableManager * The variable manager + * @param overridesProvider + * Utility class used to provide the override descriptions * @return The {@link ViewExtensionDescription} computed */ - public Optional<ViewExtensionDescription> convert(IInterpreter interpreter, IVariableManager variableManager) { + public Optional<ViewExtensionDescription> convert(IInterpreter interpreter, IVariableManager variableManager, OverridesProvider overridesProvider) { TransformationCache cache = new TransformationCache(); // Starts the conversion return SiriusPropertiesCorePlugin.getPlugin().getDescriptionPreprocessor(originalDescription).flatMap(preprocessor -> { - EObject viewExtensionDescription = preprocessor.convert(originalDescription, cache, interpreter, variableManager); + EObject viewExtensionDescription = preprocessor.convert(originalDescription, cache, interpreter, variableManager, overridesProvider); // Starts the resolution of the links List<IDescriptionLinkResolver> linkResolvers = SiriusPropertiesCorePlugin.getPlugin().getDescriptionPreprocessorLinkResolvers(); diff --git a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/WizardModelOperationPreprocessor.java b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/WizardModelOperationPreprocessor.java index cff1b87884..96bb9ba42f 100644 --- a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/WizardModelOperationPreprocessor.java +++ b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/api/WizardModelOperationPreprocessor.java @@ -45,6 +45,11 @@ public class WizardModelOperationPreprocessor { private IVariableManager variableManager; /** + * The overrides provider. + */ + private OverridesProvider overridesProvider; + + /** * The constructor. * * @param wizardModelOperation @@ -53,11 +58,14 @@ public class WizardModelOperationPreprocessor { * The interpreter * @param variableManager * The variable manager + * @param overridesProvider + * The overrides provider */ - public WizardModelOperationPreprocessor(WizardModelOperation wizardModelOperation, IInterpreter interpreter, IVariableManager variableManager) { + public WizardModelOperationPreprocessor(WizardModelOperation wizardModelOperation, IInterpreter interpreter, IVariableManager variableManager, OverridesProvider overridesProvider) { this.wizardModelOperation = wizardModelOperation; this.interpreter = interpreter; this.variableManager = variableManager; + this.overridesProvider = overridesProvider; } /** @@ -108,7 +116,7 @@ public class WizardModelOperationPreprocessor { this.wizardModelOperation.getPages().forEach(pageDescription -> { Optional<IDescriptionPreprocessor> optionalPreprocessor = SiriusPropertiesCorePlugin.getPlugin().getDescriptionPreprocessor(pageDescription); optionalPreprocessor.ifPresent(preprocessor -> { - EObject convertedEObject = preprocessor.convert(pageDescription, cache, this.interpreter, this.variableManager); + EObject convertedEObject = preprocessor.convert(pageDescription, cache, this.interpreter, this.variableManager, this.overridesProvider); if (convertedEObject instanceof PageDescription) { convertedWizardModelOperation.getPages().add((PageDescription) convertedEObject); } @@ -128,7 +136,7 @@ public class WizardModelOperationPreprocessor { this.wizardModelOperation.getGroups().forEach(groupDescription -> { Optional<IDescriptionPreprocessor> optionalPreprocessor = SiriusPropertiesCorePlugin.getPlugin().getDescriptionPreprocessor(groupDescription); optionalPreprocessor.ifPresent(preprocessor -> { - EObject convertedEObject = preprocessor.convert(groupDescription, cache, this.interpreter, this.variableManager); + EObject convertedEObject = preprocessor.convert(groupDescription, cache, this.interpreter, this.variableManager, this.overridesProvider); if (convertedEObject instanceof GroupDescription) { convertedWizardModelOperation.getGroups().add((GroupDescription) convertedEObject); } diff --git a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/internal/preprocessor/GroupDescriptionPreprocessor.java b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/internal/preprocessor/GroupDescriptionPreprocessor.java index 9061023a1c..ecc54aca76 100644 --- a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/internal/preprocessor/GroupDescriptionPreprocessor.java +++ b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/internal/preprocessor/GroupDescriptionPreprocessor.java @@ -18,17 +18,18 @@ import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.sirius.common.interpreter.api.IInterpreter; import org.eclipse.sirius.common.interpreter.api.IVariableManager; -import org.eclipse.sirius.properties.GroupDescription; +import org.eclipse.sirius.properties.AbstractGroupDescription; import org.eclipse.sirius.properties.GroupValidationSetDescription; import org.eclipse.sirius.properties.PropertiesFactory; import org.eclipse.sirius.properties.PropertiesPackage; import org.eclipse.sirius.properties.PropertyValidationRule; +import org.eclipse.sirius.properties.core.api.OverridesProvider; import org.eclipse.sirius.properties.core.api.PreconfiguredPreprocessor; import org.eclipse.sirius.properties.core.api.TransformationCache; import org.eclipse.sirius.viewpoint.description.validation.SemanticValidationRule; /** - * Preprocessor for {@link GroupDescription}. + * Preprocessor for {@link AbstractGroupDescription}. * <ul> * <li>The {@code filterConditionalStylesFromExtendedGroupExpression} attribute is ignored.</li> * <li>The {@code filterControlsFromExtendedGroupExpression} attribute is ignored.</li> @@ -42,7 +43,7 @@ import org.eclipse.sirius.viewpoint.description.validation.SemanticValidationRul * @author flatombe * @author mbats */ -public class GroupDescriptionPreprocessor extends PreconfiguredPreprocessor<GroupDescription> { +public class GroupDescriptionPreprocessor extends PreconfiguredPreprocessor<AbstractGroupDescription> { /** * The validation set feature is handled separately. */ @@ -52,16 +53,16 @@ public class GroupDescriptionPreprocessor extends PreconfiguredPreprocessor<Grou * The constructor. */ public GroupDescriptionPreprocessor() { - super(GroupDescription.class, PropertiesPackage.Literals.GROUP_DESCRIPTION); + super(AbstractGroupDescription.class, PropertiesPackage.Literals.GROUP_DESCRIPTION); } @Override - protected void processMonoValuedEReference(EReference eReference, GroupDescription processedDescription, GroupDescription currentDescription, TransformationCache cache, IInterpreter interpreter, - IVariableManager variableManager) { + protected void processMonoValuedEReference(EReference eReference, AbstractGroupDescription processedDescription, AbstractGroupDescription currentDescription, TransformationCache cache, + IInterpreter interpreter, IVariableManager variableManager, OverridesProvider overridesProvider) { if (!eReference.equals(VALIDATIONSET_FEATURE)) { - super.processMonoValuedEReference(eReference, processedDescription, currentDescription, cache, interpreter, variableManager); + super.processMonoValuedEReference(eReference, processedDescription, currentDescription, cache, interpreter, variableManager, overridesProvider); } else { - processValidationSet(processedDescription, currentDescription, cache, interpreter, variableManager); + processValidationSet(processedDescription, currentDescription, cache, interpreter, variableManager, overridesProvider); } } @@ -79,9 +80,11 @@ public class GroupDescriptionPreprocessor extends PreconfiguredPreprocessor<Grou * the interpreter. * @param variableManager * the variable manager. + * @param overridesProvider + * Utility class used to provide the override descriptions. */ - private void processValidationSet(GroupDescription processedDescription, GroupDescription currentDescription, TransformationCache cache, IInterpreter interpreter, - IVariableManager variableManager) { + private void processValidationSet(AbstractGroupDescription processedDescription, AbstractGroupDescription currentDescription, TransformationCache cache, IInterpreter interpreter, + IVariableManager variableManager, OverridesProvider overridesProvider) { if (currentDescription.eIsSet(VALIDATIONSET_FEATURE)) { GroupValidationSetDescription validationSet = Optional.ofNullable(processedDescription.getValidationSet()).orElse(PropertiesFactory.eINSTANCE.createGroupValidationSetDescription()); processedDescription.setValidationSet(validationSet); @@ -91,7 +94,8 @@ public class GroupDescriptionPreprocessor extends PreconfiguredPreprocessor<Grou // Copy all the semantic validation rules List<SemanticValidationRule> newSemanticValidationRules = new ArrayList<>(); currentDescription.getValidationSet().getSemanticValidationRules().forEach(rule -> { - if (!this.isFiltered(PropertiesPackage.eINSTANCE.getGroupValidationSetDescription_SemanticValidationRules(), processedDescription, rule, interpreter, variableManager)) { + if (!this.isFiltered(PropertiesPackage.eINSTANCE.getGroupValidationSetDescription_SemanticValidationRules(), processedDescription, rule, cache, interpreter, variableManager, + overridesProvider)) { newSemanticValidationRules.add(EcoreUtil.copy(rule)); } }); @@ -102,7 +106,8 @@ public class GroupDescriptionPreprocessor extends PreconfiguredPreprocessor<Grou // Copy all the property validation rules List<PropertyValidationRule> newPropertyValidationRules = new ArrayList<>(); currentDescription.getValidationSet().getPropertyValidationRules().forEach(rule -> { - if (!this.isFiltered(PropertiesPackage.eINSTANCE.getGroupValidationSetDescription_PropertyValidationRules(), processedDescription, rule, interpreter, variableManager)) { + if (!this.isFiltered(PropertiesPackage.eINSTANCE.getGroupValidationSetDescription_PropertyValidationRules(), processedDescription, rule, cache, interpreter, variableManager, + overridesProvider)) { newPropertyValidationRules.add(EcoreUtil.copy(rule)); } }); diff --git a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/internal/preprocessor/GroupOverrideDescriptionPreprocessor.java b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/internal/preprocessor/GroupOverrideDescriptionPreprocessor.java new file mode 100644 index 0000000000..764859c541 --- /dev/null +++ b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/internal/preprocessor/GroupOverrideDescriptionPreprocessor.java @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2017 Obeo. + * 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: + * Obeo - initial API and implementation + *******************************************************************************/ +package org.eclipse.sirius.properties.core.internal.preprocessor; + +import org.eclipse.emf.ecore.EReference; +import org.eclipse.sirius.common.interpreter.api.IInterpreter; +import org.eclipse.sirius.common.interpreter.api.IVariableManager; +import org.eclipse.sirius.properties.AbstractGroupDescription; +import org.eclipse.sirius.properties.core.api.OverridesProvider; +import org.eclipse.sirius.properties.core.api.TransformationCache; + +/** + * Preprocessor for + * {@link org.eclipse.sirius.properties.GroupOverrideDescription}. + * <ul> + * <li>The {@code overrides} containment is ignored.</li> + * </ul> + * + * @author mbats + */ +public class GroupOverrideDescriptionPreprocessor extends GroupDescriptionPreprocessor { + @Override + protected void processMonoValuedEReference(EReference eReference, AbstractGroupDescription processedDescription, AbstractGroupDescription currentDescription, TransformationCache cache, + IInterpreter interpreter, IVariableManager variableManager, OverridesProvider overridesProvider) { + if (!eReference.equals(currentDescription.eClass().getEStructuralFeature("overrides"))) { //$NON-NLS-1$ + super.processMonoValuedEReference(eReference, processedDescription, currentDescription, cache, interpreter, variableManager, overridesProvider); + } + } +} diff --git a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/internal/preprocessor/OverrideDescriptionPreprocessor.java b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/internal/preprocessor/OverrideDescriptionPreprocessor.java new file mode 100644 index 0000000000..8110d7c492 --- /dev/null +++ b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/internal/preprocessor/OverrideDescriptionPreprocessor.java @@ -0,0 +1,51 @@ +/******************************************************************************* + * Copyright (c) 2017 Obeo. + * 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: + * Obeo - initial API and implementation + *******************************************************************************/ +package org.eclipse.sirius.properties.core.internal.preprocessor; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EReference; +import org.eclipse.sirius.common.interpreter.api.IInterpreter; +import org.eclipse.sirius.common.interpreter.api.IVariableManager; +import org.eclipse.sirius.properties.core.api.OverridesProvider; +import org.eclipse.sirius.properties.core.api.PreconfiguredPreprocessor; +import org.eclipse.sirius.properties.core.api.TransformationCache; + +/** + * Preprocessor for + * {@link org.eclipse.sirius.properties.AbstractOverrideDescription}. + * <ul> + * <li>The {@code overrides} containment is ignored.</li> + * </ul> + * + * @author mbats + */ +public class OverrideDescriptionPreprocessor<SIRIUS extends EObject> extends PreconfiguredPreprocessor<SIRIUS> { + /** + * The constructor. + * + * @param descriptionClass + * the SIRIUS class + * @param eClass + * the EClass of the Sirius object + */ + public OverrideDescriptionPreprocessor(Class<SIRIUS> descriptionClass, EClass eClass) { + super(descriptionClass, eClass); + } + + @Override + protected void processMonoValuedEReference(EReference eReference, SIRIUS processedDescription, SIRIUS currentDescription, TransformationCache cache, IInterpreter interpreter, + IVariableManager variableManager, OverridesProvider overridesProvider) { + if (!eReference.equals(currentDescription.eClass().getEStructuralFeature("overrides"))) { //$NON-NLS-1$ + super.processMonoValuedEReference(eReference, processedDescription, currentDescription, cache, interpreter, variableManager, overridesProvider); + } + } +} diff --git a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/internal/preprocessor/PageDescriptionPreprocessor.java b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/internal/preprocessor/PageDescriptionPreprocessor.java index 637c39c155..3f8f75d97a 100644 --- a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/internal/preprocessor/PageDescriptionPreprocessor.java +++ b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/internal/preprocessor/PageDescriptionPreprocessor.java @@ -19,6 +19,7 @@ import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.sirius.common.interpreter.api.IInterpreter; import org.eclipse.sirius.common.interpreter.api.IVariableManager; +import org.eclipse.sirius.properties.AbstractPageDescription; import org.eclipse.sirius.properties.DialogModelOperation; import org.eclipse.sirius.properties.GroupDescription; import org.eclipse.sirius.properties.PageDescription; @@ -29,6 +30,7 @@ import org.eclipse.sirius.properties.ViewExtensionDescription; import org.eclipse.sirius.properties.WizardModelOperation; import org.eclipse.sirius.properties.core.api.DefaultDescriptionPreprocessorWithFiltering; import org.eclipse.sirius.properties.core.api.IDescriptionPreprocessor; +import org.eclipse.sirius.properties.core.api.OverridesProvider; import org.eclipse.sirius.properties.core.api.PreconfiguredPreprocessorUtils; import org.eclipse.sirius.properties.core.api.TransformationCache; import org.eclipse.sirius.properties.core.internal.SiriusPropertiesCorePlugin; @@ -47,7 +49,7 @@ import org.eclipse.sirius.viewpoint.description.validation.SemanticValidationRul * @author flatombe * @author mbats */ -public class PageDescriptionPreprocessor extends DefaultDescriptionPreprocessorWithFiltering<PageDescription> { +public class PageDescriptionPreprocessor extends DefaultDescriptionPreprocessorWithFiltering<AbstractPageDescription> { /** * This feature is handled separately. */ @@ -57,17 +59,17 @@ public class PageDescriptionPreprocessor extends DefaultDescriptionPreprocessorW * The constructor. */ public PageDescriptionPreprocessor() { - super(PageDescription.class, PreconfiguredPreprocessorUtils.getFeaturesToFilter(PropertiesPackage.Literals.PAGE_DESCRIPTION), + super(AbstractPageDescription.class, PreconfiguredPreprocessorUtils.getFeaturesToFilter(PropertiesPackage.Literals.PAGE_DESCRIPTION), PreconfiguredPreprocessorUtils.getFeaturesToCopy(PropertiesPackage.Literals.PAGE_DESCRIPTION)); } @Override - protected void processMonoValuedEReference(EReference eReference, PageDescription processedDescription, PageDescription currentDescription, TransformationCache cache, IInterpreter interpreter, - IVariableManager variableManager) { + protected void processMonoValuedEReference(EReference eReference, AbstractPageDescription processedDescription, AbstractPageDescription currentDescription, TransformationCache cache, + IInterpreter interpreter, IVariableManager variableManager, OverridesProvider overridesProvider) { if (!eReference.equals(VALIDATIONSET_FEATURE)) { - super.processMonoValuedEReference(eReference, processedDescription, currentDescription, cache, interpreter, variableManager); + super.processMonoValuedEReference(eReference, processedDescription, currentDescription, cache, interpreter, variableManager, overridesProvider); } else { - processValidationSet(processedDescription, currentDescription, cache, interpreter, variableManager); + processValidationSet(processedDescription, currentDescription, cache, interpreter, variableManager, overridesProvider); } } @@ -85,8 +87,11 @@ public class PageDescriptionPreprocessor extends DefaultDescriptionPreprocessorW * the interpreter. * @param variableManager * the variable manager. + * @param overridesProvider + * Utility class used to provide the override descriptions */ - private void processValidationSet(PageDescription processedDescription, PageDescription currentDescription, TransformationCache cache, IInterpreter interpreter, IVariableManager variableManager) { + private void processValidationSet(AbstractPageDescription processedDescription, AbstractPageDescription currentDescription, TransformationCache cache, IInterpreter interpreter, + IVariableManager variableManager, OverridesProvider overridesProvider) { if (currentDescription.eIsSet(VALIDATIONSET_FEATURE)) { PageValidationSetDescription validationSet = Optional.ofNullable(processedDescription.getValidationSet()).orElse(PropertiesFactory.eINSTANCE.createPageValidationSetDescription()); processedDescription.setValidationSet(validationSet); @@ -95,7 +100,8 @@ public class PageDescriptionPreprocessor extends DefaultDescriptionPreprocessorW // then those contributed by the current description. List<SemanticValidationRule> newValue = new ArrayList<>(); currentDescription.getValidationSet().getSemanticValidationRules().forEach(rule -> { - if (!this.isFiltered(PropertiesPackage.eINSTANCE.getPageValidationSetDescription_SemanticValidationRules(), processedDescription, rule, interpreter, variableManager)) { + if (!this.isFiltered(PropertiesPackage.eINSTANCE.getPageValidationSetDescription_SemanticValidationRules(), processedDescription, rule, cache, interpreter, variableManager, + overridesProvider)) { newValue.add(EcoreUtil.copy(rule)); } }); @@ -107,12 +113,12 @@ public class PageDescriptionPreprocessor extends DefaultDescriptionPreprocessorW } @Override - protected void processMultiValuedEReference(EReference eReference, PageDescription processedDescription, PageDescription currentDescription, TransformationCache cache, IInterpreter interpreter, - IVariableManager variableManager) { + protected void processMultiValuedEReference(EReference eReference, AbstractPageDescription processedDescription, AbstractPageDescription currentDescription, TransformationCache cache, + IInterpreter interpreter, IVariableManager variableManager, OverridesProvider overridesProvider) { if (!eReference.equals(PropertiesPackage.Literals.ABSTRACT_PAGE_DESCRIPTION__GROUPS)) { - super.processMultiValuedEReference(eReference, processedDescription, currentDescription, cache, interpreter, variableManager); + super.processMultiValuedEReference(eReference, processedDescription, currentDescription, cache, interpreter, variableManager, overridesProvider); } else { - processGroups(processedDescription, currentDescription, cache, interpreter, variableManager); + processGroups(processedDescription, currentDescription, cache, interpreter, variableManager, overridesProvider); } } @@ -130,17 +136,20 @@ public class PageDescriptionPreprocessor extends DefaultDescriptionPreprocessorW * the interpreter. * @param variableManager * the variable manager. + * @param overridesProvider + * Utility class used to provide the override descriptions */ - private void processGroups(PageDescription processedDescription, PageDescription currentDescription, TransformationCache cache, IInterpreter interpreter, IVariableManager variableManager) { + private void processGroups(AbstractPageDescription processedDescription, AbstractPageDescription currentDescription, TransformationCache cache, IInterpreter interpreter, + IVariableManager variableManager, OverridesProvider overridesProvider) { currentDescription.getGroups().forEach(groupDescription -> { Optional<Object> inputDescription = cache.getInput(processedDescription); Optional<PageDescription> optionalInputPageDescription = inputDescription.filter(PageDescription.class::isInstance).map(PageDescription.class::cast); Optional<IDescriptionPreprocessor> optionalDescriptionPreprocessor = SiriusPropertiesCorePlugin.getPlugin().getDescriptionPreprocessor(groupDescription); - if (!this.isFiltered(PropertiesPackage.eINSTANCE.getAbstractPageDescription_Groups(), processedDescription, groupDescription, interpreter, variableManager) + if (!this.isFiltered(PropertiesPackage.eINSTANCE.getAbstractPageDescription_Groups(), processedDescription, groupDescription, cache, interpreter, variableManager, overridesProvider) && optionalInputPageDescription.isPresent() && this.shouldProcessGroup(optionalInputPageDescription.get(), groupDescription)) { // @formatter:off - optionalDescriptionPreprocessor.map(descriptionPreprocessor -> descriptionPreprocessor.convert(groupDescription, cache, interpreter, variableManager)) + optionalDescriptionPreprocessor.map(descriptionPreprocessor -> descriptionPreprocessor.convert(groupDescription, cache, interpreter, variableManager, overridesProvider)) .filter(GroupDescription.class::isInstance) .map(GroupDescription.class::cast) .map(processedDescription.getGroups()::add); diff --git a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/internal/preprocessor/PageOverrideDescriptionPreprocessor.java b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/internal/preprocessor/PageOverrideDescriptionPreprocessor.java new file mode 100644 index 0000000000..7bdec5d857 --- /dev/null +++ b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/internal/preprocessor/PageOverrideDescriptionPreprocessor.java @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2017 Obeo. + * 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: + * Obeo - initial API and implementation + *******************************************************************************/ +package org.eclipse.sirius.properties.core.internal.preprocessor; + +import org.eclipse.emf.ecore.EReference; +import org.eclipse.sirius.common.interpreter.api.IInterpreter; +import org.eclipse.sirius.common.interpreter.api.IVariableManager; +import org.eclipse.sirius.properties.AbstractPageDescription; +import org.eclipse.sirius.properties.core.api.OverridesProvider; +import org.eclipse.sirius.properties.core.api.TransformationCache; + +/** + * Preprocessor for + * {@link org.eclipse.sirius.properties.PageOverrideDescription}. + * <ul> + * <li>The {@code overrides} containment is ignored.</li> + * </ul> + * + * @author mbats + */ +public class PageOverrideDescriptionPreprocessor extends PageDescriptionPreprocessor { + @Override + protected void processMonoValuedEReference(EReference eReference, AbstractPageDescription processedDescription, AbstractPageDescription currentDescription, TransformationCache cache, + IInterpreter interpreter, IVariableManager variableManager, OverridesProvider overridesProvider) { + if (!eReference.equals(currentDescription.eClass().getEStructuralFeature("overrides"))) { //$NON-NLS-1$ + super.processMonoValuedEReference(eReference, processedDescription, currentDescription, cache, interpreter, variableManager, overridesProvider); + } + } +} diff --git a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/internal/preprocessor/PropertiesDescriptionPreprocessorSwitch.java b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/internal/preprocessor/PropertiesDescriptionPreprocessorSwitch.java index 234897a7b2..667dc51f76 100644 --- a/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/internal/preprocessor/PropertiesDescriptionPreprocessorSwitch.java +++ b/plugins/org.eclipse.sirius.properties.core/src/org/eclipse/sirius/properties/core/internal/preprocessor/PropertiesDescriptionPreprocessorSwitch.java @@ -17,21 +17,36 @@ import java.util.Optional; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.sirius.properties.AbstractDynamicMappingForDescription; +import org.eclipse.sirius.properties.AbstractGroupDescription; +import org.eclipse.sirius.properties.AbstractWidgetDescription; import org.eclipse.sirius.properties.ButtonDescription; +import org.eclipse.sirius.properties.ButtonOverrideDescription; import org.eclipse.sirius.properties.Category; import org.eclipse.sirius.properties.CheckboxDescription; +import org.eclipse.sirius.properties.CheckboxOverrideDescription; import org.eclipse.sirius.properties.CustomDescription; +import org.eclipse.sirius.properties.CustomOverrideDescription; import org.eclipse.sirius.properties.DynamicMappingForDescription; +import org.eclipse.sirius.properties.DynamicMappingForOverrideDescription; import org.eclipse.sirius.properties.GroupDescription; +import org.eclipse.sirius.properties.GroupOverrideDescription; import org.eclipse.sirius.properties.HyperlinkDescription; +import org.eclipse.sirius.properties.HyperlinkOverrideDescription; import org.eclipse.sirius.properties.LabelDescription; +import org.eclipse.sirius.properties.LabelOverrideDescription; import org.eclipse.sirius.properties.ListDescription; +import org.eclipse.sirius.properties.ListOverrideDescription; import org.eclipse.sirius.properties.PageDescription; +import org.eclipse.sirius.properties.PageOverrideDescription; import org.eclipse.sirius.properties.PropertiesPackage; import org.eclipse.sirius.properties.RadioDescription; +import org.eclipse.sirius.properties.RadioOverrideDescription; import org.eclipse.sirius.properties.SelectDescription; +import org.eclipse.sirius.properties.SelectOverrideDescription; import org.eclipse.sirius.properties.TextAreaDescription; +import org.eclipse.sirius.properties.TextAreaOverrideDescription; import org.eclipse.sirius.properties.TextDescription; +import org.eclipse.sirius.properties.TextOverrideDescription; import org.eclipse.sirius.properties.ViewExtensionDescription; import org.eclipse.sirius.properties.WidgetAction; import org.eclipse.sirius.properties.core.api.DefaultDescriptionPreprocessor; @@ -74,10 +89,20 @@ public class PropertiesDescriptionPreprocessorSwitch extends PropertiesSwitch<Op } @Override + public Optional<IDescriptionPreprocessor> casePageOverrideDescription(PageOverrideDescription object) { + return Optional.of(new PageOverrideDescriptionPreprocessor()); + } + + @Override public Optional<IDescriptionPreprocessor> caseGroupDescription(GroupDescription object) { return Optional.of(new GroupDescriptionPreprocessor()); } + @Override + public Optional<IDescriptionPreprocessor> caseGroupOverrideDescription(GroupOverrideDescription object) { + return Optional.of(new OverrideDescriptionPreprocessor<AbstractGroupDescription>(AbstractGroupDescription.class, PropertiesPackage.Literals.ABSTRACT_GROUP_DESCRIPTION)); + } + // Widgets @Override public Optional<IDescriptionPreprocessor> caseTextDescription(TextDescription object) { @@ -85,46 +110,91 @@ public class PropertiesDescriptionPreprocessorSwitch extends PropertiesSwitch<Op } @Override + public Optional<IDescriptionPreprocessor> caseTextOverrideDescription(TextOverrideDescription object) { + return Optional.of(new OverrideDescriptionPreprocessor<AbstractWidgetDescription>(AbstractWidgetDescription.class, PropertiesPackage.Literals.ABSTRACT_WIDGET_DESCRIPTION)); + } + + @Override public Optional<IDescriptionPreprocessor> caseButtonDescription(ButtonDescription object) { return Optional.of(new PreconfiguredPreprocessor<ButtonDescription>(ButtonDescription.class, PropertiesPackage.Literals.BUTTON_DESCRIPTION)); } @Override + public Optional<IDescriptionPreprocessor> caseButtonOverrideDescription(ButtonOverrideDescription object) { + return Optional.of(new OverrideDescriptionPreprocessor<AbstractWidgetDescription>(AbstractWidgetDescription.class, PropertiesPackage.Literals.ABSTRACT_WIDGET_DESCRIPTION)); + } + + @Override public Optional<IDescriptionPreprocessor> caseLabelDescription(LabelDescription object) { return Optional.of(new PreconfiguredPreprocessor<LabelDescription>(LabelDescription.class, PropertiesPackage.Literals.LABEL_DESCRIPTION)); } @Override + public Optional<IDescriptionPreprocessor> caseLabelOverrideDescription(LabelOverrideDescription object) { + return Optional.of(new OverrideDescriptionPreprocessor<AbstractWidgetDescription>(AbstractWidgetDescription.class, PropertiesPackage.Literals.ABSTRACT_WIDGET_DESCRIPTION)); + } + + @Override public Optional<IDescriptionPreprocessor> caseCheckboxDescription(CheckboxDescription object) { return Optional.of(new PreconfiguredPreprocessor<CheckboxDescription>(CheckboxDescription.class, PropertiesPackage.Literals.CHECKBOX_DESCRIPTION)); } @Override + public Optional<IDescriptionPreprocessor> caseCheckboxOverrideDescription(CheckboxOverrideDescription object) { + return Optional.of(new OverrideDescriptionPreprocessor<AbstractWidgetDescription>(AbstractWidgetDescription.class, PropertiesPackage.Literals.ABSTRACT_WIDGET_DESCRIPTION)); + } + + @Override public Optional<IDescriptionPreprocessor> caseSelectDescription(SelectDescription object) { return Optional.of(new PreconfiguredPreprocessor<SelectDescription>(SelectDescription.class, PropertiesPackage.Literals.SELECT_DESCRIPTION)); } @Override + public Optional<IDescriptionPreprocessor> caseSelectOverrideDescription(SelectOverrideDescription object) { + return Optional.of(new OverrideDescriptionPreprocessor<AbstractWidgetDescription>(AbstractWidgetDescription.class, PropertiesPackage.Literals.ABSTRACT_WIDGET_DESCRIPTION)); + } + + @Override public Optional<IDescriptionPreprocessor> caseTextAreaDescription(TextAreaDescription object) { return Optional.of(new PreconfiguredPreprocessor<TextAreaDescription>(TextAreaDescription.class, PropertiesPackage.Literals.TEXT_AREA_DESCRIPTION)); } @Override + public Optional<IDescriptionPreprocessor> caseTextAreaOverrideDescription(TextAreaOverrideDescription object) { + return Optional.of(new OverrideDescriptionPreprocessor<AbstractWidgetDescription>(AbstractWidgetDescription.class, PropertiesPackage.Literals.ABSTRACT_WIDGET_DESCRIPTION)); + } + + @Override public Optional<IDescriptionPreprocessor> caseListDescription(ListDescription object) { return Optional.of(new PreconfiguredPreprocessor<ListDescription>(ListDescription.class, PropertiesPackage.Literals.LIST_DESCRIPTION)); } @Override + public Optional<IDescriptionPreprocessor> caseListOverrideDescription(ListOverrideDescription object) { + return Optional.of(new OverrideDescriptionPreprocessor<AbstractWidgetDescription>(AbstractWidgetDescription.class, PropertiesPackage.Literals.ABSTRACT_WIDGET_DESCRIPTION)); + } + + @Override public Optional<IDescriptionPreprocessor> caseHyperlinkDescription(HyperlinkDescription object) { return Optional.of(new PreconfiguredPreprocessor<HyperlinkDescription>(HyperlinkDescription.class, PropertiesPackage.Literals.HYPERLINK_DESCRIPTION)); } @Override + public Optional<IDescriptionPreprocessor> caseHyperlinkOverrideDescription(HyperlinkOverrideDescription object) { + return Optional.of(new OverrideDescriptionPreprocessor<AbstractWidgetDescription>(AbstractWidgetDescription.class, PropertiesPackage.Literals.ABSTRACT_WIDGET_DESCRIPTION)); + } + + @Override public Optional<IDescriptionPreprocessor> caseRadioDescription(RadioDescription object) { return Optional.of(new PreconfiguredPreprocessor<RadioDescription>(RadioDescription.class, PropertiesPackage.Literals.RADIO_DESCRIPTION)); } @Override + public Optional<IDescriptionPreprocessor> caseRadioOverrideDescription(RadioOverrideDescription object) { + return Optional.of(new OverrideDescriptionPreprocessor<AbstractWidgetDescription>(AbstractWidgetDescription.class, PropertiesPackage.Literals.ABSTRACT_WIDGET_DESCRIPTION)); + } + + @Override public Optional<IDescriptionPreprocessor> caseAbstractDynamicMappingForDescription(AbstractDynamicMappingForDescription object) { return Optional.of(new PreconfiguredPreprocessor<DynamicMappingForDescription>(DynamicMappingForDescription.class, PropertiesPackage.Literals.DYNAMIC_MAPPING_FOR_DESCRIPTION)); } @@ -135,10 +205,21 @@ public class PropertiesDescriptionPreprocessorSwitch extends PropertiesSwitch<Op } @Override + public Optional<IDescriptionPreprocessor> caseDynamicMappingForOverrideDescription(DynamicMappingForOverrideDescription object) { + return Optional.of(new OverrideDescriptionPreprocessor<AbstractDynamicMappingForDescription>(AbstractDynamicMappingForDescription.class, + PropertiesPackage.Literals.ABSTRACT_DYNAMIC_MAPPING_FOR_DESCRIPTION)); + } + + @Override public Optional<IDescriptionPreprocessor> caseCustomDescription(CustomDescription object) { return Optional.of(new CustomDescriptionPreprocessor()); } + @Override + public Optional<IDescriptionPreprocessor> caseCustomOverrideDescription(CustomOverrideDescription object) { + return Optional.of(new OverrideDescriptionPreprocessor<AbstractWidgetDescription>(AbstractWidgetDescription.class, PropertiesPackage.Literals.ABSTRACT_WIDGET_DESCRIPTION)); + } + // Default @Override public Optional<IDescriptionPreprocessor> defaultCase(EObject object) { diff --git a/plugins/org.eclipse.sirius.tests.ui.properties/META-INF/MANIFEST.MF b/plugins/org.eclipse.sirius.tests.ui.properties/META-INF/MANIFEST.MF index 101bb52a2c..082d71db31 100644 --- a/plugins/org.eclipse.sirius.tests.ui.properties/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.sirius.tests.ui.properties/META-INF/MANIFEST.MF @@ -24,5 +24,9 @@ Require-Bundle: org.eclipse.sirius.ui.properties;bundle-version="4.1.0", org.apache.log4j;bundle-version="1.2.15", org.eclipse.sirius.diagram;bundle-version="5.0.0", org.eclipse.sirius.common.interpreter, - org.eclipse.acceleo.query + org.eclipse.acceleo.query, + org.eclipse.sirius.tests.junit.support, + org.eclipse.sirius.ui, + org.eclipse.sirius.ecore.extender, + org.eclipse.emf.transaction Bundle-Localization: plugin diff --git a/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/Overrides.odesign b/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/Overrides.odesign new file mode 100644 index 0000000000..726470bcb0 --- /dev/null +++ b/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/Overrides.odesign @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<description:Group + xmi:version="2.0" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" + xmlns:properties="http://www.eclipse.org/sirius/properties/1.0.0" + name="My" + version="12.0.0.201702091400"> + <ownedViewpoints + name="Overrides"/> + <extensions + xsi:type="properties:ViewExtensionDescription"> + <categories + name="Default"> + <pages + labelExpression="Pikachu"> + <extends + href="../../../../plugin/org.eclipse.sirius.properties.core/model/properties.odesign#//@extensions.0/@categories.0/@pages.0"/> + </pages> + </categories> + <categories + name="Overrides"> + <overrides + xsi:type="properties:GroupOverrideDescription" + name="OverridesDefaultRulesGroup" + labelExpression="OverridesDefaultRulesGroup"> + <overrides + href="../../../../plugin/org.eclipse.sirius.properties.core/model/properties.odesign#//@extensions.0/@categories.0/@groups.0"/> + </overrides> + <overrides + xsi:type="properties:TextOverrideDescription" + labelExpression="Carapuce"> + <overrides + href="../../../../plugin/org.eclipse.sirius.properties.core/model/properties.odesign#//@extensions.0/@categories.0/@groups.0/@controls.0/@ifs.0/@widget"/> + </overrides> + </categories> + </extensions> +</description:Group> diff --git a/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/README.txt b/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/extends/README.txt index 2cc3b07991..2cc3b07991 100644 --- a/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/README.txt +++ b/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/extends/README.txt diff --git a/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/expected.odesign b/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/extends/expected.odesign index 9b5d0b5078..9b5d0b5078 100644 --- a/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/expected.odesign +++ b/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/extends/expected.odesign diff --git a/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/input.odesign b/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/extends/input.odesign index 3b607d6cb9..3b607d6cb9 100644 --- a/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/input.odesign +++ b/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/extends/input.odesign diff --git a/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/input2.odesign b/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/extends/input2.odesign index 1f0b4567b2..1f0b4567b2 100644 --- a/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/input2.odesign +++ b/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/extends/input2.odesign diff --git a/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/extends/processed.odesign b/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/extends/processed.odesign new file mode 100644 index 0000000000..9b5d0b5078 --- /dev/null +++ b/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/extends/processed.odesign @@ -0,0 +1,1624 @@ +<?xml version="1.0" encoding="ASCII"?> +<properties:ViewExtensionDescription xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:properties="http://www.eclipse.org/sirius/properties/1.0.0" xmlns:properties-ext-widgets-reference="http://www.eclipse.org/sirius/properties/1.0.0/ext/widgets/reference" xmlns:tool="http://www.eclipse.org/sirius/description/tool/1.1.0" name="Properties"> + <categories name="Default"> + <pages name="DefaultPage" labelExpression="DefaultPageLabelExpression" domainClass="DefaultPageDomainClass" semanticCandidateExpression="DefaultPageSemanticCandidateExpression" preconditionExpression="DefaultPagePreconditionExpression" filterGroupsFromExtendedPageExpression="DefaultPageFilterGroupsFromExtendedPageExpression" filterValidationRulesFromExtendedPageExpression="DefaultPageFilterValidationRulesFromExtendedPageExpression"> + <validationSet> + <semanticValidationRules name="DefaultPageSemanticValidationRuleId" label="DefaultPageSemanticValidationRuleLabel" message="DefaultPageSemanticValidationRuleMessage" targetClass="DefaultPageSemanticValidationRuleTargetClass"/> + <semanticValidationRules name="AnotherDefaultPageSemanticValidationRuleId" label="AnotherDefaultPageSemanticValidationRuleLabel" message="AnotherDefaultPageSemanticValidationRuleMessage" targetClass="AnotherDefaultPageSemanticValidationRuleTargetClass"/> + </validationSet> + </pages> + <pages name="ExtendsDefaultPage" labelExpression="ExtendsDefaultPageLabelExpression" domainClass="ExtendsDefaultPageDomainClass" semanticCandidateExpression="ExtendsDefaultPageSemanticCandidateExpression" preconditionExpression="ExtendsDefaultPagePreconditionExpression" filterGroupsFromExtendedPageExpression="ExtendsDefaultPageFilterGroupsFromExtendedPageExpression" filterValidationRulesFromExtendedPageExpression="ExtendsDefaultPageFilterValidationRulesFromExtendedPageExpression"> + <validationSet> + <semanticValidationRules name="DefaultPageSemanticValidationRuleId" label="DefaultPageSemanticValidationRuleLabel" message="DefaultPageSemanticValidationRuleMessage" targetClass="DefaultPageSemanticValidationRuleTargetClass"/> + <semanticValidationRules name="AnotherDefaultPageSemanticValidationRuleId" label="AnotherDefaultPageSemanticValidationRuleLabel" message="AnotherDefaultPageSemanticValidationRuleMessage" targetClass="AnotherDefaultPageSemanticValidationRuleTargetClass"/> + <semanticValidationRules name="ExtendsDefaultPageSemanticValidationRuleId" label="ExtendsDefaultPageSemanticValidationRuleLabel" message="ExtendsDefaultPageSemanticValidationRuleMessage" targetClass="ExtendsDefaultPageSemanticValidationRuleTargetClass"/> + </validationSet> + </pages> + <pages name="InheritsDefaultPage" labelExpression="DefaultPageLabelExpression" domainClass="DefaultPageDomainClass" semanticCandidateExpression="DefaultPageSemanticCandidateExpression" preconditionExpression="DefaultPagePreconditionExpression" filterGroupsFromExtendedPageExpression="DefaultPageFilterGroupsFromExtendedPageExpression" filterValidationRulesFromExtendedPageExpression="DefaultPageFilterValidationRulesFromExtendedPageExpression"> + <validationSet> + <semanticValidationRules name="DefaultPageSemanticValidationRuleId" label="DefaultPageSemanticValidationRuleLabel" message="DefaultPageSemanticValidationRuleMessage" targetClass="DefaultPageSemanticValidationRuleTargetClass"/> + <semanticValidationRules name="AnotherDefaultPageSemanticValidationRuleId" label="AnotherDefaultPageSemanticValidationRuleLabel" message="AnotherDefaultPageSemanticValidationRuleMessage" targetClass="AnotherDefaultPageSemanticValidationRuleTargetClass"/> + </validationSet> + </pages> + <pages name="PageReferencingGroups" labelExpression="PageReferencingGroupsLabelExpression" domainClass="PageReferencingGroupsDomainClass" semanticCandidateExpression="PageReferencingGroupsSemanticCandidateExpression" preconditionExpression="PageReferencingGroupsPreconditionExpression" groups="//@categories.0/@groups.0 //@categories.0/@groups.1 //@categories.0/@groups.2 //@categories.3/@groups.2" filterGroupsFromExtendedPageExpression="PageReferencingGroupsFilterGroupsFromExtendedPageExpression" filterValidationRulesFromExtendedPageExpression="PageReferencingGroupsFilterValidationRulesExtendedPageExpression"> + <validationSet> + <semanticValidationRules name="FilteredSemanticValidationRuleId" label="FilteredSemanticValidationRuleLabel" message="FilteredSemanticValidationRuleMessage" targetClass="FilteredSemanticValidationRuleTargetClass"/> + <semanticValidationRules name="PageReferencingGroupsSemanticValidationRuleId" label="PageReferencingGroupsSemanticValidationRuleLabel" message="PageReferencingGroupsSemanticValidationRuleMessage" targetClass="PageReferencingGroupsSemanticValidationRuleTargetClass"/> + </validationSet> + </pages> + <pages name="ExtendsExtendsDefaultPage" labelExpression="ExtendsExtendsDefaultPageLabelExpression" domainClass="ExtendsDefaultPageDomainClass" semanticCandidateExpression="ExtendsDefaultPageSemanticCandidateExpression" preconditionExpression="ExtendsDefaultPagePreconditionExpression" filterGroupsFromExtendedPageExpression="ExtendsDefaultPageFilterGroupsFromExtendedPageExpression" filterValidationRulesFromExtendedPageExpression="ExtendsDefaultPageFilterValidationRulesFromExtendedPageExpression"> + <validationSet> + <semanticValidationRules name="DefaultPageSemanticValidationRuleId" label="DefaultPageSemanticValidationRuleLabel" message="DefaultPageSemanticValidationRuleMessage" targetClass="DefaultPageSemanticValidationRuleTargetClass"/> + <semanticValidationRules name="AnotherDefaultPageSemanticValidationRuleId" label="AnotherDefaultPageSemanticValidationRuleLabel" message="AnotherDefaultPageSemanticValidationRuleMessage" targetClass="AnotherDefaultPageSemanticValidationRuleTargetClass"/> + <semanticValidationRules name="ExtendsDefaultPageSemanticValidationRuleId" label="ExtendsDefaultPageSemanticValidationRuleLabel" message="ExtendsDefaultPageSemanticValidationRuleMessage" targetClass="ExtendsDefaultPageSemanticValidationRuleTargetClass"/> + <semanticValidationRules name="ExtendsExtendsDefaultPageSemanticValidationRuleId" label="ExtendsExtendsDefaultPageSemanticValidationRuleLabel" message="ExtendsExtendsDefaultPageSemanticValidationRuleMessage" targetClass="ExtendsExtendsDefaultPageSemanticValidationRuleTargetClass"/> + </validationSet> + </pages> + <pages name="ExtendsPageInAnotherResource" labelExpression="Page" domainClass="" semanticCandidateExpression="var:self" preconditionExpression="PageInAnotherResourcePreconditionExpression" groups="//@categories.0/@groups.4" filterGroupsFromExtendedPageExpression="" filterValidationRulesFromExtendedPageExpression="PageInAnotherResourceFilterValidationRulesFromExtendedPageExpression"/> + <pages name="ExtendsPageReferencingGroups" label="" labelExpression="ExtendsPageReferencingGroupsLabelExpression" domainClass="ExtendsDefaultPageDomainClass" semanticCandidateExpression="ExtendsPageReferencingGroupsSemanticCandidateExpression" preconditionExpression="ExtendsPageReferencingGroupsPreconditionExpression" groups="//@categories.3/@groups.3 //@categories.0/@groups.0 //@categories.0/@groups.1 //@categories.0/@groups.2 //@categories.3/@groups.2" filterGroupsFromExtendedPageExpression="" filterValidationRulesFromExtendedPageExpression="ExtendsPageReferencingGroupsFilterValidationRulesFromExtendedPageExpression"> + <validationSet> + <semanticValidationRules name="FilteredSemanticValidationRuleId" label="FilteredSemanticValidationRuleLabel" message="FilteredSemanticValidationRuleMessage" targetClass="FilteredSemanticValidationRuleTargetClass"/> + <semanticValidationRules name="PageReferencingGroupsSemanticValidationRuleId" label="PageReferencingGroupsSemanticValidationRuleLabel" message="PageReferencingGroupsSemanticValidationRuleMessage" targetClass="PageReferencingGroupsSemanticValidationRuleTargetClass"/> + <semanticValidationRules name="DefaultPageSemanticValidationRuleId" label="DefaultPageSemanticValidationRuleLabel" message="DefaultPageSemanticValidationRuleMessage" targetClass="DefaultPageSemanticValidationRuleTargetClass"/> + <semanticValidationRules name="AnotherDefaultPageSemanticValidationRuleId" label="AnotherDefaultPageSemanticValidationRuleLabel" message="AnotherDefaultPageSemanticValidationRuleMessage" targetClass="AnotherDefaultPageSemanticValidationRuleTargetClass"/> + </validationSet> + </pages> + <groups name="DefaultGroup" labelExpression="DefaultGroupLabelExpression" domainClass="DefaultGroupDomainClass" semanticCandidateExpression="DefaultGroupSemanticCandidateExpression" preconditionExpression="DefaultGroupPreconditionExpression" filterControlsFromExtendedGroupExpression="DefaultGroupFilterControlsFromExtendedGroupExpression" filterValidationRulesFromExtendedGroupExpression="DefaultGroupFilterValidationRulesFromExtendedGroupExpression" filterConditionalStylesFromExtendedGroupExpression="DefaultGroupFilterConditionalStylesFromExtendedGroupExpression"> + <controls xsi:type="properties:TextDescription" name="DefaultGroupFilteredText"/> + <controls xsi:type="properties:TextDescription" name="DefaultGroupText" labelExpression="DefaultGroupTextLabelExpression" helpExpression="DefaultGroupTextHelpExpression" isEnabledExpression="DefaultGroupTextIsEnabledExpression" valueExpression="DefaultGroupTextValueExpression" filterConditionalStylesFromExtendedTextExpression="DefaultGroupTextFilterConditionalStylesFromExtendedTextExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupTextChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupTextStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextStyleFontNameExpression" fontSizeExpression="DefaultGroupTextStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupTextConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupTextConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextConditionalStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupTextConditionalStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + </style> + </conditionalStyles> + <conditionalStyles preconditionExpression="DefaultGroupTextFilteredConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupTextFilteredConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextFilteredConditionalStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextFilteredConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupTextFilteredConditionalStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:TextDescription" name="AnotherDefaultGroupText" labelExpression="AnotherDefaultGroupTextLabelExpression" helpExpression="AnotherDefaultGroupTextHelpExpression" isEnabledExpression="AnotherDefaultGroupTextIsEnabledExpression" valueExpression="AnotherDefaultGroupTextValueExpression" filterConditionalStylesFromExtendedTextExpression="AnotherDefaultGroupTextFilterConditionalStylesFromExtendedTextExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="AnotherDefaultGroupTextChangeContext"/> + </initialOperation> + </controls> + <controls xsi:type="properties:ButtonDescription" name="DefaultGroupButton" labelExpression="DefaultGroupButtonLabelExpression" helpExpression="DefaultGroupButtonHelpExpression" isEnabledExpression="DefaultGroupButtonIsEnabledExpression" buttonLabelExpression="DefaultGroupButtonLabelExpression" filterConditionalStylesFromExtendedButtonExpression="DefaultGroupButtonFilterConditionalStylesFromExtendedButtonExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupButtonChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupButtonStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupButtonStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupButtonConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupButtonConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupButtonConditionalStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_chocolate']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:LabelDescription" name="DefaultGroupLabel" labelExpression="DefaultGroupLabelLabelExpression" helpExpression="DefaultGroupLabelHelpExpression" isEnabledExpression="DefaultGroupLabelIsEnabledExpression" valueExpression="DefaultGroupLabelValueExpression" displayExpression="DefaultGroupLabelDisplayExpression" filterConditionalStylesFromExtendedLabelExpression="DefaultGroupLabelFilterConditionalStylesExtendedLabelExpression" filterActionsFromExtendedLabelExpression="DefaultGroupLabelFilterActionsFromExtendedLabelExpression"> + <style labelFontNameExpression="DefaultGroupLabelStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupLabelStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupLabelStyleFontNameExpression" fontSizeExpression="DefaultGroupLabelStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_green']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_yellow']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='gray']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupLabelConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupLabelConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupLabelConditionalStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupLabelConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupLabelConditionalStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_green']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_yellow']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='gray']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + </conditionalStyles> + <actions labelExpression="DefaultGroupLabelWidgetAction"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupLabelWidgetActionChangeContext"/> + </initialOperation> + </actions> + </controls> + <controls xsi:type="properties:CheckboxDescription" name="DefaultGroupCheckbox" labelExpression="DefaultGroupCheckboxLabelExpression" helpExpression="DefaultGroupCheckboxHelpExpression" isEnabledExpression="DefaultGroupCheckboxIsEnabledExpression" valueExpression="DefaultGroupCheckboxValueExpression" filterConditionalStylesFromExtendedCheckboxExpression="DefaultGroupCheckboxFilterConditionalStylesFromExtendedCheckboxExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupCheckboxChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupCheckboxStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupCheckboxStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_yellow']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupCheckboxConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupCheckboxConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupCheckboxConditionalStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_yellow']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:SelectDescription" name="DefaultGroupSelect" labelExpression="DefaultGroupSelectLabelExpression" helpExpression="DefaultGroupSelectHelpExpression" isEnabledExpression="DefaultGroupSelectIsEnabledExpression" valueExpression="DefaultGroupSelectValueExpression" candidatesExpression="DefaultGroupSelectCandidatesExpression" candidateDisplayExpression="DefaultGroupSelectCandidateDisplayExpression" filterConditionalStylesFromExtendedSelectExpression="DefaultGroupSelectFilterConditionalStylesExtendedSelectExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupSelectChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupSelectStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupSelectStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_gray']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupSelectConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupSelectConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupSelectConditionalStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_gray']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:TextAreaDescription" name="DefaultGroupTextArea" labelExpression="DefaultGroupTextAreaLabelExpression" helpExpression="DefaultGroupTextAreaHelpExpression" isEnabledExpression="DefaultGroupTextAreaIsEnabledExpression" lineCount="42" valueExpression="DefaultGroupTextAreaValue" filterConditionalStylesFromExtendedTextAreaExpression="DefaultGroupTextAreaFilterConditionalStylesFromExtendedTextAreaExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupTextAreaChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupTextAreaStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextAreaStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextAreaStyleFontNameExpression" fontSizeExpression="DefaultGroupTextAreaStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_chocolate']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_yellow']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupTextAreaConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupTextAreaConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextAreaConditionalStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextAreaConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupTextAreaConditionalStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_chocolate']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_yellow']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_orange']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:ListDescription" name="DefaultGroupList" labelExpression="DefaultGroupListLabelExpression" helpExpression="DefaultGroupListHelpExpression" isEnabledExpression="DefaultGroupListIsEnabledExpression" valueExpression="DefaultGroupListValueExpression" displayExpression="DefaultGroupListDisplayExpression" filterConditionalStylesFromExtendedListExpression="DefaultGroupListFilterConditionalStylesFromExtendedListExpression" filterActionsFromExtendedListExpression="DefaultGroupListFilterActionsFromExtendedListExpression"> + <onClickOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupListChangeContext"/> + </onClickOperation> + <actions labelExpression="DefaultGroupListWidgetAction"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupListWidgetActionChangeContext"/> + </initialOperation> + </actions> + <style labelFontNameExpression="DefaultGroupListStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupListStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_orange']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupListConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupListConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupListConditionalStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_orange']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:RadioDescription" name="DefaultGroupRadioIdentifier" labelExpression="DefaultGroupRadioLabelExpression" helpExpression="DefaultGroupRadioHelpExpression" isEnabledExpression="DefaultGroupRadioIsEnabledExpression" valueExpression="DefaultGroupRadioValueExpression" candidatesExpression="DefaultGroupRadioCandidatesExpression" candidateDisplayExpression="DefaultGroupRadioCandidateDisplayExpression" numberOfColumns="42" filterConditionalStylesFromExtendedRadioExpression="DefaultGroupRadioFilterConditionalStylesFromExtendedRadioExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupRadioChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupRadioStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupRadioStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_orange']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupRadioConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupRadioStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupRadioStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_orange']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:CustomDescription" name="DefaultGroupCustomWidget" labelExpression="DefaultGroupCustomWidgetLabelExpression" helpExpression="DefaultGroupCustomWidgetHelpExpression" isEnabledExpression="DefaultGroupCustomWidgetIsEnabledExpression" filterConditionalStylesFromExtendedCustomExpression="DefaultGroupCustomWidgetFilterConditionalStylesFromExtendedCustomExpression"> + <customExpressions name="DefaultGroupCustomWidgetCustomExpressionId" customExpression="DefaultGroupCustomWidgetCustomExpression"/> + <customOperations name="DefaultGroupCustomWidgetCustomOperation"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupCustomWidgetCustomOperationChangeContext"/> + </initialOperation> + </customOperations> + <style labelFontNameExpression="DefaultGroupCustomWidgetStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupCustomWidgetStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupCustomWidgetConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupCustomWidgetConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupCustomWidgetConditionalStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:HyperlinkDescription" name="DefaultGroupHyperlink" labelExpression="DefaultGroupHyperlinkLabelExpression" helpExpression="DefaultGroupHyperlinkHelpExpression" isEnabledExpression="DefaultGroupHyperlinkIsEnabledExpression" valueExpression="DefaultGroupHyperlinkValueExpression" displayExpression="DefaultGroupHyperlinkDisplayExpression" filterConditionalStylesFromExtendedHyperlinkExpression="DefaultGroupHyperlinkFilterConditionalStylesFromExtendedHyperlinkExpression" filterActionsFromExtendedHyperlinkExpression="DefaultGroupHyperlinkFilterActionsFromExtendedHyperlinkExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupHyperlinkChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupHyperlinkStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupHyperlinkStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupHyperlinkStyleFontNameExpression" fontSizeExpression="DefaultGroupHyperlinkStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupHyperlinkConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupHyperlinkStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupHyperlinkStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupHyperlinkStyleFontNameExpression" fontSizeExpression="DefaultGroupHyperlinkStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_purple']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + </conditionalStyles> + <actions labelExpression="DefaultGroupHyperlinkWidgetAction"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupHyperlinkWidgetActionChangeContext"/> + </initialOperation> + </actions> + </controls> + <controls xsi:type="properties-ext-widgets-reference:ExtReferenceDescription" name="DefaultGroupReference" referenceNameExpression="DefaultGroupReferenceNameExpression" referenceOwnerExpression="DefaultGroupReferenceOwnerExpression"> + <style labelFontNameExpression="DefaultGroupReferenceStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupReferenceStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_chocolate']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='chocolate']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </controls> + <controls xsi:type="properties:DynamicMappingForDescription" name="DefaultGroupDynamicMappingFor" iterator="DefaultGroupDynamicMappingForIterator" iterableExpression="DefaultGroupDynamicMappingForIterablExpression" filterIfsFromExtendedDynamicMappingForExpression="DefaultGroupDynamicMappingForFilterIfsFromExtendedDynamicMappingForExpression"> + <ifs name="DefaultGroupDynamicMappingIf" predicateExpression="DefaultGroupDynamicMappingIfPredicateExpression"> + <widget xsi:type="properties:TextDescription" name="DefaultGroupDynamicMappingIfText" labelExpression="DefaultGroupDynamicMappingIfTextLabelExpression" filterConditionalStylesFromExtendedTextExpression=""/> + </ifs> + </controls> + <validationSet> + <semanticValidationRules name="DefaultGroupSemanticValidationRuleId" label="DefaultGroupSemanticValidationRuleLabel" message="DefaultGroupSemanticValidationRuleMessage" targetClass="DefaultGroupSemanticValidationRuleTargetClass"/> + <semanticValidationRules name="AnotherDefaultGroupSemanticValidationRuleId" label="AnotherDefaultGroupSemanticValidationRuleLabel" message="AnotherDefaultGroupSemanticValidationRuleMessage" targetClass="AnotherDefaultGroupSemanticValidationRuleTargetClass"/> + <semanticValidationRules name="DefaultGroupFilteredSemanticValidationRule"/> + <propertyValidationRules name="DefaultGroupPropertyValidationRuleId" label="DefaultGroupPropertyValidationRuleLabel" message="DefaultGroupPropertyValidationRuleMessage" targets="//@categories.0/@groups.3/@controls.1"/> + <propertyValidationRules name="AnotherDefaultGroupPropertyValidationRuleId" label="AnotherDefaultGroupPropertyValidationRuleLabel" message="AnotherDefaultGroupPropertyValidationRuleMessage" targets="//@categories.0/@groups.3/@controls.2"/> + <propertyValidationRules name="DefaultGroupFilteredPropertyValidationRule" label="" message="" targets="//@categories.0/@groups.3/@controls.1"/> + </validationSet> + <style fontNameExpression="DefaultGroupStyleFontNameExpression" fontSizeExpression="DefaultGroupStyleFontSizeExpression" barStyle="SHORT_TITLE_BAR" toggleStyle="TREE_NODE" expandedByDefault="true"> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + </style> + <conditionalStyles preconditionExpression="DefaultGroupConditionalStylePreconditionExpression"> + <style fontNameExpression="DefaultGroupConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupConditionalStyleFontSizeExpression"> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_gray']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_yellow']"/> + </style> + </conditionalStyles> + </groups> + <groups name="ExtendsDefaultGroup" labelExpression="ExtendsDefaultGroupLabelExpression" domainClass="ExtendsDefaultGroupDomainClass" semanticCandidateExpression="ExtendsDefaultGroupSemanticCandidateExpression" preconditionExpression="ExtendsDefaultGroupPreconditionExpression" filterControlsFromExtendedGroupExpression="ExtendsDefaultGroupFilterControlsFromExtendedGroupExpression" filterValidationRulesFromExtendedGroupExpression="ExtendsDefaultGroupFilterValidationRulesFromExtendedGroupExpression" filterConditionalStylesFromExtendedGroupExpression="ExtendsDefaultGroupFilterConditionalStylesFromExtendedGroupExpression"> + <controls xsi:type="properties:TextDescription" name="DefaultGroupFilteredText"/> + <controls xsi:type="properties:TextDescription" name="DefaultGroupText" labelExpression="DefaultGroupTextLabelExpression" helpExpression="DefaultGroupTextHelpExpression" isEnabledExpression="DefaultGroupTextIsEnabledExpression" valueExpression="DefaultGroupTextValueExpression" filterConditionalStylesFromExtendedTextExpression="DefaultGroupTextFilterConditionalStylesFromExtendedTextExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupTextChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupTextStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextStyleFontNameExpression" fontSizeExpression="DefaultGroupTextStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupTextConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupTextConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextConditionalStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupTextConditionalStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + </style> + </conditionalStyles> + <conditionalStyles preconditionExpression="DefaultGroupTextFilteredConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupTextFilteredConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextFilteredConditionalStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextFilteredConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupTextFilteredConditionalStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:TextDescription" name="AnotherDefaultGroupText" labelExpression="AnotherDefaultGroupTextLabelExpression" helpExpression="AnotherDefaultGroupTextHelpExpression" isEnabledExpression="AnotherDefaultGroupTextIsEnabledExpression" valueExpression="AnotherDefaultGroupTextValueExpression" filterConditionalStylesFromExtendedTextExpression="AnotherDefaultGroupTextFilterConditionalStylesFromExtendedTextExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="AnotherDefaultGroupTextChangeContext"/> + </initialOperation> + </controls> + <controls xsi:type="properties:ButtonDescription" name="DefaultGroupButton" labelExpression="DefaultGroupButtonLabelExpression" helpExpression="DefaultGroupButtonHelpExpression" isEnabledExpression="DefaultGroupButtonIsEnabledExpression" buttonLabelExpression="DefaultGroupButtonLabelExpression" filterConditionalStylesFromExtendedButtonExpression="DefaultGroupButtonFilterConditionalStylesFromExtendedButtonExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupButtonChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupButtonStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupButtonStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupButtonConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupButtonConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupButtonConditionalStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_chocolate']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:LabelDescription" name="DefaultGroupLabel" labelExpression="DefaultGroupLabelLabelExpression" helpExpression="DefaultGroupLabelHelpExpression" isEnabledExpression="DefaultGroupLabelIsEnabledExpression" valueExpression="DefaultGroupLabelValueExpression" displayExpression="DefaultGroupLabelDisplayExpression" filterConditionalStylesFromExtendedLabelExpression="DefaultGroupLabelFilterConditionalStylesExtendedLabelExpression" filterActionsFromExtendedLabelExpression="DefaultGroupLabelFilterActionsFromExtendedLabelExpression"> + <style labelFontNameExpression="DefaultGroupLabelStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupLabelStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupLabelStyleFontNameExpression" fontSizeExpression="DefaultGroupLabelStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_green']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_yellow']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='gray']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupLabelConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupLabelConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupLabelConditionalStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupLabelConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupLabelConditionalStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_green']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_yellow']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='gray']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + </conditionalStyles> + <actions labelExpression="DefaultGroupLabelWidgetAction"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupLabelWidgetActionChangeContext"/> + </initialOperation> + </actions> + </controls> + <controls xsi:type="properties:CheckboxDescription" name="DefaultGroupCheckbox" labelExpression="DefaultGroupCheckboxLabelExpression" helpExpression="DefaultGroupCheckboxHelpExpression" isEnabledExpression="DefaultGroupCheckboxIsEnabledExpression" valueExpression="DefaultGroupCheckboxValueExpression" filterConditionalStylesFromExtendedCheckboxExpression="DefaultGroupCheckboxFilterConditionalStylesFromExtendedCheckboxExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupCheckboxChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupCheckboxStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupCheckboxStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_yellow']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupCheckboxConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupCheckboxConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupCheckboxConditionalStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_yellow']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:SelectDescription" name="DefaultGroupSelect" labelExpression="DefaultGroupSelectLabelExpression" helpExpression="DefaultGroupSelectHelpExpression" isEnabledExpression="DefaultGroupSelectIsEnabledExpression" valueExpression="DefaultGroupSelectValueExpression" candidatesExpression="DefaultGroupSelectCandidatesExpression" candidateDisplayExpression="DefaultGroupSelectCandidateDisplayExpression" filterConditionalStylesFromExtendedSelectExpression="DefaultGroupSelectFilterConditionalStylesExtendedSelectExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupSelectChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupSelectStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupSelectStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_gray']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupSelectConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupSelectConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupSelectConditionalStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_gray']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:TextAreaDescription" name="DefaultGroupTextArea" labelExpression="DefaultGroupTextAreaLabelExpression" helpExpression="DefaultGroupTextAreaHelpExpression" isEnabledExpression="DefaultGroupTextAreaIsEnabledExpression" lineCount="42" valueExpression="DefaultGroupTextAreaValue" filterConditionalStylesFromExtendedTextAreaExpression="DefaultGroupTextAreaFilterConditionalStylesFromExtendedTextAreaExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupTextAreaChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupTextAreaStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextAreaStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextAreaStyleFontNameExpression" fontSizeExpression="DefaultGroupTextAreaStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_chocolate']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_yellow']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupTextAreaConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupTextAreaConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextAreaConditionalStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextAreaConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupTextAreaConditionalStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_chocolate']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_yellow']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_orange']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:ListDescription" name="DefaultGroupList" labelExpression="DefaultGroupListLabelExpression" helpExpression="DefaultGroupListHelpExpression" isEnabledExpression="DefaultGroupListIsEnabledExpression" valueExpression="DefaultGroupListValueExpression" displayExpression="DefaultGroupListDisplayExpression" filterConditionalStylesFromExtendedListExpression="DefaultGroupListFilterConditionalStylesFromExtendedListExpression" filterActionsFromExtendedListExpression="DefaultGroupListFilterActionsFromExtendedListExpression"> + <onClickOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupListChangeContext"/> + </onClickOperation> + <actions labelExpression="DefaultGroupListWidgetAction"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupListWidgetActionChangeContext"/> + </initialOperation> + </actions> + <style labelFontNameExpression="DefaultGroupListStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupListStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_orange']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupListConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupListConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupListConditionalStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_orange']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:RadioDescription" name="DefaultGroupRadioIdentifier" labelExpression="DefaultGroupRadioLabelExpression" helpExpression="DefaultGroupRadioHelpExpression" isEnabledExpression="DefaultGroupRadioIsEnabledExpression" valueExpression="DefaultGroupRadioValueExpression" candidatesExpression="DefaultGroupRadioCandidatesExpression" candidateDisplayExpression="DefaultGroupRadioCandidateDisplayExpression" numberOfColumns="42" filterConditionalStylesFromExtendedRadioExpression="DefaultGroupRadioFilterConditionalStylesFromExtendedRadioExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupRadioChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupRadioStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupRadioStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_orange']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupRadioConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupRadioStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupRadioStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_orange']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:CustomDescription" name="DefaultGroupCustomWidget" labelExpression="DefaultGroupCustomWidgetLabelExpression" helpExpression="DefaultGroupCustomWidgetHelpExpression" isEnabledExpression="DefaultGroupCustomWidgetIsEnabledExpression" filterConditionalStylesFromExtendedCustomExpression="DefaultGroupCustomWidgetFilterConditionalStylesFromExtendedCustomExpression"> + <customExpressions name="DefaultGroupCustomWidgetCustomExpressionId" customExpression="DefaultGroupCustomWidgetCustomExpression"/> + <customOperations name="DefaultGroupCustomWidgetCustomOperation"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupCustomWidgetCustomOperationChangeContext"/> + </initialOperation> + </customOperations> + <style labelFontNameExpression="DefaultGroupCustomWidgetStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupCustomWidgetStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupCustomWidgetConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupCustomWidgetConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupCustomWidgetConditionalStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:HyperlinkDescription" name="DefaultGroupHyperlink" labelExpression="DefaultGroupHyperlinkLabelExpression" helpExpression="DefaultGroupHyperlinkHelpExpression" isEnabledExpression="DefaultGroupHyperlinkIsEnabledExpression" valueExpression="DefaultGroupHyperlinkValueExpression" displayExpression="DefaultGroupHyperlinkDisplayExpression" filterConditionalStylesFromExtendedHyperlinkExpression="DefaultGroupHyperlinkFilterConditionalStylesFromExtendedHyperlinkExpression" filterActionsFromExtendedHyperlinkExpression="DefaultGroupHyperlinkFilterActionsFromExtendedHyperlinkExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupHyperlinkChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupHyperlinkStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupHyperlinkStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupHyperlinkStyleFontNameExpression" fontSizeExpression="DefaultGroupHyperlinkStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupHyperlinkConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupHyperlinkStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupHyperlinkStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupHyperlinkStyleFontNameExpression" fontSizeExpression="DefaultGroupHyperlinkStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_purple']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + </conditionalStyles> + <actions labelExpression="DefaultGroupHyperlinkWidgetAction"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupHyperlinkWidgetActionChangeContext"/> + </initialOperation> + </actions> + </controls> + <controls xsi:type="properties-ext-widgets-reference:ExtReferenceDescription" name="DefaultGroupReference" referenceNameExpression="DefaultGroupReferenceNameExpression" referenceOwnerExpression="DefaultGroupReferenceOwnerExpression"> + <style labelFontNameExpression="DefaultGroupReferenceStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupReferenceStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_chocolate']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='chocolate']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </controls> + <controls xsi:type="properties:DynamicMappingForDescription" name="DefaultGroupDynamicMappingFor" iterator="DefaultGroupDynamicMappingForIterator" iterableExpression="DefaultGroupDynamicMappingForIterablExpression" filterIfsFromExtendedDynamicMappingForExpression="DefaultGroupDynamicMappingForFilterIfsFromExtendedDynamicMappingForExpression"> + <ifs name="DefaultGroupDynamicMappingIf" predicateExpression="DefaultGroupDynamicMappingIfPredicateExpression"> + <widget xsi:type="properties:TextDescription" name="DefaultGroupDynamicMappingIfText" labelExpression="DefaultGroupDynamicMappingIfTextLabelExpression" filterConditionalStylesFromExtendedTextExpression=""/> + </ifs> + </controls> + <controls xsi:type="properties:TextDescription" name="ExtendsDefaultGroupText" labelExpression="ExtendsDefaultGroupTextLabelExpression" helpExpression="ExtendsDefaultGroupTextHelpExpression" isEnabledExpression="ExtendsDefaultGroupTextIsEnabledExpression" valueExpression="ExtendsDefaultGroupTextValueExpression" filterConditionalStylesFromExtendedTextExpression="ExtendsDefaultGroupTextFilterConditionalStylesFromExtendedTextExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="ExtendsDefaultGroupTextChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupTextStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextStyleFontNameExpression" fontSizeExpression="DefaultGroupTextStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupTextConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupTextConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextConditionalStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupTextConditionalStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + </style> + </conditionalStyles> + <conditionalStyles preconditionExpression="DefaultGroupTextFilteredConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupTextFilteredConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextFilteredConditionalStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextFilteredConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupTextFilteredConditionalStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + </style> + </conditionalStyles> + </controls> + <validationSet> + <semanticValidationRules name="DefaultGroupSemanticValidationRuleId" label="DefaultGroupSemanticValidationRuleLabel" message="DefaultGroupSemanticValidationRuleMessage" targetClass="DefaultGroupSemanticValidationRuleTargetClass"/> + <semanticValidationRules name="AnotherDefaultGroupSemanticValidationRuleId" label="AnotherDefaultGroupSemanticValidationRuleLabel" message="AnotherDefaultGroupSemanticValidationRuleMessage" targetClass="AnotherDefaultGroupSemanticValidationRuleTargetClass"/> + <semanticValidationRules name="DefaultGroupFilteredSemanticValidationRule"/> + <semanticValidationRules name="ExtendsDefaultGroupSemanticValidationRuleId" label="ExtendsDefaultGroupSemanticValidationRuleLabel" message="ExtendsDefaultGroupSemanticValidationRuleMessage" targetClass="ExtendsDefaultGroupSemanticValidationRuleTargetClass"/> + <propertyValidationRules name="DefaultGroupPropertyValidationRuleId" label="DefaultGroupPropertyValidationRuleLabel" message="DefaultGroupPropertyValidationRuleMessage" targets="//@categories.0/@groups.3/@controls.1"/> + <propertyValidationRules name="AnotherDefaultGroupPropertyValidationRuleId" label="AnotherDefaultGroupPropertyValidationRuleLabel" message="AnotherDefaultGroupPropertyValidationRuleMessage" targets="//@categories.0/@groups.3/@controls.2"/> + <propertyValidationRules name="DefaultGroupFilteredPropertyValidationRule" label="" message="" targets="//@categories.0/@groups.3/@controls.1"/> + <propertyValidationRules name="ExtendsDefaultGroupPropertyValidationRuleId" label="ExtendsDefaultGroupPropertyValidationRuleLabel" message="ExtendsDefaultGroupPropertyValidationRuleMessage" targets="//@categories.0/@groups.3/@controls.14"/> + </validationSet> + <style fontNameExpression="DefaultGroupStyleFontNameExpression" fontSizeExpression="DefaultGroupStyleFontSizeExpression" barStyle="SHORT_TITLE_BAR" toggleStyle="TREE_NODE" expandedByDefault="true"> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + </style> + <conditionalStyles preconditionExpression="DefaultGroupConditionalStylePreconditionExpression"> + <style fontNameExpression="DefaultGroupConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupConditionalStyleFontSizeExpression"> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_gray']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_yellow']"/> + </style> + </conditionalStyles> + </groups> + <groups name="InheritsDefaultGroup" labelExpression="DefaultGroupLabelExpression" domainClass="DefaultGroupDomainClass" semanticCandidateExpression="DefaultGroupSemanticCandidateExpression" preconditionExpression="DefaultGroupPreconditionExpression" filterControlsFromExtendedGroupExpression="DefaultGroupFilterControlsFromExtendedGroupExpression" filterValidationRulesFromExtendedGroupExpression="DefaultGroupFilterValidationRulesFromExtendedGroupExpression" filterConditionalStylesFromExtendedGroupExpression="DefaultGroupFilterConditionalStylesFromExtendedGroupExpression"> + <controls xsi:type="properties:TextDescription" name="DefaultGroupFilteredText"/> + <controls xsi:type="properties:TextDescription" name="DefaultGroupText" labelExpression="DefaultGroupTextLabelExpression" helpExpression="DefaultGroupTextHelpExpression" isEnabledExpression="DefaultGroupTextIsEnabledExpression" valueExpression="DefaultGroupTextValueExpression" filterConditionalStylesFromExtendedTextExpression="DefaultGroupTextFilterConditionalStylesFromExtendedTextExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupTextChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupTextStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextStyleFontNameExpression" fontSizeExpression="DefaultGroupTextStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupTextConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupTextConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextConditionalStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupTextConditionalStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + </style> + </conditionalStyles> + <conditionalStyles preconditionExpression="DefaultGroupTextFilteredConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupTextFilteredConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextFilteredConditionalStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextFilteredConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupTextFilteredConditionalStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:TextDescription" name="AnotherDefaultGroupText" labelExpression="AnotherDefaultGroupTextLabelExpression" helpExpression="AnotherDefaultGroupTextHelpExpression" isEnabledExpression="AnotherDefaultGroupTextIsEnabledExpression" valueExpression="AnotherDefaultGroupTextValueExpression" filterConditionalStylesFromExtendedTextExpression="AnotherDefaultGroupTextFilterConditionalStylesFromExtendedTextExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="AnotherDefaultGroupTextChangeContext"/> + </initialOperation> + </controls> + <controls xsi:type="properties:ButtonDescription" name="DefaultGroupButton" labelExpression="DefaultGroupButtonLabelExpression" helpExpression="DefaultGroupButtonHelpExpression" isEnabledExpression="DefaultGroupButtonIsEnabledExpression" buttonLabelExpression="DefaultGroupButtonLabelExpression" filterConditionalStylesFromExtendedButtonExpression="DefaultGroupButtonFilterConditionalStylesFromExtendedButtonExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupButtonChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupButtonStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupButtonStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupButtonConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupButtonConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupButtonConditionalStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_chocolate']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:LabelDescription" name="DefaultGroupLabel" labelExpression="DefaultGroupLabelLabelExpression" helpExpression="DefaultGroupLabelHelpExpression" isEnabledExpression="DefaultGroupLabelIsEnabledExpression" valueExpression="DefaultGroupLabelValueExpression" displayExpression="DefaultGroupLabelDisplayExpression" filterConditionalStylesFromExtendedLabelExpression="DefaultGroupLabelFilterConditionalStylesExtendedLabelExpression" filterActionsFromExtendedLabelExpression="DefaultGroupLabelFilterActionsFromExtendedLabelExpression"> + <style labelFontNameExpression="DefaultGroupLabelStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupLabelStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupLabelStyleFontNameExpression" fontSizeExpression="DefaultGroupLabelStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_green']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_yellow']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='gray']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupLabelConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupLabelConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupLabelConditionalStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupLabelConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupLabelConditionalStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_green']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_yellow']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='gray']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + </conditionalStyles> + <actions labelExpression="DefaultGroupLabelWidgetAction"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupLabelWidgetActionChangeContext"/> + </initialOperation> + </actions> + </controls> + <controls xsi:type="properties:CheckboxDescription" name="DefaultGroupCheckbox" labelExpression="DefaultGroupCheckboxLabelExpression" helpExpression="DefaultGroupCheckboxHelpExpression" isEnabledExpression="DefaultGroupCheckboxIsEnabledExpression" valueExpression="DefaultGroupCheckboxValueExpression" filterConditionalStylesFromExtendedCheckboxExpression="DefaultGroupCheckboxFilterConditionalStylesFromExtendedCheckboxExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupCheckboxChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupCheckboxStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupCheckboxStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_yellow']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupCheckboxConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupCheckboxConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupCheckboxConditionalStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_yellow']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:SelectDescription" name="DefaultGroupSelect" labelExpression="DefaultGroupSelectLabelExpression" helpExpression="DefaultGroupSelectHelpExpression" isEnabledExpression="DefaultGroupSelectIsEnabledExpression" valueExpression="DefaultGroupSelectValueExpression" candidatesExpression="DefaultGroupSelectCandidatesExpression" candidateDisplayExpression="DefaultGroupSelectCandidateDisplayExpression" filterConditionalStylesFromExtendedSelectExpression="DefaultGroupSelectFilterConditionalStylesExtendedSelectExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupSelectChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupSelectStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupSelectStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_gray']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupSelectConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupSelectConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupSelectConditionalStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_gray']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:TextAreaDescription" name="DefaultGroupTextArea" labelExpression="DefaultGroupTextAreaLabelExpression" helpExpression="DefaultGroupTextAreaHelpExpression" isEnabledExpression="DefaultGroupTextAreaIsEnabledExpression" lineCount="42" valueExpression="DefaultGroupTextAreaValue" filterConditionalStylesFromExtendedTextAreaExpression="DefaultGroupTextAreaFilterConditionalStylesFromExtendedTextAreaExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupTextAreaChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupTextAreaStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextAreaStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextAreaStyleFontNameExpression" fontSizeExpression="DefaultGroupTextAreaStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_chocolate']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_yellow']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupTextAreaConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupTextAreaConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextAreaConditionalStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextAreaConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupTextAreaConditionalStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_chocolate']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_yellow']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_orange']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:ListDescription" name="DefaultGroupList" labelExpression="DefaultGroupListLabelExpression" helpExpression="DefaultGroupListHelpExpression" isEnabledExpression="DefaultGroupListIsEnabledExpression" valueExpression="DefaultGroupListValueExpression" displayExpression="DefaultGroupListDisplayExpression" filterConditionalStylesFromExtendedListExpression="DefaultGroupListFilterConditionalStylesFromExtendedListExpression" filterActionsFromExtendedListExpression="DefaultGroupListFilterActionsFromExtendedListExpression"> + <onClickOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupListChangeContext"/> + </onClickOperation> + <actions labelExpression="DefaultGroupListWidgetAction"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupListWidgetActionChangeContext"/> + </initialOperation> + </actions> + <style labelFontNameExpression="DefaultGroupListStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupListStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_orange']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupListConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupListConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupListConditionalStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_orange']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:RadioDescription" name="DefaultGroupRadioIdentifier" labelExpression="DefaultGroupRadioLabelExpression" helpExpression="DefaultGroupRadioHelpExpression" isEnabledExpression="DefaultGroupRadioIsEnabledExpression" valueExpression="DefaultGroupRadioValueExpression" candidatesExpression="DefaultGroupRadioCandidatesExpression" candidateDisplayExpression="DefaultGroupRadioCandidateDisplayExpression" numberOfColumns="42" filterConditionalStylesFromExtendedRadioExpression="DefaultGroupRadioFilterConditionalStylesFromExtendedRadioExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupRadioChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupRadioStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupRadioStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_orange']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupRadioConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupRadioStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupRadioStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_orange']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:CustomDescription" name="DefaultGroupCustomWidget" labelExpression="DefaultGroupCustomWidgetLabelExpression" helpExpression="DefaultGroupCustomWidgetHelpExpression" isEnabledExpression="DefaultGroupCustomWidgetIsEnabledExpression" filterConditionalStylesFromExtendedCustomExpression="DefaultGroupCustomWidgetFilterConditionalStylesFromExtendedCustomExpression"> + <customExpressions name="DefaultGroupCustomWidgetCustomExpressionId" customExpression="DefaultGroupCustomWidgetCustomExpression"/> + <customOperations name="DefaultGroupCustomWidgetCustomOperation"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupCustomWidgetCustomOperationChangeContext"/> + </initialOperation> + </customOperations> + <style labelFontNameExpression="DefaultGroupCustomWidgetStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupCustomWidgetStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupCustomWidgetConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupCustomWidgetConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupCustomWidgetConditionalStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:HyperlinkDescription" name="DefaultGroupHyperlink" labelExpression="DefaultGroupHyperlinkLabelExpression" helpExpression="DefaultGroupHyperlinkHelpExpression" isEnabledExpression="DefaultGroupHyperlinkIsEnabledExpression" valueExpression="DefaultGroupHyperlinkValueExpression" displayExpression="DefaultGroupHyperlinkDisplayExpression" filterConditionalStylesFromExtendedHyperlinkExpression="DefaultGroupHyperlinkFilterConditionalStylesFromExtendedHyperlinkExpression" filterActionsFromExtendedHyperlinkExpression="DefaultGroupHyperlinkFilterActionsFromExtendedHyperlinkExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupHyperlinkChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupHyperlinkStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupHyperlinkStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupHyperlinkStyleFontNameExpression" fontSizeExpression="DefaultGroupHyperlinkStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupHyperlinkConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupHyperlinkStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupHyperlinkStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupHyperlinkStyleFontNameExpression" fontSizeExpression="DefaultGroupHyperlinkStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_purple']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + </conditionalStyles> + <actions labelExpression="DefaultGroupHyperlinkWidgetAction"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupHyperlinkWidgetActionChangeContext"/> + </initialOperation> + </actions> + </controls> + <controls xsi:type="properties-ext-widgets-reference:ExtReferenceDescription" name="DefaultGroupReference" referenceNameExpression="DefaultGroupReferenceNameExpression" referenceOwnerExpression="DefaultGroupReferenceOwnerExpression"> + <style labelFontNameExpression="DefaultGroupReferenceStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupReferenceStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_chocolate']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='chocolate']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </controls> + <controls xsi:type="properties:DynamicMappingForDescription" name="DefaultGroupDynamicMappingFor" iterator="DefaultGroupDynamicMappingForIterator" iterableExpression="DefaultGroupDynamicMappingForIterablExpression" filterIfsFromExtendedDynamicMappingForExpression="DefaultGroupDynamicMappingForFilterIfsFromExtendedDynamicMappingForExpression"> + <ifs name="DefaultGroupDynamicMappingIf" predicateExpression="DefaultGroupDynamicMappingIfPredicateExpression"> + <widget xsi:type="properties:TextDescription" name="DefaultGroupDynamicMappingIfText" labelExpression="DefaultGroupDynamicMappingIfTextLabelExpression" filterConditionalStylesFromExtendedTextExpression=""/> + </ifs> + </controls> + <validationSet> + <semanticValidationRules name="DefaultGroupSemanticValidationRuleId" label="DefaultGroupSemanticValidationRuleLabel" message="DefaultGroupSemanticValidationRuleMessage" targetClass="DefaultGroupSemanticValidationRuleTargetClass"/> + <semanticValidationRules name="AnotherDefaultGroupSemanticValidationRuleId" label="AnotherDefaultGroupSemanticValidationRuleLabel" message="AnotherDefaultGroupSemanticValidationRuleMessage" targetClass="AnotherDefaultGroupSemanticValidationRuleTargetClass"/> + <semanticValidationRules name="DefaultGroupFilteredSemanticValidationRule"/> + <propertyValidationRules name="DefaultGroupPropertyValidationRuleId" label="DefaultGroupPropertyValidationRuleLabel" message="DefaultGroupPropertyValidationRuleMessage" targets="//@categories.0/@groups.3/@controls.1"/> + <propertyValidationRules name="AnotherDefaultGroupPropertyValidationRuleId" label="AnotherDefaultGroupPropertyValidationRuleLabel" message="AnotherDefaultGroupPropertyValidationRuleMessage" targets="//@categories.0/@groups.3/@controls.2"/> + <propertyValidationRules name="DefaultGroupFilteredPropertyValidationRule" label="" message="" targets="//@categories.0/@groups.3/@controls.1"/> + </validationSet> + <style fontNameExpression="DefaultGroupStyleFontNameExpression" fontSizeExpression="DefaultGroupStyleFontSizeExpression" barStyle="SHORT_TITLE_BAR" toggleStyle="TREE_NODE" expandedByDefault="true"> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + </style> + <conditionalStyles preconditionExpression="DefaultGroupConditionalStylePreconditionExpression"> + <style fontNameExpression="DefaultGroupConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupConditionalStyleFontSizeExpression"> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_gray']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_yellow']"/> + </style> + </conditionalStyles> + </groups> + <groups name="ExtendsExtendsDefaultGroup" labelExpression="ExtendsDefaultGroupLabelExpression" domainClass="ExtendsDefaultGroupDomainClass" semanticCandidateExpression="ExtendsDefaultGroupSemanticCandidateExpression" preconditionExpression="ExtendsDefaultGroupPreconditionExpression" filterControlsFromExtendedGroupExpression="" filterValidationRulesFromExtendedGroupExpression="ExtendsDefaultGroupFilterValidationRulesFromExtendedGroupExpression" filterConditionalStylesFromExtendedGroupExpression="ExtendsDefaultGroupFilterConditionalStylesFromExtendedGroupExpression"> + <controls xsi:type="properties:TextDescription" name="DefaultGroupFilteredText"/> + <controls xsi:type="properties:TextDescription" name="DefaultGroupText" labelExpression="DefaultGroupTextLabelExpression" helpExpression="DefaultGroupTextHelpExpression" isEnabledExpression="DefaultGroupTextIsEnabledExpression" valueExpression="DefaultGroupTextValueExpression" filterConditionalStylesFromExtendedTextExpression="DefaultGroupTextFilterConditionalStylesFromExtendedTextExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupTextChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupTextStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextStyleFontNameExpression" fontSizeExpression="DefaultGroupTextStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupTextConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupTextConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextConditionalStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupTextConditionalStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + </style> + </conditionalStyles> + <conditionalStyles preconditionExpression="DefaultGroupTextFilteredConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupTextFilteredConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextFilteredConditionalStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextFilteredConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupTextFilteredConditionalStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:TextDescription" name="AnotherDefaultGroupText" labelExpression="AnotherDefaultGroupTextLabelExpression" helpExpression="AnotherDefaultGroupTextHelpExpression" isEnabledExpression="AnotherDefaultGroupTextIsEnabledExpression" valueExpression="AnotherDefaultGroupTextValueExpression" filterConditionalStylesFromExtendedTextExpression="AnotherDefaultGroupTextFilterConditionalStylesFromExtendedTextExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="AnotherDefaultGroupTextChangeContext"/> + </initialOperation> + </controls> + <controls xsi:type="properties:ButtonDescription" name="DefaultGroupButton" labelExpression="DefaultGroupButtonLabelExpression" helpExpression="DefaultGroupButtonHelpExpression" isEnabledExpression="DefaultGroupButtonIsEnabledExpression" buttonLabelExpression="DefaultGroupButtonLabelExpression" filterConditionalStylesFromExtendedButtonExpression="DefaultGroupButtonFilterConditionalStylesFromExtendedButtonExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupButtonChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupButtonStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupButtonStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupButtonConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupButtonConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupButtonConditionalStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_chocolate']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:LabelDescription" name="DefaultGroupLabel" labelExpression="DefaultGroupLabelLabelExpression" helpExpression="DefaultGroupLabelHelpExpression" isEnabledExpression="DefaultGroupLabelIsEnabledExpression" valueExpression="DefaultGroupLabelValueExpression" displayExpression="DefaultGroupLabelDisplayExpression" filterConditionalStylesFromExtendedLabelExpression="DefaultGroupLabelFilterConditionalStylesExtendedLabelExpression" filterActionsFromExtendedLabelExpression="DefaultGroupLabelFilterActionsFromExtendedLabelExpression"> + <style labelFontNameExpression="DefaultGroupLabelStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupLabelStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupLabelStyleFontNameExpression" fontSizeExpression="DefaultGroupLabelStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_green']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_yellow']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='gray']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupLabelConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupLabelConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupLabelConditionalStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupLabelConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupLabelConditionalStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_green']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_yellow']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='gray']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + </conditionalStyles> + <actions labelExpression="DefaultGroupLabelWidgetAction"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupLabelWidgetActionChangeContext"/> + </initialOperation> + </actions> + </controls> + <controls xsi:type="properties:CheckboxDescription" name="DefaultGroupCheckbox" labelExpression="DefaultGroupCheckboxLabelExpression" helpExpression="DefaultGroupCheckboxHelpExpression" isEnabledExpression="DefaultGroupCheckboxIsEnabledExpression" valueExpression="DefaultGroupCheckboxValueExpression" filterConditionalStylesFromExtendedCheckboxExpression="DefaultGroupCheckboxFilterConditionalStylesFromExtendedCheckboxExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupCheckboxChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupCheckboxStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupCheckboxStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_yellow']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupCheckboxConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupCheckboxConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupCheckboxConditionalStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_yellow']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:SelectDescription" name="DefaultGroupSelect" labelExpression="DefaultGroupSelectLabelExpression" helpExpression="DefaultGroupSelectHelpExpression" isEnabledExpression="DefaultGroupSelectIsEnabledExpression" valueExpression="DefaultGroupSelectValueExpression" candidatesExpression="DefaultGroupSelectCandidatesExpression" candidateDisplayExpression="DefaultGroupSelectCandidateDisplayExpression" filterConditionalStylesFromExtendedSelectExpression="DefaultGroupSelectFilterConditionalStylesExtendedSelectExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupSelectChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupSelectStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupSelectStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_gray']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupSelectConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupSelectConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupSelectConditionalStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_gray']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:TextAreaDescription" name="DefaultGroupTextArea" labelExpression="DefaultGroupTextAreaLabelExpression" helpExpression="DefaultGroupTextAreaHelpExpression" isEnabledExpression="DefaultGroupTextAreaIsEnabledExpression" lineCount="42" valueExpression="DefaultGroupTextAreaValue" filterConditionalStylesFromExtendedTextAreaExpression="DefaultGroupTextAreaFilterConditionalStylesFromExtendedTextAreaExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupTextAreaChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupTextAreaStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextAreaStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextAreaStyleFontNameExpression" fontSizeExpression="DefaultGroupTextAreaStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_chocolate']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_yellow']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupTextAreaConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupTextAreaConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextAreaConditionalStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextAreaConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupTextAreaConditionalStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_chocolate']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_yellow']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_orange']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:ListDescription" name="DefaultGroupList" labelExpression="DefaultGroupListLabelExpression" helpExpression="DefaultGroupListHelpExpression" isEnabledExpression="DefaultGroupListIsEnabledExpression" valueExpression="DefaultGroupListValueExpression" displayExpression="DefaultGroupListDisplayExpression" filterConditionalStylesFromExtendedListExpression="DefaultGroupListFilterConditionalStylesFromExtendedListExpression" filterActionsFromExtendedListExpression="DefaultGroupListFilterActionsFromExtendedListExpression"> + <onClickOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupListChangeContext"/> + </onClickOperation> + <actions labelExpression="DefaultGroupListWidgetAction"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupListWidgetActionChangeContext"/> + </initialOperation> + </actions> + <style labelFontNameExpression="DefaultGroupListStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupListStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_orange']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupListConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupListConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupListConditionalStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_orange']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:RadioDescription" name="DefaultGroupRadioIdentifier" labelExpression="DefaultGroupRadioLabelExpression" helpExpression="DefaultGroupRadioHelpExpression" isEnabledExpression="DefaultGroupRadioIsEnabledExpression" valueExpression="DefaultGroupRadioValueExpression" candidatesExpression="DefaultGroupRadioCandidatesExpression" candidateDisplayExpression="DefaultGroupRadioCandidateDisplayExpression" numberOfColumns="42" filterConditionalStylesFromExtendedRadioExpression="DefaultGroupRadioFilterConditionalStylesFromExtendedRadioExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupRadioChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupRadioStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupRadioStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_orange']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupRadioConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupRadioStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupRadioStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_orange']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:CustomDescription" name="DefaultGroupCustomWidget" labelExpression="DefaultGroupCustomWidgetLabelExpression" helpExpression="DefaultGroupCustomWidgetHelpExpression" isEnabledExpression="DefaultGroupCustomWidgetIsEnabledExpression" filterConditionalStylesFromExtendedCustomExpression="DefaultGroupCustomWidgetFilterConditionalStylesFromExtendedCustomExpression"> + <customExpressions name="DefaultGroupCustomWidgetCustomExpressionId" customExpression="DefaultGroupCustomWidgetCustomExpression"/> + <customOperations name="DefaultGroupCustomWidgetCustomOperation"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupCustomWidgetCustomOperationChangeContext"/> + </initialOperation> + </customOperations> + <style labelFontNameExpression="DefaultGroupCustomWidgetStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupCustomWidgetStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupCustomWidgetConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupCustomWidgetConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupCustomWidgetConditionalStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:HyperlinkDescription" name="DefaultGroupHyperlink" labelExpression="DefaultGroupHyperlinkLabelExpression" helpExpression="DefaultGroupHyperlinkHelpExpression" isEnabledExpression="DefaultGroupHyperlinkIsEnabledExpression" valueExpression="DefaultGroupHyperlinkValueExpression" displayExpression="DefaultGroupHyperlinkDisplayExpression" filterConditionalStylesFromExtendedHyperlinkExpression="DefaultGroupHyperlinkFilterConditionalStylesFromExtendedHyperlinkExpression" filterActionsFromExtendedHyperlinkExpression="DefaultGroupHyperlinkFilterActionsFromExtendedHyperlinkExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupHyperlinkChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupHyperlinkStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupHyperlinkStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupHyperlinkStyleFontNameExpression" fontSizeExpression="DefaultGroupHyperlinkStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupHyperlinkConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupHyperlinkStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupHyperlinkStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupHyperlinkStyleFontNameExpression" fontSizeExpression="DefaultGroupHyperlinkStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_purple']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_red']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + </conditionalStyles> + <actions labelExpression="DefaultGroupHyperlinkWidgetAction"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="DefaultGroupHyperlinkWidgetActionChangeContext"/> + </initialOperation> + </actions> + </controls> + <controls xsi:type="properties-ext-widgets-reference:ExtReferenceDescription" name="DefaultGroupReference" referenceNameExpression="DefaultGroupReferenceNameExpression" referenceOwnerExpression="DefaultGroupReferenceOwnerExpression"> + <style labelFontNameExpression="DefaultGroupReferenceStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupReferenceStyleLabelFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_chocolate']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='chocolate']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <labelFontFormat>underline</labelFontFormat> + <labelFontFormat>strike_through</labelFontFormat> + </style> + </controls> + <controls xsi:type="properties:DynamicMappingForDescription" name="DefaultGroupDynamicMappingFor" iterator="DefaultGroupDynamicMappingForIterator" iterableExpression="DefaultGroupDynamicMappingForIterablExpression" filterIfsFromExtendedDynamicMappingForExpression="DefaultGroupDynamicMappingForFilterIfsFromExtendedDynamicMappingForExpression"> + <ifs name="DefaultGroupDynamicMappingIf" predicateExpression="DefaultGroupDynamicMappingIfPredicateExpression"> + <widget xsi:type="properties:TextDescription" name="DefaultGroupDynamicMappingIfText" labelExpression="DefaultGroupDynamicMappingIfTextLabelExpression" filterConditionalStylesFromExtendedTextExpression=""/> + </ifs> + </controls> + <controls xsi:type="properties:TextDescription" name="ExtendsDefaultGroupText" labelExpression="ExtendsDefaultGroupTextLabelExpression" helpExpression="ExtendsDefaultGroupTextHelpExpression" isEnabledExpression="ExtendsDefaultGroupTextIsEnabledExpression" valueExpression="ExtendsDefaultGroupTextValueExpression" filterConditionalStylesFromExtendedTextExpression="ExtendsDefaultGroupTextFilterConditionalStylesFromExtendedTextExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="ExtendsDefaultGroupTextChangeContext"/> + </initialOperation> + <style labelFontNameExpression="DefaultGroupTextStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextStyleFontNameExpression" fontSizeExpression="DefaultGroupTextStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + <fontFormat>underline</fontFormat> + <fontFormat>strike_through</fontFormat> + </style> + <conditionalStyles preconditionExpression="DefaultGroupTextConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupTextConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextConditionalStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupTextConditionalStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + </style> + </conditionalStyles> + <conditionalStyles preconditionExpression="DefaultGroupTextFilteredConditionalStylePreconditionExpression"> + <style labelFontNameExpression="DefaultGroupTextFilteredConditionalStyleLabelFontNameExpression" labelFontSizeExpression="DefaultGroupTextFilteredConditionalStyleLabelFontSizeExpression" fontNameExpression="DefaultGroupTextFilteredConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupTextFilteredConditionalStyleFontSizeExpression"> + <labelBackgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + <labelForegroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <labelFontFormat>italic</labelFontFormat> + <labelFontFormat>bold</labelFontFormat> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + <fontFormat>italic</fontFormat> + <fontFormat>bold</fontFormat> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:TextDescription" name="ExtendsExtendsDefaultGroupText" labelExpression="ExtendsExtendsDefaultGroupTextLabelExpression" helpExpression="ExtendsExtendsDefaultGroupTextHelpExpression" isEnabledExpression="ExtendsExtendsDefaultGroupTextIsEnabledExpression" valueExpression="ExtendsExtendsDefaultGroupTextValueExpression" filterConditionalStylesFromExtendedTextExpression="ExtendsExtendsDefaultGroupTextFilterConditionalStylesExtendedTextExpression"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="var:self"/> + </initialOperation> + </controls> + <validationSet> + <semanticValidationRules name="DefaultGroupSemanticValidationRuleId" label="DefaultGroupSemanticValidationRuleLabel" message="DefaultGroupSemanticValidationRuleMessage" targetClass="DefaultGroupSemanticValidationRuleTargetClass"/> + <semanticValidationRules name="AnotherDefaultGroupSemanticValidationRuleId" label="AnotherDefaultGroupSemanticValidationRuleLabel" message="AnotherDefaultGroupSemanticValidationRuleMessage" targetClass="AnotherDefaultGroupSemanticValidationRuleTargetClass"/> + <semanticValidationRules name="DefaultGroupFilteredSemanticValidationRule"/> + <semanticValidationRules name="ExtendsDefaultGroupSemanticValidationRuleId" label="ExtendsDefaultGroupSemanticValidationRuleLabel" message="ExtendsDefaultGroupSemanticValidationRuleMessage" targetClass="ExtendsDefaultGroupSemanticValidationRuleTargetClass"/> + <semanticValidationRules name="ExtendsExtendsDefaultGroupSemanticValidationRuleId" label="ExtendsExtendsDefaultGroupSemanticValidationRuleLabel" message="ExtendsExtendsDefaultGroupSemanticValidationRuleMessage" targetClass="ExtendsExtendsDefaultGroupSemanticValidationRuleTargetClass"/> + <propertyValidationRules name="DefaultGroupPropertyValidationRuleId" label="DefaultGroupPropertyValidationRuleLabel" message="DefaultGroupPropertyValidationRuleMessage" targets="//@categories.0/@groups.3/@controls.1"/> + <propertyValidationRules name="AnotherDefaultGroupPropertyValidationRuleId" label="AnotherDefaultGroupPropertyValidationRuleLabel" message="AnotherDefaultGroupPropertyValidationRuleMessage" targets="//@categories.0/@groups.3/@controls.2"/> + <propertyValidationRules name="DefaultGroupFilteredPropertyValidationRule" label="" message="" targets="//@categories.0/@groups.3/@controls.1"/> + <propertyValidationRules name="ExtendsDefaultGroupPropertyValidationRuleId" label="ExtendsDefaultGroupPropertyValidationRuleLabel" message="ExtendsDefaultGroupPropertyValidationRuleMessage" targets="//@categories.0/@groups.3/@controls.14"/> + <propertyValidationRules name="ExtendsExtendsDefaultGroupPropertyValidationRuleId" label="ExtendsExtendsDefaultGroupPropertyValidationRuleLabel" message="ExtendsExtendsDefaultGroupPropertyValidationRuleMessage" targets="//@categories.0/@groups.3/@controls.1 //@categories.0/@groups.3/@controls.14 //@categories.0/@groups.3/@controls.15"/> + </validationSet> + <style fontNameExpression="DefaultGroupStyleFontNameExpression" fontSizeExpression="DefaultGroupStyleFontSizeExpression" barStyle="SHORT_TITLE_BAR" toggleStyle="TREE_NODE" expandedByDefault="true"> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> + </style> + <conditionalStyles preconditionExpression="DefaultGroupConditionalStylePreconditionExpression"> + <style fontNameExpression="DefaultGroupConditionalStyleFontNameExpression" fontSizeExpression="DefaultGroupConditionalStyleFontSizeExpression"> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_gray']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_yellow']"/> + </style> + </conditionalStyles> + </groups> + <groups name="GroupInAnotherResource" labelExpression="GroupInAnotherResource" domainClass="GroupInAnotherResourceDomainClass" semanticCandidateExpression="GroupInAnotherResourceSemanticCandidateExpression" preconditionExpression="GroupInAnotherResourcePreconditionExpression"> + <controls xsi:type="properties:TextDescription" name="GroupInAnotherResourceText" labelExpression="GroupInAnotherResourceTextLabelExpression" helpExpression="GroupInAnotherResourceTextHelpExpression" isEnabledExpression="GroupInAnotherResourceTextIsEnabledExpression" valueExpression="GroupInAnotherResourceTextValueExpression" filterConditionalStylesFromExtendedTextExpression="GroupInAnotherResourceTextFilterConditionalStylesFromExtendedTextExpression"/> + </groups> + </categories> + <categories name="AnotherCategory"> + <pages name="AnotherCategoryPageReferencingGroups" labelExpression="AnotherCategoryPageReferencingGroupsLabelExpression" domainClass="AnotherCategoryPageReferencingGroupsDomainClass" semanticCandidateExpression="AnotherCategoryPageReferencingGroupsSemanticCandidateExpression" preconditionExpression="AnotherCategoryPageReferencingGroupsPreconditionExpression" groups="//@categories.0/@groups.0 //@categories.0/@groups.1 //@categories.0/@groups.2" filterGroupsFromExtendedPageExpression="AnotherCategoryPageReferencingGroupsFilterGroupsFromExtendedPageExpression" filterValidationRulesFromExtendedPageExpression="AnotherCategoryPageReferencingGroupsFilterValidationRulesFromExtendedPageExpression"> + <validationSet> + <semanticValidationRules name="AnotherCategoryPageReferencingGroupsSemanticValidationRuleId" label="AnotherCategoryPageReferencingGroupsSemanticValidationRuleLabel" level="WARNING" message="AnotherCategoryPageReferencingGroupsSemanticValidationRuleMessage" targetClass="AnotherCategoryPageReferencingGroupsSemanticValidationRuleTargetClass"/> + </validationSet> + </pages> + </categories> + <categories name="DefaultRuleCategory"> + <pages name="ExtendsDefaultRules" labelExpression="ExtendsDefaultRules"/> + </categories> + <categories name="Filter"> + <pages name="OriginalPage" label="" labelExpression="" semanticCandidateExpression="" groups="//@categories.3/@groups.2 //@categories.3/@groups.0 //@categories.3/@groups.3"> + <validationSet> + <semanticValidationRules name="SemanticValidationRule"/> + <semanticValidationRules name="FilteredSemanticValidationRule"/> + </validationSet> + </pages> + <pages name="ExtendsOriginalPageAndFilter" label="" labelExpression="" domainClass="" semanticCandidateExpression="" preconditionExpression="" groups="//@categories.3/@groups.4 //@categories.3/@groups.0 //@categories.3/@groups.3" filterGroupsFromExtendedPageExpression="aql:group.name.contains('FilteredGroup')" filterValidationRulesFromExtendedPageExpression="aql:validationRule.name.contains('FilteredSemanticValidationRule')"> + <validationSet> + <semanticValidationRules name="SemanticValidationRule"/> + <semanticValidationRules name="AnotherFilteredSemanticValidationRule"/> + </validationSet> + </pages> + <pages name="ExtendsExtendsOriginalPageAndFilter" label="" labelExpression="" domainClass="" semanticCandidateExpression="" preconditionExpression="" groups="//@categories.3/@groups.2 //@categories.3/@groups.0 //@categories.3/@groups.3" filterGroupsFromExtendedPageExpression="aql:group.name.contains('AnotherFilteredGroup')" filterValidationRulesFromExtendedPageExpression="aql:validationRule.name.contains('AnotherFiltered')"> + <validationSet> + <semanticValidationRules name="SemanticValidationRule"/> + <semanticValidationRules name="FilteredSemanticValidationRule"/> + </validationSet> + </pages> + <groups name="OriginalGroup" labelExpression="Group" semanticCandidateExpression="var:self"> + <controls xsi:type="properties:TextDescription" name="OriginalGroupText"> + <style labelFontNameExpression="OriginalGroupTextStyle" fontNameExpression=""> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + </style> + <conditionalStyles preconditionExpression="OriginalGroupTextConditionalStylePrecondition"> + <style labelFontNameExpression="ConditionalStyle" fontNameExpression=""> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='green']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_green']"/> + </style> + </conditionalStyles> + <conditionalStyles preconditionExpression="OriginalGroupTextFilteredConditionalStylePrecondition"> + <style labelFontNameExpression="OriginalGroupTextFilteredConditionalStyle" fontNameExpression=""> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='green']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_green']"/> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:TextDescription" name="OriginalGroupFilteredText"/> + <validationSet> + <semanticValidationRules name="OriginalGroupSemanticValidationRule"/> + <semanticValidationRules name="OriginalGroupFilteredSemanticValidationRule"/> + <propertyValidationRules name="OriginalGroupPropertyValidationRule"/> + <propertyValidationRules name="OriginalGroupFilteredPropertyValidationRule"/> + </validationSet> + </groups> + <groups name="ExtendsOriginalGroupAndFilter" labelExpression="" domainClass="" semanticCandidateExpression="" preconditionExpression="" filterControlsFromExtendedGroupExpression="aql:control.name.contains('Filter')" filterValidationRulesFromExtendedGroupExpression="aql:validationRule.name.contains('Filter')" filterConditionalStylesFromExtendedGroupExpression=""> + <controls xsi:type="properties:TextDescription" name="OriginalGroupText"> + <style labelFontNameExpression="OriginalGroupTextStyle" fontNameExpression=""> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + </style> + <conditionalStyles preconditionExpression="OriginalGroupTextConditionalStylePrecondition"> + <style labelFontNameExpression="ConditionalStyle" fontNameExpression=""> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='green']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_green']"/> + </style> + </conditionalStyles> + <conditionalStyles preconditionExpression="OriginalGroupTextFilteredConditionalStylePrecondition"> + <style labelFontNameExpression="OriginalGroupTextFilteredConditionalStyle" fontNameExpression=""> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='green']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_green']"/> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:TextDescription" name="ExtendsOriginalGroupTextAndFilter" labelExpression="" helpExpression="" isEnabledExpression="" valueExpression="" filterConditionalStylesFromExtendedTextExpression="aql:conditionalStyle.preconditionExpression.contains('Filter')"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="ExtendsOriginalGroupTextChangeContext"/> + </initialOperation> + <style labelFontNameExpression="OriginalGroupTextStyle" fontNameExpression=""> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + </style> + <conditionalStyles preconditionExpression="OriginalGroupTextConditionalStylePrecondition"> + <style labelFontNameExpression="ConditionalStyle" fontNameExpression=""> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='green']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_green']"/> + </style> + </conditionalStyles> + </controls> + <validationSet> + <semanticValidationRules name="OriginalGroupSemanticValidationRule"/> + <semanticValidationRules name="ExtendsOriginalGroupSemanticValidationRule" label="" message="" targetClass=""/> + <propertyValidationRules name="OriginalGroupPropertyValidationRule"/> + <propertyValidationRules name="ExtendsOriginalGroupPropertyValidationRule" label="" message="" targets="//@categories.3/@groups.5/@controls.2"/> + </validationSet> + </groups> + <groups name="FilteredGroup" labelExpression="" domainClass="" semanticCandidateExpression="" preconditionExpression="" filterControlsFromExtendedGroupExpression="" filterValidationRulesFromExtendedGroupExpression="" filterConditionalStylesFromExtendedGroupExpression=""/> + <groups name="AnotherGroup" labelExpression="" domainClass="" semanticCandidateExpression="" preconditionExpression="" filterControlsFromExtendedGroupExpression="" filterValidationRulesFromExtendedGroupExpression="" filterConditionalStylesFromExtendedGroupExpression=""/> + <groups name="AnotherFilteredGroup" labelExpression="" domainClass="" semanticCandidateExpression="" preconditionExpression="" filterControlsFromExtendedGroupExpression="" filterValidationRulesFromExtendedGroupExpression="" filterConditionalStylesFromExtendedGroupExpression=""/> + <groups name="ExtendsExtendsOriginalGroupAndFilter" labelExpression="" domainClass="" semanticCandidateExpression="" preconditionExpression="" filterControlsFromExtendedGroupExpression="aql:control.name.contains('ExtendsOrignialGroupTextAndFilter')" filterValidationRulesFromExtendedGroupExpression="aql:validationRule.name.contains('ExtendsOriginalGroup')" filterConditionalStylesFromExtendedGroupExpression=""> + <controls xsi:type="properties:TextDescription" name="OriginalGroupText"> + <style labelFontNameExpression="OriginalGroupTextStyle" fontNameExpression=""> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + </style> + <conditionalStyles preconditionExpression="OriginalGroupTextConditionalStylePrecondition"> + <style labelFontNameExpression="ConditionalStyle" fontNameExpression=""> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='green']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_green']"/> + </style> + </conditionalStyles> + <conditionalStyles preconditionExpression="OriginalGroupTextFilteredConditionalStylePrecondition"> + <style labelFontNameExpression="OriginalGroupTextFilteredConditionalStyle" fontNameExpression=""> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='green']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_green']"/> + </style> + </conditionalStyles> + </controls> + <controls xsi:type="properties:TextDescription" name="OriginalGroupFilteredText"/> + <controls xsi:type="properties:TextDescription" name="ExtendsOriginalGroupTextAndFilter" labelExpression="" helpExpression="" isEnabledExpression="" valueExpression="" filterConditionalStylesFromExtendedTextExpression="aql:conditionalStyle.preconditionExpression.contains('Filter')"> + <initialOperation> + <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="ExtendsOriginalGroupTextChangeContext"/> + </initialOperation> + <style labelFontNameExpression="OriginalGroupTextStyle" fontNameExpression=""> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_blue']"/> + </style> + <conditionalStyles preconditionExpression="OriginalGroupTextConditionalStylePrecondition"> + <style labelFontNameExpression="ConditionalStyle" fontNameExpression=""> + <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='green']"/> + <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_green']"/> + </style> + </conditionalStyles> + </controls> + <validationSet> + <semanticValidationRules name="OriginalGroupSemanticValidationRule"/> + <semanticValidationRules name="OriginalGroupFilteredSemanticValidationRule"/> + <semanticValidationRules name="ExtendsExtendsOriginalGroupSemanticValidationRule" label="" message="" targetClass=""/> + <propertyValidationRules name="OriginalGroupPropertyValidationRule"/> + <propertyValidationRules name="OriginalGroupFilteredPropertyValidationRule"/> + <propertyValidationRules name="ExtendsExtendsOriginalGroupPropertyValidationRule" label="" message=""/> + </validationSet> + </groups> + </categories> +</properties:ViewExtensionDescription> diff --git a/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/overrides/expected.odesign b/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/overrides/expected.odesign new file mode 100644 index 0000000000..5fb78adc29 --- /dev/null +++ b/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/overrides/expected.odesign @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="ASCII"?> +<properties:ViewExtensionDescription xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:properties="http://www.eclipse.org/sirius/properties/1.0.0"> + <categories name="Default"> + <pages name="OverridesDefaultRulesPage" labelExpression="OverridesDefaultRulesPage"/> + <pages name="OverridesDefaultPageAndExtendsAnotherDefaultPage" labelExpression="OverridesDefaultPage" domainClass="" semanticCandidateExpression="var:self" preconditionExpression="" groups="//@categories.0/@groups.0" filterGroupsFromExtendedPageExpression="aql:group.name.contains('FilterExtended')" filterValidationRulesFromExtendedPageExpression="aql:validationRule.name.contains('FilterExtended')"> + <validationSet> + <semanticValidationRules name="DefaultSemanticValidationRule" level="ERROR" targetClass="ecore.EClass"> + <audits auditExpression="aql:false"/> + </semanticValidationRules> + <semanticValidationRules name="AnotherDefaultSemanticValidationRule" level="ERROR" targetClass="ecore.EClass"> + <audits auditExpression="aql:false"/> + </semanticValidationRules> + </validationSet> + </pages> + <pages name="AnotherPageWithDefaultGroup" labelExpression="Another Page" domainClass="ecore.EClass" semanticCandidateExpression="var:self" groups="//@categories.0/@groups.0"/> + <pages name="AnotherDefaultPage" labelExpression="Another Default Page" domainClass="ecore.EClass" semanticCandidateExpression="var:self" groups="//@categories.0/@groups.2" filterValidationRulesFromExtendedPageExpression=""> + <validationSet> + <semanticValidationRules name="AnotherDefaultSemanticValidationRule" level="ERROR" targetClass="ecore.EClass"> + <audits auditExpression="aql:false"/> + </semanticValidationRules> + <semanticValidationRules name="FilterExtendedDefaultSemanticValidationRule" level="ERROR" targetClass="ecore.EClass"> + <audits auditExpression="aql:false"/> + </semanticValidationRules> + </validationSet> + </pages> + <groups name="OverridesDefaultGroup" label="" labelExpression="OverridesDefaultGroup" semanticCandidateExpression="var:self" filterControlsFromExtendedGroupExpression=""> + <controls xsi:type="properties:TextDescription" name="OverridesDefaultText" labelExpression="OverridesDefaultText" isEnabledExpression="" valueExpression="aql:self.name"/> + <controls xsi:type="properties:LabelDescription" name="OverridesDefaultLabel" label="" labelExpression="OverridesDefaultLabel" valueExpression="aql:self.name"/> + <controls xsi:type="properties:ButtonDescription" name="OverridesDefaultButton" labelExpression="OverridesDefaultButton"/> + <controls xsi:type="properties:CheckboxDescription" name="OverridesDefaultCheckbox" labelExpression="OverridesDefaultCheckbox"/> + <controls xsi:type="properties:SelectDescription" name="OverridesDefaultSelect" labelExpression="OverridesDefaultSelect" valueExpression="aql:self.name" candidatesExpression="aql:self" candidateDisplayExpression="aql:candidate.name"/> + <controls xsi:type="properties:TextAreaDescription" name="OverridesDefaultTextArea" labelExpression="OverridesDefaultTextArea" valueExpression="aql:self.name"/> + <controls xsi:type="properties:ListDescription" name="OverridesDefaultList" label="" labelExpression="OverridesDefaultList" valueExpression="" displayExpression="" filterConditionalStylesFromExtendedListExpression=""/> + <controls xsi:type="properties:HyperlinkDescription" name="OverridesDefaultHyperlink" label="" labelExpression="OverridesDefaultHyperlink" valueExpression="aql:self" displayExpression="aql:value.name" filterConditionalStylesFromExtendedHyperlinkExpression="" filterActionsFromExtendedHyperlinkExpression=""/> + <controls xsi:type="properties:RadioDescription" name="OverridesDefaultRadio" label="" labelExpression="OverridesDefaultRadio" candidatesExpression="aql:Sequence{'Radio1','Radio2','Radio3'}" candidateDisplayExpression="aql:candidate"/> + </groups> + <groups name="FilterOverriddenGroup" label="" labelExpression="FilterOverriddenGroup" domainClass="" semanticCandidateExpression="var:self"/> + <groups name="FilterExtendedGroup" label="" labelExpression="FilterOverridenGroup" semanticCandidateExpression="var:self"/> + </categories> + <categories name="Overrides"> + <overrides xsi:type="properties:GroupOverrideDescription" name="OverridesDefaultGroup" labelExpression="OverridesDefaultGroup" filterControlsFromExtendedGroupExpression="" filterControlsFromOverriddenGroupExpression="aql:control.name.contains('Filter')"/> + <overrides xsi:type="properties:PageOverrideDescription" name="OverridesDefaultRulesPage" labelExpression="OverridesDefaultRulesPage"/> + <overrides xsi:type="properties:GroupOverrideDescription" name="OverridesDefaultRulesGroup" labelExpression="OverridesDefaultRulesGroup"/> + <overrides xsi:type="properties:TextOverrideDescription" name="OverridesDefaultText" labelExpression="OverridesDefaultText"/> + <overrides xsi:type="properties:LabelOverrideDescription" name="OverridesDefaultLabel" labelExpression="OverridesDefaultLabel"/> + <overrides xsi:type="properties:ButtonOverrideDescription" name="OverridesDefaultButton" labelExpression="OverridesDefaultButton"/> + <overrides xsi:type="properties:CheckboxOverrideDescription" name="OverridesDefaultCheckbox" labelExpression="OverridesDefaultCheckbox"/> + <overrides xsi:type="properties:SelectOverrideDescription" name="OverridesDefaultSelect" labelExpression="OverridesDefaultSelect" candidatesExpression="aql:self" candidateDisplayExpression="aql:candidate.name"/> + <overrides xsi:type="properties:TextAreaOverrideDescription" name="OverridesDefaultTextArea" labelExpression="OverridesDefaultTextArea"/> + <overrides xsi:type="properties:ListOverrideDescription" name="OverridesDefaultList" labelExpression="OverridesDefaultList"/> + <overrides xsi:type="properties:HyperlinkOverrideDescription" name="OverridesDefaultHyperlink" label="" labelExpression="OverridesDefaultHyperlink" filterActionsFromExtendedHyperlinkExpression=""/> + <overrides xsi:type="properties:RadioOverrideDescription" name="OverridesDefaultRadio" label="" labelExpression="OverridesDefaultRadio"/> + <overrides xsi:type="properties:PageOverrideDescription" name="OverridesDefaultPageAndExtendsAnotherDefaultPage" labelExpression="OverridesDefaultPage" domainClass="" semanticCandidateExpression="var:self" preconditionExpression="" filterGroupsFromExtendedPageExpression="aql:group.name.contains('FilterExtended')" filterValidationRulesFromExtendedPageExpression="aql:validationRule.name.contains('FilterExtended')" filterGroupsFromOverriddenPageExpression="aql:group.name.contains('FilterOverridden')" filterValidationRulesFromOverriddenPageExpression="aql:validationRule.name.contains('FilterOverridden')"> + <validationSet> + <semanticValidationRules name="AnotherDefaultSemanticValidationRule" level="ERROR" targetClass="ecore.EClass"> + <audits auditExpression="aql:false"/> + </semanticValidationRules> + </validationSet> + </overrides> + </categories> +</properties:ViewExtensionDescription>
\ No newline at end of file diff --git a/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/overrides/input.odesign b/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/overrides/input.odesign new file mode 100644 index 0000000000..969442420a --- /dev/null +++ b/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/overrides/input.odesign @@ -0,0 +1,234 @@ +<?xml version="1.0" encoding="UTF-8"?> +<description:Group + xmi:version="2.0" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" + xmlns:properties="http://www.eclipse.org/sirius/properties/1.0.0" + name="My" + version="12.0.0.201702091400"> + <ownedViewpoints + name="TestOverrides"/> + <extensions + xsi:type="properties:ViewExtensionDescription"> + <categories + name="Default"> + <pages + labelExpression="Pikachu"> + <extends + href="../../../../plugin/org.eclipse.sirius.properties.core/model/properties.odesign#//@extensions.0/@categories.0/@pages.0"/> + </pages> + <pages + name="DefaultPage" + labelExpression="Default Page" + domainClass="ecore.EClass" + semanticCandidateExpression="var:self" + groups="//@extensions.0/@categories.0/@groups.0 //@extensions.0/@categories.0/@groups.1"> + <validationSet> + <semanticValidationRules + name="DefaultSemanticValidationRule" + level="ERROR" + targetClass="ecore.EClass"> + <audits + auditExpression="aql:false"/> + </semanticValidationRules> + <semanticValidationRules + name="FilterOverriddenDefaultSemanticValidationRule" + level="ERROR" + targetClass="ecore.EClass"> + <audits + auditExpression="aql:false"/> + </semanticValidationRules> + </validationSet> + </pages> + <pages + name="AnotherPageWithDefaultGroup" + labelExpression="Another Page" + domainClass="ecore.EClass" + semanticCandidateExpression="var:self" + groups="//@extensions.0/@categories.0/@groups.0"/> + <pages + name="AnotherDefaultPage" + labelExpression="Another Default Page" + domainClass="ecore.EClass" + semanticCandidateExpression="var:self" + groups="//@extensions.0/@categories.0/@groups.2" + filterValidationRulesFromExtendedPageExpression=""> + <validationSet> + <semanticValidationRules + name="AnotherDefaultSemanticValidationRule" + level="ERROR" + targetClass="ecore.EClass"> + <audits + auditExpression="aql:false"/> + </semanticValidationRules> + <semanticValidationRules + name="FilterExtendedDefaultSemanticValidationRule" + level="ERROR" + targetClass="ecore.EClass"> + <audits + auditExpression="aql:false"/> + </semanticValidationRules> + </validationSet> + </pages> + <groups + name="DefaultGroup" + label="" + labelExpression="Default Group" + semanticCandidateExpression="var:self"> + <controls + xsi:type="properties:TextDescription" + name="DefaultText" + labelExpression="Default Text" + isEnabledExpression="" + valueExpression="aql:self.name"/> + <controls + xsi:type="properties:LabelDescription" + name="DefaultLabel" + label="" + labelExpression="Default Label" + valueExpression="aql:self.name"/> + <controls + xsi:type="properties:ButtonDescription" + name="DefaultButton" + labelExpression="DefaultButton"/> + <controls + xsi:type="properties:CheckboxDescription" + name="DefaultCheckbox" + labelExpression="DefaultCheckbox"/> + <controls + xsi:type="properties:SelectDescription" + name="DefaultSelect" + labelExpression="DefaultSelect" + valueExpression="aql:self.name"/> + <controls + xsi:type="properties:TextAreaDescription" + name="DefaultTextArea" + labelExpression="DefaultTextArea" + valueExpression="aql:self.name"/> + <controls + xsi:type="properties:ListDescription" + name="DefaultList" + label="" + labelExpression="DefaultList" + valueExpression="" + displayExpression="" + filterConditionalStylesFromExtendedListExpression=""/> + <controls + xsi:type="properties:HyperlinkDescription" + name="DefaultHyperlink" + labelExpression="DefaultHyperlink" + valueExpression="aql:self" + displayExpression="aql:value.name" + filterConditionalStylesFromExtendedHyperlinkExpression=""/> + <controls + xsi:type="properties:RadioDescription" + name="DefaultRadio" + labelExpression="DefaultRadio" + candidatesExpression="aql:Sequence{'Radio1','Radio2','Radio3'}" + candidateDisplayExpression="aql:candidate"/> + <controls + xsi:type="properties:TextDescription" + name="FilterText" + label="" + labelExpression="FilterText" + valueExpression="aql:self.name"/> + </groups> + <groups + name="FilterOverriddenGroup" + label="" + labelExpression="FilterOverriddenGroup" + domainClass="" + semanticCandidateExpression="var:self"/> + <groups + name="FilterExtendedGroup" + label="" + labelExpression="FilterOverridenGroup" + semanticCandidateExpression="var:self"/> + </categories> + <categories + name="Overrides"> + <overrides + xsi:type="properties:GroupOverrideDescription" + name="OverridesDefaultGroup" + labelExpression="OverridesDefaultGroup" + filterControlsFromExtendedGroupExpression="" + overrides="//@extensions.0/@categories.0/@groups.0" + filterControlsFromOverriddenGroupExpression="aql:control.name.contains('Filter')"/> + <overrides + xsi:type="properties:PageOverrideDescription" + name="OverridesDefaultRulesPage" + labelExpression="OverridesDefaultRulesPage" + overrides="//@extensions.0/@categories.0/@pages.0"/> + <overrides + xsi:type="properties:GroupOverrideDescription" + name="OverridesDefaultRulesGroup" + labelExpression="OverridesDefaultRulesGroup"> + <overrides + href="../../../../plugin/org.eclipse.sirius.properties.core/model/properties.odesign#//@extensions.0/@categories.0/@groups.0"/> + </overrides> + <overrides + xsi:type="properties:TextOverrideDescription" + name="OverridesDefaultText" + labelExpression="OverridesDefaultText" + overrides="//@extensions.0/@categories.0/@groups.0/@controls.0"/> + <overrides + xsi:type="properties:LabelOverrideDescription" + name="OverridesDefaultLabel" + labelExpression="OverridesDefaultLabel" + overrides="//@extensions.0/@categories.0/@groups.0/@controls.1"/> + <overrides + xsi:type="properties:ButtonOverrideDescription" + name="OverridesDefaultButton" + labelExpression="OverridesDefaultButton" + overrides="//@extensions.0/@categories.0/@groups.0/@controls.2"/> + <overrides + xsi:type="properties:CheckboxOverrideDescription" + name="OverridesDefaultCheckbox" + labelExpression="OverridesDefaultCheckbox" + overrides="//@extensions.0/@categories.0/@groups.0/@controls.3"/> + <overrides + xsi:type="properties:SelectOverrideDescription" + name="OverridesDefaultSelect" + labelExpression="OverridesDefaultSelect" + candidatesExpression="aql:self" + candidateDisplayExpression="aql:candidate.name" + overrides="//@extensions.0/@categories.0/@groups.0/@controls.4"/> + <overrides + xsi:type="properties:TextAreaOverrideDescription" + name="OverridesDefaultTextArea" + labelExpression="OverridesDefaultTextArea" + overrides="//@extensions.0/@categories.0/@groups.0/@controls.5"/> + <overrides + xsi:type="properties:ListOverrideDescription" + name="OverridesDefaultList" + labelExpression="OverridesDefaultList" + overrides="//@extensions.0/@categories.0/@groups.0/@controls.6"/> + <overrides + xsi:type="properties:HyperlinkOverrideDescription" + name="OverridesDefaultHyperlink" + label="" + labelExpression="OverridesDefaultHyperlink" + filterActionsFromExtendedHyperlinkExpression="" + overrides="//@extensions.0/@categories.0/@groups.0/@controls.7"/> + <overrides + xsi:type="properties:RadioOverrideDescription" + name="OverridesDefaultRadio" + label="" + labelExpression="OverridesDefaultRadio" + overrides="//@extensions.0/@categories.0/@groups.0/@controls.8"/> + <overrides + xsi:type="properties:PageOverrideDescription" + name="OverridesDefaultPageAndExtendsAnotherDefaultPage" + labelExpression="OverridesDefaultPage" + domainClass="" + preconditionExpression="" + extends="//@extensions.0/@categories.0/@pages.3" + filterGroupsFromExtendedPageExpression="aql:group.name.contains('FilterExtended')" + filterValidationRulesFromExtendedPageExpression="aql:validationRule.name.contains('FilterExtended')" + overrides="//@extensions.0/@categories.0/@pages.1" + filterGroupsFromOverriddenPageExpression="aql:group.name.contains('FilterOverridden')" + filterValidationRulesFromOverriddenPageExpression="aql:validationRule.name.contains('FilterOverridden')"/> + </categories> + </extensions> +</description:Group> diff --git a/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/overrides/processed.odesign b/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/overrides/processed.odesign new file mode 100644 index 0000000000..ff86b45142 --- /dev/null +++ b/plugins/org.eclipse.sirius.tests.ui.properties/data/preprocessor/overrides/processed.odesign @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="ASCII"?> +<properties:ViewExtensionDescription + xmi:version="2.0" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:properties="http://www.eclipse.org/sirius/properties/1.0.0" + name="Properties"> + <categories + name="Default"> + <pages name="OverridesDefaultPage" + labelExpression="OverridesDefaultPageLabelExpression" + domainClass="OverridesDefaultPageDomainClass" + semanticCandidateExpression="DefaultPageSemanticCandidateExpression" + preconditionExpression="OverridesDefaultPagePreconditionExpression" + filterGroupsFromExtendedPageExpression="DefaultPageFilterGroupsFromExtendedPageExpression" + filterValidationRulesFromExtendedPageExpression="DefaultPageFilterValidationRulesFromExtendedPageExpression"> + <validationSet> + <semanticValidationRules + name="DefaultPageSemanticValidationRuleId" + label="DefaultPageSemanticValidationRuleLabel" + message="DefaultPageSemanticValidationRuleMessage" + targetClass="DefaultPageSemanticValidationRuleTargetClass"/> + <semanticValidationRules + name="AnotherDefaultPageSemanticValidationRuleId" + label="AnotherDefaultPageSemanticValidationRuleLabel" + message="AnotherDefaultPageSemanticValidationRuleMessage" + targetClass="AnotherDefaultPageSemanticValidationRuleTargetClass"/> + </validationSet> + </pages> + </categories> + <categories + name="Overrides"/> +</properties:ViewExtensionDescription> diff --git a/plugins/org.eclipse.sirius.tests.ui.properties/src/org/eclipse/sirius/tests/ui/properties/internal/preprocessor/PreprocessorTest.java b/plugins/org.eclipse.sirius.tests.ui.properties/src/org/eclipse/sirius/tests/ui/properties/internal/preprocessor/PreprocessorExtendsTest.java index 630957f8c1..2ac2156751 100644 --- a/plugins/org.eclipse.sirius.tests.ui.properties/src/org/eclipse/sirius/tests/ui/properties/internal/preprocessor/PreprocessorTest.java +++ b/plugins/org.eclipse.sirius.tests.ui.properties/src/org/eclipse/sirius/tests/ui/properties/internal/preprocessor/PreprocessorExtendsTest.java @@ -42,6 +42,7 @@ import org.eclipse.sirius.common.interpreter.api.IVariableManager; import org.eclipse.sirius.common.interpreter.api.VariableManagerFactory; import org.eclipse.sirius.properties.PropertiesPackage; import org.eclipse.sirius.properties.ViewExtensionDescription; +import org.eclipse.sirius.properties.core.api.OverridesProvider; import org.eclipse.sirius.properties.core.api.ViewDescriptionPreprocessor; import org.junit.Test; @@ -52,12 +53,11 @@ import org.junit.Test; * @author flatombe * @author mbats */ -@SuppressWarnings("restriction") -public final class PreprocessorTest { +public final class PreprocessorExtendsTest { /** * The path of the input model in the bundle. */ - private static final String INPUT_MODEL_PATH = "/data/preprocessor/input.odesign"; + private static final String INPUT_MODEL_PATH = "/data/preprocessor/extends/input.odesign"; /** * This test is used to ensure the proper transformation of a Sirius @@ -67,7 +67,7 @@ public final class PreprocessorTest { @Test public void testPreprocessorTest() { EObject processedEObject = this.preprocess(this.load(INPUT_MODEL_PATH).getContents().get(0).eContents().get(0)); - EObject expectedEObject = this.load("/data/preprocessor/expected.odesign").getContents().get(0); + EObject expectedEObject = this.load("/data/preprocessor/extends/expected.odesign").getContents().get(0); // For debug purpose only print(processedEObject); @@ -114,7 +114,7 @@ public final class PreprocessorTest { ViewDescriptionPreprocessor preprocessor = new ViewDescriptionPreprocessor(viewExtensionDescription); IVariableManager variableManager = new VariableManagerFactory().createVariableManager(); variableManager.put("self", viewExtensionDescription); - Optional<ViewExtensionDescription> processedOptional = preprocessor.convert(new AQLInterpreter(), variableManager); + Optional<ViewExtensionDescription> processedOptional = preprocessor.convert(new AQLInterpreter(), variableManager, new OverridesProvider(null)); if (processedOptional.isPresent()) { EObject processed = processedOptional.get(); ResourceSet resourceSet = new ResourceSetImpl(); @@ -123,6 +123,7 @@ public final class PreprocessorTest { resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", //$NON-NLS-1$ new XMIResourceFactoryImpl()); Resource resource = resourceSet.createResource(URI.createURI(INPUT_MODEL_PATH)); + resource.getContents().clear(); resource.getContents().add(processed); return processed; diff --git a/plugins/org.eclipse.sirius.tests.ui.properties/src/org/eclipse/sirius/tests/ui/properties/internal/preprocessor/PreprocessorOverridesTest.java b/plugins/org.eclipse.sirius.tests.ui.properties/src/org/eclipse/sirius/tests/ui/properties/internal/preprocessor/PreprocessorOverridesTest.java new file mode 100644 index 0000000000..c4f324b515 --- /dev/null +++ b/plugins/org.eclipse.sirius.tests.ui.properties/src/org/eclipse/sirius/tests/ui/properties/internal/preprocessor/PreprocessorOverridesTest.java @@ -0,0 +1,214 @@ +/******************************************************************************* + * Copyright (c) 2017 Obeo. + * 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: + * Obeo - initial API and implementation + *******************************************************************************/ +package org.eclipse.sirius.tests.ui.properties.internal.preprocessor; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Optional; + +import org.eclipse.eef.EefPackage; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.compare.Comparison; +import org.eclipse.emf.compare.Diff; +import org.eclipse.emf.compare.EMFCompare; +import org.eclipse.emf.compare.match.DefaultComparisonFactory; +import org.eclipse.emf.compare.match.DefaultEqualityHelperFactory; +import org.eclipse.emf.compare.match.DefaultMatchEngine; +import org.eclipse.emf.compare.match.IComparisonFactory; +import org.eclipse.emf.compare.match.IMatchEngine; +import org.eclipse.emf.compare.match.eobject.IEObjectMatcher; +import org.eclipse.emf.compare.match.impl.MatchEngineFactoryImpl; +import org.eclipse.emf.compare.match.impl.MatchEngineFactoryRegistryImpl; +import org.eclipse.emf.compare.scope.DefaultComparisonScope; +import org.eclipse.emf.compare.scope.IComparisonScope; +import org.eclipse.emf.compare.utils.UseIdentifiers; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EcoreFactory; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; +import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; +import org.eclipse.emf.edit.domain.EditingDomain; +import org.eclipse.sirius.common.interpreter.api.IVariableManager; +import org.eclipse.sirius.common.interpreter.api.VariableManagerFactory; +import org.eclipse.sirius.ecore.extender.tool.api.ModelUtils; +import org.eclipse.sirius.properties.PropertiesPackage; +import org.eclipse.sirius.properties.ViewExtensionDescription; +import org.eclipse.sirius.properties.core.api.OverridesProvider; +import org.eclipse.sirius.properties.core.api.ViewDescriptionPreprocessor; +import org.eclipse.sirius.tests.support.api.SiriusTestCase; +import org.eclipse.sirius.tools.api.command.ICommandFactory; +import org.eclipse.sirius.viewpoint.description.Extension; +import org.eclipse.sirius.viewpoint.description.Group; +import org.junit.Assert; +import org.junit.Test; + +/** + * Test suite for the + * {@link org.eclipse.sirius.properties.core.api.IDescriptionPreprocessor}. + * + * @author flatombe + * @author mbats + */ +public final class PreprocessorOverridesTest extends SiriusTestCase { + private static final String PROPERTIES_TEST_PLUGIN = "/org.eclipse.sirius.tests.ui.properties"; + + /** + * The path of the input model in the bundle. + */ + private static final String INPUT_ODESIGN_PATH = "/data/preprocessor/overrides/input.odesign"; + + /** + * The path of the expect model in the bundle. + */ + private static final String EXPECTED_ODESIGN_PATH = "/data/preprocessor/overrides/expected.odesign"; + + @Override + protected void setUp() throws Exception { + super.setUp(); + genericSetUp(createDummySemanticModel(), PROPERTIES_TEST_PLUGIN + INPUT_ODESIGN_PATH); + initViewpoints(); + } + + /** + * This test is used to ensure the proper transformation of a Sirius + * Properties model with extends and overrides definitions into a resolved + * "flat" Sirius Properties model. + */ + @Test + public void testPreprocessorTest() { + try { + Extension ved = getExtension(toURI(PROPERTIES_TEST_PLUGIN + INPUT_ODESIGN_PATH, ResourceURIType.RESOURCE_PLUGIN_URI), session.getTransactionalEditingDomain()); + EObject processedEObject = this.preprocess(ved); + EObject expectedEObject = this.load(EXPECTED_ODESIGN_PATH).getContents().get(0); + + // For debug purpose only + print(processedEObject); + + IComparisonScope scope = new DefaultComparisonScope(processedEObject, expectedEObject, null); + IEObjectMatcher matcher = DefaultMatchEngine.createDefaultEObjectMatcher(UseIdentifiers.NEVER); + IComparisonFactory comparisonFactory = new DefaultComparisonFactory(new DefaultEqualityHelperFactory()); + IMatchEngine.Factory matchEngineFactory = new MatchEngineFactoryImpl(matcher, comparisonFactory); + matchEngineFactory.setRanking(20); + IMatchEngine.Factory.Registry matchEngineRegistry = new MatchEngineFactoryRegistryImpl(); + matchEngineRegistry.add(matchEngineFactory); + + EMFCompare comparator = EMFCompare.builder().setMatchEngineFactoryRegistry(matchEngineRegistry).build(); + Comparison comparison = comparator.compare(scope); + List<Diff> differences = comparison.getDifferences(); + + assertEquals(0, differences.size()); + } catch (IOException e) { + fail(e.getMessage()); + } + } + + private Extension getExtension(final URI modelerResourceURI, EditingDomain domain) throws IOException { + Group group = null; + try { + group = (Group) ModelUtils.load(modelerResourceURI, domain.getResourceSet()); + } catch (final IOException exception) { + String uri = modelerResourceURI.toString(); + if (uri.startsWith("platform:/plugin/")) { + URI alternativeURI = URI.createPlatformResourceURI(uri.substring(17), true); + group = (Group) ModelUtils.load(alternativeURI, domain.getResourceSet()); + } else { + Assert.fail(exception.getMessage()); + } + } + return group.getExtensions().get(0); + } + + /** + * For debug use only, used to save the processed odesign into a file to + * compare easily the processed result with the expected one. + * + * @param resource + */ + private void print(EObject eObject) { + try { + eObject.eResource().save(System.out, new HashMap<>()); + } catch (IOException e) { + // Nothing + } + } + + /** + * Transforms the given Sirius EObject into an EEF EObject. + * + * @param eObject + * The Sirius EObject + * @return The EEF EObject created form the Sirius one + */ + private EObject preprocess(EObject eObject) { + if (eObject instanceof ViewExtensionDescription) { + ViewExtensionDescription viewExtensionDescription = (ViewExtensionDescription) eObject; + ViewDescriptionPreprocessor preprocessor = new ViewDescriptionPreprocessor(viewExtensionDescription); + IVariableManager variableManager = new VariableManagerFactory().createVariableManager(); + variableManager.put("self", viewExtensionDescription); + Optional<ViewExtensionDescription> processedOptional = preprocessor.convert(new AQLInterpreter(), variableManager, new OverridesProvider(this.session)); + if (processedOptional.isPresent()) { + EObject processed = processedOptional.get(); + ResourceSet resourceSet = new ResourceSetImpl(); + resourceSet.getPackageRegistry().put(EefPackage.eNS_URI, EefPackage.eINSTANCE); + resourceSet.getPackageRegistry().put(PropertiesPackage.eNS_URI, PropertiesPackage.eINSTANCE); + resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", //$NON-NLS-1$ + new XMIResourceFactoryImpl()); + Resource resource = resourceSet.createResource(URI.createURI(INPUT_ODESIGN_PATH)); + resource.getContents().add(processed); + + return processed; + } + } + return null; + } + + /** + * Create a dummy semantic model. + * + * @return A dummy semantic model + * @throws IOException + */ + private String createDummySemanticModel() { + URI semanticResourceURI = URI.createPlatformResourceURI(TEMPORARY_PROJECT_NAME + "/test.ecore", true); + Resource ecoreResource = new ResourceSetImpl().createResource(semanticResourceURI); + ecoreResource.getContents().add(EcoreFactory.eINSTANCE.createEPackage()); + try { + ecoreResource.save(null); + } catch (IOException exception) { + Assert.fail(exception.getMessage()); + } + return TEMPORARY_PROJECT_NAME + "/test.ecore"; + } + + /** + * Loads the resource with the given URI in a new resource set and return + * it. + * + * @param uri + * The URI of the resource to load + * @return The resource loaded + */ + private Resource load(String uri) { + ResourceSet resourceSet = new ResourceSetImpl(); + resourceSet.getPackageRegistry().put(PropertiesPackage.eNS_URI, PropertiesPackage.eINSTANCE); + resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", new XMIResourceFactoryImpl()); //$NON-NLS-1$ + Resource resource = resourceSet.getResource(URI.createFileURI(System.getProperty("user.dir") + uri), true); + return resource; + } + + @Override + protected ICommandFactory getCommandFactory() { + return null; + } + +} diff --git a/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/dialog/DialogTask.java b/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/dialog/DialogTask.java index 8e19e77496..ff81689b84 100644 --- a/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/dialog/DialogTask.java +++ b/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/dialog/DialogTask.java @@ -33,6 +33,7 @@ import org.eclipse.sirius.ecore.extender.business.api.accessor.exception.MetaCla import org.eclipse.sirius.properties.DialogModelOperation; import org.eclipse.sirius.properties.PageDescription; import org.eclipse.sirius.properties.core.api.DialogModelOperationPreprocessor; +import org.eclipse.sirius.properties.core.api.OverridesProvider; import org.eclipse.sirius.properties.core.api.SiriusDomainClassTester; import org.eclipse.sirius.properties.core.api.SiriusInputDescriptor; import org.eclipse.sirius.properties.core.api.SiriusInterpreter; @@ -96,7 +97,7 @@ public class DialogTask extends AbstractOperationTask { variableManager.put(EEFExpressionUtils.INPUT, input); SiriusInterpreter siriusInterpreter = new SiriusInterpreter(this.session); - DialogModelOperationPreprocessor preprocessor = new DialogModelOperationPreprocessor(this.dialogModelOperation, siriusInterpreter, variableManager); + DialogModelOperationPreprocessor preprocessor = new DialogModelOperationPreprocessor(this.dialogModelOperation, siriusInterpreter, variableManager, new OverridesProvider(this.session)); Optional<DialogModelOperation> optionalDialogModelOperation = preprocessor.convert(); optionalDialogModelOperation.ifPresent(convertedDialogModelOperation -> { diff --git a/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/tabprovider/SiriusTabDescriptorProvider.java b/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/tabprovider/SiriusTabDescriptorProvider.java index d5f9f28462..70fca2e517 100644 --- a/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/tabprovider/SiriusTabDescriptorProvider.java +++ b/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/tabprovider/SiriusTabDescriptorProvider.java @@ -36,6 +36,7 @@ import org.eclipse.sirius.ext.base.Option; import org.eclipse.sirius.properties.PageDescription; import org.eclipse.sirius.properties.ViewExtensionDescription; import org.eclipse.sirius.properties.core.api.DefaultRulesProvider; +import org.eclipse.sirius.properties.core.api.OverridesProvider; import org.eclipse.sirius.properties.core.api.SiriusDomainClassTester; import org.eclipse.sirius.properties.core.api.SiriusInputDescriptor; import org.eclipse.sirius.properties.core.api.SiriusInterpreter; @@ -130,7 +131,8 @@ public class SiriusTabDescriptorProvider implements IEEFTabDescriptorProvider { IVariableManager variableManager = new VariableManagerFactory().createVariableManager(); variableManager.put(EEFExpressionUtils.SELF, viewExtensionDescription); - new ViewDescriptionPreprocessor(viewExtensionDescription).convert(new SiriusInterpreter(session), variableManager).ifPresent(processedViewExtensionDescription -> { + new ViewDescriptionPreprocessor(viewExtensionDescription).convert(new SiriusInterpreter(session), variableManager, new OverridesProvider(session)) + .ifPresent(processedViewExtensionDescription -> { processedViewExtensionDescription.getCategories().forEach(category -> effectivePages.addAll(category.getPages())); }); }); diff --git a/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/wizard/WizardTask.java b/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/wizard/WizardTask.java index 4d55bb0326..88ea4f03c3 100644 --- a/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/wizard/WizardTask.java +++ b/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/wizard/WizardTask.java @@ -29,6 +29,7 @@ import org.eclipse.sirius.ecore.extender.business.api.accessor.ModelAccessor; import org.eclipse.sirius.ecore.extender.business.api.accessor.exception.FeatureNotFoundException; import org.eclipse.sirius.ecore.extender.business.api.accessor.exception.MetaClassNotFoundException; import org.eclipse.sirius.properties.WizardModelOperation; +import org.eclipse.sirius.properties.core.api.OverridesProvider; import org.eclipse.sirius.properties.core.api.SiriusDomainClassTester; import org.eclipse.sirius.properties.core.api.SiriusInputDescriptor; import org.eclipse.sirius.properties.core.api.SiriusInterpreter; @@ -93,7 +94,7 @@ public class WizardTask extends AbstractOperationTask { SiriusInterpreter siriusInterpreter = new SiriusInterpreter(this.session); - WizardModelOperationPreprocessor preprocessor = new WizardModelOperationPreprocessor(this.wizardModelOperation, siriusInterpreter, variableManager); + WizardModelOperationPreprocessor preprocessor = new WizardModelOperationPreprocessor(this.wizardModelOperation, siriusInterpreter, variableManager, new OverridesProvider(this.session)); Optional<WizardModelOperation> optionalWizardModelOperation = preprocessor.convert(); optionalWizardModelOperation.ifPresent(convertedWizardModelOperation -> { ViewDescriptionConverter viewDescriptionConverter = new ViewDescriptionConverter(convertedWizardModelOperation.getPages()); |