reintroduced StringUtil.regexpReplace
[mir.git] / source / mir / storage / store / ObjectStore.java
index 311c3a9..eba9fdd 100755 (executable)
@@ -1,3 +1,30 @@
+/*
+ * Copyright (C) 2001-2006 The Mir-coders group
+ *
+ * This file is part of Mir.
+ *
+ * Mir is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Mir is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Mir; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * In addition, as a special exception, The Mir-coders gives permission to link
+ * the code of this program with  any library licensed under the Apache Software License,
+ * and distribute linked combinations including the two.  You must obey the
+ * GNU General Public License in all respects for all of the code used other than
+ * the above mentioned libraries.  If you modify this file, you may extend this
+ * exception to your version of the file, but you are not obligated to do so.
+ * If you do not wish to do so, delete this exception statement from your version.
+ */
 package mir.storage.store;
 
 /**
@@ -30,189 +57,199 @@ package mir.storage.store;
  * @version 1.0
  */
 
-import java.util.*;
-import javax.servlet.http.*;
-import javax.servlet.*;
-import mir.misc.Logfile;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.MissingResourceException;
+
+import javax.servlet.http.HttpServletRequest;
+
+import mir.config.MirPropertiesConfiguration;
+import mir.log.LoggerWrapper;
 
 public class ObjectStore {
 
-       private final static ObjectStore    INSTANCE=new ObjectStore();
-       private final static HashMap        containerMap=new HashMap(); // StoreContainerType/StoreContainer
-       private static Logfile              storeLog;
-       private static long                 storeHit=0,storeMiss=0;
-  private ResourceBundle              ostoreConf;
-
-       private ObjectStore() {
-    ostoreConf = ResourceBundle.getBundle("objectstore");
-    if ( ostoreConf == null )
-      System.err.println("FATAL: could not find objectstore.properties");
-       }
-       public static ObjectStore getInstance() { return INSTANCE; }
-
-
-       /**
-        *  Method:       use
-        *  Description:  The ObjectStore tries to find the @see StoreIdentifier sid
-        *                and returns the stored Object.
-        *
-        *  @return       StorableObject is null when no StorableObject for the
-        *                StoreIdentifier sid is found.
-        */
-       public StorableObject use(StoreIdentifier sid) {
-    if (sid!=null ) {
-      StorableObject storeObject=null;
-      StoreContainer stoc = getStoreContainerForSid( sid );
-      if (stoc!=null) storeObject=stoc.use(sid);
-      else System.out.println("Warning: container not found for: " + sid.toString());
-      if (storeObject!=null) {
+  private final static ObjectStore INSTANCE = new ObjectStore();
+  private final static Map containerMap = new HashMap(); // StoreContainerType/StoreContainer
+  private static long storeHit = 0, storeMiss = 0;
+  private MirPropertiesConfiguration configuration;
+  private LoggerWrapper logger;
+
+  private ObjectStore() {
+    logger = new LoggerWrapper("Database.ObjectStore");
+    configuration = MirPropertiesConfiguration.instance();
+  }
+
+  public static ObjectStore getInstance() {
+    return INSTANCE;
+  }
+
+  /**
+   *  Method:       use
+   *  Description:  The ObjectStore tries to find the @see StoreIdentifier sid
+   *                and returns the stored Object.
+   *
+   *  @return       StorableObject is null when no StorableObject for the
+   *                StoreIdentifier sid is found.
+   */
+  public StorableObject use(StoreIdentifier sid) {
+    if (sid != null) {
+      StorableObject storeObject = null;
+      StoreContainer stoc = getStoreContainerForSid(sid);
+      if (stoc != null)
+        storeObject = stoc.use(sid);
+      else
+        logger.warn("container not found for: " + sid.toString());
+      if (storeObject != null) {
         storeHit++;
-                   return storeObject;
+        return storeObject;
+      }
+    }
+    storeMiss++;
+    return null;
+
+  }
+
+  /**
+   *  Method:       add
+   *  Description:  A StoreIdentifier is added to the ObjectStore, if it
+   *                contains a reference to a @see StorableObject.
+   */
+  public void add(StoreIdentifier sid) {
+    if (sid != null && sid.hasReference()) {
+      // find the right StoreContainer for sid
+      StoreContainer stoc = getStoreContainerForSid(sid);
+      if (stoc == null) {
+        // we have to make new StoreContainer
+        StoreContainerType stocType = sid.getStoreContainerType();
+        stoc = new StoreContainer(stocType);
+        containerMap.put(stocType, stoc);
       }
+      stoc.add(sid);
     }
-    storeMiss++; return null;
-
-       }
-
-       /**
-        *  Method:       add
-        *  Description:  A StoreIdentifier is added to the ObjectStore, if it
-        *                contains a reference to a @see StorableObject.
-        */
-       public void add(StoreIdentifier sid) {
-               if ( sid!=null && sid.hasReference() ) {
-                       // find the right StoreContainer for sid
-                       StoreContainer stoc = getStoreContainerForSid(sid);
-                       if (stoc==null) {
-                               // we have to make new StoreContainer
-                               StoreContainerType stocType = sid.getStoreContainerType();
-                               stoc = new StoreContainer(stocType);
-                               containerMap.put(stocType, stoc);
-                       }
-                       stoc.add(sid);
-               }
-       }
-
-       /**
-        *  Method:       invalidate(StorableObject sto)
-        *  Description:  ObjectStore is notified of change of a @see StorableObject
-        *                sto and invalidates all relevant cache entries.
-        */
-
-       public void invalidate(StoreIdentifier sid) {
-               // propagate invalidation to StoreContainer
-               if (sid!=null) {
+  }
+
+  /**
+   *  Method:       invalidate(StorableObject sto)
+   *  Description:  ObjectStore is notified of change of a @see StorableObject
+   *                sto and invalidates all relevant cache entries.
+   */
+
+  public void invalidate(StoreIdentifier sid) {
+    // propagate invalidation to StoreContainer
+    if (sid != null) {
       StoreContainer stoc = getStoreContainerForSid(sid);
       stoc.invalidate(sid);
-               }
-       }
+    }
+  }
 
   /**
-   *  Method:       invalidate(StoreContainerType)
-   *  Description:  serves to invalidate a whole StoreContainer
-   *
-   *  @return
+   * serves to invalidate a whole StoreContainer
    */
   public void invalidate(StoreContainerType stoc_type) {
-    if ( stoc_type != null ) {
+    if (stoc_type != null) {
       StoreContainer stoc = getStoreContainerForStocType(stoc_type);
-      if ( stoc!=null )
+      if (stoc != null)
         stoc.invalidate();
     }
 
   }
 
-       // internal methods for StoreContainer managment
-
-       /**
-        *  Method:       getStoreContainerForSid
-        *  Description:  private method to find the right @see StoreContainer for
-        *                the @see StoreIdentifier sid.
-        *
-        *  @return       StoreContainer is null when no Container is found.
-        */
-       private StoreContainer getStoreContainerForSid(StoreIdentifier sid){
-               // find apropriate container for a specific sid
-               if (sid!=null) {
-                       StoreContainerType stoc_type = sid.getStoreContainerType();
-                       return getStoreContainerForStocType(stoc_type);
-               }
-               return null;
-       }
-
-  private StoreContainer getStoreContainerForStocType(StoreContainerType stoc_type) {
-    if ( stoc_type!=null && containerMap.containsKey(stoc_type) )
-                               return (StoreContainer)containerMap.get(stoc_type);
+  // internal methods for StoreContainer managment
+
+  /**
+   *  Method:       getStoreContainerForSid
+   *  Description:  private method to find the right @see StoreContainer for
+   *                the @see StoreIdentifier sid.
+   *
+   *  @return       StoreContainer is null when no Container is found.
+   */
+  private StoreContainer getStoreContainerForSid(StoreIdentifier sid) {
+    // find apropriate container for a specific sid
+    if (sid != null) {
+      StoreContainerType stoc_type = sid.getStoreContainerType();
+      return getStoreContainerForStocType(stoc_type);
+    }
+    return null;
+  }
+
+  private StoreContainer getStoreContainerForStocType(StoreContainerType
+      stoc_type) {
+    if (stoc_type != null && containerMap.containsKey(stoc_type))
+      return (StoreContainer) containerMap.get(stoc_type);
     return null;
   }
 
-       private boolean has(StoreIdentifier sid) {
-               StoreContainer stoc = getStoreContainerForSid( sid );
-               return ( stoc != null && stoc.has(sid) ) ? true:false;
-       }
+  private boolean has(StoreIdentifier sid) {
+    StoreContainer stoc = getStoreContainerForSid(sid);
+    return (stoc != null && stoc.has(sid)) ? true : false;
+  }
 
   public String getConfProperty(String name) {
-    if (name!=null ) {
-      String returnValue="";
+    if (name != null) {
       try {
-        return ostoreConf.getString(name);
+        return configuration.getString(name);
       }
       catch (MissingResourceException e) {
-        System.err.println("ObjectStore: " + e.toString());
+        logger.error("getConfProperty: " + e.toString());
       }
     }
     return null;
   }
 
-       /**
-        *  Method:       toString()
-        *  Description:  Displays statistical information about the ObjectStore.
-        *                Further information is gathered from all @see StoreContainer
-        *
-        *  @return       String
-        */
-       public String toString() {
-         return toHtml(null);
+  /**
+   *  Method:       toString()
+   *  Description:  Displays statistical information about the ObjectStore.
+       *                Further information is gathered from all @see StoreContainer
+   *
+   *  @return       String
+   */
+  public String toString() {
+    return toHtml(null);
   }
 
   public String toHtml(HttpServletRequest req) {
-    float hitRatio=0;
-    long divisor=storeHit+storeMiss;
-    if (divisor>0) hitRatio=(float)storeHit/(float)divisor;
-    hitRatio*=100;
+    float hitRatio = 0;
+    long divisor = storeHit + storeMiss;
+    if (divisor > 0)
+      hitRatio = (float) storeHit / (float) divisor;
+    hitRatio *= 100;
 
     StringBuffer sb = new StringBuffer("Mir-ObjectStore ");
-               sb.append( ((req!=null) ? html_version():version()) ).append("\n");
-               sb.append("ObjectStore overall hits/misses/ratio: ").append(storeHit);
-               sb.append("/").append(storeMiss).append("/").append(hitRatio);
-               sb.append("%\nCurrently ").append(containerMap.size());
-               sb.append(" StoreContainer in use - listing information:\n");
-
-               // ask container for information
-               StoreContainer currentStoc;
-               for(Iterator it=containerMap.keySet().iterator();it.hasNext();) {
-                       currentStoc=(StoreContainer)containerMap.get(it.next());
-                       sb.append(currentStoc.toHtml(req));
-               }
+    sb.append( ( (req != null) ? html_version() : version())).append("\n");
+    sb.append("ObjectStore overall hits/misses/ratio: ").append(storeHit);
+    sb.append("/").append(storeMiss).append("/").append(hitRatio);
+    sb.append("%\nCurrently ").append(containerMap.size());
+    sb.append(" StoreContainer in use - listing information:\n");
+
+    // ask container for information
+    StoreContainer currentStoc;
+    for (Iterator it = containerMap.keySet().iterator(); it.hasNext(); ) {
+      currentStoc = (StoreContainer) containerMap.get(it.next());
+      sb.append(currentStoc.toHtml(req));
+    }
 
-               return sb.toString();
-       }
+    return sb.toString();
+  }
 
+  /**
+   *  Method:       html_version()
+       *  Description:  returns ObjectStore version as String for HTML representation
+   *
+   *  @return       String
+   */
+  private String html_version() {
+    return "<i>" + version() + "</i>";
+  }
 
   /**
-        *  Method:       html_version()
-        *  Description:  returns ObjectStore version as String for HTML representation
-        *
-        *  @return       String
-        */
-  private String html_version() { return "<i>"+version()+"</i>"; }
-
-       /**
-        *  Method:       version()
-        *  Description:  returns ObjectStore version as String
-        *
-        *  @return       String
-        */
-       private String version() { return "v_sstart3__1.0"; }
+   *  Method:       version()
+   *  Description:  returns ObjectStore version as String
+   *
+   *  @return       String
+   */
+  private String version() {
+    return "v_sstart3__1.0";
+  }
 
 }
\ No newline at end of file