1 package org.splat.simer;
3 import java.util.HashMap;
4 import java.util.Iterator;
6 import java.util.Vector;
8 import org.splat.dal.bo.kernel.User;
9 import org.splat.dal.bo.som.Document;
10 import org.splat.dal.bo.som.DocumentType;
11 import org.splat.dal.bo.som.KnowledgeElement;
12 import org.splat.dal.bo.som.KnowledgeElementType;
13 import org.splat.dal.bo.som.ProgressState;
14 import org.splat.service.KnowledgeElementService;
15 import org.splat.service.KnowledgeElementTypeService;
16 import org.splat.service.ProjectElementService;
17 import org.splat.service.PublicationService;
18 import org.splat.service.dto.Proxy;
19 import org.splat.service.technical.ProjectSettingsService;
20 import org.splat.dal.bo.som.Publication;
21 import org.splat.dal.bo.som.Scenario;
22 import org.splat.som.Step;
23 import org.splat.wapp.Menu;
24 import org.splat.wapp.PopupMenu;
26 public abstract class OpenObject implements Proxy {
28 protected static HashMap<Long, DocumentFacade> docpres = null;
29 protected static HashMap<Long, KnowledgeElementFacade> knowpres = null;
31 protected User cuser = null; // Connected user
32 protected String selection = null; // Menu selected by the user
33 protected Step ustep = null; // Corresponding selected step
34 protected String description = null; // Object description (rich text)
35 protected List<Step> involving = null;
36 protected List<SimulationContextFacade> context = null; // Simulation Context display representations
37 protected List<DocumentFacade> contents = null; // Document display representations
38 protected List<KnowledgeIterator> knowledge = null; // Knowledge Element display representations structured by knowledge types
40 protected Menu menu = null; // Left pane menu of this object
41 protected PopupMenu popup = null; // Pop-up menu of this object, if the user has write access
43 * Injected project settings service.
45 private ProjectSettingsService _projectSettingsService;
47 * Injected publication service.
49 private PublicationService _publicationService;
51 * Injected knowledge element service.
53 private KnowledgeElementTypeService _knowledgeElementTypeService;
55 * Injected project element service.
57 private ProjectElementService _projectElementService;
59 public class KnowledgeIterator {
60 protected KnowledgeElementType type;
61 protected List<KnowledgeElementFacade> list;
63 public KnowledgeIterator(KnowledgeElementType type,
64 List<KnowledgeElementFacade> list) {
69 public String getIndex() {
70 return String.valueOf(type.getIndex());
73 public String getType() {
74 return type.getName();
77 public List<KnowledgeElementFacade> getKnowledgeElements() {
82 // ==============================================================================================================================
84 // ==============================================================================================================================
86 protected OpenObject() {
87 // -----------------------
88 // All member fields are supposed initialized by subclasses
90 docpres = new HashMap<Long, DocumentFacade>();
92 knowpres = new HashMap<Long, KnowledgeElementFacade>();
95 // ==============================================================================================================================
96 // Public member functions
97 // ==============================================================================================================================
99 public void developDocument(String index) {
100 // ------------------------------------------
101 for (Iterator<DocumentFacade> i = contents.iterator(); i.hasNext();) {
102 DocumentFacade doc = i.next();
103 if (!doc.getIndex().equals(index))
110 public void developKnowledge(String index) {
111 // -------------------------------------------
112 for (Iterator<KnowledgeIterator> i = knowledge.iterator(); i.hasNext();) {
113 List<KnowledgeElementFacade> knowelms = i.next()
114 .getKnowledgeElements();
115 for (Iterator<KnowledgeElementFacade> j = knowelms.iterator(); j
117 KnowledgeElementFacade kelm = j.next();
118 if (!kelm.getIndex().equals(index))
126 public void clearFacades() {
127 // ---------------------------
128 docpres.clear(); // For eventually reopening the knowledge from a fresh context
129 knowpres.clear(); // For eventually reopening the knowledge from a fresh context
132 public List<Document> collectInvolvedDocuments(DocumentType type) {
133 // ------------------------------------------------------------------
134 List<Document> found = new Vector<Document>();
135 for (Iterator<Step> i = involving.iterator(); i.hasNext();) {
136 Step step = i.next();
137 List<Publication> exist = step.getAllDocuments();
138 for (Iterator<Publication> j = exist.iterator(); j.hasNext();) {
139 Document doc = j.next().value();
140 if (doc.getType().equals(type))
147 public String getDisplayedDescription() {
148 // ----------------------------------------
152 public List<DocumentFacade> getDisplayedDocuments() {
153 // -----------------------------------------------------
157 public List<SimulationContextFacade> getDisplayedSimulationContexts() {
158 // ----------------------------------------------------------------------
162 public List<KnowledgeIterator> getDisplayedKnowledges() {
163 // --------------------------------------------------------
167 public List<Step> getInvolvedSteps() {
168 // -------------------------------------
172 public Menu getMenu() {
173 // ----------------------
177 public PopupMenu getPopup() {
178 // ----------------------------
182 public Step getSelectedStep() {
183 // ------------------------------
187 public String getSelection() {
188 // -----------------------------
192 public User getUser() {
193 // ----------------------
197 public boolean isOpenForWriting() {
198 // ----------------------------------
199 return (popup != null); // The pop-up is supposed existed when the user is staffed on the study
202 public void reduceDocument(String index) {
203 // -----------------------------------------
204 for (Iterator<DocumentFacade> i = contents.iterator(); i.hasNext();) {
205 DocumentFacade doc = i.next();
206 if (!doc.getIndex().equals(index))
213 public void reduceHistory(String index) {
214 // ----------------------------------------
215 for (Iterator<DocumentFacade> i = contents.iterator(); i.hasNext();) {
216 DocumentFacade doc = i.next();
217 if (!doc.getIndex().equals(index))
224 public void reduceKnowledge(String index) {
225 // ------------------------------------------
226 for (Iterator<KnowledgeIterator> i = knowledge.iterator(); i.hasNext();) {
227 List<KnowledgeElementFacade> knowelms = i.next()
228 .getKnowledgeElements();
229 for (Iterator<KnowledgeElementFacade> j = knowelms.iterator(); j
231 KnowledgeElementFacade kelm = j.next();
232 if (!kelm.getIndex().equals(index))
240 // ==============================================================================================================================
241 // Protected services
242 // ==============================================================================================================================
244 protected void setupContents() {
245 // -------------------------------
247 // Initialized in subclasses
249 // Knowledge elements supposed ordered by type
250 if (ustep.mayContain(KnowledgeElement.class)) {
251 Scenario scene = (Scenario) ustep.getOwner();
252 List<KnowledgeElementType> types = getKnowledgeElementTypeService()
253 .selectTypesWhere(ProgressState.APPROVED);
254 List<KnowledgeElement> kelms = scene.getAllKnowledgeElements();
255 Iterator<KnowledgeElement> more = kelms.iterator();
256 KnowledgeElement current = null;
258 current = more.next();
260 knowledge = new Vector<KnowledgeIterator>(types.size());
261 for (Iterator<KnowledgeElementType> i = types.iterator(); i
263 KnowledgeElementType type = i.next();
264 List<KnowledgeElementFacade> display = new Vector<KnowledgeElementFacade>(
266 while (current != null && current.getType().equals(type)) {
267 KnowledgeElementFacade facade = knowpres.get(current
269 if (facade == null) {
270 facade = new KnowledgeElementFacade(current);
271 knowpres.put(current.getIndex(), facade);
275 current = more.next();
279 knowledge.add(new KnowledgeIterator(type, display));
285 if (ustep.mayContain(Document.class)) {
286 List<Publication> list = ustep.getAllDocuments();
288 contents = new Vector<DocumentFacade>(list.size());
289 for (Iterator<Publication> i = list.iterator(); i.hasNext();) {
290 Publication present = i.next();
291 Long index = present.getIndex();
292 DocumentFacade facade = docpres.get(index);
293 if (facade == null) {
294 facade = new DocumentFacade(this, present,
295 getProjectSettings(), getPublicationService());
296 docpres.put(index, facade);
298 contents.add(facade);
306 * Get project settings.
308 * @return Project settings service
310 public ProjectSettingsService getProjectSettings() {
311 return _projectSettingsService;
315 * Get the publicationService.
317 * @return the publicationService
319 public PublicationService getPublicationService() {
320 return _publicationService;
324 * Set project settings service.
326 * @param projectSettingsService
327 * project settings service
329 public void setProjectSettings(ProjectSettingsService projectSettingsService) {
330 _projectSettingsService = projectSettingsService;
334 * Set the publicationService.
336 * @param publicationService
337 * the publicationService to set
339 public void setPublicationService(PublicationService publicationService) {
340 _publicationService = publicationService;
349 public void setMenu(Menu menu) {
354 * Get the projectElementService.
356 * @return the projectElementService
358 public ProjectElementService getProjectElementService() {
359 return _projectElementService;
363 * Set the projectElementService.
365 * @param projectElementService
366 * the projectElementService to set
368 public void setProjectElementService(
369 ProjectElementService projectElementService) {
370 _projectElementService = projectElementService;
374 * Get the knowledgeElementTypeService.
375 * @return the knowledgeElementTypeService
377 public KnowledgeElementTypeService getKnowledgeElementTypeService() {
378 return _knowledgeElementTypeService;
382 * Set the knowledgeElementTypeService.
383 * @param knowledgeElementTypeService the knowledgeElementTypeService to set
385 public void setKnowledgeElementTypeService(
386 KnowledgeElementTypeService knowledgeElementTypeService) {
387 _knowledgeElementTypeService = knowledgeElementTypeService;