/** * Copyright (C) 2008-2010, Squale Project - http://www.squale.org * * This file is part of Squale. * * Squale 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 3 of the * License, or any later version. * * Squale 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 General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Squale. If not, see <http://www.gnu.org/licenses/>. */ /* * Created on Mar 5, 2004 */ package org.squale.jraf.bootstrap.config; import java.util.Comparator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.squale.jraf.spi.provider.IProviderConstants; /** * <p>Title : ProviderConfigComparator.java</p> * <p>Description : Objet permettant de trier des configurations de provider</p> * <p>Copyright : Copyright (c) 2004</p> * * @author Eric BELLARD */ public class ProviderConfigComparator implements Comparator { /** logger */ private final static Log log = LogFactory.getLog(ProviderConfigComparator.class); /* (non-Javadoc) * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ public int compare(Object arg0, Object arg1) { ProviderConfig pc0 = (ProviderConfig) arg0; ProviderConfig pc1 = (ProviderConfig) arg1; // les identificateurs ne peuvent �tre null ou vide if (pc0.getId() == null || pc1.getId().equals("") || pc1.getId() == null || pc1.getId().equals("")) { String message = "Les identificateurs de plugin ne peuvent �tre null ou vide."; log.error(message); throw new IllegalArgumentException(message); } // cas avec le provider de bootstrap if (isBootStrap(pc0, pc1)) { if (isBootStrap(pc0)) { return -1; } else { return 1; } } // cas avec le provider de logging else if (isLogging(pc0, pc1)) { if (isLogging(pc0)) { return -1; } else { return 1; } } // cas normal - on retourne la comparaison de l'ordre de chargement else { return pc0.getLoadOnStartup() - pc1.getLoadOnStartup(); } } /** * Retourne true si le provider est un bootstrap provider * @param in_config0 configuration de provider * @return true si le provider est un bootstrap provider */ private boolean isBootStrap(ProviderConfig in_config0) { return in_config0.getId().equals( IProviderConstants.BOOTSTRAP_PROVIDER_KEY); } /** * Retourne true si l'un des providers est un bootstrap provider * @param in_config0 configuration de provider * @param in_config1 configuration de provider * @return true si le provider est un bootstrap provider */ private boolean isBootStrap( ProviderConfig in_config0, ProviderConfig in_config1) { return isBootStrap(in_config0) || isBootStrap(in_config1); } /** * Retourne true si le provider est un logging provider * @param in_config0 configuration de provider * @return true si le provider est un logging provider */ private boolean isLogging(ProviderConfig in_config0) { return in_config0.getId().equals( IProviderConstants.LOGGING_PROVIDER_KEY); } /** * Retourne true si l'un des providers est un logging provider * @param in_config0 configuration de provider * @param in_config1 configuration de provider * @return true si le provider est un logging provider */ private boolean isLogging( ProviderConfig in_config0, ProviderConfig in_config1) { return isLogging(in_config0) || isLogging(in_config1); } }