/*
* JBoss, Home of Professional Open Source.
* Copyright 2006, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.system.deployers;
import java.util.HashMap;
import java.util.Map;
import org.jboss.deployers.structure.spi.DeploymentContext;
import org.jboss.deployers.structure.spi.helpers.DefaultDeploymentContextComparator;
/**
* Legacy deployment sorter
*
* @author ales.justin@jboss.org
*/
public class LegacyDeploymentContextComparator extends DefaultDeploymentContextComparator
{
/** The instance */
public static final LegacyDeploymentContextComparator INSTANCE = new LegacyDeploymentContextComparator();
/** Legacy orders */
private static Map<String, Integer> legacyOrder;
static
{
legacyOrder = new HashMap<String, Integer>();
legacyOrder.put(".deployer", 50);
legacyOrder.put("-deployer.xml", 50);
legacyOrder.put(".aop", 100);
legacyOrder.put("-aop.xml", 100);
legacyOrder.put(".sar", 150);
legacyOrder.put("-service.xml", 150);
legacyOrder.put(".beans", 200);
legacyOrder.put("-jboss-beans.xml", 200);
legacyOrder.put(".rar", 250);
legacyOrder.put("-ds.xml", 300);
legacyOrder.put(".har", 350);
legacyOrder.put(".jar", 400);
legacyOrder.put(".ejb3", 400);
legacyOrder.put(".par", 400);
legacyOrder.put(".war", 500);
legacyOrder.put(".wsr", 600);
legacyOrder.put(".ear", 650);
legacyOrder.put(".zip", 750);
legacyOrder.put(".bsh", 800);
legacyOrder.put(".last", 900);
}
private boolean useDefaults = true;
private Map<String, Integer> suffixOrder;
private Map<String, Integer> orderMap;
private int defaultOrder = 850;
/**
* Get the instance.
*
* @return the instance
*/
public static LegacyDeploymentContextComparator getInstance()
{
return INSTANCE;
}
public int compare(DeploymentContext fst, DeploymentContext snd)
{
int fstOrder = getContextOrder(fst);
int sndOrder = getContextOrder(snd);
int diff = fstOrder - sndOrder;
if (diff != 0)
return diff;
else
return super.compare(fst, snd);
}
/**
* Get context's order.
*
* @param context the deployment context
* @return context's order, or default if no match
*/
protected int getContextOrder(DeploymentContext context)
{
String simpleName = context.getSimpleName();
for (Map.Entry<String, Integer> entry : getOrderMap().entrySet())
{
if (simpleName.endsWith(entry.getKey()))
return entry.getValue();
}
return defaultOrder;
}
protected Map<String, Integer> getOrderMap()
{
if (orderMap == null)
orderMap = createOrderMap();
return orderMap;
}
public void create()
{
// do nothing -- back compatibility purpose only
}
/**
* Create order map.
*
* Legacy mappings first,
* then override it with custom suffix order.
*
* @return the new order map
*/
public Map<String, Integer> createOrderMap()
{
Map<String, Integer> map = new HashMap<String, Integer>();
if (useDefaults)
map.putAll(legacyOrder);
if (suffixOrder != null)
map.putAll(suffixOrder);
return map;
}
/**
* Should we use defaults.
*
* @param useDefaults default flag
*/
public void setUseDefaults(boolean useDefaults)
{
this.useDefaults = useDefaults;
}
/**
* Set suffix order map.
*
* @param suffixOrder the suffix order map
*/
public void setSuffixOrder(Map<String, Integer> suffixOrder)
{
this.suffixOrder = suffixOrder;
}
/**
* Set default order.
*
* @param defaultOrder the default order
*/
public void setDefaultOrder(int defaultOrder)
{
this.defaultOrder = defaultOrder;
}
Object readResolve()
{
return INSTANCE;
}
}