summaryrefslogtreecommitdiff
path: root/src/main/java/com/c2kernel/collection/Aggregation.java
blob: e869621387b83d99486f309652101b793f739f06 (plain)
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
package com.c2kernel.collection;


import com.c2kernel.collection.gui.model.AggregationVertexOutlineCreator;
import com.c2kernel.graph.model.GraphModel;
import com.c2kernel.graph.model.GraphPoint;
import com.c2kernel.graph.model.TypeNameAndConstructionInfo;
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;
    }

    public TypeNameAndConstructionInfo[] getVertexTypeNameAndConstructionInfo()
    {
        return mVertexTypeNameAndConstructionInfo;
    }

    public boolean exists(int entityKey)
    {
    	for (int i=0; i<size(); i++)
    	{
    		AggregationMember element = mMembers.list.get(i);
            if (element.getEntityKey() == entityKey)
                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 addMember(int entityKey, CastorHashMap props, String classProps, GraphPoint location, int w, int h)
        throws MembershipException
    {
        // Create new member object
        AggregationMember aggMem = new AggregationMember();
        aggMem.setProperties(props);
        aggMem.setClassProps(classProps);
        aggMem.assignEntity(entityKey);

        // 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);
        aggMem.setIsComposite( RelationshipUtils.getIsComposite(entityKey)  );
        mMembers.list.add(aggMem);
        Logger.msg(8, "AggregationDescription::addMember(" + entityKey + ") added to children linked to vertexid " + vertex.getID());
        return aggMem;
    }


    @Override
	public AggregationMember addMember(int entityKey, CastorHashMap props, String classProps) throws MembershipException
    {
        return addMember(entityKey, props, classProps, new GraphPoint(100,100*getCounter()), 20, 20);
    }

    @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.clearEntity();
                mLayout.removeVertex(getLayout().getVertexById(memberId));
                return;
            }
        }
        throw new MembershipException("Member "+memberId+" not found");
    }

}