/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package Sirius.navigator.resource; import Sirius.navigator.connection.*; import Sirius.navigator.connection.proxy.*; import Sirius.navigator.exception.*; import Sirius.util.image.*; import org.apache.log4j.Logger; import java.io.*; import java.net.*; import java.util.*; import javax.swing.*; /** * The deprecated methods should not be used, because they are obsolete since the migration to the netbeans * internationalisation API. * * @author pascal * @version $Revision$, $Date$ */ public class ResourceManager { //~ Static fields/initializers --------------------------------------------- private static final Logger logger = Logger.getLogger(ResourceManager.class); public static final String VALUE_STRING = "%VALUE%"; // NOI18N public static final String ERROR_STRING = "[ ERROR ]"; // NOI18N public static final char ERROR_MNEMONIC = 'X'; // NOI18N private static ResourceManager manager = null; //~ Instance fields -------------------------------------------------------- private ImageIcon ERROR_ICON = null; private ImageHashMap remoteIconCache = null; private final Hashtable localIconCache; //~ Constructors ----------------------------------------------------------- // private ResourceBundle resourcesBundle; // private ResourceBundle errorcodesBundle; /** * Creates a new instance of ResourceManager. */ private ResourceManager() { logger.info("creating new singleton resource manager instance"); // NOI18N localIconCache = new Hashtable(); ERROR_ICON = getIcon("x.gif"); // NOI18N } //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public static final ResourceManager getManager() { if (manager == null) { manager = new ResourceManager(); } return manager; } /** * DOCUMENT ME! * * @param key DOCUMENT ME! * * @return DOCUMENT ME! */ @Deprecated public String getString(final String key) { logger.error( "The ResourceManager.getString() method was called. This method should not be used.", new Throwable()); // NOI18N return ""; // NOI18N } /** * DOCUMENT ME! * * @param key DOCUMENT ME! * * @return DOCUMENT ME! */ @Deprecated public char getMnemonic(final String key) { logger.error( "The ResourceManager.getMnemonic() method was called. This method should not be used.", new Throwable()); // NOI18N return 'a'; } // buttons ....................................................... /** * DOCUMENT ME! * * @param key DOCUMENT ME! * * @return DOCUMENT ME! * * @deprecated DOCUMENT ME! */ public String getButtonText(final String key) { return this.getString("button." + key); // NOI18N } /** * DOCUMENT ME! * * @param key DOCUMENT ME! * * @return DOCUMENT ME! * * @deprecated DOCUMENT ME! */ public char getButtonMnemonic(final String key) { return this.getMnemonic("button." + key + ".mnemonic"); // NOI18N // return this.getString("button." + key + ".mnemonic").charAt(0); } /** * DOCUMENT ME! * * @param key DOCUMENT ME! * * @return DOCUMENT ME! * * @deprecated DOCUMENT ME! */ public String getButtonTooltip(final String key) { return this.getString("button." + key + ".tooltip"); // NOI18N } /** * DOCUMENT ME! * * @param key DOCUMENT ME! * * @return DOCUMENT ME! * * @deprecated DOCUMENT ME! */ public Icon getButtonIcon(final String key) { return this.getIcon(this.getString("button." + key + ".icon")); // NOI18N } // menu + menu items ....................................................... /** * DOCUMENT ME! * * @param key DOCUMENT ME! * * @return DOCUMENT ME! * * @deprecated DOCUMENT ME! */ public String getMenuText(final String key) { return this.getString("menu." + key); // NOI18N } /** * DOCUMENT ME! * * @param key DOCUMENT ME! * * @return DOCUMENT ME! * * @deprecated DOCUMENT ME! */ public char getMenuMnemonic(final String key) { return this.getMnemonic("menu." + key + ".mnemonic"); // NOI18N // return this.getString("menu." + key + ".mnemonic").charAt(0); } /** * DOCUMENT ME! * * @param key DOCUMENT ME! * * @return DOCUMENT ME! * * @deprecated DOCUMENT ME! */ public String getMenuTooltip(final String key) { return this.getString("menu." + key + ".tooltip"); // NOI18N } /** * DOCUMENT ME! * * @param key DOCUMENT ME! * * @return DOCUMENT ME! * * @deprecated DOCUMENT ME! */ public Icon getMenuIcon(final String key) { return this.getIcon(this.getString("menu." + key + ".icon")); // NOI18N } /** * DOCUMENT ME! * * @param key DOCUMENT ME! * * @return DOCUMENT ME! */ @Deprecated // Edit mbrill : Key Format Annahmen wurden entfernt um die Konsistenz der I18N Keys zu wahren public KeyStroke getMenuAccelerator(final String key) { return KeyStroke.getKeyStroke(this.getString(key)); } // exceptions ============================================================== /** * DOCUMENT ME! * * @param errorcode DOCUMENT ME! * * @return DOCUMENT ME! * * @deprecated DOCUMENT ME! */ public String getExceptionName(final String errorcode) { return this.getException(errorcode + ".name"); // NOI18N } /** * DOCUMENT ME! * * @param errorcode DOCUMENT ME! * * @return DOCUMENT ME! * * @deprecated DOCUMENT ME! */ public String getExceptionMessage(final String errorcode) { return this.getException(errorcode + ".message"); // NOI18N } /** * DOCUMENT ME! * * @param errorcode DOCUMENT ME! * @param values DOCUMENT ME! * * @return DOCUMENT ME! * * @deprecated DOCUMENT ME! */ public String getExceptionMessage(final String errorcode, final String[] values) { String message = this.getExceptionMessage(errorcode); if ((values != null) && !message.equals(ERROR_STRING)) { for (int i = 0; i < values.length; i++) { message = message.replaceFirst(VALUE_STRING, values[i]); } } return message; } /** * DOCUMENT ME! * * @param errorcode DOCUMENT ME! * * @return DOCUMENT ME! */ private String getException(final String errorcode) { logger.error( "The ResourceManager.getException() method was called. This method should not be used.", new Throwable()); // NOI18N return ""; // NOI18N } /** * ICON ====================================================================. * * @param name DOCUMENT ME! * * @return DOCUMENT ME! */ public ImageIcon getIcon(final String name) { if (logger.isDebugEnabled()) { logger.debug("searching icon '" + name + "'"); // NOI18N } if (remoteIconCache == null) { if (SessionManager.isConnected()) { logger.info("initializing remote icon cache"); // NOI18N try { remoteIconCache = SessionManager.getProxy().getDefaultIcons(); if (logger.isDebugEnabled()) { logger.debug("remote icons cached: "); // NOI18N final Iterator keys = remoteIconCache.keySet().iterator(); while (keys.hasNext()) { if (logger.isDebugEnabled()) { logger.debug(keys.next()); } } } } catch (ConnectionException cexp) { logger.error("could not initializing remote icon cache: '" + cexp.getMessage() + "'"); // NOI18N } } } if ((remoteIconCache != null) && remoteIconCache.containsKey(name)) { if (logger.isDebugEnabled()) { logger.debug("icon '" + name + "' found in remote icon cache"); // NOI18N } return remoteIconCache.get(name); } else if (localIconCache.containsKey(name)) { if (logger.isDebugEnabled()) { logger.debug("icon '" + name + "' found in local icon cache"); // NOI18N } return (ImageIcon)localIconCache.get(name); } else { final ImageIcon icon = findIcon(name); if (icon != null) { if (logger.isDebugEnabled()) { logger.debug("icon '" + name + "' added to local icon cache"); // NOI18N } localIconCache.put(name, icon); return icon; } else { logger.error("!!!could not find icon !!! '" + name + "'"); // NOI18N return ERROR_ICON; } } } /** * DOCUMENT ME! * * @param name DOCUMENT ME! * * @return DOCUMENT ME! */ private ImageIcon findIcon(final String name) { try { final URL iconURL = this.getClass().getResource("img/" + name); // NOI18N if (iconURL != null) { return new ImageIcon(iconURL); } else { return null; } } catch (Exception exp) { logger.error("could not load icon '" + name + "'", exp); // NOI18N return null; } } /** * resources in or in a subdirectory of the navigator's 'resource' directory. The returned resources will be * internationalised. * * @param resourceName DOCUMENT ME! * * @return DOCUMENT ME! * * @throws IOException DOCUMENT ME! */ public InputStream getNavigatorResourceAsStream(final String resourceName) throws IOException { final Iterator<String> it = org.openide.util.NbBundle.getLocalizingSuffixes(); while (it.hasNext()) { final String suffix = it.next(); String fileExtension = ""; // NOI18N String resourceNameBase = resourceName; final String resourceUri; if (resourceName.lastIndexOf(".") != -1) { // NOI18N fileExtension = resourceName.substring(resourceName.lastIndexOf(".")); // NOI18N resourceNameBase = resourceName.substring(0, resourceName.lastIndexOf(".")); // NOI18N } resourceUri = PropertyManager.getManager().getBasePath() + "res/" + resourceNameBase + suffix + fileExtension; // NOI18N try { if (logger.isDebugEnabled()) { logger.debug("loading navigator resource '" + resourceUri + "'"); // NOI18N } return this.getResourceAsStream(resourceUri); // NOI18N } catch (IOException ioexp) { logger.warn("Resource with the uri '" + resourceUri + "' not found"); // NOI18N final String altResourceName = resourceNameBase + suffix + fileExtension; if (logger.isDebugEnabled()) { logger.debug("loading navigator resource '" + this.getClass().getPackage().getName() + "." + altResourceName + "'"); // NOI18N } final InputStream is = this.getClass().getResourceAsStream(altResourceName); if (is != null) { return is; } else { logger.warn("Resource with name '" + altResourceName + "' not found"); // NOI18N } } } try { if (logger.isDebugEnabled()) { logger.debug("loading navigator resource '" + PropertyManager.getManager().getBasePath() + "res/" + resourceName + "'"); // NOI18N } return this.getResourceAsStream(PropertyManager.getManager().getBasePath() + "res/" + resourceName); // NOI18N } catch (IOException ioexp) { if (logger.isDebugEnabled()) { logger.debug("loading navigator resource '" + this.getClass().getPackage().getName() + resourceName + "'"); // NOI18N } return this.getClass().getResourceAsStream(resourceName); } } /** * DOCUMENT ME! * * @param path DOCUMENT ME! * * @return DOCUMENT ME! * * @throws IOException DOCUMENT ME! */ public InputStream getResourceAsStream(final String path) throws IOException { try { final URL url = new URL(path); return url.openStream(); } catch (MalformedURLException uexp) { if (logger.isDebugEnabled()) { logger.debug("no remote url: '" + path + "' loading resource from local filesystem: '" + uexp.getMessage() + "'"); // NOI18N } final File file = new File(path); return new FileInputStream(file); } } /** * DOCUMENT ME! * * @param path DOCUMENT ME! * * @return DOCUMENT ME! */ public URI pathToIURI(final String path) { URL url = null; try { url = new URL(path); // return url.openStream(); } catch (MalformedURLException uexp) { if (logger.isDebugEnabled()) { logger.debug("no valid url: '" + path + "' trying to build url for local filesystem: " + uexp.getMessage()); // NOI18N } try { if (System.getProperty("os.name").toLowerCase().indexOf("windows") != -1) // NOI18N { url = new URL("file:/" + path); // NOI18N } else { url = new URL("file://" + path); // NOI18N } } catch (MalformedURLException exp) { logger.error("could not transform path '" + path + "' to local URL: " + exp.getMessage()); // NOI18N } } if (url != null) { try { return new URI(url.toString()); } catch (URISyntaxException usexp) { logger.error("could not transform path '" + path + "' to URI : " + usexp.getMessage()); // NOI18N } } return null; } /** * DOCUMENT ME! * * @param path DOCUMENT ME! * * @return DOCUMENT ME! */ public String pathToIURIString(final String path) { final URI uri = this.pathToIURI(path); return (uri != null) ? uri.toString() : null; } // test .................................................................... /*public static void main(String args[]) * { try { org.apache.log4j.BasicConfigurator.configure(); * * ResourceManager manager = ResourceManager.getManager(); manager.logger.setLevel(org.apache.log4j.Level.DEBUG); * * JButton jb = new JButton(manager.getButtonText("ok"), manager.getIcon("x.gif")); * jb.setMnemonic(manager.getButtonMnemonic("ok")); jb.setToolTipText(manager.getButtonTooltip("ok")); * * JFrame jf = new JFrame("ResourceManager"); jf.setIconImage(manager.getIcon("x.gif").getImage()); * jf.getContentPane().add(jb); jf.setSize(300,200); jf.setVisible(true); * * System.out.println(manager.pathToIURI("D:\\work\\web\\Sirius\\Navigator\\plugins/plugin.xsd")); } * catch(Throwable t) { t.printStackTrace(); }}*/ }