r336 - trunk/lutinvcs/lutinvcs-core/src/main/java/org/codelutin/vcs
Author: tchemit Date: 2008-04-04 19:33:29 +0000 (Fri, 04 Apr 2008) New Revision: 336 Modified: trunk/lutinvcs/lutinvcs-core/src/main/java/org/codelutin/vcs/VCSHandlerFactory.java Log: use only ServiceLoader once and save list of detected providers once for all :) Modified: trunk/lutinvcs/lutinvcs-core/src/main/java/org/codelutin/vcs/VCSHandlerFactory.java =================================================================== --- trunk/lutinvcs/lutinvcs-core/src/main/java/org/codelutin/vcs/VCSHandlerFactory.java 2008-04-04 19:32:54 UTC (rev 335) +++ trunk/lutinvcs/lutinvcs-core/src/main/java/org/codelutin/vcs/VCSHandlerFactory.java 2008-04-04 19:33:29 UTC (rev 336) @@ -24,6 +24,8 @@ import static org.codelutin.i18n.I18n._; import org.codelutin.util.StringUtil; +import java.util.ArrayList; +import java.util.List; import java.util.ServiceLoader; /** @@ -47,8 +49,9 @@ private VCSHandler handler; /** providers availables */ - private ServiceLoader<VCSHandlerProvider> providers; + private List<VCSHandlerProvider> providers; + public static VCSHandlerFactory getInstance() { if (instance == null) { instance = new VCSHandlerFactory(); @@ -58,7 +61,7 @@ public static VCSConfig getConfig() { VCSHandlerFactory factory = getInstance(); - factory.assertConfigIsNotNull(factory.config); + assertConfigIsNotNull(factory.config); return factory.config; } @@ -87,8 +90,8 @@ public static VCSHandler newHandler(VCSConfig config) { VCSHandlerFactory factory = getInstance(); - factory.assertConfigIsInit(config); - VCSHandlerProvider<?> provider = factory.getProvider(config); + assertConfigIsInit(config); + VCSHandlerProvider<?> provider = factory.getProvider(config.getType().name().toUpperCase()); if (provider == null) { throw new IllegalArgumentException("could not find a provider for type " + config.getType()); } @@ -97,39 +100,35 @@ private VCSHandlerFactory() { long t0 = System.nanoTime(); - providers = ServiceLoader.load(VCSHandlerProvider.class); - int nb = 0; - for (VCSHandlerProvider provider : providers) { + providers = new ArrayList<VCSHandlerProvider>(); + for (VCSHandlerProvider provider : ServiceLoader.load(VCSHandlerProvider.class)) { + providers.add(provider); if (log.isDebugEnabled()) { log.debug("find " + provider); } - nb++; } - log.info("found " + nb + " provider(s) " + providers.toString() + " in " + StringUtil.convertTime(t0, System.nanoTime())); + log.info("found " + providers.size() + " provider(s) " + providers.toString() + " in " + StringUtil.convertTime(t0, System.nanoTime())); for (VCSHandlerProvider provider : providers) { log.info(provider.getName() + " [" + provider + ']'); } } - private VCSHandlerProvider getProvider(VCSConfig config) { - - String type = config.getType().name(); - + private VCSHandlerProvider getProvider(String type) { for (VCSHandlerProvider provider : providers) { - if (type.equals(provider.getName())) { + if (type.equals(provider.getName().toUpperCase())) { return provider; } } - return null; + throw new IllegalArgumentException("could not found a provier for " + config); } - private void assertConfigIsNotNull(VCSConfig vcsConfig) { + private static void assertConfigIsNotNull(VCSConfig vcsConfig) { if (vcsConfig == null) { throw new VCSRuntimeException(_("lutinvcs.error.init.no.config", VCSHandlerFactory.class.getName())); } } - private void assertConfigIsInit(VCSConfig config) { + private static void assertConfigIsInit(VCSConfig config) { assertConfigIsNotNull(config); if (!config.isInit()) { throw new VCSRuntimeException(_("lutinvcs.error.init.config", config));
participants (1)
-
tchemit@users.labs.libre-entreprise.org