package nl.fontys.sofa.limo.view.wizard.leg.scheduled; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List; import javax.swing.JComponent; import nl.fontys.sofa.limo.api.service.status.StatusBarService; import nl.fontys.sofa.limo.domain.component.leg.ScheduledLeg; import nl.fontys.sofa.limo.view.util.LIMOResourceBundle; import nl.fontys.sofa.limo.view.wizard.leg.multimode.MultimodeLegTablePanel; import nl.fontys.sofa.limo.view.wizard.leg.normal.EventLegTypeWizard; import nl.fontys.sofa.limo.view.wizard.leg.normal.ProceduresLegTypeWizard; import org.openide.DialogDisplayer; import org.openide.WizardDescriptor; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; /** * Wizard Action for ScheduledLeg. * * @author Pascal Lindner */ public final class ScheduledLegWizardAction implements ActionListener { private MultimodeLegTablePanel.FinishedScheduledLegListener legListener; private ScheduledLeg originalLeg, leg; private boolean update; public ScheduledLegWizardAction(MultimodeLegTablePanel.FinishedScheduledLegListener legListener) { this.legListener = legListener; this.originalLeg = new ScheduledLeg(); } public ScheduledLegWizardAction() { originalLeg = new ScheduledLeg(); } @Override public void actionPerformed(ActionEvent e) { List<WizardDescriptor.Panel<WizardDescriptor>> panels = new ArrayList<>(); if (!update) { this.leg = new ScheduledLeg(); } else { this.leg = new ScheduledLeg(originalLeg); //Creates a new leg with the same attributes. This way the original leg object keeped ontouched. } panels.add(new NameDescriptionIconLegPanel()); panels.add(new ScheduledLegWizard()); panels.add(new ProceduresLegTypeWizard()); panels.add(new EventLegTypeWizard()); String[] steps = new String[panels.size()]; for (int i = 0; i < panels.size(); i++) { Component c = panels.get(i).getComponent(); steps[i] = c.getName(); if (c instanceof JComponent) { // assume Swing components JComponent jc = (JComponent) c; jc.putClientProperty(WizardDescriptor.PROP_CONTENT_SELECTED_INDEX, i); jc.putClientProperty(WizardDescriptor.PROP_CONTENT_DATA, steps); jc.putClientProperty(WizardDescriptor.PROP_AUTO_WIZARD_STYLE, true); jc.putClientProperty(WizardDescriptor.PROP_CONTENT_DISPLAYED, true); jc.putClientProperty(WizardDescriptor.PROP_CONTENT_NUMBERED, true); } } WizardDescriptor wiz = new WizardDescriptor(new WizardDescriptor.ArrayIterator<>(panels)); wiz.setTitleFormat(new MessageFormat("{0}")); wiz.putProperty(WizardDescriptor.PROP_IMAGE, ImageUtilities.loadImage("icons/limo_wizard.png", true)); wiz.setTitle(LIMOResourceBundle.getString("SCHEDULED_LEG")); wiz.putProperty("leg", leg); wiz.putProperty("original_leg", originalLeg); if (DialogDisplayer.getDefault().notify(wiz) == WizardDescriptor.FINISH_OPTION) { leg = (ScheduledLeg) wiz.getProperty("leg"); originalLeg.deepOverwrite(leg); if (legListener != null) { legListener.finishedLeg(originalLeg); Lookup.getDefault().lookup(StatusBarService.class).setMessage(LIMOResourceBundle.getString("SCHEDULED_LEG"), StatusBarService.ACTION_CREATE, StatusBarService.STATE_SUCCESS, null); } } } public void setUpdate(ScheduledLeg leg) { this.originalLeg = leg; update = true; } }