001    package hep.aida.ref.sql;
002    
003    // Log4J
004    import org.apache.log4j.Logger;
005    
006    // Java
007    import java.util.Properties;
008    import java.net.URL;
009    import java.io.InputStream;
010    import java.io.IOException;
011    
012    /** <code>LoadedProperties</code> is {@link Properties}
013      * capable of being loaded from a Resource.
014      * <p><font color="#880088">
015      * <pre>
016      * $Log: LoadedProperties.java,v $
017      * Revision 1.4  2007/05/23 16:38:44  hrivnac
018      * logical connections for Plotter; better UML
019      *
020      * Revision 1.3  2004/10/27 14:19:03  hrivnac
021      * small bug fixes
022      *
023      * Revision 1.2  2004/10/22 15:32:59  hrivnac
024      * cleaned
025      *
026      * Revision 1.1  2004/10/22 14:22:44  hrivnac
027      * properties loading refactored
028      *
029      * </pre>
030      * </font></p>
031      * @opt attributes
032      * @opt operations
033      * @opt types
034      * @opt visibility
035      * @version $Id: LoadedProperties.java,v 1.4 2007/05/23 16:38:44 hrivnac Exp $
036      * @author <a href="mailto:Julius.Hrivnac@cern.ch">J.Hrivnac</a> */
037    class LoadedProperties extends Properties {
038    
039      /** Load from <code>name</code> in current/top package or (if it doesn't
040        * exists) in <code>place</code> package.
041        * @param name  The name of the Resource (usually with <code>.properties</code>
042        *              extension).
043        * @param place The package to be searched if Resource doesn't exist in current/top
044                       one. */
045      LoadedProperties(String name,
046                       String place) {
047        super();
048        String resource0 = name;
049        String resource  = place + "/" + name;
050        InputStream stream;
051        URL url = getClass().getClassLoader().getResource(resource0);
052        if (url == null) {
053           url = getClass().getClassLoader().getResource(resource);
054           }
055        if (url == null) {
056          log.error("Resource " + name + " can't be found");
057          return;
058          }
059        log.debug("Reading Properties from " + url + " resource");
060        try {
061          stream =  url.openStream();
062          load(stream);
063          }
064        catch (IOException e) {
065          Util.report("Properties can't be loaded from " + url, e);
066          }
067        }
068    
069      /** Load from <code>fullname</code> Resource.
070        * @param fullname  The name of the Resource with its package namespace
071                           (usually with <code>.properties</code> extension). */
072      LoadedProperties(String fullname) {
073        super();
074        InputStream stream;
075        URL url = getClass().getClassLoader().getResource(fullname);
076        if (url == null) {
077          log.error("Resource " + fullname + " can't be found");
078          return;
079          }
080        log.debug("Reading Properties from " + url + " resource");
081        try {
082          stream =  url.openStream();
083          load(stream);
084          }
085        catch (IOException e) {
086          Util.report("Properties can't be loaded from " + url, e);
087          }
088        }
089    
090      /** Logging . */
091      private static Logger log = Logger.getLogger(LoadedProperties.class);
092    
093      }