View Javadoc

1   package net.sf.quarrel.uml;
2   
3   import net.sf.quarrel.file.ElementType;
4   import net.sf.quarrel.file.FeatureType;
5   import net.sf.quarrel.file.FileElement;
6   
7   import java.util.Collection;
8   import java.util.HashMap;
9   import java.util.Iterator;
10  import java.util.Map;
11  
12  /***
13   * @deprecated 
14   */
15  public class ModelBuilderImpl implements ModelBuilder {
16  
17      /***
18       * A map of ElementTypes to handlers.  Will be used to remove a potentially
19       * ugly if statement in add(FileElement).
20       */
21      private final Map _handlerMap = new HashMap();
22  
23      private final Model _model = new Model();
24  
25      public ModelBuilderImpl() {
26          _handlerMap.put(ElementType.CLASS, ClassElementHandler.class);
27          _handlerMap.put(ElementType.INTERFACE, InterfaceElementHandler.class);
28      }
29  
30      public void addClass(String className) {
31          _model.addElement(new UmlClass(className));
32      }
33  
34      public Model getModel() {
35          return _model;
36      }
37  
38      public void addInterface(String interfaceName) {
39          _model.addElement(new UmlInterface(interfaceName));
40      }
41  
42      /***
43       * Adds the specified attribute to a class
44       *
45       * @param name      the name of the Structured Element
46       * @param attribute the name of the attribute
47       */
48      public void addAttribute(String name,
49                               String attribute) {
50  
51          Element element = _model.getElement(name);
52          AttributeAggregator aggregator = (AttributeAggregator) element;
53          aggregator.addAttribute(attribute);
54  
55      }
56  
57      public void addOperation(String name,
58                               String operation) {
59  
60          Element element = _model.getElement(name);
61          OperationAggregator theClass = (OperationAggregator) element;
62          theClass.addOperation(operation);
63  
64      }
65  
66      public void addRelationship(String clientName, String supplierName, RelationshipType relationshipType) {
67  
68          final Element client = _model.getElement(clientName);
69          final Element supplier = _model.getElement(supplierName);
70  
71          _model.addRelationship(relationshipType, client, supplier);
72  
73      }
74  
75      public void add(FileElement element) {
76  
77          final ElementType elementType = element.getElementType();
78  
79          final ElementHandler elementHandler;
80  
81          System.out.println("adding [" + elementType.getName() + "] element [" + element.getName() + "]");
82  
83          // todo change this to use a Map
84          if (ElementType.CLASS.equals(elementType)) {
85              elementHandler = new ClassElementHandler(this);
86          } else if (ElementType.INTERFACE.equals(elementType)) {
87              elementHandler = new InterfaceElementHandler(this);
88          } else {
89              throw new IllegalStateException("element type " + elementType.getName() + " not supported");
90          }
91  
92          elementHandler.handle(element);
93  
94      }
95  
96      private boolean elementExists(String elementName) {
97          return _model.elementExists(elementName);
98      }
99  
100     private static abstract class ElementHandler {
101 
102         final ModelBuilderImpl _builder;
103 
104         public ElementHandler(ModelBuilderImpl builder) {
105             _builder = builder;
106         }
107 
108         public void handle(FileElement element) {
109 
110             final String className = element.getName();
111             addElement(className);
112             processRelationships(element, className);
113             processAttributes(element, className);
114             processOperations(element, className);
115 
116         }
117 
118         void processRelationships(final FileElement element,
119                                             final String className) {
120 
121             final ElementType elementType = element.getElementType();
122 
123             if (elementType.supportFeatureType(FeatureType.IMPLEMENTS)) {
124 
125                 final Collection realizations = element.getFeatures(FeatureType.IMPLEMENTS);
126 
127                 for (Iterator iterator = realizations.iterator(); iterator.hasNext();)
128                 {
129 
130                     String supplier = (String) iterator.next();
131 
132                     if (!_builder.elementExists(supplier)) {
133                         _builder.addClass(supplier);
134                     }
135 
136                     _builder.addRelationship(className, supplier, RelationshipType.Realization);
137 
138                 }
139 
140             }
141 
142         }
143 
144         void processOperations(FileElement element, final String className) {
145 
146             final Collection operations = element.getFeatures(FeatureType.OPERATIONS);
147 
148             Object next;
149             for (Iterator iterator = operations.iterator(); iterator.hasNext();)
150             {
151                 next = iterator.next();
152                 System.out.println(next.getClass());
153                 String operationName = (String) next;
154                 _builder.addOperation(className, operationName);
155             }
156 
157         }
158 
159         void processAttributes(FileElement element, final String className) {
160 
161             final Collection attributes = element.getFeatures(FeatureType.ATTRIBUTES);
162 
163             for (Iterator iterator = attributes.iterator(); iterator.hasNext();)
164             {
165                 String attributeName = (String) iterator.next();
166                 _builder.addAttribute(className, attributeName);
167             }
168 
169         }
170 
171         protected abstract void addElement(String elementName);
172 
173     }
174 
175     private static class ClassElementHandler extends ElementHandler {
176 
177         public ClassElementHandler(ModelBuilderImpl builder) {
178             super(builder);
179         }
180 
181         protected void addElement(final String elementName) {
182             _builder.addClass(elementName);
183         }
184 
185     }
186 
187     public static class InterfaceElementHandler extends ElementHandler {
188         public InterfaceElementHandler(ModelBuilderImpl builder) {
189             super(builder);
190         }
191 
192         protected void addElement(String elementName) {
193             _builder.addInterface(elementName);
194         }
195 
196     }
197 
198 }