texo webservice support for nested packages [message #999197] |
Fri, 11 January 2013 14:50 |
Donat Mueller Messages: 11 Registered: January 2013 Location: switzerland |
Junior Member |
|
|
Hi,
I am using nested model packages with the schema <mandator>.<application>.<version>.
To distinguish class names this is required at ecore model level not only at java package name level.
While decoding the qualified classname in ModelUtils.getEClassFromQualifiedName() the segment splitting with the QUALIFIERSEPARATOR is applied just once. Then ePackage.eNS_PREFIX is checked against the extracted qualifier.
In my case having multiple packages with nsprefix v1 this does not help to make the class name unique.
Suggestion split prefix into qualifier components then walk up the epackage hierarchy and check eNS_PREFIX for each component. Or use nsURI but this would break backward compatibility.
Kind regards,
Donat
[Updated on: Fri, 11 January 2013 22:12] Report message to a moderator
|
|
|
|
|
Re: texo webservice support for nested packages [message #999373 is a reply to message #999357] |
Fri, 11 January 2013 23:41 |
Donat Mueller Messages: 11 Registered: January 2013 Location: switzerland |
Junior Member |
|
|
Here the suggested code
public static EClass getEClassFromQualifiedName(String name) {
String[] nameSpacePrefix = null;
String eClassName = name;
if (eClassName.contains(QUALIFIERSEPARATOR)) {
String[] components = name.split("\\" + QUALIFIERSEPARATOR);
nameSpacePrefix = Arrays.copyOfRange(components, 0, components.length - 1);
eClassName = components[components.length - 1];
}
for (ModelPackage modelPackage : ModelResolver.getInstance().getModelPackages()) {
final EPackage ePackage = modelPackage.getEPackage();
if (nameSpacePrefix != null && !ePackage.getNsPrefix().equals(nameSpacePrefix[nameSpacePrefix.length - 1])) {
continue;
}
nextClass: for (EClassifier eClassifier : ePackage.getEClassifiers()) {
if (eClassifier.getName().equals(eClassName)) {
if (nameSpacePrefix.length>1) {
EPackage eSuperPackage = ePackage.getESuperPackage();
for (int i=nameSpacePrefix.length-2;i>=0;i--) {
if (!eSuperPackage.getNsPrefix().equals(nameSpacePrefix[i])) {
continue nextClass;
}
eSuperPackage = eSuperPackage.getESuperPackage();
}
}
return (EClass) eClassifier;
}
}
}
...
[Updated on: Fri, 11 January 2013 23:43] Report message to a moderator
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.05376 seconds