📄 filestorage.java
字号:
available.addElement(available1[i]); } String s=""; int count=0; for(int i=0;i<flist.length;i++) { String cur_lang=flist[i]; Locale loc=new Locale(cur_lang,"",""); Enumeration enum=available.elements(); boolean added=false; while(enum.hasMoreElements()) { Locale l=(Locale)enum.nextElement(); if(l.getLanguage().equals(loc.getLanguage())) { s+=l.toString()+" "; count++; added=true; } } if(!added) { s+=loc.toString()+" "; count++; } } System.err.println(count+" languages initialized."); cs.configRegisterStringKey(this,"LANGUAGES",s,"Languages available in WebMail"); setConfig("LANGUAGES",s); /* Setup list of themes for each language */ for(int j=0;j<flist.length;j++) { File themes=new File(parent.getProperty("webmail.template.path")+System.getProperty("file.separator") +flist[j]+System.getProperty("file.separator")); String[] themelist=themes.list(new FilenameFilter() { public boolean accept(File myf, String s3) { if(myf.isDirectory() && !s3.equals("CVS")) { return true; } else { return false; } } }); String s2=""; for(int k=0;k<themelist.length;k++) { s2+=themelist[k]+" "; } cs.configRegisterStringKey(this,"THEMES_"+flist[j].toUpperCase(),s2,"Themes for language "+flist[j]); setConfig("THEMES_"+flist[j].toUpperCase(),s2); } } /** * Get the String for key and the specified locale. * @param key Identifier for the String * @param locale locale of the String to fetch */ public String getStringResource(String key, Locale locale) { if(resources.get(locale.getLanguage()) != null) { String s = ((ResourceBundle)resources.get(locale.getLanguage())).getString(key); return ((ResourceBundle)resources.get(locale.getLanguage())).getString(key); } else { try { // Modified by exce, start. // ResourceBundle rc=XMLResourceBundle.getBundle("resources",locale,null); System.err.println("Loading locale"); ResourceBundle rc = ResourceBundle.getBundle("org.bulbul.webmail.xmlresource.Resources", locale); // Modified by exce, end. resources.put(locale.getLanguage(),rc); return rc.getString(key); } catch(Exception e) { e.printStackTrace(); return ""; } } } /** * Return the requested Stylesheet, precompiled and fitting to the locale and theme */ public Templates getStylesheet(String name, Locale locale, String theme) throws WebMailException { String key = locale.getLanguage()+"/"+theme; AttributedExpireableCache cache=(AttributedExpireableCache)stylesheet_cache.get(key); if(cache == null) { cache=new AttributedExpireableCache(file_cache_size); stylesheet_cache.put(key,cache); } Templates stylesheet=null; String basepath=getBasePath(locale,theme); File f=new File(basepath+name); if(!f.exists()) { throw new StylesheetNotFoundException("The requested stylesheet "+name+" could not be found (path tried: "+basepath+"."); } if(cache.get(name) != null && ((Long)cache.getAttributes(name)).longValue() >= f.lastModified()) { // Keep statistics :-) cache.hit(); return (Templates)cache.get(name); } else { try { StreamSource msg_xsl=new StreamSource("file://"+basepath+name); TransformerFactory factory=TransformerFactory.newInstance(); stylesheet=factory.newTemplates(msg_xsl); cache.put(name,stylesheet, new Long(f.lastModified())); cache.miss(); } catch(Exception ex) { //System.err.println("Error while compiling stylesheet "+name+", language="+locale.getLanguage()+", theme="+theme+"."); throw new WebMailException("Error while compiling stylesheet "+name+", language="+locale.getLanguage()+", theme="+theme+":\n"+ex.toString()); } return stylesheet; } } /** * Get a binary file for the specified locale. * @param key Identifier for the String * @param locale locale of the String to fetch */ public synchronized byte[] getBinaryFile(String name, Locale locale, String theme) throws BinaryNotFoundException { String key = locale.getLanguage()+"/"+theme; AttributedExpireableCache cache=(AttributedExpireableCache)binary_cache.get(key); if(cache == null) { cache=new AttributedExpireableCache(file_cache_size); binary_cache.put(key,cache); } ByteStore bs=null; String basepath=getBasePath(locale,theme); File f=new File(basepath+name); if(!f.exists()) { throw new BinaryNotFoundException("The file "+name+" could not be found!"); } if(cache.get(name) != null && ((Long)cache.getAttributes(name)).longValue() >= f.lastModified()) { // Keep statistics :-) cache.hit(); return ((ByteStore)cache.get(name)).getBytes(); } else { try { bs=ByteStore.getBinaryFromIS(new FileInputStream(f),(int)f.length()); } catch(IOException ex) { ex.printStackTrace(); } cache.put(name,bs,new Long(f.lastModified())); if(bs != null) { return bs.getBytes(); } else { return new byte[1]; } } } public Authenticator getAuthenticator() { return auth; } /** * Send a message to the logging facility. * @param level severity level of the message * @param message the message */ public synchronized void log(int level, String message) { if(logger != null) { logger.log(level,message); } else { System.err.println("LOG("+level+"): "+message); } } /** * Send a message to the logging facility. * @param level severity level of the message * @param message the message */ public synchronized void log(int level, Exception ex) { if(logger != null) { logger.log(level,ex); } else { System.err.println("LOG("+level+"): "); ex.printStackTrace(); } } protected String formatDate(long date) { if(df==null) { TimeZone tz=TimeZone.getDefault(); df=DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.DEFAULT, Locale.getDefault()); df.setTimeZone(tz); } String now=df.format(new Date(date)); return now; } public void shutdown() { logger.shutdown(); } public String getMimeType(String name) { if(mime_types == null) { return super.getMimeType(name); } else { if(name != null) { String type="application/unknown"; Enumeration enum=mime_types.keys(); while(enum.hasMoreElements()) { String s=(String)enum.nextElement(); if(name.toLowerCase().endsWith(s)) { type= (String)mime_types.get(s); } } return type; } else { return "UNKNOWN"; } } } public void notifyConfigurationChange(String key) { log(Storage.LOG_DEBUG,"FileStorage: Configuration change notify for key "+key+"."); System.err.println("- Configuration changed: "); if(key.toUpperCase().startsWith("AUTH")) { initAuth(); } else if(key.toUpperCase().startsWith("MIME")) { initMIME(); } } public String toString() { String s=""; Enumeration enum=stylesheet_cache.keys(); while(enum.hasMoreElements()) { String name=(String)enum.nextElement(); ExpireableCache cache=(ExpireableCache)stylesheet_cache.get(name); s+=" - stylesheet cache for "+name+": Capacity "+cache.getCapacity()+", Usage "+cache.getUsage(); s+=", "+cache.getHits()+" hits, "+cache.getMisses()+" misses\n"; } enum=binary_cache.keys(); while(enum.hasMoreElements()) { String name=(String)enum.nextElement(); ExpireableCache cache=(ExpireableCache)binary_cache.get(name); s+=" - binary cache for "+name+": Capacity "+cache.getCapacity()+", Usage "+cache.getUsage(); s+=", "+cache.getHits()+" hits, "+cache.getMisses()+" misses\n"; } return s; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -