blob: dcebddc3c32db864e48530b0dcef93bb6933437c [file] [log] [blame]
/*****************************************************************************
*
* Copyright (c) 2016 CEA LIST.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* CEA LIST Initial API and implementation
*
*****************************************************************************/
package org.eclipse.papyrus.moka.simex.utils;
import org.eclipse.uml2.uml.CallEvent;
import org.eclipse.uml2.uml.Element;
import org.eclipse.uml2.uml.Model;
import org.eclipse.uml2.uml.Operation;
import org.eclipse.uml2.uml.Package;
import org.eclipse.uml2.uml.PackageableElement;
import org.eclipse.uml2.uml.Signal;
import org.eclipse.uml2.uml.SignalEvent;
import org.eclipse.uml2.uml.UMLPackage;
public class EventUtil {
public static final String EVENT_PACKAGE_NAME = "Events";
public static final String EVENT_SUFFIX = "Event";
public static Package getEventPackage(Element context) {
return getEventPackage(context, true);
}
public static Package getEventPackage(Element context, boolean create) {
Package ret = null;
Model root = context.getModel();
ret = root.getNestedPackage(EVENT_PACKAGE_NAME);
if (ret == null && create){
ret = root.createNestedPackage(EVENT_PACKAGE_NAME);
}
return ret;
}
public static SignalEvent getSignalEvent(Signal signal, boolean create){
Package eventPack = getEventPackage(signal, create);
if (eventPack != null){
for (PackageableElement elem : eventPack.getPackagedElements()){
if (elem instanceof SignalEvent && signal.equals(((SignalEvent)elem).getSignal())) {
return (SignalEvent) elem;
}
}
if (create) {
SignalEvent event = (SignalEvent) eventPack.createPackagedElement(signal.getName()+EVENT_SUFFIX , UMLPackage.eINSTANCE.getSignalEvent());
event.setSignal(signal);
return event;
}
}
return null;
}
public static SignalEvent getSignalEvent(Signal signal){
return getSignalEvent(signal, true);
}
public static void alignEventName(Signal signal) {
String signalName = signal.getName();
if (signalName != null){
SignalEvent event = getSignalEvent(signal);
event.setName(signalName + EVENT_SUFFIX);
}
}
public static CallEvent getCallEvent(Operation operation) {
Package eventPack = getEventPackage(operation);
for (PackageableElement elem : eventPack.getPackagedElements()){
if (elem instanceof CallEvent && operation.equals(((CallEvent)elem).getOperation())) {
return (CallEvent) elem;
}
}
CallEvent event = (CallEvent) eventPack.createPackagedElement(operation.getQualifiedName()+EVENT_SUFFIX , UMLPackage.eINSTANCE.getCallEvent());
event.setOperation(operation);
return event;
}
}