+/*
+ * Copyright (C) 2001, 2002 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 the com.oreilly.servlet library, any library
+ * licensed under the Apache Software License, The Sun (tm) Java Advanced
+ * Imaging library (JAI), The Sun JIMI library (or with modified versions of
+ * the above that use the same license as the above), 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;
/**
*/
import java.util.*;
-import mir.misc.Logfile;
+import javax.servlet.http.*;
+import mir.misc.*;
public class StoreContainer {
private LinkedList container;
private StoreContainerType stocType;
- private int maxSize=DEFAULT_SIZE;
- private int uniqueId;
+ private int maxSize=DEFAULT_SIZE, uniqueId;
private int addCount=0,removeCount=0,storeOutCount;
private int hitCount=0,missCount=0;
+ private static ObjectStore o_store = ObjectStore.getInstance();
- private StoreContainer() {};
+ // avoid construction without parameters
+ private StoreContainer() {};
public StoreContainer(StoreContainerType stoc_type) {
this.uniqueId=++uniqueCounter;
this.stocType=stoc_type;
this.container=new LinkedList();
+ int defaultSize = stoc_type.getDefaultSize();
+ String confProperty = stoc_type.getConfPrefix()+".DefaultSize";
+ String confedSize = o_store.getConfProperty(confProperty);
+ if ( confedSize!=null ) {
+ this.maxSize = StringUtil.parseInt (confedSize, defaultSize);
+ }
}
public StoreContainer(StoreContainerType stoc_type, int maxSize) {
this.maxSize=maxSize;
}
+
+
public synchronized StorableObject use(StoreIdentifier sid) {
int hit = container.indexOf(sid);
- if (hit>0) {
+ if (hit>=0) {
StoreIdentifier hitSid = (StoreIdentifier)container.get(hit);
if ( hitSid!=null ) {
hitCount++;
* @return String
*/
public String toString() {
+ return toHtml(null);
+ }
+
+ public String toHtml(HttpServletRequest req) {
+ boolean showingContent=false;
float hitRatio=0;
long divisor=hitCount+missCount;
if (divisor>0) hitRatio=(float)hitCount/(float)divisor;
StringBuffer sb = new StringBuffer("StoreContainer id: ");
sb.append(uniqueId).append(" for ");
- sb.append(stocType.toString()).append("\n [current/maximum size: ");
+ sb.append(stocType.toString());
+ if ( req!=null ) {
+ String show = req.getParameter("stoc_show");
+ if ( show!=null && show.equals(""+uniqueId) ) {
+ // show all entries in container
+ sb.append(" [<b>showing</b>]");
+ showingContent=true;
+ }
+ else
+ sb.append(" [<a href=\"?stoc_show="+uniqueId+"\">show</a>]");
+ }
+ sb.append("\n [current/maximum size: ");
sb.append(container.size()).append("/").append(maxSize);
sb.append("]\n [added/stored out/removed: ").append(addCount).append("/");
sb.append(storeOutCount).append("/").append(removeCount).append("]\n [hit/miss/ratio: ");
sb.append(hitCount).append("/").append(missCount).append("/");
sb.append(hitRatio).append("%]\n");
- /** @todo list members ? */
+ if (showingContent) {
+ sb.append(" <b>Container contains following references:</b>\n ");
+ ListIterator it = container.listIterator();
+ while ( it.hasNext() ) {
+ StoreIdentifier sid = (StoreIdentifier)it.next();
+ sb.append(sid.toString()).append("\n ");
+ }
+ sb.append("<b>End of List</b>\n\n");
+
+ }
+
return sb.toString();
}