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
51 rs = dmd.getTables(null, null, "%", tableType);
52
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
60
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
70
71 for (; rsPK.next(); ) {
72 isPrimaryKey = "FALSE";
73 type="C";
74 length="1";
75 tabnamePK = rsPK.getString(4);
76
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
114 rs = dmd.getTables(null, null, "%", tableType);
115
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
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
151 rs = dmd.getTables(null, null, "%", tableType);
152
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
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
189 rs = dmd.getTables(null, null, "%", tableType);
190
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
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
225 rs = dmd.getTables(null, null, "%", tableType);
226
227
228
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
236 String sToSource = "SophieDemoDB";
237 xmlString.append("\t\t<source nameId=\""+sToSource+"\">\n");
238
239
240
241
242
243
244
245
246
247
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
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296 String sFromSource = "SophieDemoTextFiles";
297
298 String sDataDirectory = "Q:";
299
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
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
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
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
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
371 //*****************//
372
373 dstFile = new File(fileName);
374 dstFile.createNewFile();
375
376
377
378 RandomAccessFile file=new RandomAccessFile(dstFile,"rw");
379 file.seek(file.length());
380 file.writeBytes(xml);
381 //*****************************//
382
383 //*****************************//
384 file.close();
385 }
386
387 }