1 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 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 47 public static final String XML_TAG = "compiereTrl"; 48 49 public static final String XML_ATTRIBUTE_TABLE = "table"; 50 51 public static final String XML_ATTRIBUTE_LANGUAGE = "language"; 52 53 54 public static final String XML_ROW_TAG = "row"; 55 56 public static final String XML_ROW_ATTRIBUTE_ID = "id"; 57 58 public static final String XML_ROW_ATTRIBUTE_TRANSLATED = "trl"; 59 60 61 public static final String XML_VALUE_TAG = "value"; 62 63 public static final String XML_VALUE_ATTRIBUTE_COLUMN = "column"; 64 65 public static final String XML_VALUE_ATTRIBUTE_ORIGINAL = "original"; 66 67 public static final String CONTRIBUTORS_FILENAME = "CONTRIBUTORS"; 68 public static final String XML_CONTRIB = "Contributors"; 69 70 71 private boolean m_IsCentrallyMaintained = false; 72 73 75 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"); if (vars.commandIn("DEFAULT")) 85 { 86 printPageDataSheet(response, vars); 87 } 88 else if (vars.commandIn("EXPORT")) { 89 String strLang = vars.getStringParameter("language",""); 90 String strClient = vars.getStringParameter("client",""); 91 if (log4j.isDebugEnabled()) log4j.debug("Lang "+strLang+" Client "+strClient); 92 93 String 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 strLang = vars.getStringParameter("language",""); 101 String strClient = vars.getStringParameter("client",""); 102 if (log4j.isDebugEnabled()) log4j.debug("Lang "+strLang+" Client "+strClient); 103 104 105 String 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 exportTrl(String strLang, String strClient, VariablesSecureApp vars) { 116 String 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 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 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 importTrl(String strLang, String strClient, VariablesSecureApp vars) { 146 String AD_Language = strLang; 147 String 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 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 directory, String AD_Language) { 171 String 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 out.createNewFile(); 186 StreamResult result = new StreamResult(out); 187 transformer.transform (source, result); 189 } catch (Exception e) { 190 log4j.error("exportTrl", e); 191 } 192 } 193 194 private String exportTrl(String directory, int AD_Client_ID, String AD_Language, String Trl_Table) 195 { 196 String 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 tableName = Trl_Table; 205 int pos = tableName.indexOf("_TRL"); 206 String Base_Table = Trl_Table.substring(0, pos); 207 if (isBaseLanguage) 208 tableName = Base_Table; 209 log4j.info("table - " + tableName); 210 String keyColumn = Base_Table + "_ID"; 211 TranslationData[] trlColumns = getTrlColumns (Base_Table); 212 StringBuffer sql = null; 214 215 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 216 DocumentBuilder builder = factory.newDocumentBuilder(); 218 Document document = builder.newDocument(); 219 220 221 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 sql = new StringBuffer ("SELECT "); 229 if (isBaseLanguage) 230 sql.append("'Y',"); else 232 sql.append("t.IsTranslated,"); 233 234 sql.append("t.").append(keyColumn); 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 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 259 if (log4j.isDebugEnabled()) log4j.debug("SQL:"+sql.toString()); 260 st = this.getStatement(); 261 if (log4j.isDebugEnabled()) log4j.debug("st"); 262 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))); row.setAttribute(XML_ROW_ATTRIBUTE_TRANSLATED, rs.getString(1)); 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 origString = rs.getString(trlColumns[i].c + "O"); if (origString == null) 279 origString = ""; 280 String valueString = rs.getString(trlColumns[i].c); 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 DOMSource source = new DOMSource(document); 297 TransformerFactory tFactory = TransformerFactory.newInstance(); 298 tFactory.setAttribute("indent-number", new Integer (2)); 299 Transformer transformer = tFactory.newTransformer(); 300 transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 301 out.createNewFile(); 303 StreamResult result = new StreamResult(out); 304 OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream (out), "utf-8"); 307 transformer.transform (source, new StreamResult(osw)); 308 } 309 catch (Exception e) 310 { 311 log4j.error("exportTrl", e); 312 } finally { 313 try { 314 if (st != null) releaseStatement(st); 315 } catch (Exception ignored) {} 316 } 317 318 return ""; 319 } 321 private String importContributors(String directory, String AD_Language){ 322 String fileName = directory + File.separator + CONTRIBUTORS_FILENAME+"_" + AD_Language + ".xml"; 323 File in = new File (fileName); 324 if (!in.exists()){ 325 String 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 e){ 336 log4j.error("importContrib", e); 337 return e.toString(); 338 } 339 } 340 341 private String importTrl(String directory, int AD_Client_ID, String AD_Language, String Trl_Table) 342 { 343 String 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 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 SAXParser parser = factory.newSAXParser(); 359 parser.parse(in, handler); 360 log4j.info("importTrl - Updated=" + handler.getUpdateCount()); 361 return ""; 363 } 364 catch (Exception e) 365 { 366 log4j.error("importTrl", e); 367 return e.toString(); 368 } 369 } 371 private TranslationData[] getTrlColumns (String Base_Table) 372 { 373 try 374 { 375 m_IsCentrallyMaintained = (TranslationData.centrallyMaintained(this,Base_Table) != "0"); 376 m_IsCentrallyMaintained = false; } 378 catch (Exception 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 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 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 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 strMessage = vars.getSessionValue("Translation.message"); 440 if (log4j.isDebugEnabled()) log4j.debug("datasheet message:"+strMessage); 441 vars.removeSessionValue("Translation.message"); 442 xmlDocument.setParameter("mensaje", strMessage.equals("")?"":"alert('"+strMessage+"');"); 445 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 } | Popular Tags |