Я новичок в затмении UML2 и застрял в следующей проблеме.
Я определил профиль с двумя стереотипами: ServiceRequest и TransitionEdge. ServiceRequest расширяет метакласс Action двумя дополнительными свойствами (процессор, память), а TransitionEdge расширяет метакласс ActivityEdge дополнительным свойством, называемым «вероятность». Все эти свойства имеют тип float, определенный как PrimitiveType.
Я создал диаграмму активности, к которой применены профиль и стереотипы. На диаграмме активности каждое ребро представляет собой TransitionEdge, определенное в профиле, и свойству вероятности присвоено значение.
Имея профиль и модель активности, я использую следующий код Java для их загрузки.
// Load the profile
URI profileUri = URI.createURI(PROFILE_NAME);
ResourceSet profileSet = new ResourceSetImpl();
profileSet.getPackageRegistry().put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE);
profileSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(UMLResource.FILE_EXTENSION, UMLResource.Factory.INSTANCE);
profileSet.createResource(profileUri);
Resource profileResource = profileSet.getResource(profileUri, true);
Profile profile = (Profile)EcoreUtil.getObjectByType(profileResource.getContents(), UMLPackage.Literals.PROFILE);
Profile sopraProfile = (Profile)profile.getOwnedMember(PROFILE_NAME);
Stereotype serviceRequestStereotype = (Stereotype)sopraProfile.getOwnedMember(STEREOTYPE_SERVICE_REQUEST);
Stereotype transitionEdgeStereotype = (Stereotype)sopraProfile.getOwnedMember(STEREOTYPE_TRANSITION_EDGE);
// Load the model
URI modelUri = URI.createURI(MODEL_NAME);
ResourceSet modelSet = new ResourceSetImpl();
modelSet.getPackageRegistry().put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE);
modelSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(UMLResource.FILE_EXTENSION, UMLResource.Factory.INSTANCE);
modelSet.createResource(modelUri);
Resource modelResource = modelSet.getResource(modelUri, true);
Model model = (Model)EcoreUtil.getObjectByType(modelResource.getContents(), UMLPackage.Literals.MODEL);
EList<Element> elements = model.getOwnedElements();
for(Element e : elements){
if(e instanceof Activity){
Activity activity = (Activity)e;
EList<ActivityEdge> edges = activity.getEdges();
for(ActivityEdge edge : edges){
System.out.println(edge.getValue(transitionEdgeStereotype, "probability"));
}
}
}
При вызове метода getValue для элемента возникает исключение. Ниже приведено сообщение об ошибке:
org.eclipse.uml2.uml.internal.impl.PropertyImpl@7a6d6a3f (name: base_ActivityEdge, visibility: <unset>) (isLeaf: false) (isStatic: false) (isOrdered: false, isUnique: true, isReadOnly: false) (aggregation: none, isDerived: false, isDerivedUnion: false, isID: false)
org.eclipse.uml2.uml.internal.impl.PropertyImpl@255a8ce4 (name: probability, visibility: public) (isLeaf: false) (isStatic: false) (isOrdered: false, isUnique: true, isReadOnly: false) (aggregation: none, isDerived: false, isDerivedUnion: false, isID: false)
Exception in thread "main" java.lang.IllegalArgumentException: org.eclipse.uml2.uml.internal.impl.StereotypeImpl@442f4161 (name: TransitionEdge, visibility: <unset>) (isLeaf: false, isAbstract: false, isFinalSpecialization: false) (isActive: false)
at org.eclipse.uml2.uml.internal.operations.ElementOperations.getValue(ElementOperations.java:527)
at org.eclipse.uml2.uml.internal.impl.ElementImpl.getValue(ElementImpl.java:296)
at test.Test.main(Test.java:68)
Я не мог понять, что происходит. Какие-либо предложения? Большое спасибо!!