KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > openbravo > erpCommon > ad_forms > Translation


1  /******************************************************************************
2   * The contents of this file are subject to the Compiere License Version 1.1
3   * ("License"); You may not use this file except in compliance with the License
4   * You may obtain a copy of the License at http://www.compiere.org/license.html
5   * Software distributed under the License is distributed on an "AS IS" basis,
6   * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
7   * the specific language governing rights and limitations under the License.
8   * The Original Code is Compiere ERP & CRM Business Solution
9   * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc.
10   * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, parts
11   * created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved.
12   * Contributor(s): Openbravo SL
13   * Contributions are Copyright (C) 2001-2006 Openbravo S.L.
14   ******************************************************************************/

15 package org.openbravo.erpCommon.ad_forms;
16
17 import java.io.*;
18 import java.sql.*;
19
20 import org.w3c.dom.*;
21 import javax.xml.parsers.*;
22 import javax.xml.transform.*;
23 import javax.xml.transform.stream.*;
24 import javax.xml.transform.dom.*;
25
26 import org.openbravo.erpCommon.utility.*;
27 import org.openbravo.erpCommon.businessUtility.WindowTabs;
28 import org.openbravo.base.secureApp.HttpSecureAppServlet;
29 import org.openbravo.base.secureApp.VariablesSecureApp;
30 import org.openbravo.xmlEngine.XmlDocument;
31 import javax.servlet.*;
32 import javax.servlet.http.*;
33 //import org.apache.log4j.Category;
34

35 import org.openbravo.erpCommon.utility.ToolBar;
36 import org.openbravo.erpCommon.ad_combos.LanguageComboData;
37 import org.openbravo.erpCommon.ad_combos.ClientComboData;
38
39
40
41
42
43 public class Translation extends HttpSecureAppServlet
44 {
45
46     /** XML Element Tag */
47     public static final String JavaDoc XML_TAG = "compiereTrl";
48     /** XML Attribute Table */
49     public static final String JavaDoc XML_ATTRIBUTE_TABLE = "table";
50     /** XML Attribute Language */
51     public static final String JavaDoc XML_ATTRIBUTE_LANGUAGE = "language";
52
53     /** XML Row Tag */
54     public static final String JavaDoc XML_ROW_TAG = "row";
55     /** XML Row Attribute ID */
56     public static final String JavaDoc XML_ROW_ATTRIBUTE_ID = "id";
57     /** XML Row Attribute Translated */
58     public static final String JavaDoc XML_ROW_ATTRIBUTE_TRANSLATED = "trl";
59
60     /** XML Value Tag */
61     public static final String JavaDoc XML_VALUE_TAG = "value";
62     /** XML Value Column */
63     public static final String JavaDoc XML_VALUE_ATTRIBUTE_COLUMN = "column";
64     /** XML Value Original */
65     public static final String JavaDoc XML_VALUE_ATTRIBUTE_ORIGINAL = "original";
66   
67   public static final String JavaDoc CONTRIBUTORS_FILENAME = "CONTRIBUTORS";
68   public static final String JavaDoc XML_CONTRIB = "Contributors";
69
70     /** Table is centrally maintained */
71     private boolean m_IsCentrallyMaintained = false;
72
73 // private String m_Directory;
74

75   /*public void init (ServletConfig config) {
76     super.init(config);
77     m_Directory = config.getServletContext().getInitParameter("AttachmentDirectory");
78   }*/

79
80
81    public void doPost (HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException {
82     VariablesSecureApp vars = new VariablesSecureApp(request);
83     System.setProperty("javax.xml.transform.TransformerFactory", "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl"); //added for JDK1.5
84
if (vars.commandIn("DEFAULT"))
85     {
86        printPageDataSheet(response, vars);
87     }
88     else if (vars.commandIn("EXPORT")) {
89       String JavaDoc strLang = vars.getStringParameter("language","");
90       String JavaDoc strClient = vars.getStringParameter("client","");
91       if (log4j.isDebugEnabled()) log4j.debug("Lang "+strLang+" Client "+strClient);
92      
93       String JavaDoc strMessage = exportTrl(strLang,strClient, vars);
94       if (log4j.isDebugEnabled()) log4j.debug("message:"+strMessage);
95         vars.setSessionValue("Translation.message", strMessage);
96       response.sendRedirect(strDireccion + request.getServletPath());
97       
98      }
99      else {
100       String JavaDoc strLang = vars.getStringParameter("language","");
101       String JavaDoc strClient = vars.getStringParameter("client","");
102       if (log4j.isDebugEnabled()) log4j.debug("Lang "+strLang+" Client "+strClient);
103
104
105       String JavaDoc strMessage = importTrl(strLang,strClient, vars);
106       if (log4j.isDebugEnabled()) log4j.debug("message:"+strMessage);
107       vars.setSessionValue("Translation.message", strMessage);
108       response.sendRedirect(strDireccion + request.getServletPath());
109
110      }
111   }
112
113
114
115   private String JavaDoc exportTrl(String JavaDoc strLang, String JavaDoc strClient, VariablesSecureApp vars) {
116     String JavaDoc AD_Language = strLang;
117      int AD_Client_ID = Integer.valueOf(strClient);
118
119      if (new File(strFTPDirectory).canWrite()) {
120        if (log4j.isDebugEnabled()) log4j.debug("can write...");
121      } else {
122        log4j.error("Can't write on directory: "+strFTPDirectory);
123        return Utility.messageBD(this, "CannotWriteDirectory", vars.getLanguage())+" "+strFTPDirectory;
124      }
125      
126     (new File(strFTPDirectory+"/lang")).mkdir();
127     String JavaDoc directory = strFTPDirectory+"/lang/"+AD_Language+"/";
128     (new File(directory)).mkdir();
129
130     if (log4j.isDebugEnabled()) log4j.debug("directory "+directory);
131    
132     try{
133       TranslationData[] tables = TranslationData.trlTables(this);
134       for (int i=0; i<tables.length; i++ )
135          exportTrl(directory, AD_Client_ID, AD_Language, tables[i].c);
136       exportContibutors(directory, AD_Language);
137     }catch (Exception JavaDoc e)
138     {
139       log4j.error(e.toString());
140       return Utility.messageBD(this, "Error", vars.getLanguage());
141     }
142     return Utility.messageBD(this, "Success", vars.getLanguage());
143   }
144    
145   private String JavaDoc importTrl(String JavaDoc strLang, String JavaDoc strClient, VariablesSecureApp vars) {
146     String JavaDoc AD_Language = strLang;
147     String JavaDoc directory = strFTPDirectory+"/lang/"+AD_Language+"/";
148     
149      if ((new File(directory).exists())&&(new File(directory).canRead())) {
150        if (log4j.isDebugEnabled()) log4j.debug("can read "+directory);
151      } else {
152        log4j.error("Can't read on directory: "+strFTPDirectory);
153        return Utility.messageBD(this, "CannotReadDirectory", vars.getLanguage())+" "+directory;
154      }
155     
156     int AD_Client_ID = Integer.valueOf(strClient);
157     try{
158       TranslationData[] tables = TranslationData.trlTables(this);
159       for (int i=0; i<tables.length; i++ )
160          importTrl( directory, AD_Client_ID, AD_Language, tables[i].c);
161       importContributors(directory,AD_Language);
162     }catch (Exception JavaDoc e)
163     {
164       log4j.error(e.toString());
165       return Utility.messageBD(this, "Error", vars.getLanguage());
166     }
167     return Utility.messageBD(this, "Success", vars.getLanguage());
168   }
169  
170   private void exportContibutors(String JavaDoc directory, String JavaDoc AD_Language) {
171     String JavaDoc fileName = directory + File.separator + CONTRIBUTORS_FILENAME+"_" + AD_Language + ".xml";
172     File out = new File(fileName);
173     try {
174       DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
175       DocumentBuilder builder = factory.newDocumentBuilder();
176       Document document = builder.newDocument();
177       Element root = document.createElement(XML_CONTRIB);
178       root.setAttribute(XML_ATTRIBUTE_LANGUAGE, AD_Language);
179       document.appendChild(root);
180       root.appendChild(document.createTextNode(TranslationData.selectContributors(this, AD_Language)));
181       DOMSource source = new DOMSource(document);
182       TransformerFactory tFactory = TransformerFactory.newInstance();
183       Transformer transformer = tFactory.newTransformer();
184       // Output
185
out.createNewFile();
186       StreamResult result = new StreamResult(out);
187       // Transform
188
transformer.transform (source, result);
189     } catch (Exception JavaDoc e) {
190             log4j.error("exportTrl", e);
191     }
192   }
193
194   private String JavaDoc exportTrl(String JavaDoc directory, int AD_Client_ID, String JavaDoc AD_Language, String JavaDoc Trl_Table)
195     {
196         String JavaDoc fileName = directory + File.separator + Trl_Table + "_" + AD_Language + ".xml";
197         log4j.info("exportTrl - " + fileName);
198         File out = new File(fileName);
199     Statement st = null;
200     try
201         {
202         boolean isBaseLanguage = (TranslationData.baseLanguage(this, AD_Language).equals("Y"));
203     log4j.info("baseLang "+isBaseLanguage);
204         String JavaDoc tableName = Trl_Table;
205         int pos = tableName.indexOf("_TRL");
206         String JavaDoc Base_Table = Trl_Table.substring(0, pos);
207         if (isBaseLanguage)
208             tableName = Base_Table;
209      log4j.info("table - " + tableName);
210         String JavaDoc keyColumn = Base_Table + "_ID";
211          TranslationData[] trlColumns = getTrlColumns (Base_Table);
212         //
213
StringBuffer JavaDoc sql = null;
214         
215             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
216             // System.out.println(factory.getClass().getName());
217
DocumentBuilder builder = factory.newDocumentBuilder();
218             Document document = builder.newDocument();
219
220
221             // Root
222
Element root = document.createElement(XML_TAG);
223             root.setAttribute(XML_ATTRIBUTE_LANGUAGE, AD_Language);
224             root.setAttribute(XML_ATTRIBUTE_TABLE, Base_Table);
225             document.appendChild(root);
226       log4j.info("exportTrl - kk ");
227             //
228
sql = new StringBuffer JavaDoc ("SELECT ");
229             if (isBaseLanguage)
230                 sql.append("'Y',"); // 1
231
else
232             sql.append("t.IsTranslated,");
233             
234       sql.append("t.").append(keyColumn); // 2
235
//
236
for (int i = 0; i < trlColumns.length; i++)
237                 sql.append(", t.").append(trlColumns[i].c)
238                     .append(",o.").append(trlColumns[i].c).append(" AS ").append(trlColumns[i].c).append("O");
239             //
240
sql.append(" FROM ").append(tableName).append(" t")
241                 .append(" INNER JOIN ").append(Base_Table)
242                 .append(" o ON (t.").append(keyColumn).append("=o.").append(keyColumn).append(")");
243             boolean haveWhere = false;
244             if (!isBaseLanguage)
245             {
246                 sql.append(" WHERE t.AD_Language='"+AD_Language+"'");
247                 haveWhere = true;
248             }
249             if (m_IsCentrallyMaintained)
250             {
251                 sql.append (haveWhere ? " AND " : " WHERE ").append ("o.IsCentrallyMaintained='N'");
252                 haveWhere = true;
253             }
254             if (AD_Client_ID >= 0)
255                 sql.append(haveWhere ? " AND " : " WHERE ").append("o.AD_Client_ID=").append(AD_Client_ID);
256             sql.append(" ORDER BY t.").append(keyColumn);
257             //
258

259       if (log4j.isDebugEnabled()) log4j.debug("SQL:"+sql.toString());
260       st = this.getStatement();
261        if (log4j.isDebugEnabled()) log4j.debug("st");
262 // PreparedStatement pstmt = DB.prepareStatement(sql.toString());
263
/* if (!isBaseLanguage)
264                 st.setString(1, AD_Language);*/

265             ResultSet rs = st.executeQuery(sql.toString());
266       if (log4j.isDebugEnabled()) log4j.debug("rs");
267             int rows = 0;
268             while (rs.next())
269             {
270                 Element row = document.createElement (XML_ROW_TAG);
271                 row.setAttribute(XML_ROW_ATTRIBUTE_ID, String.valueOf(rs.getInt(2))); // KeyColumn
272
row.setAttribute(XML_ROW_ATTRIBUTE_TRANSLATED, rs.getString(1)); // IsTranslated
273
for (int i = 0; i < trlColumns.length; i++)
274                 {
275                     Element value = document.createElement (XML_VALUE_TAG);
276                     value.setAttribute(XML_VALUE_ATTRIBUTE_COLUMN, trlColumns[i].c);
277                     String JavaDoc origString = rs.getString(trlColumns[i].c + "O"); // Original Value
278
if (origString == null)
279                         origString = "";
280                     String JavaDoc valueString = rs.getString(trlColumns[i].c); // Value
281
if (valueString == null)
282                         valueString = "";
283                     value.setAttribute(XML_VALUE_ATTRIBUTE_ORIGINAL, origString);
284                     value.appendChild(document.createTextNode(valueString));
285                     row.appendChild(value);
286                 }
287                 root.appendChild(row);
288                 rows++;
289             }
290             rs.close();
291             releaseStatement(st);
292
293             log4j.info("exportTrl - Records=" + rows + ", DTD=" + document.getDoctype());
294             
295       //
296
DOMSource source = new DOMSource(document);
297             TransformerFactory tFactory = TransformerFactory.newInstance();
298             tFactory.setAttribute("indent-number", new Integer JavaDoc(2));
299             Transformer transformer = tFactory.newTransformer();
300             transformer.setOutputProperty(OutputKeys.INDENT, "yes");
301             // Output
302
out.createNewFile();
303             StreamResult result = new StreamResult(out);
304             // Transform
305
//transformer.transform (source, result);
306
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream (out), "utf-8");
307             transformer.transform (source, new StreamResult(osw));
308         }
309         catch (Exception JavaDoc e)
310         {
311             log4j.error("exportTrl", e);
312         } finally {
313           try {
314             if (st != null) releaseStatement(st);
315           } catch (Exception JavaDoc ignored) {}
316     }
317
318         return "";
319     } // exportTrl
320

321   private String JavaDoc importContributors(String JavaDoc directory, String JavaDoc AD_Language){
322     String JavaDoc fileName = directory + File.separator + CONTRIBUTORS_FILENAME+"_" + AD_Language + ".xml";
323     File in = new File (fileName);
324     if (!in.exists()){
325             String JavaDoc msg = "File does not exist: " + fileName;
326             log4j.error(msg);
327             return msg;
328         }
329     try {
330       TranslationHandler handler = new TranslationHandler(this);
331             SAXParserFactory factory = SAXParserFactory.newInstance();
332             SAXParser parser = factory.newSAXParser();
333             parser.parse(in, handler);
334       return "";
335     } catch (Exception JavaDoc e){
336             log4j.error("importContrib", e);
337             return e.toString();
338         }
339   }
340   
341   private String JavaDoc importTrl(String JavaDoc directory, int AD_Client_ID, String JavaDoc AD_Language, String JavaDoc Trl_Table)
342     {
343         String JavaDoc fileName = directory + File.separator + Trl_Table + "_" + AD_Language + ".xml";
344         log4j.info("importTrl - " + fileName);
345         File in = new File (fileName);
346         if (!in.exists())
347         {
348             String JavaDoc msg = "File does not exist: " + fileName;
349             log4j.error("importTrl - " + msg);
350             return msg;
351         }
352
353         try
354         {
355             TranslationHandler handler = new TranslationHandler(AD_Client_ID, this);
356             SAXParserFactory factory = SAXParserFactory.newInstance();
357         // factory.setValidating(true);
358
SAXParser parser = factory.newSAXParser();
359             parser.parse(in, handler);
360             log4j.info("importTrl - Updated=" + handler.getUpdateCount());
361             //return Msg.getMsg(Env.getCtx(), "Updated") + "=" + handler.getUpdateCount();
362
return "";
363         }
364         catch (Exception JavaDoc e)
365         {
366             log4j.error("importTrl", e);
367             return e.toString();
368         }
369     } // importTrl
370

371 private TranslationData[] getTrlColumns (String JavaDoc Base_Table)
372   {
373         try
374         {
375       m_IsCentrallyMaintained = (TranslationData.centrallyMaintained(this,Base_Table) != "0");
376       m_IsCentrallyMaintained = false; //???
377
}
378         catch (Exception JavaDoc e)
379         {
380             log4j.error("getTrlColumns (IsCentrallyMaintained)", e);
381         }
382
383
384     TranslationData[] list = null;
385
386         try
387         {
388       list = TranslationData.trlColumns(this, Base_Table + "_TRL");
389         }
390         catch (Exception JavaDoc e)
391         {
392             log4j.error("getTrlColumns", e);
393         }
394         return list;
395 }
396
397
398  void printPageDataSheet(HttpServletResponse response, VariablesSecureApp vars)
399     throws IOException, ServletException {
400     if (log4j.isDebugEnabled()) log4j.debug("Output: dataSheet");
401     response.setContentType("text/html; charset=UTF-8");
402     PrintWriter out = response.getWriter();
403     XmlDocument xmlDocument=null;
404
405
406     
407     
408     xmlDocument = xmlEngine.readXmlTemplate("org/openbravo/erpCommon/ad_forms/Translation").createXmlDocument();
409     ToolBar toolbar = new ToolBar(this, vars.getLanguage(), "Translation", false, "", "", "",false, "ad_forms", strReplaceWith, false, true);
410     toolbar.prepareSimpleToolBarTemplate();
411     xmlDocument.setParameter("toolbar", toolbar.toString());
412     try {
413       KeyMap key = new KeyMap(this, vars, "Translation.html");
414       xmlDocument.setParameter("keyMap", key.getActionButtonKeyMaps());
415     } catch (Exception JavaDoc ex) {
416       throw new ServletException(ex);
417     }
418     try {
419       WindowTabs tabs = new WindowTabs(this, vars, "org.openbravo.erpCommon.ad_forms.Translation");
420       xmlDocument.setParameter("parentTabContainer", tabs.parentTabs());
421       xmlDocument.setParameter("mainTabContainer", tabs.mainTabs());
422       xmlDocument.setParameter("childTabContainer", tabs.childTabs());
423       xmlDocument.setParameter("theme", vars.getTheme());
424       NavigationBar nav = new NavigationBar(this, vars.getLanguage(), "Translation.html", classInfo.id, classInfo.type, strReplaceWith, tabs.breadcrumb());
425       xmlDocument.setParameter("navigationBar", nav.toString());
426       LeftTabsBar lBar = new LeftTabsBar(this, vars.getLanguage(), "Translation.html", strReplaceWith);
427       xmlDocument.setParameter("leftTabs", lBar.manualTemplate());
428     } catch (Exception JavaDoc ex) {
429       throw new ServletException(ex);
430     }
431     {
432       OBError myMessage = vars.getMessage("Translation");
433       vars.removeMessage("Translation");
434       if (myMessage!=null) {
435         xmlDocument.setParameter("messageType", myMessage.getType());
436         xmlDocument.setParameter("messageTitle", myMessage.getTitle());
437         xmlDocument.setParameter("messageMessage", myMessage.getMessage());
438       }
439     String JavaDoc strMessage = vars.getSessionValue("Translation.message");
440     if (log4j.isDebugEnabled()) log4j.debug("datasheet message:"+strMessage);
441     vars.removeSessionValue("Translation.message");
442     //if (strMessage!=null && !strMessage.equals(""))
443
//{
444
xmlDocument.setParameter("mensaje", strMessage.equals("")?"":"alert('"+strMessage+"');");
445     //}
446

447     xmlDocument.setParameter("direction", "var baseDirection = \"" + strReplaceWith + "/\";\n");
448     xmlDocument.setParameter("paramLanguage", "LNG_POR_DEFECTO=\"" + vars.getLanguage() + "\";");
449     xmlDocument.setParameter("paramSystem", "0");
450     xmlDocument.setData("structure1", LanguageComboData.select(this));
451  
452     xmlDocument.setData("structureClient", ClientComboData.selectAllClients(this));
453
454     out.println(xmlDocument.print());
455     out.close();
456     }
457   }
458
459
460 } // Translation
461
Popular Tags