package org.docear.plugin.services.features.setup.action; import java.awt.Dimension; import java.awt.event.ActionEvent; import org.docear.plugin.core.DocearController; import org.docear.plugin.core.ui.CreateProjectPagePanel; import org.docear.plugin.core.ui.ImportProjectPagePanel; import org.docear.plugin.core.ui.wizard.Wizard; import org.docear.plugin.core.ui.wizard.WizardSession; import org.docear.plugin.core.ui.wizard.WizardPageDescriptor; import org.docear.plugin.core.workspace.actions.DocearImportProjectAction; import org.docear.plugin.core.workspace.actions.DocearNewProjectAction; import org.docear.plugin.core.workspace.model.DocearWorkspaceProject; import org.docear.plugin.services.ServiceController; import org.docear.plugin.services.features.setup.view.RegistrationPagePanel; import org.docear.plugin.services.features.setup.view.SecondPagePanel; import org.docear.plugin.services.features.setup.view.SecondPagePanel.DATA_OPTION; import org.docear.plugin.services.features.setup.view.StartPagePanel; import org.docear.plugin.services.features.setup.view.StartPagePanel.START_OPTION; import org.docear.plugin.services.features.setup.view.VerifyServicePagePanel; import org.docear.plugin.services.features.user.DocearLocalUser; import org.docear.plugin.services.features.user.DocearUser; import org.docear.plugin.services.features.user.DocearUserController; import org.docear.plugin.services.features.user.action.DocearUserLoginAction; import org.docear.plugin.services.features.user.action.DocearUserRegistrationAction; import org.freeplane.core.ui.AFreeplaneAction; import org.freeplane.core.ui.components.UITools; import org.freeplane.core.util.Compat; import org.freeplane.core.util.TextUtils; import org.freeplane.plugin.workspace.WorkspaceController; public class DocearSetupWizardAction extends AFreeplaneAction { private static final long serialVersionUID = 1L; public static final String KEY = "docear.setup.wizard.action"; /*********************************************************************************** * CONSTRUCTORS **********************************************************************************/ public DocearSetupWizardAction() { super(KEY); } /*********************************************************************************** * METHODS **********************************************************************************/ /*********************************************************************************** * REQUIRED METHODS FOR INTERFACES **********************************************************************************/ public void actionPerformed(ActionEvent e) { startWizard(false); } public static void startWizard(boolean exitOnCancel) { Wizard wiz = new Wizard(UITools.getFrame()); initWizard(wiz); if(!Compat.isWindowsOS()) { UITools.backOtherWindows(); } int ret = wiz.show(); if(ret == Wizard.OK_OPTION) { if(wiz.getSession().get(DocearLocalUser.class) != null) { DocearUserController.LOCAL_USER.activate(); } else { wiz.getSession().get(DocearUser.class).activate(); } DocearWorkspaceProject project = wiz.getSession().get(DocearWorkspaceProject.class); if(project != null) { if(wiz.getSession().get(START_OPTION.class) == START_OPTION.REGISTRATION || wiz.getSession().get(DATA_OPTION.class) == DATA_OPTION.CREATE) { DocearNewProjectAction.createProject(project); } else if(wiz.getSession().get(DATA_OPTION.class) == DATA_OPTION.IMPORT) { DocearImportProjectAction.importProject(project); } } WorkspaceController.save(); DocearController.getPropertiesController().saveProperties(); } else { if(exitOnCancel) { System.exit(0); } } } private static void initWizard(final Wizard wizard) { //first page WizardPageDescriptor desc = new WizardPageDescriptor("page.first", new StartPagePanel()) { public WizardPageDescriptor getNextPageDescriptor(WizardSession context) { if(StartPagePanel.START_OPTION.LOGIN.equals(context.get(StartPagePanel.START_OPTION.class))) { return context.getModel().getPage("page.verify.login"); } context.set(DocearUser.class, new DocearUser()); return context.getModel().getPage("page.registration"); } @Override public WizardPageDescriptor getBackPageDescriptor(WizardSession context) { context.set(DocearLocalUser.class, DocearUserController.LOCAL_USER); context.getTraversalLog().add(this); return context.getModel().getPage("page.second"); } }; desc.getPage().setPreferredSize(new Dimension(640,480)); wizard.registerWizardPanel(desc); DocearUser user = ServiceController.getCurrentUser(); wizard.getSession().set(DocearUser.class, user); wizard.setStartPage(desc.getIdentifier()); //login verification desc = new WizardPageDescriptor("page.verify.login", new VerifyServicePagePanel("Log-In", DocearUserLoginAction.getLoginVerificationTask(), true)) { public WizardPageDescriptor getNextPageDescriptor(WizardSession context) { return context.getModel().getPage("page.second"); } }; desc.getPage().setSkipOnBack(true); desc.getPage().setPreferredSize(new Dimension(640,480)); wizard.registerWizardPanel(desc); //registration page desc = new WizardPageDescriptor("page.registration", new RegistrationPagePanel()) { public WizardPageDescriptor getNextPageDescriptor(WizardSession context) { ((RegistrationPagePanel)getPage()).getUser(); return context.getModel().getPage("page.verify.registration"); } }; desc.getPage().setPreferredSize(new Dimension(640,480)); wizard.registerWizardPanel(desc); //registration verification desc = new WizardPageDescriptor("page.verify.registration", new VerifyServicePagePanel("Registration", DocearUserRegistrationAction.getRegistrationVerificationTask(), false)) { public WizardPageDescriptor getNextPageDescriptor(WizardSession context) { context.getTraversalLog().getPreviousPage(context); return context.getModel().getPage("page.project.create"); } @Override public WizardPageDescriptor getBackPageDescriptor(WizardSession context) { if(context.get(DocearUser.class).isNew()) { context.getTraversalLog().getPreviousPage(context); } return super.getBackPageDescriptor(context); } }; desc.getPage().setSkipOnBack(true); desc.getPage().setPreferredSize(new Dimension(640,480)); wizard.registerWizardPanel(desc); //choose further actions page desc = new WizardPageDescriptor("page.second", new SecondPagePanel()) { public WizardPageDescriptor getNextPageDescriptor(WizardSession context) { ((SecondPagePanel)getPage()).getUser(); if(DATA_OPTION.SYNCH.equals(context.get(DATA_OPTION.class))) { return context.getModel().getPage("page.project.synch"); } if(DATA_OPTION.CREATE.equals(context.get(DATA_OPTION.class))) { return context.getModel().getPage("page.project.create"); } if(DATA_OPTION.EMPTY.equals(context.get(DATA_OPTION.class))) { return Wizard.FINISH_PAGE; } return context.getModel().getPage("page.project.import"); } }; desc.getPage().setPreferredSize(new Dimension(640,480)); wizard.registerWizardPanel(desc); //TODO Service if(!DocearController.getController().isServiceAvailable()){ wizard.getSession().set(DocearLocalUser.class, DocearUserController.LOCAL_USER); wizard.setStartPage(desc.getIdentifier()); } //new project page desc = new WizardPageDescriptor("page.project.create", new CreateProjectPagePanel()) { public WizardPageDescriptor getNextPageDescriptor(WizardSession context) { context.set(DocearWorkspaceProject.class, ((CreateProjectPagePanel)getPage()).getProject()); return Wizard.FINISH_PAGE; } @Override public void aboutToDisplayPage(WizardSession context) { context.getNextButton().setText(TextUtils.getText("docear.setup.wizard.controls.finish")); super.aboutToDisplayPage(context); } }; desc.getPage().setPreferredSize(new Dimension(640,480)); wizard.registerWizardPanel(desc); //import project page desc = new WizardPageDescriptor("page.project.import", new ImportProjectPagePanel()) { public WizardPageDescriptor getNextPageDescriptor(WizardSession context) { context.set(DocearWorkspaceProject.class, ((ImportProjectPagePanel)getPage()).getProject()); return Wizard.FINISH_PAGE; } @Override public void aboutToDisplayPage(WizardSession context) { context.getNextButton().setText(TextUtils.getText("docear.setup.wizard.controls.finish")); super.aboutToDisplayPage(context); } }; desc.getPage().setPreferredSize(new Dimension(640,480)); wizard.registerWizardPanel(desc); } }