I want to add a legend to my activity diagram, which will be generate programatically by java and the ea-api. I already know how to create the legend element and show it in the diagram (Type: "Text" und Subtype: 76):
Element legend = elements.AddNew("Color Legend", "Text");
elements.Refresh();
legend.SetSubtype(76);
legend.Update();
//Show in diagram
DiagramObject diagramObject = diagramObjects.AddNew("l=0; r=100; t=0; b=-100;", "");
diagramObjects.Refresh();
// reference the DiagramObject to the before created element
diagramObject.SetElementID(legend.GetElementID());
But this is only an empty legend. So my question is, how to add an CustomProperty to the CustomProperties. My first approach was the following code:
Collection<CustomProperty> customProperties = legend.GetCustomProperties();
CustomProperty cp = customProperties.AddNew("LegendEntryTest", "Back_Ground_Color=2124031;");
customProperties.Refresh();
legend.Update();
But this don't work, the legend is still empty:(
Here is an example-legend:
Regards, Phil
EDIT
With the help of Geert Bellekens I had solved my problem. Now I use the repository.Execute(String sqlStmt) method to insert the custom property in the t_xref
.
The following code is a small example how it work's:
//get elementGUID of legend
String legendGUID = legend.GetElementGUID();
//create the description value for one custom_property
String name="TestColor1";
String color="3381504";
int customPropertyIndex = 0;
String description = "@PROP=@NAME="+name+"@ENDNAME;@TYPE=LEGEND_OBJECTSTYLE@ENDTYPE;@VALU=#Back_Ground_Color#="+color+";#Pen_Color#=16777215;#Pen_Size#=1;#Legend_Type#=LEGEND_OBJECTSTYLE;@ENDVALU;@PRMT="+customPropertyIndex +"@ENDPRMT;@ENDPROP;"
//add description part for the legend
description += "@PROP=@NAME=Legend@ENDNAME;@TYPE=LEGEND_STYLE_SETTINGS@ENDTYPE;@VALU=@ENDVALU;@PRMT=@ENDPRMT;@ENDPROP;"
String sqlInsertStmt="INSERT INTO t_xref "
+ "("
+ "Client,"
+ "XrefID,"
+ "Type,"
+ "Name,"
+ "Visibility,"
+ "Partition,"
+ "Supplier,"
+ "Description"
+ ") "
+ " VALUES ("
+"'"+legendGUID+ "',"
+ "'{"+UUID.randomUUID().toString()+"}',"
+ "'element property',"
+ "'CustomProperties',"
+ "'Public',"
+ "'0',"
+ "'<none>',"
+ "'"+description+"'"
+ ");"
;
repository.Execute(sqlInsertStmt);
With java.util.UUID
I generate a new GUID for the field XrefID
.
By the way: To convert a RGB-color to that which will accept by Enterprise Architect you can use the following formular:
int colorValue = color.getRed() + (color.getGreen() * 256)
+ (color.getBlue() * 256 * 256);
(RGB Color Model)