package com.yoursway.ide.application.controllers; import java.io.File; import org.eclipse.core.databinding.observable.Realm; import com.yoursway.ide.application.controllers.mainwindow.MainWindowController; import com.yoursway.ide.application.model.Project; import com.yoursway.ide.application.model.application.ApplicationModel; import com.yoursway.ide.application.model.application.ApplicationModelListener; import com.yoursway.ide.application.model.application.ProjectAdditionReason; import com.yoursway.ide.application.view.application.ApplicationPresentation; import com.yoursway.ide.application.view.application.ApplicationPresentationCallback; import com.yoursway.ide.application.view.application.ApplicationPresentationFactory; import com.yoursway.ide.application.view.impl.ApplicationCommands; import com.yoursway.ide.application.view.impl.commands.Command; import com.yoursway.ide.application.view.impl.commands.Handler; import com.yoursway.ide.platforms.api.PlatformSupport; import com.yoursway.utils.bugs.Bugs; import com.yoursway.utils.bugs.Severity; public class ApplicationController extends AbstractController implements ApplicationPresentationCallback, ApplicationModelListener { private final ApplicationModel model; private final ApplicationPresentation presentation; private final PlatformSupport platformSupport; private final Context context; private final EditorRegistry editorRegistry; private ViewRegistry2 viewRegistry; public ApplicationController(PlatformSupport platformSupport, ApplicationModel model, ApplicationPresentationFactory presentationFactory, EditorRegistry editorRegistry, ViewRegistry viewRegistry) { if (platformSupport == null) throw new NullPointerException("platformSupport is null"); if (model == null) throw new NullPointerException("model is null"); if (presentationFactory == null) throw new NullPointerException("presentationFactory is null"); if (editorRegistry == null) throw new NullPointerException("editorRegistry is null"); this.platformSupport = platformSupport; this.model = model; this.context = new Context(this); this.presentation = presentationFactory.createPresentation(this); this.editorRegistry = editorRegistry; this.viewRegistry = viewRegistry.instantiate(presentation.viewDefinitions()); model.addListener(this); // registry hook(); } private void hook() { context.addHandler(new ApplicationCommands.OpenProjectCommand(), new Handler() { public boolean run(Command command) { File file = presentation.chooseProjectToOpen(); if (file != null) { try { model.openProject(file); } catch (Throwable e) { Bugs.unknownErrorRecovery(Severity.USER_COMMAND_IGNORED, e); presentation.displayFailedToOpenProjectError(file); } } return true; } }); } public void run() { Realm.runWithDefault(presentation.getDefaultBindingRealm(), new Runnable() { public void run() { doRun(); } }); } void doRun() { // model.createProject(model.getRegisteredProjectTypes().iterator().next()); File location = new File(platformSupport.defaultProjectsLocation(), "default-yside-project"); location.mkdirs(); model.openProject(location); presentation.runEventLoop(); } public void projectAdded(Project project, ProjectAdditionReason reason) { new MainWindowController(project, presentation, context, viewRegistry, editorRegistry); } public void execute(Command command) { context.execute(command); } public void openProject() { } }