View Javadoc

1   package org.opensync.importexport;
2   
3   import org.opensync.tools.*;
4   import java.util.*;
5   import java.sql.*;
6   import java.io.*;
7   /***
8    * Title:
9    * Description:
10   * Copyright:    Copyright (c) 2001
11   * Company:
12   * @author
13   * @version 1.0
14   * Create THEMES.Xml, Query_xxx.Xml and Mapping_xxx.Xml
15   */
16  
17  public class CreateXmlFiles extends Object {
18  
19    private Hashtable tables;
20    private DbFile dbfile;
21    private DatabaseMetaData dmd;
22    private Connection conn;
23    private ConnectionPool pool;
24    private String m_sMappingDirectory = "";
25  
26  
27    public CreateXmlFiles(ConnectionPool pl,
28                          DbFile db,
29                          String sMappingDirectory) throws SQLException {
30      dbfile = db;
31      tables = db.getParents();
32      pool = pl;
33      conn = pool.getConnection();
34      dmd = conn.getMetaData();
35      m_sMappingDirectory = sMappingDirectory;
36    }
37  
38    public void createThemesXml() throws SQLException,java.io.IOException {
39      String[] tableType;
40      String tabname,isPrimaryKey,type,length;
41      String tabnamePK;
42      ResultSet rsPK,rs;
43      StringBuffer xmlString=new StringBuffer();
44  
45      xmlString.append("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
46      xmlString.append("<!DOCTYPE DICTIONARY SYSTEM \"../THEMES.dtd\">\n");
47      xmlString.append("<DICTIONARY>\n");
48      tableType= new String[1];
49      tableType[0] = "TABLE";
50      // get list of all tables of specified types (visible by this user)
51      rs = dmd.getTables(null, null, "%", tableType);
52      // get the list of the table objects
53      for (; rs.next(); ) {
54         tabname = rs.getString("TABLE_NAME");
55         if (tables!=null && tables.containsKey(tabname)) {
56  
57            Hashtable pk = new Hashtable();
58            rsPK = dmd.getPrimaryKeys(null, null,tabname);
59            // get the list of the table objects
60            //<COLUMN  KeyWord = "UF" Label = "Medical Department No"  TableName = "B_EQ1996" ColumnName ="N_UF" ParentFile = "" KeyParent = "" IsPrimaryKey = "FALSE" TypeField = "C" LengthField = "7" RefThemeNumber = "UNITES"></COLUMN>
61            for (; rsPK.next(); ) {
62             tabnamePK = rsPK.getString(4);
63             pk.put(tabnamePK,tabnamePK);
64            }
65            rsPK.close();
66  
67            xmlString.append("<VIEW KeyWord = \""+tabname+"\" IdParentFile = \""+tabname+"\" Label= \"\" ClassName=\"\" IdRightField = \"\">\n");
68            rsPK = dmd.getColumns(null, null,tabname,null);
69            // get the list of the table objects
70            //<COLUMN  KeyWord = "UF" Label = "Medical Department No"  TableName = "B_EQ1996" ColumnName ="N_UF" ParentFile = "" KeyParent = "" IsPrimaryKey = "FALSE" TypeField = "C" LengthField = "7" RefThemeNumber = "UNITES"></COLUMN>
71            for (; rsPK.next(); ) {
72              isPrimaryKey = "FALSE";
73              type="C";
74              length="1";
75              tabnamePK = rsPK.getString(4);
76              //System.out.println(rsPK.getString(5)+","+rsPK.getString(6)+","+rsPK.getString(7));
77              if (rsPK.getString(6).equals("CHAR") || rsPK.getString(6).equals("VARCHAR2") || rsPK.getString(6).equals("VARCHAR") || rsPK.getString(6).equals("TEXT")) {
78                  type = "C";
79                  length = rsPK.getString(7);
80              }
81              else {
82                  type = "N";
83                  length = "18";
84              }
85              if (pk!=null && pk.containsKey(tabnamePK)) isPrimaryKey = "TRUE";
86  
87              xmlString.append("<COLUMN  KeyWord = \""+tabnamePK+"\"");
88              xmlString.append(" Label = \"\" TableName = \""+tabname+"\"");
89              xmlString.append(" ColumnName =\""+tabnamePK+"\"");
90              xmlString.append(" ParentFile = \"\" KeyParent = \"\" IsPrimaryKey = \""+isPrimaryKey+"\"");
91              xmlString.append(" TypeField = \""+type+"\"");
92              xmlString.append(" LengthField = \""+length+"\" RefThemeNumber = \"\"></COLUMN>\n");
93            }
94            rsPK.close();
95            xmlString.append("</VIEW>\n");
96         }
97      }
98      rs.close();
99      pool.freeConnection(conn);
100     xmlString.append("</DICTIONARY>\n");
101     this.writeIntoFile(xmlString.toString(),"themes.xml");
102   }
103 
104   public void createAllQueryXml() throws SQLException,java.io.IOException {
105     String[] tableType;
106     String tabname,isPrimaryKey,type,length;
107     String tabnamePK;
108     ResultSet rsPK,rs;
109     StringBuffer xmlString;
110 
111     tableType= new String[1];
112     tableType[0] = "TABLE";
113     // get list of all tables of specified types (visible by this user)
114     rs = dmd.getTables(null, null, "%", tableType);
115     // get the list of the table objects
116     for (; rs.next(); ) {
117        tabname = rs.getString("TABLE_NAME");
118        if (tables!=null && tables.containsKey(tabname)) {
119           xmlString=new StringBuffer("");
120           xmlString.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
121           xmlString.append("<!DOCTYPE query SYSTEM \"../query.dtd\">\n");
122           xmlString.append("<query KeyWord = \""+tabname+"\" Mode=\"both\" >\n");
123           xmlString.append("\t\t<Proj>\n");
124           rsPK = dmd.getColumns(null, null,tabname,null);
125           // get the list of the table objects
126           for (; rsPK.next(); ) {
127 
128             tabnamePK = rsPK.getString(4);
129             xmlString.append("\t\t\t<COLUMN  KeyWord = \""+tabnamePK+"\" />\n");
130           }
131           rsPK.close();
132           xmlString.append("\t\t</Proj>\n");
133           xmlString.append("</query>\n");
134           this.writeIntoFile(xmlString.toString(),"query_"+tabname.trim()+".xml");
135        }
136     }
137     rs.close();
138     pool.freeConnection(conn);
139 
140   }
141   public void createAllMappingXml() throws SQLException,java.io.IOException {
142     String[] tableType;
143     String tabname,isPrimaryKey,type,length;
144     String tabnamePK;
145     ResultSet rsPK,rs;
146     StringBuffer xmlString;
147 
148     tableType= new String[1];
149     tableType[0] = "TABLE";
150     // get list of all tables of specified types (visible by this user)
151     rs = dmd.getTables(null, null, "%", tableType);
152     // get the list of the table objects
153     for (; rs.next(); ) {
154        tabname = rs.getString("TABLE_NAME");
155        if (tables!=null && tables.containsKey(tabname)) {
156           xmlString=new StringBuffer("");
157           xmlString.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
158           xmlString.append("<!--<!DOCTYPE Mapping SYSTEM \"../../mapping.dtd\">-->\n");
159           xmlString.append("<mapping>\n");
160 
161           rsPK = dmd.getColumns(null, null,tabname,null);
162           // get the list of the table objects
163           for (; rsPK.next(); ) {
164             xmlString.append("\t<map>\n");
165             tabnamePK = rsPK.getString(4);
166             xmlString.append("\t\t<from column = \""+tabnamePK+"\" />\n");
167             xmlString.append("\t\t<to column = \""+tabnamePK+"\" />\n");
168             xmlString.append("\t</map>\n");
169           }
170           rsPK.close();
171           xmlString.append("</mapping>\n");
172           this.writeIntoFile(xmlString.toString(),"mapping_"+tabname.trim()+".xml");
173        }
174     }
175     rs.close();
176     pool.freeConnection(conn);
177 
178   }
179 
180   public void createAllDescriptorsXml() throws SQLException,java.io.IOException {
181     String[] tableType;
182     String tabname,isPrimaryKey,type,length;
183     String sColumnName;
184     ResultSet rsPK,rs;
185     StringBuffer xmlString;
186     tableType= new String[1];
187     tableType[0] = "TABLE";
188     // get list of all tables of specified types (visible by this user)
189     rs = dmd.getTables(null, null, "%", tableType);
190     // get the list of the table objects
191     for (; rs.next(); ) {
192       tabname = rs.getString("TABLE_NAME");
193       if (tables!=null && tables.containsKey(tabname)) {
194         xmlString=new StringBuffer("");
195         xmlString.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
196         xmlString.append("<!DOCTYPE descriptor SYSTEM \"../template.dtd\">\n");
197         xmlString.append("<descriptor>\n");
198         xmlString.append("\t<settings type=\"delimited\" delimiter=\"|\" skipfirstlines=\"0\" suppressquotes=\"no\" off.width.ok=\"yes\" row.element=\"ROW\" document.element=\"DATA\" trim.columns=\"yes\" linebreak=\"crlf\" pretty.print=\"yes\" starting.offset=\"0\"/>\n");
199         rsPK = dmd.getColumns(null, null,tabname,null);
200         // get the list of the columns for the table object
201         for (; rsPK.next(); ) {
202           sColumnName = rsPK.getString(4);
203           xmlString.append("\t<col name=\""+sColumnName+"\" from=\"\" to=\"\"/>\n");
204         }
205         rsPK.close();
206         xmlString.append("</descriptor>\n");
207         this.writeIntoFile(xmlString.toString(),"descriptor_"+tabname.trim()+".xml");
208       }
209     }
210     rs.close();
211     pool.freeConnection(conn);
212   }
213 
214   public void createConfigSyncXml() throws SQLException,java.io.IOException {
215     String[] tableType;
216     String tabname,isPrimaryKey,type,length;
217     String tabnamePK;
218     ResultSet rsPK,rs;
219     StringBuffer xmlString,xmlSourceString;
220     int cpt;
221 
222     tableType= new String[1];
223     tableType[0] = "TABLE";
224     // get list of all tables of specified types (visible by this user)
225     rs = dmd.getTables(null, null, "%", tableType);
226     // get the list of the table objects
227 
228     // entete config xml
229     xmlString=new StringBuffer("");
230     xmlString.append("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
231     xmlString.append("<!DOCTYPE configuration SYSTEM \"config.dtd\">\n");
232     xmlString.append("<configuration>\n");
233     xmlString.append("\t<sources>\n");
234 
235     // To Source
236     String sToSource      = "SophieDemoDB";
237     xmlString.append("\t\t<source nameId=\""+sToSource+"\">\n");
238 
239     //String sDriver    = "com.sybase.jdbc2.jdbc.SybDriver";
240     //String sUrl       = "jdbc:sybase:Tds:localhost:2638/S9000?charset=utf8";
241     //String sUserid    = "DBA";
242     //String sPassword  = "SQL";
243 
244     //String sDriver    = "oracle.jdbc.driver.OracleDriver";
245     //String sUrl       = "jdbc:oracle:thin:@3.87.19.164:1521:TEST";
246     //String sUserid    = "ASSETPLUS";
247     //String sPassword  = "ASSETPLUS";
248 
249     String sDriver    = "oracle.jdbc.driver.OracleDriver";
250     String sUrl       = "jdbc:oracle:thin:@3.87.19.164:1521:BERG";
251     String sUserid    = "SOPHIE";
252     String sPassword  = "SOFLOG";
253 
254     xmlString.append("\t\t\t<connector   type=\"bd\" \n");
255     xmlString.append("\t\t\t\t\t\t\t\t\t driver=\""+sDriver+"\" \n");
256     xmlString.append("\t\t\t\t\t\t\t\t\t logfile=\"dblog.log\" \n");
257     xmlString.append("\t\t\t\t\t\t\t\t\t url=\""+sUrl+"\" \n");
258     xmlString.append("\t\t\t\t\t\t\t\t\t user=\""+sUserid+"\" \n");
259     xmlString.append("\t\t\t\t\t\t\t\t\t password=\""+sPassword+"\" \n");
260     xmlString.append("\t\t\t\t\t\t\t\t\t initconns=\"5\" \n");
261     xmlString.append("\t\t\t\t\t\t\t\t\t maxconns=\"10\" \n");
262     xmlString.append("\t\t\t\t\t\t\t\t\t logintimeout=\"15\" \n");
263     xmlString.append("\t\t\t\t\t\t\t\t\t loglevel=\"info\" \n");
264     xmlString.append("\t\t\t\t\t\t\t\t\t operator_concat=\"||\" \n");
265     xmlString.append("\t\t\t\t\t\t\t\t\t adapter=\"org.opensync.opensync.server.adapter.BDAdapter\" \n");
266     xmlString.append("\t\t\t\t\t\t\t\t\t urlTablesDescriptor=\""+m_sMappingDirectory+"//tables.xml\" \n");
267     xmlString.append("\t\t\t\t\t\t\t\t\t urlThemesDescriptor=\""+m_sMappingDirectory+"//themes.xml\" />\n");
268     xmlString.append("\t\t\t<return type=\"dumb\" timeout=\"\" unit=\"s\" />\n");
269     for (; rs.next(); ) {
270        tabname = rs.getString("TABLE_NAME");
271        if (tables!=null && tables.containsKey(tabname)) {
272           xmlString.append("\t\t\t<view nameId=\""+tabname+"\" descriptor=\""+m_sMappingDirectory+"//query_"+tabname+".xml\" />\n");
273        }
274     }
275     rs.close();
276     xmlString.append("\t\t</source>\n");
277 
278     // cible
279     //xmlString.append("\t\t<source nameId=\"SOPHIE_CIBLE\">\n");
280     //xmlString.append("\t\t\t<connector type=\"bd\" driver=\"com.sybase.jdbc2.jdbc.SybDriver\" logfile=\"dblog.log\" ");
281     //xmlString.append(" url=\"jdbc:sybase:Tds:localhost:2638/S9000?charset=utf8\" user=\"DBA\" password=\"SQL\" initconns=\"5\" ");
282     //xmlString.append(" maxconns=\"10\" logintimeout=\"15\" loglevel=\"info\" operator_concat=\"||\" ");
283     //xmlString.append(" adapter=\"org.opensync.opensync.server.adapter.BDAdapter\" urlTablesDescriptor=\""+m_sMappingDirectory+"//tables.xml\" urlThemesDescriptor=\""+m_sMappingDirectory+"//themes.xml\" />\n");
284     //xmlString.append("\t\t\t<return type=\"dumb\" timeout=\"\" unit=\"s\" />\n");
285     //rs = dmd.getTables(null, null, "%", tableType);
286     //for (; rs.next(); ) {
287     //   tabname = rs.getString("TABLE_NAME");
288     //   if (tables!=null && tables.containsKey(tabname)) {
289     //      xmlString.append("\t\t\t<view nameId=\""+tabname+"\" descriptor=\""+m_sMappingDirectory+"//query_"+tabname+".xml\" />\n");
290     //   }
291     //}
292     //rs.close();
293     //xmlString.append("\t\t</source>\n");
294 
295     // From Source
296     String sFromSource      = "SophieDemoTextFiles";
297     //String sDataDirectory   = "D://cvs//magellan//src//openSync//resources//etc//data//sophieDemo";
298     String sDataDirectory   = "Q:";
299     //String sDataDirectory   = "c://am//opensync//data";
300     xmlString.append("\t\t<source nameId=\""+sFromSource+"\">\n");
301     xmlString.append("\t\t\t<connector   type=\"file\" \n");
302     xmlString.append("\t\t\t\t\t\t\t\t\t url=\"\" \n");
303     xmlString.append("\t\t\t\t\t\t\t\t\t user=\"anonymous\" \n");
304     xmlString.append("\t\t\t\t\t\t\t\t\t password=\"pswd\" \n");
305     xmlString.append("\t\t\t\t\t\t\t\t\t adapter=\"org.opensync.opensync.server.adapter.TxtFileAdapter\">\n");
306     xmlString.append("\t\t\t\t<protocol name=\"win_file\" folder=\""+sDataDirectory+"\"/>\n");
307     xmlString.append("\t\t\t</connector>\n");
308     xmlString.append("\t\t\t<return type=\"dumb\" timeout=\"\" unit=\"s\" />\n");
309     rs = dmd.getTables(null, null, "%", tableType);
310     for (; rs.next(); ) {
311        tabname = rs.getString("TABLE_NAME");
312        if (tables!=null && tables.containsKey(tabname)) {
313           xmlString.append("\t\t\t<view nameId=\""+tabname+"\" \n");
314           xmlString.append("\t\t\t      descriptor=\""+m_sMappingDirectory+"//descriptor_"+tabname+".xml\" \n");
315           xmlString.append("\t\t\t      file=\"data_"+tabname+".txt\" />\n");
316        }
317     }
318     rs.close();
319     xmlString.append("\t\t</source>\n");
320     //
321     xmlString.append("\t</sources>\n");
322     // synchronizations
323     String sAgendaName    = "SophieDemo";
324     xmlString.append("\t<synchronizations>\n");
325     cpt=0;
326     rs = dmd.getTables(null, null, "%", tableType);
327     for (; rs.next(); ) {
328        tabname = rs.getString("TABLE_NAME");
329        if (tables!=null && tables.containsKey(tabname)) {
330           cpt++;
331           xmlString.append("\t\t<synchronization nameId=\""+sAgendaName+"_synch");
332           xmlString.append(tabname);
333           //xmlString.append(cpt);
334           xmlString.append("\" urlMapping=\""+m_sMappingDirectory+"//mapping_"+tabname+".xml\" >\n");
335           xmlString.append("\t\t\t<from sourceRef=\""+sFromSource+"\" viewRef=\""+tabname+"\" />\n");
336           xmlString.append("\t\t\t<to sourceRef=\""+sToSource+"\" viewRef=\""+tabname+"\" />\n");
337           xmlString.append("\t\t</synchronization>\n");
338        }
339     }
340     rs.close();
341     xmlString.append("\t</synchronizations>\n");
342 
343     // agendas
344     xmlString.append("\t<agendas>\n");
345     xmlString.append("\t\t<agenda name=\""+sAgendaName+"_agenda\">\n");
346     xmlString.append("\t\t\t<!--schedule daysOfWeek=\"2\" time=\"-1:30\" /-->\n");
347     cpt=0;
348     rs = dmd.getTables(null, null, "%", tableType);
349     for (; rs.next(); ) {
350        tabname = rs.getString("TABLE_NAME");
351        if (tables!=null && tables.containsKey(tabname)) {
352           cpt++;
353           //xmlString.append("\t\t\t<task name=\""+sAgendaName+"_task"+cpt+"\" synchronizationRef=\""+sAgendaName+"_synch"+cpt+"\" />\n");
354           xmlString.append("\t\t\t<task name=\""+sAgendaName+"_task"+tabname+"\" synchronizationRef=\""+sAgendaName+"_synch"+tabname+"\" />\n");
355        }
356     }
357     rs.close();
358     xmlString.append("\t\t</agenda>\n");
359     xmlString.append("\t</agendas>\n");
360     xmlString.append("</configuration>\n");
361     this.writeIntoFile(xmlString.toString(),"config.xml");
362     pool.freeConnection(conn);
363 
364   }
365   private void writeIntoFile(String xml, String fileName) throws java.io.IOException {
366 
367         File dstFile;
368 
369         //*****************//
370         //destination file//
371         //*****************//
372 
373         dstFile = new File(fileName);
374         dstFile.createNewFile();
375 
376 
377         //--->> HOW TO WRITE THE STRING "chaine1" IN THE DESTINATION FILE???
378         RandomAccessFile file=new RandomAccessFile(dstFile,"rw");
379         file.seek(file.length());
380         file.writeBytes(xml);
381         //*****************************//
382         //closing the destination file//
383         //*****************************//
384         file.close();
385     }
386 
387 }