package pipe.gui;
import pipe.gui.plugin.GuiModule;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* ModuleClass encapsulates information about the IModule class and is designed
* to be used as a userobject in nodes in a JTree, in this case for nodes
* representing module classes. This isn't designed for use anywhere else.
*
* @author Camilla Clifford
*/
class ModuleClassContainer {
private static final Logger LOGGER = Logger.getLogger(ModuleClassContainer.class.getName());
private final Class<? extends GuiModule> clazz;
private String displayName;
/**
* Sets up the private fields, includes instantiating an object and calling
* the getName method used to set the displayName.
*
* @param clazz The class that the ModuleClass encapsulates.
*/
public ModuleClassContainer(Class<? extends GuiModule> clazz) {
this.clazz = clazz;
try {
Constructor<? extends GuiModule> ctr = this.clazz.getDeclaredConstructor(new Class[0]);
Object moduleObj = ctr.newInstance();
// invoke the name method for display
Method meth = this.clazz.getMethod("getName", new Class[0]);
displayName = (String) meth.invoke(moduleObj);
} catch (NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e) {
displayName = "(Error in module instantiation)";
LOGGER.log(Level.SEVERE, e.getMessage());
}
}
/**
* Overides the object method in order to provide the correct display name
*/
public String toString() {
return displayName;
}
/**
* @return the class object that the ModuleClass encapsulates
*/
public Class<? extends GuiModule> returnClass() {
return clazz;
}
}