KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > cve > core > comunicazione > Ldl_to_Edl


1 /**
2  * @(#) Ldl_to_Edl.java
3  */

4 package cve.core.comunicazione;
5
6 import cve.core.elementEEL.*;
7 import cve.core.elementLDL.*;
8 import relations.*;
9 import java.util.*;
10 import cve.staticLayout.*;
11
12 import java.lang.reflect.*;
13
14 import javax.swing.*;
15
16 import org.apache.log4j.Logger;
17
18 /**
19   * Classe finalizzata alla creazione dell'ambiente EEL a partire dai descrittori definiti
20    * nella fase LDL.
21   * Vengono creati le opportune istanze di elementi cve (esecutori, osservatori, presenter, unit).
22   * Tali elementi vengono informati di eventuali relazioni cve che
23   * li coinvolgono (RelInterlayer, RelIntralayer). Tutte le relazioni relative ad un ambiente sono
24   * contenute all'interno di una istanza di InsiemeDiRelCve.
25   * Vengono creati anche tutti i componenti visuali CveMenu,CveToolBar ...
26    *
27   * @see <code>InsiemeDiRelCve</code>,<code> Esecutori </code>,<code> GruppoCven </code>,<code> RelInterlayer </code>,<code> RelIntralayer </code>
28   *
29   *@version 1.0 05/05/03
30   *@author Domenico Ventriglia
31   */

32 public class Ldl_to_Edl {
33     // ambiente LDL
34
private final Environment env;
35       // ambiente EEL
36
private EnvironmentEEL envEEL;
37     
38       /**
39        * Costruttore a partire dall'insieme dei descrittori
40        * @param: env e' l'ambiente LDL (contiene tutti i descrittori)
41        */

42       public Ldl_to_Edl (Environment env){
43          Cve.errLog.debug("");
44          this.env=env;
45          // prendo i descrittori elementi
46
IInsiemeElementiCve eleLdl=env.getAllElement();
47          // prendo descrittori relazioni
48
InsiemeDiRelCve relLdl=env.getAllRel();
49          //a partire descrittori creo insieme elementi EEL
50
IInsiemeBaseObject elementEEL=createElementEEL(eleLdl);
51          //creo comunicazione fra elementi
52
createComunication(relLdl, elementEEL);
53          // a partire dai descrittori associo componenti grafiche agli elementi
54
componentiGrafiche(eleLdl, elementEEL);
55          // crea ambiente EEL: insieme di Unit
56
makeEnvironmentEEL(eleLdl,elementEEL);
57     }
58       
59       /**
60        * Restituisce l'ambiente EEL generato
61        */

62       public EnvironmentEEL getEnvironmentEEL(){
63          Cve.errLog.debug("");
64          return envEEL;
65     }
66       
67     /**
68       * Crea tutti gli elementi (esecutori e osservatori) corrispondenti
69       * ai descrittori (ElementCve) definiti a livello LDL.
70          * In ogni descrittore vi e' la classe che deve essere
71          * istanzata. Creo corrispodenza fa id LDL e EEL
72       *
73       *@param IInsiemeElementiCve interfaccia contiene le operazioni
74       * per gestire un insieme di elementiCve (LDL) presenti in
75       * un grafo d'ambiente cve
76       *
77       */

78     private IInsiemeBaseObject createElementEEL(IInsiemeElementiCve iDRC){
79         // contiene tutti le istanze (osservatori, esecutori, presenter) livello EEL
80
Cve.errLog.debug("");
81          Esecutore ese=null;
82          Osservatore oss=null;
83          Presenter pre=null;
84          Unit unit=null;
85          ABaseObject app=null;
86
87          // HaspMap con chiave l'id e valore l'istanza
88
InsiemeBaseObject insiemeBase=new InsiemeBaseObject("provaEdl");
89          String JavaDoc id;
90          ViewLog.writeInLog(" "+"\n");
91       ViewLog.writeInLog(" ****** A PARTIRE DAI DESCRITTORI CREO ELEMENTI EEL ******"+"\n");
92       int card=iDRC.getCardinalita();
93         for (int i=0;i<card;i++){
94             IElementoCve eleCve=iDRC.getElemento(i);
95                  try {
96                       Class JavaDoc ele=eleCve.getClassCve();
97                       String JavaDoc descr=eleCve.getDescription();
98                       String JavaDoc tipo=eleCve.getTipo();
99                       id=eleCve.getId();
100                       if (tipo.equals("esecutore")){
101                          ese=(Esecutore)ele.newInstance();
102                            //id=eleCve.getId();
103
ese.setDescription(descr);
104                            ViewLog.writeInLog(" creato oggetto esecutore "+ele.getName()+ " id "+id+"\n");
105                            insiemeBase.addElemento(ese,id);
106                       }
107                       if (tipo.equals("osservatore")){
108                          oss=(Osservatore)ele.newInstance();
109                            // in parameters del descrittore vi sono i componets
110
Collection par=eleCve.getParameters();
111                            if (par!=null)
112                               oss.setComponents(par);
113                            //id=eleCve.getId();
114
oss.setDescription(descr);
115                            ViewLog.writeInLog(" creato oggetto osservatore "+ele.getName()+" id "+id+"\n");
116                            insiemeBase.addElemento(oss,id);
117                       }
118                       if (tipo.equals("presenter")){
119                            IElementoCveVis eleCveVis=(IElementoCveVis)eleCve;
120                          pre=(Presenter)ele.newInstance();
121                            pre.setDescription(descr);
122                            ViewLog.writeInLog(" creato oggetto presenter "+ele.getName()+" id "+id+"\n");
123                            insiemeBase.addElemento(pre,id);
124                       }
125                       if (tipo.equals("unit")){
126                            IElementoCveVis eleCveVis=(IElementoCveVis)eleCve;
127                          unit=(Unit)ele.newInstance();
128                            unit.setDescription(descr);
129                            //id=eleCveVis.getId();
130
ViewLog.writeInLog(" creato oggetto unit "+ele.getName()+" id "+id+"\n");
131                            insiemeBase.addElemento(unit,id);
132                       }
133                   } catch (InstantiationException JavaDoc e) {
134                      Cve.errLog.error(e.toString());
135                   }
136                   catch (IllegalAccessException JavaDoc e) {
137                      Cve.errLog.error(e.toString());
138                   }
139             }
140             ViewLog.writeInLog(" *** Fase creazione istanze EEL finita, insieme istanze EEL dimensioni "+insiemeBase.getCardinalita()+"\n");
141             ViewLog.writeInLog(" "+"\n");
142         return (IInsiemeBaseObject)insiemeBase;
143     }
144    
145     /**
146       *Comunica a tutti gli elementi cve registrati le relazioni
147       * di tipo <code>RelInterlayerCve</code> esistenti.
148       * Delega la gestione di questa relazione agli elementi interessati.
149       * Inoltre per ogni relazione di tipo <code>RelLayerCve</code> crea
150       * un opportuno gruppo
151       *
152       *@param InsiemeDiRelCve: contiene tutte le relazioni presenti in un
153       * grafo d'ambiente cve
154          * InsiemeBaseObject: contiene tutte le istanze attive livello EEL create
155          * da createElementEDL()
156       *
157       */

158     private void createComunication(InsiemeDiRelCve iDRC, IInsiemeBaseObject elementBase){
159           String JavaDoc id1,id2;
160           Cve.errLog.debug("");
161             ViewLog.writeInLog(" "+"\n");
162         ViewLog.writeInLog(" ****** INIZIA ELABORAZIONE RELAZIONI ESISTENTI (ldl eel) ******"+"\n");
163         int card=iDRC.getCardinalita();
164         for (int i=0;i<card;i++){
165                  // prendo una relazione cve
166
IRelazione r=iDRC.getRel(i);
167               // se relazione di tipo interlayer
168
if (r instanceof RelInterlayerCve) {
169                RelInterlayerCve rIC=(RelInterlayerCve)r;
170                ViewLog.writeInLog(" Trovata relazione interlayer"+"\n");
171               ViewLog.writeInLog(" nome "+rIC.getNome()+"\n");
172                      // prendo i 2 members della relazione interlayer (livello ldl)
173
Iterator meb=rIC.getMembers();
174                      IElementoCve eleCve2=null,eleCve1=null;
175                          // prendo primo membro
176
if (meb.hasNext()){
177                        IMemberRel member1=(IMemberRel)meb.next();
178                         eleCve1=(IElementoCve)member1.getRef();
179                 ViewLog.writeInLog(" Membro1 id = "+eleCve1.getId()+" tipo = "+eleCve1.getTipo()+"\n");
180                      }
181                          // prendo secondo membro
182
if (meb.hasNext()){
183                        IMemberRel member2=(IMemberRel)meb.next();
184                         eleCve2=(IElementoCve)member2.getRef();
185                 ViewLog.writeInLog(" Membro2 id = "+eleCve2.getId()+" tipo = "+eleCve2.getTipo());
186                      }
187                      id1=eleCve1.getId();
188                      id2=eleCve2.getId();
189                      // se il primo ElementCve descrive un osservatore e il secondo un esecutore
190
if ((eleCve1.getTipo().equals("osservatore"))&&(eleCve2.getTipo().equals("esecutore"))){
191                   //prendo elementi eel conivolti nella relazione stesso id
192
Osservatore oss=(Osservatore)elementBase.getElemento(id1);
193                            Esecutore ese=(Esecutore)elementBase.getElemento(id2);
194                            linkEseOss(ese, oss);
195               }
196                     // se il primo ElementCve descrive un esecutore e il secondo un osservatore
197
if ((eleCve1.getTipo().equals("esecutore"))&&(eleCve2.getTipo().equals("osservatore"))){
198                            //prendo elementi eel conivolti nella relazione stesso id
199
Esecutore ese=(Esecutore)elementBase.getElemento(id1);
200                            Osservatore oss=(Osservatore)elementBase.getElemento(id2);
201                              //System.out.println(" ATTENZIONE COLLEGATO ESECUTORE AD OSSERVATORE");
202
linkEseOss(ese, oss);
203               }
204                      // se il primo ElementCve descrive un osservatore e il secondo un presenter
205
if ((eleCve1.getTipo().equals("osservatore"))&&(eleCve2.getTipo().equals("presenter"))){
206                   //prendo elementi eel conivolti nella relazione stesso id
207
Osservatore oss=(Osservatore)elementBase.getElemento(id1);
208                            Presenter pre=(Presenter)elementBase.getElemento(id2);
209                            linkOssPre(oss, pre);
210               }
211                     // se il primo ElementCve descrive un presenter e il secondo un osservatore
212
if ((eleCve1.getTipo().equals("presenter"))&&(eleCve2.getTipo().equals("osservatore"))){
213                            //prendo elementi eel conivolti nella relazione stesso id
214
Presenter pre=(Presenter)elementBase.getElemento(id1);
215                            Osservatore oss=(Osservatore)elementBase.getElemento(id2);
216                              // System.out.println(" il osservatore ha id "+oss.getId());
217
// System.out.println(" il presenter ha id "+pre.getId());
218
linkOssPre(oss,pre);
219               }
220             }
221             // se relazione di tipo intralayer
222
if (r instanceof RelIntralayerCve) {
223                RelIntralayerCve rL=(RelIntralayerCve)r;
224                ViewLog.writeInLog(" Trovata relazione layer"+"\n");
225                ViewLog.writeInLog(" nome "+rL.getNome()+"\n");
226                //System.out.println(" tipo "+rL.getTipo());
227
rL.getMembers();
228                      
229                      // HO MODIFCATO UTIL.RELnoRIENTATTE GETMEBERS DA ENUMERATION A ITERATOR
230

231                // passo al gruppo cve tutti i membri di una relazione
232
//GruppoCve refGroup=makeGruppoCve(rL.getNome(), rL.getTipo(),rL.getMembers());
233
// informo tutti gli elementi cve coinvolti dell'esistenza del gruppo
234
ViewLog.writeInLog(" Creato gruppo "+"\n");
235                //notifyElementCve(rL.getNome(),rL.getTipo(),elementBase.Bases(),refGroup);
236
}
237         }
238     }
239       
240       /**
241        * Associazione degli elementi EEL alle componenti grafiche decritte
242        * nell'ambiente LDL
243        *@param iDRC
244        *@param elementBase
245        */

246       private void componentiGrafiche(IInsiemeElementiCve iDRC, IInsiemeBaseObject elementBase){
247         // ad ogni presenter devo associare delle azioni
248
Cve.errLog.debug("");
249          ViewLog.writeInLog(" "+"\n");
250       ViewLog.writeInLog(" ****** ASSOCIAZIONE COMPONENTI GRAFICHE AD ELEMENTI CVE EEL ******"+"\n");
251          ViewLog.writeInLog(" Creazione toolbar e menubar (associazione azioni-pulsanti)"+"\n");
252          Presenter pre=null;
253          String JavaDoc id;
254       int card=iDRC.getCardinalita();
255       for (int i=0;i<card;i++){
256           IElementoCve eleCve=iDRC.getElemento(i);
257                if (eleCve instanceof IElementoCveVis) {
258                      IElementoCveVis eleCveVis=(IElementoCveVis)eleCve;
259                      id=eleCveVis.getId();
260                      // prendo elemento eel
261
if (eleCveVis.getTipo().equals("presenter")){
262                         pre=(Presenter)elementBase.getElemento(id);
263                         // creazione toolbar a partire dal descrittore
264
CveToolBar cveT=makeTool((DescrCveToolBar)eleCveVis.getToolB(),pre);
265                         pre.setToolBar(cveT);
266                         
267                         //GF Impostazione Icona
268
pre.setIcon(eleCveVis.getIcon());
269                        
270                         // creazione menu a partire dal descrittore
271
Collection cveMenus=eleCveVis.getAllMenu();
272                         if (cveMenus!=null){
273                            Iterator itMenu=cveMenus.iterator();
274                            CveMenuBar cveMB=new CveMenuBar();
275                            boolean esisteMenu=false;
276                            while(itMenu.hasNext()){
277                            esisteMenu=true;
278                               CveMenu cveM=makeMenu((DescrCveMenu)itMenu.next(),pre);
279                               cveMB.add(cveM);
280                            }
281                            if (esisteMenu)
282                               pre.setMenu(cveMB);
283                         }
284                         // leggo i parametri messi in param del descrittore
285
Collection par=eleCveVis.getParameters();
286                            if (par!=null && par.size()>0){
287                               Iterator itC=par.iterator();
288                               String JavaDoc titolo=(String JavaDoc)itC.next();
289                               pre.setTitle(titolo);
290                            }
291                         ViewLog.writeInLog(" Inserite toolbar e menupbar in presenter"+"\n");
292                   }
293                }
294         }
295     }
296       
297       /**
298        * Logica: 1)Prendo tutte le unit presenti nei descrittori
299        * 2) prendo il relativo elemento EEL
300        * 3) prendo dal descrittore della unit i descrittori dei presenter che lo compongono
301        * 4) prendo le istanze dei presenter in EEL corrispondenti
302        * 5) metto i presenter nella unit
303        * 6) metto la unit nell'ambiente EEL
304        * @param iDRC: l'insieme dei descrittori
305        * @param elementEEL
306        */

307       private void makeEnvironmentEEL(IInsiemeElementiCve iDRC,IInsiemeBaseObject elementEEL){
308          Cve.errLog.debug("");
309          ViewLog.writeInLog(" "+"\n");
310       ViewLog.writeInLog(" ****** CREAZIONE AMBIENTE EEL ******"+"\n");
311          ViewLog.writeInLog(" Un ambiente eel e' composto da Unit"+"\n");
312          envEEL=new EnvironmentEEL();
313          envEEL.setDescription((String JavaDoc)env.getDescription());
314          Unit unit=null;
315          Presenter pre=null;
316          String JavaDoc id;
317       int card=iDRC.getCardinalita();
318       for (int i=0;i<card;i++){
319           IElementoCve eleCve=iDRC.getElemento(i);
320                if (eleCve instanceof IElementoCveVis) {
321                      IElementoCveVis eleCveVis=(IElementoCveVis)eleCve;
322                      if (eleCveVis.getTipo().equals("unit")){
323                         id=eleCveVis.getId();
324                         // prendo elemento eel corrispondente
325
unit=(Unit)elementEEL.getElemento(id);
326                         // prendo i presenter che compongono la pagina
327
Collection par=eleCveVis.getParameters();
328                         // in parameters del descrittore unit vi sono i presenter che lo compongono
329
if (par!=null && par.size()>0){
330                              Iterator itP=par.iterator();
331                               // metto in unit i presenter
332
while (itP.hasNext()){
333                                  IElementoCve descrPre=(IElementoCve)itP.next();
334                                  //ViewLog.writeInLog(" trovato descr pre"+ descrPre.getId());
335
pre=(Presenter)elementEEL.getElemento((String JavaDoc)descrPre.getId());
336                                  unit.addPresenter(pre);
337                              }
338                         }
339                      }
340                }
341                if (unit!=null){
342                   envEEL.addUnit((IUnit)unit);
343                }
344          }
345       }
346       
347       /**
348        * Creazione di un link fra un Osservatore ed un presenter
349        * @param oss
350        * @param pre
351        */

352       private void linkOssPre(Osservatore oss,Presenter pre){
353          Cve.errLog.debug("");
354            oss.setPresenter(pre);
355             pre.setOsservatore(oss);
356            ViewLog.writeInLog(" messo link osservatore presenter"+"\n");
357       }
358       
359       /**
360        * Creazione di un link fra un Osservatore ed un esecutore
361        * @param oss
362        * @param ese
363        */

364       private void linkEseOss(Esecutore ese, Osservatore oss){
365          Cve.errLog.debug("");
366            // prendo parte osservabile esecutore
367
ObservableCve obEse=ese.getObservable();
368             obEse.addObserver(oss);
369             //Object ob=new Object();
370
//obEse.setDate(ob);
371
// comunico osservatore l'esecutore a cui e' collegato
372
oss.setEsecutore(ese);
373                 // ((Esecutore)ese).addObserver((Osservatore)oss);
374
ViewLog.writeInLog(" messo link osservatore esecutore"+"\n");
375       }
376       
377       /**
378        * Creazione di una toolbar
379        * @param tool
380        * @param pre
381        */

382     private CveToolBar makeTool(DescrCveToolBar tool,Presenter pre){
383         // a partire dal descrittore devo creare toolbar
384
Cve.errLog.debug("");
385         String JavaDoc act,icon,tip;
386          ImageIcon iconI;
387          CveButton cveB;
388          CveToolBar cveTB= new CveToolBar();
389          // metto in un vettore tutti i descrittori di bottoni
390
Vector toolVec=new Vector((Collection)tool.getAllCveB());
391          Iterator itTool=toolVec.iterator();
392          while(itTool.hasNext()){
393             DescrCveButton cveDB=(DescrCveButton)itTool.next();
394              act=cveDB.getAction();
395              icon=cveDB.getIcon();
396              tip=cveDB.getTip();
397              cveB=new CveButton();
398              ViewLog.writeInLog(" Action "+act+ " Icona "+icon+" Tip"+tip+"\n");
399              if (cveDB.getAction()!=null){
400                  Action act1=creaAzione(act,pre);
401                   cveB.setAction(act1);
402              }
403              if (cveDB.getIcon()!=null){
404                  iconI=new ImageIcon((String JavaDoc)cveDB.getIcon());
405               cveB.setIcon(iconI);
406              }
407              if (cveDB.getTip()!=null){
408              }
409                // aggiungo bottone creato alla toolbar
410
cveTB.add(cveB);
411          }
412          return cveTB;
413       }
414       
415       /**
416        * Creazione di un menu cve composto da tutti gli item presenti
417        * nel descrittore (associati ad azioni)
418        * @param menu : descrittore di un menu
419        * @param pre
420        */

421       private CveMenu makeMenu(DescrCveMenu menu,Presenter pre){
422         // a partire dal descrittore devo creare menu
423
Cve.errLog.debug("");
424         String JavaDoc act,icon,name,nameItem;
425          ImageIcon iconI;
426          CveItem cveI;
427          CveMenu cveM=null;
428          if (menu!=null){
429             name=menu.getName();
430             ViewLog.writeInLog(" il nome del menu e' "+ name +"\n");
431             if (name!=null)
432                cveM= new CveMenu(name);
433             else
434             cveM= new CveMenu();
435          }
436          if (menu!=null && menu.getAll()!=null){
437             // metto in un vettore tutti i descrittori di item
438
Vector itemVec=new Vector((Collection)menu.getAll());
439             Iterator itMenu=itemVec.iterator();
440             while(itMenu.hasNext()){
441              // creo gli item
442
DescrCveItem cveDB=(DescrCveItem)itMenu.next();
443                act=cveDB.getAction();
444                //icon=cveDB.getIcon();
445
nameItem=cveDB.getName();
446                cveI=new CveItem();
447                // prendo i valori dei descrittori relativi agli item
448
if (cveDB.getAction()!=null){
449                  Action act1=creaAzione(act,pre);
450                   cveI.setAction(act1);
451                }
452                if (cveDB.getIcon()!=null){
453                  iconI=new ImageIcon((String JavaDoc)cveDB.getIcon());
454               cveI.setIcon(iconI);
455                }
456                if (cveDB.getName()!=null){
457               cveI.setText(cveDB.getName());
458                }
459                // aggiungo item creato al menu
460
cveM.add(cveI);
461             }
462          }
463          return cveM;
464       }
465       
466       /**
467        * Data la stringa che identifica una azione viene ritornata
468        * l'azione associata
469        * @param act
470        * @param pre
471        */

472       private Action creaAzione(String JavaDoc act,Presenter pre){
473         Cve.errLog.debug("");
474         Field actionField;
475          Class JavaDoc ossC=null;
476         Action actResult=null;
477          Osservatore oss=pre.getOsservatore();
478         ossC = oss.getClass();
479
480       Field[] publicFields = ossC.getFields();
481       for (int i = 0; i < publicFields.length; i++) {
482          String JavaDoc fieldName = publicFields[i].getName();
483          Class JavaDoc typeClass = publicFields[i].getType();
484          String JavaDoc fieldType = typeClass.getName();
485       }
486        // gli elementi devo essere inseriti dal basso all'alto
487
try {
488            // prendo il campo action cercato della classe
489
actionField = ossC.getField(act);
490             // prendo il suo valore dell'istanza oggetto
491
actResult=(Action) actionField.get(oss);
492             //Action actionResult = (Action) actionField.get(r);
493
} catch (NoSuchFieldException JavaDoc e) {
494           Cve.errLog.error(e.toString());
495       } catch (SecurityException JavaDoc e) {
496           Cve.errLog.error(e.toString());
497       } catch (IllegalAccessException JavaDoc e) {
498           Cve.errLog.error(e.toString());
499       }
500          return actResult;
501       
502       }
503       
504     /**
505       * Viene inizializzata una istanza di <code>GruppoCve </code> per
506       * gestire ogni relazione di tipo <code>RelLayerCve</code>
507       *
508       * @param elem: i membri di una realzione intralayer (elementi cve)
509       * @see RelIntralayer
510       */

511    GruppoCve makeGruppoCve(String JavaDoc nome,String JavaDoc tipo,Enumeration elem){
512         Cve.errLog.debug("");
513         GruppoCve gC=new GruppoCve(nome,tipo,elem);
514        // Observer o=(Observer)gC;
515
//addObserver(o); //registro il gruppo come obsever
516
return gC;
517    }
518     
519    void delGruppo(){}
520    
521    /**
522      * Informo tutti gli elementi cve dell'esistenza di un gruppo
523      * che li rigurda. Questo consente agli elementi cve di comunicare
524      * al gruppo, e quindi con agli altri membri della relazione, nuovi
525      * eventi
526      *
527      * @param elem: i membri di una relazione intralayer (baseObject)
528      * nome: nome del gruppo (uguale alla relazione)
529      * refGruppo: reference al gruppo creato
530      * tipo: tipo di elementi cve coinvolti (esecutori,..)
531      *
532      * @see RelIntralayer
533      */

534    void notifyElementCve(String JavaDoc nome,String JavaDoc tipo,Enumeration elem, GruppoCve refGroup){
535        Cve.errLog.debug("");
536        ViewLog.writeInLog(" Informo gli elementi interessati esistenza gruppo"+"\n");
537        if ( elem.hasMoreElements() ){
538             IBaseObject refMemb=(IBaseObject)elem.nextElement();
539             //IBaseObject refMemb=(IBaseObject)memb.getRef();
540
// refMemb e' il membro della relazione
541
refMemb.notifyGroups(nome,tipo,refGroup);
542         }
543    }
544
545 }
546
Popular Tags