diff --git a/README.md b/README.md
index f1837c0..6013dce 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,24 @@
-# docmanagement
+# docman
-DMS-Anbindung
\ No newline at end of file
+DMS-Anbindung für SuperX
+
+
+
+Zur Installation
+* Kopieren Sie die superx-docmanagement${version}.jar nach webapps/superx/WEB-INF/lib, und binden Sie das Servlet in der web.xml ein:
+
+ DocMan
+ de.superx.docmanagement.DocMan
+
+
+ DocMan
+ /servlet/DocMan
+
+
+* Starten Sie Tomcat neu
+
+Zum Build der Java Quellen installieren Sie
+* Installieren Sie ANT, wenn noch nicht geschehen
+* SuperX mit Java 17, und führen Sie aus:
+ ant -DWEBAPP=./superx ant distDocman
+Damit wird die superx-docmanagement*.jar erzeugt und in den Ordner WEB-INF/lib kopiert.
\ No newline at end of file
diff --git a/build.xml b/build.xml
new file mode 100644
index 0000000..4d1c15c
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docman_scripte/authentifizierungstest.x b/docman_scripte/authentifizierungstest.x
new file mode 100755
index 0000000..04ae6c7
--- /dev/null
+++ b/docman_scripte/authentifizierungstest.x
@@ -0,0 +1 @@
+java -cp superx-docmanagement1.3.jar de.superx.docmanagement.HISConnektorTest $1 $2
diff --git a/docman_scripte/docman_encryptor.x b/docman_scripte/docman_encryptor.x
new file mode 100755
index 0000000..6023d11
--- /dev/null
+++ b/docman_scripte/docman_encryptor.x
@@ -0,0 +1 @@
+java -cp superx-docmanagement1.3.jar de.superx.docmanagement.Encryptor $1
diff --git a/docman_scripte/docman_propcreator.x b/docman_scripte/docman_propcreator.x
new file mode 100755
index 0000000..8dd8ab7
--- /dev/null
+++ b/docman_scripte/docman_propcreator.x
@@ -0,0 +1 @@
+java -cp superx-docmanagement1.3.jar de.superx.docmanagement.ArchivePropHandler $1 $2 $3
diff --git a/docman_scripte/dvelop-metadata-update.x b/docman_scripte/dvelop-metadata-update.x
new file mode 100755
index 0000000..83034fc
--- /dev/null
+++ b/docman_scripte/dvelop-metadata-update.x
@@ -0,0 +1 @@
+java -cp superx-docmanagement1.3.jar:$JDBC_CLASSPATH de.superx.docmanagement.DvelopMetadatenLoader "$@"
diff --git a/docman_scripte/dvelopdownloadtest1.x b/docman_scripte/dvelopdownloadtest1.x
new file mode 100755
index 0000000..537e87e
--- /dev/null
+++ b/docman_scripte/dvelopdownloadtest1.x
@@ -0,0 +1 @@
+java -cp superx-docmanagement1.3.jar:$JDBC_CLASSPATH de.superx.docmanagement.DvelopDownloadTester $1 $2
diff --git a/docman_scripte/dvelopdownloadtest2.x b/docman_scripte/dvelopdownloadtest2.x
new file mode 100755
index 0000000..f3bb186
--- /dev/null
+++ b/docman_scripte/dvelopdownloadtest2.x
@@ -0,0 +1 @@
+java -cp superx-docmanagement1.3.jar:$JDBC_CLASSPATH de.superx.docmanagement.DvelopDownloadTester2 $1 $2
diff --git a/docman_scripte/superx-docmanagement1.3.jar b/docman_scripte/superx-docmanagement1.3.jar
new file mode 100644
index 0000000..8f8d9e4
Binary files /dev/null and b/docman_scripte/superx-docmanagement1.3.jar differ
diff --git a/lizenz.txt b/lizenz.txt
new file mode 100644
index 0000000..87cbe97
--- /dev/null
+++ b/lizenz.txt
@@ -0,0 +1,248 @@
+CampusSource · AGB und Lizenz
+
+
+
+
+
+Allgemeine Geschäftsbedingungen (AGB) und Lizenz
+
+
+
+
+Mit CampusSource wird die Nutzung universitärer Entwicklungen durch Dritte zu
+den Bedingungen der General GNU Public Licence (GPL) ermöglicht, die eine der
+bekanntesten Opensource-Lizenzen ist.
+Die GPL ist eine Lizenz, die dem amerikanischen Recht, nicht jedoch dem
+deutschen Recht genügt. So sind einige Passagen der GPL nach dem deutschen Recht
+nicht wirksam. CampusSource hat aus diesem Grunde Allgemeine
+Geschäftsbedingungen formuliert, die die Interpretation der GPL unter deutschem
+Recht vornimmt und ergänzt.
+
+
+
+Allgemeine Geschäftsbedingungen für die
+Nutzung der Software der Initiative CampusSource
+
+
+1. Vorbemerkung
+Diese Allgemeinen Geschäftsbedingungen regeln die Rechtsbeziehungen zwischen dem
+Land Nordrhein-Westfalen, vertreten durch die FernUniversität Hagen, diese
+wiederum vertreten durch die Geschäftsstelle der Initiative CampusSource bei der
+FernUniversität Hagen, Universitätsstraße 11, D-58097 Hagen (im Folgenden
+»Lizenzgeber« genannt) und dem Nutzer (im Folgenden »Lizenznehmer« genannt) der
+CampusSource-Software. Sie sind ebenso wie die GNU General Public License (siehe
+dazu Abschnitt 4 »Lizenz«) Bestandteil des zwischen dem Lizenzgeber und dem
+Lizenznehmer geschlossenen Vertrages.
+Die GNU General Public License (im Folgenden GPL genannt) finden Sie im Internet
+unter www.gnu.org/copyleft/gpl.html, eine deutsche Übersetzung unter
+www.gnu.de/gpl-ger.html.
+
+
+
+2. Vertragsgegenstand
+Gegenstand des Vertragsangebotes des Lizenzgebers ist die auf diesem Server
+befindliche Software des CampusSource-Projektes (im Folgenden »Software«
+genannt) und dazugehöriges Begleitmaterial.
+Der Lizenzgeber bietet dem Lizenznehmer nach erfolgter Registrierung die
+folgenden Leistungen an:
+ Der Lizenzgeber verschafft dem Lizenznehmer die Möglichkeit, auf
+ elektronischem Weg Zugang zur Software, deren Dokumentation und zu
+ Erfahrungsberichten zu erhalten und sich einen Überblick über das
+ Softwareangebot zu verschaffen.
+
+
+ Der Lizenzgeber gestattet dem Lizenznehmer, die Software physikalisch
+ downzuloaden.
+
+
+ Der Lizenzgeber überträgt die in Abschnitt 4 »Lizenz« näher bezeichneten
+ Nutzungsrechte auf den Lizenznehmer.
+
+
+Lizenzgeber und Lizenznehmer sind sich einig darüber, dass die Inanspruchnahme
+der unter 1.) bis 3.) angebotenen Leistungen unentgeltlich, schenkungsweise
+erfolgen soll. Dies bedeutet jedoch nicht, dass der Lizenzgeber irgendwelche
+durch die Nutzung des Angebots entstandenen Kosten übernimmt.
+Sofern der Lizenznehmer die Software bearbeitet und diese Bearbeitung Dritten
+zugänglich macht, ist er verpflichtet, dem Lizenzgeber auch eine Kopie der
+Bearbeitung kostenlos zukommen zu lassen, oder, sofern die Bearbeitung
+öffentlich und kostenlos zugänglich ist, dem Lizenzgeber die Quelle mitzuteilen.
+Die in diesen Allgemeinen Geschäftsbedingungen festgelegten Nebenpflichten
+stellen keine Gegenleistung im Sinne des Bürgerlichen Rechts dar und sind für
+den Lizenznehmer verbindlich. Nicht Gegenstand des Vertrages sind irgendeine
+Form von Softwareinstallation, Softwarepflege oder Beratung im Zusammenhang mit
+der Software. Insbesondere wird durch die mit der Software beigefügte oder für
+die Software bereitgestellte Information oder Dokumentation kein
+Beratungsvertrag angeboten. Wenn Sie solche Dienstleistungen wünschen, wenden
+Sie sich an die Geschäftsstelle der Initiative CampusSource.
+Der Lizenzgeber behält sich vor, das Leistungsangebot jederzeit einzustellen.
+Bezüglich bereits empfangener Leistungen bleiben die Verpflichtungen beider
+Parteien hiervon unberührt, insbesondere entfallen dadurch nicht die in diesen
+Allgemeinen Geschäftsbedingungen festgelegten Nebenpflichten des Lizenznehmers.
+Diese Allgemeinen Geschäftsbedingungen gelten auch dann, wenn der Lizenznehmer
+das oben genannte Leistungspaket nur teilweise in Anspruch nimmt.
+
+
+
+3. Sorgfaltspflichten des Lizenznehmers
+Der Lizenznehmer ist verpflichtet, sein Passwort sorgfältig aufzubewahren und
+Dritten nicht zugänglich zu machen. Der Lizenznehmer haftet für alle Schäden,
+die aus der Verletzung dieser Sorgfaltspflicht entstehen.
+
+
+
+4. Lizenz
+Die Nutzungsrechte, welche der Lizenznehmer erhält, ergeben sich aus der GNU
+General Public License. Diese Nutzungsrechte sind dinglich - im Sinne des
+Urheberrechts - mit der Software verknüpft und gelten auch dann, wenn der
+Lizenznehmer keine Kenntnis davon nimmt. Die GNU General Public License (im
+Folgenden GPL genannt) finden Sie im Internet unter
+www.gnu.org/copyleft/gpl.html, eine deutsche Übersetzung unter
+www.gnu.de/gpl-ger.html.
+Die GPL ist zu dem Zweck entworfen worden, dass Sie die unter diese Lizenz
+gestellte Software weitergeben und verändern dürfen. Wenn Sie die Software
+verändern und weitergeben, müssen Sie den Quellcode der bearbeiteten Software
+wieder unter die GPL stellen und den Quellcode zugänglich machen, so dass auch
+andere von Ihrem Werk profitieren, wie auch Sie von der erhaltenen Software
+profitiert haben. Auf diese Art und Weise soll ein System von jedermann frei
+zugänglicher Software geschaffen werden.
+Der Lizenzgeber weist den Lizenznehmer darauf hin, dass die GPL in den USA
+entworfen wurde und daher einige Bestimmungen nach deutschem Recht nicht wirksam
+sind oder in Deutschland rechtlich anders beurteilt werden als in den USA:
+ Die Formulierung »You may charge a fee for the physical act of transferring a
+ copy« in Abschnitt 1 der GPL ist nach deutschem Recht so zu verstehen, dass
+ nur eine angemessene, marktübliche Gegenleistung für die Anfertigung einer
+ Kopie verlangt werden darf. Sofern eine das marktübliche überschreitende
+ Gegenleistung für das Anfertigen von Kopien verlangt werden würde, hätte dies
+ neben einer möglichen Lizenzverletzung zur Folge, dass die durch die
+ kostenlose Weitergabe bestehende Haftungsprivilegierung wegfallen könnte und
+ der Lizenznehmer wie ein Verkäufer oder Unternehmer (Werkvertrag) bei Mängeln
+ auf Schadensersatz haftet.
+
+
+ Abschnitt 11 und 12 der GPL (Haftungsausschluss) verstoßen gegen das »Gesetz
+ zur Regelung des Rechts der Allgemeinen Geschäftsbedingungen« (AGBG) und sind
+ nach deutschem Recht unwirksam. An ihre Stelle treten die entsprechenden
+ Bestimmungen des Bürgerlichen Rechts §§ 521ff. (Haftung des Schenkers).
+
+
+Es folgt eine kurze unvollständige Zusammenfassung der GPL. Der Lizenznehmer ist
+verpflichtet, die weiterführenden und präziseren Bestimmungen der GPL zu
+beachten. Der Lizenznehmer wird darauf hingewiesen, dass die GPL einige
+(auflösende) Bedingungen enthält, bei deren Verletzung die dem Lizenznehmer
+übertragenen Nutzungsrechte automatisch ohne jeden Widerruf erlöschen und eine
+weitere Nutzung des Programms zu einer (strafbaren) Urheberrechtsverletzung
+wird.
+ Die Lizenz erlaubt dem Lizenznehmer das Ausführen der Programme zu jedem
+ Zweck. Gesetzliche Einschränkungen werden hiervon nicht berührt.
+
+
+ Der Lizenznehmer darf unveränderte Kopien des Quellcodes anfertigen und
+ weiterverbreiten, unter der Bedingung, dass mit der Kopie ein entsprechender
+ Urheberrechtsvermerk sowie ein Haftungsausschluß veröffentlicht wird und dass
+ alle die GPL betreffenden Hinweise unverändert weitergegeben werden. Ein
+ Entgelt darf nur für die Anfertigung von Kopien oder für das Anbieten einer
+ Garantie genommen werden. Näheres enthält § 1 GPL.
+
+
+ Der Lizenznehmer darf das Programm verändern und die so entstandene
+ Bearbeitung unter der Bedingung vervielfältigen und verbreiten, dass er einen
+ auffälligen Vermerk über die vorgenommenen Modifizierungen anbringt, die
+ Kopien der Bearbeitung ohne Lizenzgebühren unter den Bedingungen der GPL
+ verbreitet und dafür sorgt, dass das Programm bei interaktiver Nutzung einen
+ Urheberrechtsvermerk ausgibt. Näheres regelt § 2 GPL.
+
+
+ Der Lizenznehmer darf das Programm oder eine Bearbeitung als Objectcode oder
+ in ausführbarer Form unter Berücksichtigung der letzten beiden Abschnitte
+ unter der Bedingung vervielfältigen und verbreiten, dass er den Quelltext
+ beifügt oder eine der in § 3 GPL genannten Alternativen erfüllt. Näheres
+ regelt § 3 GPL.
+
+
+ Sollte dem Lizenznehmer infolge eines Gerichtsurteils oder durch einen
+ gerichtlichen Vergleich Bedingungen auferlegt werden, die der GPL
+ widersprechen, so entbindet dies den Lizenznehmer nicht von der Einhaltung der
+ GPL. Näheres regelt § 7 GPL.
+
+
+ Wenn die Verbreitung oder die Benutzung des Programms in bestimmten Staaten
+ durch Patent- oder Urheberrecht eingeschränkt ist, kann der Lizenznehmer bei
+ der Verbreitung des Programms durch einen entsprechenden Vermerk bestimmen,
+ dass die Verbreitung des Programms in bestimmten Staaten ausgeschlossen ist.
+ Näheres regelt § 8 GPL.
+
+
+
+
+
+5. Schutzrechte Dritter
+Der Lizenzgeber geht davon aus, dass der Besitz und der vertragsgemäße Gebrauch
+der Software keine Schutzrechte Dritter für den Bereich der BRD beeinträchtigt.
+Im Zusammenhang mit einer möglichen Beeinträchtigung der Schutzrechte Dritter
+werden die folgenden Nebenpflichten vereinbart:
+ Der Lizenznehmer verpflichtet sich, dass er weder für sich noch im Auftrag
+ eines Dritten die Software zu dem Zweck verwendet, diese nach
+ Schutzrechtsverletzungen zu untersuchen oder untersuchen zu lassen.
+
+
+ Der Lizenznehmer verpflichtet sich, den Lizenzgeber unverzüglich zu
+ benachrichtigen, wenn Dritte Schutzrechtsverletzungen geltend machen.
+
+
+ Hat der Lizenznehmer den Eindruck, dass die Software Patente oder andere
+ Schutzrechte Dritter verletzt, so ist er verpflichtet, den Lizenzgeber
+ unverzüglich schriftlich unter Beifügung einer genauen Beschreibung der
+ Verletzungshandlung zu unterrichten. Es ist dem Lizenznehmer untersagt, andere
+ natürliche oder juristische Personen ohne schriftliches Einverständnis des
+ Lizenzgebers zu informieren.
+
+
+Bei Verletzung einer der obigen Nebenpflichten verpflichtet sich der
+Lizenznehmer, dem Lizenzgeber Schadensersatz für alle durch die Verletzung
+entstandenen Schäden (einschließlich der Prozeßkosten) zu leisten. Ist die
+Verletzung einer solchen Nebenpflicht festgestellt, so genügt es, wenn der
+Lizenzgeber plausibel darlegt, dass der Schaden durch die Verletzung entstanden
+ist. Den Lizenznehmer trifft die volle Beweislast für das Gegenteil. Der
+Lizenznehmer verpflichtet sich, dem Lizenzgeber alle Auskünfte im Zusammenhang
+mit der Verletzung einer der obigen Nebenpflichten zu erteilen.
+Der Lizenzgeber weist darauf hin, dass zur CampusSource-Software nicht die
+Software anderer Hersteller gehört, mit der die CampusSource-Software
+zusammenarbeiten kann oder die für den Betrieb der CampusSource-Software
+notwendigerweise vorhanden sein muss, wie z. B. WWW-Server,
+Funktionsbibliotheken, Werkzeugsysteme und Datenbankmanagementsysteme. Die
+Lizenzen für diese Software müssen vom jeweiligen Hersteller separat erworben
+werden. Die GPL gilt für diese Software in der Regel nicht.
+
+
+
+6. Datenschutz
+Der Lizenzgeber verpflichtet sich, bezüglich der bei der Registrierung
+angegebenen Daten die einschlägigen landes- und bundesrechtlichen
+Datenschutzbestimmungen einzuhalten. Alle Verbindungen zu diesem Server im
+Download- und Registrierbereich werden in einem LOG-File aufgezeichnet.
+
+
+
+7. Schriftform
+Alle Nebenabreden, die zwischen dem Lizenzgeber und dem Lizenznehmer
+abgeschlossen werden, bedürfen der Schriftform. Eine Abänderung oder Aufhebung
+dieser Klausel bedarf ebenfalls der Schriftform.
+
+
+
+8. Gerichtsstand
+Gerichtsstand für alle Streitigkeiten aus diesem Vertrag ist Hagen, sofern der
+Lizenznehmer Kaufmann, eine juristische Person des öffentlichen Rechts oder ein
+öffentlich-rechtliches Sondervermögen ist.
+Die Parteien vereinbaren die Anwendung deutschen Rechts. Sollte nach
+Internationalem Verfahrensrecht die Zuständigkeit eines deutschen Gerichts
+möglich sein, so vereinbaren die Parteien die Zuständigkeit der deutschen
+Gerichtsbarkeit und innerhalb Deutschlands die Zuständigkeit des Amtsgerichtes
+bzw. Landgerichtes Hagen. Bezüglich der in Abschnitt 5 »Schutzrechte Dritter«
+festgelegten Nebenpflichten des Lizenznehmers kann der Lizenzgeber abweichend
+von Satz 3 ein beliebiges international zuständiges Gericht anrufen.
+© 2000 CampusSource Alle Rechte vorbehalten
+
+
+
diff --git a/src/de/superx/docmanagement/AbstractDocPresenter.java b/src/de/superx/docmanagement/AbstractDocPresenter.java
new file mode 100644
index 0000000..fc5a5fa
--- /dev/null
+++ b/src/de/superx/docmanagement/AbstractDocPresenter.java
@@ -0,0 +1,603 @@
+package de.superx.docmanagement;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.net.HttpURLConnection;
+import java.net.Proxy;
+import java.net.URL;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+
+import de.memtext.util.DateUtils;
+import de.superx.common.SxUser;
+import de.superx.servlet.SxPools;
+
+public abstract class AbstractDocPresenter {
+ private static final long serialVersionUID = 1;
+ static final String MANDANTENID = "default";
+ final java.util.logging.Logger logger = java.util.logging.Logger.getLogger("docman");
+ private Proxy proxy = null;
+ private String sys;
+ // Vorlage für einzelne URLS zum DokuServer in der z.B: DocID ersetzt werden
+ // muss
+ private String urlVorlage;
+ // HTML+Freemarker Vorlage für ein HTML-Menü, falls es mehrere Subdokumente
+ // gibt.
+ private String menuVorlage;
+ // SQL zum Lesen der Anzahl von Dokumenten pro ID
+ private String readDocumentCountSql;
+ // Lesen von Dokumenten mit optional auch mehreren Attributen
+ private String readDocumentListSql;
+ // optional: SQL zum Löschen abgelaufener Berechtigungen
+ private String deleteOldRightsSql;
+ // SQL zum Lesen der Berechtigungen auf eine ID für einen User
+ private String readIdRightSql;
+ // SQL zum Lesen der Berechtigungen auf eine docId für einen User (für
+ // Untermenü)
+ private String readDocIdRightSql;
+ // ID to DocID
+ private String readDocIdSql;
+ // HauptDokumentID für eine ID suchen
+ private String readMainDocIdSql;
+ private boolean isDirectLinkToDocMWanted = true;
+ private boolean isDocMenuAlwaysWanted=false;
+ private boolean isRenewAuthentificationOnErrorWanted=false;
+
+
+ protected AbstractDocPresenter(String sys, String params) throws ServletException {
+ setSys(sys);
+ initSystem();
+ checkConfiguration();
+ }
+
+ protected boolean isRenewAuthentificationOnErrorWanted()
+ {
+ return isRenewAuthentificationOnErrorWanted;
+ }
+ protected void setRenewAuthentificationOnErrorWanted(boolean b)
+ {
+ this.isRenewAuthentificationOnErrorWanted=b;
+ }
+ protected void renewAuthentification() throws IOException
+ {
+ throw new IllegalStateException("nicht unterstützt");
+ }
+
+ protected void setDocMenuAlwaysWanted(boolean isDocMenuAlwaysWanted)
+ {
+ this.isDocMenuAlwaysWanted=isDocMenuAlwaysWanted;
+ }
+ protected void setProxy(Proxy proxy) {
+ this.proxy = proxy;
+ }
+
+ protected void checkConfiguration() {
+ if (urlVorlage == null)
+ throw new IllegalStateException("urlVorlage ist null");
+ if (readDocumentCountSql == null)
+ throw new IllegalStateException("readDocumentCountSql ist null");
+ if (readDocumentListSql == null)
+ throw new IllegalStateException("readDocumentListSql ist null");
+ if (readIdRightSql == null)
+ throw new IllegalStateException("readIdRightSql ist null");
+ if (readDocIdSql == null)
+ throw new IllegalStateException("readDocIdSql ist null");
+ if (readMainDocIdSql == null)
+ throw new IllegalStateException("readMainDocIdSql ist null");
+ // menuVorlage und readDocumentListSql dürfen null sein, wenn für konkreten Fall
+ // nicht genutzt
+ }
+
+ abstract void initSystem() throws ServletException;
+
+ protected boolean isDirectLinkToDocMWanted() {
+ return isDirectLinkToDocMWanted;
+ }
+
+ protected void setDirectLinkToDocMWanted(boolean isDirectLinkToDocMWanted) {
+ this.isDirectLinkToDocMWanted = isDirectLinkToDocMWanted;
+ }
+
+ protected DocPresentationResult getReply(HttpServletRequest request, SxUser user) {
+ DocPresentationResult dpresult = new DocPresentationResult();
+ Map params = readParams(request);
+ if (isAccessAllowed(user, params)) {
+ try {
+ updateDocResult(params, dpresult);
+ } catch (Exception e) {
+ String id = getId(params);
+ String doc_id = params.get("doc_id");
+ logger.severe("sys:"+sys+" Berechtigung vorhanden, aber Fehler bei der Ermittlung von Dokument "
+ + (id != null ? " ID=" + id : "") + (doc_id != null ? " docID:" + doc_id : "") + " "
+ + getExceptionStackTrace(e));
+ }
+ } else {
+ dpresult.setMessage("Berechtigungsfehler in sys:"+sys);
+ }
+ if (!dpresult.isOK()) {
+ dpresult.setMessage("Es konnte keine DocManagement URL ermittelt werden in sys:"+sys);
+ }
+ return dpresult;
+ }
+
+ /**
+ * TODO ggfs. in utils auslagern
+ *
+ * @param e
+ * @return
+ */
+ String getExceptionStackTrace(Exception e) {
+ String result = "";
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ e.printStackTrace(pw);
+ result = sw.toString();
+ pw.close();
+ return result;
+ }
+
+ protected Map readParams(HttpServletRequest request) {
+ logger.info("DocPresenter ("+sys+"): Lese Parameter aus Request");
+ Map params = new HashMap();
+
+ String id = DocMan.getParameter(request, "id");
+ String doc_id = DocMan.getParameter(request, "doc_id");
+ if ((id == null || id.length() == 0) && (doc_id == null || doc_id.length() == 0))
+ throw new IllegalArgumentException("Param id oder doc_id muss angegeben werden");
+ params.put("id", id);
+ if (doc_id != null)
+ params.put("doc_id", doc_id);
+
+ String main_doc_only = DocMan.getParameter(request, "main_doc_only");
+ if (main_doc_only != null && main_doc_only.equalsIgnoreCase("false")) {
+ params.put("main_doc_only", "false");
+ } else {
+ params.put("main_doc_only", "true");
+ }
+ return params;
+ }
+
+ /**
+ * Wenn in den params eine id vorhanden ist, wird die Berechtigung dafür
+ * geprüft, ist es eine doc_id auch dafür
+ *
+ * @param user
+ * @param params
+ * @return
+ */
+ protected boolean isAccessAllowed(SxUser user, Map params) {
+ boolean isAccessAllowed = false;
+ if (deleteOldRightsSql != null) {
+ logger.fine("DocPresenter ("+sys+"): Lösche etwaige abgelaufene Berechtigungen");
+ executeUpdate(deleteOldRightsSql);
+ }
+ String id = getId(params);
+ if (id != null) {
+ isAccessAllowed = isIdAllowed(user, id);
+ }
+ String doc_id = params.get("doc_id");
+ if (doc_id != null) {
+ isAccessAllowed = isDocIdAllowed(user, doc_id);
+ }
+
+ return isAccessAllowed;
+ }
+
+ boolean isDocIdAllowed(SxUser user, String doc_id) {
+ boolean isAccessAllowed = false;
+ int count = readIntFromDB("Berechtigung für DocId suchen sys:"+sys, readDocIdRightSql, (Integer) user.getId(), doc_id);
+ if (count > 0)
+ isAccessAllowed = true;
+ logger.info("DocPresenter: Für User " + user.getName() + " (userinfo.tid=" + user.getId() + ") aktuell " + count
+ + " Rechte für DocId " + doc_id + " gefunden (sys:"+sys+")");
+ return isAccessAllowed;
+ }
+
+ private boolean isIdAllowed(SxUser user, String id) {
+ boolean isAccessAllowed = false;
+ int count = readIntFromDB("Berechtigung für ID suchen sys:"+sys, readIdRightSql, (Integer) user.getId(), id);
+ if (count > 0)
+ isAccessAllowed = true;
+ logger.fine("DocPresenter: Für User " + user.getName() + " (userinfo.tid=" + user.getId() + ") aktuell " + count
+ + " Rechte für "+id+" gefunden (sys:"+sys+")");
+ return isAccessAllowed;
+ }
+
+ String getSys() {
+ return sys;
+ }
+
+ private void setSys(String sys) {
+ this.sys = sys;
+ }
+
+ protected void updateDocResult(Map params, DocPresentationResult result) throws Exception {
+ if (hasDocId(params)) {
+ String doc_id = params.get("doc_id");
+ logger.info("DocPresenter ("+sys+"): Für doc_id " + doc_id + " direkt ausgeliefert");
+ updateDocLink(result, doc_id);
+ }
+
+ else {
+ if (params.get("main_doc_only").contentEquals("true")) {
+ logger.info("DocPresenter ("+sys+"): Liefere nur Hauptdokument");
+ updateDocLink(result, getMainDocId(getId(params)));
+
+ } else {
+ int docCount = readDocumentCount(getId(params));
+ if (docCount==1&&isDocMenuAlwaysWanted) docCount=99;
+ switch (docCount) {
+ case 0:
+ logger.info("DocPresenter ("+sys+"): Für id " + getId(params) + " keine relevanten Angaben in Datenbank gefunden");
+ result.setMessage("Keine relevanten Angaben in der Datenbank gefunden");
+ break;
+
+ case 1:
+ // wenn es für eine ID nur eine einzige DocId gibt, diese direkt liefern
+ logger.info("DocPresenter ("+sys+"): Für id " + getId(params)
+ + " für ein Dokument gefunden, wird direkt ausgeliefert");
+ updateDocLink(result, readDocIdFromDatabase(params));
+
+ break;
+ // mehr als ein Dokument oder Menü auf jeden Fall gewünscht
+ default:
+ logger.info("DocPresenter ("+sys+"): Für id " + getId(params)
+ + " wird Auswahlmenü mit Einzeldokumenten dargestellt");
+ result.setMessage(getDocumentMenu(params));
+
+ }
+ }
+ }
+
+ }
+
+ private String getDocumentMenu(Map params) {
+ String result;
+ String id = getId(params);
+ logger.info("DocPresenter ("+sys+"): Ermittle DokumentenListe für id " + id);
+ List