001 /* 002 * Copyright (C) 2006-2007 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017 package org.codehaus.gmaven.plugin.tools; 018 019 import org.codehaus.gmaven.feature.Feature; 020 import org.codehaus.gmaven.feature.Provider; 021 import org.codehaus.gmaven.feature.ProviderManager; 022 import org.codehaus.gmaven.feature.ProviderRegistry; 023 import org.codehaus.gmaven.feature.ProviderSelector; 024 import org.codehaus.gmaven.plugin.ProviderMojoSupport; 025 026 import java.net.URL; 027 import java.net.URLClassLoader; 028 import java.util.Collection; 029 import java.util.Iterator; 030 import java.util.Map; 031 032 /** 033 * Displays information about the Groovy runtime providers which are configured and selected. 034 * 035 * @goal providers 036 * @requiresProject false 037 * @since 1.0-beta-3 038 * 039 * @author <a href="mailto:jason@planet57.com">Jason Dillon</a> 040 * @version $Id: ProvidersMojo.java 9 2009-07-16 09:22:08Z user57 $ 041 */ 042 public class ProvidersMojo 043 extends ProviderMojoSupport 044 { 045 protected void doExecute() throws Exception { 046 if (log.isTraceEnabled()) { 047 logEnvironment(); 048 } 049 050 ProviderManager manager = getProviderManager(); 051 log.debug("Provider manager: {}", manager); 052 053 ProviderRegistry registry = manager.getRegistry(); 054 log.debug("Provider registry: {}", registry); 055 056 ProviderSelector selector = manager.getSelector(); 057 log.debug("Provider selector: {}", selector); 058 059 // Before we can get the list of registered providers, we need to select one first, 060 // so pick the default and save any failure for later inspection 061 062 Provider selected = null; 063 Throwable selectFailure = null; 064 try { 065 selected = provider(); 066 log.debug("Selected: {}", selected); 067 } 068 catch (Throwable t) { 069 log.debug("Selection failure: " + t, t); 070 selectFailure = t; 071 } 072 073 log.info(""); 074 075 log.info("Provider selection: {}", getProviderSelection()); 076 log.info(""); 077 078 Map providers = registry.providers(); 079 if (providers == null || providers.isEmpty()) { 080 log.info("No providers registered"); 081 } 082 else { 083 log.info("Found {} registered providers:", String.valueOf(providers.size())); 084 085 for (Iterator iter = providers.keySet().iterator(); iter.hasNext();) { 086 String key = (String) iter.next(); 087 Provider provider = (Provider) providers.get(key); 088 089 logProvider(provider, " "); 090 091 log.info(""); 092 } 093 094 if (selected != null) { 095 log.info("Selected provider:"); 096 log.info(" {}", selected); 097 } 098 else if (selectFailure != null) { 099 log.info("No provider was selected; Failures occured while selecting: {}", selectFailure.toString()); 100 } 101 else { 102 log.info("No provider was selected and no failure was detected; The gods must be crazy..."); 103 } 104 } 105 106 log.info(""); 107 } 108 109 protected void logEnvironment() { 110 log.trace("ClassLoader '{}' Class-Path:", getClass().getClassLoader()); 111 112 URL[] urls = ((URLClassLoader)getClass().getClassLoader()).getURLs(); 113 114 for (int i=0; i<urls.length; i++) { 115 log.trace(" {}", urls[i]); 116 } 117 118 log.debug("Plugin Artifacts:"); 119 120 for (Iterator iter = pluginArtifactMap.keySet().iterator(); iter.hasNext();) { 121 log.trace(" {}", iter.next()); 122 } 123 } 124 125 private void logProvider(final Provider provider, final String pad) { 126 assert provider != null; 127 assert pad != null; 128 129 log.info("{}{}", pad, provider); 130 131 logFeatures(provider, pad + " "); 132 } 133 134 private void logFeatures(final Provider provider, final String pad) { 135 assert provider != null; 136 assert pad != null; 137 138 Collection features = provider.features(); 139 140 if (features.isEmpty()) { 141 log.info("{}No features", pad); 142 } 143 else { 144 log.info("{}Features:", pad); 145 146 for (Iterator iter = features.iterator(); iter.hasNext();) { 147 Feature feature = (Feature) iter.next(); 148 log.info("{} {}", pad, feature.key()); 149 } 150 } 151 } 152 }