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.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.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.leg.LegTypeWizardAction;
import org.openide.ErrorManager;
import org.openide.nodes.Sheet;
import org.openide.util.Lookup;
/**
* View representation of the LegType class.
*
* @author Sebastiaan Heijmann
*/
public class LegTypeNode extends AbstractBeanNode<LegType> {
/**
* constructor for LegTypeNode, adds the bean to the instancecontent.
*
* @param bean
* @throws IntrospectionException
*/
public LegTypeNode(LegType bean) throws IntrospectionException {
super(bean, LegType.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) {
LegTypeWizardAction wiz = new LegTypeWizardAction();
wiz.isUpdate(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) {
LegTypeService service = Lookup.getDefault().lookup(LegTypeService.class);
service.delete(bean);
}
}
});
return actionList.toArray(new Action[actionList.size()]);
}
@Override
protected void createProperties(LegType 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("LEG_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("LEG_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 LegTypeService.class;
}
@Override
protected Icon getBeanIcon() {
return getBean().getIcon();
}
@Override
public void delete() {
LegTypeService service = Lookup.getDefault().lookup(LegTypeService.class);
service.delete(bean);
}
}