package nl.fontys.sofa.limo.view.node.factory;
import java.util.List;
import nl.fontys.sofa.limo.api.exception.ServiceNotFoundException;
import nl.fontys.sofa.limo.domain.component.hub.Hub;
import nl.fontys.sofa.limo.view.node.root.AbstractRootNode;
import nl.fontys.sofa.limo.view.node.root.EventRootNode;
import nl.fontys.sofa.limo.view.node.root.HubRootNode;
import nl.fontys.sofa.limo.view.node.root.LegTypeRootNode;
import nl.fontys.sofa.limo.view.node.root.ProcedureCategoryRootNode;
import org.openide.nodes.ChildFactory;
import org.openide.nodes.Children;
import org.openide.util.Exceptions;
import org.openide.util.Lookup.Result;
import org.openide.util.LookupEvent;
import org.openide.util.LookupListener;
/**
* ChildFactory which creates the different components which are visible in the
* palette.
* <p>
* This factory uses the other {@link org.openide.nodes.ChildFactory} classes to
* create the separate children. At the moment only a factory for hubs is used
* and added as a category.
* <p>
* To add more categories to the palette simply instantiate a new ChildFactory
* in the createKeys method and add it to the list of AbstractRootNodes. Than
* the new category will be displayed in the palette.
*
* @author Sebastiaan Heijmann
*/
public class CategoryChildFactory extends ChildFactory<AbstractRootNode>
implements LookupListener {
private HubChildFactory hubFactory;
private LegTypeChildFactory legFactory;
private ProcedureChildFactory procedureFactory;
private EventChildFactory eventFactory;
private final Result<Hub> lookupResult;
/**
* Constructor creates a new CategoryChildFactory and attaches
* {@link org.openide.util.LookupListener} on the child factories to listen
* for changes in the data models.
*/
public CategoryChildFactory() {
hubFactory = new HubChildFactory();
lookupResult = hubFactory.getLookup().lookupResult(Hub.class);
lookupResult.addLookupListener(this);
}
@Override
protected boolean createKeys(List<AbstractRootNode> list) {
try {
//Hub
hubFactory = new HubChildFactory();
Children hubChildren = Children.create(hubFactory, false);
AbstractRootNode hubRootNode = new HubRootNode(hubChildren);
hubRootNode.setDisplayName("Hub templates");
list.add(hubRootNode);
//Leg
legFactory = new LegTypeChildFactory();
Children legChildren = Children.create(legFactory, false);
AbstractRootNode legRootNode = new LegTypeRootNode(legChildren);
legRootNode.setDisplayName("Leg templates");
list.add(legRootNode);
//Procedure
procedureFactory = new ProcedureChildFactory();
Children procedureChildren = Children.create(procedureFactory, false);
AbstractRootNode procedureRootNode = new ProcedureCategoryRootNode(procedureChildren);
procedureRootNode.setDisplayName("Procedures");
list.add(procedureRootNode);
//Event
eventFactory = new EventChildFactory();
Children eventChildren = Children.create(eventFactory, false);
AbstractRootNode eventRootNode = new EventRootNode(eventChildren);
eventRootNode.setDisplayName("Events");
list.add(eventRootNode);
} catch (ServiceNotFoundException ex) {
Exceptions.printStackTrace(ex);
}
return true;
}
@Override
protected AbstractRootNode createNodeForKey(AbstractRootNode key) {
return key;
}
@Override
public void resultChanged(LookupEvent ev) {
refresh(true);
}
}