The property panel is using a different method and I would recommend you use that.
When you have an association end call this to return the visibility
Model.getFacade().getVisibility(myAssociationEnd)
If you want to know if the visibility is public you can compare with the value returned by one of these
Model.getVisibilityKind().getPublic()
Model.getVisibilityKind().getPackage()
Model.getVisibilityKind().getProtected()
Model.getVisibilityKind().getPrivate()
You'll see the property panel example in VisibilityGetterSetter.get(Object modelElement, Class<?> type)
I'm confused when you say getName on an association returns null for association ends. You need to pass the assiocation end to getName.
Try something like this when you have an association
String assName = Model.getFacade().getName(myAssocation);
System.out.println("The association name is " + assName);
Collection assEnds = Model.getFacade().getAssociationEnds();
for (Object assEnd : assEnds) {
String assEndName = Model.getFacade().getName(assEnd);
System.out.println("The associationEnd name is " + assEndName);
Object kind = Model.getFacade().getVisibility(
myAssociationEnd);
if (Model.getVisibilityKind().getPublic().equals(kind)) {
System.out.println("public");
} else if (Model.getVisibilityKind().getPackage().equals(kind)) {
System.out.println("package");
} else if (Model.getVisibilityKind().getProtected().equals(kind)) {
System.out.println("protected");
} else if (Model.getVisibilityKind().getPrivate().equals(kind)) {
System.out.println("private");
} else {
System.out.println("public");
}
}
Disclaimer - all code freetyped without checking
Does your new code generate a List with generics?
Regards
Bob
On 4 April 2012 15:32, Mark Fortner
<phidias51 <at> gmail.com> wrote:
I've fixed the multiplicity issues and altered the GeneratorJava class to return Lists instead of Vectors. However, I can't seem to get the generateVisibility method to give me the appropriate visibility. Here's what's happening:
- When I debug into the method I find that a call to Model.getFacade().isPublic(obj) is always returning true. It is being passed an AssociationEndImpl object, and when you get its visibility it returns Public. When I try to inspect the AssociationEnd all I get are a ton of MOF IDs, and maps and lots of useless crap but no attribute called visibility that I can inspect.
- When I make a call to getName on the Association, it returns null for both association ends, despite the fact that one of the association ends is named.
My thought is that the Property panel is setting some other attribute of the Association End to private. But I can't really confirm this. Does anyone have any suggestions for how to proceed further?
Mark
On Thu, Mar 29, 2012 at 8:11 AM, Mark Fortner
<phidias51 <at> gmail.com> wrote:
I've created an issue for this:
If I get a chance this weekend, I'll take a look at the existing code for this.
Cheers,
Mark
On Wed, Mar 28, 2012 at 9:33 AM, Mark Fortner
<phidias51 <at> gmail.com> wrote:
Thanks, Tom!
I knew there had to be some UML-specific thing that I needed to do to get the employeeList in the right place.
As for generating the appropriate type, (ArrayLists vs Vectors), my thought was that I'd simply generate:
List<Employee> employeeList;
And let the user create the right-side of declaration if they want after the code has been generated.
Is there currently a preference that allows the user to specify what version of Java they want to use? Perhaps using the Java profile? Since Oracle doesn't support 1.4 anymore, is there a reason that we would need to support the non-generic list?
Mark
On Wed, Mar 28, 2012 at 8:32 AM, Tom Morris
<tfmorris <at> gmail.com> wrote:
On Wed, Mar 28, 2012 at 11:06 AM, Mark Fortner <
phidias51 <at> gmail.com> wrote:
> Hi Linus,
> I created the association again, clicked on the link in the Properties panel
> to go to the Department association end, and then clicked Private. When I
> looked at the source tab, it still showed up as public. Oddly enough, on
> the diagram we see "-employeeList" indicating that the association end is
> private.
I've lost track of the ends now, but my impression from the original
message was that you were changing the visibility on the wrong
association end. Remember that it's the *far* end that you need to
change for things like visibility and navigability.
> What's also odd is the fact that Employee also ends up with a public Vector
> employeeList declaration.
Is the association navigable in both directions? (the default) If so,
you'll get data structures on both ends to allow you to get to the
other end. Set isNavigable to false on the end opposite where you
want the data structure to disappear from.
> I suspect changing Vectors into generified Lists, and fixing the
> Multiplicity=1 issue are probably trivial changes and I'll look into that
> within the next few days.
Support for UML Templates and Java generics is only partially
implemented. You could probably special case the code generation for
this specific use case without generics support, but you might need to
take backward compatibility into account (e.g. provide a preference
setting for what type to generate).
Note also that ArrayList and Vector have slightly different semantics,
particularly vis a vis synchronization, so the two types aren't
completely interchangeable.
Tom
------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=449&dsMessageId=2941640
To unsubscribe from this discussion, e-mail: [users-unsubscribe <at> argouml.tigris.org].