blob: e345f6ce66e5b9ac9f7fc3d4d556dd2a50886457 [file] [log] [blame]
/*****************************************************************************
* Copyright (c) 2018 CEA LIST.
*
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* Contributors:
* Ansgar Radermacher ansgar.radermacher@cea.fr
*
*****************************************************************************/
package org.eclipse.papyrus.robotics.transformation.ros2.library.xtend
import org.eclipse.uml2.uml.Package
import org.eclipse.papyrus.robotics.transformation.ros2.library.preferences.Ros2PreferenceUtils
import org.eclipse.papyrus.robotics.bpc.profile.bpc.Entity
import org.eclipse.uml2.uml.util.UMLUtil
import org.eclipse.uml2.uml.Element
import org.eclipse.papyrus.robotics.bpc.profile.bpc.BPCPackage
import org.eclipse.emf.ecore.EAttribute
/**
* Set of utility functions for package creation
*/
class PackageXMLUtils {
/**
* get author name. If authorship is set, assume that it starts with an email address
*/
def static getAuthorName(Package model) {
val author = getField(model, BPCPackage.eINSTANCE.entity_Authorship);
if (author !== null) {
val idx = author.indexOf(" ");
if (idx > 0) {
return author.substring(idx + 1);
}
return author;
}
return Ros2PreferenceUtils.authorName;
}
def static getAuthorMail(Package model) {
val author = getField(model, BPCPackage.eINSTANCE.entity_Authorship);
if (author !== null) {
val idx = author.indexOf(" ");
if (idx > 0) {
return author.substring(0, idx);
}
return author;
}
return Ros2PreferenceUtils.authorName;
}
def static getMaintainerName(Package model) {
val maintainer = getField(model, BPCPackage.eINSTANCE.entity_Provenance);
if (maintainer !== null) {
val idx = maintainer.indexOf(" ");
if (idx > 0) {
return maintainer.substring(idx + 1);
}
return maintainer;
}
return Ros2PreferenceUtils.maintainerName;
}
def static getMaintainerMail(Package model) {
val maintainer = getField(model, BPCPackage.eINSTANCE.entity_Provenance);
if (maintainer !== null) {
val idx = maintainer.indexOf(" ");
if (idx > 0) {
return maintainer.substring(0, idx);
}
return maintainer;
}
return Ros2PreferenceUtils.maintainerMail;
}
/**
* return the first occurrence of the non-null field (author or maintainer) in the
* ownership tree
*
* @param element
* a UML element
* @param clazz
* The stereotype in form of a class (static profile)
* @return the author information
*/
def static String getField(Element element, EAttribute feature) {
val application = UMLUtil.getStereotypeApplication(element, Entity);
if (application !== null && application.eGet(feature) !== null) {
return application.authorship;
} else {
val owner = element.getOwner();
if (owner !== null) {
return getField(owner, feature);
} else {
return null;
}
}
}
}