저는 UML2를 일식 사용하는 데 익숙하지 않고 다음과 같은 문제에 봉착했습니다.Eclipse UML2 : 프로파일에 정의 된 속성의 값을 얻으십시오.
ServiceRequest와 TransitionEdge의 두 가지 고정 관념이있는 프로필을 정의했습니다. ServiceRequest는 두 개의 추가 속성 (cpu, memory)으로 작업 메타 클래스를 확장하고 TransitionEdge는 "확률"이라는 추가 속성으로 ActivityEdge 메타 클래스를 확장합니다. 이러한 모든 속성은 PrimitiveType으로 정의 된 float 유형입니다.
저는 프로필과 스테레오 타입이 적용된 활동 다이어그램을 만들었습니다. 활동 다이어그램에서 각 모서리는 프로파일에 정의 된 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 메서드가 호출되면 예외가 throw됩니다.
[email protected] (name: base_ActivityEdge, visibility: <unset>) (isLeaf: false) (isStatic: false) (isOrdered: false, isUnique: true, isReadOnly: false) (aggregation: none, isDerived: false, isDerivedUnion: false, isID: false)
[email protected] (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: [email protected] (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)
내가 무슨 일이 있었는지 알아낼 수 : 다음은 오류 메시지입니다. 어떤 제안? 고마워요 !!
완벽하게 작동합니다. 모델에서 스테레오 타입을 얻은 다음 getValue 메소드에 전달합니다. 감사!! –