001 package net.sf.logdistiller.util;
002
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 import java.io.IOException;
018 import java.net.URL;
019 import java.util.*;
020
021 /**
022 * Helper to load extensions for <b>LogDistiller</b>. Extensions are declared in <code>logdistiller.properties</code>
023 * resource file, as properties. Each extensible part can be declared as a property which key value specifies the part
024 * extended (<code>logtypes</code>, <code>plugins</code>, <code>publishers</code> or <code>reportformats</code>), the
025 * value is the full class name (with package) of the extension.
026 *
027 * @since 0.7
028 */
029 public class ExtensionHelper
030 {
031 private static List extensionProperties;
032
033 public static List findExtensions( String type )
034 {
035 if ( extensionProperties == null )
036 {
037 extensionProperties = findExtensions();
038 }
039 List extensions = new ArrayList();
040 Iterator iter = extensionProperties.iterator();
041 while ( iter.hasNext() )
042 {
043 Properties prop = (Properties) iter.next();
044 String extension = prop.getProperty( type );
045 if ( extension != null )
046 {
047 extensions.add( extension );
048 }
049 }
050 return extensions;
051 }
052
053 private static List findExtensions()
054 {
055 URL url = null;
056 try
057 {
058 List extensions = new ArrayList();
059 Enumeration res = ExtensionHelper.class.getClassLoader().getResources( "logdistiller.properties" );
060 while ( res.hasMoreElements() )
061 {
062 url = (URL) res.nextElement();
063 Properties prop = new Properties();
064 prop.load( url.openStream() );
065 extensions.add( prop );
066 }
067 return extensions;
068 }
069 catch ( IOException ioe )
070 {
071 String msg =
072 ( url == null ) ? "unable to list resources logdistiller.properties" : "unable to load resource "
073 + url.toExternalForm();
074 throw new RuntimeException( msg, ioe );
075 }
076 }
077 }