/******************************************************************************* * Copyright (c) 2006 Sybase, Inc. and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Sybase, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.jst.pagedesigner.utils; import java.util.Comparator; import java.util.HashMap; import java.util.Map; import org.eclipse.core.runtime.Assert; import org.w3c.dom.Node; /** * To sort the location of tags, this comparator is used to compare tags' order. * * @author mengbo */ public class NodeLocationComparator implements Comparator { private final static Map orders = new HashMap(); private final static Integer DEFAULT_ORDER = Integer.valueOf(Integer.MAX_VALUE); private static NodeLocationComparator _instance = new NodeLocationComparator(); static { orders.put("taglib", Integer.valueOf(0)); //$NON-NLS-1$ orders.put("directive.taglib", Integer.valueOf(0)); //$NON-NLS-1$ orders.put("head", Integer.valueOf(1)); //$NON-NLS-1$ } private NodeLocationComparator() { // no external instantiation } /** * @return the singleton */ public static NodeLocationComparator getInstance() { return _instance; } /** * The object to be compared could be Node or tag name. * * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ public int compare(Object o1, Object o2) { Assert.isTrue((o1 instanceof Node || o1 instanceof String) && (o2 instanceof Node || o2 instanceof String)); Integer i1 = getOrder(o1); Integer i2 = getOrder(o2); return i1.compareTo(i2); } private Integer getOrder(Object n) { String name = null; if (n instanceof Node) { name = ((Node) n).getLocalName(); } else { name = (String) n; } if (name != null) { Object order = orders.get(name); if (order != null) { return (Integer) order; } } return DEFAULT_ORDER; } }