package org.vaadin.mideaas.frontend; import java.util.HashMap; import org.vaadin.aceeditor.AceMode; import org.vaadin.aceeditor.SuggestionExtension; import org.vaadin.mideaas.editor.AsyncErrorChecker; import org.vaadin.mideaas.editor.MultiUserEditor; import org.vaadin.mideaas.java.JavaErrorChecker; import org.vaadin.mideaas.java.JavaSuggester; import org.vaadin.mideaas.model.SharedProject; import org.vaadin.mideaas.model.SharedView; import org.vaadin.mideaas.model.User; import com.vaadin.ui.Component; import com.vaadin.ui.TabSheet; @SuppressWarnings("serial") public class MideaasComponentEditor extends TabSheet implements ClaraEditor.ClaraEditorListener { public enum EditingMode { NONE, //VISUAL, CLARA, CONTROLLER, TEST } private final ClaraEditor claraEditor; private final MultiUserEditor controllerEditor; final private SharedView comp; private HashMap<Component, EditingMode> modeByTab = new HashMap<Component, EditingMode>(); private HashMap<EditingMode, Component> tabByMode = new HashMap<EditingMode, Component>(); private EditingMode mode; private boolean testingEnabled; public MideaasComponentEditor(User user, SharedView comp, SharedProject project) { this.comp = comp; setSizeFull(); claraEditor = new ClaraEditor(user, comp.getModelMud()); claraEditor.setSizeFull(); controllerEditor = new MultiUserEditor(user.getEditorUser(), comp.getControllerMud()); controllerEditor.setMode(AceMode.java); controllerEditor.setTitle(comp.getName()); AsyncErrorChecker ch = new JavaErrorChecker( comp.getControllerFullName(), project.getCompiler()); controllerEditor.setErrorChecker(ch); JavaSuggester sugger = new JavaSuggester(project.getCompiler().getInMemoryCompiler(), comp.getControllerFullName(), comp.getControllerMud()); controllerEditor.setSuggestionExtension(new SuggestionExtension(sugger)); controllerEditor.setSizeFull(); // if (testingEnabled) { // testEditor = new MideaasTest("Tests"); // testEditor.setSizeFull(); // } init(); } @Override public void attach() { super.attach(); claraEditor.addClaraEditorListener(this); } private void init() { addTab(EditingMode.CONTROLLER, controllerEditor, "Code"); addTab(EditingMode.CLARA, claraEditor, "Layout"); // if (testingEnabled) { // addTab(EditingMode.TEST, testEditor, "Tests"); // } addSelectedTabChangeListener(new SelectedTabChangeListener() { public void selectedTabChange(SelectedTabChangeEvent event) { EditingMode newMode = modeByTab.get(getSelectedTab()); if (mode == newMode) { return; } mode = newMode; } }); mode = EditingMode.CONTROLLER; } public void addTab(EditingMode mode, Component component, String caption) { addTab(component, caption); modeByTab.put(component, mode); tabByMode.put(mode, component); } public void setSelectedTab(EditingMode mode) { if (mode == EditingMode.CONTROLLER) { setSelectedTab(controllerEditor); } else if (mode == EditingMode.CLARA) { setSelectedTab(claraEditor); // } else if (mode == EditingMode.TEST) { // setSelectedTab(testEditor); } // Doing what super.setSelectedTab does when not available: nothing. } @Override public void goToDefinition(String id, String className) { comp.ensureClaraFieldExists(id, className); setSelectedTab(EditingMode.CONTROLLER); } @Override public void goToHandler(String id, String cls, String todo) { comp.ensureClaraHandlerExists(id, cls, "TODO: "+todo); setSelectedTab(EditingMode.CONTROLLER); } @Override public void setDataSource(String id, String cls, String todo) { comp.ensureDataSource(id, cls, "TODO: "+todo); setSelectedTab(EditingMode.CONTROLLER); } public void setTestingEnabled(boolean enabled) { // TODO: what if changing this after the editor has already been created... testingEnabled = enabled; } }