package org.docear.plugin.services.features.update.action;
import java.awt.event.ActionEvent;
import java.net.URI;
import org.docear.plugin.core.DocearController;
import org.docear.plugin.core.Version;
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.services.ServiceController;
import org.docear.plugin.services.features.update.UpdateCheck;
import org.docear.plugin.services.features.update.view.UpdateCheckerDialogPanel;
import org.freeplane.core.ui.AFreeplaneAction;
import org.freeplane.core.ui.components.UITools;
import org.freeplane.core.util.LogUtils;
import org.freeplane.features.mode.Controller;
public class DocearUpdateCheckAction extends AFreeplaneAction {
public static final String KEY = "UpdateCheckAction";
private static final long serialVersionUID = 1L;
/***********************************************************************************
* CONSTRUCTORS
**********************************************************************************/
public DocearUpdateCheckAction() {
super(KEY);
}
/***********************************************************************************
* METHODS
* @param latestVersionString
**********************************************************************************/
public static void showDialog(final Version runningVersion, final Version latestVersion) {
final String latestVersionString = latestVersion.toString();
new Thread(new Runnable() {
public void run() {
try {
UpdateCheckerDialogPanel updateAvailablePage = new UpdateCheckerDialogPanel("", runningVersion.toString(), latestVersionString, latestVersion.getStatus());
Wizard wizard = initWizard(updateAvailablePage);
//JOptionPane.showMessageDialog(UITools.getFrame(), dialogPanel, TextUtils.getText("docear.version.check.title"), JOptionPane.INFORMATION_MESSAGE);
//DocearController.getPropertiesController().setProperty("docear.update_checker.options", dialogPanel.getChoice());
int choice = wizard.show();
if(choice == Wizard.OK_OPTION) {
String uri = null;
if (latestVersion.getStatus().equals(Version.StatusName.devel.name())) {
uri = "http://www.docear.org/support/forums/docear-support-forums-group3/experimental-releases-forum8/";
}
else {
uri = "http://www.docear.org/software/download/";
}
Controller.getCurrentController().getViewController().openDocument(new URI(uri));
}
if(choice == Wizard.SKIP_OPTION) {
//don't show the same version again
DocearController.getPropertiesController().setProperty("docer.update_checker.savedLatestVersion", latestVersionString);
}
}
catch (Exception e) {
LogUtils.warn("org.docear.plugin.services.features.update.action.DocearUpdateCheckAction.showDialog(...).new Runnable() {...}.run(): "+e.getMessage());
}
}
}).start();
}
private static Wizard initWizard(UpdateCheckerDialogPanel page) {
final Wizard wizard = new Wizard(UITools.getFrame());
WizardPageDescriptor desc = new WizardPageDescriptor("page", page) {
@Override
public WizardPageDescriptor getNextPageDescriptor(WizardSession context) {
return Wizard.FINISH_PAGE;
}
@Override
public WizardPageDescriptor getBackPageDescriptor(WizardSession context) {
wizard.skipAll();
return null;
}
@Override
public WizardPageDescriptor getSkipPageDescriptor(WizardSession context) {
wizard.cancel();
return null;
}
};
wizard.registerWizardPanel(desc);
wizard.setStartPage(desc.getIdentifier());
return wizard;
}
/***********************************************************************************
* REQUIRED METHODS FOR INTERFACES
**********************************************************************************/
public void actionPerformed(ActionEvent e) {
DocearController.getController().getEventQueue().invoke(new Runnable() {
public void run() {
ServiceController.getFeature(UpdateCheck.class).checkForUpdates(true);
}
});
}
}