hlship      2004/05/17 12:44:10

  Modified:    framework/src/java/org/apache/hivemind
                        HiveMindMessages.properties HiveMind.java
                        SymbolSourceContribution.java Orderable.java
               framework/src/descriptor/META-INF hivemodule.sdl
               framework/src/test-data/TestRegistryBuilder/META-INF
                        hivemodule.xml
               framework/src/java/org/apache/hivemind/impl
                        RegistryImpl.java
               framework/src/test/hivemind/test/config Symbols.xml
               framework/src/test/hivemind/test TestMisc.java
  Log:
  Change the Orderable interface (and some related configuration points) to use 
dependency ordering (as with interceptors).
  
  Revision  Changes    Path
  1.11      +3 -2      
jakarta-hivemind/framework/src/java/org/apache/hivemind/HiveMindMessages.properties
  
  Index: HiveMindMessages.properties
  ===================================================================
  RCS file: 
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/HiveMindMessages.properties,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- HiveMindMessages.properties       17 May 2004 16:57:46 -0000      1.10
  +++ HiveMindMessages.properties       17 May 2004 19:44:09 -0000      1.11
  @@ -33,12 +33,13 @@
   
   wrong-factory-parameter-count=Service implementation factory {0} expects 
{1,choice,0#no parameters|1#one parameter|1<{1,number,integer} parameters} but 
received {2,choice,0#none|1#one|1<{2,number,integer}}.
   
  -HiveMind.elements-not-orderable=Elements of list {0} do not implement the 
Orderable interface and can not be sorted.
   HiveMind.registry-has-shutdown=The HiveMind Registry has been shutdown.
   
   exception-at-location=Exception at {0}: {1}
   
   unimplemented-method=Class {0} must provide an overridden implementation of 
method {1}().
  +
  +hivemind.symbol-source-contribution=symbol source
   
   # impl package
   
  
  
  
  1.6       +2 -42     
jakarta-hivemind/framework/src/java/org/apache/hivemind/HiveMind.java
  
  Index: HiveMind.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/HiveMind.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- HiveMind.java     13 May 2004 11:04:45 -0000      1.5
  +++ HiveMind.java     17 May 2004 19:44:09 -0000      1.6
  @@ -26,6 +26,7 @@
   import org.apache.commons.logging.Log;
   import org.apache.commons.logging.LogFactory;
   import org.apache.hivemind.internal.Module;
  +import org.apache.hivemind.order.Orderer;
   
   /**
    * Static utility class for HiveMind.
  @@ -130,49 +131,8 @@
           return new 
ApplicationRuntimeException(getMessage("HiveMind.registry-has-shutdown"));
       }
   
  -    /**
  -     * Used to sort elements of a list that implement the
  -     * [EMAIL PROTECTED] Orderable} interface.
  -     */
  -    private static class OrderableSorter implements Comparator
  -    {
  -
  -        public int compare(Object o1, Object o2)
  -        {
  -            Orderable left = (Orderable) o1;
  -            Orderable right = (Orderable) o2;
  -
  -            return left.getOrder() - right.getOrder();
  -        }
  -
  -    }
  -
  -    /**
  -     * Sorts a list of elements implementing the [EMAIL PROTECTED] 
Orderable} interface.
  -     * A copy of the input list is returned, with the elements sorted
  -     * into ascending order.  The returned list is unmodifiable.
  -     * 
  -     */
  -    public static List sortOrderables(List list)
  -    {
  -        if (list == null || list.isEmpty())
  -            return Collections.EMPTY_LIST;
   
  -        List sorted = new ArrayList(list);
   
  -        try
  -        {
  -            Collections.sort(sorted, new OrderableSorter());
  -        }
  -        catch (ClassCastException ex)
  -        {
  -            throw new ApplicationRuntimeException(
  -                format("HiveMind.elements-not-orderable", list),
  -                ex);
  -        }
  -
  -        return Collections.unmodifiableList(sorted);
  -    }
   
       /**
        * Returns a fully qualfied id.  If the id contains a '.', then it
  
  
  
  1.2       +34 -10    
jakarta-hivemind/framework/src/java/org/apache/hivemind/SymbolSourceContribution.java
  
  Index: SymbolSourceContribution.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/SymbolSourceContribution.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SymbolSourceContribution.java     26 Feb 2004 23:07:56 -0000      1.1
  +++ SymbolSourceContribution.java     17 May 2004 19:44:09 -0000      1.2
  @@ -26,26 +26,50 @@
    */
   public class SymbolSourceContribution implements Orderable
   {
  -    private int _order;
  +    private String _name;
  +    private String _precedingNames;
  +    private String _followingNames;
  +
       private SymbolSource _source;
   
  -    public int getOrder()
  +    public SymbolSource getSource()
       {
  -        return _order;
  +        return _source;
       }
   
  -    public SymbolSource getSource()
  +    public void setSource(SymbolSource source)
       {
  -        return _source;
  +        _source = source;
       }
   
  -    public void setOrder(int i)
  +    public String getFollowingNames()
       {
  -        _order = i;
  +        return _followingNames;
       }
   
  -    public void setSource(SymbolSource source)
  +    public String getName()
       {
  -        _source = source;
  +        return _name;
  +    }
  +
  +    public String getPrecedingNames()
  +    {
  +        return _precedingNames;
  +    }
  +
  +    public void setFollowingNames(String string)
  +    {
  +        _followingNames = string;
       }
  +
  +    public void setName(String string)
  +    {
  +        _name = string;
  +    }
  +
  +    public void setPrecedingNames(String string)
  +    {
  +        _precedingNames = string;
  +    }
  +
   }
  
  
  
  1.2       +22 -7     
jakarta-hivemind/framework/src/java/org/apache/hivemind/Orderable.java
  
  Index: Orderable.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/Orderable.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Orderable.java    26 Feb 2004 23:07:56 -0000      1.1
  +++ Orderable.java    17 May 2004 19:44:09 -0000      1.2
  @@ -15,9 +15,9 @@
   package org.apache.hivemind;
   
   /**
  - * Interface typically used by configuration elements that wish to be 
ordered.
  - * Implements an <code>order</code> property that is used to sort elements 
into
  - * a particular order.
  + * Interface typically used by configuration items that wish to be ordered.
  + * Each item must provide a name, and lists: names of items which should 
precede
  + * the item, and names of items to follow.
    * 
    * @author Howard M. Lewis Ship
    * @version $Id$
  @@ -25,8 +25,23 @@
   public interface Orderable
   {
       /**
  -     * Returns the sort order for this element.  Lower numbers are sorted 
first,
  -     * higher numbers are sorted last.
  +     * Returns the name of the item, which is used to establish sort order.
        */
  -    public int getOrder();
  +    public String getName();
  +
  +    /**
  +     * Returns a comma-seperated list of the names of other items. This item 
will precede
  +     * all such items. The special
  +     * value <code>*</code> indicates that the item should precede all items.
  +     * 
  +     * @return the list, the value <code>*</code>, or null
  +     */
  +
  +    public String getFollowingNames();
  +
  +    /**
  +     * As [EMAIL PROTECTED] #getFollowingNames()}, but the identified items 
will precede this item.
  +     */
  +
  +    public String getPrecedingNames();
   }
  
  
  
  1.4       +17 -5     
jakarta-hivemind/framework/src/descriptor/META-INF/hivemodule.sdl
  
  Index: hivemodule.sdl
  ===================================================================
  RCS file: 
/home/cvs/jakarta-hivemind/framework/src/descriptor/META-INF/hivemodule.sdl,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- hivemodule.sdl    17 May 2004 16:57:48 -0000      1.3
  +++ hivemodule.sdl    17 May 2004 19:44:09 -0000      1.4
  @@ -28,9 +28,9 @@
                        {
                                description { "Describes a single source of 
symbol values." }
                
  -                             attribute (name=order)
  +                             attribute (name=name required=true)
                                {
  -                                     description { "A number used to set the 
order in which sources are checked." }
  +                                     description { "A unique name used to 
identify the source, used when ordering the sources." }
                                }
                
                                attribute (name=class)
  @@ -43,10 +43,22 @@
                                        description { "Service configuration id 
for a service which implements the SymbolSource interface." }
                                }
                
  +                             attribute (name=before)
  +                             {
  +                                     description { "A list of the names of 
other sources this source should precede." }
  +                             }
  +                             
  +                             attribute (name=after)
  +                             {
  +                                     description { "A list of the names of 
other sources this source should follow." }
  +                             }
  +             
                                conversion 
(class=org.apache.hivemind.SymbolSourceContribution)
                                {
                                        map (attribute=class property=source 
translator=object)
                                        map (attribute=service-id 
property=source translator=service)
  +                                     map (attribute=before 
property=followingNames)
  +                                     map (attribute=after 
property=precedingNames)
                                }
                        }
                }
  @@ -54,8 +66,8 @@
   
        contribution (configuration-id=SymbolSources)
        {
  -             source (order= 900000 
service-id=ApplicationDefaultsSymbolSource)
  -             source (order=1000000 service-id=FactoryDefaultsSymbolSource)
  +             source (name=hivemind.ApplicationDefaults 
service-id=ApplicationDefaultsSymbolSource)
  +             source (name=hivemind.FactoryDefaults after="*" 
service-id=FactoryDefaultsSymbolSource)
        }
        
        schema (id=Defaults)
  
  
  
  1.5       +3 -8      
jakarta-hivemind/framework/src/test-data/TestRegistryBuilder/META-INF/hivemodule.xml
  
  Index: hivemodule.xml
  ===================================================================
  RCS file: 
/home/cvs/jakarta-hivemind/framework/src/test-data/TestRegistryBuilder/META-INF/hivemodule.xml,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- hivemodule.xml    17 May 2004 16:57:47 -0000      1.4
  +++ hivemodule.xml    17 May 2004 19:44:10 -0000      1.5
  @@ -6,18 +6,13 @@
                <element name="datum">
                        <attribute name="key" required="true"/>
                        <attribute name="value" required="true"/>
  -                     <rules>
  -                             <create-object 
class="hivemind.test.config.impl.Datum"/>
  -                             <read-attribute property="key" attribute="key"/>
  -                             <read-attribute property="value" 
attribute="value"/>
  -                             <invoke-parent method="addElement"/>
  -                     </rules>
  +                     <conversion class="hivemind.test.config.impl.Datum"/>
                </element>
        </schema>
        <contribution configuration-id="Symbols">
                <datum key="wife" value="${wife}"/>
        </contribution>
        <contribution configuration-id="hivemind.SymbolSources">
  -             <source class="hivemind.test.config.impl.MockSymbolSource"/>
  +             <source name="test" before="*" 
class="hivemind.test.config.impl.MockSymbolSource"/>
        </contribution>
   </module>
  
  
  
  1.4       +23 -6     
jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/RegistryImpl.java
  
  Index: RegistryImpl.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/RegistryImpl.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- RegistryImpl.java 17 May 2004 16:57:47 -0000      1.3
  +++ RegistryImpl.java 17 May 2004 19:44:10 -0000      1.4
  @@ -31,6 +31,7 @@
   import org.apache.hivemind.internal.Module;
   import org.apache.hivemind.internal.RegistryInternal;
   import org.apache.hivemind.internal.ServiceModelFactory;
  +import org.apache.hivemind.order.Orderer;
   import org.apache.hivemind.schema.Translator;
   import org.apache.hivemind.schema.rules.ClassTranslator;
   import org.apache.hivemind.util.ToStringBuilder;
  @@ -43,6 +44,7 @@
    */
   public final class RegistryImpl implements RegistryInternal
   {
  +    private static final String SYMBOL_SOURCES = "hivemind.SymbolSources";
       private static final Log LOG = LogFactory.getLog(RegistryImpl.class);
   
       private static final String TRANSLATORS_CONFIGURATION_ID = 
"hivemind.Translators";
  @@ -317,16 +319,31 @@
           if (_variableSources != null)
               return _variableSources;
   
  -        List contributions = 
HiveMind.sortOrderables(getConfiguration("hivemind.SymbolSources"));
  +        List contributions = getConfiguration(SYMBOL_SOURCES);
   
  -        int count = contributions.size();
  +        Orderer o =
  +            new Orderer(
  +                LogFactory.getLog(SYMBOL_SOURCES),
  +                HiveMind.getMessage("hivemind.symbol-source-contribution"));
  +
  +        Iterator i = contributions.iterator();
  +        while (i.hasNext())
  +        {
  +            SymbolSourceContribution c = (SymbolSourceContribution) i.next();
  +
  +            o.add(c, c.getName(), c.getPrecedingNames(), 
c.getFollowingNames());
  +        }
  +
  +        List sources = o.getOrderedObjects();
  +
  +        int count = sources.size();
   
           _variableSources = new SymbolSource[count];
   
  -        for (int i = 0; i < count; i++)
  +        for (int j = 0; j < count; j++)
           {
  -            SymbolSourceContribution c = (SymbolSourceContribution) 
contributions.get(i);
  -            _variableSources[i] = c.getSource();
  +            SymbolSourceContribution c = (SymbolSourceContribution) 
sources.get(j);
  +            _variableSources[j] = c.getSource();
           }
   
           return _variableSources;
  
  
  
  1.5       +3 -8      
jakarta-hivemind/framework/src/test/hivemind/test/config/Symbols.xml
  
  Index: Symbols.xml
  ===================================================================
  RCS file: 
/home/cvs/jakarta-hivemind/framework/src/test/hivemind/test/config/Symbols.xml,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Symbols.xml       17 May 2004 16:57:48 -0000      1.4
  +++ Symbols.xml       17 May 2004 19:44:10 -0000      1.5
  @@ -6,12 +6,7 @@
                <element name="datum">
                        <attribute name="key" required="true"/>
                        <attribute name="value" required="true"/>
  -                     <rules>
  -                             <create-object 
class="hivemind.test.config.impl.Datum"/>
  -                             <read-attribute property="key" attribute="key"/>
  -                             <read-attribute property="value" 
attribute="value"/>
  -                             <invoke-parent method="addElement"/>
  -                     </rules>
  +                     <conversion class="hivemind.test.config.impl.Datum"/>
                </element>
        </schema>
        <contribution configuration-id="Symbols">
  @@ -20,7 +15,7 @@
                <datum key="work" value="${work}"/>
        </contribution>
        <contribution configuration-id="hivemind.SymbolSources">
  -             <source class="hivemind.test.config.impl.MockSymbolSource"/>
  +             <source name="test" before="*" 
class="hivemind.test.config.impl.MockSymbolSource"/>
        </contribution>
        <contribution configuration-id="hivemind.FactoryDefaults">
                <default symbol="dog" value="dino"/>
  
  
  
  1.13      +1 -28     
jakarta-hivemind/framework/src/test/hivemind/test/TestMisc.java
  
  Index: TestMisc.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-hivemind/framework/src/test/hivemind/test/TestMisc.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- TestMisc.java     13 May 2004 11:04:47 -0000      1.12
  +++ TestMisc.java     17 May 2004 19:44:10 -0000      1.13
  @@ -58,33 +58,6 @@
           }
       }
   
  -    public void testSortOrderablesFailure()
  -    {
  -        List l = new ArrayList();
  -        l.add("alpha");
  -        l.add("beta");
  -
  -        try
  -        {
  -            HiveMind.sortOrderables(l);
  -            unreachable();
  -        }
  -        catch (ApplicationRuntimeException ex)
  -        {
  -            assertExceptionSubstring(
  -                ex,
  -                "Elements of list [alpha, beta] do not implement the 
Orderable interface and can not be sorted.");
  -        }
  -    }
  -
  -    public void testSortOrderablesEmpty()
  -    {
  -        List l = new ArrayList();
  -        List o = HiveMind.sortOrderables(l);
  -
  -        assertSame(Collections.EMPTY_LIST, o);
  -    }
  -
       public void testGetMessage()
       {
           assertEquals(
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to