/***************************************************************************** * Copyright (c) 2009 Atos Origin. * * * 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: * Atos Origin - Initial API and implementation * *****************************************************************************/ package org.eclipse.papyrus.uml.diagram.sequence.providers; import java.util.Collection; import java.util.HashSet; import java.util.Set; import org.eclipse.papyrus.uml.diagram.sequence.expressions.UMLOCLFactory; import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin; import org.eclipse.uml2.uml.CombinedFragment; import org.eclipse.uml2.uml.Comment; import org.eclipse.uml2.uml.ConsiderIgnoreFragment; import org.eclipse.uml2.uml.Constraint; import org.eclipse.uml2.uml.Continuation; import org.eclipse.uml2.uml.DestructionOccurrenceSpecification; import org.eclipse.uml2.uml.Duration; import org.eclipse.uml2.uml.DurationConstraint; import org.eclipse.uml2.uml.DurationInterval; import org.eclipse.uml2.uml.DurationObservation; import org.eclipse.uml2.uml.GeneralOrdering; import org.eclipse.uml2.uml.Interaction; import org.eclipse.uml2.uml.InteractionUse; import org.eclipse.uml2.uml.Lifeline; import org.eclipse.uml2.uml.LiteralString; import org.eclipse.uml2.uml.NamedElement; import org.eclipse.uml2.uml.Namespace; import org.eclipse.uml2.uml.StateInvariant; import org.eclipse.uml2.uml.TimeConstraint; import org.eclipse.uml2.uml.TimeExpression; import org.eclipse.uml2.uml.TimeInterval; import org.eclipse.uml2.uml.TimeObservation; import org.eclipse.uml2.uml.UMLFactory; import org.eclipse.uml2.uml.UMLPackage; /** * @generated */ public class ElementInitializers { protected ElementInitializers() { // use #getInstance to access cached instance } /** * @generated */ public void init_Interaction_2001(Interaction instance) { try { Object value_0 = name_Interaction_2001(instance); instance.setName((String)value_0); } catch (RuntimeException e) { UMLDiagramEditorPlugin.getInstance().logError("Element initialization failed", e); //$NON-NLS-1$ } } /** * @generated */ public void init_ConsiderIgnoreFragment_3007(ConsiderIgnoreFragment instance) { try { Object value_0 = name_ConsiderIgnoreFragment_3007(instance); instance.setName((String)value_0); } catch (RuntimeException e) { UMLDiagramEditorPlugin.getInstance().logError("Element initialization failed", e); //$NON-NLS-1$ } } /** * @generated */ public void init_CombinedFragment_3004(CombinedFragment instance) { try { Object value_0 = name_CombinedFragment_3004(instance); instance.setName((String)value_0); } catch (RuntimeException e) { UMLDiagramEditorPlugin.getInstance().logError("Element initialization failed", e); //$NON-NLS-1$ } } /** * @generated */ public void init_InteractionUse_3002(InteractionUse instance) { try { Object value_0 = name_InteractionUse_3002(instance); instance.setName((String)value_0); } catch (RuntimeException e) { UMLDiagramEditorPlugin.getInstance().logError("Element initialization failed", e); //$NON-NLS-1$ } } /** * @generated */ public void init_Continuation_3016(Continuation instance) { try { Object value_0 = name_Continuation_3016(instance); instance.setName((String)value_0); } catch (RuntimeException e) { UMLDiagramEditorPlugin.getInstance().logError("Element initialization failed", e); //$NON-NLS-1$ } } /** * @generated */ public void init_Lifeline_3001(Lifeline instance) { try { Object value_0 = name_Lifeline_3001(instance); instance.setName((String)value_0); } catch (RuntimeException e) { UMLDiagramEditorPlugin.getInstance().logError("Element initialization failed", e); //$NON-NLS-1$ } } /** * @generated */ public void init_StateInvariant_3017(StateInvariant instance) { try { Object value_0 = name_StateInvariant_3017(instance); instance.setName((String)value_0); } catch (RuntimeException e) { UMLDiagramEditorPlugin.getInstance().logError("Element initialization failed", e); //$NON-NLS-1$ } } /** * @generated */ public void init_CombinedFragment_3018(CombinedFragment instance) { try { Object value_0 = name_CombinedFragment_3018(instance); instance.setName((String)value_0); } catch (RuntimeException e) { UMLDiagramEditorPlugin.getInstance().logError("Element initialization failed", e); //$NON-NLS-1$ } } /** * @generated NOT init Time Interval */ public void init_TimeConstraint_3019(TimeConstraint instance) { try { TimeInterval newInstance_0_0 = UMLFactory.eINSTANCE.createTimeInterval(); instance.setSpecification(newInstance_0_0); Object value_0_0_0 = name_specification_TimeConstraint_3019(newInstance_0_0); newInstance_0_0.setName((String)value_0_0_0); // init Time Interval init_TimeInterval(newInstance_0_0); Object value_1 = name_TimeConstraint_3019(instance); instance.setName((String)value_1); } catch (RuntimeException e) { UMLDiagramEditorPlugin.getInstance().logError("Element initialization failed", e); //$NON-NLS-1$ } } /** * @generated */ public void init_TimeObservation_3020(TimeObservation instance) { try { Object value_0 = name_TimeObservation_3020(instance); instance.setName((String)value_0); } catch (RuntimeException e) { UMLDiagramEditorPlugin.getInstance().logError("Element initialization failed", e); //$NON-NLS-1$ } } /** * @generated NOT init Duration Interval */ public void init_DurationConstraint_3021(DurationConstraint instance) { try { DurationInterval newInstance_0_0 = UMLFactory.eINSTANCE.createDurationInterval(); instance.setSpecification(newInstance_0_0); Object value_0_0_0 = name_specification_DurationConstraint_3021(newInstance_0_0); newInstance_0_0.setName((String)value_0_0_0); // init Duration Interval init_DurationInterval(newInstance_0_0); Object value_1 = name_DurationConstraint_3021(instance); instance.setName((String)value_1); } catch (RuntimeException e) { UMLDiagramEditorPlugin.getInstance().logError("Element initialization failed", e); //$NON-NLS-1$ } } /** * @generated */ public void init_DestructionOccurrenceSpecification_3022(DestructionOccurrenceSpecification instance) { try { Object value_0 = name_DestructionOccurrenceSpecification_3022(instance); instance.setName((String)value_0); } catch (RuntimeException e) { UMLDiagramEditorPlugin.getInstance().logError("Element initialization failed", e); //$NON-NLS-1$ } } /** * Initialize a time interval * * @param instance * instance to initialize */ private void init_TimeInterval(TimeInterval instance) { // time interval TimeInterval timeInterval = instance; // create, add and set the min and max duration of the duration interval org.eclipse.uml2.uml.Package package_ = timeInterval.getNearestPackage(); TimeExpression minTimeExpression = UMLFactory.eINSTANCE.createTimeExpression(); TimeExpression maxTimeExpression = UMLFactory.eINSTANCE.createTimeExpression(); package_.getPackagedElements().add(minTimeExpression); package_.getPackagedElements().add(maxTimeExpression); ElementInitializers.init_NamedElement(minTimeExpression, "", timeInterval.eClass().getName(), "Min"); ElementInitializers.init_NamedElement(maxTimeExpression, "", timeInterval.eClass().getName(), "Max"); timeInterval.setMin(minTimeExpression); timeInterval.setMax(maxTimeExpression); minTimeExpression.setExpr(UMLFactory.eINSTANCE.createLiteralInteger()); maxTimeExpression.setExpr(UMLFactory.eINSTANCE.createLiteralInteger()); } /** * Initialize a duration interval * * @param instance * instance to initialize */ private void init_DurationInterval(DurationInterval instance) { // duration interval DurationInterval durationInterval = instance; // create, add and set the min and max duration of the duration interval org.eclipse.uml2.uml.Package package_ = durationInterval.getNearestPackage(); Duration minDuration = UMLFactory.eINSTANCE.createDuration(); Duration maxDuration = UMLFactory.eINSTANCE.createDuration(); package_.getPackagedElements().add(minDuration); package_.getPackagedElements().add(maxDuration); ElementInitializers.init_NamedElement(minDuration, "", durationInterval.eClass().getName(), "Min"); ElementInitializers.init_NamedElement(maxDuration, "", durationInterval.eClass().getName(), "Max"); durationInterval.setMin(minDuration); durationInterval.setMax(maxDuration); minDuration.setExpr(UMLFactory.eINSTANCE.createLiteralInteger()); maxDuration.setExpr(UMLFactory.eINSTANCE.createLiteralInteger()); } /** * @generated */ public void init_Constraint_3008(Constraint instance) { try { LiteralString newInstance_0_0 = UMLFactory.eINSTANCE.createLiteralString(); instance.setSpecification(newInstance_0_0); Object value_0_0_0 = value_specification_Constraint_3008(newInstance_0_0); newInstance_0_0.setValue((String)value_0_0_0); } catch (RuntimeException e) { UMLDiagramEditorPlugin.getInstance().logError("Element initialization failed", e); //$NON-NLS-1$ } } /** * @generated */ public void init_Comment_3009(Comment instance) { try { Object value_0 = UMLOCLFactory.getExpression(0, UMLPackage.eINSTANCE.getComment(), null).evaluate(instance); instance.setBody((String)value_0); } catch (RuntimeException e) { UMLDiagramEditorPlugin.getInstance().logError("Element initialization failed", e); //$NON-NLS-1$ } } /** * @generated NOT init Duration Interval */ public void init_DurationConstraint_3023(DurationConstraint instance) { try { DurationInterval newInstance_0_0 = UMLFactory.eINSTANCE.createDurationInterval(); instance.setSpecification(newInstance_0_0); Object value_0_0_0 = name_specification_DurationConstraint_3023(newInstance_0_0); newInstance_0_0.setName((String)value_0_0_0); // init Duration Interval init_DurationInterval(newInstance_0_0); Object value_1 = name_DurationConstraint_3023(instance); instance.setName((String)value_1); } catch (RuntimeException e) { UMLDiagramEditorPlugin.getInstance().logError("Element initialization failed", e); //$NON-NLS-1$ } } /** * @generated */ public void init_DurationObservation_3024(DurationObservation instance) { try { Object value_0 = name_DurationObservation_3024(instance); instance.setName((String)value_0); } catch (RuntimeException e) { UMLDiagramEditorPlugin.getInstance().logError("Element initialization failed", e); //$NON-NLS-1$ } } /** * @generated */ public void init_GeneralOrdering_4012(GeneralOrdering instance) { try { Object value_0 = name_GeneralOrdering_4012(instance); instance.setName((String)value_0); } catch (RuntimeException e) { UMLDiagramEditorPlugin.getInstance().logError("Element initialization failed", e); //$NON-NLS-1$ } } /** * @generated */ private String name_Interaction_2001(Interaction self) { return getNamedElement(self, "", self.eClass().getName(), ""); } /** * @generated */ private String name_ConsiderIgnoreFragment_3007(ConsiderIgnoreFragment self) { return getNamedElement(self, "", self.eClass().getName(), ""); } /** * @generated */ private String name_CombinedFragment_3004(CombinedFragment self) { return getNamedElement(self, "", self.eClass().getName(), ""); } /** * @generated */ private String name_InteractionUse_3002(InteractionUse self) { return getNamedElement(self, "", self.eClass().getName(), ""); } /** * @generated */ private String name_Continuation_3016(Continuation self) { return getNamedElement(self, "", self.eClass().getName(), ""); } /** * @generated */ private String name_Lifeline_3001(Lifeline self) { return getNamedElement(self, "", self.eClass().getName(), ""); } /** * @generated */ private String name_StateInvariant_3017(StateInvariant self) { return getNamedElement(self, "", self.eClass().getName(), ""); } /** * @generated */ private String name_CombinedFragment_3018(CombinedFragment self) { return getNamedElement(self, "", self.eClass().getName(), ""); } /** * @generated */ private String name_TimeConstraint_3019(TimeConstraint self) { return getNamedElement(self, "", self.eClass().getName(), ""); } /** * @generated */ private String name_specification_TimeConstraint_3019(TimeInterval self) { return getNamedElement(self, "", self.eClass().getName(), ""); } /** * @generated */ private String name_TimeObservation_3020(TimeObservation self) { return getNamedElement(self, "", "t", ""); } /** * @generated */ private String name_DurationConstraint_3021(DurationConstraint self) { return getNamedElement(self, "", self.eClass().getName(), ""); } /** * @generated */ private String name_specification_DurationConstraint_3021(DurationInterval self) { return getNamedElement(self, "", self.eClass().getName(), ""); } /** * @generated */ private String name_DestructionOccurrenceSpecification_3022(DestructionOccurrenceSpecification self) { return getNamedElement(self, "", self.eClass().getName(), ""); } /** * @generated */ private String value_specification_Constraint_3008(LiteralString self) { return ""; } /** * @generated */ private String name_DurationConstraint_3023(DurationConstraint self) { return getNamedElement(self, "", self.eClass().getName(), ""); } /** * @generated */ private String name_specification_DurationConstraint_3023(DurationInterval self) { return getNamedElement(self, "", self.eClass().getName(), ""); } /** * @generated */ private String name_DurationObservation_3024(DurationObservation self) { return getNamedElement(self, "", "d", ""); } /** * @generated */ private String name_GeneralOrdering_4012(GeneralOrdering self) { return getNamedElement(self, "", self.eClass().getName(), ""); } /** * @generated */ public static ElementInitializers getInstance() { ElementInitializers cached = UMLDiagramEditorPlugin.getInstance().getElementInitializers(); if(cached == null) { UMLDiagramEditorPlugin.getInstance().setElementInitializers(cached = new ElementInitializers()); } return cached; } /** * @generated NOT * Initialize the name of a namedElement * * @param namedElement * the namedElement */ public static void init_NamedElement(NamedElement namedElement) { init_NamedElement(namedElement, ""); //$NON-NLS-1$ } /** * @generated NOT * Initialize the name of a namedElement with a given prefix * * @param namedElement * the namedElement * @param prefix * a prefix for the name */ public static void init_NamedElement(NamedElement namedElement, String prefix) { init_NamedElement(namedElement, prefix, namedElement.eClass().getName(), ""); } /** * @generated NOT * Initialize the name of a namedElement with a given suffix * * @param namedElement * the namedElement * @param prefix * the prefix for the name * @param suffix * a suffix for the name */ public static void init_NamedElement(NamedElement namedElement, String prefix, String suffix) { init_NamedElement(namedElement, prefix, namedElement.eClass().getName(), suffix); } /** * @generated NOT * Initialize the name of a namedElement with a given suffix * * @param namedElement * the namedElement * @param prefix * the prefix for the name * @param body * the body used for the name * @param suffix * a suffix for the name */ public static void init_NamedElement(NamedElement namedElement, String prefix, String body, String suffix) { try { namedElement.setName(getNamedElement(namedElement, prefix, body, suffix)); } catch (RuntimeException e) { UMLDiagramEditorPlugin.getInstance().logError("Element initialization failed", e); //$NON-NLS-1$ } } /** * @generated NOT * */ private static String getNamedElement(NamedElement namedElement, String prefix, String body, String suffix) { String base = prefix + body + suffix; Namespace namespace = namedElement.getNamespace(); if(namespace != null) { Set<NamedElement> members = new HashSet<NamedElement>(); members.addAll(namespace.getMembers()); // add general orderings which are not in initial selection if(namespace instanceof Interaction) { members.addAll(((Interaction)namespace).getGeneralOrderings()); } return getNextNumberedName(members, base); } return base; } @SuppressWarnings("rawtypes") public static String getNextNumberedName(Collection currentElements, String base) { int nextNumber = -1; Set<String> elementNames = new HashSet<String>(); for(Object o : currentElements) { if(o instanceof NamedElement) { String name = ((NamedElement)o).getName(); if(name != null && name.startsWith(base)) { elementNames.add(name); String end = name.substring(base.length()); int nextNumberTmp = -1; if(end.trim().equals("")) { nextNumberTmp = 0; } else { try { nextNumberTmp = Integer.parseInt(end) + 1; } catch (NumberFormatException ex) { nextNumberTmp = -1; } } if(nextNumberTmp > nextNumber) { nextNumber = nextNumberTmp; } } } } if(nextNumber == -1) { return generateUniqueName(base, elementNames, base, nextNumber); } else { return generateUniqueName(base + nextNumber, elementNames,base, nextNumber); } } private static String generateUniqueName(String name, Set<String> elementNames, String base, int nextNumber) { while(elementNames.contains(name)){ nextNumber ++; name = base + nextNumber; } return name; } }