package org.vaadin.mideaas.app; import java.util.Arrays; import java.util.LinkedList; import org.vaadin.mideaas.model.ProjectFileUtils; import org.vaadin.mideaas.model.SharedProject; import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.event.FieldEvents.TextChangeListener; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.CheckBox; import com.vaadin.ui.Notification; import com.vaadin.ui.OptionGroup; import com.vaadin.ui.Panel; import com.vaadin.ui.TextField; import com.vaadin.ui.VerticalLayout; /** * The Class CreateProjectPanel. */ @SuppressWarnings("serial") public class CreateProjectPanel extends Panel { /** The project type group. */ //private OptionGroup projectTypeGroup = new OptionGroup("Project type:", // Arrays.asList(new String[] {"Vaadin","VaadinOSGi","VaadinAppEngine", "Python", "Generic"})); private OptionGroup projectTypeGroup = new OptionGroup("Project type:", Arrays.asList(new String[] {"Vaadin"})); /** The cnp button. */ private final Button cnpButton = new Button("Create Project");; /** The sk box. */ private final CheckBox skBox = new CheckBox("Create Application Skeleton"); /** * The listener interface for receiving projectCreated events. * The class that is interested in processing a projectCreated * event implements this interface, and the object created * with that class is registered with a component using the * component's <code>addProjectCreatedListener<code> method. When * the projectCreated event occurs, that object's appropriate * method is invoked. * * @see ProjectCreatedEvent */ public interface ProjectCreatedListener { /** * Invoked when project is created. * * @param p the p */ public void projectCreated(SharedProject p); } /** The listeners. */ private LinkedList<ProjectCreatedListener> listeners = new LinkedList<CreateProjectPanel.ProjectCreatedListener>(); /** The ui. */ private MideaasUI ui; /** * Instantiates a new creates the project panel. * * @param ui the ui */ public CreateProjectPanel(MideaasUI ui) { super("Create New Project"); //this.setWidth("100%"); this.setSizeFull(); this.ui = ui; init(); } /** * Inits the. */ private void init() { VerticalLayout la = new VerticalLayout(); final TextField tf = new TextField("Project name: (lower-case letters and numbers)"); tf.setImmediate(true); skBox.setValue(true); la.addComponent(tf); tf.addTextChangeListener(new TextChangeListener() { public void textChange(TextChangeEvent event) { cnpButton.setEnabled(ProjectFileUtils.isValidProjectName(event.getText())); }}); projectTypeGroup.select("Vaadin"); /* if (MideaasConfig.easiCloudsFeaturesTurnedOn()){ la.addComponent(projectTypeGroup); la.addComponent(skBox); }*/ initNewProjectButton(tf, skBox); cnpButton.setWidth("100%"); // setIcon(ICON); la.addComponent(cnpButton); this.setContent(la); } /** * New project. * * @param name the name */ private void newProject(String name) { if (ProjectFileUtils.isValidProjectName(name)) { // TODO: project type // String typeStr = (String)projectTypeGroup.getValue(); // ProjectType type; // if ("Vaadin".equals(typeStr)) { // type = ProjectType.vaadin; // } // else if ("VaadinOSGi".equals(typeStr)) { // type = ProjectType.vaadinOSGi; // } // else if ("VaadinAppEngine".equals(typeStr)) { // type = ProjectType.vaadinAppEngine; // } // else if ("Python".equals(typeStr)) { // type = ProjectType.python; // } // else { // type = ProjectType.generic; // } //ui.newProject(name,skBox.getValue()); ui.newProject(name,true); } else { Notification.show("Not a valid project name."); } } /** * Inits the new project button. * * @param tf the tf * @param skBox the sk box */ private void initNewProjectButton(final TextField tf, final CheckBox skBox) { cnpButton.setEnabled(false); cnpButton.addClickListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { String name = ((String)tf.getValue()).toLowerCase(); newProject(name); } }); } /** * Adds the listener. * * @param li the li */ public void addListener(ProjectCreatedListener li) { listeners.add(li); } }