/* Copyright (c) 2007, http://www.codeviation.org project
* This program is made available under the terms of the MIT License.
*/
package hudson.plugins.codeviation;
import hudson.model.Hudson;
import java.util.Collection;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.openide.util.Lookup;
import org.openide.util.lookup.AbstractLookup;
import org.openide.util.lookup.InstanceContent;
/**
*Default lookup for hpi plugin. It adds Meta-inf/services from classloader of Hudson to lookup.
* @author pzajac
*/
public class HPILookup extends Lookup {
static final Logger logger = Logger.getLogger(Lookup.class.getName());
private AbstractLookup lookup;
private InstanceContent content;
public HPILookup() {
content = new InstanceContent();
lookup = new AbstractLookup(content);
}
@SuppressWarnings("unchecked")
public <T> T lookup(Class<T> clazz) {
T t = lookup.lookup(clazz);
if (t != null) {
return t;
}
Collection<? extends Class> classes = Hudson.getInstance().getPluginManager().discover(clazz);
for (Class c : classes ) {
try {
Object obj = c.newInstance();
content.add(obj);
return (T)obj;
} catch (InstantiationException instantiationException) {
logger.log(Level.SEVERE,null,instantiationException);
} catch (IllegalAccessException cnfe) {
logger.log(Level.SEVERE,null,cnfe);
}
}
return null;
}
@SuppressWarnings("unchecked")
public <T> Result<T> lookup(Template<T> templ) {
Class<T> clazz = templ.getType();
Collection<? extends Class> classes = Hudson.getInstance().getPluginManager().discover(clazz);
for (Class c : classes ) {
if (lookup.lookup(c) == null) {
try {
Object obj = c.newInstance();
content.add(obj);
} catch (InstantiationException instantiationException) {
logger.log(Level.SEVERE,null,instantiationException);
} catch (IllegalAccessException cnfe) {
logger.log(Level.SEVERE,null,cnfe);
}
}
}
return lookup.lookup(templ);
}
}