raphael 2002/11/07 12:20:33 Added: src/java/org/apache/jetspeed/om/registry/base BaseOrderedRegistry.java LocalRegistry.java Log: Add a new base Registry implementation taht guarantees elements order Revision Changes Path 1.1 jakarta-jetspeed/src/java/org/apache/jetspeed/om/registry/base/BaseOrderedRegistry.java Index: BaseOrderedRegistry.java =================================================================== /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2000-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache Jetspeed" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" or * "Apache Jetspeed", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ package org.apache.jetspeed.om.registry.base; import org.apache.jetspeed.om.registry.RegistryEntry; import org.apache.jetspeed.om.registry.InvalidEntryException; import java.util.Map; import java.util.TreeMap; import java.util.List; import java.util.Iterator; import java.util.Enumeration; import java.util.Vector; /** * Provides a basic registry implementation that keep the elements * ordered. * * @author <a href="mailto:raphael@;apache.org">Raphaël Luta</a> * @version $Id: BaseOrderedRegistry.java,v 1.1 2002/11/07 20:20:32 raphael Exp $ */ public class BaseOrderedRegistry implements LocalRegistry { protected static final boolean DEBUG = false; protected List entries = new Vector(); protected Map idx = null; /** @see Registry#getEntryCount */ public int getEntryCount() { return this.entries.size(); } /** @see Registry#getEntry */ public RegistryEntry getEntry( String name ) throws InvalidEntryException { RegistryEntry entry = null; try { if (idx == null) { synchronized (entries) { buildIdx(); } } if (name != null) { synchronized (entries) { Integer pos = ((Integer)idx.get(name)); if (pos == null) { throw new InvalidEntryException( InvalidEntryException.ENTRY_DOES_NOT_EXIST+" "+name ); } entry = (RegistryEntry)entries.get(pos.intValue()) ; } } } catch(Exception e) { // this will happen if for some reasons the index and vector are desynchronized. // before throwing an exception, rebuild the idx to prevent further errors synchronized(entries) { buildIdx(); } throw new InvalidEntryException( InvalidEntryException.ENTRY_DOES_NOT_EXIST+" "+name ); } return entry; } /** @see Registry#setEntry */ public void setEntry( RegistryEntry entry ) throws InvalidEntryException { setLocalEntry( entry ); } /** @see Registry#addEntry */ public void addEntry( RegistryEntry entry ) throws InvalidEntryException { addLocalEntry( entry ); } /** @see Registry#removeEntry */ public void removeEntry( String name ) { removeLocalEntry( name ); } /** @see Registry#removeEntry */ public void removeEntry( RegistryEntry entry ) { removeLocalEntry( entry ); } /** @see Registry#hasEntry */ public boolean hasEntry( String name ) { synchronized (entries) { if (idx == null) { buildIdx(); } } return this.idx.containsKey( name ); } /** @see Registry#getEntries */ public Enumeration getEntries() { Vector v = new Vector(entries); return v.elements(); } /** @see Registry#listEntryNames */ public Iterator listEntryNames() { synchronized (entries) { if (idx == null) { buildIdx(); } } return this.idx.keySet().iterator(); } /** @see Registry#toArray */ public RegistryEntry[] toArray() { RegistryEntry[] array = new RegistryEntry[ entries.size() ]; return (RegistryEntry[])entries.toArray(array); } /** * Creates a new RegistryEntry instance compatible with the current * Registry instance implementation * * @return the newly created RegistryEntry */ public RegistryEntry createEntry() { return new BaseRegistryEntry(); } // RegistryService specific methods /** * This method is used to only set the entry in the local * memory cache of the registry without any coherency check with * persistent storage * * @param entry the RegistryEntry to store */ public void setLocalEntry( RegistryEntry entry ) throws InvalidEntryException { synchronized (entries) { if (idx == null) { buildIdx(); } if ( this.idx.containsKey( entry.getName() ) == false ) { throw new InvalidEntryException( InvalidEntryException.ENTRY_DOES_NOT_EXIST+" "+entry.getName()); } int pos = ((Integer)idx.get(entry.getName())).intValue(); this.entries.set( pos, entry ); } } /** * This method is used to only add the entry in the local * memory cache of the registry without any coherency check with * persistent storage * * @param entry the RegistryEntry to store */ public void addLocalEntry( RegistryEntry entry ) throws InvalidEntryException { synchronized (entries) { if (idx == null) { buildIdx(); } if ( this.idx.containsKey( entry.getName() ) ) { throw new InvalidEntryException( InvalidEntryException.ENTRY_ALREADY_PRESENT ); } int pos = this.entries.size(); this.entries.add( entry ); this.idx.put( entry.getName(), new Integer(pos) ); } } /** * This method is used to only remove the entry from the local * memory cache of the registry without any coherency check with * persistent storage * * @param name the name of the RegistryEntry to remove */ public void removeLocalEntry( String name ) { synchronized(entries) { if (idx == null) { buildIdx(); } if (this.idx.containsKey(name)) { int pos = ((Integer)idx.get(name)).intValue(); this.entries.remove( pos ); buildIdx(); } } } /** * This method is used to only remove the entry from the local * memory cache of the registry without any coherency check with * persistent storage * * @param entry the RegistryEntry to remove */ public void removeLocalEntry( RegistryEntry entry ) { synchronized(entries) { if (entries.remove( entry )) { buildIdx(); } } } /** * Build a lookup index of entries */ private void buildIdx() { Map map = new TreeMap(); for (int i=0; i < entries.size(); i++) { RegistryEntry entry = (RegistryEntry)entries.get(i); map.put( entry.getName(), new Integer(i)); } this.idx = map; } } 1.1 jakarta-jetspeed/src/java/org/apache/jetspeed/om/registry/base/LocalRegistry.java Index: LocalRegistry.java =================================================================== /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2000-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache Jetspeed" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" or * "Apache Jetspeed", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ package org.apache.jetspeed.om.registry.base; import org.apache.jetspeed.om.registry.Registry; import org.apache.jetspeed.om.registry.RegistryEntry; import org.apache.jetspeed.om.registry.InvalidEntryException; /** * This interface declares the methods used by the RegistryService to * set entries within the registry without impacting the persistant state. * * @author <a href="mailto:raphael@;apache.org">Raphaël Luta</a> * @version $Id: LocalRegistry.java,v 1.1 2002/11/07 20:20:32 raphael Exp $ */ public interface LocalRegistry extends Registry { /** * This method is used to only set the entry in the local * memory cache of the registry without any coherency check with * persistent storage * * @param entry the RegistryEntry to store */ public void setLocalEntry( RegistryEntry entry ) throws InvalidEntryException; /** * This method is used to only add the entry in the local * memory cache of the registry without any coherency check with * persistent storage * * @param entry the RegistryEntry to store */ public void addLocalEntry( RegistryEntry entry ) throws InvalidEntryException; /** * This method is used to only remove the entry from the local * memory cache of the registry without any coherency check with * persistent storage * * @param name the name of the RegistryEntry to remove */ public void removeLocalEntry( String name ); /** * This method is used to only remove the entry from the local * memory cache of the registry without any coherency check with * persistent storage * * @param entry the RegistryEntry to remove */ public void removeLocalEntry( RegistryEntry entry ); }
-- To unsubscribe, e-mail: <mailto:jetspeed-dev-unsubscribe@;jakarta.apache.org> For additional commands, e-mail: <mailto:jetspeed-dev-help@;jakarta.apache.org>