package nl.fontys.sofa.limo.view.node.bean;
import java.awt.event.ActionEvent;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JOptionPane;
import nl.fontys.sofa.limo.api.service.provider.HubTypeService;
import nl.fontys.sofa.limo.domain.component.Icon;
import nl.fontys.sofa.limo.domain.component.type.HubType;
import nl.fontys.sofa.limo.view.node.property.StupidProperty;
import nl.fontys.sofa.limo.view.node.property.editor.EventPropertyEditor;
import nl.fontys.sofa.limo.view.node.property.editor.ProcedurePropertyEditor;
import nl.fontys.sofa.limo.view.util.LIMOResourceBundle;
import nl.fontys.sofa.limo.view.wizard.types.hub.HubTypeWizardAction;
import org.openide.ErrorManager;
import org.openide.nodes.Sheet;
import org.openide.util.Lookup;
/**
* View representation of HubType.
*
* @author Sebastiaan Heijmann
*/
public class HubTypeNode extends AbstractBeanNode<HubType> {
/**
* constructor for HubTypeNode, adds the bean to the instancecontent.
*
* @param bean
* @throws IntrospectionException
*/
public HubTypeNode(HubType bean) throws IntrospectionException {
super(bean, HubType.class);
this.bean = bean;
}
@Override
public Action[] getActions(boolean context) {
ArrayList<Action> actionList = new ArrayList<>();
actionList.add(new AbstractAction(LIMOResourceBundle.getString("EDIT")) {
@Override
public void actionPerformed(ActionEvent e) {
HubTypeWizardAction wiz = new HubTypeWizardAction();
wiz.setUpdate(bean);
wiz.actionPerformed(e);
createProperties(getBean(), null);
setSheet(getSheet());
}
});
actionList.add(new AbstractAction(LIMOResourceBundle.getString("DELETE")) {
@Override
public void actionPerformed(ActionEvent e) {
int reply = JOptionPane.showConfirmDialog(null, LIMOResourceBundle.getString("DELETE_QUESTION", bean.getName()), LIMOResourceBundle.getString("ARE_YOU_SURE"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
if (reply == JOptionPane.YES_OPTION) {
HubTypeService service = Lookup.getDefault().lookup(HubTypeService.class);
service.delete(bean);
}
}
});
return actionList.toArray(new Action[actionList.size()]);
}
@Override
protected void createProperties(HubType bean, BeanInfo info) {
Sheet sets = getSheet();
Sheet.Set set = super.getBaseEntityPropertySheet();
try {
StupidProperty eventProp = new StupidProperty(getBean(), List.class, "events");
eventProp.addPropertyChangeListener(getListener());
eventProp.setPropertyEditorClass(EventPropertyEditor.class);
eventProp.setDisplayName(LIMOResourceBundle.getString("EVENTS"));
eventProp.setShortDescription(LIMOResourceBundle.getString("EVENTS_OF", LIMOResourceBundle.getString("HUB_TYPE")));
eventProp.setValue("canEditAsText", false);
StupidProperty procedureProp = new StupidProperty(getBean(), List.class, "procedures");
procedureProp.addPropertyChangeListener(getListener());
procedureProp.setPropertyEditorClass(ProcedurePropertyEditor.class);
procedureProp.setDisplayName(LIMOResourceBundle.getString("PROCEDURES"));
procedureProp.setShortDescription(LIMOResourceBundle.getString("PROCEDURES_OF", LIMOResourceBundle.getString("HUB_TYPE")));
procedureProp.setValue("canEditAsText", false);
set.put(procedureProp);
set.put(eventProp);
} catch (NoSuchMethodException ex) {
ErrorManager.getDefault();
}
sets.put(set);
}
@Override
public AbstractBeanNode getDetachedNodeCopy() {
throw new UnsupportedOperationException(LIMOResourceBundle.getString("COPY_NOT_SUPPORTED"));
}
@Override
Class getServiceClass() {
return HubTypeService.class;
}
@Override
protected Icon getBeanIcon() {
return getBean().getIcon();
}
@Override
public void delete() {
HubTypeService service = Lookup.getDefault().lookup(HubTypeService.class);
service.delete(bean);
}
}