1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
package com.c2kernel.collection;
import com.c2kernel.collection.gui.model.AggregationVertexOutlineCreator;
import com.c2kernel.common.ObjectNotFoundException;
import com.c2kernel.graph.model.GraphModel;
import com.c2kernel.graph.model.GraphPoint;
import com.c2kernel.graph.model.TypeNameAndConstructionInfo;
import com.c2kernel.lookup.ItemPath;
import com.c2kernel.lookup.InvalidItemPathException;
import com.c2kernel.persistency.ClusterStorage;
import com.c2kernel.process.Gateway;
import com.c2kernel.utils.CastorHashMap;
import com.c2kernel.utils.Language;
import com.c2kernel.utils.Logger;
/**
* @version $Revision: 1.59 $ $Date: 2004/08/10 07:56:08 $
* @author $Author: abranson $
*/
abstract public class Aggregation extends Parent2ChildCollection<AggregationMember>
{
protected GraphModel mLayout = new GraphModel(new AggregationVertexOutlineCreator());
private final TypeNameAndConstructionInfo[] mVertexTypeNameAndConstructionInfo = {
new TypeNameAndConstructionInfo(Language.translate("Slot"), "AggregationMember")
};
public Aggregation()
{
setName("Aggregation");
}
public GraphModel getLayout()
{
return mLayout;
}
public void setLayout(GraphModel layout)
{
mLayout = layout;
layout.setVertexOutlineCreator(new AggregationVertexOutlineCreator());
}
public TypeNameAndConstructionInfo[] getVertexTypeNameAndConstructionInfo()
{
return mVertexTypeNameAndConstructionInfo;
}
public boolean exists(int sysKey)
{
for (int i=0; i<size(); i++)
{
AggregationMember element = mMembers.list.get(i);
if (element.getSystemKey() == sysKey)
return true;
}
return false;
}
public AggregationMember getMemberPair(int vertexID)
{
for (int i=0; i<size(); i++)
{
AggregationMember element = mMembers.list.get(i);
if (element.getID() == vertexID)
return element;
}
return null;
}
public AggregationMember addSlot(CastorHashMap props, String classProps, GraphPoint location, int w, int h)
{
// Default geometry if not present
if (location == null) location = new GraphPoint(100,100*getCounter());
if (w<0) w = 20;
if (h<0) h = 20;
// Create new member object
AggregationMember aggMem = new AggregationMember();
aggMem.setProperties(props);
aggMem.setClassProps(classProps);
// create vertex
com.c2kernel.graph.model.Vertex vertex = new com.c2kernel.graph.model.Vertex();
vertex.setHeight(h); vertex.setWidth(w);
mLayout.addVertexAndCreateId(vertex,location);
aggMem.setCollection(this);
aggMem.setID(vertex.getID());
aggMem.setIsLayoutable(true);
mMembers.list.add(aggMem);
Logger.msg(8, "AggregationDescription::addSlot new slot linked to vertexid " + vertex.getID());
return aggMem;
}
public AggregationMember addMember(int sysKey, CastorHashMap props, String classProps, GraphPoint location, int w, int h)
throws MembershipException
{
AggregationMember aggMem = addSlot(props, classProps, location, w, h);
if (sysKey > -1) { // some clients use this method when not setting a member
aggMem.assignItem(sysKey);
aggMem.setIsComposite( getIsComposite(sysKey, getName()) );
}
Logger.msg(8, "AggregationDescription::addMember(" + sysKey + ") assigned to new slot " + aggMem.getID());
return aggMem;
}
@Override
public AggregationMember addMember(int entityKey, CastorHashMap props, String classProps) throws MembershipException
{
return addMember(entityKey, props, classProps, null, -1, -1);
}
public AggregationMember addSlot(CastorHashMap props, String classProps)
{
return addSlot(props, classProps, null, -1, -1);
}
@Override
public AggregationMember addMember(int entityKey) throws MembershipException {
throw new MembershipException("Aggregations cannot accept arbitrary members without type info");
}
@Override
public void removeMember(int memberId) throws MembershipException {
for (AggregationMember element : mMembers.list) {
if (element.getID() == memberId) {
element.clearItem();
mLayout.removeVertex(getLayout().getVertexById(memberId));
return;
}
}
throw new MembershipException("Member "+memberId+" not found");
}
static public boolean getIsComposite(int entityKey, String name)
{
if (entityKey == -1) return false;
try {
for(String collName: Gateway.getProxyManager().getProxy(new ItemPath(entityKey)).getContents(ClusterStorage.COLLECTION) )
if (name == null || name.equals(collName)) return true;
} catch (ObjectNotFoundException e) {
return false;
} catch (InvalidItemPathException e) {
return false;
}
return false;
}
}
|