KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > cve > esecutori > servizioEACBuildSemantic > AssociationSem


1 /*
2 * @(#)AssociationSem.java 1.00 09/2003
3 *
4 * @Author Francesco Guerrisi
5 */

6
7 package cve.esecutori.servizioEACBuildSemantic;
8
9 import cve.staticLayout.*;
10
11 import java.io.File JavaDoc;
12 import java.io.IOException JavaDoc;
13 import java.io.*;
14 import java.util.*;
15
16 import org.jdom.*;
17 import org.jdom.Document;
18 import org.jdom.Element;
19 import org.jdom.JDOMException;
20 import org.jdom.input.SAXBuilder;
21 import org.jdom.output.XMLOutputter;
22 import javax.swing.text.html.parser.*;
23
24 /**
25 * Questa classe fornisce i servizi utili per la creazione
26 * del file di associazione regole Sintattiche-Semantiche
27 *
28 */

29 final public class AssociationSem {
30
31    /**
32    * i documenti dom creati da sax relativi alle regole e all'alfabeto
33    */

34    private Document docAlf,docRegSint,docRegSem, docRegAss;
35    private String JavaDoc fileRegSint, fileRegSem, fileRegAss;
36
37    private Element rootRegSint,rootRegSem,rootRegAss;
38    private Element ruleSint, ruleSem, assRule;
39
40    /* ################### METODI PUBLIC ###########################
41    ############################################################ */

42
43    /**
44    * Costruttore Documento XML di Associazione regole Sintattiche-Semantiche
45    *
46    * @param FileRegSint indica il file dove sono contenute le regole Sintattiche
47    * @param FileRegSem indica il file dove sono contenute le regole Semantiche
48    * @param FileRegAss indica il file dove sono contenute le Associazioni
49    *
50    */

51    public AssociationSem(String JavaDoc FileRegSint,String JavaDoc FileRegSem, String JavaDoc FileRegAss)throws java.io.IOException JavaDoc {
52
53       this.fileRegSint = FileRegSint;
54       this.fileRegSem = FileRegSem;
55       this.fileRegAss = FileRegAss;
56
57
58       // costriusco i document docreg docalf sfruttando saxbuilder
59
buildDocument(fileRegSint,fileRegSem,fileRegAss);
60
61       rootRegSint=docRegSint.getRootElement();
62       rootRegSem =docRegSem.getRootElement();
63       rootRegAss =docRegAss.getRootElement();
64
65    }
66
67    /**
68    * Associazione di una Regola Sintattica ed una Semantica
69    *
70    * @param idSint Identificatico regola Sintattica
71    * @param idSem Identificatico regola Semantica
72    *
73    */

74    public void setAssociation(String JavaDoc idSint, String JavaDoc idSem){
75
76       boolean testSelect = true;
77
78       System.out.println(" #E AssociationSem: setAssociation idSint: "+idSint+" idSem: "+idSem);
79
80       //Prelevo Elemento idSint
81
ruleSint = getRule(rootRegSint,idSint);
82
83       if (ruleSint == null){
84          System.out.println(" #E AssociationSem: setAssociation Elemento idSint NON TROVATO!");
85          testSelect = false;
86       }
87
88       //Prelevo Elemento idSem
89
ruleSem = getRule(rootRegSem,idSem);
90
91       if (ruleSem == null){
92          System.out.println(" #E AssociationSem: setAssociation Elemento idSem NON TROVATO!");
93          testSelect = false;
94       }
95
96       if (testSelect){
97          //********Creazione Associazione
98
assRule = new Element("Association");
99
100          //ID
101
setIdAss(assRule);
102          System.out.println ("AssociationSem. Creato ID= " + assRule.getName());
103
104          //Info Regola Sintattica
105
setSintRule(assRule);
106
107          //Info Regola Semantica
108
setSemRule(assRule);
109
110          //*********Fine Creazione Nodo Associazione
111
//Inserisco in coda al file di Associazione
112
rootRegAss.addContent(assRule);
113
114          //Ricreo il File
115
saveFileXml(fileRegAss);
116       }
117    }
118
119    /**
120    * Ritorno file Associazione
121    *
122    * @return String path file Associazione Regole Sintattiche-Semantiche
123    *
124    */

125    public String JavaDoc getFileAss(){
126       return fileRegAss;
127    }
128
129
130    /* ################### METODI PRIVATE ###########################
131    ############################################################ */

132
133
134    /**
135    * Creazione Documenti da file Regole Sintattiche, Semantiche e Associazione
136    *
137    * @param FileRegSint path file Regole Sintattiche (WIPPOG Sent_)
138    * @param FileRegSem path file Regole Semantiche
139    * @param FileRegAss path file Associazione Regole Sintattiche-Semantiche
140    *
141    */

142    private void buildDocument(String JavaDoc FileRegSint,String JavaDoc FileRegSem, String JavaDoc FileRegAss){
143       try {
144          // vanno messi i controlli di correttezza
145
SAXBuilder builder = new SAXBuilder(false);
146
147          docRegSint = builder.build(new File JavaDoc(FileRegSint));
148          docRegSem = builder.build(new File JavaDoc(FileRegSem));
149          docRegAss = builder.build(new File JavaDoc(FileRegAss));
150
151          //System.out.println(" Costruttore : costruiti i due doc (dom)");
152
} catch (JDOMException e) {
153          if (e.getRootCause() != null) {
154             e.getRootCause().printStackTrace();
155          }
156          e.printStackTrace();
157       } catch (Exception JavaDoc e) {
158          e.printStackTrace();
159       }
160    }
161
162    /**
163    * Selezione Element dall'idRule selezionato
164    *
165    * @param root Element Root del file da cui prelevare l'elemento
166    * @param idRule Identificativo Elemento da Prelevare
167    *
168    */

169    private Element getRule(Element root, String JavaDoc idRule){
170
171       List setTransition = root.getChildren("Transition");
172
173       for (int j=0; j<setTransition.size();j++){
174          Element transition=(Element)(setTransition.get(j));
175          List attList = transition.getAttributes();
176
177          //Scorrimento Attributi dell'elemento XML -->trovare "id"
178
//tra i figli di Transition
179
for (int i=0; i<attList.size();i++){
180
181             //Prelevo Elemento
182
Attribute appoAttr = (Attribute)attList.get(i);
183
184             String JavaDoc appoAttrName = appoAttr.getName();
185             appoAttrName = appoAttrName.trim();
186
187             String JavaDoc appoAttrValue = appoAttr.getValue();
188             appoAttrValue = appoAttrValue.trim();
189
190             //System.out.println("Spe getRule - Transizione =" + transition.getName() + " Attrib = "+ appoAttrName + " Value = " + appoAttrValue);
191

192             //Controllo se id
193
if (appoAttrName.equals("id")){
194
195                //Controllo congruità di ricerca
196
if (appoAttrValue.equals(idRule)) return transition;
197             }
198          }
199       }
200       return null;
201    }
202
203    /**
204    * Calcolo id Associazione Regole Sint-Sem
205    *
206    * @param ruleAss Elemento di Associazione REgole a cui impostare l'id
207    *
208    */

209    private void setIdAss(Element ruleAss){
210
211       String JavaDoc appoIdAss, idAss;
212       int appoId, id;
213
214       idAss = "idAss";
215       id = 1;
216
217       //Scorrimento delle Regole di Associazione Presenti
218
List setAssociation = rootRegAss.getChildren("Association");
219       for (int j=0; j<setAssociation.size();j++){
220          Element association=(Element)(setAssociation.get(j));
221
222          List attList = association.getAttributes();
223
224          //Scorrimento Attributi dell'elemento XML -->trovare "id"
225
//tra i figli di Association
226
for (int i=0; i<attList.size();i++){
227
228             //Prelevo Elemento
229
Attribute appoAttr = (Attribute)attList.get(i);
230
231             String JavaDoc appoAttrName = appoAttr.getName();
232             appoAttrName = appoAttrName.trim();
233
234             String JavaDoc appoAttrValue = appoAttr.getValue();
235             appoAttrValue = appoAttrValue.trim();
236
237             //System.out.println("Spe setId - Associazione =" + association.getName() + " Attrib = "+ appoAttrName + " Value = " + appoAttrValue);
238

239             //Controllo se idAss
240
if (appoAttrName.equals("idAss")){
241
242                //Prelevo l'indice
243
appoId = Integer.parseInt(appoAttrValue.substring(5));
244
245                if (appoId >= id){
246                   id = appoId+1;
247                }
248             }
249
250          }
251       }
252
253       //Creo Attributo 'idAss' per Associazione
254
idAss = idAss + id;
255       //System.out.println("Spe setId - Associazione ID =" + idAss);
256

257       ruleAss.addAttribute("idAss",idAss);
258       ruleAss.addAttribute("description","Association n."+id);
259    }
260
261    /**
262    * Metodo Wrapper per la valorizzazione delle informazioni relative
263    * alla regola Sintattica
264    *
265    * @param ruleAss Elemento di Associazione Regole a cui impostare
266    * la regola Sintattica
267    *
268    */

269    private void setSintRule(Element ruleAss){
270
271       //Prelevo l'id
272
String JavaDoc idRule = getIdRule(ruleSint);
273       System.out.println(" #E AssociationSem: setSintRule idSint: "+idRule);
274
275       //Inserisco Elemento Sintattico in Associazione
276
addSintElement(ruleAss,idRule);
277    }
278
279
280    /**
281    * Metodo Wrapper per la valorizzazione delle informazioni relative
282    * alla regola Semantica
283    *
284    * @param ruleAss Elemento di Associazione Regole a cui impostare
285    * la regola Semantica
286    *
287    */

288    private void setSemRule(Element ruleAss){
289
290       //Prelevo l'id
291
String JavaDoc idRule = getIdRule(ruleSem);
292       System.out.println(" #E AssociationSem: setSintRule idSint: "+idRule);
293
294       //Inserisco Elemento Sintattico in Associazione
295
addSemElement(ruleAss,idRule);
296    }
297
298    //***************Informazioni da Regole
299
/**
300    * Ritorno identificativo di una Regola (Element)
301    *
302    * @param Rule Elemento da cui prelevare l'id
303    * @return String Identificativo Regola
304    *
305    */

306    private String JavaDoc getIdRule(Element Rule){
307
308       List attList = Rule.getAttributes();
309
310       //Prelevo Elemento
311
Attribute appoAttr = (Attribute)attList.get(0);
312       String JavaDoc appoAttrName = appoAttr.getName();
313       appoAttrName = appoAttrName.trim();
314       String JavaDoc appoAttrValue = appoAttr.getValue();
315       appoAttrValue = appoAttrValue.trim();
316       //Controllo se id
317
if (appoAttrName.equals("id")){
318          return appoAttrValue;
319       }
320       return null;
321    }
322
323    /**
324    * Inserimento parametri Regola Sintattica in file XML
325    *
326    * @param RuleAss Elemento di Associazione in cui inserire info Regola Sintattica
327    * @param idRule Identificativo Regola Sintattica
328    *
329    */

330    private void addSintElement(Element ruleAss, String JavaDoc idRule){
331
332       //Creo elemento Sintattico
333
Element eleSint = new Element("SyntaxRule");
334       eleSint.addAttribute("idRule",idRule);
335       ruleAss.addContent(eleSint);
336    }
337
338    /**
339    * Inserimento parametri Regola Semantica in file XML
340    *
341    * @param RuleAss Elemento di Associazione in cui inserire info Regola Semantica
342    * @param idRule Identificativo Regola Semantica
343    *
344    */

345    private void addSemElement(Element ruleAss, String JavaDoc idRule){
346
347       //Creo elemento Semantico
348
Element eleSem = new Element("SemanticRule");
349       eleSem.addAttribute("idRule",idRule);
350       ruleAss.addContent(eleSem);
351    }
352
353
354    //****SCRITTURA SU FILE
355

356    /**
357    * Scrittura DOC in file XML
358    *
359    * @param pathFile path del file in cui Scrivere il DOC
360    *
361    */

362    private void saveFileXml(String JavaDoc pathFile) {
363       File JavaDoc fileS = new File JavaDoc(pathFile);
364       try {
365          fileS.createNewFile();
366          FileWriter outS= new FileWriter (fileS);
367          XMLOutputter fmtS = new XMLOutputter(" ",true);
368          String JavaDoc appS=fmtS.outputString(rootRegAss);
369          outS.write(appS);
370          outS.close();
371       }catch( IOException JavaDoc e){
372          System.out.println(" problemi nell'aprire il file Associazione"+"\r\n");
373       }
374    }
375
376    /**
377    * Simulazione del componente di specifica
378    **/

379    public static void main(String JavaDoc[] args) throws java.io.IOException JavaDoc {
380
381       InputStreamReader ir,ir1,ir2;
382       String JavaDoc fileSint="D:/CVE_HOME/VisualLanguage/SpecificheWippog/Sent_PetriLanguage.xml";
383       String JavaDoc fileSem = "D:\\CVE_HOME\\VisualLanguage\\SpecificheWippog\\Sent_PetriLanguageSem.xml";
384       String JavaDoc fileAss = "D:\\CVE_HOME\\VisualLanguage\\SpecificheWippog\\Sent_PetriLanguageSemAss.xml";
385
386       System.out.println("");
387       System.out.println(" SIMULAZIONE ASSOCIAZIONE REGOLE SINT e SEM --> FILE ASSSEM. (AssociationSem.class)");
388       System.out.println("");
389       AssociationSem spe=new AssociationSem(fileSint,fileSem, fileAss);
390       spe.setAssociation("id3","id1");
391    }
392
393 }
Popular Tags