1 14 package org.compiere.util; 15 16 import java.sql.*; 17 import java.util.*; 18 import java.text.*; 19 import java.io.*; 20 21 import org.compiere.Compiere; 22 23 29 public final class Msg 30 { 31 32 private static final int MAP_SIZE = 750; 33 34 private static final String SEPARATOR = Env.NL + Env.NL; 35 36 37 private static Msg s_msg = null; 38 39 40 private static Logger s_log = Logger.getCLogger (Msg.class); 41 42 46 private static Msg get() 47 { 48 if (s_msg == null) 49 s_msg = new Msg(); 50 return s_msg; 51 } 53 54 55 58 private Msg() 59 { 60 } 62 63 private CCache m_languages = new CCache("msg_lang", 2); 64 65 70 private CCache getMsgMap (String ad_language) 71 { 72 String AD_Language = ad_language; 73 if (AD_Language == null || AD_Language.length() == 0) 74 AD_Language = Language.getBaseAD_Language(); 75 CCache retValue = (CCache)m_languages.get(AD_Language); 77 if (retValue != null) 78 return retValue; 79 80 retValue = initMsg(AD_Language); 82 if (retValue != null) 83 { 84 m_languages.put(AD_Language, retValue); 85 return retValue; 86 } 87 return retValue; 88 } 90 91 96 private CCache initMsg (String AD_Language) 97 { 98 CCache msg = new CCache ("msg", MAP_SIZE); 99 if (!DB.isConnected()) 101 { 102 s_log.error("initMsg - no DB Connection"); 103 return null; 104 } 105 try 106 { 107 PreparedStatement pstmt = null; 108 if (AD_Language == null || AD_Language.length() == 0 || Env.isBaseLanguage(AD_Language, "AD_Language")) 109 pstmt = DB.prepareStatement("SELECT Value, MsgText, MsgTip FROM AD_Message"); 110 else 111 { 112 pstmt = DB.prepareStatement("SELECT m.Value, t.MsgText, t.MsgTip " 113 + "FROM AD_Message_Trl t, AD_Message m " 114 + "WHERE m.AD_Message_ID=t.AD_Message_ID" 115 + " AND t.AD_Language=?"); 116 pstmt.setString(1, AD_Language); 117 } 118 ResultSet rs = pstmt.executeQuery(); 119 120 while (rs.next()) 122 { 123 String AD_Message = rs.getString(1); 124 StringBuffer MsgText = new StringBuffer (); 125 MsgText.append(rs.getString(2)); 126 String MsgTip = rs.getString(3); 127 if (MsgTip != null) MsgText.append(" ").append(SEPARATOR).append(MsgTip); 130 msg.put(AD_Message, MsgText.toString()); 131 } 132 133 rs.close(); 134 pstmt.close(); 135 } 136 catch (SQLException e) 137 { 138 s_log.error("initMsg", e); 139 return null; 140 } 141 if (msg.size() < 100) 143 { 144 s_log.error("initMsg - Too few (" + msg.size() + ") Records found for " + AD_Language); 145 return null; 146 } 147 s_log.info("initMsg records=" + msg.size() + " - " + AD_Language); 148 return msg; 149 } 151 154 public void reset() 155 { 156 if (m_languages == null) 157 return; 158 159 Iterator iterator = m_languages.values().iterator(); 161 while (iterator.hasNext()) 162 { 163 HashMap hm = (HashMap)iterator.next(); 164 hm.clear(); 165 } 166 m_languages.clear(); 167 } 169 173 public String [] getLanguages() 174 { 175 if (m_languages == null) 176 return null; 177 String [] retValue = new String [m_languages.size()]; 178 m_languages.keySet().toArray(retValue); 179 return retValue; 180 } 182 187 public boolean isLoaded (String language) 188 { 189 if (m_languages == null) 190 return false; 191 return m_languages.containsKey(language); 192 } 194 200 private String lookup (String AD_Language, String text) 201 { 202 if (text == null) 203 return null; 204 if (AD_Language == null || AD_Language.length() == 0) 205 return text; 206 if (text.equals("/") || text.equals("\\")) 208 return File.separator; 209 if (text.equals(";") || text.equals(":")) 210 return File.pathSeparator; 211 if (text.equals("COMPIERE_HOME")) 212 return Compiere.getCompiereHome(); 213 if (text.equals("bat") || text.equals("sh")) 214 { 215 if (System.getProperty("os.name").startsWith("Win")) 216 return "bat"; 217 return "sh"; 218 } 219 if (text.equals("CopyRight")) 220 return Compiere.COPYRIGHT; 221 HashMap langMap = getMsgMap(AD_Language); 223 if (langMap == null) 224 return text; 225 return (String )langMap.get(text); 226 } 228 229 230 236 public static String getMsg (String ad_language, String AD_Message) 237 { 238 if (AD_Message == null || AD_Message.length() == 0) 239 return ""; 240 String AD_Language = ad_language; 242 if (AD_Language == null || AD_Language.length() == 0) 243 AD_Language = Language.getBaseAD_Language(); 244 String retStr = get().lookup (AD_Language, AD_Message); 246 if (retStr == null || retStr.length() == 0) 248 { 249 if (Log.isTraceLevel(Log.l6_Database)) 250 { 251 s_log.error("getMsg - NOT found: " + AD_Message); 252 } 254 return AD_Message; 255 } 256 257 return retStr; 258 } 260 266 public static String getMsg (Properties ctx, String AD_Message) 267 { 268 return getMsg (Env.getAD_Language(ctx), AD_Message); 269 } 271 277 public static String getMsg (Language language, String AD_Message) 278 { 279 return getMsg (language.getAD_Language(), AD_Message); 280 } 282 289 public static String getMsg (String ad_language, String AD_Message, boolean getText) 290 { 291 String retStr = getMsg (ad_language, AD_Message); 292 int pos = retStr.indexOf(SEPARATOR); 293 if (pos == -1) 295 { 296 if (getText) 297 return retStr; 298 else 299 return ""; 300 } 301 else { 303 if (getText) 304 retStr = retStr.substring (0, pos); 305 else 306 { 307 int start = pos + SEPARATOR.length(); 308 int end = retStr.length(); 309 retStr = retStr.substring (start); 310 } 311 } 312 return retStr; 313 } 315 322 public static String getMsg (Properties ctx, String AD_Message, boolean getText) 323 { 324 return getMsg (Env.getAD_Language(ctx), AD_Message, getText); 325 } 327 334 public static String getMsg (Language language, String AD_Message, boolean getText) 335 { 336 return getMsg (language.getAD_Language(), AD_Message, getText); 337 } 339 347 public static String getMsg(Properties ctx, String AD_Message, Object [] args) 348 { 349 return getMsg (Env.getAD_Language(ctx), AD_Message, args); 350 } 352 360 public static String getMsg(Language language, String AD_Message, Object [] args) 361 { 362 return getMsg (language.getAD_Language(), AD_Message, args); 363 } 365 373 public static String getMsg (String ad_language, String AD_Message, Object [] args) 374 { 375 String retStr = getMsg(ad_language, AD_Message); 376 retStr = MessageFormat.format(retStr, args); return retStr; 378 } 380 381 382 388 public static String getAmtInWords (Language language, String amount) 389 { 390 if (amount == null || language == null) 391 return amount; 392 StringBuffer sb = new StringBuffer (); 394 int pos = amount.lastIndexOf('.'); 395 int pos2 = amount.lastIndexOf(','); 396 if (pos2 > pos) 397 pos = pos2; 398 for (int i = 0; i < amount.length(); i++) 399 { 400 if (pos == i) { 402 String cents = amount.substring(i+1); 403 sb.append(' ').append(cents).append("/100"); 404 break; 405 } 406 else 407 { 408 char c = amount.charAt(i); 409 if (c == ',' || c == '.') continue; 411 if (sb.length() > 0) 412 sb.append("*"); 413 sb.append(getMsg(language, String.valueOf(c))); 414 } 415 } 416 return sb.toString(); 417 } 419 420 421 422 429 public static String getElement (String ad_language, String ColumnName, boolean isSOTrx) 430 { 431 if (ColumnName == null || ColumnName.equals("")) 432 return ""; 433 String AD_Language = ad_language; 434 if (AD_Language == null || AD_Language.length() == 0) 435 AD_Language = Language.getBaseAD_Language(); 436 437 String retStr = ""; 439 try 440 { 441 PreparedStatement pstmt = null; 442 try 443 { 444 if (AD_Language == null || AD_Language.length() == 0 || Env.isBaseLanguage(AD_Language, "AD_Element")) 445 pstmt = DB.prepareStatement("SELECT Name, PO_Name FROM AD_Element WHERE UPPER(ColumnName)=?"); 446 else 447 { 448 pstmt = DB.prepareStatement("SELECT t.Name, t.PO_Name FROM AD_Element_Trl t, AD_Element e " 449 + "WHERE t.AD_Element_ID=e.AD_Element_ID AND UPPER(e.ColumnName)=? " 450 + "AND t.AD_Language=?"); 451 pstmt.setString(2, AD_Language); 452 } 453 } 454 catch (Exception e) 455 { 456 return ColumnName; 457 } 458 pstmt.setString(1, ColumnName.toUpperCase()); 459 ResultSet rs = pstmt.executeQuery(); 460 if (rs.next()) 461 { 462 retStr = rs.getString(1); 463 if (!isSOTrx) 464 { 465 String temp = rs.getString(2); 466 if (temp != null && temp.length() > 0) 467 retStr = temp; 468 } 469 } 470 rs.close(); 471 pstmt.close(); 472 } 473 catch (SQLException e) 474 { 475 s_log.error ("getElement", e); 476 return ""; 477 } 478 if (retStr != null) 479 return retStr.trim(); 480 return retStr; 481 } 483 489 public static String getElement (Properties ctx, String ColumnName) 490 { 491 return getElement (Env.getAD_Language(ctx), ColumnName, true); 492 } 494 501 public static String getElement (Properties ctx, String ColumnName, boolean isSOTrx) 502 { 503 return getElement (Env.getAD_Language(ctx), ColumnName, isSOTrx); 504 } 506 507 508 509 520 public static String translate(String ad_language, String text) 521 { 522 if (text == null || text.equals("")) 523 return ""; 524 String AD_Language = ad_language; 525 if (AD_Language == null || AD_Language.length() == 0) 526 AD_Language = Language.getBaseAD_Language(); 527 528 String retStr = get().lookup (AD_Language, text); 530 if (retStr != null) 531 return retStr; 532 533 retStr = getElement(AD_Language, text, true); 535 if (!retStr.equals("")) 536 return retStr.trim(); 537 538 if (!text.startsWith("*") && Log.getTraceLevel() > Log.l6_Database) 540 s_log.warn("translate - NOT found: " + text); 541 return text; 542 } 544 555 public static String translate(Properties ctx, String text) 556 { 557 String s = (String )ctx.get(text); 558 if (s != null && s.length() > 0) 559 return s; 560 return translate (Env.getAD_Language(ctx), text); 561 } 563 573 public static String translate(Language language, String text) 574 { 575 return translate (language.getAD_Language(), text); 576 } 578 584 public static String parseTranslation(Properties ctx, String text) 585 { 586 if (text == null || text.length() == 0) 587 return text; 588 589 String inStr = text; 590 String token; 591 StringBuffer outStr = new StringBuffer (); 592 593 int i = inStr.indexOf("@"); 594 while (i != -1) 595 { 596 outStr.append(inStr.substring(0, i)); inStr = inStr.substring(i+1, inStr.length()); 599 int j = inStr.indexOf("@"); if (j < 0) { 602 inStr = "@" + inStr; 603 break; 604 } 605 606 token = inStr.substring(0, j); 607 outStr.append(translate(ctx, token)); 609 inStr = inStr.substring(j+1, inStr.length()); i = inStr.indexOf("@"); 611 } 612 613 outStr.append(inStr); return outStr.toString(); 615 } 617 } | Popular Tags |