logo       


ruper2/src/java/core/org/krysalis/ruper2/util/select Selectable.java,NONE,1: msg#00472

Subject: ruper2/src/java/core/org/krysalis/ruper2/util/select Selectable.java,NONE,1.1 SelectorHandlerChain.java,NONE,1.1 Selector.java,NONE,1.1 CompositeSelector.java,NONE,1.1 AllSelector.java,NONE,1.1 SelectionHelper.java,NONE,1.1
Update of 
/cvsroot/metamorphosis/ruper2/src/java/core/org/krysalis/ruper2/util/select
In directory 
sc8-pr-cvs1:/tmp/cvs-serv30481/src/java/core/org/krysalis/ruper2/util/select

Added Files:
        Selectable.java SelectorHandlerChain.java Selector.java 
        CompositeSelector.java AllSelector.java SelectionHelper.java 
Log Message:
Avoid clash with existing Ruper...

--- NEW FILE: Selectable.java ---
/*
 * Created on Aug 27, 2003
 */
package org.krysalis.ruper2.util.select;

/**
 * @author arb_jack
 */
public interface Selectable {
        Object getSelectionObject();
}

--- NEW FILE: SelectorHandlerChain.java ---
/*
 * Created on Sep 11, 2003
  */
package org.krysalis.ruper2.util.select;

import java.util.ArrayList;
import java.util.List;

import org.krysalis.ruper2.util.chainprocess.HandlerChain;

/**
 * @author anou_mana
 */
public class SelectorHandlerChain extends HandlerChain {

        /**
         * @param name
         */
        public SelectorHandlerChain(String name) {
                super(name);
        }

        public List process(final List list) {
                List processedList = new ArrayList(list);
                List selectorList = this.getHandlers();
                if (!selectorList.isEmpty())
                        processedList = SelectionHelper.select(processedList, 
selectorList);

                return processedList;
        }
}

--- NEW FILE: Selector.java ---
/*
 * Created on Aug 27, 2003
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
package org.krysalis.ruper2.util.select;

/**
 * @author arb_jack
 */
public interface Selector {
        boolean select(Object o) throws Exception;
}

--- NEW FILE: CompositeSelector.java ---
package org.krysalis.ruper2.util.select;

import org.krysalis.version.util.debug.Dumpable;
import org.krysalis.version.util.debug.DebugUtils;
import org.krysalis.version.util.SystemUtils;

import java.util.List;
import java.util.LinkedList;
import java.util.Iterator;
import java.io.PrintWriter;

/**
 * Abstract selector that is composed of child selectors.  Doesn't
 * specify how the select method should be resolved, that is left
 * to specific implementations.
 *
 * A composite selector maintains the order in which children are added
 * (in case that is significant for the evaluation) and guarantees that
 * children will only be added once.
 *
 * @author Ben Sommerville
 */
public abstract class CompositeSelector implements Selector, Dumpable {
        // Would be much easier if we could use a LinkedHashSet, but that
        // isn't available until JDK 1.4
        private List m_children = new LinkedList();

        /**
         * Add a selector to this composite if it is not already present.
         * If selector has already been added, the add will fail (and
         * return false).
         * @param selector Selector to add
         * @return true if this composite did not already contain the selector
         * @throws NullPointerException If selector is null
         */
        public boolean addSelector(Selector selector) {
                if (selector == null) {
                        throw new IllegalArgumentException("Can't add null 
selector to composite");
                }
                boolean wasAdded;
                if (m_children.contains(selector)) {
                        wasAdded = false;
                }
                else {
                        wasAdded = m_children.add(selector);
                }
                return wasAdded;
        }

        /**
         * Get the number of children
         * @return Number of children
         */
        public int childCount() {
                return m_children.size();
        }

        /**
         * Get an iterator to access children
         * @return Iterator that iterates over children
         */
        public Iterator childIterator() {
                return m_children.iterator();
        }

        /**
         * Check if this selector has children
         * @return true if it has children
         */
        public boolean hasChildren() {
                return !m_children.isEmpty();
        }

        /**
         * Get the name of this type of selector.  This is used for
         * debug output.
         * By default will return type name based on class name
         *
         * @return Selector type name.
         */
        public String getTypeName() {
                String name = SystemUtils.getShortName(this);
                String selectorSuffix = "Selector";
                if (name.endsWith(selectorSuffix)) {
                        name = name.substring(0, name.length() - 
selectorSuffix.length());
                }
                return name;
        }

        /**
         * Override of equals method (@see java.lang.Object#equals).
         * CompositeSelectors are equal if they are of the same
         * type and have the same children (number and order).
         * @param obj Object compare with
         * @return True if objects are equal
         */
        public boolean equals(Object obj) {
                boolean isEqual = false;

                if (sameType(obj)) {
                        CompositeSelector rhs = (CompositeSelector) obj;
                        if (childCount() == rhs.childCount()) {
                                Iterator lhsIter = childIterator();
                                Iterator rhsIter = rhs.childIterator();
                                isEqual = true;
                                while (lhsIter.hasNext() && rhsIter.hasNext() 
&& isEqual) {
                                        Object lhsChild = lhsIter.next();
                                        Object rhsChild = rhsIter.next();
                                        isEqual = lhsChild.equals(rhsChild);
                                }
                        }
                }
                return isEqual;
        }

        public int hashCode() {
                int typeHash = getType().hashCode();
                return typeHash * 41 + m_children.hashCode();
        }

        public void dump(PrintWriter out, int depth, boolean verbose) {
                String indent = DebugUtils.getIndent(depth);
                out.print(indent);
                out.print(getTypeName());
                out.println(" (");
                Iterator iter = childIterator();
                while (iter.hasNext()) {
                        Selector selector = (Selector) iter.next();
                        DebugUtils.dump(out, depth + 1, verbose, selector);
                }

                out.print(indent);
                out.println(")");

        }
        public String toString() {
                StringBuffer buffer = new StringBuffer();

                buffer.append(getTypeName());

                buffer.append(" (");
                Iterator iter = childIterator();
                while (iter.hasNext()) {
                        Selector selector = (Selector) iter.next();
                        buffer.append(selector);
                }

                buffer.append(")");

                return buffer.toString();
        }

        /**
         * Determine if object is same type of selector
         * @param obj Object to check
         * @return true if the types are the same
         */
        private boolean sameType(Object obj) {
                boolean isSame = false;
                if (obj instanceof CompositeSelector) {
                        CompositeSelector rhs = (CompositeSelector) obj;
                        return getType().equals(rhs.getType());
                }
                return isSame;
        }

        /**
         * Get an object representing the selector type
         * @return Type object
         */
        private Object getType() {
                return getClass();
        }
}

--- NEW FILE: AllSelector.java ---
/*
 * Created on Aug 27, 2003
 */
package org.krysalis.ruper2.util.select;

import org.krysalis.version.util.SystemUtils;

/**
 * @author arb_jack
 */
public class AllSelector implements Selector {

        private final static Selector INSTANCE = new AllSelector();

        /* (non-Javadoc)
         * @see org.krysalis.ruper2.util.Selector#select(java.lang.Object)
         */
        public boolean select(Object o) {
                return true;
        }

        public static Selector getInstance() {
                return AllSelector.INSTANCE;
        }
        
        public String toString() { return SystemUtils.getShortName(getClass()); 
}
}

--- NEW FILE: SelectionHelper.java ---
/*
 * Created on Aug 27, 2003
 */
package org.krysalis.ruper2.util.select;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.krysalis.ruper2.log.Logger;
import org.krysalis.ruper2.util.text.Messages;

/**
 * @author arb_jack
 */
public class SelectionHelper {

        /**
         * Apply a "chain" (list) of selectors to a collection
         * 
         * @param choices
         * @param selectors
         * @return
         */
        public static List select(List choices, List selectors) {
                List selected = new ArrayList();
                selectInto(choices, selectors, selected);
                return selected;
        }

        /**
         * Apply a "chain" (list) of selectors to a collection
         * 
         * @param choices
         * @param selectors
         * @return
         */
        public static void selectInto(
                List choices,
                List selectors,
                List selected) {
                //
                // Keep applying selectors (so long as there are choices)
                //
                for (Iterator i = selectors.iterator();
                        i.hasNext() && !choices.isEmpty();
                        ) {
                        Selector selector = (Selector) i.next();

                        selectInto(choices, selector, selected);

                        choices = selected;
                        selected = new ArrayList();  // clean selection
                }
                
                selected = choices;
        }

        public static List select(List choices, Selector selector) {
                List selected = new ArrayList();
                selectInto(choices, selector, selected);
                return selected;
        }

        public static void selectInto(
                List choices,
                Selector selector,
                List selected) {

                for (Iterator i = choices.iterator(); i.hasNext();) {
                        Object choice = i.next();
                        try {
                                if (selector.select(choice))
                                        selected.add(choice);
                                else
                                        Logger.getLog().debug(
                                                Messages.getString(
                                                        "NOT_SELECTED",
                                                        new Object[] { choice, 
selector }));
                        }
                        catch (Exception e) {
                                Logger.getLog().error(
                                        Messages.getString(
                                                "SELECTOR_CRASHED",
                                                new Object[] { selector, e }),
                                        e);
                        }
                }
        }
}



-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf


Ruby Jobs
Java Jobs
Jobs in California
more...
what
job title, keywords
where
city, state, zip
jobs by job search
Search:
Java, servers, webhosting, windows, cisco ...
more...
<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

Recently Viewed:
encryption.gpg....    ietf.rfc822/199...    freebsd.devel.i...    lang.haskell.li...    mail.squirrelma...    web.zope.plone....    yellowdog.gener...    text.xml.xalan....    recreation.phot...    kde.devel.educa...    hardware.bus.ca...    printing.ghosts...    voip.peering/20...    assembly/2006-0...    org.user-groups...    culture.interne...    network.i2p/200...    boot-loaders.ya...    xfree86.render/...    qnx.openqnx.dev...    jakarta.velocit...    user-groups.pal...   
Home | blog view | USPTO Patent Archive | advertise | OSDir is an inevitable website. super tiny logo

Free Magazines

Cisco News
Receive a free quarterly e-newsletter with exclusive articles on how Cisco IT uses its own products and solutions to enable the business.
subscribe

Systems Management News, the newspaper for IT systems administration and data center managers! Each issue of Systems Management News is chock-full of news and analysis to help you understand what's happening in your field.
subscribe

The Enterprise Newsweekly eWeek is the essential technology information source for builders of e-business.
subscribe

Oracle Magazine Oracle Magazine contains technology strategy articles, sample code, tips, Oracle and partner news, how to articles for developers and DBAs, and more. Oracle (NASDAQ: ORCL) is the world's largest enterprise software company.
subscribe

Total Telecom Total Telecom is "The Economist of the communications industry".
subscribe