/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ /* * NodeSorter.java * * Created on 26. Juni 2007, 15:23 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package Sirius.navigator.tools; import Sirius.server.middleware.types.*; import Sirius.util.NodeComparator; import org.apache.log4j.Logger; import java.util.*; /** * DOCUMENT ME! * * @author schlob * @version $Revision$, $Date$ */ public class NodeSorter { //~ Static fields/initializers --------------------------------------------- protected static final Logger logger = Logger.getLogger(NodeSorter.class); public static final boolean ASCENDING = true; public static final boolean DESCENDING = false; public static final String DEFAULT_COMPARATOR = "Sirius.util.NodeComparator"; // NOI18N //~ Constructors ----------------------------------------------------------- /** * Creates a new NodeSorter object. */ private NodeSorter() { } //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @param nodes DOCUMENT ME! * * @return DOCUMENT ME! */ public static Node[] sortNodes(final Node[] nodes) { final Comparator comparator = new NodeComparator(); Arrays.sort(nodes, comparator); return nodes; } /** * DOCUMENT ME! * * @param nodes DOCUMENT ME! * @param comparatorClass DOCUMENT ME! * @param ascending DOCUMENT ME! * * @return DOCUMENT ME! * * @throws Throwable DOCUMENT ME! */ public static Node[] sortNodes(final Node[] nodes, String comparatorClass, final boolean ascending) throws Throwable { if ((comparatorClass == null) || (comparatorClass.length() == 0)) { comparatorClass = DEFAULT_COMPARATOR; } // // if(comparatorCache.containsKey(comparatorClass)) // { // comparator = (Comparator)comparatorCache.get(comparatorClass); // } // else // { Comparator comparator = null; try { logger.info("creating new comparator instance: comparatorClass"); // NOI18N comparator = (Comparator)Class.forName(comparatorClass).newInstance(); } catch (Throwable t) { logger.error("could not create comparator class '" + comparatorClass + "', sorting aborted"); // NOI18N return nodes; } // } if (logger.isDebugEnabled()) { logger.debug("sorting nodes ascending by comparator '" + comparatorClass + "'"); // NOI18N } Arrays.sort(nodes, comparator); if (ascending) { return nodes; } else { if (logger.isDebugEnabled()) { logger.debug("sorting nodes descending by comparator '" + comparatorClass + "'"); // NOI18N } // Arrays.sort(nodes, comparator); final Node[] tempNodes = new Node[nodes.length]; for (int i = 0; i < tempNodes.length; i++) { tempNodes[i] = nodes[tempNodes.length - i - 1]; } return tempNodes; } } }