1 //
2 // $Revision: 5 $
3 // $LastChangedBy: mhanns $
4 // $Date: 2010-04-01 10:10:45 +0200 (Do, 01 Apr 2010) $
5 // $HeadURL:
6 // svn://localhost/winf-ps/trunk/repository/src/main/java/de/uni_leipzig/wifa/iwi/mr3/dao/SavePhaseProcessor.java
7 // $
8 //
9
10 package de.uni_leipzig.wifa.iwi.mr3.dao;
11
12 import java.util.Map;
13
14 import org.eclipse.emf.ecore.EAnnotation;
15 import org.eclipse.emf.ecore.EAttribute;
16 import org.eclipse.emf.ecore.EClass;
17 import org.eclipse.emf.ecore.EDataType;
18 import org.eclipse.emf.ecore.EEnum;
19 import org.eclipse.emf.ecore.EEnumLiteral;
20 import org.eclipse.emf.ecore.EGenericType;
21 import org.eclipse.emf.ecore.EObject;
22 import org.eclipse.emf.ecore.EOperation;
23 import org.eclipse.emf.ecore.EPackage;
24 import org.eclipse.emf.ecore.EParameter;
25 import org.eclipse.emf.ecore.EReference;
26 import org.eclipse.emf.ecore.ETypeParameter;
27 import org.eclipse.emf.ecore.impl.EStringToStringMapEntryImpl;
28 import org.eclipse.emf.ecore.resource.Resource;
29
30 import de.uni_leipzig.wifa.iwi.mr3.service.MRException;
31
32 /**
33 * Phase processor.
34 * <p>
35 * This interface must implemented by any phase processor implementation. The
36 * phase processor acts as strategy pattern.
37 */
38 public interface SaveProcessor
39 {
40 /**
41 * Start the build up process.
42 *
43 * @param resource
44 * Resource to process
45 * @param registry
46 * Object cache
47 */
48 void process(Resource resource, final Map<EObject, Object> registry);
49
50 /**
51 * Dispatch the current element to its handler.
52 * <p>
53 * The order of dispatch types dependends on type hierarchy. Special types
54 * <b>must</b> checked earlier then generally types.
55 *
56 * @param element
57 * Element to dispatch
58 * @param registry
59 * Object cache
60 * @throws MRException
61 * if the model could not be saved
62 */
63 void dispatch(EObject element, final Map<EObject, Object> registry) throws MRException;
64
65 /**
66 * Process an <code>EPackage</code>.
67 *
68 * @param element
69 * <code>EPackage</code>
70 * @param registry
71 * Object cache
72 */
73 void process(EPackage element, final Map<EObject, Object> registry);
74
75 /**
76 * Process an <code>EDataType</code>.
77 *
78 * @param element
79 * <code>EDataType</code>
80 * @param registry
81 * Object cache
82 */
83 void process(EDataType element, final Map<EObject, Object> registry);
84
85 /**
86 * Process an <code>EClass</code>.
87 *
88 * @param element
89 * <code>EClass</code>
90 * @param registry
91 * Object cache
92 */
93 void process(EClass element, final Map<EObject, Object> registry);
94
95 /**
96 * Process an <code>EEnum</code>.
97 *
98 * @param element
99 * <code>EEnum</code>
100 * @param registry
101 * Object cache
102 */
103 void process(EEnum element, final Map<EObject, Object> registry);
104
105 /**
106 * Process an <code>EAnnotation</code>.
107 *
108 * @param element
109 * <code>EAnnotation</code>
110 * @param registry
111 * Object cache
112 */
113 void process(EAnnotation element, final Map<EObject, Object> registry);
114
115 /**
116 * Process an <code>EOperation</code>.
117 *
118 * @param element
119 * <code>EOperation</code>
120 * @param registry
121 * Object cache
122 */
123 void process(EOperation element, final Map<EObject, Object> registry);
124
125 /**
126 * Process an <code>EAttribute</code>.
127 *
128 * @param element
129 * <code>EAttribute</code>
130 * @param registry
131 * Object cache
132 */
133 void process(EAttribute element, final Map<EObject, Object> registry);
134
135 /**
136 * Process an <code>EReference</code>.
137 *
138 * @param element
139 * <code>EReference</code>
140 * @param registry
141 * Object cache
142 */
143 void process(EReference element, final Map<EObject, Object> registry);
144
145 /**
146 * Process an <code>EEnumLiteral</code>.
147 *
148 * @param element
149 * <code>EEnumLiteral</code>
150 * @param registry
151 * Object cache
152 */
153 void process(EEnumLiteral element, final Map<EObject, Object> registry);
154
155 /**
156 * Process an <code>EGenericType</code>.
157 * <p>
158 * We don't need to do something here. The work is still done in the other
159 * methods.
160 *
161 * @param element
162 * <code>EGenericType</code>
163 * @param registry
164 * Object cache
165 */
166 void process(EGenericType element, final Map<EObject, Object> registry);
167
168 /**
169 * Process an <code>EParameter</code>.
170 * <p>
171 * {@link EParameter}s are ordered!
172 *
173 * @param element
174 * <code>EParameter</code>
175 * @param registry
176 * Object cache
177 */
178 void process(EParameter element, final Map<EObject, Object> registry);
179
180 /**
181 * Process an <code>ETypeParameter</code> (generic type parameters).
182 * <p>
183 *
184 * @param element
185 * <code>ETypeParameter</code>
186 * @param registry
187 * Object cache
188 */
189 void process(ETypeParameter element, final Map<EObject, Object> registry);
190
191 /**
192 * Process an <code>EStringToStringMapEntryImpl</code>.
193 *
194 * @param element
195 * <code>EStringToStringMapEntryImpl</code>
196 * @param registry
197 * Object cache
198 */
199 void process(EStringToStringMapEntryImpl element, final Map<EObject, Object> registry);
200
201 /**
202 * Process an unknown element.
203 *
204 * @param element
205 * Unknown element
206 * @param registry
207 * Object cache
208 */
209 void process(EObject element, final Map<EObject, Object> registry);
210 }