/** * This file is part of Archiv-Editor. * * The software Archiv-Editor serves as a client user interface for working with * the Person Data Repository. See: pdr.bbaw.de * * The software Archiv-Editor was developed at the Berlin-Brandenburg Academy * of Sciences and Humanities, Jägerstr. 22/23, D-10117 Berlin. * www.bbaw.de * * Copyright (C) 2010-2013 Berlin-Brandenburg Academy * of Sciences and Humanities * * The software Archiv-Editor was developed by @author: Christoph Plutte. * * Archiv-Editor is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Archiv-Editor is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Archiv-Editor. * If not, see <http://www.gnu.org/licenses/lgpl-3.0.html>. */ package org.bbaw.pdr.ae.standalone; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.lang.reflect.InvocationTargetException; import java.net.MalformedURLException; import java.net.URL; import java.util.Locale; import java.util.Vector; import org.bbaw.pdr.ae.common.AEConstants; import org.bbaw.pdr.ae.common.CommonActivator; import org.bbaw.pdr.ae.common.utils.CopyDirectory; import org.bbaw.pdr.ae.control.facade.Facade; import org.bbaw.pdr.ae.control.interfaces.IDBManager; import org.bbaw.pdr.ae.control.interfaces.IUserManager; import org.bbaw.pdr.ae.model.Aspect; import org.bbaw.pdr.ae.model.Person; import org.bbaw.pdr.ae.model.ReferenceMods; import org.bbaw.pdr.ae.model.User; import org.bbaw.pdr.ae.repositoryconnection.view.RepositoryLogin; import org.bbaw.pdr.ae.standalone.internal.InstallationDialog; import org.bbaw.pdr.ae.view.main.dialogs.LoginDialog; import org.eclipse.core.runtime.ILog; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.equinox.app.IApplication; import org.eclipse.equinox.app.IApplicationContext; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.window.Window; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.PlatformUI; import org.osgi.service.prefs.BackingStoreException; /** * This class controls all aspects of the application's execution. */ public class AEApplication implements IApplication { // /** Facade. */ // private Facade _facade = Facade.getInstanz(); /** Logger. */ private static ILog iLogger = AEConstants.ILOGGER; /** Constructor of Application. */ public static String PLUGIN_ID = "org.bbaw.pdr.ae.standalone"; /** constructor. */ public AEApplication() { } /** * login to repository connection. * @return true if connection is valid. */ private boolean loginRepository() { // boolean firstTry = true; RepositoryLogin dialog = new RepositoryLogin(null, true); if (dialog.open() != Window.OK) { return false; } return true; } /** * save working data to persistend data storage. */ private void saveWorkingData() { Vector<Person> lastPersons = Facade.getInstanz().getLastPersons(); for (int i = 0; i < lastPersons.size(); i++) { if (lastPersons.get(i) != null && lastPersons.get(i).getPdrId() != null) { AEActivator.getDefault().getPreferenceStore() .putValue("lastPerson" + i, lastPersons.get(i).getPdrId().toString()); } if (i >= 12) { break; } } Vector<Aspect> lastAspects = Facade.getInstanz().getLastAspects(); for (int i = 0; i < lastAspects.size(); i++) { // System.out.println("saving aspect nr " + i); AEActivator.getDefault().getPreferenceStore() .putValue("lastAspect" + i, lastAspects.get(i).getPdrId().toString()); if (i >= 12) { break; } } Vector<ReferenceMods> lastReferences = Facade.getInstanz().getLastReferences(); for (int i = 0; i < lastReferences.size(); i++) { AEActivator.getDefault().getPreferenceStore() .putValue("lastReference" + i, lastReferences.get(i).getPdrId().toString()); if (i >= 12) { break; } } System.out.println("working data saved"); } /** * Starts application. * @param context bundle context. * @return IApplication.EXIT_OK */ @Override public final Object start(final IApplicationContext context) { IStatus sLocale = new Status(IStatus.INFO, AEActivator.PLUGIN_ID, "Application set locale to: " + AEConstants.getCurrentLocale()); iLogger.log(sLocale); Locale.setDefault(AEConstants.getCurrentLocale()); Display display = PlatformUI.createDisplay(); boolean testUser = false; // System.out.println(AEConstants.REPOSITORY_URL.trim()); // InstallationDialog dia2 = new InstallationDialog(null); // dia2.open(); if (Platform.getPreferencesService().getBoolean(CommonActivator.PLUGIN_ID, "FIRST_LOGIN", false, null)) { CommonActivator.getDefault().getPreferenceStore().setValue("FIRST_LOGIN", false); CommonActivator.getDefault().getPreferenceStore().setValue("AE_INSTALLATION_DIR", AEConstants.AE_HOME); sLocale = new Status(IStatus.INFO, AEActivator.PLUGIN_ID, "AE_INSTALLATION_DIR: " + AEConstants.AE_HOME); iLogger.log(sLocale); int returnCode = 0; if (AEConstants.SHOW_INSTALLATION_DIALOG) { InstallationDialog dia = new InstallationDialog(null); returnCode = dia.open(); } sLocale = new Status(IStatus.INFO, AEActivator.PLUGIN_ID, "returnCode: " + returnCode); iLogger.log(sLocale); boolean defaultRepSettings = false; if (AEConstants.REPOSITORY_URL.trim().length() > 0 && AEConstants.REPOSITORY_ID > 0 && AEConstants.PROJECT_ID > 0) { try { new URL(AEConstants.REPOSITORY_URL.trim()); defaultRepSettings = true; CommonActivator.getDefault().getPreferenceStore() .setValue("REPOSITORY_URL", AEConstants.REPOSITORY_URL.trim()); //$NON-NLS-1$ CommonActivator.getDefault().getPreferenceStore().setValue("REPOSITORY_PASSWORD", ""); //$NON-NLS-1$ CommonActivator.getDefault().getPreferenceStore().setValue("PROJECT_ID", AEConstants.PROJECT_ID); CommonActivator.getDefault().getPreferenceStore() .setValue("REPOSITORY_ID", AEConstants.REPOSITORY_ID); } catch (MalformedURLException e) { defaultRepSettings = false; e.printStackTrace(); } } else { defaultRepSettings = false; } if (!defaultRepSettings) { if (loginRepository()) { // IUpdateManager[] rums = // Facade.getInstanz().getUpdateManagers(); // for (IUpdateManager rum : rums) // { // try // { // rum.updateUsers(null); // } // catch (Exception e) // { // // TODO Auto-generated catch block // e.printStackTrace(); // } // } } else { CommonActivator.getDefault().getPreferenceStore().setValue("REPOSITORY_URL", ""); //$NON-NLS-1$ CommonActivator.getDefault().getPreferenceStore().setValue("REPOSITORY_PASSWORD", ""); //$NON-NLS-1$ CommonActivator.getDefault().getPreferenceStore().setValue("PROJECT_ID", 0); CommonActivator.getDefault().getPreferenceStore().setValue("REPOSITORY_ID", 0); IUserManager um = Facade.getInstanz().getUserManager(); um.verifyOrCreateUsers(); // try // { // Facade.getInstanz().setCurrentUser(um.getUsersByUserName("admin")); // } // catch (Exception e) // { // // TODO Auto-generated catch block // e.printStackTrace(); // } // testUser = true; } } try { Platform.getPreferencesService().getRootNode().flush(); } catch (BackingStoreException e1) { e1.printStackTrace(); } if (returnCode == 1) { try { checkAndCopyWorkingDir(); return IApplication.EXIT_RESTART; } catch (IOException e) { e.printStackTrace(); } } } if (!testUser && Platform.getPreferencesService().getBoolean(CommonActivator.PLUGIN_ID, "USER_SAVE_LOGIN", false, null)) { System.out.println("user save"); String id = Platform.getPreferencesService().getString(CommonActivator.PLUGIN_ID, "USER_SAVE_ID", null, null); if (id != null && id.length() == 23) { System.out.println("user id " + id); IUserManager um = Facade.getInstanz().getUserManager(); um.verifyOrCreateUsers(); try { Facade.getInstanz().setCurrentUser(um.getUserById(id)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } if (Facade.getInstanz().getCurrentUser() == null) { LoginDialog dialog = new LoginDialog(null, true); dialog.create(); dialog.open(); } try { // TODO logindialog einkommentieren User user = Facade.getInstanz().getCurrentUser(); if (user == null) { // Shutdown return IApplication.EXIT_OK; } int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor()); if (returnCode == PlatformUI.RETURN_RESTART) { return IApplication.EXIT_RESTART; } saveWorkingData(); optimizeDB(); return IApplication.EXIT_OK; } finally { display.dispose(); } } private void optimizeDB() { final IDBManager dbManager = Facade.getInstanz().getDBManager(); if (dbManager.isOptimizationRequired()) { ProgressMonitorDialog dialog = new ProgressMonitorDialog(new Shell()); dialog.setCancelable(true); try { dialog.run(true, true, new IRunnableWithProgress() { @Override public void run(final IProgressMonitor monitor) { dbManager.optimizeAll(monitor); monitor.done(); } }); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } private void checkAndCopyWorkingDir() throws IOException { String dbUserHome = System.getProperty("user.home"); dbUserHome = dbUserHome + AEConstants.FS + ".ae"; File f = new File(dbUserHome); String baseXUserHome = dbUserHome + AEConstants.FS + "baseXHOME"; if (!f.exists()) { f.mkdir(); f = new File(baseXUserHome); f.mkdir(); File ff = new File(AEConstants.AE_HOME + AEConstants.FS + "baseXHOME"); if (ff.exists()) { try { CopyDirectory.copyDirectory(ff, f); } catch (IOException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } } IStatus sLocale = new Status(IStatus.INFO, AEActivator.PLUGIN_ID, "baseXHOME copied"); iLogger.log(sLocale); String configHome = dbUserHome + AEConstants.FS + "AEConfig"; f = new File(configHome); f.mkdir(); File fConfig = new File(AEConstants.AE_HOME + AEConstants.FS + "AEConfig"); if (fConfig.exists()) { try { CopyDirectory.copyDirectory(fConfig, f); } catch (IOException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } } sLocale = new Status(IStatus.INFO, AEActivator.PLUGIN_ID, "AEConfig copied"); iLogger.log(sLocale); String exportHome = dbUserHome + AEConstants.FS + "export-stylesheets"; f = new File(exportHome); f.mkdir(); File fExport = new File(AEConstants.AE_HOME + AEConstants.FS + "export-stylesheets"); if (fConfig.exists()) { try { CopyDirectory.copyDirectory(fExport, f); } catch (IOException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } } sLocale = new Status(IStatus.INFO, AEActivator.PLUGIN_ID, "export-stylesheets copied"); iLogger.log(sLocale); String workspaceHome = dbUserHome + AEConstants.FS + "workspace"; f = new File(workspaceHome); f.mkdir(); File fWorkspace = new File(AEConstants.AE_HOME + AEConstants.FS + "workspace"); if (fConfig.exists()) { try { CopyDirectory.copyDirectory(fWorkspace, f); } catch (IOException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } } sLocale = new Status(IStatus.INFO, AEActivator.PLUGIN_ID, "workspace"); iLogger.log(sLocale); String fileName = AEConstants.AE_HOME + AEConstants.FS + "Archiv-Editor.ini"; String aeIniString; aeIniString = readFileAsString(fileName); aeIniString += " \n" + "-data" + " \n" + dbUserHome + AEConstants.FS + "workspace"; // Write properties file. // log("Writing to file named " + fFileName + // ". Encoding: " + fEncoding); sLocale = new Status(IStatus.INFO, AEActivator.PLUGIN_ID, "aeIniString " + aeIniString); iLogger.log(sLocale); Writer out = new OutputStreamWriter(new FileOutputStream(fileName), "UTF-8"); try { out.write(aeIniString); } finally { out.close(); } } } private String readFileAsString(String filePath) throws java.io.IOException { StringBuffer fileData = new StringBuffer(1000); BufferedReader reader = new BufferedReader(new FileReader(filePath)); char[] buf = new char[1024]; int numRead = 0; while ((numRead = reader.read(buf)) != -1) { fileData.append(buf, 0, numRead); } reader.close(); return fileData.toString(); } /** * Stop method of application. */ @Override public final void stop() { final IWorkbench workbench = PlatformUI.getWorkbench(); if (workbench == null) { return; } final Display display = workbench.getDisplay(); display.syncExec(new Runnable() { @Override public void run() { if (!display.isDisposed()) { workbench.close(); } } }); } }