// Path: src/main/java/org/jboss/forge/plugin/idea/ui/component/ForgeComponent.java
// public abstract class ForgeComponent
// {
//     private static final String NOTE_CLIENT_PROPERTY_KEY = "forge.note";
// 
//     protected ValueChangeListener valueChangeListener;
// 
//     protected ConverterFactory converterFactory = ForgeService.getInstance().getConverterFactory();
// 
//     public abstract void buildUI(Container container);
// 
//     /**
//      * Displays validation messages.
//      */
//     public void displayMessages(java.util.List<UIMessage> messages)
//     {
//         for (UIMessage message : messages)
//         {
//             if (message.getSeverity().equals(UIMessage.Severity.ERROR))
//             {
//                 setErrorMessage(message);
//                 return;
//             }
//         }
//         clearErrorMessage();
//     }
// 
//     public void setErrorMessage(UIMessage message)
//     {
//     }
// 
//     public void clearErrorMessage()
//     {
//     }
// 
//     public void setValueChangeListener(ValueChangeListener valueChangeListener)
//     {
//         this.valueChangeListener = valueChangeListener;
//     }
// 
//     public abstract void updateState();
// 
//     protected JLabel addNoteLabel(Container parent, JComponent component) {
//         final JBLabel noteLabel = new JBLabel(UIUtil.ComponentStyle.SMALL);
//         // Hide empty labels
//         noteLabel.addPropertyChangeListener("text", (PropertyChangeListener) evt -> noteLabel.setVisible(!Strings.isNullOrEmpty(noteLabel.getText())));
//         noteLabel.setAnchor(component);
//         parent.add(noteLabel,"skip 1,hidemode 2");
//         component.putClientProperty(NOTE_CLIENT_PROPERTY_KEY, noteLabel);
//         return noteLabel;
//     }
// 
//     protected void updateNote(JComponent component, String note) {
//         JLabel noteLabel = (JLabel) component.getClientProperty(NOTE_CLIENT_PROPERTY_KEY);
//         if (noteLabel != null) {
//             noteLabel.setText(note);
//         }
//     }
// 
// }
// 
// Path: src/main/java/org/jboss/forge/plugin/idea/ui/wizard/ForgeWizardModel.java
// public class ForgeWizardModel extends WizardModel
// {
//    private ForgeWizardDialog dialog;
// 
//    public ForgeWizardModel(CommandController originalController)
//    {
//       super(originalController.getMetadata().getName());
// 
//       ForgeWizardStep step = new ForgeWizardStep(this, originalController);
//       add(step);
//       step.refreshNavigationState();
//    }
// 
//    public ForgeWizardDialog getDialog()
//    {
//       return dialog;
//    }
// 
//    public void setDialog(ForgeWizardDialog dialog)
//    {
//       this.dialog = dialog;
//    }
// }
// 
// Path: src/main/java/org/jboss/forge/plugin/idea/ui/wizard/NavigationState.java
// public class NavigationState
// {
// 
//     private final ForgeWizardModel model;
//     private final CommandController controller;
// 
//     public NavigationState(ForgeWizardModel model, CommandController controller)
//     {
//         this.model = model;
//         this.controller = controller;
//     }
// 
//     public void refreshNavigationState()
//     {
//         WizardNavigationState navigationState = model.getCurrentNavigationState();
// 
//         navigationState.CANCEL.setEnabled(true);
//         navigationState.PREVIOUS.setEnabled(isPreviousEnabled());
//         navigationState.NEXT.setEnabled(isNextEnabled());
//         navigationState.FINISH.setEnabled(isFinishEnabled());
// 
//         if (model.getDialog() != null)
//         {
//             model.getDialog().refreshTitle();
//         }
//     }
// 
//     public boolean isPreviousEnabled()
//     {
//         if (!isWizardController())
//         {
//             return false;
//         }
// 
//         return getWizardCommandController().canMoveToPreviousStep();
//     }
// 
//     public boolean isNextEnabled()
//     {
//         if (!isWizardController())
//         {
//             return false;
//         }
// 
//         return getWizardCommandController().canMoveToNextStep();
//     }
// 
//     public boolean isWizardController()
//     {
//         return controller instanceof WizardCommandController;
//     }
// 
//     public boolean isFinishEnabled()
//     {
//         return controller.canExecute();
//     }
// 
//     public WizardCommandController getWizardCommandController()
//     {
//         return (WizardCommandController) controller;
//     }
// 
//     public CommandController getController()
//     {
//         return controller;
//     }
// }


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jboss.forge.addon.ui.input.InputComponent;
import org.jboss.forge.addon.ui.output.UIMessage;
import org.jboss.forge.plugin.idea.ui.component.ForgeComponent;
import org.jboss.forge.plugin.idea.ui.wizard.ForgeWizardModel;
import org.jboss.forge.plugin.idea.ui.wizard.NavigationState;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
/*
 * Copyright 2014 Red Hat, Inc. and/or its affiliates.
 *
 * Licensed under the Eclipse Public License version 1.0, available at
 * http://www.eclipse.org/legal/epl-v10.html
 */

package org.jboss.forge.plugin.idea.ui.listeners;




/**
 * @author <a href="mailto:danielsoro@gmail.com">Daniel Cunha (soro)</a>
 */
public class ValueChangeListener implements Runnable
{
   private final ForgeWizardModel model;
   private final Map<String, ForgeComponent> components;
   private final NavigationState navigationState;

   public ValueChangeListener(ForgeWizardModel model, Map<String, ForgeComponent> components,
// Path: src/main/java/org/jboss/forge/plugin/idea/ui/component/ForgeComponent.java
// public abstract class ForgeComponent
// {
//     private static final String NOTE_CLIENT_PROPERTY_KEY = "forge.note";
// 
//     protected ValueChangeListener valueChangeListener;
// 
//     protected ConverterFactory converterFactory = ForgeService.getInstance().getConverterFactory();
// 
//     public abstract void buildUI(Container container);
// 
//     /**
//      * Displays validation messages.
//      */
//     public void displayMessages(java.util.List<UIMessage> messages)
//     {
//         for (UIMessage message : messages)
//         {
//             if (message.getSeverity().equals(UIMessage.Severity.ERROR))
//             {
//                 setErrorMessage(message);
//                 return;
//             }
//         }
//         clearErrorMessage();
//     }
// 
//     public void setErrorMessage(UIMessage message)
//     {
//     }
// 
//     public void clearErrorMessage()
//     {
//     }
// 
//     public void setValueChangeListener(ValueChangeListener valueChangeListener)
//     {
//         this.valueChangeListener = valueChangeListener;
//     }
// 
//     public abstract void updateState();
// 
//     protected JLabel addNoteLabel(Container parent, JComponent component) {
//         final JBLabel noteLabel = new JBLabel(UIUtil.ComponentStyle.SMALL);
//         // Hide empty labels
//         noteLabel.addPropertyChangeListener("text", (PropertyChangeListener) evt -> noteLabel.setVisible(!Strings.isNullOrEmpty(noteLabel.getText())));
//         noteLabel.setAnchor(component);
//         parent.add(noteLabel,"skip 1,hidemode 2");
//         component.putClientProperty(NOTE_CLIENT_PROPERTY_KEY, noteLabel);
//         return noteLabel;
//     }
// 
//     protected void updateNote(JComponent component, String note) {
//         JLabel noteLabel = (JLabel) component.getClientProperty(NOTE_CLIENT_PROPERTY_KEY);
//         if (noteLabel != null) {
//             noteLabel.setText(note);
//         }
//     }
// 
// }
// 
// Path: src/main/java/org/jboss/forge/plugin/idea/ui/wizard/ForgeWizardModel.java
// public class ForgeWizardModel extends WizardModel
// {
//    private ForgeWizardDialog dialog;
// 
//    public ForgeWizardModel(CommandController originalController)
//    {
//       super(originalController.getMetadata().getName());
// 
//       ForgeWizardStep step = new ForgeWizardStep(this, originalController);
//       add(step);
//       step.refreshNavigationState();
//    }
// 
//    public ForgeWizardDialog getDialog()
//    {
//       return dialog;
//    }
// 
//    public void setDialog(ForgeWizardDialog dialog)
//    {
//       this.dialog = dialog;
//    }
// }
// 
// Path: src/main/java/org/jboss/forge/plugin/idea/ui/wizard/NavigationState.java
// public class NavigationState
// {
// 
//     private final ForgeWizardModel model;
//     private final CommandController controller;
// 
//     public NavigationState(ForgeWizardModel model, CommandController controller)
//     {
//         this.model = model;
//         this.controller = controller;
//     }
// 
//     public void refreshNavigationState()
//     {
//         WizardNavigationState navigationState = model.getCurrentNavigationState();
// 
//         navigationState.CANCEL.setEnabled(true);
//         navigationState.PREVIOUS.setEnabled(isPreviousEnabled());
//         navigationState.NEXT.setEnabled(isNextEnabled());
//         navigationState.FINISH.setEnabled(isFinishEnabled());
// 
//         if (model.getDialog() != null)
//         {
//             model.getDialog().refreshTitle();
//         }
//     }
// 
//     public boolean isPreviousEnabled()
//     {
//         if (!isWizardController())
//         {
//             return false;
//         }
// 
//         return getWizardCommandController().canMoveToPreviousStep();
//     }
// 
//     public boolean isNextEnabled()
//     {
//         if (!isWizardController())
//         {
//             return false;
//         }
// 
//         return getWizardCommandController().canMoveToNextStep();
//     }
// 
//     public boolean isWizardController()
//     {
//         return controller instanceof WizardCommandController;
//     }
// 
//     public boolean isFinishEnabled()
//     {
//         return controller.canExecute();
//     }
// 
//     public WizardCommandController getWizardCommandController()
//     {
//         return (WizardCommandController) controller;
//     }
// 
//     public CommandController getController()
//     {
//         return controller;
//     }
// }


// Path: src/main/java/org/jboss/forge/plugin/idea/ui/listeners/ValueChangeListener.java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jboss.forge.addon.ui.input.InputComponent;
import org.jboss.forge.addon.ui.output.UIMessage;
import org.jboss.forge.plugin.idea.ui.component.ForgeComponent;
import org.jboss.forge.plugin.idea.ui.wizard.ForgeWizardModel;
import org.jboss.forge.plugin.idea.ui.wizard.NavigationState;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;

/*
 * Copyright 2014 Red Hat, Inc. and/or its affiliates.
 *
 * Licensed under the Eclipse Public License version 1.0, available at
 * http://www.eclipse.org/legal/epl-v10.html
 */

package org.jboss.forge.plugin.idea.ui.listeners;




/**
 * @author <a href="mailto:danielsoro@gmail.com">Daniel Cunha (soro)</a>
 */
public class ValueChangeListener implements Runnable
{
   private final ForgeWizardModel model;
   private final Map<String, ForgeComponent> components;
   private final NavigationState navigationState;

   public ValueChangeListener(ForgeWizardModel model, Map<String, ForgeComponent> components,
            NavigationState navigationState)