package de.deutscherv.diva.gui.viewer;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.ui.preferences.ScopedPreferenceStore;
import org.osgi.framework.BundleContext;
import de.deutscherv.diva.common.dao.IZugriffProfil;
import de.deutscherv.diva.common.exception.TechnicalException;
import de.deutscherv.diva.common.logging.Logger;
import de.deutscherv.diva.gui.commons.Labels;
import de.deutscherv.diva.gui.commons.core.AbstractActivator;
import de.deutscherv.diva.gui.model.exceptions.ValueNotFoundException;
import de.deutscherv.diva.gui.model.services.ServiceFactory;
/**
* The activator class controls the plug-in life cycle.
* Das Verzeichnis für die temporären Datein wird sofern vorhanden
* beim Erzeugen und Beenden des Plugins komplett gelöscht.
*/
public class Activator extends AbstractActivator {
// The plug-in ID
private static final String PLUGIN_ID = "de.deutscherv.diva.gui.viewer";
// Logger
private final Logger _logger = Logger.getLogger(Activator.class);
// Hier kommen die Temporaer runtergeladenen Dateien rein
private final String _tmpPath = System.getProperty("java.io.tmpdir") + "/" + Labels.logpath + "/";
// The shared instance
private static Activator _plugin;
// Dies ist der Viewer der shared instance
private FileViewer _viewer = null;
private FileViewer _printviewer = null;
private FileViewer _secondViewer;
/** Returns the shared instance.
* @return the shared instance
*/
public static Activator getDefault() {
return _plugin;
}
/** Holt das Verzeichnis für die temporären Datein.
*
* @return path
*/
public String getTempPath() {
return _tmpPath;
}
/** Holt den angelegten Dateibetrachter.
*
* @return viewer
*/
public FileViewer getViewer() {
if (_viewer == null) {
try {
// // Verzeichnis für Viewer Logs anlegen!
// createLogPath();
//
// // Die Logdateien heissen nacher err.txt und out.txt
// String lLogfilePath = getLogFilePath();
// _logger.debug("Logpfad des eReview: " + lLogfilePath);
//
// // Hier liegen die EReview.ini und die Lizenzdatei lic.dat
// String lInifilePath = new File(getURL().getPath()).getAbsolutePath();
// _logger.debug("eReview.ini und lic.dat Pfad: " + lInifilePath);
//
// String lProfilePath = getProfilePath();
// // Hier steht die Benutzerkonfiguation drin.
// _logger.debug("Profilepath des eReview: " + lProfilePath);
// _viewer = new FileViewer(lLogfilePath, lInifilePath, lProfilePath, true);
_viewer = new FileViewer(true);
}
catch (Exception e) {
throw new TechnicalException(e);
}
}
return _viewer;
}
/** Holt den angelegten Dateibetrachter.
*
* @return viewer
*/
public FileViewer getSecondViewer() {
if (_secondViewer == null) {
try {
// // Verzeichnis für Viewer Logs anlegen!
// createLogPath();
//
// // Die Logdateien heissen nacher err.txt und out.txt
// String lLogfilePath = getLogFilePath();
// _logger.debug("Logpfad des eReview: " + lLogfilePath);
//
// // Hier liegen die EReview.ini und die Lizenzdatei lic.dat
// String lInifilePath = new File(getURL().getPath()).getAbsolutePath();
// _logger.debug("eReview.ini und lic.dat Pfad: " + lInifilePath);
//
// String lProfilePath = getProfilePath();
// // Hier steht die Benutzerkonfiguation drin.
// _logger.debug("Profilepath des eReview: " + lProfilePath);
// _secondViewer = new FileViewer(lLogfilePath, lInifilePath, lProfilePath, false);
_secondViewer = new FileViewer(false);
}
catch (Exception e) {
throw new TechnicalException(e);
}
}
return _secondViewer;
}
/** Holt den angelegten Dateibetrachter.
*
* @return viewer
*/
public FileViewer getPrintViewer() {
if (_printviewer == null) {
try {
// // Verzeichnis für Viewer Logs anlegen!
// createLogPath();
//
// // Die Logdateien heissen nacher err.txt und out.txt
// String lLogfilePath = getLogFilePath();
// _logger.debug("Logpfad des eReview: " + lLogfilePath);
//
// // Hier liegen die EReview.ini und die Lizenzdatei lic.dat
// String lInifilePath = new File(getURL().getPath()).getAbsolutePath();
// _logger.debug("eReview.ini und lic.dat Pfad: " + lInifilePath);
//
// String lProfilePath = getProfilePath();
// // Hier steht die Benutzerkonfiguation drin.
// _logger.debug("Profilepath des eReview: " + lProfilePath);
// _printviewer = new FileViewer(lLogfilePath, lInifilePath, lProfilePath, false);
_printviewer = new FileViewer(false);
}
catch (Exception e) {
throw new TechnicalException(e);
}
}
return _printviewer;
}
/**
* Erzeugt das Verzeichnis für die Viewerlog (log.log).
*
*/
private void createLogPath() {
String lPfad = (System.getProperty("user.home")) + "\\Anwendungsdaten\\" + Labels.logpath + "\\viewer\\";
File lFile = new File(lPfad);
lFile.mkdirs();
}
/**
* Gibt den LogFilePath für die err.txt und out.txt zurück.
*
* @return {@link String}
*/
private String getLogFilePath() {
// eReviewLogPath aus der diva.properties auslesen
String lPath = "$env.appdata$\\" + Labels.logpath + "\\viewer\\";
boolean lError = false;
try {
lPath = ConfigManager.getInstance().getString("eReviewLogPath", false);
}
catch (ValueNotFoundException e) {
_logger
.warn("Beim Auslesen des eReviewLogPath in der diva.properties ist ein Fehler aufgetreten. Es wird der Standardpfad \"" + lPath + "\" benutzt.");
}
// Alle Positionen der Umgebungsvariablen in $ auslesen
List lStarts = new ArrayList();
List lEnds = new ArrayList();
int lPosition = -1;
do {
if (lPath.contains("$")) {
lStarts.add(lPath.indexOf("$", lPosition + 1));
lPosition = lPath.indexOf("$", lPosition + 1);
lEnds.add(lPath.indexOf("$", lPosition + 1));
lPosition = lPath.indexOf("$", lPosition + 1);
}
}
while (lPath.indexOf("$", lPosition + 1) != -1 && lPosition != -1);
// Alle Umgebungsvariablen in eine Liste schreiben
List lUmgebungsVariablen = new ArrayList();
for (int i = 0; i < lStarts.size(); i++) {
if (lStarts.get(i) != -1 && lEnds.get(i) != -1) {
lUmgebungsVariablen.add(lPath.substring(lStarts.get(i) + 1, lEnds.get(i)));
} else {
lPath = "$env.appdata$\\" + Labels.logpath + "\\viewer\\";
lError = true;
}
}
// Im Pfad die Umgebungsvariablen ersetzen
if (!lError) {
for (int i = 0; i < lUmgebungsVariablen.size(); i++) {
lPath = lPath.replace("$" + lUmgebungsVariablen.get(i) + "$", System.getProperty(lUmgebungsVariablen.get(i)));
}
} else {
_logger.warn("Beim Auswerten des eReviewLogPath in der diva.properties ist ein Fehler aufgetreten. Es wird der Standardpfad \"" + lPath
+ "\" benutzt.");
}
return lPath;
}
/**
* Gibt den Pfad des Viewerprofils zurück.
*
* @return {@link String}
*/
private String getProfilePath() {
String lProfilePath = null;
try {
IZugriffProfil lZp = ServiceFactory.getZugriffProfil();
if (ViewerProfilZugriff.hatZugriffAufViewerProfil(1, lZp)) {
// dann Dateiname Nr 1
lProfilePath = new File(getURL().getPath() + File.separator + "markup_ereview1.xml").getAbsolutePath();
} else if (ViewerProfilZugriff.hatZugriffAufViewerProfil(2, lZp)) {
// dann Dateiname Nr 2
lProfilePath = new File(getURL().getPath() + File.separator + "markup_ereview2.xml").getAbsolutePath();
} else if (ViewerProfilZugriff.hatZugriffAufViewerProfil(3, lZp)) {
// dann Dateiname Nr 3
lProfilePath = new File(getURL().getPath() + File.separator + "markup_ereview3.xml").getAbsolutePath();
} else if (ViewerProfilZugriff.hatZugriffAufViewerProfil(4, lZp)) {
// dann Dateiname Nr 4
lProfilePath = new File(getURL().getPath() + File.separator + "markup_ereview4.xml").getAbsolutePath();
} else {
// verwende Default-Profil
lProfilePath = new File(getURL().getPath() + File.separator + "markup_ereview.xml").getAbsolutePath();
}
}
catch (Exception e) {
throw new TechnicalException(e);
}
return lProfilePath;
}
/**
*
* @see de.deutscherv.diva.gui.commons.core.AbstractActivator#getId()
*
* @return id
*/
@Override
public String getId() {
return PLUGIN_ID;
}
/**
*
* @see de.deutscherv.diva.gui.commons.core.AbstractActivator#doStart(org.osgi.framework.BundleContext)
*
* @param pContext {@link BundleContext}
*
* @throws Exception im Fehlerfall
*/
@Override
protected void doStart(BundleContext pContext) throws Exception {
_plugin = this;
}
/**
*
* @see de.deutscherv.diva.gui.commons.core.AbstractActivator#doStop(org.osgi.framework.BundleContext)
*
* @param pContext {@link BundleContext}
*
* @throws Exception im Fehlerfall
*/
@Override
protected void doStop(BundleContext pContext) throws Exception {
boolean lNeedsSaving = getPreferenceStore().needsSaving();
if (lNeedsSaving) {
if (getPreferenceStore() instanceof ScopedPreferenceStore) {
ScopedPreferenceStore lPreferences = (ScopedPreferenceStore) getPreferenceStore();
try {
lPreferences.save();
}
catch (IOException e) {
_logger.warn("Viewer-Einstellungen konnten nicht gespeichert werden.");
}
}
}
if (_viewer != null) {
if (_viewer.isVisible()) {
_viewer.setVisible(false);
}
_viewer.dispose();
_viewer = null;
// delete(_tmpPath);
}
_plugin = null;
}
/**
* {@inheritDoc}
*/
@Override
public void doWorkbenchAdvisorPreStartup() {
super.doWorkbenchAdvisorPreStartup();
}
}