package nl.fontys.sofa.limo.view.node.factory; import java.awt.Image; import java.awt.image.BufferedImage; import java.beans.IntrospectionException; import java.beans.PropertyChangeEvent; import java.util.List; import nl.fontys.sofa.limo.api.service.provider.LegTypeService; import nl.fontys.sofa.limo.domain.component.Icon; import nl.fontys.sofa.limo.domain.component.type.LegType; import nl.fontys.sofa.limo.view.node.bean.LegTypeNode; import nl.fontys.sofa.limo.view.util.IconUtil; import org.openide.nodes.BeanNode; import org.openide.nodes.ChildFactory; import org.openide.nodes.Node; import org.openide.nodes.NodeEvent; import org.openide.nodes.NodeListener; import org.openide.nodes.NodeMemberEvent; import org.openide.nodes.NodeReorderEvent; import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.Lookup.Result; import org.openide.util.LookupEvent; import org.openide.util.LookupListener; /** * Factory responsible for creating the LegType children. It listens to changes * in the service layer and in the nodes. * * @author Sebastiaan Heijmann */ public class LegTypeChildFactory extends ChildFactory<LegType> implements LookupListener, NodeListener { private final Result<LegType> lookupResult; private final LegTypeService service; public static final LegType MULTIMODE_LEGTYPE = new LegType(); public static final LegType SCHEDULED_LEGTYPE = new LegType(); /** * Constructor creates a new LegTypeChildFactory and attaches * {@link org.openide.util.LookupListener} on the child factories to listen * for changes in the data models. */ public LegTypeChildFactory() { service = Lookup.getDefault().lookup(LegTypeService.class); lookupResult = service.getLookup().lookupResult(LegType.class); lookupResult.addLookupListener(this); } @Override protected boolean createKeys(List<LegType> list) { list.addAll(lookupResult.allInstances()); MULTIMODE_LEGTYPE.setName("Multi Leg"); Image image = IconUtil.getIcon(LegType.class, 2); Icon newIcon = new Icon((BufferedImage) image, "png"); MULTIMODE_LEGTYPE.setIcon(newIcon); SCHEDULED_LEGTYPE.setName("Scheduled Leg"); SCHEDULED_LEGTYPE.setIcon(newIcon); list.add(MULTIMODE_LEGTYPE); list.add(SCHEDULED_LEGTYPE); return true; } @Override protected Node createNodeForKey(LegType key) { BeanNode node = null; try { node = new LegTypeNode(key); node.addNodeListener(this); } catch (IntrospectionException ex) { Exceptions.printStackTrace(ex); } return node; } @Override public void resultChanged(LookupEvent ev) { refresh(true); } @Override public void nodeDestroyed(NodeEvent ne) { refresh(true); } @Override public void childrenAdded(NodeMemberEvent ev) { } @Override public void childrenRemoved(NodeMemberEvent ev) { } @Override public void childrenReordered(NodeReorderEvent ev) { } @Override public void propertyChange(PropertyChangeEvent pce) { } }