psmith      2003/12/23 20:08:45

  Added:       src/java/org/apache/log4j/chainsaw/favourites package.html
                        Favourite.java FavouritesRegistry.java
  Log:
  The beginnings of Favourites (save Plugin state).
  
  Eventually the saved state of a prototype plugin will
  re-use the <plugin ... > syntax that is found in a
  log4j.xml file.
  
  Revision  Changes    Path
  1.1                  
jakarta-log4j/src/java/org/apache/log4j/chainsaw/favourites/package.html
  
  Index: package.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
  <html> <head>
  <title></title>
  </head>
  
  <body>
  
  <p>The Favourites package.
  
  <hr>
  <h2>Prototype Rules</h2>
  The following rules are checked against a potential prototype instance to ensure it 
can
  be used and saved for later use:
  
  <ul>
        <LI > Have a public no-arg constructor available
        <li> TODO - more rules
  </ul>
  </body> </html>
  
  
  
  1.1                  
jakarta-log4j/src/java/org/apache/log4j/chainsaw/favourites/Favourite.java
  
  Index: Favourite.java
  ===================================================================
  package org.apache.log4j.chainsaw.favourites;
  
  /**
   * A Fauvourite is just a named container of on object that can be used
   * as a basis (prototype) for the creation of exact copies.
   * 
   * Clients should use the FavouritesRegistry to create instances of this class
   * so that explicit checks can be performed about the suitability of the
   * prototype.
   * 
   * @author Paul Smith <[EMAIL PROTECTED]>
   *
   */
  public final class Favourite {
  
      private String name;
      private Object prototype;
  
      /**
       * @param name
       * @param object
       */
      Favourite(String name, Object prtotype) {
          this.name = name;
          this.prototype = prtotype;
      }
  
  
      /**
       * @return Returns the name.
       */
      public final String getName() {
  
          return name;
      }
  
      /**
       * Returns the object that would be used as a basis to create new
       * instances of that same object.
       * @return Returns the prototype.
       */
      public final Object getPrototype() {
        return prototype;
      }
  }
  
  
  
  1.1                  
jakarta-log4j/src/java/org/apache/log4j/chainsaw/favourites/FavouritesRegistry.java
  
  Index: FavouritesRegistry.java
  ===================================================================
  package org.apache.log4j.chainsaw.favourites;
  
  import java.util.ArrayList;
  import java.util.Collection;
  import java.util.Collections;
  import java.util.List;
  
  /**
   *  A singleton class that is used as a Registry of instances of JavaBeans 
   * that are in a state that a user prefers.
   * 
   * @author Paul Smith <[EMAIL PROTECTED]>
   *
   */
  public class FavouritesRegistry{
    
    private final FavouritesRegistry instance = new FavouritesRegistry();
    private final List favourites = new ArrayList();
    
    /**
     * Returns a Collection of Favourite instances whose getPrototype() method
     * returns an object whose class is assignable from clazz, or more formally, such 
that
     * clazz.isAssignableFrom(favourite.getPrototype().getClass())
     * @param clazz
     * @return
     */
    public synchronized Collection getFavouritesByClass(Class clazz) {
      throw new UnsupportedOperationException("Work In Progress");
    }
    
    /**
     * Adds a favourite to this Registry
     * @param favourite
     */
    
    public synchronized void addFavourite(Favourite favourite) {
      throw new UnsupportedOperationException("Work In Progress");
    }
    
    /**
     * Returns an unmodifiable List of all the known Favourite instances
     * @return
     */
    public List getFavourites() {
      return Collections.unmodifiableList(favourites);
    }
    
    /**
     * Creates a new Favourite instance after running throught some
     * suitability checks to make sure the object class is ok to be used
     * as a prototype.
     * 
     * @param name The name to use for the favourite
     * @param prototype The object to register
     * @throws IllegalArgumentException if the prototype does not conform
     * to the necessary rules to be used as a prototype (see the package 
documentation).
     * 
     * @return
     */
    public void addFavourite(String name, Object prototype) {
      favourites.add(createFavourite(name, prototype));
    }
    
    private Favourite createFavourite(String name, Object prototype) {
      checkSuitability(prototype);
      return new Favourite(name, prototype);
    }
    
    /**
     * Checks the suitability of an object to make sure it conforms to all the rules
     * for being a prototype,
     * @param prototype
     * @throws IllegalArgumentException if the prototype is not suitable
     */
    private void checkSuitability(Object prototype)  throws IllegalArgumentException{
      // TODO Auto-generated method stub
     throw new UnsupportedOperationException("Work in Progress"); 
    }
  
    private FavouritesRegistry() {
      
    }
  }
  
  
  

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

Reply via email to