Browse Source

Upgrade an BI 2022.12 #2

userinfo_gueltigkeit
Daniel Quathamer 2 years ago
parent
commit
e37b919191
  1. 45
      .classpath
  2. 92
      src/de/memtext/util/TransletUtils.java
  3. 89
      src/de/superx/applet/ConnectionDlg.java
  4. 95
      src/de/superx/applet/ExplanationFrame.java
  5. 360
      src/de/superx/applet/MaskeninfoElement.java
  6. 16
      src/de/superx/applet/Sachgebiet.java
  7. 53
      src/de/superx/applet/Sachgebiete.java
  8. 231
      src/de/superx/applet/SichtApplet.java
  9. 314
      src/de/superx/applet/SuperX.java
  10. 96
      src/de/superx/applet/SxDate.java
  11. 165
      src/de/superx/applet/SxDefaults.java
  12. 49
      src/de/superx/applet/SxDeleteListener.java
  13. 50
      src/de/superx/applet/SxDlg.java
  14. 164
      src/de/superx/applet/SxDlgListener.java
  15. 549
      src/de/superx/applet/SxDlgManager.java
  16. 534
      src/de/superx/applet/SxField.java
  17. 930
      src/de/superx/applet/SxForm.java
  18. 166
      src/de/superx/applet/SxHeaderRenderer.java
  19. 68
      src/de/superx/applet/SxInsertListener.java
  20. 545
      src/de/superx/applet/SxJDBCAdapter.java
  21. 473
      src/de/superx/applet/SxLogoPanel.java
  22. 2440
      src/de/superx/applet/SxMask.java
  23. 35
      src/de/superx/applet/SxPasswdChangeDlg.java
  24. 280
      src/de/superx/applet/SxPosLayout.java
  25. 930
      src/de/superx/applet/SxSQL.java
  26. 100
      src/de/superx/applet/SxSQLMetaData.java
  27. 136
      src/de/superx/applet/SxTableMap.java
  28. 27
      src/de/superx/applet/SxTableModel.java
  29. 1839
      src/de/superx/applet/SxTablePanel.java
  30. 354
      src/de/superx/applet/SxTableSorter.java
  31. 71
      src/de/superx/applet/SxThemenEintrag.java
  32. 423
      src/de/superx/applet/SxThemenbaum.java
  33. 388
      src/de/superx/applet/SxTreeDlg.java
  34. 562
      src/de/superx/applet/SxUtils.java
  35. 28
      src/de/superx/applet/SxWaitCursor.java
  36. 9
      src/de/superx/bin/FMParser.java
  37. 4
      src/de/superx/common/StandaloneSicht.java
  38. 960
      src/de/superx/common/TemplateProcessor.java
  39. 103
      src/de/superx/dbadmin/AbstractCellEditor.java
  40. 1139
      src/de/superx/dbadmin/AdminOrga.java
  41. 47
      src/de/superx/dbadmin/AdminOrgaMouseListener.java
  42. 36
      src/de/superx/dbadmin/AdminOrgaPrintRenderer.java
  43. 27
      src/de/superx/dbadmin/AdminOrgaSelList.java
  44. 14
      src/de/superx/dbadmin/BenutzerVerwaltung.java
  45. 105
      src/de/superx/dbadmin/CheckPwd.java
  46. 53
      src/de/superx/dbadmin/ComboViewAL.java
  47. 32
      src/de/superx/dbadmin/ComboViewRenderer.java
  48. 203
      src/de/superx/dbadmin/DBAccess.java
  49. 995
      src/de/superx/dbadmin/GroupInst.java
  50. 198
      src/de/superx/dbadmin/GroupStammPanel.java
  51. 819
      src/de/superx/dbadmin/GroupThemen.java
  52. 52
      src/de/superx/dbadmin/InstEditor.java
  53. 21
      src/de/superx/dbadmin/InstEditorRenderer.java
  54. 65
      src/de/superx/dbadmin/InstImmediateEditor.java
  55. 125
      src/de/superx/dbadmin/InstRenderer.java
  56. 104
      src/de/superx/dbadmin/MBComboBox.java
  57. 40
      src/de/superx/dbadmin/MBComboView.java
  58. 33
      src/de/superx/dbadmin/MBDragModelListener.java
  59. 137
      src/de/superx/dbadmin/MBDragTree.java
  60. 49
      src/de/superx/dbadmin/MBProgressBar.java
  61. 82
      src/de/superx/dbadmin/MBTableSelect.java
  62. 400
      src/de/superx/dbadmin/MaskeAendern.java
  63. 84
      src/de/superx/dbadmin/Maskenauswahl.java
  64. 96
      src/de/superx/dbadmin/Nachricht.java
  65. 312
      src/de/superx/dbadmin/OrgaBearbDialog.java
  66. 207
      src/de/superx/dbadmin/OrgaEintrag2.java
  67. 574
      src/de/superx/dbadmin/SuperXDBAdmin.java
  68. 29
      src/de/superx/dbadmin/SxAdminApplet.java
  69. 111
      src/de/superx/dbadmin/SxDate.java
  70. 144
      src/de/superx/dbadmin/SxDefaults.java
  71. 746
      src/de/superx/dbadmin/SxSQL.java
  72. 95
      src/de/superx/dbadmin/SxSQLMetaData.java
  73. 184
      src/de/superx/dbadmin/SxThemenEintrag2.java
  74. 540
      src/de/superx/dbadmin/SxUtils.java
  75. 305
      src/de/superx/dbadmin/ThemenDragTree.java
  76. 719
      src/de/superx/dbadmin/ThemenbaumPanel.java
  77. 239
      src/de/superx/dbadmin/UserGroupMembershipPanel.java
  78. 946
      src/de/superx/dbadmin/UserInst.java
  79. 370
      src/de/superx/dbadmin/UserStammPanel.java
  80. 782
      src/de/superx/dbadmin/UserThemenPanel.java
  81. 177
      src/de/superx/servlet/ServletTemplateProcessor.java
  82. 2
      src/de/superx/servlet/SxSQL_Server.java
  83. 2
      src/de/superx/servlet/Themenbaum.java
  84. 4
      src/de/superx/util/HtmlUtils.java
  85. 35
      src/de/superx/util/saxon/extensions/DateTodayString.java
  86. 52
      src/de/superx/util/saxon/extensions/Headers2Html.java
  87. 2
      superx-build/build.xml
  88. 2
      superx/WEB-INF/conf/edustore/db/bin/SQL_ENV.sam
  89. 0
      superx/WEB-INF/conf/edustore/db/bin/SQL_ENV_bau.sam
  90. 6
      superx/WEB-INF/conf/edustore/db/bin/SQL_ENV_his1.sam
  91. 0
      superx/WEB-INF/conf/edustore/db/bin/SQL_ENV_kenn.sam
  92. 192
      superx/WEB-INF/conf/edustore/db/bin/ant.bat
  93. 62
      superx/WEB-INF/conf/edustore/db/bin/antRun.bat
  94. 174
      superx/WEB-INF/conf/edustore/db/bin/client_env_sam.bat
  95. 38
      superx/WEB-INF/conf/edustore/db/bin/cpappend.bat
  96. 2
      superx/WEB-INF/conf/edustore/db/bin/dbforms-config_upgrade.x
  97. 80
      superx/WEB-INF/conf/edustore/db/bin/doquery.bat
  98. 58
      superx/WEB-INF/conf/edustore/db/bin/dosql.bat
  99. 7
      superx/WEB-INF/conf/edustore/db/bin/edustore_xml_upgrade_all.x
  100. 64
      superx/WEB-INF/conf/edustore/db/bin/extraction-script-creator.bat
  101. Some files were not shown because too many files have changed in this diff Show More

45
.classpath

@ -262,11 +262,6 @@ @@ -262,11 +262,6 @@
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/superx/git/kern/superx/WEB-INF/lib/freemarker.jar">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/superx/git/kern/superx/WEB-INF/lib/groovy-all-2.3.6.jar">
<attributes>
<attribute name="module" value="true"/>
@ -652,11 +647,6 @@ @@ -652,11 +647,6 @@
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/superx/git/kern/superx/WEB-INF/lib/postgresql-9.2-1002.jdbc4.jar">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/superx/git/kern/superx/WEB-INF/lib/resolver-20050927.jar">
<attributes>
<attribute name="module" value="true"/>
@ -667,36 +657,6 @@ @@ -667,36 +657,6 @@
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/superx/git/kern/superx/WEB-INF/lib/saxon8.jar">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/superx/git/kern/superx/WEB-INF/lib/saxon8-dom.jar">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/superx/git/kern/superx/WEB-INF/lib/saxon8-jdom.jar">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/superx/git/kern/superx/WEB-INF/lib/saxon8-sql.jar">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/superx/git/kern/superx/WEB-INF/lib/saxon8-xom.jar">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/superx/git/kern/superx/WEB-INF/lib/saxon8-xpath.jar">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="/home/superx/git/kern/superx/WEB-INF/lib/sdf_generator.jar">
<attributes>
<attribute name="module" value="true"/>
@ -907,5 +867,10 @@ @@ -907,5 +867,10 @@
<classpathentry kind="lib" path="superx/WEB-INF/lib/jasperreports-javaflow-6.20.0.jar"/>
<classpathentry kind="lib" path="superx/WEB-INF/lib/jasperreports-metadata-6.20.0.jar"/>
<classpathentry kind="lib" path="superx/WEB-INF/lib/net.tascalate.javaflow.api-2.2.1.jar"/>
<classpathentry kind="lib" path="superx/WEB-INF/lib/freemarker-2.3.25.jar"/>
<classpathentry kind="lib" path="superx/WEB-INF/lib/postgresql-42.2.19.jar"/>
<classpathentry kind="lib" path="superx/WEB-INF/lib/saxon-he-10.5.jar"/>
<classpathentry kind="lib" path="superx/WEB-INF/lib/saxon-xqj-10.5.jar"/>
<classpathentry kind="lib" path="superx/WEB-INF/lib/saxon-he-test-10.5.jar"/>
<classpathentry kind="output" path="superx/WEB-INF/classes"/>
</classpath>

92
src/de/memtext/util/TransletUtils.java

@ -1,20 +1,32 @@ @@ -1,20 +1,32 @@
package de.memtext.util;
import javax.xml.transform.ErrorListener;
import javax.xml.transform.Templates;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamSource;
import de.superx.util.saxon.extensions.DateTodayString;
import de.superx.util.saxon.extensions.Headers2Html;
import net.sf.saxon.TransformerFactoryImpl;
import net.sf.saxon.s9api.ExtensionFunction;
import net.sf.saxon.s9api.Processor;
public class TransletUtils {
private static TransformerFactory tFactory;
private static String usedProcessor=null;
private static String usedProcessor = null;
private TransletUtils() {
}
public static synchronized void initFactory()
{
tFactory = TransformerFactory.newInstance();
public static synchronized void initFactory() {
tFactory = TransformerFactory.newInstance();
tFactory.setErrorListener(new SuperxTransformerErrorListener());
}
/**
*
* @param parser
@ -23,45 +35,79 @@ public class TransletUtils { @@ -23,45 +35,79 @@ public class TransletUtils {
* value = "net.sf.saxon.TransformerFactoryImpl";
*
*/
public static synchronized void initFactory(String preferredParser,
String secondaryParser) {
public static synchronized void initFactory(String preferredParser, String secondaryParser) {
try {
tFactory = TransformerFactory.newInstance(preferredParser,null);
usedProcessor=preferredParser;
tFactory = TransformerFactory.newInstance(preferredParser, null);
usedProcessor = preferredParser;
// Grab the handle of Transformer factory and cast it to TransformerFactoryImpl
TransformerFactoryImpl tFactoryImpl = (TransformerFactoryImpl) tFactory;
// Get the currently used processor
net.sf.saxon.Configuration saxonConfig = tFactoryImpl.getConfiguration();
Processor processor = (Processor) saxonConfig.getProcessor();
ExtensionFunction headers2html = new Headers2Html();
ExtensionFunction dateTodayString = new DateTodayString();
processor.registerExtensionFunction(headers2html);
processor.registerExtensionFunction(dateTodayString);
} catch (javax.xml.transform.TransformerFactoryConfigurationError e) {
if (secondaryParser != null) {
try {
tFactory = TransformerFactory.newInstance(secondaryParser, null);
usedProcessor=secondaryParser;
usedProcessor = secondaryParser;
} catch (javax.xml.transform.TransformerFactoryConfigurationError e2) {
System.err.println("Weder " + preferredParser + " noch "
+ secondaryParser + " gefunden");
System.err.println("Weder " + preferredParser + " noch " + secondaryParser + " gefunden");
e2.printStackTrace();
}
} else {
e.printStackTrace();
throw new IllegalStateException("Kein XML Parser "+e);
throw new IllegalStateException("Kein XML Parser " + e);
}
}
if (tFactory != null) {
tFactory.setErrorListener(new SuperxTransformerErrorListener());
}
}
public static synchronized Templates createTemplate(String xslInURI)
throws TransformerConfigurationException {
if (tFactory == null)
initFactory("org.apache.xalan.xsltc.trax.TransformerFactoryImpl",
"net.sf.saxon.TransformerFactoryImpl");
return tFactory.newTemplates(new StreamSource(xslInURI));
public static synchronized Templates createTemplate(String xslInURI) throws TransformerConfigurationException {
if (tFactory == null) {
initFactory("org.apache.xalan.xsltc.trax.TransformerFactoryImpl", "net.sf.saxon.TransformerFactoryImpl");
}
StreamSource strsrc = new StreamSource(xslInURI);
return tFactory.newTemplates(strsrc);
}
public static void main(String args[]) {
System.out.println("javax.xml.transform.TransformerFactory was "+System.getProperty("javax.xml.transform.TransformerFactory"));
System.getProperties().remove("javax.xml.transform.TransformerFactory");
System.out.println("after unsetting "+System.getProperty("javax.xml.transform.TransformerFactory"));
System.out.println("javax.xml.transform.TransformerFactory was " + System.getProperty("javax.xml.transform.TransformerFactory"));
System.getProperties().remove("javax.xml.transform.TransformerFactory");
System.out.println("after unsetting " + System.getProperty("javax.xml.transform.TransformerFactory"));
}
public static String getUsedProcessor() {
return usedProcessor;
}
static class SuperxTransformerErrorListener implements ErrorListener {
@Override
public void warning(TransformerException exception) throws TransformerException {
System.err.println("Problem in xsl transform: "+ exception.getMessageAndLocation());
}
@Override
public void error(TransformerException exception) throws TransformerException {
System.err.println("Error in xsl transform: "+ exception.getMessageAndLocation());
}
@Override
public void fatalError(TransformerException exception) throws TransformerException {
System.err.println("Fatal error in xsl transform:"+ exception.getMessageAndLocation());
}
}
}
//Created on 09.12.2004 at 14:07:47

89
src/de/superx/applet/ConnectionDlg.java

@ -1,89 +0,0 @@ @@ -1,89 +0,0 @@
package de.superx.applet;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.KeyEvent;
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.KeyStroke;
import javax.swing.text.Keymap;
import de.memtext.baseobjects.User;
public class ConnectionDlg extends JPanel {
private static final long serialVersionUID = 1L;
private JPasswordField passwordField;
private JLabel passwordLabel;
private SxField userNameField;
private JLabel userNameLabel;
String[] ConnectOptionNames = { "Anmelden", "Abmelden", "Abbruch" };
String ConnectTitle = "Datenbank anmelden";
public ConnectionDlg(User user)
{
this(user.getName(),"");
}
public ConnectionDlg(String userName, String userPass) {
// Create the labels and text fields.
userNameLabel = new JLabel("Benutzername: ", JLabel.RIGHT);
userNameField = new SxField(userName);
userNameField.setBackground(Color.white);
userNameField.setMargin(new Insets(2, 2, 2, 2));
passwordLabel = new JLabel("Kennwort: ", JLabel.RIGHT);
passwordField = new JPasswordField(userPass);
passwordField.setBackground(Color.white);
passwordField.setMargin(new Insets(2, 2, 2, 2));
KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
Keymap map = passwordField.getKeymap();
map.removeKeyStrokeBinding(enter);
passwordField.setKeymap(map);
setFont(new Font("SansSerif", Font.BOLD, 12));
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
JPanel namePanel = new JPanel(false);
namePanel.setLayout(new GridLayout(0, 1));
namePanel.setMaximumSize(new Dimension(150, 100));
namePanel.add(userNameLabel);
namePanel.add(passwordLabel);
add(namePanel);
JPanel fieldPanel = new JPanel(false);
fieldPanel.setLayout(new GridLayout(0, 1));
fieldPanel.add(userNameField);
fieldPanel.add(passwordField);
add(fieldPanel);
}
String getUserName() {
return userNameField.getText();
}
String getPassword() {
return new String(passwordField.getPassword());
}
public int showDlg(Frame parent) {
this.passwordField.setText("");
return JOptionPane.showOptionDialog(
parent,
this,
ConnectTitle,
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.INFORMATION_MESSAGE,
null,
ConnectOptionNames,
ConnectOptionNames[0]);
}
public void setPassword(String txt) {
passwordField.setText(txt);
}
}
//Created on 15.03.2004 at 13:06:38

95
src/de/superx/applet/ExplanationFrame.java

@ -1,95 +0,0 @@ @@ -1,95 +0,0 @@
package de.superx.applet;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.PrinterJob;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import de.memtext.icons.MBStandardIcons;
import de.memtext.util.WindowUtils;
import de.memtext.widgets.MBFrame;
import de.memtext.widgets.PrintableEditorPane;
public class ExplanationFrame extends MBFrame implements ActionListener {
private PrintableEditorPane pane = new PrintableEditorPane("text/html","");
public ExplanationFrame() {
super("Erläuterung");
pane.setEditable(false);
//pane.addHyperlinkListener(new Hyperactive(f));
setSystemExitOnClose(false);
setCenter(new JScrollPane(pane));
JPanel pSouth=new JPanel();
JButton btnPrint=new JButton("Drucken",MBStandardIcons.getPrint());
btnPrint.addActionListener(this);
pSouth.add(btnPrint);
setSouth(pSouth);
setSize(400,500);
WindowUtils.center(this);
}
public void set(MaskeninfoElement m) {
this.setTitle("Erläuterung zu " + m.getName());
StringBuffer buf=new StringBuffer("<html><h3>Erläuterung zur Abfrage "+m.getName()+"</h3>");
buf.append(m.getErlaueterung()+"<br><br>");
if (m.hasSpaltenExplanations())
{
buf.append(m.getSpaltenExplanationText());
}
pane.setText(buf.toString());
pane.setCaretPosition(0);
}
public void actionPerformed(ActionEvent ae) {
print();
}
private void print() {
PrinterJob pj = PrinterJob.getPrinterJob();
PageFormat pageFormat = pj.defaultPage();
pageFormat.setOrientation(java.awt.print.PageFormat.LANDSCAPE);
// Dialog zur Auswahl des Papierformats
pageFormat = pj.pageDialog(pageFormat);
// A4 festvorgeben.
// Papiergroesse DIN A4, Rand: O + U: 1/2 Inch, L + R: 1/2 Inch
// alle angaben in 1/72 Inch
Paper a4 = new Paper();
a4.setSize(21 / 2.54 * 72, 29.7 / 2.54 * 72);
a4.setImageableArea(
36,
36,
(21 / 2.54 * 72) - 72,
(29.7 / 2.54 * 72) - 72);
pageFormat.setPaper(a4);
//ggfs_nurMarkierterBereich(pj,pageFormat);
pj.setPrintable(pane, pageFormat);
//else
// pj.setPrintable(tmp_drucktab, pageFormat);
if (!pj.printDialog())
return;
try {
pj.print();
} catch (Exception e) {
e.printStackTrace();
}
}
}
//Created on 07.04.2005 at 14:32:57

360
src/de/superx/applet/MaskeninfoElement.java

@ -1,360 +0,0 @@ @@ -1,360 +0,0 @@
package de.superx.applet;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.sql.Date;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Properties;
import java.util.Vector;
import de.memtext.baseobjects.NamedObject;
import de.memtext.baseobjects.coll.NamedIdObjectSet;
import de.superx.common.SxResultRow;
import de.superx.common.XilParser;
import freemarker.template.TemplateException;
public class MaskeninfoElement extends NamedObject {
private static final long serialVersionUID = 1L;
private Properties xilProps = new Properties();
private Vector felderinfos;
private Integer tid, breite, hoehe;
private NamedIdObjectSet sachgebiete = new NamedIdObjectSet();
private boolean isSqlInHeaders = false;
private Vector spaltenExplanations; // ,explanationsClone;
private String xilPropListString, selectStmt, cleanupStmt, hinweis;
private Date stand;
private String erlaueterung;
private XilParser xilParser = new XilParser();
private SxForm maskeForm;
MaskeninfoElement() {
}
public void setMaskeForm(SxForm maskeForm) {
this.maskeForm = maskeForm;
}
/*
* MaskeninfoElement(Vector vectorMaskeninfoEntries) throws IOException {
* init(vectorMaskeninfoEntries);
* }
*/
/**
* fieser Trick: es wird als letztes Element noch ein Vector mit
* Spaltenerläuterungen mitgeliefert
*/
protected void init(Vector vectorMaskeninfoEntries) throws IOException {
// vector of vector
Vector vectorCurrentMask = (Vector) vectorMaskeninfoEntries
.elementAt(0);
setSelectStmt(vectorCurrentMask.elementAt(1));
setXilPropListString(vectorCurrentMask.elementAt(2));
setCleanupStmt(vectorCurrentMask.elementAt(3));
setBreite((Integer) vectorCurrentMask.elementAt(4));
setHoehe((Integer) vectorCurrentMask.elementAt(5));
stand = new java.sql.Date(1);
Object tmpDate = vectorCurrentMask.elementAt(6);
if (tmpDate != null) {
try {
// für Informix
stand = (java.sql.Date) tmpDate;
} catch (ClassCastException e) {
// für Access
java.sql.Timestamp mytimestamp = (java.sql.Timestamp) tmpDate;
long mytimestampwert = mytimestamp.getTime();
stand = new java.sql.Date(mytimestampwert);
}
}
setHinweis(vectorCurrentMask.elementAt(7));
setErlaueterung((String) vectorCurrentMask.elementAt(8));
// fieser Trick
Object expl = vectorCurrentMask.elementAt(9);
if (!(expl instanceof SxResultRow)) {
String msg = "Es wurde ein ResultRow mit Erläuterungen erwartet (SuperXDBServlet. addExplanations). statt dessen wurde geliefert: ";
if (expl == null)
msg += "null";
else
msg += " ein " + expl.getClass() + " :" + expl;
throw new IllegalArgumentException(msg);
}
spaltenExplanations = new Vector();
spaltenExplanations
.addAll((SxResultRow) vectorCurrentMask.elementAt(9));
// cloneExplanations();
}
boolean hasSpaltenExplanations() {
boolean result = false;
for (Iterator it = spaltenExplanations.iterator(); it.hasNext();) {
String expl = (String) it.next();
if (expl != null && !expl.trim().equals("")) {
result = true;
break;
}
}
return result;
}
StringBuffer getSpaltenExplanationText() {
StringBuffer buf = new StringBuffer("");
for (int i = 0; i < spaltenExplanations.size(); i++) {
String expl = (String) spaltenExplanations.get(i);
if (expl != null && !expl.trim().equals(""))
buf.append(expl + "<br><br>");
}
return buf;
}
public void adaptExplanation(int pos, String neu) {
if (spaltenExplanations.size() > pos) {
String expl = (String) spaltenExplanations.get(pos);
if (expl.indexOf("</b>") > -1) {
expl = "<b>" + neu
+ expl.substring(expl.indexOf("</b>"), expl.length());
System.out.println("neu:" + expl);
spaltenExplanations.setElementAt(expl, pos);
}
}
}
Integer getBreite() {
return breite;
}
String getStandString() {
String d_str = "";
if (getStand() != null)
d_str = SxDate.toString(getStand());
return d_str;
}
String getCleanupStmt() {
return cleanupStmt;
}
String getHinweis() {
return hinweis;
}
Integer getHoehe() {
return hoehe;
}
String getSelectStmt() {
return selectStmt;
}
Date getStand() {
return stand;
}
Integer getTid() {
return tid;
}
private String getTmpXilPropListString() throws TemplateException,
IOException, SQLException {
String tmpxil = SxUtils.generateSQL(maskeForm, xilPropListString);
tmpxil = SxSQL.templateProcessor.process("XIL-Maske " + getName(),
tmpxil,
maskeForm.getHashMap(getTid()), (String) SxDefaults.getPropertyValue("SxDB"));
ByteArrayInputStream bis = new ByteArrayInputStream(tmpxil.getBytes());
xilProps.load(bis);
return tmpxil;
}
void setBreite(Integer integer) {
breite = integer;
}
void setCleanupStmt(Object stmt) {
if (stmt == null)
stmt = "";
cleanupStmt = (String) stmt;
}
void setHinweis(Object hin) {
hinweis = null;
if (hin != null)
hinweis = hin.toString();
}
void setHoehe(Integer integer) {
hoehe = integer;
}
void setSelectStmt(Object stmt) {
if (stmt == null)
throw new IllegalArgumentException(
"null ist nicht erlaubt für select stmt");
selectStmt = (String) stmt;
}
private void setStand(Date date) {
stand = date;
}
void setTid(Integer integer) {
tid = integer;
}
/**
* Hinterlegt die XIL-Proplist. Derzeit vom Applet nicht unterstützte
* colspan-Tags \000 werden entfernt
*
* @param xil
*/
void setXilPropListString(Object xil) {
if (xil == null)
throw new IllegalArgumentException("null ist nicht erlaubt für xil");
StringBuffer buf = new StringBuffer(xil.toString());
de.memtext.util.StringUtils.replace(buf, "\\000", "\\n");
xilPropListString = buf.toString();
xilParser.setXilString(xilPropListString);
}
/**
* wird nur zum Auslesen des Parameters fixed_columns benötigt
*
* @return
*/
Properties getXilProps() {
return xilProps;
}
Vector getFelderinfos() {
return felderinfos;
}
void setFelderinfos(Vector vector) {
felderinfos = vector;
}
void clear() {
felderinfos = null;
tid = breite = hoehe = null;
xilPropListString = selectStmt = cleanupStmt = hinweis = null;
stand = null;
}
/**
* not currently needed
*
* @throws SQLException
*/
void readSachgebiete() throws SQLException {
sachgebiete.clear();
SxSQL
.executeQuery("select sachgebiete_id from sachgeb_maske_bez where maskeninfo_id="
+ getTid());
Sachgebiet sachgeb;
for (Iterator iter = SxSQL.getResultVector().iterator(); iter.hasNext();) {
Vector row = (Vector) iter.next();
sachgeb = (Sachgebiet) Sachgebiete.getById(row.get(0));
sachgebiete.add(sachgeb);
}
}
boolean isSqlInHeaders() throws TemplateException, IOException,
SQLException {
// sets the boolean properly
getHeaderVector();
return isSqlInHeaders;
}
/**
* Gets a Vector with the column names for the table header. also sets
* boolean isSqlInHeaders
*
* @return
* @throws SQLException
* @throws IOException
* @throws TemplateException
*/
Vector getHeaderVector() throws TemplateException, IOException,
SQLException {
Vector header = new Vector();
int pos = 0;
int end_pos = 0;
int offset = 0;
String tmpxil = getTmpXilPropListString();
int len = tmpxil.length();
String search_str = "heading_text=\"";
String header_str = null;
int search_len = search_str.length();
isSqlInHeaders = false;
while (offset < len) {
if ((pos = tmpxil.indexOf(search_str, offset)) != -1) {
if ((end_pos = tmpxil.indexOf("\"", pos + search_len)) != -1) {
header_str = tmpxil.substring(pos + search_len, end_pos);
if (header_str.trim().startsWith("<<SQL>>"))
isSqlInHeaders = true;
header.addElement(header_str);
offset = pos + search_len + header_str.length() + 1;
} else
break;
} else
break;
}
return header;
}
Vector getWidthVector() throws TemplateException, IOException, SQLException {
xilParser.setXilString(getTmpXilPropListString());
return xilParser.getWidths();
}
/**
* @return Returns the erlaueterung.
*/
public String getErlaueterung() {
return erlaueterung;
}
/**
* @param erlaueterung
* The erlaueterung to set.
*/
public void setErlaueterung(String erlaueterung) {
this.erlaueterung = erlaueterung;
}
/*
* public void cloneExplanations() { explanationsClone=new Vector(); for
* (Iterator it = spaltenExplanations.iterator(); it.hasNext();) { String
* element = (String) it.next(); explanationsClone.add(new String(element)); } }
*/
public int getFixedColumns() {
String fx = this.getXilProps().getProperty("fixed_columns", "1");
int fc = Integer.parseInt(fx);
if (fc == 1
&& xilPropListString.toLowerCase().indexOf("\"ebene\"") > -1) {
fc = 2;
}
return fc;
}
}
// Created on 30.11.2003 at 17:59:08

16
src/de/superx/applet/Sachgebiet.java

@ -1,16 +0,0 @@ @@ -1,16 +0,0 @@
package de.superx.applet;
import de.memtext.baseobjects.NamedIdObject;
/**
* not currently needed
* see SuperX.isSachgebieteNeeded
*/
public class Sachgebiet extends NamedIdObject {
public Sachgebiet(Object id, String name) {
super(id, name);
}
}
//Created on 20.11.2003

53
src/de/superx/applet/Sachgebiete.java

@ -1,53 +0,0 @@ @@ -1,53 +0,0 @@
package de.superx.applet;
import java.sql.SQLException;
import java.util.Iterator;
import de.memtext.baseobjects.NamedIdObjectI;
import de.memtext.baseobjects.coll.NamedIdObjectSet;
import de.superx.common.SxResultRow;
import de.superx.common.SxResultSet;
/**
* Not currently needed!
* see SuperX.isSachgebieteNeeded
*/
public class Sachgebiete {
static NamedIdObjectSet _set = new NamedIdObjectSet();
private Sachgebiete() {
}
public static void set(NamedIdObjectSet set) {
_set = set;
}
public static NamedIdObjectI getById(Object id) {
if (_set == null)
throw new IllegalStateException("list not set");
NamedIdObjectI result = null;
try {
result = _set.getById(id);
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException(
"Es gibt kein Sachgebiet mit der Nummer " + id);
}
return result;
}
public static NamedIdObjectSet getSet() {
return _set;
}
public static void init() throws SQLException {
_set.clear();
SxSQL.executeQuery("select tid,name from sachgebiete");
SxResultSet result = SxSQL.getResult();
for (Iterator iter = result.iterator(); iter.hasNext();) {
SxResultRow row = (SxResultRow) iter.next();
_set.add(
new Sachgebiet(
(Integer) row.get(0),
row.get(1).toString()));
}
}
}
//Created on 19.11.2003

231
src/de/superx/applet/SichtApplet.java

@ -1,231 +0,0 @@ @@ -1,231 +0,0 @@
package de.superx.applet;
import java.awt.Component;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Vector;
import javax.swing.Icon;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import de.memtext.tree.HideableNode;
import de.superx.common.AbstractSicht;
import de.superx.common.FieldContainer;
import de.superx.common.SelectableItemTree;
import de.superx.common.Sichten;
import de.superx.common.SxResultSet;
import de.superx.servlet.SxPools;
import de.superx.util.SqlStringUtils;
import freemarker.template.TemplateException;
/**
* Implementierung für den Einsatz im Applet
*/
public class SichtApplet extends AbstractSicht {
private static final long serialVersionUID = 1;
public SichtApplet(Sichten sichten, Object id, String name) {
super(sichten, id, name);
setCellRenderer(new SxTreeRenderer());
}
/**
* just for cloning
*
* @param id
* @param name
* @param model
*/
private SichtApplet(Sichten sichten, Object id, String name,
DefaultTreeModel model) {
super(sichten, id, name, model);
setCellRenderer(new SxTreeRenderer());
}
protected SxResultSet readFromDb(String sql) throws SQLException {
SxSQL.executeAll(sql);
SxResultSet rohform = SxSQL.getResult();
SxSQL.close();
return rohform;
}
public void searchEntries(String such) {
String teststring;
TreePath tp;
boolean gefunden = false;
DefaultMutableTreeNode test, ausgesucht;
ausgesucht = null;
Vector treffer = new Vector();
Vector treffernodes = new Vector();
// alle Knoten durchlaufen
Enumeration en = getRoot().breadthFirstEnumeration();
while (en.hasMoreElements()) {
test = (DefaultMutableTreeNode) en.nextElement();
if (test instanceof HideableNode
&& ((HideableNode) test).isHidden())
continue;
teststring = test.toString().toLowerCase();
if (teststring.indexOf(such) > -1) {
// wenn suchString im aktuellen Knoten vorhanden
// K
if (test != getRoot()) {
treffer.addElement(test.toString());
treffernodes.addElement(test);
}
}
}
if (treffer.size() > 0) {
if (treffer.size() > 1) {
// mehr als ein Treffer -> Auswahldialog
Object[] trefferstring = new String[treffer.size()];
treffer.copyInto(trefferstring);
String selectedValue = (String) showBigChoiceDialog(null,
"Mehrere Treffer- bitte auswählen...", "SuperX",
JOptionPane.INFORMATION_MESSAGE, null, trefferstring,
trefferstring[0]);
/*
* String selectedValue = (String) JOptionPane.showInputDialog(
* null, "Mehrere Treffer- bitte auswählen...", "SuperX",
* JOptionPane.INFORMATION_MESSAGE, null, trefferstring,
* trefferstring[0]);
*/
if (selectedValue == null)
return;
gefunden = false;
// gewählten Knoten nach Name in Treffernodes-Vektor suchen
en = treffernodes.elements();
while (en.hasMoreElements() && gefunden == false) {
test = (DefaultMutableTreeNode) en.nextElement();
if (test.toString().equals(selectedValue)) {
ausgesucht = test;
gefunden = true;
}
}
}
if (ausgesucht == null) // bei treffer.size=1
ausgesucht = (DefaultMutableTreeNode) treffernodes.elementAt(0);
// collapse all brances + Selection anwählen
// if (!tree.isSelectionEmpty()) tree.clearSelection();
en = getRoot().depthFirstEnumeration();
while (en.hasMoreElements()) {
test = (DefaultMutableTreeNode) en.nextElement();
tp = new TreePath(test.getPath());
if (test != getRoot() && isExpanded(tp))
collapsePath(tp);
}
tp = new TreePath(ausgesucht.getPath());
addSelectionPath(tp);
scrollPathToVisible(tp);
validate();
repaint();
} else
JOptionPane.showMessageDialog(null, "Keine Treffer!", "SuperX", 1);
}
private Object showBigChoiceDialog(Component parentComponent,
Object message, String title, int messageType, Icon icon,
Object[] selectionValues, Object initialSelectionValue) {
JOptionPane pane = new JOptionPane(message, messageType,
JOptionPane.OK_CANCEL_OPTION, icon, null, null);
pane.setWantsInput(true);
pane.setSelectionValues(selectionValues);
pane.setInitialSelectionValue(initialSelectionValue);
JDialog dialog = pane.createDialog(parentComponent, title);
dialog.setSize(400, 200);
pane.selectInitialValue();
dialog.show();
Object value = pane.getInputValue();
if (value == JOptionPane.UNINITIALIZED_VALUE)
return null;
return value;
}
/**
* Im Xml-Frontend wird membervariable userid der AbstractSicht benutzt,
* hier wird getUserId() überschrieben, um Applet-spezifisch UseriD aus
* SxSQl zu holen
*/
public Integer getUserid() {
return SxSQL.getUserID();
}
protected String getSqlDialect() {
String result = (String) SxDefaults.getPropertyValue("SxDB");
return result;
}
public Object clone() throws CloneNotSupportedException {
SelectableItemTree st = (SelectableItemTree) super.clone();
SichtApplet cl = new SichtApplet(sichten, getId(), getName(),
(DefaultTreeModel) st.getModel());
finishClone(cl);
return cl;
}
private class SxTreeRenderer extends DefaultTreeCellRenderer {
private static final long serialVersionUID = 1L;
public SxTreeRenderer() {
}
public Component getTreeCellRendererComponent(JTree jtree, Object obj,
boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
if (!((DefaultMutableTreeNode)obj).isLeaf())
{
boolean isAllChildrenHidden=true;
for(Enumeration en=((DefaultMutableTreeNode)obj).children();en.hasMoreElements();)
{
Object o=en.nextElement();
if (!(o instanceof HideableNode)||!((HideableNode)o).isHidden())
isAllChildrenHidden=false;
}
if (isAllChildrenHidden) {leaf=true;expanded=true;}
}
super.getTreeCellRendererComponent(jtree, obj, sel,expanded,leaf,row,hasFocus);
return this;
}
}
/**
* von Applet nicht unterstützt
*/
public String dynamicSichtGenerateSql(Hashtable formular,String sql) {
return sql;
}
/**
* von Applet nicht unterstützt
*/
public String dynmicSichtFMParsing(HashMap map,
FieldContainer individualFields, String sql)
throws TemplateException, IOException, SQLException {
return sql;
}
}

314
src/de/superx/applet/SuperX.java

@ -1,314 +0,0 @@ @@ -1,314 +0,0 @@
package de.superx.applet;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.image.ImageObserver;
import java.awt.image.PixelGrabber;
import java.util.Hashtable;
import javax.swing.ImageIcon;
import javax.swing.JApplet;
import javax.swing.UIManager;
import de.memtext.util.HtmlUtils;
import de.memtext.widgets.WarningMessage;
import de.superx.common.SxUser;
/**
* Hauptklasse von SuperX, mit der SuperX als Applet oder als Applikation
* aufgerufen werden kann.
*
* @version 2.0 01/01/02
* @author Rainer Behr, erweitert von Marlies Winterstein, Meikel Bisping
*/
public class SuperX extends JApplet {
static boolean isSachgebieteNeeded = false;
static boolean isZukünftigerStandErlaubt=true;
ImageIcon logo_img = new ImageIcon();
ImageIcon connect_img = new ImageIcon();
ImageIcon disconnect_img = new ImageIcon();
ImageIcon passwd_img = new ImageIcon();
ImageIcon clone_img = new ImageIcon();
ImageIcon copy_img = new ImageIcon();
ImageIcon save_img = new ImageIcon();
ImageIcon print_img = new ImageIcon();
ImageIcon info_img = new ImageIcon();
//Wint
ImageIcon help_img = new ImageIcon();
Hashtable img_map = new Hashtable();
static boolean isAuthentificationFound = false;
static String remoteUser=null;
private SxMask sxMask;
public void destroy() {
sxMask.close();
}
public void init() {
initImages();
String docBase = HtmlUtils.getCorretDocBase(this);
String prop_file = docBase + "superx.properties";
//System.out.println("prop_file: " + prop_file); //Wint
//Stuttgart verwendet http://superx/superx/applet/...
int pos = docBase.lastIndexOf("/superx/");
String defaultServerUrl = null;
if (pos > 0) {
defaultServerUrl = docBase.substring(0, pos)
+ "/superx/servlet/SuperXDBServlet";
//System.out.println("default URL of Servlet: "+defaultServerUrl);
} else {
System.out
.println("Can't identify SxServerURL automatically, since CodeBase "+docBase+ " doesn't contain /superx/ SxServerURL has to be specified in superx.properties");
}
SxDefaults.setDefaultServerUrl(defaultServerUrl);
SxDefaults.setPropertyFile(prop_file);
sxMask = new SxMask("SuperX @version@", img_map, true);
//sxMask = new SxMask("SuperX 2.04", img_map, true);
}
private void initImages() {
PixelGrabber pg = null;
try {
UIManager
.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception ex) {
System.err.println("WindowsLookAndFeel nicht verfügbar");
}
try {
Image logo_icon, connect_icon, disconnect_icon, passwd_icon;
Image clone_icon, copy_icon, save_icon, print_icon, info_icon;
Image help_icon;
String img_path = "images";
// der ClassLoader steht ganz oben also auf gleicher Ebene wie de
//und sucht images im Unterverzeichnis /images
//de
//images
ClassLoader cl = getClass().getClassLoader();
logo_icon = getImage(cl.getResource(img_path + "/superx.gif"));
disconnect_icon = getImage(cl.getResource(img_path
+ "/disconnect.gif"));
connect_icon = getImage(cl.getResource(img_path + "/connect.gif"));
passwd_icon = getImage(cl.getResource(img_path + "/passwd.gif"));
clone_icon = getImage(cl.getResource(img_path + "/clone.gif"));
copy_icon = getImage(cl.getResource(img_path + "/sx_copy.gif"));
save_icon = getImage(cl.getResource(img_path + "/sx_save.gif"));
print_icon = getImage(cl.getResource(img_path + "/sx_print.gif"));
info_icon = getImage(cl.getResource(img_path + "/info.gif"));
//Wint
help_icon = getImage(cl.getResource(img_path + "/help.gif"));
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(logo_icon, 0);
tracker.addImage(disconnect_icon, 1);
tracker.addImage(connect_icon, 2);
tracker.addImage(clone_icon, 3);
tracker.addImage(copy_icon, 4);
tracker.addImage(save_icon, 5);
tracker.addImage(print_icon, 6);
tracker.addImage(help_icon, 7);
tracker.addImage(info_icon, 8);
tracker.addImage(passwd_icon, 9);
tracker.waitForAll(0);
if (logo_icon == null)
System.out.println("superx.gif nicht gefunden");
logo_img = new ImageIcon(logo_icon);
disconnect_img = new ImageIcon(disconnect_icon);
connect_img = new ImageIcon(connect_icon);
passwd_img = new ImageIcon(passwd_icon);
clone_img = new ImageIcon(clone_icon);
copy_img = new ImageIcon(copy_icon);
save_img = new ImageIcon(save_icon);
print_img = new ImageIcon(print_icon);
info_img = new ImageIcon(info_icon);
//Wint
help_img = new ImageIcon(help_icon);
img_map.put("disconnect", disconnect_img);
img_map.put("connect", connect_img);
img_map.put("passwd", passwd_img);
img_map.put("clone", clone_img);
img_map.put("copy", copy_img);
img_map.put("save", save_img);
img_map.put("print", print_img);
img_map.put("info", info_img);
//Wint
img_map.put("help", help_img);
int logow, logoh;
logow = logo_img.getIconWidth();
logoh = logo_img.getIconWidth();
int[] pixelarray = new int[logow * logoh];
pg = new PixelGrabber(logo_img.getImage(), 0, 0, logow, logoh,
pixelarray, 0, logow);
if (!pg.grabPixels())
System.err.println("init: grabPixels() failed");
else
img_map.put("logo_pixels", pixelarray);
img_map.put("logo", logo_img);
} catch (InterruptedException ex) {
System.err.println(ex.toString());
}
if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
System.err.println("image fetch aborted or error: "
+ pg.getStatus());
}
}
public static void main(String s[]) {
System.out.println("SuperX @version@ (build:@sxtimestamp@)");
PixelGrabber pg = null;
final SxMask sxMask;
final Hashtable img_map = new Hashtable();
final ImageIcon logo_img;
final ImageIcon disconnect_img;
final ImageIcon connect_img;
final ImageIcon passwd_img;
final ImageIcon clone_img;
final ImageIcon copy_img;
final ImageIcon save_img;
final ImageIcon print_img;
final ImageIcon info_img;
//Wint
final ImageIcon help_img;
try {
UIManager
.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
//UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
//UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
} catch (Exception ex) {
// System.err.println ("MacLookAndFeel not available: " +
// ex.toString());
System.err.println("WindowsLookAndFeel not available: "
+ ex.toString());
}
initImagesWhenApplication(img_map);
SxDefaults
.setDefaultServerUrl("http://localhost:8080/superx/servlet/SuperXDBServlet");
//System.out.println("Hinweis: Wenn kein Eintrag für SxServerUrl in
// superx.properties wird mit
// http://localhost:8080/superx/servlet/SuperXDBServlet gearbeitet");
SxDefaults.setPropertyFile("file:superx.properties");
sxMask = new SxMask("SuperX @version@", img_map, false);
sxMask.open();
}
private static void initImagesWhenApplication(final Hashtable img_map) {
PixelGrabber pg;
final ImageIcon logo_img;
final ImageIcon disconnect_img;
final ImageIcon connect_img;
final ImageIcon passwd_img;
final ImageIcon clone_img;
final ImageIcon copy_img;
final ImageIcon save_img;
final ImageIcon print_img;
final ImageIcon info_img;
final ImageIcon help_img;
String img_dir = "images";
logo_img = new ImageIcon(img_dir + "/superx.gif");
disconnect_img = new ImageIcon(img_dir + "/disconnect.gif");
connect_img = new ImageIcon(img_dir + "/connect.gif");
passwd_img = new ImageIcon(img_dir + "/passwd.gif");
clone_img = new ImageIcon(img_dir + "/clone.gif");
copy_img = new ImageIcon(img_dir + "/sx_copy.gif");
save_img = new ImageIcon(img_dir + "/sx_save.gif");
print_img = new ImageIcon(img_dir + "/sx_print.gif");
info_img = new ImageIcon(img_dir + "/info.gif");
//Wint
help_img = new ImageIcon(img_dir + "/help.gif");
int logow, logoh;
logow = logo_img.getIconWidth();
logoh = logo_img.getIconWidth();
int[] pixelarray = new int[logow * logoh];
try {
pg = new PixelGrabber(logo_img.getImage(), 0, 0, logow, logoh,
pixelarray, 0, logow);
if (!pg.grabPixels())
System.err.println("init: grabPixels() failed");
else
img_map.put("logo_pixels", pixelarray);
} catch (InterruptedException ie) {
System.err.println(ie);
}
img_map.put("logo", logo_img);
img_map.put("disconnect", disconnect_img);
img_map.put("connect", connect_img);
img_map.put("passwd", passwd_img);
img_map.put("clone", clone_img);
img_map.put("copy", copy_img);
img_map.put("save", save_img);
img_map.put("print", print_img);
img_map.put("info", info_img);
//Wint
img_map.put("help", help_img);
}
public void start() {
String zukünftigerStandErlaubt=getParameter("zukünftigerStandErlaubt");
if (zukünftigerStandErlaubt!=null&&zukünftigerStandErlaubt.equals("false"))
isZukünftigerStandErlaubt=false;
SuperX.isAuthentificationFound=false;
String jsessionid = getParameter("jsessionid");
remoteUser=getParameter("remoteUser");
if (remoteUser==null||remoteUser.equals("")||remoteUser.equals("null"))
remoteUser=null;
SxDefaults.init();
try {
if (jsessionid != null && !jsessionid.trim().equals("")) {
// && userid != null && !userid.trim().equals("")) {
SuperX.isAuthentificationFound = true;
SxSQL.jsessionid = jsessionid;
String userstr = SxSQL.getUserFromServlet();
if (userstr != null) {
String userid = userstr.substring(0, userstr.indexOf("|"));
String kennung = userstr.substring(userstr.indexOf("|") + 1,userstr.indexOf("^"));
String admin=userstr.substring(userstr.indexOf("^")+1);
SxSQL.setUserID(new Integer(Integer.parseInt(userid)));
SxUser user=new SxUser("default", kennung, new Integer(Integer
.parseInt(userid))); // kein Mandantenbetrieb bei Applet
if (admin.equals("1")) user.setAdmin(true);
//sxMask.setUser(new SxUser(getParameter("kennung"), new
// Integer(Integer.parseInt(userid))));
sxMask.setUser(user);
// sxMask.setConnectPwBtnsSVisible(false);
int mode = 0;//anmelden
sxMask.initUser(mode);
}
}
SxSQL.initParams();
sxMask.open();
} catch (Exception e) {
WarningMessage.show(this, "Anmeldung fehlgeschlagen.\n" + e,
"SuperX");
e.printStackTrace();
}
}
}

96
src/de/superx/applet/SxDate.java

@ -1,96 +0,0 @@ @@ -1,96 +0,0 @@
package de.superx.applet;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;
/**
* Statische Klasse mit Hilfsfunktionen für Datumsobjekte.
*
* @version 2.0 01/01/02
* @author Rainer Behr, modified by Meikel Bisping
*/
public class SxDate {
static DateFormat df;
static java.util.Date date;
static java.sql.Date sql_date;
static Calendar calendar;
static {
df = DateFormat.getDateInstance(DateFormat.MEDIUM);
// r.b. default Jahr 4-stellig
df.setTimeZone(TimeZone.getDefault());
df.setLenient(false);
}
/**
* Wandelt einen String in ein java.sql.Date-Objekt um.
* @param value umzuformender String
* @return java.sql.Date-Objekt. Wenn der String nicht in Ordnung ist, wird NULL zurückgeliefert.
*/
public static java.sql.Date getDate(String value) {
try {
if (value.endsWith("00")) {
switch (value.charAt(value.length() - 3)) {
case '-' :
case '.' :
case '/' :
value = value.substring(0, value.length() - 2) + "2000";
break;
}
}
date = df.parse(value);
calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
if (year >= 0 && year < 30)
calendar.add(Calendar.YEAR, 2000);
if (year >= 30 && year < 100)
calendar.add(Calendar.YEAR, 1900);
sql_date = new java.sql.Date(calendar.getTime().getTime());
return sql_date;
} catch (ParseException e_parse) {
// System.err.println ("SxDate: ERROR: parse: Date != " + value);
} catch (IllegalArgumentException e_arg) {
// System.err.println ("SxDate: ERROR: arg: Date != " + value);
}
return null;
}
/**
* Wandelt ein java.sql.Date-Objekt in einen String um.
* @param value umzuwandelndes sql.Date-Objekt
* @return String
*/
public static String toString(java.sql.Date aDate) {
return df.format((java.util.Date) aDate);
}
public static String getNowString() {
GregorianCalendar cal = new GregorianCalendar();
String jetzt =
cal.get(Calendar.DATE)
+ "."
+ (cal.get(Calendar.MONTH) + 1)
+ "."
+ cal.get(Calendar.YEAR)
+ " "
+ (cal.get(Calendar.HOUR_OF_DAY))
+ ":"
+ cal.get(Calendar.MINUTE)
+ ":"
+ cal.get(Calendar.SECOND);
return jetzt;
}
}

165
src/de/superx/applet/SxDefaults.java

@ -1,165 +0,0 @@ @@ -1,165 +0,0 @@
package de.superx.applet;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Properties;
import javax.swing.JOptionPane;
/**
* Defaultwerte werden aus superx.properties-Datei eingelesen (der wichtigste
* Wert ist SxServerURL, die URL des Servlets). <br>
* Weiterhin werden Defaultwerte von Auswahlfeldern (wie Semester oder
* Hörerstatus) abgelegt und wieder abgerufen.Diese Funktion wird in SxForm
* genutzt.
*
* @version 1.0 23.4.99
* @author Rainer Behr
*/
public class SxDefaults {
static Hashtable defaults_map;
static String propertyFile;
static String defaultServerUrl;
static {
defaults_map = new Hashtable();
propertyFile = null;
}
public static void setPropertyFile(String file) {
propertyFile = new String(file);
}
public static void setDefaultServerUrl(String url) {
defaultServerUrl = url;
}
public static void addProperty(String name, Object nkey, Object nvalue) {
Properties prop = new Properties();
prop.put("key", nkey);
prop.put("value", nvalue);
defaults_map.put(name, prop);
}
public static Properties getProperty(String name) {
Properties prop = (Properties) defaults_map.get(name);
return prop;
}
public static Object getPropertyValue(String name) {
Properties prop = (Properties) defaults_map.get(name);
if (prop != null)
return prop.getProperty("value");
else {
String msg = "Property '" + name
+ "' in 'superx.properties' nicht gefunden !";
throw new NullPointerException(msg);
}
}
public static void contents() {
Enumeration en;
Properties prop;
String name;
Object key;
Object value;
en = defaults_map.keys();
while (en.hasMoreElements()) {
name = (String) en.nextElement();
prop = (Properties) SxDefaults.getProperty(name);
if (prop == null)
continue;
key = prop.get("key");
value = prop.get("value");
//System.out.println (name + ": key=" + key.toString() + ", value="
// + value.toString());
}
}
public static void clear() {
defaults_map.clear();
defaults_map = new Hashtable();
init();
}
/**
* Setzt auch mandantenID in SxSQL falls angegeben
*
*/
public static void init() {
// Default Properties
// ---------------------------------------------------------------------
String prop_file;
Properties props = new Properties();
int b_len = 0;
if (propertyFile != null)
prop_file = propertyFile;
else
prop_file = "file:superx.properties";
try {
URL props_url = new URL(prop_file);
InputStream is = props_url.openStream();
if (is == null) {
String msg = "Ressourcedatei '" + prop_file
+ "' nicht gefunden. ";
throw new IOException(msg);
/* Möglichkeit aus System-properties zu lesen, wenn
* jnlp Datei als Application
* Versuche aus System-properties zu lesen";
System.out.println(msg);
//MB 2/2016 versuch
props.put("logToKonsole",System.getProperty("logToKonsole"));
props.put("SxTitle",System.getProperty("SxTitle"));
props.put("SxDB",System.getProperty("SxDB"));
props.put("SxParamStart",System.getProperty("SxParamStart"));
props.put("SxParamEnd",System.getProperty("SxParamEnd"));
props.put("SxParamBoldOn",System.getProperty("SxParamBoldOn"));
props.put("SxParamBoldOff",System.getProperty("SxParamBoldOff"));
*/
}
props.load(is);
is.close();
if (props.getProperty("SxServerURL") == null)
props.setProperty("SxServerURL", defaultServerUrl);
// Properties in Class SxDefaults einfuegen
String key;
String value;
Enumeration en = props.propertyNames();
//if no special value was speficied for the ServerUrl, use the
// default
String mandantenID="default";
while (en.hasMoreElements()) {
key = (String) en.nextElement();
value = (String) props.getProperty(key);
if (key.equals("MandantenID"))
mandantenID=value;
addProperty(key, key, value);
}
//Zuweisung darf erst hier passieren,
//sonst Probleme mit statischen Vars in SxSQL
SxSQL.mandantenID=mandantenID;
} catch (IOException ex) {
System.err.println(ex);
JOptionPane.showMessageDialog(null, ex.toString(), "Fehler",
JOptionPane.ERROR_MESSAGE);
}
}
public static void removeProperty(String name) {
defaults_map.remove(name);
}
}

49
src/de/superx/applet/SxDeleteListener.java

@ -1,49 +0,0 @@ @@ -1,49 +0,0 @@
package de.superx.applet;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
/**
*
* Listener für den Löschen-Button bei einer Mehrfachauswahl.
* @version 1.0 15.09.00
* @author Rainer Behr
* @see SxDlg
*/
public class SxDeleteListener implements ActionListener {
SxTablePanel sxTablePanel;
SxDeleteListener() {
sxTablePanel = SxDlgManager.getChoiceTable();
};
/**
*
* Das markierte Element wird (in der rechten Tabelle) bei einer Mehrfachauswahl gelöscht.
*
*/
public void actionPerformed(ActionEvent e) {
SxTableSorter model =
(SxTableSorter) sxTablePanel.getTable().getModel();
Vector V_choice = SxDlgManager.getChoiceData();
int[] rows = sxTablePanel.getTable().getSelectedRows();
int cols = sxTablePanel.getTable().getColumnCount();
int[] indexes = model.getIndexes();
if (rows.length <= 0)
return;
for (int i = rows.length; i > 0; i--) {
V_choice.removeElementAt(indexes[rows[i - 1]]);
}
model.fireTableRowsDeleted(rows[0], rows[rows.length - 1]);
sxTablePanel.setData(V_choice);
model.sortByColumn(cols - 1);
}
}

50
src/de/superx/applet/SxDlg.java

@ -1,50 +0,0 @@ @@ -1,50 +0,0 @@
package de.superx.applet;
import java.awt.Frame;
import java.awt.HeadlessException;
import javax.swing.JComponent;
import de.memtext.baseobjects.DoubleClickMouseListener;
import de.memtext.dlg.OkCancelClearDlg;
import de.memtext.util.WindowUtils;
public class SxDlg extends OkCancelClearDlg {
public SxDlg(Frame parent, String title, JComponent comp)
throws HeadlessException {
super(parent, title);
this.setCenter(comp);
this.pack();
WindowUtils.center(this);
if (comp instanceof SxTablePanel) {
SxTablePanel sxTablePanel = (SxTablePanel) comp;
sxTablePanel
.getTable()
.addMouseListener(new DoubleClickMouseListener() {
protected void doubleClickOccured() {
wasOkSelected = true;
performOk();
}
});
}
}
protected void performClear() {
this.hide();
}
protected void performOk() {
this.hide();
}
protected void performCancel() {
this.hide();
}
}
//Created on 16.03.2004 at 15:28:54

164
src/de/superx/applet/SxDlgListener.java

@ -1,164 +0,0 @@ @@ -1,164 +0,0 @@
package de.superx.applet;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.Iterator;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JRootPane;
import de.memtext.tree.KeyParentEqualException;
import de.memtext.tree.NoMainEntryException;
import de.memtext.widgets.WarningMessage;
import de.superx.common.DBServletException;
import de.superx.common.SelectableItem;
import de.superx.common.Sichtgruppe;
/**
* Dialoglistener für SxMask und SxDlg.Dabei wird unterschieden,ob es sich um
* einen Institutionenauswahldialog oder einen anderen Dialog handelt. Bei
* Ersterem werden entsprechend der Dialogart (Nr. 4/6/7) Einrichtungen aus dem
* Bereich Lehre angezeigt oder nicht. Aufgerufen von SxMask.addButtonField
*
* @version 2.0 01-01-02
* @author Rainer Behr, erweitert von Meikel Bisping, Daniel Quathamer
*/
public class SxDlgListener implements ActionListener, Runnable {
SxDlgListener dlg_th;
SxMask dlgmask;
private String erläuterung;
SxForm dlgform;
JButton dlgBtn;
SxField sxField;
String name;
int fieldnr;
int dlg_art;
private Sichtgruppe sichtgruppe;
SxDlgListener(SxMask mask, SxForm form, JButton btn, String erläuterung,
int n, int art) {
dlgmask = mask;
dlgform = form;
dlgBtn = btn;
fieldnr = n;
dlg_art = art;
this.erläuterung = erläuterung;
// voranstehendes L_ abschneiden
name = dlgBtn.getName().substring(2);
};
public void actionPerformed(ActionEvent e) {
dlgBtn.setEnabled(false);
SxWaitCursor.set(dlgmask, true);
new Thread(this).start();
}
public void run() {
if (dlg_art == 4 || dlg_art == 6 || dlg_art == 7 || dlg_art == 12) {
try {
openTreeDlg();
} catch (Exception e) {
WarningMessage.show(dlgmask, "Konnte Dialog nicht öffnen.\n"
+ e, "SuperX");
e.printStackTrace();
}
} else {
SxDlgManager.openDlg(dlgmask, dlgform, dlgBtn.getName(), dlgBtn
.getText(), fieldnr, dlg_art);
}
dlgBtn.setEnabled(true);
SxWaitCursor.set(dlgmask, false);
JRootPane root = dlgform.getRootPane();
root.setDefaultButton(dlgform.getDefaultBtn());
}
public Sichtgruppe getSichtgruppe() {
return sichtgruppe;
}
public void setSichtgruppe(Sichtgruppe sichtgruppe) {
this.sichtgruppe = sichtgruppe;
}
// dlgform.getDefaults() hier störend da das in OpenDlg passiert!
private void openTreeDlg() throws SQLException, DBServletException,
KeyParentEqualException, CloneNotSupportedException, NoMainEntryException {
SxTreeDlg dlg = new SxTreeDlg(dlgmask.getFrame(), dlgBtn.getText(),
sichtgruppe, erläuterung);
dlg.setVisible(true);
// Auf das Schließen des Dialogs warten...
SxField field = dlgform.getField("F_" + name);
// könnte eigentlich 1x beim Feldinit gemacht werden, klappt aber nicht
field.setSichtgruppe(sichtgruppe);
if (!dlg.wasCancelSelected())
{
field
.setSelectedSicht((SichtApplet) sichtgruppe
.getSelectedSicht());
if (dlg.isStandChanged)
clearRememberedValues();
dlgform.setErlaubt(false);
if (dlg.getSelections().size() == 0)
throw new IllegalStateException("TreeDialog hätte mindestens 1 Item liefern müssen");
if (dlg.getSelections().size() == 1) {//kann auch bei clear -1-Objekt für alles sein
if (field.isWithCombo()) {
JComboBox combo = (JComboBox) dlgform.getComp(field.getName());
combo.removeAllItems();
}
SelectableItem gewaehlt = (SelectableItem) dlg.getSelections().get(
0);
field.setKey(gewaehlt.getId());
field.setText(gewaehlt.getName());
// für Institutionenauswahl s. Kommentar in SxUtils.generateSQL()
dlgform.setErlaubt(gewaehlt.isAllowed());
}
if (dlg.getSelections().size() > 1) {
// analog zu SxDlgManager.setField
if (field.isWithCombo()) {
JComboBox combo = (JComboBox) dlgform.getComp(field.getName());
combo.removeAllItems();
combo.setEditable(false);
combo.setEnabled(false);
String[] keys = new String[dlg.getSelections().size()];
boolean erlaubt=true;
for (int i = 0; i < dlg.getSelections().size(); i++) {
SelectableItem gewaehlt = (SelectableItem) dlg
.getSelections().get(i);
if (!gewaehlt.isAllowed()) erlaubt=false;
keys[i] = gewaehlt.getId().toString();
combo.insertItemAt(gewaehlt.getName(), i);
}
dlgform.setErlaubt(erlaubt);
field.setKey(keys);
field.setText(" < Ihre Auswahl > ");
}
}
}
Component err_comp = dlgform.getErrorComp(field.getName());
if (err_comp != null)
dlgform.removeErrorComp(err_comp);
}
private void clearRememberedValues() {
for (Iterator it = sichtgruppe.iterator(); it.hasNext();) {
SichtApplet eineSicht = (SichtApplet) it.next();
String rm = name + "-Sicht" + eineSicht.getId();
SxDefaults.removeProperty(rm);
}
}
}

549
src/de/superx/applet/SxDlgManager.java

@ -1,549 +0,0 @@ @@ -1,549 +0,0 @@
package de.superx.applet;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.sql.SQLException;
import java.sql.Types;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Properties;
import java.util.Vector;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.plaf.basic.BasicArrowButton;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;
/**
* Darstellung verschiedener Auswahldialoge.
*
* @author Rainer Behr, erweitert von Meikel Bisping, Daniel Quathamer
*
*
*
*/
public class SxDlgManager {
private static boolean isSQLstatic;
static Hashtable dlg_map = null;
//static String[] DlgOptionNames = { "OK", "Abbruch", "Leeren" };
static Component dlg_panel = null;
static SxTablePanel sxTablePanel = null;
static SxTablePanel sxTablePanel2 = null;
static Vector V_header = null;
static Vector V_sql = null;
static Vector V_sql2 = null;
static Vector V_empty = null;
static SxSQLMetaData meta = null;
static {
dlg_map = new Hashtable();
V_header = new Vector();
V_sql = new Vector();
V_sql2 = new Vector();
V_empty = new Vector();
sxTablePanel = new SxTablePanel();
sxTablePanel.getTable().setAutoResizeMode(
JTable.AUTO_RESIZE_ALL_COLUMNS);
sxTablePanel2 = new SxTablePanel();
sxTablePanel2.getTable().setAutoResizeMode(
JTable.AUTO_RESIZE_ALL_COLUMNS);
}
static synchronized void openDlg(SxMask mask, SxForm form, String name,
String caption, int fieldnr, int dlg_art) {
if (dlg_art != 1 && dlg_art != 2 && dlg_art != 10)
return;
JComponent dlg_comp;
Vector v_field = (Vector) form.getFieldVector().elementAt(fieldnr);
isSQLstatic = true;
int zeilenanzahl = ((Integer) v_field.elementAt(7)).intValue();
// Zeilenanzahl > 1 -> Multi-Dialogauswahl
SxField field = form.getField("F_" + name.substring(2));
V_header.removeAllElements();
V_sql.removeAllElements();
V_sql2.removeAllElements();
V_empty.removeAllElements();
String stmt = getReadingSql(dlg_art, form, v_field);
try {
HashMap map = form.getHashMap(null);
//map.put("Maskennummer",selectedMaskeninfoElement.getTid());
stmt = SxSQL.templateProcessor.process("Feld sql ", stmt,
//Trickmethode!!
map, (String) SxDefaults.getPropertyValue("SxDB"));
//
Properties dlg_prop = null;
/*
* An dieser Stelle wird geprüft, ob der Inhalt für das Feld bereits
* einmal eingelesen wurde, wenn ja, dann aus Arbeitsspeicher,
* ansonsten bleibt dlg_prop == null und im nächsten Block wird aus
* der Datenbank gelesen, -> probleme wenn beim erstenmal
* Prüfungssemester erst ab SS92 danach erscheint nie wieder SS88
* immer neu einlesen MB 12.01
*
* if (isSQLstatic) { dlg_prop = getDialogSet(name); if (dlg_prop !=
* null) { V_header = (Vector) ((Vector)
* dlg_prop.get("header")).clone(); V_sql = (Vector) ((Vector)
* dlg_prop.get("data")).clone(); meta = (SxSQLMetaData)
* dlg_prop.get("meta"); } }
*/
form.getLogo().start();
// System.err.println ("OpenDlg: " + stmt);
SxSQL.executeAll(stmt);
form.getLogo().stop();
dlg_comp = prepareDlgComp(form, name, caption, zeilenanzahl, field);
SxDlg dlg = new SxDlg((Frame) form.getTopLevelAncestor(),
//name.substring(2),
caption, dlg_comp);
dlg.show();
if (dlg.wasOkSelected()) {
// if (dlg_art != 10) { alter Institutionendialog mit vier
// feldern
if (zeilenanzahl == 1)
setField(field, dlg_art, false);
if (zeilenanzahl > 1)
setField(field, dlg_art, true);
// } else {
// setInstFields(SxSQL, field);
// }
}
if (dlg.wasClearSelected()) {
field.setKey(new String("-1"));
field.setText("");
if (field.isWithCombo()) {
JComboBox combo = (JComboBox) form.getComp("F_"
+ name.substring(2));
if (combo.getItemCount() > 0)
combo.removeAllItems();
}
}
field.setBackground(Color.white);
field.repaint();
} catch (Exception ex) {
String msg = ex.toString();
// System.err.println (ex);
// System.err.println ("sql: " + stmt);
JOptionPane.showMessageDialog(form, msg.substring(msg
.lastIndexOf(":") + 1), "SQL-Fehler",
JOptionPane.ERROR_MESSAGE);
}
}
private static JComponent prepareDlgComp(SxForm form, String name,
String caption, int zeilenanzahl, SxField field) {
JComponent dlg_comp;
meta = (SxSQLMetaData) SxSQL.getResultSetMetaData();
//Wint,das ist nicht die Stelle, um ID im rechten Fenster auszublenden
if (meta.getColumnCount() > 1)
V_header.addElement("ID");
//V_header.addElement(name.substring(2));
V_header.addElement(caption);
V_sql = SxSQL.getResultVector();
if (isSQLstatic)
addDialogSet(name, V_header.clone(), V_sql.clone(), meta);
int cols = meta.getColumnCount();
sxTablePanel.setData(V_sql, V_header, null, meta);
if (zeilenanzahl > 1) {
Object key = field.getKey();
if (key instanceof String[]) {
String[] keys = (String[]) key;
JComboBox combo = (JComboBox) form.getComp("F_"
+ name.substring(2));
int n = combo.getItemCount();
for (int i = 0; i < n; i++) {
Vector V_row = new Vector();
// r.b. 15.09.00
// Inhalt von 'keys' in den entsprechenden Datenbanktyp
// konvertieren
// s. a. Methode tableRepresentation() in SxJDBCAdapter u.
// Methode SxInsertListener
switch (meta.getColumnType(1)) {
case Types.SMALLINT:
V_row.addElement(new Short(keys[i]));
//System.out.println("V_row: smallint");
break;
case Types.INTEGER:
V_row.addElement(new Integer(keys[i]));
//System.out.println("V_row: integer");
break;
case Types.DECIMAL:
case Types.DOUBLE:
V_row.addElement(new Double(keys[i]));
//System.out.println("V_row: double");
break;
case Types.DATE:
V_row.addElement(SxDate.getDate(keys[i]));
//System.out.println("V_row: date");
break;
default:
V_row.addElement(keys[i]);
//System.out.println("V_row: default");
break;
}
V_row.addElement(combo.getItemAt(i));
V_sql2.addElement(V_row);
}
sxTablePanel2.setData(V_sql2, V_header, null, meta);
} else {
// Default-Wert aus 'felderinfo'
if ((key.toString()).compareTo(new String("-1")) != 0) {
Vector V_row = new Vector();
V_row.addElement(key);
V_row.addElement(field.getText());
V_sql2.addElement(V_row);
//table2.setData (V_sql2, V_header, meta);
sxTablePanel2.setData(V_sql2, V_header, null, meta);
} else {
if (cols > 1)
V_empty.addElement(new Integer(Integer.MIN_VALUE));
V_empty.addElement(new String(""));
V_sql2.addElement(V_empty);
//table2.setData (V_sql2, V_header, meta);
sxTablePanel2.setData(V_sql2, V_header, null, meta);
V_sql2.removeAllElements();
}
}
}
Dimension dim = sxTablePanel.getTable().getPreferredSize();
if (dim.height > 300)
dim.height = 300;
TableColumnModel cmodel = sxTablePanel.getTable().getColumnModel();
//Wint, bewirkte, daß normalerweise ID und Text ausgegeben wurden
if (cols > 1 && SxSQL.getRowCount() > 0)
//&&
//(meta.getColumnType(1) == Types.CHAR ||
// meta.getColumnType(1) == Types.VARCHAR))
{
sxTablePanel.getTable().removeColumn(cmodel.getColumn(0));
//cols--;
//auch für rechte Tabelle nur 1 Feld
if (zeilenanzahl > 1) {
TableColumnModel cmodel2 = sxTablePanel2.getTable()
.getColumnModel();
sxTablePanel2.getTable().removeColumn(cmodel2.getColumn(0));
}
cols--;
}
if (cols > 1 && SxSQL.getRowCount() > 0)
cmodel.getColumn(0).setMaxWidth(80);
dim.width = cmodel.getTotalColumnWidth();
if (dim.width < 250)
dim.width = 250;
int row = sxTablePanel.getTable().getSelectedRow();
if (row >= 0)
sxTablePanel.getTable().setRowSelectionInterval(row, row);
// why ??
//TableColumnModel cmodel2 = sxTablePanel2.getTable().getColumnModel();
//cmodel2.getColumn(0).setMaxWidth (80);
sxTablePanel.getTable().setPreferredScrollableViewportSize(dim);
sxTablePanel2.getTable().setPreferredScrollableViewportSize(dim);
sxTablePanel
.setMinimumSize(new Dimension(dim.width + 5, dim.height + 5));
sxTablePanel2.setMinimumSize(new Dimension(dim.width + 5,
dim.height + 5));
if (zeilenanzahl > 1)
dlg_comp = createTwoTablesPanel();
else
dlg_comp = sxTablePanel;
return dlg_comp;
}
/**
*
* @param dlg_art
* @param form
* @param v_field
* @return
*/
private static String getReadingSql(int dlg_art, SxForm form, Vector v_field) {
String stmt = null;
String sx_db = (String) SxDefaults.getPropertyValue("SxDB");
String relation = (String) v_field.elementAt(12);
if (relation != null)
relation = relation.trim();
boolean isTemplate = relation.toUpperCase().indexOf("FREEMARKER TEMPLATE") > -1;
String attribut = (String) v_field.elementAt(13);
if (attribut != null)
attribut = attribut.trim();
switch (dlg_art) {
case 1: // Auswahldialog (1-2 Attribute)
if (relation.startsWith("sp_")) {
stmt = "execute procedure " + relation;
if (sx_db.equals("Postgres"))
stmt = "select " + relation;
break;
}
if (relation.startsWith("<<SQL>>"))
stmt = relation.substring(7);
else {
if (attribut.indexOf(',') == -1)
attribut = "tid, " + attribut;
stmt = "select " + attribut + " from " + relation
+ " order by 2";
}
break;
case 2: // Stored Proc.
stmt = "execute procedure " + relation;
if (sx_db.equals("Postgres"))
stmt = "select " + relation;
break;
case 10: // Aufruf aus Inst.-Dialog s. createInstPanel()
if (relation.startsWith("sp_")) {
stmt = "execute procedure " + relation;
if (sx_db.equals("Postgres"))
stmt = "select " + relation;
break;
}
if (relation.startsWith("<<SQL>>"))
stmt = relation.substring(7);
else
stmt = relation;
break;
}
//<<FELDNAME>> durch Wert ersetzen
String prefix = SxUtils.getFieldPrefix();
if (stmt.indexOf(prefix) >= 0) {
isSQLstatic = false;
stmt = SxUtils.generateSQL(form, stmt);
//System.out.println("sel-str: " + stmt);
int err_start = -1;
if ((err_start = stmt.indexOf(prefix)) >= 0) {
String suffix = SxUtils.getFieldSuffix();
int err_stop = stmt.indexOf(suffix, err_start);
err_start += prefix.length();
String err_field = stmt.substring(err_start, err_stop);
String msg = "SQL-Fehler durch '" + err_field + "' !";
//System.err.println (msg);
JOptionPane.showMessageDialog(form, msg, "Dialogfehler",
JOptionPane.ERROR_MESSAGE);
throw new IllegalArgumentException(msg);
}
}
if (isTemplate) stmt="--Freemarker Template\n"+stmt;
return stmt;
}
public static void setField(SxField field, int dlg_art, boolean isMultiDlg)
throws SQLException {
SxForm form = field.getForm();
if (form == null)
return;
if (!isMultiDlg) {
SxTableModel tmodel = (SxTableModel) sxTablePanel.getTable().getModel();
int row = sxTablePanel.getTable().getSelectedRow();
if (row < 0)
return;
switch (dlg_art) {
case 1:
case 2:
if (meta.getColumnCount() > 1) {
field.setKey(tmodel.getValueAt2(row, 0));
field.setText((String) tmodel.getValueAt(row, 1));
} else {
field.setKey(new String("-1"));
field.setText((String) tmodel.getValueAt(row, 0));
}
break;
default:
break;
}
} else {
SxTableModel tmodel = (SxTableModel) sxTablePanel2.getTable().getModel();
int rows = tmodel.getRowCount();
int cols = tmodel.getColumnCount();
switch (dlg_art) {
case 1:
case 2:
if (rows < 0)
break;
JComboBox combo = null;
if (field.isWithCombo()) {
combo = (JComboBox) form.getComp(field.getName());
if (combo.getItemCount() > 0)
combo.removeAllItems();
} else
break;
String[] keys = new String[rows];
for (int i = 0; i < rows; i++) {
keys[i] = (String) tmodel.getValueAt(i, 0);
if (cols == 1)
combo.insertItemAt(tmodel.getValueAt2(i, 0), i);
else
combo.insertItemAt(tmodel.getValueAt(i, 1), i);
}
field.setKey(keys);
break;
default:
break;
}
if (rows > 0)
field.setText(" < Ihre Auswahl > ");
else {
field.setKey(new String("-1"));
field.setText("");
}
}
// delete Field from Error map
Component err_comp = form.getErrorComp(field.getName());
if (err_comp != null)
form.removeErrorComp(err_comp);
}
public static void addDialogSet(String name, Object nheader, Object ndata,
Object nmeta) {
Properties prop = new Properties();
prop.put("header", nheader);
prop.put("data", ndata);
prop.put("meta", nmeta);
dlg_map.put(name, prop);
}
public static Properties getDialogSet(String name) {
Properties prop = (Properties) dlg_map.get(name);
return prop;
}
public static void clear() {
dlg_map.clear();
dlg_map = new Hashtable();
}
public static SxTablePanel getDlgTable() {
return sxTablePanel;
}
public static SxTablePanel getChoiceTable() {
return sxTablePanel2;
}
public static Vector getDlgData() {
return V_sql;
}
public static Vector getChoiceData() {
return V_sql2;
}
protected static JComponent createTwoTablesPanel() {
JPanel dlgPanel = new JPanel(new GridLayout(1, 3));
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints constraints = new GridBagConstraints();
constraints.insets = new Insets(5, 2, 5, 2);
dlgPanel.setLayout(gridbag);
JPanel btnPanel = new JPanel(new GridLayout(0, 1));
BasicArrowButton insertBtn = new BasicArrowButton(SwingConstants.EAST);
insertBtn.setHorizontalAlignment(JLabel.CENTER);
SxInsertListener insertl = new SxInsertListener();
insertBtn.addActionListener(insertl);
JLabel insertLabel = new JLabel("Einfügen");
insertLabel.setHorizontalAlignment(JLabel.CENTER);
BasicArrowButton deleteBtn = new BasicArrowButton(SwingConstants.WEST);
deleteBtn.setHorizontalAlignment(JLabel.CENTER);
SxDeleteListener deletel = new SxDeleteListener();
deleteBtn.addActionListener(deletel);
JLabel deleteLabel = new JLabel("Löschen");
deleteLabel.setHorizontalAlignment(JLabel.CENTER);
btnPanel.add(insertLabel);
btnPanel.add(insertBtn);
btnPanel.add(deleteLabel);
btnPanel.add(deleteBtn);
constraints.anchor = GridBagConstraints.WEST;
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.weightx = 0.5;
constraints.weighty = 1.0;
gridbag.setConstraints(sxTablePanel, constraints);
dlgPanel.add(sxTablePanel);
constraints.anchor = GridBagConstraints.CENTER;
constraints.fill = GridBagConstraints.NONE;
constraints.weightx = 0.25;
constraints.weighty = 0.25;
gridbag.setConstraints(btnPanel, constraints);
dlgPanel.add(btnPanel);
constraints.anchor = GridBagConstraints.EAST;
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.weightx = 0.5;
constraints.weighty = 1.0;
gridbag.setConstraints(sxTablePanel2, constraints);
dlgPanel.add(sxTablePanel2);
return dlgPanel;
}
}

534
src/de/superx/applet/SxField.java

@ -1,534 +0,0 @@ @@ -1,534 +0,0 @@
package de.superx.applet;
import java.awt.Color;
import java.awt.Component;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.text.NumberFormat;
import javax.swing.ComboBoxEditor;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.TableCellEditor;
import de.superx.common.Sichtgruppe;
/**
* Darstellung eines Feldes auf einer Maske
*
* @version 1.0 01/11/99
* @author Rainer Behr, Meikel Bisping
* @see SxForm
*/
public class SxField extends JTextField implements ComboBoxEditor,
FocusListener {
//
// Static Constants
//
public static final int TYPE_STRING = 0;
public static final int TYPE_INTEGER = 1;
public static final int TYPE_DOUBLE = 2;
public static final int TYPE_DATE = 3;
public static final int TYPE_SQL = 4;
//
// Instants
//
//protected SxField sxField;
private Sichtgruppe sichtgruppe;
protected int field_type = TYPE_STRING;
protected int field_length = -1;
protected boolean isInputNeeded = false;
protected boolean field_input = false;
protected boolean field_withCombo = false;
private String field_value = "";
private Object field_key = new Integer(-1);
private SxForm sxForm = null; // Maskenformular
private JButton defaultBtn = null; // Default-Button
private Object defaultValue = new Integer(-1);
private SichtApplet selectedSicht;
JTable tableView = null;
public SxField() {
super();
init();
}
/**
* Normalerweise ist der Defaultvalue -1,da aber die Institutionsprozeduren
* mit char arbeiten und Informix execute procedure mit (,,) nicht klar
* kommt, wird für Felder die Institutionen betreffen 'null' als defaultwert
* festgelegt (s. SxMask.createMask()). Wird insbesondere bei isValid() und
* checkField() benötigt.
*/
public void setDefaultValue(Object defaultValue) {
this.defaultValue = defaultValue;
}
public boolean hasSichten() {
return selectedSicht != null;
}
public SxField(int type) {
super();
field_type = type;
init();
}
public SxField(String text) {
super();
setText(text);
init();
}
public SxField(String text, int columns, int type) {
super();
field_type = type;
setText(text);
setColumns(columns);
init();
}
public SxField(String text, int columns) {
super();
setText(text);
setColumns(columns);
init();
}
public SxField(int type, int length) {
super();
field_type = type;
field_length = length;
init();
}
public SxField(String text, int columns, int type, int length) {
super();
field_type = type;
setText(text);
setColumns(columns);
field_length = length;
init();
}
public void setJTable(JTable table) {
tableView = table;
}
public void setForm(SxForm form) {
sxForm = form;
}
public void setWithCombo(boolean withCombo) {
field_withCombo = withCombo;
}
public boolean isWithCombo() {
return field_withCombo;
}
public SxForm getForm() {
return sxForm;
}
public void setType(int type) {
field_type = type;
}
public int getType() {
return field_type;
}
public void setKey(Object key) {
field_key = key;
}
public Object getKey() {
Object ret=field_key;
// if (field_key instanceof Double) ret=field_key.toString().replace(',','.');
return ret;
}
public void setInputNeeded(boolean input) {
isInputNeeded = input;
}
public boolean isInputNeeded() {
return isInputNeeded;
}
public boolean isValid() {
if (checkField()) {
setBackground(Color.white);
repaint();
return true;
}
setBackground(Color.red);
repaint();
return false;
}
//
// Interface ComboBoxEditor
//
public Component getEditorComponent() {
return (Component) this;
}
public Object getItem() {
return (Object) getText();
}
public void setItem(Object anObject) {
if (anObject == null)
setText("");
else
setText(anObject.toString());
}
// protected methods
protected void init() {
final SxField thisField = this;
KeyAdapter sxFieldKeyListener = new KeyAdapter() {
public void keyPressed(KeyEvent e) {
Object value;
switch (e.getKeyCode()) {
case KeyEvent.VK_ENTER: {
if (tableView != null) {
SxTableModel model = (SxTableModel) tableView
.getModel();
TableCellEditor editor = tableView.getCellEditor();
Component component = tableView.getEditorComponent();
int row = tableView.getSelectedRow();
int col = tableView.getSelectedColumn();
value = model.getObjectAt(row, col);
if (value instanceof java.lang.Integer)
field_type = TYPE_INTEGER;
if (value instanceof java.lang.Double)
field_type = TYPE_DOUBLE;
//if (value instanceof java.lang.String)
// field_type = TYPE_STRING;
if (value instanceof java.sql.Date)
field_type = TYPE_DATE;
field_value = ((JTextField) component).getText();
} else {
field_value = getText();
setKey(new Integer("-1"));
}
if (!isValid()) {
e.consume();
getToolkit().beep();
} else {
JButton defaultBtn;
if (sxForm != null) {
sxForm.removeErrorComp(thisField);
defaultBtn = sxForm.getDefaultBtn();
if (defaultBtn != null)
defaultBtn.doClick(); // DefaultButton
// aktivieren
} else {
defaultBtn = getRootPane().getDefaultButton();
if (defaultBtn != null)
defaultBtn.doClick(); // DefaultButton
// aktivieren
}
}
break;
}
case KeyEvent.VK_ESCAPE: {
if (tableView != null) {
// System.err.println("Editor canceled ..");
TableCellEditor editor = tableView.getCellEditor();
editor.cancelCellEditing();
}
break;
}
default: {
int metaPressed = e.getModifiers() & InputEvent.META_MASK;
if (metaPressed != 0) {
// System.err.println("keyPressed: MetaKey: " +
// e.getKeyChar());
break;
}
}
}
}
public void keyTyped(KeyEvent e) {
switch (field_type) {
case TYPE_INTEGER:
case TYPE_DOUBLE: {
switch (e.getKeyChar()) {
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '0':
case '-':
case '.':
case ',': {
// r.b. numerische Zeichen erlaubt
// System.err.println("Key: " + e.getKeyChar());
field_input = true;
break;
}
default: {
int metaPressed = e.getModifiers()
& InputEvent.META_MASK;
if (metaPressed != 0) {
// System.err.println("keyTyped: MetaKey: " +
// e.getKeyChar());
break;
}
int altPressed = e.getModifiers() & InputEvent.ALT_MASK;
if (altPressed != 0)
break;
// System.err.println("keyTyped: Key: " +
// e.getKeyChar());
if (e.getKeyChar() >= 'A' && e.getKeyChar() <= 'z') {
getToolkit().beep();
e.consume();
}
break;
}
}
break;
}
case TYPE_DATE: {
switch (e.getKeyChar()) {
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '0':
case '-':
case '.':
case '/': {
// r.b. Datumszeichen erlaubt
// System.err.println("Key: " + e.getKeyChar());
field_input = true;
break;
}
default: {
int metaPressed = e.getModifiers()
& InputEvent.META_MASK;
if (metaPressed != 0) {
// System.err.println("keyTyped: MetaKey: " +
// e.getKeyChar());
break;
}
int altPressed = e.getModifiers() & InputEvent.ALT_MASK;
if (altPressed != 0)
break;
// System.err.println("Key: " + e.getKeyChar());
if (e.getKeyChar() >= 'A' && e.getKeyChar() <= 'z') {
getToolkit().beep();
e.consume();
}
break;
}
}
break;
}
case TYPE_STRING: {
field_input = true;
break;
}
default:
// System.err.println("Key: " + e.getKeyChar());
break;
}
int text_len = getText().length();
if (field_length != -1) {
if (text_len >= field_length && getSelectedText() == null) {
if (e.getKeyChar() != KeyEvent.VK_ENTER
&& e.getKeyChar() != KeyEvent.VK_BACK_SPACE) {
e.consume();
getToolkit().beep();
}
}
}
if (sxForm != null)
if (isWithCombo()) {
JComboBox combo = (JComboBox) sxForm.getComp(getName());
if (combo.getItemCount() > 0)
combo.removeAllItems();
}
}
};
addKeyListener(sxFieldKeyListener);
addFocusListener(this);
}
private boolean checkField() {
boolean error = false;
field_value="";
try
{
field_value = getText();
}
catch (NullPointerException e)
{
//komischer Bug in java1.6.11
}
if (field_value.equals("")) {
//setKey (new Integer ("-1"));
setKey(defaultValue); //s.Kommentar bei setDefaultValue
if (isInputNeeded())
return false;
else
return true;
}
field_value = getKey().toString();
if (field_value.equals("-1"))
field_value = getText();
try {
switch (field_type) {
case TYPE_INTEGER: {
new Integer(field_value);
//System.out.println ("Fieldtype: integer: " + field_value);
break;
}
case TYPE_DOUBLE: {
//NumberFormat nf = NumberFormat.getNumberInstance();
//Number new_number = nf.parse(field_value);
//setText(nf.format(new Double(new_number.doubleValue())));
//dq memo: hier locale reinbringen
//setText(nf.format(new Double(new_number.doubleValue())));
//System.out.println ("Fieldtype: double: " + field_value);
break;
}
case TYPE_DATE: {
if (!de.memtext.util.DateUtils.isValidDate(field_value))
throw new Exception("Date error");
// java.sql.Date sql_date = SxDate.getDate(field_value);
// if (sql_date == null) {
//System.err.println ("sxFieldListener: ERROR: arg: Date !=
// " + field_value);
//throw new Exception("Date error");
// }
//setText(SxDate.toString(sql_date));
//System.out.println ("Fieldtype: date: " + field_value);
break;
}
default:
//System.out.println ("Fieldtype: " + field_type + ": " +
// field_value);
break;
}
}
catch (Exception ex) {
// System.err.println ("checkField(): ERROR: Type: " + field_type +
// ": " + field_value);
error = true;
}
if (error)
return false;
else
return true;
}
public void focusGained(FocusEvent e) {
field_input = false;
}
public void focusLost(FocusEvent e) {
if (field_input == true) {
setKey(new Integer("-1"));
if (sxForm != null)
if (isWithCombo()) {
JComboBox combo = (JComboBox) sxForm.getComp(getName());
if (combo.getItemCount() > 0)
combo.removeAllItems();
}
}
if (!isValid()) {
if (sxForm != null)
sxForm.addErrorComp(this);
} else {
if (sxForm != null)
sxForm.removeErrorComp(this);
}
}
public SichtApplet getSelectedSicht() {
return selectedSicht;
}
public void setSelectedSicht(SichtApplet sicht) {
this.selectedSicht = sicht;
}
public void clearSichtSelections()
{
if (selectedSicht!=null) selectedSicht.clearSelection();
if (sichtgruppe!=null) sichtgruppe.clearSelections();
}
public String toString() {
String result = "";
if (getText() != null)
result += getText();
result += " -key:";
if (getKey() != null)
result += getKey();
else
result += " null";
return result;
}
public Sichtgruppe getSichtgruppe() {
return sichtgruppe;
}
public void setSichtgruppe(Sichtgruppe sichtgruppe) {
this.sichtgruppe = sichtgruppe;
}
}

930
src/de/superx/applet/SxForm.java

@ -1,930 +0,0 @@ @@ -1,930 +0,0 @@
package de.superx.applet;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Insets;
import java.text.NumberFormat;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Properties;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRootPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JToggleButton;
import de.memtext.util.DateUtils;
/**
*
* Stellt ein Maskenformular dar, auf dem sich einzelne Eingabe/Auswahlfelder
* (vom Typ SxField) <i>wie Semester </i> oder <i>Haushaltsjahr </i> befinden.
*
* @version 1.0 01/11/99
* @author Rainer Behr
* @see SxField
*/
public class SxForm extends JPanel {
private SxForm sxForm; // r.b. 'this'
private JButton defaultBtn; // Default-Button
private SxPosLayout pL;
private Insets defInsets = new Insets(2, 2, 2, 2);
private int distX = 20;
private int distY = 20;
private int posX = 20;
private int posY = 20;
private int diffX = 20;
private int diffY = 20;
private HashMap fmMap = new HashMap();
private int prefWidth = 200; //400;
private int prefHeight = 150;
private int prefCompHeight = 25;
private SxLogoPanel logo = null; // Logo
private Vector fieldVector = null; // Vector for field params
private Vector fieldKeys = null; // Vector for field names
private Hashtable formMap; // Hashtable for Components
private Hashtable errorMap; // Hashtable for Error-Components
private boolean isErlaubt = false;
private String hinweis;
private static NumberFormat nf = NumberFormat.getInstance();
public SxForm() {
super();
sxForm = this;
init();
}
public SxForm(int dist_x, int dist_y, int diff_x, int diff_y) {
super();
sxForm = this;
distX = dist_x;
distY = dist_y;
diffX = diff_x;
diffY = diff_y;
init();
}
public void addComp(String value, String comp_name, String class_name,
int columns, int type, int length, int obligatorisch) {
Dimension dim = null;
JButton button;
JToggleButton toggle;
JCheckBox checkbox;
JLabel label;
SxField field;
JPasswordField passwordfield;
JComboBox combo;
//MBComboView combov;
JTextArea t_area;
if (class_name.equals("JButton")) {
button = new JButton(value);
button.setName(comp_name);
button.setMargin(defInsets);
button.setFont(new Font("SansSerif", Font.BOLD, 12));
add(comp_name, button);
dim = button.getPreferredSize();
dim.height = prefCompHeight;
// dim.width=1000;
button.setPreferredSize(dim);
pL.setPosition(button, posX, posY, dim.width, dim.height);
formMap.put(comp_name, button);
}
if (class_name.equals("JToggleButton")) {
toggle = new JToggleButton(value);
toggle.setName(comp_name);
toggle.setMargin(defInsets);
toggle.setFont(new Font("Arial", Font.BOLD, 12));
add(comp_name, toggle);
dim = toggle.getPreferredSize();
dim.height = prefCompHeight;
toggle.setPreferredSize(dim);
pL.setPosition(toggle, posX, posY, dim.width, dim.height);
formMap.put(comp_name, toggle);
}
if (class_name.equals("JCheckBox")) {
checkbox = new JCheckBox(value);
checkbox.setName(comp_name);
checkbox.setMargin(defInsets);
checkbox.setFont(new Font("Arial", Font.BOLD, 12));
add(comp_name, checkbox);
dim = checkbox.getPreferredSize();
dim.height = prefCompHeight;
checkbox.setPreferredSize(dim);
pL.setPosition(checkbox, posX, posY, dim.width, dim.height);
formMap.put(comp_name, checkbox);
}
if (class_name.equals("JLabel")) {
label = new JLabel(value);
label.setName(comp_name);
label.setFont(new Font("SansSerif", Font.PLAIN, 12));
add(comp_name, label);
//MB n
dim = label.getPreferredSize();
if (!comp_name.equals("L_parameter")) {
dim.height = prefCompHeight;
label.setPreferredSize(dim);
}
pL.setPosition(label, posX, posY, dim.width, dim.height);
formMap.put(comp_name, label);
}
if (class_name.equals("SxField")) {
field = new SxField(value, columns, type, length);
field.setName(comp_name);
field.setForm(sxForm);
field.setMargin(defInsets);
field.setBackground(Color.white);
if (length > 0)
field.setEditable(true);
else
field.setEditable(false);
if (obligatorisch != 0)
field.setInputNeeded(true);
add(comp_name, field);
dim = field.getPreferredSize();
dim.height = prefCompHeight;
field.setPreferredSize(dim);
pL.setPosition(field, posX, posY, dim.width, dim.height);
formMap.put(comp_name, field);
}
if (class_name.equals("JPasswordField")) {
passwordfield = new JPasswordField(value);
passwordfield.setName(comp_name);
passwordfield.setMargin(defInsets);
passwordfield.setFont(new Font("Arial", Font.BOLD, 12));
add(comp_name, passwordfield);
dim = passwordfield.getPreferredSize();
dim.height = prefCompHeight;
passwordfield.setPreferredSize(dim);
pL.setPosition(passwordfield, posX, posY, dim.width, dim.height);
formMap.put(comp_name, passwordfield);
}
if (class_name.equals("JTextArea")) {
t_area = new JTextArea(value);
t_area.setName(comp_name);
t_area.setMargin(defInsets);
t_area.setBackground(Color.white);
if (length > 0)
t_area.setEditable(true);
else
t_area.setEditable(false);
add(comp_name, t_area);
dim = t_area.getPreferredSize();
dim.height = prefCompHeight;
t_area.setPreferredSize(dim);
pL.setPosition(t_area, posX, posY, dim.width, dim.height);
formMap.put(comp_name, t_area);
}
if (class_name.equals("JComboBox")) {
combo = new JComboBox();
combo.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
combo.setName(comp_name);
combo.setBackground(Color.white);
if (length > 0) {
field = new SxField(type, length);
field.setName(comp_name);
field.setWithCombo(true);
field.setMargin(defInsets);
field.setForm(sxForm);
if (obligatorisch != 0)
field.setInputNeeded(true);
combo.setEditor(field);
combo.setEditable(true);
} else
combo.setEditable(false);
add(comp_name, combo);
dim = combo.getPreferredSize();
dim.height = prefCompHeight;
combo.setPreferredSize(dim);
pL.setPosition(combo, posX, posY, dim.width, dim.height);
formMap.put(comp_name, combo);
}
/*
* MB wie ComboBox nur ohne Selektionsmöglichkeit if (class_name.equals
* ("JComboView")) { combov = new MBComboView(comp_name.substring(2));
* //combo.addItem(" <Ihre Auswahl:>");
* combov.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
* combov.setName (comp_name); combov.setBackground(Color.white);
* field=new SxField(); if (length > 0) { field = new SxField (type,
* length); field.setName (comp_name); field.setWithCombo (true);
* field.setMargin(defInsets); field.setForm (sxForm); if (input != 0)
* field.needsInput(true); combov.setEditor (field);
* combov.setEditable(true); field.setText (" < Ihre Auswahl > "); }
*
* combo.addActionListener(new ActionListener(){ public void
* actionPerformed(ActionEvent e){ combo.setSelectedIndex(1); }} );
* JButton help=(JButton)this.getComp("L_"+comp_name.substring(2));
* ComboViewAL spezialItemListener=new ComboViewAL(combov,help);
* combov.addItemListener(spezialItemListener);
*
* combov.setRenderer(new ComboViewRenderer());
*
* add (comp_name, combov);
*
* dim = combov.getPreferredSize(); dim.height = prefCompHeight;
* combov.setPreferredSize(dim); pL.setPosition(combov, posX, posY,
* dim.width, dim.height); formMap.put (comp_name, combov); }
*/
fieldKeys.add(comp_name);
if (diffX + dim.width + posX < prefWidth) {
posX += diffX + dim.width;
} else {
posX = distX;
posY += diffY + dim.height;
}
}
public void addErrorComp(Component comp) {
String err_name = comp.getName();
if (err_name != null) {
if (!errorMap.containsKey(err_name))
errorMap.put(err_name, comp);
}
}
public JComponent getComp(String comp_name) {
return (JComponent) formMap.get(comp_name);
}
public JButton getDefaultBtn() {
if (defaultBtn == null) {
JRootPane root = sxForm.getRootPane();
return root.getDefaultButton();
}
return defaultBtn;
}
/**
*
*
*/
public void restoreValuesFromFormerSelections() {
Enumeration en;
String name;
SxField field;
Properties prop;
Object key;
Object value;
en = formMap.keys();
while (en.hasMoreElements()) {
name = (String) en.nextElement();
if (name.startsWith("F_")) {
field = getField(name);
if (field == null)
continue;
name = name.substring(2);
if (field.hasSichten())
name += "-Sicht" + field.getSelectedSicht().getId();
prop = (Properties) SxDefaults.getProperty(name);
if (prop == null)
continue;
try {
key = prop.get("key");
field.setKey(key);
if (field.hasSichten()) {
if (key == null || key.toString().equals("null"))
field.getSelectedSicht().clearSelection();
else
{
field.getSelectedSicht().setSelectedKey(key.toString());
}
}
value = prop.get("value");
if (field.isWithCombo()) {
if (value instanceof String[]) {
String[] values = (String[]) value;
JComboBox combo = (JComboBox) getComp("F_" + name);
int n = values.length;
for (int i = 0; i < n; i++)
combo.insertItemAt(values[i], i);
field.setText(" < Ihre Auswahl> ");
} else {
field.setText(value.toString());
}
} else { //not combo
if (key instanceof String[])
return;
field.setText(value.toString());
}
}
catch (Exception e)
{
System.out.println("Problem beim Wiederherstellen von Auswahlwert "+e);
}
}
}
}
public boolean isErlaubt() {
return isErlaubt;
}
/**
* Get first component that causes an error - if any
*
* @return 1st component that causes an error - null if everything OK
*/
public Component getErrorComp() {
Enumeration en = errorMap.keys();
String err_name;
if (en.hasMoreElements()) {
err_name = (String) en.nextElement();
//System.out.println("err_name: " + err_name);
return (Component) errorMap.get(err_name);
} else
return null;
}
public Component getErrorComp(String name) {
return (Component) errorMap.get(name);
}
public SxField getField(Object obj) {
SxField field = null;
if (obj == null)
return null;
if (obj instanceof SxField)
return (SxField) obj;
if (obj instanceof JComboBox) {
JComboBox combo = (JComboBox) obj;
field = (SxField) combo.getEditor();
return field;
}
return field;
}
public SxField getField(String comp_name) {
return getField(getComp(comp_name));
}
/**
* fiese Methode, die für jedes Feld prüft, ob sichten hinterlegt sind, wenn
* ja wird die ausgewählte Sicht unter Feldnamen in einen Hashtable gepackt
* bei normalen Felder wird der ausgewählte Wert für den Schlüssel
* hinterlegt
* @param maskNo TODO
*
* @deprecated not really deprecated but evil
* @return Hashtable
*/
HashMap getHashMap(Integer maskNo) {
if (maskNo!=null) fmMap.put("Maskennummer",maskNo);
for (Enumeration enumeration = getMap().keys(); enumeration
.hasMoreElements();) {
String fieldname = (String) enumeration.nextElement();
if (fieldname.startsWith("F_")) {
SxField aField = getField(fieldname);
if (aField.hasSichten()) {
fmMap.put(aField.getName().substring(2), aField
.getSelectedSicht());
aField.getSelectedSicht().updateKlappstatus();
if (aField.getSelectedSicht().isStandbuttonWanted())
fmMap.put(aField.getName().substring(2) + "-Stand", aField
.getSelectedSicht().getStand());
} else {
Object o=aField.getKey();
if (o!=null&&o.toString().equals("-1"))
o=getFieldKey(aField.getName());
//aField.getKey() liefert falsches Ergebnis für direkeingabeFelder
//eigentlich getFieldKey(aField.getName())); dann aber potentiell
//zu viele ' einfache Anführungszeichen
fmMap.put(aField.getName().substring(2), o);
aField.getItem();
}
}
}
return fmMap;
}
/**
* Checks if all fields that require input also contain input If a field
* doesn't it is added to errorComp collection
*
* getFieldContents also does a check - can we just remove that?
*
* @throws Exception
*/
void checkFields() throws Exception {
for (Enumeration enumeration = getMap().keys(); enumeration
.hasMoreElements();) {
String fieldname = (String) enumeration.nextElement();
if (fieldname.startsWith("F_")) {
SxField aField = getField(fieldname);
String content = aField.getText();
if (aField.isInputNeeded()
&& (content == null || content.equals(""))) {
aField.setBackground(Color.red);
addErrorComp(aField);
}
}
}
Component err_comp = getErrorComp();
if (err_comp != null) {
String err_name = err_comp.getName().substring(2);
throw new Exception("Im Feld '" + err_name
+ "' müssen Sie etwas auswählen bzw. eingeben!");
}
}
private String getFieldContents(String field_name) {
SxField field;
String contents = null;
field = getField(field_name);
if (field == null)
return null;
if (field.getText().equals(""))
return null;
if (field.getType() == SxField.TYPE_DATE) {
contents = field.getText();
}
if (field.getType() == SxField.TYPE_DOUBLE) {
try {
Number number_value = nf.parse(field.getText().replace('.', ','));
Double double_value = new Double(number_value.doubleValue());
if (double_value != null)
contents = double_value.toString();
} catch (Exception ex) {
contents = null;
}
}
if (field.getType() == SxField.TYPE_STRING) {
contents = field.getText();
if (contents!=null) contents=contents.replace(';','^');
//manchmal Fehler wenn man Leeren drückt wird für execute procedure
// zu (,,) nicht ('null',xxx)
//evtl. hier anpassen
//if (contents.equals("-1") contents="null";
}
if (field.getType()==SxField.TYPE_SQL) {
contents = field.getText();
if (contents!=null) contents=contents.replace(';','^');
}
if (field.getType() == SxField.TYPE_INTEGER)
contents = field.getText();
// moved to method checkField, can I just delete it??
if (field.isInputNeeded() && (contents == null || contents.equals(""))) {
System.err.println("Eingabe in '" + field_name.substring(2)
+ "' fehlt !");
field.setBackground(Color.red);
addErrorComp(field);
}
return contents;
}
public String getFieldKey(String field_name) {
Object obj;
SxField field;
Object key;
String sx_db = (String) SxDefaults.getPropertyValue("SxDB");
obj = getComp(field_name);
if (obj == null)
return null;
field = getField(obj);
if (field == null)
return null;
key = field.getKey();
//System.out.println("Feldname: "+field_name+"; key: " +
// key.toString());
if (!field.isWithCombo()) {
if (key instanceof String[])
return "";
if (key.toString().equals("null"))
if (field.getType() == SxField.TYPE_STRING
|| field.getType() == SxField.TYPE_DATE)
return "'null'";
else
return "";
if (key.toString().equals("-1")) {
//Einfaches Textfeld
String w = getFieldContents(field_name);
int dummy=1;
if (w == null)
return "";
if (field.getType() == SxField.TYPE_STRING
|| field.getType() == SxField.TYPE_DATE)
return "'" + w + "'";
else
if (field.getType()==SxField.TYPE_DOUBLE)
return w.replace(',','.');
else return w;
} else {
//Dialogfeld mit key:
if (key.toString().equals(""))
return "";
if (field.getType() == SxField.TYPE_STRING
|| field.getType() == SxField.TYPE_DATE)
return "'" + key.toString() + "'";
else
if (field.getType()==SxField.TYPE_DOUBLE)
return key.toString().replace(',','.');
else
return key.toString();
//}
}
} else {
//Das Applet setzt Mehrfachauswahlfelder automatisch je nach Typ um
// als int oder string
//Die explizite Deklaration wird in Felderinfo definiert (typ)
String key_str = "";
if (key instanceof String[]) {
String[] keys = (String[]) key;
for (int i = 0; i < keys.length; i++) {
if (i > 0)
key_str = key_str + ",";
if (field.getType() == SxField.TYPE_STRING)
key_str = key_str + "'" + keys[i] + "'";
else
key_str = key_str + keys[i];
}
} else {
//manchmal Fehler wenn man Leeren drückt wird für execute
// procedure zu (,,) nicht ('null',xxx)
//evtl. getFieldContents anpassen
if (key.toString().equals("-1"))
return getFieldContents(field_name);
else
//System.out.println("KEYS"+field_name);
if (field.getType() == SxField.TYPE_STRING)
return "'" + key.toString() + "'";
else
return key.toString();
}
return key_str;
}
}
public Vector getFieldVector() {
return fieldVector;
}
public SxLogoPanel getLogo() {
return logo;
}
public Hashtable getMap() {
return formMap;
}
public String getParamList(String username, boolean isHtmlWanted) {
Enumeration en;
String name;
SxField field;
Properties prop;
StringBuffer contents;
StringBuffer paramList = new StringBuffer();
// HTML-Properties aus SxDefaults
String html_start = "";
String html_end = "";
String html_bold_on = "";
String html_bold_off = "";
try {
html_start = (String) SxDefaults.getPropertyValue("SxParamStart");
html_end = (String) SxDefaults.getPropertyValue("SxParamEnd");
html_bold_on = (String) SxDefaults
.getPropertyValue("SxParamBoldOn");
html_bold_off = (String) SxDefaults
.getPropertyValue("SxParamBoldOff");
} catch (NullPointerException ex) {
System.err.println(ex);
JOptionPane.showMessageDialog(sxForm, ex.toString(), "Fehler",
JOptionPane.ERROR_MESSAGE);
}
if (isHtmlWanted)
paramList.append(html_start);
// sort keys
//java.util.List L_keys = Arrays.asList (formMap.keySet().toArray());
//Collections.sort (L_keys, Collator.getInstance());
//
String orgStand = "";
for (int k = 0; k < fieldKeys.size(); k++) {
name = (String) fieldKeys.elementAt(k);
if (!name.startsWith("F_"))
continue;
field = getField(name);
if (field == null || !field.isVisible())
continue;
contents = new StringBuffer();
if (!field.isWithCombo()) {
contents.append(field.getText());
} else {
JComboBox combo = (JComboBox) getComp(name);
int n = combo.getItemCount();
if (n == 0)
contents.append(field.getText());
else
for (int i = 0; i < n; i++) {
contents.append((String) combo.getItemAt(i));
if (i < n - 1)
contents.append(", ");
}
}
if (field.hasSichten()) {
if (contents.length() == 0) {
contents.append("keine Einschränkung ");
}
if (!field.getSelectedSicht().isPerfectlyRegular())
contents.append(" (" + field.getSelectedSicht().getName()
+ ")");
if (field.getSelectedSicht().isStandbuttonWanted())
contents.append(" - Stand "
+ field.getSelectedSicht().getStand());
}
if (contents.length() <= 0)
continue;
if (isHtmlWanted)
paramList.append(html_bold_on + name.substring(2)
+ html_bold_off);
else
paramList.append(name.substring(2));
paramList.append(" = " + contents.toString() + "; ");
if (!isHtmlWanted)
paramList.append("\n");
}
if (isHtmlWanted)
paramList.append(html_bold_on + "User" + html_bold_off + "="
+ username + ";<br>");
else
paramList.append("User=" + username + "\n");
paramList.append(this.getHinweis());
if (isHtmlWanted)
paramList.append(html_end);
//System.err.println("ParamList:");
//System.err.println(paramList.toString());
return paramList.toString();
}
public void init() {
sxForm.setBorder(BorderFactory.createEtchedBorder());
pL = new SxPosLayout(distX, distY, diffX, diffY);
pL.setPreferredSize(prefWidth, prefHeight);
sxForm.setLayout(pL);
sxForm.setFont(new Font("Arial", Font.PLAIN, 12));
formMap = new Hashtable();
fieldKeys = new Vector();
errorMap = new Hashtable();
}
public void removeAll() {
super.removeAll();
formMap.clear();
fieldKeys.clear();
errorMap.clear();
defaultBtn = null;
posX = 20;
posY = 20;
}
public void removeComp(String name) {
Component comp;
comp = getComp(name);
if (comp == null)
return;
formMap.remove(comp);
super.remove(comp);
comp = null;
}
public void removeErrorComp(Component comp) {
String err_name = comp.getName();
if (err_name != null) {
errorMap.remove(err_name);
//System.out.println("err_name in removeErrorComp: " + err_name);
}
}
//MB 5/04
//only used by SxMask for L_Parameter, obsolete
/*
* public void resizeComp(String name, int width) { JComponent comp;
* Dimension comp_dim; comp = getComp(name); if (comp == null) return;
*
* comp_dim = comp.getSize(); comp_dim.width = width; super.remove(comp);
* comp.setSize(comp_dim); super.add(comp); }
*/
public void setCompXY(String comp_name, int pos_x, int pos_y) {
Component comp = (Component) getComp(comp_name);
if (comp == null)
return;
Dimension dim = comp.getPreferredSize();
pL.setPosition(comp, pos_x, pos_y, dim.width, dim.height);
}
public void setDefaultBtn(JButton btn) {
defaultBtn = btn;
}
public void rememberSelectionsAsDefaults() {
Enumeration en;
String name;
SxField field;
// erlaubt=new Integer(0);
en = formMap.keys();
while (en.hasMoreElements()) {
name = (String) en.nextElement();
if (name.startsWith("F_")) {
field = getField(name);
if (field == null)
continue;
name = name.substring(2);
if (!field.isWithCombo()) {
if (field.hasSichten())
name += "-Sicht" + field.getSelectedSicht().getId();
SxDefaults.addProperty(name, field.getKey(), field
.getText());
} else {
//COMBOFIELD
if (field.getKey() instanceof Object[]) {
String[] keys = (String[]) field.getKey();
String[] values = new String[keys.length];
JComboBox combo = (JComboBox) getComp("F_" + name);
int n = combo.getItemCount();
for (int i = 0; i < n; i++)
values[i] = (String) combo.getItemAt(i);
SxDefaults.addProperty(name, keys, values);
} else {
SxDefaults.addProperty(name, field.getKey(), field
.getText());
}
}
}
}
} //MB die zwei Methoden werden für Institutionenauswahl
//benötigt, s. Kommentar in SxUtils.generateSQL()
public void setErlaubt(boolean erl) {
isErlaubt = erl;
}
public void setFieldVector(Vector V_field) {
fieldVector = V_field;
}
public void setLogo(SxLogoPanel alogo) {
logo = alogo;
}
public void setPreferredCompHeight(String comp_name, int height) {
JComponent comp = (JComponent) getComp(comp_name);
if (comp == null)
return;
Dimension dim = comp.getPreferredSize();
dim.height = height;
comp.setPreferredSize(dim);
}
public void setPreferredCompWidth(String comp_name, int width) {
JComponent comp = (JComponent) getComp(comp_name);
if (comp == null)
return;
Dimension dim = comp.getPreferredSize();
dim.width = width;
comp.setPreferredSize(dim);
}
public void setPreferredSize(int width, int height) {
prefWidth = width;
prefHeight = height;
pL.setPreferredSize(prefWidth, prefHeight);
}
public String getHinweis() {
return hinweis != null ? hinweis : new String("");
}
public void setHinweis(Object Hinw) {
if (Hinw == null)
this.hinweis = null;
else
this.hinweis = Hinw.toString();
}
String getDefaultStand() {
//prüfen für Default-Stand-Wert
String defaultstand = null;
String teststring;
SxField testfield;
//Feste Abhängigkeiten rausgenommen
//auf Wunsch von M.Winterstein 30.6.06
/* try {
testfield = getField("F_Haushaltsjahr");
if (testfield != null) {
String s4 = testfield.getText();
if (s4.length() == 4) //valid date
defaultstand = new String("1.1." + s4);
else
defaultstand = DateUtils.getTodayString();
}
testfield = getField("F_Datum");
if (testfield != null)
defaultstand = new String(testfield.getText());
testfield = getField("F_Semester");
if (testfield != null) {
SxSQL
.executeQuery("select sem_beginn from semester where eintrag='"
+ testfield.getText() + "';");
Vector erg = SxSQL.getResultVector();
defaultstand = (String) erg.elementAt(0);
}
DateFormat df;
df = DateFormat.getDateInstance(DateFormat.MEDIUM);
// r.b. default Jahr 4-stellig
df.setTimeZone(TimeZone.getDefault());
df.setLenient(false);
} catch (Exception e) {
}*/
if (defaultstand == null)
defaultstand = DateUtils.getTodayString();
return defaultstand;
}
}

166
src/de/superx/applet/SxHeaderRenderer.java

@ -1,166 +0,0 @@ @@ -1,166 +0,0 @@
package de.superx.applet;
import java.awt.Component;
import java.awt.Font;
import java.awt.GridLayout;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.border.BevelBorder;
import javax.swing.table.TableCellRenderer;
/**
*Darstellung der Tabellen-Header. Wird von SxTable verwendet.
*
* @version 1.0 01/11/02
* @author Rainer Behr
* @see SxTable
*/
public class SxHeaderRenderer extends JPanel implements TableCellRenderer
{
//
// Static Constants
//
//
// Instants
//
protected SxHeaderRenderer renderer;
protected Font header_font = null;
protected Vector V_buttons = new Vector ();
protected int num_lines = 1;
protected Vector V_textlines = new Vector ();
public SxHeaderRenderer()
{
super();
renderer = this;
renderer.setLayout(new GridLayout(0, 1));
renderer.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
JLabel line = new JLabel ();
line.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
line.setHorizontalAlignment (JLabel.CENTER);
V_buttons.addElement (line);
renderer.add (line);
setOpaque(true);
}
public void setNumLines(int lines)
{
num_lines = lines;
renderer.removeAll ();
V_buttons.removeAllElements ();
for (int i = 0; i < num_lines; i++)
{
JLabel line = new JLabel ();
line.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
line.setHorizontalAlignment (JLabel.CENTER);
if (header_font != null)
line.setFont (header_font);
V_buttons.insertElementAt (line, i);
renderer.add (line);
}
}
public int getNumLines()
{
return num_lines;
}
public void setTextLines(String header_value)
{
int offset = 0;
int pos, next_pos;
int nr_lines = 0;
int n = 0;
V_textlines.removeAllElements ();
while (offset < header_value.length())
{
if ((pos = header_value.indexOf ("\\n", offset)) != -1)
{
V_textlines.insertElementAt(header_value.substring (offset, pos), n);
n++;
nr_lines++;
if ((next_pos = header_value.indexOf ("\\n", pos + 2)) != -1)
{
offset = next_pos + 2;
V_textlines.insertElementAt(header_value.substring (pos + 2, next_pos), n);
n++;
nr_lines++;
}
else
{
offset = pos + 2;
V_textlines.insertElementAt(header_value.substring (pos + 2), n);
n++;
nr_lines++;
break;
}
}
else
{
V_textlines.insertElementAt(header_value.substring (offset), n);
n++;
nr_lines++;
break;
}
}
setNumLines (nr_lines);
for (int i = 0; i < num_lines; i++)
{
JLabel line = (JLabel) V_buttons.elementAt (i);
line.setText ((String) V_textlines.elementAt(i));
}
}
public void setHeaderFont(Font newfont)
{
header_font = newfont;
}
public void setHorizontalAlignment(int alignment)
{
for (int i = 0; i < num_lines; i++)
{
JLabel line = (JLabel) V_buttons.elementAt (i);
line.setHorizontalAlignment (alignment);
}
}
public void setText(Object value)
{
if (V_textlines.size () == 0)
setTextLines(value.toString());
for (int i = 0; i < num_lines; i++)
{
JLabel line = (JLabel) V_buttons.elementAt (i);
line.setText ((String) V_textlines.elementAt(i));
}
}
public Component getTableCellRendererComponent (JTable table, Object value,
boolean isSelected,
boolean hasFocus,
int row, int column)
{
if (value != null)
setText (value.toString());
return (Component) renderer;
}
}

68
src/de/superx/applet/SxInsertListener.java

@ -1,68 +0,0 @@ @@ -1,68 +0,0 @@
package de.superx.applet;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.JOptionPane;
import javax.swing.JTable;
/**
*
* Listener für den Einfügen-Button bei einer Mehrfachauswahl.
* @version 1.0 15.09.00
* @author Rainer Behr
* @see SxDlg
*/
public class SxInsertListener implements ActionListener
{
SxTablePanel table;
JTable jtable;
JTable jtable2;
SxTablePanel table2;
SxInsertListener()
{
table = SxDlgManager.getDlgTable();
jtable = table.getTable();
table2 = SxDlgManager.getChoiceTable();
jtable2 = table2.getTable();
};
public void actionPerformed(ActionEvent e)
{
Vector V_data = SxDlgManager.getDlgData();
Vector V_choice = SxDlgManager.getChoiceData();
int [] rows = jtable.getSelectedRows();
int cols = jtable.getColumnCount();
SxTableSorter model = (SxTableSorter) jtable.getModel();
SxTableSorter model2 = (SxTableSorter) jtable2.getModel();
int [] indexes = model.getIndexes();
if (rows.length <= 0)
return;
if (rows.length > 30)
{
String msg = "Bitte nicht mehr als 30 Werte auswählen !";
// System.err.println (msg);
JOptionPane.showMessageDialog(table.getParent(), msg, "Dialogfehler",
JOptionPane.ERROR_MESSAGE);
return;
}
for (int i = 0; i < rows.length; i++)
{
// r.b. 15.09.00
// findet den entsprechenden Eintrag nur wenn Object-Typ in Tabelle u. Vector
// uebereinstimmt s.o.
if (!V_choice.contains (V_data.elementAt(indexes[rows[i]])))
V_choice.addElement (V_data.elementAt(indexes[rows[i]]));
}
table2.setData (V_choice);
model2.sortByColumn (cols - 1);
}
}

545
src/de/superx/applet/SxJDBCAdapter.java

@ -1,545 +0,0 @@ @@ -1,545 +0,0 @@
// Beispielklasse aus dem JavaTutorial (http://java.sun.com/docs/books/tutorial) für SuperX angepasst
/*
* @(#)JDBCAdapter.java 1.5 97/12/03
*
* Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved.
*
* This software is the confidential and proprietary information of Sun
* Microsystems, Inc. ("Confidential Information"). You shall not
* disclose such Confidential Information and shall use it only in
* accordance with the terms of the license agreement you entered into
* with Sun.
*
* SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
* SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
* IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
* SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
* THIS SOFTWARE OR ITS DERIVATIVES.
*
*/
/**
* An adaptor, transforming the JDBC interface to the TableModel interface.
*
* @version 1.20 09/25/97
* @author Philip Milne
*/
package de.superx.applet;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.sql.Types;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Properties;
import java.util.Vector;
import javax.swing.table.AbstractTableModel;
import de.superx.common.SuperX_el;
/**
* Ein Adapter, der das JDBC-Interface an das TableModel-Interface anpasst.
* Angepasst für SuperX
* @autor Philip Milne, erweitert von R. Behr
* @version 1.2
*/
public class SxJDBCAdapter extends AbstractTableModel implements SxTableModel {
Connection connection;
Properties db_props = null;
boolean isClosed = true;
boolean isEditable = false;
Statement statement = null;
ResultSet resultSet = null;
String[] columnNames = {};
Class[] columnTpyes = {};
Vector rows = new Vector();
SxSQLMetaData metaData;
NumberFormat nf = NumberFormat.getInstance();
//DecimalFormat df=(DecimalFormat) nf;
/* public SxJDBCAdapter(String url, String driverName,
String user, String passwd) throws Exception {
try
{
Class.forName(driverName);
System.err.println("Opening db connection");
if (!isClosed)
{
statement.close();
connection.close ();
isClosed = true;
}
db_props = new Properties ();
db_props.put ("user", user);
db_props.put ("password", passwd);
connection = DriverManager.getConnection(url, db_props);
statement = connection.createStatement();
isClosed = false;
}
catch (Exception ex)
{
isClosed = true;
throw new SQLException (ex.toString());
}
}*/
public SxJDBCAdapter() {}
public void executeQuery(String query) throws SQLException
{
resultSet = statement.executeQuery(query);
// resultSet = statement.getResultSet();
metaData = new SxSQLMetaData (new SuperX_el());
//metaData = resultSet.getMetaData();
int numberOfColumns = metaData.getColumnCount();
columnNames = new String[numberOfColumns];
// Get the column names and cache them.
// Then we can close the connection.
for(int column = 0; column < numberOfColumns; column++)
{
columnNames[column] = metaData.getColumnLabel(column+1);
// System.err.println ("Column: " + columnNames[column] + ", max width: " +
// metaData.getColumnDisplaySize(column+1));
}
// Get all rows.
rows = new Vector();
while (resultSet.next())
{
Vector newRow = new Vector();
for (int i = 0; i < getColumnCount(); i++)
{
// newRow.addElement(dbRepresentation(i, resultSet.getObject(i + 1)));
newRow.addElement(resultSet.getObject(i + 1));
}
rows.addElement(newRow);
}
// close(); // Need to copy the metaData, bug in jdbc:odbc driver.
fireTableChanged(null); // Tell the listeners a new table has arrived.
}
public void cancel(String url, String user, String passwd) throws Exception
{
try
{
System.err.println("Cancel statement");
statement.cancel();
}
catch (Exception e)
{
System.err.println("Error canceling statement: " + e);
}
}
public void close() throws SQLException
{
try
{
System.err.println("Closing db connection");
if (!isClosed)
{
if (resultSet != null)
resultSet.close();
if (statement != null)
statement.close();
connection.close();
isClosed = true;
}
}
catch (SQLException e)
{
System.err.println("Error closing db connection: " + e);
}
}
protected void finalize() throws Throwable
{
if (!isClosed)
{
close();
isClosed = true;
}
super.finalize();
}
//////////////////////////////////////////////////////////////////////////
//
// Implementation des TableModelInterface
//
//////////////////////////////////////////////////////////////////////////
// MetaData
public String getColumnName(int column) {
if (columnNames[column] != null) {
return columnNames[column];
} else {
return "";
}
}
public int getColumnSize(int column)
{
if (metaData == null)
return -1;
return metaData.getColumnDisplaySize(column+1);
}
public Class getColumnClass(int column)
{
int type;
if (metaData == null)
return Object.class;
type = metaData.getColumnType(column+1);
switch(type)
{
case Types.CHAR:
case Types.VARCHAR:
case Types.LONGVARCHAR:
return String.class;
case Types.BIT:
return Boolean.class;
case Types.TINYINT:
case Types.SMALLINT:
return Short.class;
case Types.INTEGER:
return Integer.class;
case Types.BIGINT:
return Long.class;
case Types.FLOAT:
case Types.DOUBLE:
return Double.class;
case Types.DATE:
return java.sql.Date.class;
case Types.DECIMAL:
case Types.NUMERIC:
return java.math.BigDecimal.class;
case Types.TIMESTAMP:
return java.sql.Timestamp.class;
default:
return Object.class;
}
}
public void setEditable(boolean editable)
{
isEditable = editable;
}
public boolean isCellEditable(int row, int column)
{
if (isEditable)
return metaData.isWritable(column);
else
return false;
}
public int getColumnCount() {
return columnNames.length;
}
// Data methods
public int getRowCount() {
return rows.size();
}
public Object getValueAt(int aRow, int aColumn)
{
Vector row = (Vector)rows.elementAt(aRow);
Object value = row.elementAt(aColumn);
return dbRepresentation(aColumn, value, true);
}
public Object getObjectAt(int aRow, int aColumn)
{
Vector row = (Vector)rows.elementAt(aRow);
return row.elementAt(aColumn);
}
private String dbRepresentation(int column, Object value, boolean isDecimalParsingWanted)
{
int type;
int scale;
double db;
String str;
if (metaData == null)
return value.toString();
if (value == null||value.equals(""))
return " ";
type = metaData.getColumnType(column+1);
scale = metaData.getScale(column+1);
switch(type)
{
case Types.SMALLINT:
int int_value = Short.MIN_VALUE;
if (value instanceof Short)
int_value = ((Short) value).shortValue();
else
if (value instanceof Integer)
int_value = ((Integer) value).intValue();
if (int_value == Short.MIN_VALUE)
return (" ");
return value.toString();
case Types.INTEGER:
if (!(value instanceof Integer))
return value.toString();
if (((Integer) value).intValue() == Integer.MIN_VALUE)
return (" ");
return value.toString();
case Types.DOUBLE:
if (isDecimalParsingWanted)
{
if (((Double) value).isNaN())
return " ";
nf.setMinimumFractionDigits(scale); // r.b. Nachkommastellen setzen
nf.setGroupingUsed(true);
//df.setDecimalSeparatorAlwaysShown(true);
//df.applyLocalizedPattern("#.#00,0#");
if (scale > 3)
nf.setMaximumFractionDigits(3); // r.b. Nachkommastellen setzen
return nf.format((Double) value);
}
else
return value.toString();
case Types.DECIMAL:
case Types.NUMERIC:
if (isDecimalParsingWanted)
{
db = ((BigDecimal) value).doubleValue();
nf.setGroupingUsed(true);
if (db == Double.NaN)
return " ";
//MB bigdecimal kann immer >65000 Nachkommastellen haben, wird immer auf 5 gesetzt
//bei Studiabfragen nach Abschlüssen, ist wahrscheinlich ganz gut, dass ,00 verschwindet (wenngleich gewichtete Fälle)
//bei Cob abfragen wäre schön
//if (scale > 5) nf.setMaximumFractionDigits(5); // r.b. Nachkommastellen setzen
//else nf.setMinimumFractionDigits(scale); // r.b. Nachkommastellen setzen
//, einfach mal fest von 2 ausgehen
nf.setMaximumFractionDigits(2);
nf.setMinimumFractionDigits(2);
//df.setDecimalSeparatorAlwaysShown(true);
//df.applyLocalizedPattern("#.#00,0#");
return nf.format(db);
}
else
return value.toString();
case Types.BIT:
return ((Boolean)value).booleanValue() ? "1" : "0";
case Types.DATE:
str = SxDate.toString((java.sql.Date) value);
if (str.length() == 0)
return (" ");
return str;
case Types.TIMESTAMP:
str = ((Timestamp) value).toString();
if (str.length() == 0)
return (" ");
return str;
default:
if (value.toString().length() == 0)
return (" ");
return value.toString();
}
}
private Object tableRepresentation(int column, Object value)
{
int type;
if (value == null)
{
return "";
}
if (metaData == null)
return value;
type = metaData.getColumnType(column+1);
switch(type)
{
case Types.SMALLINT:
{
try
{
return new Short (value.toString());
}
catch (NumberFormatException e)
{
System.err.println ("tableRepresentation: ERROR: " + value.toString());
return "";
}
}
case Types.INTEGER:
{
try
{
return new Integer (value.toString());
}
catch (NumberFormatException e)
{
System.err.println ("tableRepresentation: ERROR: " + value.toString());
return "";
}
}
case Types.DOUBLE:
case Types.FLOAT:
{
try
{
Number new_number = nf.parse(value.toString());
Double new_double = new Double(new_number.doubleValue());
return new_double;
}
catch (ParseException e)
{
System.err.println ("tableRepresentation: ERROR parse: Double=" + value.toString());
return "";
}
}
case Types.DECIMAL:
{
try
{
Number new_number = nf.parse(value.toString());
BigDecimal new_dec = new BigDecimal(new_number.doubleValue());
return new_dec;
}
catch (ParseException e)
{
System.err.println ("tableRepresentation: ERROR parse: BigDecimal=" + value.toString());
return "";
}
}
case Types.BIT:
return new Boolean (value.toString());
case Types.DATE:
return SxDate.getDate(value.toString());
case Types.TIMESTAMP:
return Timestamp.valueOf(value.toString());
default:
return value;
}
}
public void setValueAt(Object value, int row, int column)
{
try
{
String tableName = "info_usr"; // r.b. metaData.getTableName(column+1);
// Some of the drivers seem buggy, tableName should not be null.
if (tableName == null)
{
System.err.println("Table name returned null.");
}
String colName = getColumnName(column);
Object new_value = tableRepresentation(column, value);
if (new_value == null)
throw new SQLException ("conversion error");
System.err.println ("column: " + colName + ", value: " + new_value);
String query =
"update "+tableName+
" set "+colName+" = " + "'" + dbRepresentation(column, new_value, true) + "'" +
" where ";
// We don't have a model of the schema so we don't know the
// primary keys or which columns to lock on. To demonstrate
// that editing is possible, we'll just lock on everything.
for(int col = 0; col<getColumnCount(); col++)
{
String columnName = getColumnName(col);
if (columnName.equals(""))
continue;
if (col != 0)
query = query + " and ";
query = query + columnName + " = " + "'" + getValueAt(row, col) + "'";
}
System.err.println(query);
System.err.println("Sending update to database");
int rc = 1; // statement.executeUpdate(query);
if (rc == 1)
{
System.err.println("Update succeeded");
}
else
throw new SQLException ("Update failed: " + rc);
Vector dataRow = (Vector)rows.elementAt(row);
dataRow.setElementAt(new_value, column);
}
catch (SQLException e)
{
System.err.println("ERROR: " + e);
}
}
public void setDataVector(Vector Rows, Vector Header, Object Meta)
{
int numberOfColumns = Header.size();
columnNames = new String[numberOfColumns];
rows = Rows;
if (Meta instanceof SxSQLMetaData)
{
metaData = (SxSQLMetaData) Meta;
// Get the column names and cache them.
for(int column = 0; column < numberOfColumns; column++)
columnNames[column] = (String) Header.elementAt (column);
}
else
metaData = null;
fireTableChanged(null);
}
public void setDataVector(Vector Rows)
{
rows = Rows;
fireTableDataChanged();
}
/**
* MB 04/2010 hinzugefügt, weil felderinfo decimal nicht funktioniert,
* aufruf von TSxDlgManager für col1 darf bei dbrepresenation kein , sondern . enthalten
*
*/
public Object getValueAt2(int aRow, int aColumn)
{
Vector row = (Vector)rows.elementAt(aRow);
Object value = row.elementAt(aColumn);
return dbRepresentation(aColumn, value, false);
}
}

473
src/de/superx/applet/SxLogoPanel.java

@ -1,473 +0,0 @@ @@ -1,473 +0,0 @@
package de.superx.applet;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.MemoryImageSource;
import java.awt.image.PixelGrabber;
import java.util.Vector;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
/**
* Darstellung des SuperX-Logos, das sich während Datenbankenanfragen dreht.
*
*
* @version 1.0
* @author Rainer Behr
*/
public class SxLogoPanel extends JPanel {
SxLogoPanel SxThis; // this
Vector images;
ImageIcon image;
ImageIcon bg;
Color bg_color;
int count;
int steps;
int aktImage;
int imageX,imageY;
int imageW,imageH;
int delay;
animationThread animation = null;
boolean running;
boolean stopping;
public SxLogoPanel(ImageIcon logo, int[] pixels, int steps, int delay)
{
super(true);
SxThis = this;
this.steps = steps;
this.delay = delay;
bg_color = this.getBackground();
images = new Vector();
imageW = logo.getIconWidth();
imageH = logo.getIconHeight();
imageX = 5; imageY = 5;
aktImage = this.steps/2;
running = false;
stopping = false;
if (pixels == null)
{
this.steps = 0;
images.insertElementAt(logo, 0);
aktImage = 0;
count = 1;
}
else
try { setImages (pixels);
}
catch (Exception e)
{
System.out.println("Bilder nicht verfügbar");
}
}
class animationThread extends Thread
{
public animationThread(int d)
{
super();
delay = d;
this.setPriority(Thread.MIN_PRIORITY);
}
public void run()
{
while (running)
{
SxThis.paint(SxThis.getGraphics());
try
{
if (stopping)
if (aktImage == steps/2)
throw new InterruptedException ("Stopping");
aktImage++;
sleep(delay);
}
catch (InterruptedException ie)
{
animation = null;
running = false;
aktImage = steps/2;
}
}
}
}
public void start()
{
running = true;
stopping = false;
animation = new animationThread(this.delay);
animation.start();
}
public void stop()
{
stopping = true;
}
public void setImages(int[] pixels)
{
Image[] imagearray = null;
Image[] imagearray2 = null;
int[] tpixelarray = null;
int turnw, turnh;
double phi, phistep;
PixelGrabber pg = null;
if (pixels == null)
return;
tpixelarray = pixels;
phi=0;
phistep=Math.PI/steps;
turnw = imageW;
turnh = imageH;
// *******************************************************
// * Alle einzelnen Logo-Bilder erzeugen
// *******************************************************
imagearray = new Image [steps];
imagearray2 = new Image [steps];
int rpixelarray[][] = new int[steps][turnw*turnh];
int helpimagearray[][] = new int[steps][turnw*turnh];
int a, b, c;
double m;
for (c = 0; c < steps; c++)
{
m = Math.sin(phi);
// erst mal alles transparent ausfuellen
for (a=0; a < turnw*turnh; a++)
{
rpixelarray[c][a]=(0 << 24) | (0 << 16) | (0 << 8) | 0;
}
for (a = 0; a < turnh; a++)
for (b = turnw/2; b >= 0; b--)
rpixelarray[c][(int)(Math.abs(a*turnw+turnw/2-(m*b)))]=tpixelarray[a*turnw+turnw/2-b];
for (a = 0; a < turnh; a++)
{
for (b = 0; b < turnw/2; b++)
{
rpixelarray[c][(int)(Math.abs(a*turnw+turnw/2+(m*b)))]=tpixelarray[a*turnw+turnw/2+b];
}
}
imagearray[c] = createImage(new MemoryImageSource(turnw,turnh,rpixelarray[c],0,turnw));
for (a = 0; a < turnh; a++)
for (b = 0; b < turnw; b++)
helpimagearray[c][a*turnw+b] = rpixelarray[c][a*turnw+turnw-b-1];
imagearray2[c] = createImage(new MemoryImageSource(turnw,turnh,helpimagearray[c],0,turnw));
phi+=phistep;
if (phi > (Math.PI)) phi %= Math.PI;
}
count=0;
for (int i = 0; i < steps; i++)
{
images.insertElementAt(new ImageIcon (imagearray[i]), count);
count++;
}
for (int i = 0; i < steps; i++)
{
images.insertElementAt(new ImageIcon (imagearray2[i]), count);
count++;
}
// *******************************************************
// * Background-Bild erzeugen
// *******************************************************
Image bg_img;
int[] bg_pixels = new int [imageW * imageH];
int bg_colorint = bg_color.getRGB();
for (int i = 0; i < imageW * imageH; i++)
bg_pixels[i] = bg_colorint;
bg_img = createImage(new MemoryImageSource(imageW, imageH, bg_pixels, 0, imageW));
bg = new ImageIcon (bg_img);
bg_pixels = null;
rpixelarray = null;
helpimagearray = null;
imagearray = null;
imagearray2 = null;
}
public void paint(Graphics g)
{
if (images.size() > 0)
{
if (aktImage > count - 1)
aktImage=0;
image = (ImageIcon) images.elementAt(aktImage);
if (image != null)
g.drawImage (image.getImage(), imageX, imageY, bg_color, this);
}
}
public Dimension getMinimumSize() {
return new Dimension(imageW + imageX,imageH + imageY);
}
public Dimension getMaximumSize() {
return new Dimension(imageW + imageX,imageH + imageY);
}
public Dimension getPreferredSize() {
return new Dimension(imageW + imageX,imageH + imageY);
}
}

2440
src/de/superx/applet/SxMask.java

File diff suppressed because it is too large Load Diff

35
src/de/superx/applet/SxPasswdChangeDlg.java

@ -1,35 +0,0 @@ @@ -1,35 +0,0 @@
package de.superx.applet;
import java.awt.Frame;
import de.memtext.baseobjects.User;
import de.memtext.dlg.PasswdChangeDlg;
public class SxPasswdChangeDlg extends PasswdChangeDlg {
public SxPasswdChangeDlg(Frame frame, String title) {
super(frame, title);
setInfoLabel("<html>Früher bereits verwendete Passwörter sollten nicht benutzt werden");
this.pack();
}
/**
* this method is automatically called by the PasswdChangeDlg
*/
protected boolean isOldPasswordOK(String username, String passwd) {
boolean result = false;
// if (!SxSQL.isAdmin()) {
try {
SxSQL.checkPwd(new User(username, passwd));
result=true;
} catch (Exception e) {
//WarningMessage.show(e.toString(),"Fehler");
result = false;
}
// }
return result;
}
}
//Created on 09.01.2004 at 17:40:10

280
src/de/superx/applet/SxPosLayout.java

@ -1,280 +0,0 @@ @@ -1,280 +0,0 @@
/*
* $Id: PosLayout.java,v 1.3 1998/01/22 12:45:30 bw Exp $
*
* (c)1997 IoS Gesellschaft für innovative Softwareentwicklung mbH
* http://www.IoS-Online.de mailto:info@IoS-Online.de
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program 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
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package de.superx.applet;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.LayoutManager;
import java.awt.Point;
import java.util.Vector;
/**
* Layout-Manager, den SxForm für die Darstellung der Maske benötigt.
* LayoutManager-Implementation fuer direkte Kontrolle ueber die Position
* der Components.
* Fuer jedes Element sollte die Methode setPosition aufgerufen werden.
* Ansonsten werden die Components linear untereinander angeordnet.
* @version 1.3 1998/01/22
* @author IoS
*/
public class SxPosLayout implements LayoutManager {
/**
* Name of this Class
*/
public static final String CLASS = "SxPosLayout";
/**
* Standard Constructor
*/
public SxPosLayout() {
super();
}
/**
* Extended Constructor, allows to define a Frame-Distance from the borders of the Container and
* a Min.-Distance between all automatically positioned Components
*/
public SxPosLayout( int frameDistX, int frameDistY, int compDistX, int compDistY ) {
super();
}
/**
* Setzt die Position einer Komponente.
* Diese Methode muss fuer jedes Element aufrufen werden!
*/
public void setPosition(Component comp, int x, int y, int w, int h) {
if (debug)
System.out.println(CLASS+".setPosition("+x+","+y+","+w+","+h+")");
int i=VComp.indexOf(comp);
Point p;
Dimension d;
if (i>=0) {
p=(Point)VPoint.elementAt(i);
d=(Dimension)VDimension.elementAt(i);
p.x = x;
p.y = y;
d.width =w;
d.height=h;
if (GD.width < (x+w))
GD.width = x+w;
if (GD.height < (y+h))
GD.height = y+h;
}
else
if (debug)
System.out.println(CLASS+".setPosition: WARNUNG: Component nicht gefunden");
}
/****************************************************************************************************
* Zu implementierende Methoden von LayoutManager
*/
/**
* Komponente hinzufuegen.
* Diese Methode wird nur von Container.add(String,Component) aufgerufen.
* Alle anderen add-Funktionen rufen diese Funktion nicht auf!
* Daher werden bei einem Aufruf der Methode layoutContainer (s.u.) alle
* Components des Container ueberprueft und ggf. hinzugefuegt.
*/
public void addLayoutComponent( String name, Component comp ) {
if (debug)
System.out.println(CLASS+".addLayoutComponent");
Dimension nD = new Dimension(0,0);
Point nP = new Point(0,0);
VComp.addElement(comp);
VPoint.addElement(nP);
VDimension.addElement(nD);
}
/**
* Entfernen einer Component.
*/
public void removeLayoutComponent( Component comp ) {
if (debug)
System.out.println(CLASS+".removeLayoutComponent");
int i=VComp.indexOf(comp);
if (i>=0) {
VComp.removeElementAt(i);
VDimension.removeElementAt(i);
VPoint.removeElementAt(i);
}
else
if (debug)
System.out.println(CLASS+".removeLayoutCompoent: WARNUNG: Element nicht gefunden");
}
/**
* Miminale Groesse des Layouts
*/
public Dimension minimumLayoutSize(Container parent) {
if (debug)
System.out.println(CLASS+".minimumLayoutSize");
if (minimumDim!=null)
return minimumDim;
else {
return GD;
}
}
/**
* Setzen der Miniumalgroesse des Layouts.
* Fuer Faelle, in denen die Komponenten verdeckt werden koennen.
*/
public void setMinimumSize(int w, int h) {
minimumDim = new Dimension(w,h);
}
/**
* Gewuenschte Groesse.
* Wird bei jedem pack aufgerufen (bei der Initialisierung des Fensters
* sogar mehrfach).
*/
public Dimension preferredLayoutSize(Container parent) {
if (debug)
System.out.println(CLASS+".preferredLayoutSize ["+GD+"]");
if (preferredDim!=null)
return preferredDim;
else {
return GD;
}
}
/**
* Setzen der gewuenschten Groesse des Layouts.
* Fuer Faelle, in denen die Komponenten verdeckt werden koennen.
*/
public void setPreferredSize(int w, int h) {
preferredDim = new Dimension(w,h);
}
/**
* Neuberechnung des Layouts und Positionierung der Komponenten.
* (Diese Methode wird bei jedem Repaint aufgerufen.)
*/
public void layoutContainer(Container parent) {
if (debug)
System.out.println(CLASS+".layoutContainer");
int i,n = parent.getComponentCount(),
cx,cy,cw,ch;
Component c;
if (debug) {
for (i=0; i<n ; i++) {
c=parent.getComponent(i);
if (VComp.indexOf(c)<0) {
System.out.println("SxPosLayout.layoutContainer: unknown component found: "+c);
}
}
}
n = VComp.size();
Dimension d;
if (debug) {
d=parent.getPreferredSize();
System.out.println(" Parent.getPreferredSize="+d);
}
Point p;
for (i=0 ; i<n ; i++) {
c=(Component)(VComp .elementAt(i));
d=(Dimension)(VDimension.elementAt(i));
p=(Point )(VPoint .elementAt(i));
cx=p.x;
cy=p.y;
cw=d.width;
ch=d.height;
if (debug)
System.out.println("setBounds on "+i+" to ("+cx+","+cy+","+cw+","+ch+")");
c.setBounds(cx,cy,cw,ch);
}
}
/**
* Protected variables
*/
protected Dimension minimumDim = null, /* Min. Size of this Container defined manually only for minimumLayoutSize()-Requests */
preferredDim = null; /* Pref. Size of this Container defined manually only for preferedLayoutSize()-Requests */
protected Dimension GD = new Dimension(0,0); /* min. Dimension of this Container */
protected Vector VComp = new Vector(), /* Vector of added Components */
VPoint = new Vector(), /* Vector of Comp.-Positions */
VDimension = new Vector(); /* Vector of Comp.-Sizes */
/**
* Flag for internal debugging-output
*/
public static final boolean debug = false;
};
/*
* $Log: PosLayout.java,v $
* Revision 1.3 1998/01/22 12:45:30 bw
* Some updates to jdk 1.1-methods (preferrendSize, miniumSize, resize, reshape
* substituted with 1.1-methods).
*
* Revision 1.2 1997/12/10 19:38:43 bb
* Copyright eingefügt.
*
* Revision 1.1 1997/09/16 09:19:38 bw
* Package-Änderung von "ios-online" nach "ios".
*
* Revision 1.2 1997/09/09 08:42:01 fw
* moved all framework-stuff of wrede.customer to the new de.ios.framework
*
* Revision 1.2 1997/08/11 15:35:16 fw
* PositionLayout: Now also deals with the Insets of the Windows
*
* Revision 1.1 1997/08/07 09:07:16 bw
* Neue Basisklasse PosLayout. Trennung der Funktionalitaet von PositionLayout in zwei
* Klassen.
*
*
*/

930
src/de/superx/applet/SxSQL.java

@ -1,930 +0,0 @@ @@ -1,930 +0,0 @@
/*
* Class responsible for db connection via servlet
* originally inspired by
// Beispielklasse aus dem JavaTutorial (http://java.sun.com/docs/books/tutorial) *
* @(#)JDBCAdapter.java 1.5 97/12/03
*
*/
package de.superx.applet;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
import java.util.Vector;
import javax.swing.JOptionPane;
import de.memtext.baseobjects.User;
import de.memtext.rights.NewPasswordChecker;
import de.memtext.util.CryptUtils;
import de.memtext.util.DSAHandler;
import de.memtext.util.NumberUtils;
import de.memtext.util.StringUtils;
import de.memtext.widgets.WarningMessage;
import de.superx.common.SxResultRow;
import de.superx.common.SuperX_el;
import de.superx.common.SxResultSet;
import de.superx.common.TemplateProcessor;
/**
* Ein Adapter, der das JDBC interface an das TableModelinterface anpasst.
* Angepasst für SuperX
*
*/
public class SxSQL {
// Connection connection;
static URL superXDbServletUrl;
static HttpURLConnection servletConnection; // Wint
static private Integer userID = new Integer(-1);
static DSAHandler dsaHandler;
static boolean isClosed = true;
static Statement statement = null;
static ResultSet resultSet = null;
static String aktuelleNachricht = null;
// obsolete static fields, shouldn't be used,
// because of cloning
// static String[] columnNames = {};
static int updateCount = -1;
static int numberOfColumns = -1;
static Class[] columnTpyes = {};
static SxResultSet rows = new SxResultSet();
static Vector rows_ret = new Vector();
static SuperX_el gesamt = new SuperX_el();
static SxSQLMetaData metaData;
static private String logToKonsole = "";
static StringBuffer prot_sql = new StringBuffer();
static InetAddress client_addr = null;
static String client_ip = null;
static InetAddress client_dns = null;
static int proto_fkt_id = 2; // LOGIN_FAIL
static int proto_id_pos = -1;
static int user_id_pos = -1;
static String errorString = null;
static Short adminUserInt = new Short((short) 0);
static String sx_db = (String) SxDefaults.getPropertyValue("SxDB");
static ObjectInputStream inputFromServlet = null;
static ObjectOutputStream outputToServlet = null;
static TemplateProcessor templateProcessor = new TemplateProcessor();
// wird von SxDefaults.init gesetzt
static String mandantenID = "default";
static String jsessionid;
static NewPasswordChecker newPasswordChecker;
// static String originalUrl;
// static String url;
private SxSQL() {
}
/**
*
* @param user
* @throws Exception
*/
static void check(User user) throws Exception {
initProtokolEntry();
try {
isClosed = false;
// throws exeception if something is/goes wrong
checkPwd(user);
// Protokollierung macht UserInializer im servlet
proto_fkt_id = 1; // LOGIN
prot_sql.replace(proto_id_pos, proto_id_pos + 1, (new Integer(
proto_fkt_id)).toString());
// execute(prot_sql.toString());
isClosed = false;
} catch (Exception ex) {
String msg = ex.toString();
user_id_pos = prot_sql.toString().indexOf("%");
if (user_id_pos > 0)
prot_sql.replace(user_id_pos, user_id_pos + 1, "-1");
// if (!isClosed) execute(prot_sql.toString());
throw new SQLException(msg);
}
}
/**
* @deprecated macht der UserInitializer im Servlet
* @throws UnknownHostException
*/
static private void initProtokolEntry() throws UnknownHostException {
client_addr = InetAddress.getLocalHost();
client_ip = client_addr.getHostAddress();
client_dns = InetAddress.getByName(client_ip);
// System.out.println("adrr:" + client_addr + " ip: " + client_ip + "
// client_name: " + client_dns.getHostName());
prot_sql.append("insert into protokoll (proto_fkt_id, userinfo_id, ");
prot_sql.append("ip_adresse, client_name, zeitpunkt) values (");
prot_sql.append("?, ");
prot_sql.append("% , '" + client_ip);
prot_sql.append("', '" + client_dns.getHostName() + "'");
if (sx_db.equals("Postgres")) {
prot_sql.append(", now());");
} else {
prot_sql.append(", current);");
}
// , date('"+SxDate.getNowString()+"'));");
proto_id_pos = prot_sql.toString().indexOf("?");
prot_sql.replace(proto_id_pos, proto_id_pos + 1, (new Integer(
proto_fkt_id)).toString());
}
static void readFMTemplates() throws SQLException {
// Spezielles Kommando, dass das SuperXDBServlet versteht und
// die templates im SuperX_el Objekt zurückschickt
executeQuery("readFMBasics");
if (gesamt.getRawFmTemplates() == null)
throw new SQLException(
"Servlet hat keine FreeMarker Templates geschickt");
templateProcessor.setTemplates(gesamt.getRawFmTemplates());
if (gesamt.getRepository() == null)
throw new SQLException(
"Servlet hat keine Sx_Repository Daten geschickt");
templateProcessor.setRepositoryMap(gesamt.getRepository());
// damit nicht immer hin-und her geschickt werden muss
gesamt.setRepository(null);
}
/**
* checkPwd initialisiert User setzt id des Users wird auch von
* SxPasswdChangeDlg aufgerufen
*
* @param user
* @throws Exception
*/
static synchronized void checkPwd(User user) throws Exception {
boolean login_ok = false;
try {
String auth_sql = "Anmeldung|" + user.getName() + "|"
+ user.getPasswd();
// der select auf userinfo wird automatisch im Servlet generiert
/*
* "|select tid, passwd_sha, administration,akt_versuch,max_versuch"
* + " from userinfo where benutzer = '" + user.getName() + "';";
*/
executeQuery(auth_sql);
if (getRowCount() == 0) {
throw new Exception("Die Anmeldung des Users '"
+ user.getName() + "' war nicht erfolgreich");
}
SxResultRow V_row = (SxResultRow) rows.first();
Short aktVersuch;
Short maxVersuch;
try {
// normal Informix
aktVersuch = (Short) V_row.get(3);
} catch (ClassCastException e) {
// Access / Postgres liefern Integer-Wrapper
Integer dummy = (Integer) V_row.get(3);
Short dummy2 = new Short((short) dummy.shortValue());
aktVersuch = dummy2;
}
try {
// normal Informix
maxVersuch = (Short) V_row.get(4);
} catch (ClassCastException e) {
// Access / Postgres liefern Integer-Wrapper
Integer dummy = (Integer) V_row.get(4);
Short dummy2 = new Short((short) dummy.shortValue());
maxVersuch = dummy2;
}
// Short aktVersuch = (Short) V_row.get(3);
// Short maxVersuch = (Short) V_row.get(4);
if (aktVersuch.shortValue() > maxVersuch.shortValue()
|| aktVersuch.shortValue() <= (maxVersuch.shortValue() * -1)) {
throw new Exception(
"Die Zahl maximaler Login-Versuche für Benutzer '"
+ user.getName() + "' ist überschritten.");
}
userID = (Integer) V_row.get(0);
user.setId(userID);
try {
// normal Informix
adminUserInt = (Short) V_row.get(2);
} catch (ClassCastException e) {
// Access / Postgres liefern Integer-Wrapper
Integer dummy = (Integer) V_row.get(2);
Short dummy2 = new Short((short) dummy.shortValue());
adminUserInt = dummy2;
}
user.setAdmin(isAdmin());
user_id_pos = prot_sql.toString().indexOf("%");
if (user_id_pos > 0)
prot_sql.replace(user_id_pos, user_id_pos + 1,
userID.toString());
String passwd_sha = (String) V_row.get(1);
Object kennwortSpalte = V_row.get(5);
/*
* executeQuery("select pw_gueltig_bis from user_pw where userinfo_id="
* +userID); if (rows.size()>0) { Vector zeile= (Vector)
* rows.get(0); java.util.Date datum=(java.util.Date)zeile.get(0);
* if (datum!=null&&!DateUtils.isDateInFuture(datum))
* kennwortSpalte="ändern"; }
*/
if (kennwortSpalte != null
&& kennwortSpalte.toString().trim().equals("ändern")) {
try {
login_ok = changePwd(user);
} catch (Exception e) {
String msg = e.toString();
msg = msg.substring(msg.lastIndexOf(":") + 1);
e.printStackTrace();
JOptionPane.showMessageDialog(null, msg, "Fehler",
JOptionPane.ERROR_MESSAGE);
login_ok = false;
throw new RuntimeException("Fehler bei Passwortänderung:"
+ e);
}
}
// DQ 6.10.2006 erstmal ins SuperxDBServlet (Methode doPost)
// verlagert
/*
* if (passwd_sha.equals(CryptUtils.encodeSHA(user.getPasswd()))) {
* if (aktVersuch.shortValue() >= 0) { login_ok = true; } else {
* login_ok = true; login_ok = changePwd(user); } }
*/
login_ok = true;
if (login_ok) {
SxSQL.initParams();
// execute("update userinfo set akt_versuch=0 where benutzer =
// '" + user.getName() + "'");
} else {
String operator = "+";
if (aktVersuch.shortValue() < 0)
operator = "-";
/*
* String sql = "update userinfo set akt_versuch=akt_versuch" +
* operator + "1 " + " where benutzer = '" + user.getName() +
* "';"; execute(sql);
*/
throw new Exception("Fehlerhaftes Kennwort für Benutzer '"
+ user.getName() + "'");
}
} catch (SQLException e) {
e.printStackTrace();
String msg = "Datenbankverbindung konnte nicht aufgebaut werden. "
+ e.toString();
msg = msg.replace(':', '-');
if (msg.indexOf("NichtAngemeldetException") > -1)
throw new IllegalStateException(
"Anmeldung fehlerhaft oder abgelaufen");
else
throw new Exception(msg);
}
}
/**
* @deprecated sollte das XMl-Frontend machen
* @param user
* @return
* @throws Exception
*/
private static boolean changePwd(User user) throws Exception {
boolean login_ok;
SxPasswdChangeDlg dlg = new SxPasswdChangeDlg(null,
"Bitte ändern Sie Ihr Passwort ");
dlg.setUsername(user.getName());
dlg.setNewPasswordChecker(SxSQL.newPasswordChecker);
dlg.setOldPassword(user.getPasswd());
dlg.setUsernameFieldEnabled(false);
dlg.setCheckOldPasswdWanted(false);
dlg.show();
if (dlg.wasOkSelected()) {
storePwd(user, dlg.getNewPasswd(), false);
login_ok = true;
execute("update userinfo set kennwort=null where tid=" + userID);
} else {
login_ok = false;
WarningMessage
.show(null,
"Sie können mit SuperX nur arbeiten,wenn Sie Ihr Passwort ändern.\nBitte melden Sie dazu sich neu an.",
"SuperX");
throw new RuntimeException("Passwortänderung nötig");
}
return login_ok;
}
static public Integer getUserID() {
// kopieren damit keiner von außen aus Versehen überschreibt
if (userID != null)
return new Integer(userID.intValue());
else {
System.out
.println("Achtung! userID dürfte eigentlich nicht null sein!!");
return new Integer(-1);
}
}
static public final synchronized void storePwd(User user, String newpasswd,
boolean isCheckOldPasswdWanted) throws Exception {
if (isCheckOldPasswdWanted && !isAdmin())
checkPwd(user);
execute("userchange|" + NumberUtils.getRandomInt(9)
+ CryptUtils.encodeSHA(newpasswd + CryptUtils.geheimnis1) + "|"
+ user.getName());
if (gesamt.getUpdateCount() != 1)
throw new Exception("Benutzer '" + user.getName() + "'"
+ " nicht gefunden !");
user.setPasswd(newpasswd);
proto_fkt_id = 6; // CH_PASSWD_NEW
// prot_sql.replace(proto_id_pos, proto_id_pos + 1, (new Integer(
// proto_fkt_id)).toString());
// execute(prot_sql.toString());
// damit sichergestellt wird, das kein erneues Ändern nötig
execute("update userinfo set akt_versuch=0 where benutzer = '"
+ user.getName() + "'");
}
static public boolean isAdmin() {
if (adminUserInt.intValue() > 0)
return true;
else
return false;
}
public static synchronized void executeAll(String stmt) throws SQLException {
// String bleibt zusammen, aber Schleife wird durchlaufen, um
// Multi-Statement zu kennzeichnen
StringTokenizer st = new StringTokenizer(stmt, ";");
int n = 0;
while (st.hasMoreTokens()) {
n++;
String sqlstmt = st.nextToken().trim();
if (sqlstmt.length() < 10)
break;
// besser über String suchen!!
}
// execute (sqlstmt); Wint neu++
if (n < 2) {
executeQuery(stmt);
} else {
executeQuery("multi:" + stmt);
}
}
static private synchronized void execute(String stmt) throws SQLException {
applet_servlet_connection("single" + stmt);
}
static synchronized void executeQuery(String query) throws SQLException {
if (!query.trim().equals("") && !query.trim().equals("null"))
applet_servlet_connection(query);
}
static public int getUpdateCount() throws SQLException {
return updateCount;
}
static public String getAktuelleNachricht() {
return aktuelleNachricht;
}
static public int getColumnCount() {
return numberOfColumns;
}
/*
* static public String getColumnName(int column) { if (columnNames[column]
* != null) return columnNames[column]; else return ""; }
*/
static public int getRowCount() {
return rows.size();
}
/**
* static public Object getObjectAt(int aRow, int aColumn) { ResultRow row =
* (ResultRow) rows.get(aRow); return row.get(aColumn); }
*/
static public Vector getResultVector() {
Vector v = new Vector();
for (Iterator it = rows.iterator(); it.hasNext();) {
SxResultRow r = (SxResultRow) it.next();
Vector row = new Vector();
for (Iterator it2 = r.iterator(); it2.hasNext();)
row.add(it2.next());
v.add(row);
}
return v;
}
static public SxResultSet getResult() {
return rows;
}
static public SxSQLMetaData getResultSetMetaData() {
/*
* try { FileOutputStream ostream = new FileOutputStream("t.tmp");
* ObjectOutputStream p_out = new ObjectOutputStream(ostream);
*
* p_out.writeObject(metaData);
*
* p_out.flush(); ostream.close(); } catch (Exception ex) {
* System.err.println (ex); }
*/
SxSQLMetaData meta = null;
/*
* try { FileInputStream istream = new FileInputStream("t.tmp");
* ObjectInputStream p_in = new ObjectInputStream(istream);
*
* meta = (SxSQLMetaData) p_in.readObject();
*
* istream.close(); } catch (Exception ex) { System.err.println (ex); }
*/
return metaData;
}
/*
* public void cancel() throws Exception { try { System.err.println("SxSQL:
* Cancel statement"); statement.cancel(); } catch (Exception e) {
* System.err.println("SxSQL: Error canceling statement: " + e); } }
*/
/*
* public void cancel(String url, String user, String passwd) throws
* Exception { try { System.err.println("SxSQL: Cancel statement");
* statement.cancel(); } catch (Exception e) { System.err.println("SxSQL:
* Error canceling statement: " + e); } }
*/
static public void cancel() throws Exception {
try {
System.err.println("SxSQL: Cancel statement");
// statement.cancel();
ObjectInputStream inputFromServlet = null;
ObjectOutputStream outputToServlet = null;
servletConnection.disconnect();
} catch (Exception e) {
System.err.println("SxSQL: Error canceling statement: " + e);
}
}
static public synchronized void close() {
int proto_fkt_id = 4; // LOGOUT
// prot_sql.replace( proto_id_pos, proto_id_pos + 1, (new
// Integer(proto_fkt_id)).toString());
System.out.println("in close");
try {
System.err.println("SxSQL: Closing db connection");
if (!isClosed) {
// execute(prot_sql.toString());
if (resultSet != null)
resultSet.close();
if (statement != null)
statement.close();
ObjectInputStream inputFromServlet = null;
ObjectOutputStream outputToServlet = null;
servletConnection.disconnect();
// Alter Rechte Bug - userID wurde beim Schließen der Connection
// auf null gesetzt
// wenn danach ein Programmteil getUserID() aufruft, wird nicht
// null sondern
// -1 zurückgeliefert
// userID = null;
// System.out.println(" SxSQl close: userID auf null gesetzt");
isClosed = true;
}
} catch (SQLException e) {
System.err.println("SxSQL: Error closing db connection: " + e);
}
}
static public boolean isActive() {
return !isClosed;
}
/**
* auf diese Methode sollte man sich eh nicht verlassen static protected
* void finalize() throws Throwable { if (!isClosed) { close(); userID =
* null; System.out.println(" SxSQl finalize: userID auf null gesetzt");
* isClosed = true; servletConnection.disconnect(); } }
*
* @throws SQLException
*/
/**
* für freemarker zeugs, query wird wie üblich zum Hashtable hinzugefügt
*
* @deprecated wegen Serialisierung doch nicht so gut ganzen Kram
* rüberzuschicken
*/
static synchronized void specialExecute(String query, Hashtable htable)
throws SQLException {
PrintWriter outTest = null;
BufferedReader inTest = null;
Vector superX_elVector = new Vector();
htable.put("query", query);
try {
servletConnection = (HttpURLConnection) superXDbServletUrl
.openConnection();
servletConnection.setDoInput(true);
servletConnection.setDoOutput(true);
// Don't used a cached version of URL connection.
servletConnection.setUseCaches(false);
// Specify the content type that we will send binary data
servletConnection.setRequestProperty("Content-Type",
"application/octet-stream");
} catch (Exception e) {
System.out.println(e.toString());
throw new SQLException(e.toString());
}
rows_ret = new Vector();
// Query übergeben
try {
// send the SuperX_el object to the servlet using serialization
outputToServlet = new ObjectOutputStream(
servletConnection.getOutputStream());
outputToServlet.writeObject(htable);
outputToServlet.flush();
outputToServlet.close();
} catch (IOException e) {
System.out.println(e.toString());
throw new SQLException(e.toString());
} catch (Exception e) {
e.printStackTrace();
throw new SQLException(e.toString());
}
// Read the input from the servlet.
//
// The servlet will return a serialized vector containing
// SuperX_el entries.
//
// System.out.println("Getting input stream");
// output lesen
ObjectInputStream inputFromServlet = null;
try {
inputFromServlet = new ObjectInputStream(
servletConnection.getInputStream());
gesamt = (SuperX_el) inputFromServlet.readObject();
aktuelleNachricht = gesamt.getAktuelleNachricht();
// System.out.println("Nachricht:"+aktuelleNachricht);
// if (ErrorString.length()>1) System.out.println("Fehlermeld. vom
// Servlet:"+ErrorString);
numberOfColumns = gesamt.getColumnCount();
// columnNames = gesamt.getColumnNames();
rows = gesamt.getResultSet();
metaData = new SxSQLMetaData(gesamt);
inputFromServlet.close();
} catch (Exception e) {
e.printStackTrace();
System.err.println(gesamt.getError_String()); // Wint
throw new SQLException(gesamt.getError_String());
}
// System.out.println( "nach Rueckgabe Vector in Applet!!" );
errorString = "" + gesamt.getError_String();
if (errorString != null && errorString.trim().length() > 1) {
if ((logToKonsole.equals("errors") || logToKonsole.equals("all"))
&& aktuelleNachricht != null) {
System.out
.println("----------------------------------------------------");
System.out.println("Folgender Select ergab einen Fehler: ");
System.out.println(aktuelleNachricht);
// System.out.println(logquery);
System.out
.println("----------------------------------------------------");
}
// Bei Fehlern in der Abfrage wird die Verbindung beendet, um
// temporäre Tabellen zu löschen
servletConnection.disconnect();
throw new SQLException("im Servlet " + gesamt.getError_String());
}
}
static private synchronized void applet_servlet_connection(String query)
throws SQLException {
String logquery = query.trim();
if (logquery.substring(0, 6).equals("single"))
logquery = query.substring(6);
if (logquery.substring(0, 6).equals("multi:"))
logquery = query.substring(6);
// Anmeldedaten nicht im log zeigen
if (logquery.startsWith("Anmeldung"))
logquery = "Anmeldung";
if (logToKonsole.equals("all")) {
System.out.println("----------------Select-Stmt, gestartet am "
+ SxDate.getNowString() + "-----------------");
System.out.println(logquery);
// System.out.println("----------------------------------------------------");
}
PrintWriter outTest = null;
BufferedReader inTest = null;
DataOutputStream printout;
Vector superX_elVector = new Vector();
rows_ret = new Vector();
// aus Anmeldung|superx|anfang12
// werden request param und query nur "Anmeldung"
if (query.startsWith("Anmeldung")) {
List l = StringUtils.getStringTokenizedList(query, "|");
try {
servletConnection =
// (HttpURLConnection) new
// URL(superXDbServletUrl.toString()+"?kennung="+l.get(1)+"&passwort="+l.get(2)).openConnection();
(HttpURLConnection) new URL(superXDbServletUrl.toString())
.openConnection();
query = "Anmeldung";
servletConnection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
servletConnection.setDoInput(true);
servletConnection.setDoOutput(true);
// Don't used a cached version of URL connection.
servletConnection.setUseCaches(false);
// Send POST output.
printout = new DataOutputStream(
servletConnection.getOutputStream());
// System.out.println("Anmeldung für User "+ l.get(1) );
String content = "kennung=" + l.get(1) + "&passwort="
+ l.get(2) + "&MandantenID=" + mandantenID + "&query="
+ query;
printout.writeBytes(content);
printout.flush();
printout.close();
// System.out.println("Anfrage für User "+ l.get(1)+ "
// gesendet");
} catch (Exception e) {
e.printStackTrace();
throw new SQLException(e.toString());
}
} else {
try {
servletConnection = (HttpURLConnection) new URL(
superXDbServletUrl.toString() + ";jsessionid="
+ jsessionid).openConnection();
// Specify the content type that we will send binary data
servletConnection.setRequestProperty("Content-Type",
"application/octet-stream");
servletConnection.setDoInput(true);
servletConnection.setDoOutput(true);
// Don't used a cached version of URL connection.
servletConnection.setUseCaches(false);
// send the SuperX_el object to the servlet using serialization
outputToServlet = new ObjectOutputStream(
servletConnection.getOutputStream());
// serialize the object
// Hashtable htable=new Hashtable();
// htable.put("query",query);
outputToServlet.writeObject(mandantenID);
// 3/2016 Umlaut kodierung
query = encodeUmlauts(query);
String queryCode = de.memtext.util.CryptUtils
// .simpleEncryptString2(query);
.encryptStringDES(query);
outputToServlet.writeObject(queryCode);
String signature = null;
if (dsaHandler != null) {
signature = dsaHandler.sign(queryCode);
}
outputToServlet.writeObject(signature);
// outputToServlet.writeObject(htable);
outputToServlet.flush();
outputToServlet.close();
} catch (IOException e) {
System.out.println(e.toString());
throw new SQLException(e.toString());
} catch (Exception e) {
e.printStackTrace();
throw new SQLException(e.toString());
}
}
// Query übergeben
// Read the input from the servlet.
//
// The servlet will return a serialized vector containing
// SuperX_el entries.
//
// System.out.println("Getting input stream");
// output lesen
ObjectInputStream inputFromServlet = null;
// System.out.println("Response vom Server lesen" );
try {
inputFromServlet = new ObjectInputStream(
servletConnection.getInputStream());
// System.out.println("Response vom Server gelesen" );
gesamt = (SuperX_el) inputFromServlet.readObject();
decodeUmlauts();
jsessionid = gesamt.getJsessionid();
aktuelleNachricht = gesamt.getAktuelleNachricht();
// System.out.println("Nachricht:"+aktuelleNachricht);
// if (ErrorString.length()>1) System.out.println("Fehlermeld. vom
// Servlet:"+ErrorString);
numberOfColumns = gesamt.getColumnCount();
// columnNames = gesamt.getColumnNames();
rows = gesamt.getResultSet();
metaData = new SxSQLMetaData(gesamt);
inputFromServlet.close();
} catch (Exception e) {
String msg = gesamt.getError_String();
if (e instanceof java.io.StreamCorruptedException)
msg = "Anmeldefehler (falsche jsessionid?!) " + msg;
e.printStackTrace();
System.err.println(); // Wint
throw new SQLException(msg);
}
// System.out.println( "nach Rueckgabe Vector in Applet!!" );
errorString = "" + gesamt.getError_String();
if (errorString != null && errorString.trim().length() > 1) {
if ((logToKonsole.equals("errors") || logToKonsole.equals("all"))
&& aktuelleNachricht != null) {
System.out
.println("----------------------------------------------------");
System.out.println("Folgender Select ergab einen Fehler: ");
System.out.println(aktuelleNachricht);
// System.out.println(logquery);
System.out
.println("----------------------------------------------------");
}
// Bei Fehlern in der Abfrage wird die Verbindung beendet, um
// temporäre Tabellen zu löschen
servletConnection.disconnect();
throw new SQLException("im Servlet " + gesamt.getError_String());
}
}
public static void decodeUmlauts() {
gesamt.setError_String(decodeUmlauts(gesamt.getError_String()));
gesamt.setAktuelleNachricht(decodeUmlauts(gesamt.getAktuelleNachricht()));
gesamt.setRuntimeMessage(decodeUmlauts(gesamt.getRuntimeMessage()));
String[] colLabels = gesamt.getColumnLabels();
for (int i = 0; i < colLabels.length; i++) {
colLabels[i] = decodeUmlauts(colLabels[i]);
}
gesamt.setColumnLabels(colLabels);
SxResultSet rs = gesamt.getResultSet();
for (Iterator it = rs.iterator(); it.hasNext();) {
SxResultRow row = (SxResultRow) it.next();
int i = 0;
for (Iterator it2 = row.iterator(); it2.hasNext();) {
Object o = it2.next();
if (o instanceof String)
{ o = decodeUmlauts(o.toString());
row.set(i, o);
}
i++;
}
}
}
private static String decodeUmlauts(String txt) {
if (txt != null) {
txt = StringUtils.replace(txt, "///oe///", "ö");
txt = StringUtils.replace(txt, "///Oe///", "Ö");
txt = StringUtils.replace(txt, "///ae///", "ä");
txt = StringUtils.replace(txt, "///Ae///", "Ä");
txt = StringUtils.replace(txt, "///ue///", "ü");
txt = StringUtils.replace(txt, "///Ue///", "Ü");
txt = StringUtils.replace(txt, "///ss///", "ß");
}
return txt;
}
static String encodeUmlauts(String query) {
query = StringUtils.replace(query, "ö", "///oe///");
query = StringUtils.replace(query, "Ö", "///Oe///");
query = StringUtils.replace(query, "ä", "///ae///");
query = StringUtils.replace(query, "Ä", "///Ae///");
query = StringUtils.replace(query, "ü", "///ue///");
query = StringUtils.replace(query, "Ü", "///Ue///");
query = StringUtils.replace(query, "ß", "///ss///");
return query;
}
static void setUrl(String url) throws MalformedURLException {
superXDbServletUrl = new URL(url);
}
static public String getErrorString() {
return errorString;
}
/**
* nur von SuperX.start() aufgerufen
*
* @param userID
* The userID to set.
*/
public static void setUserID(Integer userID) {
SxSQL.userID = userID;
}
public static void setLogMode(String logParam) {
logToKonsole = logParam;
}
public static String getUserFromServlet() throws SQLException {
executeQuery("get_user");
SxResultRow row = (SxResultRow) gesamt.getResultSet().first();
String user = (String) row.get(0);
return user;
}
/**
* Aufruf von SuperX.start und auch noch mal von SxSQL.checkPwd (am Ende) um
* auch bei Applicationstart dafür zu sorgen, dass privateKey geholt wird
*
* @throws Exception
*/
public static void initParams() throws Exception {
executeQuery("get_params");
String privateKeyEncoded = gesamt.getCheckval();
if (privateKeyEncoded != null && !privateKeyEncoded.trim().equals("")) {
privateKeyEncoded = CryptUtils.decryptStringDES(privateKeyEncoded);
dsaHandler = new DSAHandler(privateKeyEncoded);
} else
dsaHandler = null;
newPasswordChecker = gesamt.newPasswordChecker;
}
}

100
src/de/superx/applet/SxSQLMetaData.java

@ -1,100 +0,0 @@ @@ -1,100 +0,0 @@
package de.superx.applet;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.Vector;
import de.superx.common.SuperX_el;
/**
* Ein Teil der Implementation des JDBC ResultSetMetaData interface.<BR>
* @author Rainer Behr (rainer@rbehr.de)
* @version 1.0
*/
public class SxSQLMetaData implements Serializable
{
private Vector V_cols = new Vector ();;
private int numColumns = -1;
public SxSQLMetaData (SuperX_el gesamt)
throws SQLException
{
// used MetaData
// -------------
// String getColumnName(int column)
// String getColumnLabel(int column)
// int getColumnDisplaySize(int column)
// int getColumnType(int column)
// int getScale(int column)
// boolean isWritable(int column)
//ResultSetMetaData meta = resultset.getMetaData();
numColumns = gesamt.getColumnCount();
for (int i = 0; i < numColumns; i++)
{
Vector V_column = new Vector();
V_column.add (0, gesamt.getColumnNames() [i]);
V_column.add (1, gesamt.getColumnLabels() [i]);
V_column.add (2, new Integer (gesamt.getColumnDisplaySizes() [i]));
V_column.add (3, new Integer (gesamt.getColumnTypes() [i]));
V_column.add (4, new Integer (gesamt.getScales() [i]));
V_column.add (5, new Boolean (gesamt.getisWritable() [i]));
V_cols.add (V_column);
}
}
public int getColumnCount()
{
return numColumns;
}
/**
*
* @param column
* @return
* @deprecated not currently used
*/
public String getColumnName (int column)
{
Vector V_column = (Vector) V_cols.elementAt (column - 1);
return (String) V_column.elementAt (0);
}
public String getColumnLabel (int column)
{
Vector V_column = (Vector) V_cols.elementAt (column - 1);
return (String) V_column.elementAt (1);
}
public int getColumnDisplaySize (int column)
{
Vector V_column = (Vector) V_cols.elementAt (column - 1);
return ((Integer) V_column.elementAt (2)).intValue();
}
public int getColumnType (int column)
{
Vector V_column = (Vector) V_cols.elementAt (column - 1);
return ((Integer) V_column.elementAt (3)).intValue();
}
public int getScale (int column)
{
Vector V_column = (Vector) V_cols.elementAt (column - 1);
return ((Integer) V_column.elementAt (4)).intValue();
}
public boolean isWritable (int column)
{
Vector V_column = (Vector) V_cols.elementAt (column - 1);
return ((Boolean) V_column.elementAt (5)).booleanValue();
}
}

136
src/de/superx/applet/SxTableMap.java

@ -1,136 +0,0 @@ @@ -1,136 +0,0 @@
// Beispielklasse aus dem JavaTutorial (http://java.sun.com/docs/books/tutorial) für SuperX angepasst
/*
* @(#)TableMap.java 1.4 97/12/17
*
* Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved.
*
* This software is the confidential and proprietary information of Sun
* Microsystems, Inc. ("Confidential Information"). You shall not
* disclose such Confidential Information and shall use it only in
* accordance with the terms of the license agreement you entered into
* with Sun.
*
* SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
* SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
* IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
* SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
* THIS SOFTWARE OR ITS DERIVATIVES.
*
*/
/**
* In a chain of data manipulators some behaviour is common. TableMap
* provides most of this behavour and can be subclassed by filters
* that only need to override a handful of specific methods. TableMap
* implements TableModel by routing all requests to its model, and
* TableModelListener by routing all events to its listeners. Inserting
* a TableMap which has not been subclassed into a chain of table filters
* should have no effect.
*
* @version 1.4 12/17/97
* @author Philip Milne */
package de.superx.applet;
import java.util.Vector;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
/**
* Erweiterung des TabellenModells. Wird für SxTable benötigt.
*
* @version 1.4 12/17/97
* @author Philip Milne, erweitert von Rainer Behr
* @see SxTable
*/
public class SxTableMap extends AbstractTableModel implements TableModelListener, SxTableModel
{
protected SxTableModel model;
public SxTableModel getModel()
{
return model;
}
public void setModel(SxTableModel model)
{
this.model = model;
model.addTableModelListener(this);
}
// By default, Implement TableModel by forwarding all messages
// to the model.
public Object getValueAt(int aRow, int aColumn)
{
return model.getValueAt(aRow, aColumn);
}
public Object getValueAt2(int aRow, int aColumn)
{
return model.getValueAt2(aRow, aColumn);
}
// r.b. extension for proper sorting
public Object getObjectAt(int aRow, int aColumn)
{
return model.getObjectAt(aRow, aColumn);
}
// r.b. extension for easy data setting
public void setDataVector(Vector Rows, Vector Header, Object Meta)
{
model.setDataVector(Rows, Header, Meta);
}
// r.b. extension for easy data setting
public void setDataVector(Vector Rows)
{
model.setDataVector(Rows);
}
public void setValueAt(Object aValue, int aRow, int aColumn)
{
model.setValueAt(aValue, aRow, aColumn);
}
public int getRowCount() {
return (model == null) ? 0 : model.getRowCount();
}
public int getColumnCount() {
return (model == null) ? 0 : model.getColumnCount();
}
public String getColumnName(int aColumn) {
return model.getColumnName(aColumn);
}
// r.b. extension for max. columnsize
public int getColumnSize(int aColumn) {
return model.getColumnSize(aColumn);
}
public Class getColumnClass(int aColumn) {
return model.getColumnClass(aColumn);
}
public void setEditable(boolean editable)
{
model.setEditable(editable);
}
public boolean isCellEditable(int row, int column) {
return model.isCellEditable(row, column);
}
//
// Implementation of the TableModelListener interface,
//
// By default forward all events to all the listeners.
public void tableChanged(TableModelEvent e) {
fireTableChanged(e);
}
}

27
src/de/superx/applet/SxTableModel.java

@ -1,27 +0,0 @@ @@ -1,27 +0,0 @@
package de.superx.applet;
import java.util.Vector;
import javax.swing.table.TableModel;
/**
* Eine Erweiterung des TableModel-Interfaces.
* @autor Rainer Behr
* @version 1.0
* @see SxTableMap
*/
public interface SxTableModel extends TableModel
{
public Object getObjectAt(int aRow, int aColumn);
public void setDataVector(Vector rows, Vector header, Object meta);
public void setDataVector(Vector rows);
public int getColumnSize(int aColumn);
public void setEditable(boolean editable);
public Object getValueAt2(int aRow, int aColumn);
}

1839
src/de/superx/applet/SxTablePanel.java

File diff suppressed because it is too large Load Diff

354
src/de/superx/applet/SxTableSorter.java

@ -1,354 +0,0 @@ @@ -1,354 +0,0 @@
// Beispielklasse aus dem JavaTutorial (http://java.sun.com/docs/books/tutorial) für SuperX angepasst
/*
* @(#)TableSorter.java 1.3 97/10/06
*
* Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved.
*
* This software is the confidential and proprietary information of Sun
* Microsystems, Inc. ("Confidential Information"). You shall not
* disclose such Confidential Information and shall use it only in
* accordance with the terms of the license agreement you entered into
* with Sun.
*
* SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
* SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
* IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
* SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
* THIS SOFTWARE OR ITS DERIVATIVES.
*
*/
/**
* A sorter for TableModels. The sorter has a model (conforming to TableModel)
* and itself implements TableModel. TableSorter does not store or copy
* the data in the TableModel, instead it maintains an array of
* integers which it keeps the same size as the number of rows in its
* model. When the model changes it notifies the sorter that something
* has changed eg. "rowsAdded" so that its internal array of integers
* can be reallocated. As requests are made of the sorter (like
* getValueAt(row, col) it redirects them to its model via the mapping
* array. That way the TableSorter appears to hold another copy of the table
* with the rows in a different order. The sorting algorthm used is stable
* which means that it does not move around rows when its comparison
* function returns 0 to denote that they are equivalent.
*
* @version 1.3 10/06/97
* @author Philip Milne
*/
package de.superx.applet;
import java.util.Date;
import java.util.Vector;
import javax.swing.event.TableModelEvent;
/**
* Ein Sortierer für Tabellenmodelle.
* @version 1.3 10/06/97
* @author Philip Milne
*/
public class SxTableSorter extends SxTableMap
{
int indexes[];
Vector sortingColumns = new Vector();
boolean ascending = true;
int compares;
public SxTableSorter()
{
indexes = new int[0]; // For consistency.
}
public SxTableSorter(SxTableModel model)
{
setModel(model);
}
public void setModel(SxTableModel model) {
super.setModel(model);
reallocateIndexes();
}
public int [] getIndexes ()
{
return indexes;
}
public int compareRowsByColumn(int row1, int row2, int column)
{
Class type = model.getColumnClass(column);
SxTableModel data = model;
// Check for nulls
Object o1 = data.getObjectAt(row1, column);
Object o2 = data.getObjectAt(row2, column);
// If both values are null return 0
if (o1 == null && o2 == null) {
return 0;
}
else if (o1 == null) { // Define null less than everything.
return -1;
}
else if (o2 == null) {
return 1;
}
/* We copy all returned values from the getValue call in case
an optimised model is reusing one object to return many values.
The Number subclasses in the JDK are immutable and so will not be used in
this way but other subclasses of Number might want to do this to save
space and avoid unnecessary heap allocation.
*/
if (type.getSuperclass() == java.lang.Number.class)
{
Number n1 = (Number)data.getObjectAt(row1, column);
double d1 = n1.doubleValue();
Number n2 = (Number)data.getObjectAt(row2, column);
double d2 = n2.doubleValue();
if (d1 < d2)
return -1;
else if (d1 > d2)
return 1;
else
return 0;
}
else if (type == java.util.Date.class)
{
Date d1 = (Date)data.getObjectAt(row1, column);
long n1 = d1.getTime();
Date d2 = (Date)data.getObjectAt(row2, column);
long n2 = d2.getTime();
if (n1 < n2)
return -1;
else if (n1 > n2)
return 1;
else return 0;
}
else if (type == String.class)
{
String s1 = (String)data.getObjectAt(row1, column);
String s2 = (String)data.getObjectAt(row2, column);
int result = s1.compareTo(s2);
if (result < 0)
return -1;
else if (result > 0)
return 1;
else return 0;
}
else if (type == Boolean.class)
{
Boolean bool1 = (Boolean)data.getObjectAt(row1, column);
boolean b1 = bool1.booleanValue();
Boolean bool2 = (Boolean)data.getObjectAt(row2, column);
boolean b2 = bool2.booleanValue();
if (b1 == b2)
return 0;
else if (b1) // Define false < true
return 1;
else
return -1;
}
else
{
Object v1 = data.getObjectAt(row1, column);
String s1 = v1.toString();
Object v2 = data.getObjectAt(row2, column);
String s2 = v2.toString();
int result = s1.compareTo(s2);
if (result < 0)
return -1;
else if (result > 0)
return 1;
else return 0;
}
}
public int compare(int row1, int row2)
{
compares++;
for(int level = 0; level < sortingColumns.size(); level++)
{
Integer column = (Integer)sortingColumns.elementAt(level);
int result = compareRowsByColumn(row1, row2, column.intValue());
if (result != 0)
return ascending ? result : -result;
}
return 0;
}
public void reallocateIndexes()
{
int rowCount = model.getRowCount();
// Set up a new array of indexes with the right number of elements
// for the new data model.
indexes = new int[rowCount];
// Initialise with the identity mapping.
for(int row = 0; row < rowCount; row++)
indexes[row] = row;
}
public void tableChanged(TableModelEvent e)
{
// System.err.println("Sorter: tableChanged");
reallocateIndexes();
super.tableChanged(e);
}
public void dataChanged()
{
reallocateIndexes();
sort(this);
super.tableChanged(new TableModelEvent(this, 0, getRowCount()));
}
public void checkModel()
{
if (indexes.length != model.getRowCount()) {
// System.err.println("Sorter not informed of a change in model.");
}
}
public void sort(Object sender)
{
checkModel();
compares = 0;
// n2sort();
// qsort(0, indexes.length-1);
shuttlesort((int[])indexes.clone(), indexes, 0, indexes.length);
// System.err.println("Compares: "+compares);
}
public void n2sort() {
for(int i = 0; i < getRowCount(); i++) {
for(int j = i+1; j < getRowCount(); j++) {
if (compare(indexes[i], indexes[j]) == -1) {
swap(i, j);
}
}
}
}
// This is a home-grown implementation which we have not had time
// to research - it may perform poorly in some circumstances. It
// requires twice the space of an in-place algorithm and makes
// NlogN assigments shuttling the values between the two
// arrays. The number of compares appears to vary between N-1 and
// NlogN depending on the initial order but the main reason for
// using it here is that, unlike qsort, it is stable.
public void shuttlesort(int from[], int to[], int low, int high) {
if (high - low < 2) {
return;
}
int middle = (low + high)/2;
shuttlesort(to, from, low, middle);
shuttlesort(to, from, middle, high);
int p = low;
int q = middle;
/* This is an optional short-cut; at each recursive call,
check to see if the elements in this subset are already
ordered. If so, no further comparisons are needed; the
sub-array can just be copied. The array must be copied rather
than assigned otherwise sister calls in the recursion might
get out of sinc. When the number of elements is three they
are partitioned so that the first set, [low, mid), has one
element and and the second, [mid, high), has two. We skip the
optimisation when the number of elements is three or less as
the first compare in the normal merge will produce the same
sequence of steps. This optimisation seems to be worthwhile
for partially ordered lists but some analysis is needed to
find out how the performance drops to Nlog(N) as the initial
order diminishes - it may drop very quickly. */
if (high - low >= 4 && compare(from[middle-1], from[middle]) <= 0) {
for (int i = low; i < high; i++) {
to[i] = from[i];
}
return;
}
// A normal merge.
for(int i = low; i < high; i++) {
if (q >= high || (p < middle && compare(from[p], from[q]) <= 0)) {
to[i] = from[p++];
}
else {
to[i] = from[q++];
}
}
}
public void swap(int i, int j) {
int tmp = indexes[i];
indexes[i] = indexes[j];
indexes[j] = tmp;
}
// The mapping only affects the contents of the data rows.
// Pass all requests to these rows through the mapping array: "indexes".
public Object getValueAt(int aRow, int aColumn)
{
checkModel();
return model.getValueAt(indexes[aRow], aColumn);
}
// r.b. extension for proper sorting
public Object getObjectAt(int aRow, int aColumn)
{
checkModel();
return model.getObjectAt(indexes[aRow], aColumn);
}
public void setValueAt(Object aValue, int aRow, int aColumn)
{
checkModel();
model.setValueAt(aValue, indexes[aRow], aColumn);
}
// r.b. extension for easy data setting
public void setDataVector(Vector rows, Vector header, Object meta)
{
// System.err.println ("Sorter: Rows = " + Rows.size());
indexes = new int [rows.size()];
model.setDataVector(rows, header, meta);
}
// r.b. extension for easy data setting
public void setDataVector(Vector Rows)
{
// System.err.println ("Sorter: Rows = " + Rows.size());
indexes = new int [Rows.size()];
model.setDataVector(Rows);
}
public void sortByColumn(int column) {
sortByColumn(column, true);
}
public void sortByColumn(int column, boolean ascending) {
this.ascending = ascending;
sortingColumns.removeAllElements();
sortingColumns.addElement(new Integer(column));
sort(this);
super.tableChanged(new TableModelEvent(this, 0, getRowCount()));
}
}

71
src/de/superx/applet/SxThemenEintrag.java

@ -1,71 +0,0 @@ @@ -1,71 +0,0 @@
package de.superx.applet;
/**
*
* Ein Eintrag für den Themenbaum.
* Abgelegt wird tid in der Tabelle themenbaum, Name, ggfs. Tid in der Tabelle Maskeninfo, Nummer des Vaterknotens (parent) und Erläuterungstext.
*
* @version 2.0 01/01/02
* @author Meikel Bisping
*/
public class SxThemenEintrag {
private Integer tid;
private String name;
private Integer maskeninfo_id;
private Integer parent;
private String erlaeuterung;
private String cssClass;
SxThemenEintrag ()
{
tid=null;
name=null;
maskeninfo_id=null;
parent=null;
erlaeuterung=null;
cssClass=null;
}
SxThemenEintrag(Integer ltid, String lname, Integer lnr, Integer lparent, String lerlaeuterung, String lcssClass)
{
tid=ltid;
name=lname;
maskeninfo_id=lnr;
parent=lparent;
erlaeuterung=lerlaeuterung;
cssClass=lcssClass;
}
public Integer getTid()
{
return tid;
}
public String getName()
{
return name;
}
public Integer getMaskeninfo_id()
{
return maskeninfo_id;
}
public Integer getParent()
{
return parent;
}
public String getErlaeuterung()
{
return erlaeuterung;
}
public String getCssClass()
{
return cssClass;
}
public String toString()
{
return this.name;
}
}

423
src/de/superx/applet/SxThemenbaum.java

@ -1,423 +0,0 @@ @@ -1,423 +0,0 @@
package de.superx.applet;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.SQLException;
import java.util.Enumeration;
import java.util.Locale;
import java.util.Vector;
import javax.swing.ImageIcon;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
/**
* Beim ersten Aufruf wird der Themenbaum aus der Datenbank aufgebaut und in der statischen Variable tree abgelegt.
* Nur wenn ein anderer Benutzer/Stand angefordert wird, wird der Themenbaum neu aufgebaut.
* Die Darstellung wird von SxMask übernommen.
* @version 2.0 01/01/02
* @author Meikel Bisping
*/
public class SxThemenbaum extends MouseAdapter implements TreeSelectionListener{
private Vector themenbaum;
private JTree tree;
private SxThemenEintrag einEintrag;
static ImageIcon leaf = null;
private String standStr, lastuser;
private SxMask localmask;
private Vector rohform;
SxThemenbaum(SxMask lmask) {
localmask = lmask;
String aktuser = new String();
aktuser = SxSQL.getUserID().toString();
if (!aktuser.equals(lastuser)) {
tree = null;
standStr = null;
lastuser = aktuser;
}
if (leaf == null) {
ClassLoader cl = getClass().getClassLoader();
try { leaf = new ImageIcon(cl.getResource("images/leaf.gif"));
}
catch (Exception e)
{
System.out.println("Bild für Baum nicht verfügbar");
}
}
}
public JTree getTree(String lStand) throws SQLException {
// liefert Organigramm v. angegebenen Stand zurück
String name, erlaeuterung, cssClass;
Integer tid, maskeninfo_id, parent;
//Der folgende Parameter ist nur provisorisch drin, in Zkunft kommt hier
//Locale-Behandlung rein.
//neu erstellen nur beim 1.mal und anderem Stand
// if (Stand == null || (!Stand.equals(lStand))) {
standStr = lStand;
//tree erzeugen für Stand
//aus Datenbank auslesen
String userID = SxSQL.getUserID().toString();
//datum String in sql.Date umformen
java.sql.Date date = new java.sql.Date(1);
date = SxDate.getDate(standStr);
//rohform ist als Membervariable definiert, damit
//noch erlaubteKnoten hinzugefügt werden können
rohform = new Vector();
String query = "";
String sx_db = (String) SxDefaults.getPropertyValue("SxDB");
//default für andere Datenbanken
query =
"select tid, name, maskeninfo_id, parent, gueltig_seit, gueltig_bis,sort,css_class from themenbaum order by sort,name;drop table tmp_themenbaum;";
//Makroabfragen sollen nicht erscheinen
if (sx_db.equalsIgnoreCase("postgres")) {
query =
"select sp_user_themen("
+ userID
+ ",today(),0);"+ //,'"+currentLocale.getLanguage()+ "')
"select distinct tid,name,maskeninfo_id,parent,erlaeuterung,sort,css_class from tmp_themenbaum order by sort,name;drop table tmp_themenbaum;";
}
if (sx_db.equalsIgnoreCase("informix"))
{
query =
"execute procedure sp_user_themen("
+ userID
+ ",today,0);"+ //'"+currentLocale.getLanguage()+ "');" +
"select distinct tid,name,maskeninfo_id,parent,erlaeuterung,sort,css_class from tmp_themenbaum order by sort,name;drop table tmp_themenbaum;";
}
SxSQL.executeAll(query);
rohform = SxSQL.getResultVector();
if (rohform.size() < 1)
return null;
//Umformen in Vector of SxThemenEintrag
Vector dummy = new Vector();
themenbaum = new Vector();
Enumeration en1 = rohform.elements();
while (en1.hasMoreElements()) {
dummy = (Vector) en1.nextElement();
if (dummy.elementAt(0)==null||!(dummy.elementAt(0) instanceof Integer))
throw new IllegalArgumentException("Konnte Themenbaun nicht aufbauen, da Werte in tmp Tabelle fehlen oder falsch");
tid = (Integer) dummy.elementAt(0);
if (dummy.elementAt(1)==null)
throw new IllegalArgumentException("Konnte Themenbaun nicht aufbauen, da Werte in tmp Tabelle fehlen oder falsch");
name = dummy.elementAt(1).toString();
maskeninfo_id = (Integer) dummy.elementAt(2);
parent = (Integer) dummy.elementAt(3);
erlaeuterung = dummy.elementAt(4)==null?"":dummy.elementAt(4).toString();
cssClass= dummy.elementAt(5)==null?"":dummy.elementAt(5).toString();
einEintrag =
new SxThemenEintrag(
tid,
name,
maskeninfo_id,
parent,
erlaeuterung,
cssClass);
themenbaum.addElement(einEintrag);
}
rohform = null;
SxThemenEintrag ebene0 =
new SxThemenEintrag(
null,
"Abfragen/Berichte",
null,
null,
null,
null);
DefaultMutableTreeNode root =
new DefaultMutableTreeNode(ebene0);
//hier werden über eine rekursive Methode alle
//Institute in den Baum eingetragen
insertnodes(null, root);
themenbaum = null;
//Baum erzeugen
tree = new JTree(root);
de.memtext.util.TreeUtils.sort(root);
tree.setRootVisible(false);
//root Abfragen/Berichte sieht man sowieso nicht
//first child abfragen muss aufgeklappt sein
//da Mouselistener Doubleclick umfunktioniert
if (root.getChildCount() > 0) {
DefaultMutableTreeNode ebene1 =
(DefaultMutableTreeNode) root.getChildAt(0);
tree.expandPath(new TreePath(ebene1.getPath()));
}
//Einfachselektion
tree.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
//Markierungsrandfarbe grau nicht gelb
DefaultTreeCellRenderer renderer =
new DefaultTreeCellRenderer();
renderer.setBorderSelectionColor(java.awt.Color.darkGray);
//ImageIcon leaf=new ImageIcon("h:\\mb\\leaf.gif");
if (leaf != null)
renderer.setLeafIcon(leaf);
tree.setCellRenderer(renderer);
//TreeSelectionListener hinzufügen
//SxThemenDialogSecList sl = new SxThemenDialogSecList(localmask, tree);
tree.addTreeSelectionListener(this);
//MouseListener für Doppelklicks
//(wird immer neu hinzugefügt, klappte sonst nicht?!)
//SxThemenMouseListener ml = new SxThemenMouseListener(localmask);
tree.addMouseListener(this);
return tree;
}
private void insertnodes(
Integer theParent,
DefaultMutableTreeNode aktNode) {
//rekursive Methode, die Institutionen in den Baum einträgt
Vector result = new Vector();
result = mySelect(theParent);
Integer eintrag_tid;
for (Enumeration el = result.elements(); el.hasMoreElements();) {
einEintrag = (SxThemenEintrag) el.nextElement();
DefaultMutableTreeNode neuNode =
new DefaultMutableTreeNode(einEintrag);
aktNode.add(neuNode);
eintrag_tid = einEintrag.getTid();
//nervig null-Werte abfangen
if (eintrag_tid != null & theParent == null)
insertnodes(einEintrag.getTid(), neuNode);
if (eintrag_tid == null & theParent == null)
System.out.println(
"Achtung! Element hat fälschlicherweise sich selbst als parent:"
+ einEintrag.getName());
if (eintrag_tid != null && theParent != null)
if (!theParent.equals(eintrag_tid))
insertnodes(einEintrag.getTid(), neuNode);
else
System.out.println(
"Achtung! Element hat fälschlicherweise sich selbst als parent:"
+ einEintrag.getName()
+ "tid:"
+ einEintrag.getTid());
}
//wenn eine Kategorie (maskeninfo==null) keine Blätter (Abfragen)
//enthält, die Kategorie entfernen
einEintrag = (SxThemenEintrag) aktNode.getUserObject();
// if (einEintrag.getMaskeninfo_id()==null&&result.size()<1)
if (einEintrag.getMaskeninfo_id() == null && aktNode.isLeaf())
aktNode.removeFromParent();
}
private Vector mySelect(Integer pruefparent) {
//liefert alle Institute mit Parent =pruefparent zurück
Vector result = new Vector();
Integer eintrag_parent;
for (Enumeration el = themenbaum.elements();
el.hasMoreElements();
) {
einEintrag = (SxThemenEintrag) el.nextElement();
eintrag_parent = einEintrag.getParent();
if (eintrag_parent == null && pruefparent == null)
result.addElement(einEintrag);
if (eintrag_parent != null && pruefparent != null)
if (eintrag_parent.intValue() == pruefparent.intValue())
result.addElement(einEintrag);
}
return result;
}
private void addKnotenUnique(Vector eineMaske) {
//Maske hinzufügen, falls unter dem Parent nicht schon vorhanden
boolean schonvorhanden = false;
Vector test;
Integer maskeninfo_tid, parent;
maskeninfo_tid = (Integer) eineMaske.elementAt(2);
parent = (Integer) eineMaske.elementAt(3);
for (Enumeration el = rohform.elements(); el.hasMoreElements();) {
test = (Vector) el.nextElement();
if (maskeninfo_tid.equals((Integer) test.elementAt(2))
&& parent.equals((Integer) test.elementAt(3))) {
schonvorhanden = true;
break;
}
}
if (!schonvorhanden)
rohform.add(eineMaske); // rohform ist Membervariable
}
public void valueChanged(TreeSelectionEvent event) {
DefaultMutableTreeNode node =
(DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
if (node != null) {
SxThemenEintrag themenEintrag=(SxThemenEintrag) node.getUserObject();
MaskeninfoElement selectedMaskeninfoElement=
localmask.getSelectedMaskeninfoElement();
selectedMaskeninfoElement.clear();
selectedMaskeninfoElement.setTid(themenEintrag.getMaskeninfo_id());
selectedMaskeninfoElement.setName(themenEintrag.getName());
localmask.terlaeuterung.setText(themenEintrag.getErlaeuterung());
//System.out.println("Erl:"+help.getErlaeuterung());
}
}
public void mousePressed(MouseEvent e) {
if (e.getClickCount() == 2) {
//ausgewählter Wert wurde durch SelectionListener schon festgestellt
if (localmask.getSelectedMaskeninfoElement().getTid()!=null) localmask.maskeOeffnen();
}
}
}
// alternative Version, wird nicht genutzt
/* private void erlaubteKnotenHinzufügen(
String userid,
java.sql.Date date) {
String query;
Vector dummy, Knoten = null;
Integer tid;
try {
//Rechte, die dem User gegeben wurden
query =
"select U.id from user_themen U,themenbaum T where U.id=T.tid and U.maske=0 and U.userid="
+ userid
+ " and "
+ " T.gueltig_seit<=date('"
+ DateUtils.getTodayString()
+ "') and T.gueltig_bis>=date('"
+ DateUtils.getTodayString()
+ "') "
+ "union "
+
//Rechte, die der Grupper gegeben wurden
"select G.id from group_themen G,themenbaum T, user_group_bez B where G.id=T.tid"
+ " and G.maske=0 and G.groupid=B.groupinfo_id and B.userinfo_id="
+ userid
+ " and "
+ " T.gueltig_seit<=date('"
+ DateUtils.getTodayString()
+ "') and T.gueltig_bis>=date('"
+ DateUtils.getTodayString()
+ "') ";
SxSQL.executeQuery(query);
Knoten = SxSQL.getResultVector();
} catch (Exception ex) {
System.out.println(ex.toString());
ex.printStackTrace();
}
for (Enumeration el = Knoten.elements(); el.hasMoreElements();) {
dummy = (Vector) el.nextElement();
//SxSQL liefert immer Vector of Vectors zurück
tid = (Integer) dummy.elementAt(0);
erlaubteHinzufügenRekursion(tid, date);
}
}
private void erlaubteHinzufügenRekursion(
Integer themenknoten,
java.sql.Date date) {
String query;
Vector dummy, Masken, Masken2, eineMaske, Knoten = null;
Integer tid;
try {
//Masken der Auflistung hinzufügen
query =
"select T.tid, M.name,M.tid,T.parent, M.erlaeuterung from maskeninfo M, themenbaum T where T.maskeninfo_id=M.tid and maskeninfo_id is not null and T.parent="
+ themenknoten
+ " and T.gueltig_seit<=date('"
+ DateUtils.getTodayString()
+ "') and T.gueltig_bis>=date('"
+ DateUtils.getTodayString()
+ "') ";
SxSQL.executeQuery(query);
Masken = SxSQL.getResultVector();
for (Enumeration el = Masken.elements();
el.hasMoreElements();
) {
eineMaske = (Vector) el.nextElement();
addKnotenUnique(eineMaske);
//prüfen, ob die Maske noch unter anderen Knoten vorkommt, ggfs. hinzufügen
query =
"select T.tid, M.name,M.tid,T.parent, M.erlaeuterung from maskeninfo M, themenbaum T where "
+ "T.maskeninfo_id=M.tid and maskeninfo_id="
+ eineMaske.elementAt(2).toString()
+ " and T.parent!="
+ themenknoten
+ " and T.gueltig_seit<=date('"
+ DateUtils.getTodayString()
+ "') and T.gueltig_bis>=date('"
+ DateUtils.getTodayString()
+ "') ";
SxSQL.executeQuery(query);
Masken2 = SxSQL.getResultVector();
for (Enumeration el2 = Masken2.elements();
el2.hasMoreElements();
) {
eineMaske = (Vector) el2.nextElement();
addKnotenUnique(eineMaske);
}
}
//für weitere Knoten Prozedure rekursiv aufrufen
query =
"select T.tid from themenbaum T where T.parent="
+ themenknoten
+ " and T.maskeninfo_id is null "
+ " and T.gueltig_seit<=date('"
+ DateUtils.getTodayString()
+ "') and T.gueltig_bis>=date('"
+ DateUtils.getTodayString()
+ "') ";
SxSQL.executeQuery(query);
Knoten = SxSQL.getResultVector();
} catch (Exception ex) {
System.out.println(ex.toString());
ex.printStackTrace();
}
for (Enumeration el = Knoten.elements(); el.hasMoreElements();) {
dummy = (Vector) el.nextElement();
//SxSQL liefert immer Vector of Vectors zurück
tid = (Integer) dummy.elementAt(0);
erlaubteHinzufügenRekursion(tid, date);
}
}
*/

388
src/de/superx/applet/SxTreeDlg.java

@ -1,388 +0,0 @@ @@ -1,388 +0,0 @@
package de.superx.applet;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.Date;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.TimeZone;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.tree.DefaultMutableTreeNode;
import de.memtext.dlg.OkCancelClearDlg;
import de.memtext.tree.KeyParentEqualException;
import de.memtext.tree.NoMainEntryException;
import de.memtext.util.DateUtils;
import de.memtext.util.WindowUtils;
import de.memtext.widgets.LabeledComboBox;
import de.memtext.widgets.TitlePanel;
import de.memtext.widgets.VerticalBox;
import de.memtext.widgets.WarningMessage;
import de.superx.common.DBServletException;
import de.superx.common.FieldContainer;
import de.superx.common.SelectableItem;
import de.superx.common.Sichtgruppe;
/**
* Ein Baumdialog, bei dem ein Element ausgewählt werden kann. Falls in der
* Sichtgruppe mehrere Sichten enthalten sind, kann eine Sicht ausgewählt
* werden. Ggfs. kann auch der Stand geändert werden. Als gewähltes Ergebnis
* kann man mit der Methode getResult ein SelectableItem-Objekt kriegen.
*
* @author Meikel Bisping
*/
public class SxTreeDlg extends OkCancelClearDlg {
private JButton bStand;
private JEditorPane erlPane = new JEditorPane("text/html", "");
private JScrollPane erlScrollP;
private Font fontBtns = new Font("SansSerif", Font.PLAIN, 10);
boolean result, isStandChanged;
private LinkedList selections = new LinkedList();
JLabel lblStand;
private String standAmAnfang;
JScrollPane treeScroll = new JScrollPane();
private SxTreeDlgMouseListener mouseList = new SxTreeDlgMouseListener();
private LabeledComboBox cbSichten;
private Sichtgruppe sichtgruppe;
private JPanel auswahlPanel;
private SichtenChangeListener changeListener = new SichtenChangeListener();
public SxTreeDlg(Frame parent, String name, Sichtgruppe sichtgruppe,
String erläuterung) throws SQLException, DBServletException,
KeyParentEqualException, CloneNotSupportedException, NoMainEntryException {
super(parent, "Auswahl " + name);
selections.clear();
Point parloc = parent.getLocation();
setLocation(parloc.x + 30, parloc.y + 30);
// PlafUtils.setWindowsLook(this);
this.sichtgruppe = sichtgruppe;
setNorth(new TitlePanel("Auswahl " + name));
initCenter(erläuterung);
JButton btnSuchen = new JButton("Suchen");
btnSuchen.setFont(fontBtns);
btnSuchen.addActionListener(new SuchenListener());
addAboveOK(btnSuchen);
for (Iterator it = sichtgruppe.iterator(); it.hasNext();) {
SichtApplet aSicht = (SichtApplet) it.next();
aSicht.addMouseListener(mouseList);
}
this.setSize(700, 500);
}
private void initCenter(String erläuterung) throws SQLException, DBServletException, KeyParentEqualException, CloneNotSupportedException, NoMainEntryException {
JSplitPane jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
erlScrollP = new JScrollPane(erlPane);
// erlScrollP.setMaximumSize(new Dimension(500,300));
jsp.add(erlScrollP);
erlPane.setText(erläuterung);
erlPane.setEditable(false);
if (erläuterung == null || erläuterung.trim().equals(""))
erlScrollP.setVisible(false);
jsp.setDividerLocation(250);
VerticalBox vbox = new VerticalBox();
auswahlPanel = new JPanel();
lblStand = new JLabel();
lblStand.setFont(fontBtns);
bStand = new JButton("anderer Stand");
bStand.setFont(fontBtns);
bStand.setDefaultCapable(false);
bStand.addActionListener(new StandListener());
auswahlPanel.add(lblStand);
auswahlPanel.add(bStand);
vbox.add(auswahlPanel);
cbSichten = new LabeledComboBox("Sicht", sichtgruppe.getSichtenlist());
cbSichten.addActionListener(changeListener);
if (sichtgruppe.getSelectedSicht() != null) {
cbSichten.setSelectedItem(sichtgruppe.getSelectedSicht());
} else {
cbSichten.setSelectedIndex(0);
sichtgruppe.setSelectedSicht((SichtApplet) cbSichten
.getSelectedItem());
try {
sichtgruppe.makeSureSelectedSichtIsOK(new Hashtable(),new HashMap(),new FieldContainer());
}
catch (Exception e)
{
throw new SQLException(e.toString());
}
}
auswahlPanel.add(cbSichten);
if (sichtgruppe.size() < 2)
cbSichten.setVisible(false);
lblStand.setText("Stand: "
+ sichtgruppe.getSelectedSicht().getStand());
standAmAnfang = sichtgruppe.getSelectedSicht().getStand();
vbox.add(treeScroll);
jsp.add(vbox);
setCenter(jsp);
}
private void updateStandVisibility() {
if (sichtgruppe.getSelectedSicht().isStandbuttonWanted()) {
lblStand.setVisible(true);
bStand.setVisible(true);
} else {
lblStand.setVisible(false);
bStand.setVisible(false);
}
}
public void standAendern() throws SQLException, DBServletException,
KeyParentEqualException, CloneNotSupportedException, NoMainEntryException {
DateFormat df;
String neuerStand = JOptionPane
.showInputDialog(this, "Neues Datum eingeben:", "SuperX",
JOptionPane.QUESTION_MESSAGE);
if (neuerStand == null)
return;
df = DateFormat.getDateInstance(DateFormat.MEDIUM);
// r.b. default Jahr 4-stellig
df.setTimeZone(TimeZone.getDefault());
df.setLenient(false);
String geprueft = null;
java.sql.Date adate = null;
try {
if (neuerStand.endsWith("00")) {
switch (neuerStand.charAt(neuerStand.length() - 3)) {
case '-':
case '.':
case '/':
neuerStand = neuerStand.substring(0,
neuerStand.length() - 2)
+ "2000";
break;
}
}
java.util.Date date = df.parse(neuerStand);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
if (year >= 0 && year < 30)
calendar.add(Calendar.YEAR, 2000);
if (year >= 30 && year < 100)
calendar.add(Calendar.YEAR, 1900);
adate = new java.sql.Date(calendar.getTime().getTime());
// wenn Format nicht OK bleibt geprueft null
geprueft = df.format((java.util.Date) adate);
} catch (ParseException e_parse) {
// System.err.println ("SxDate: ERROR: parse: Date != " + value);
} catch (IllegalArgumentException e_arg) {
// System.err.println ("SxDate: ERROR: arg: Date != " + value);
}
if (geprueft != null && adate != null
&& !SuperX.isZukünftigerStandErlaubt) {
if (DateUtils.isDateInFuture((Date) adate)) {
WarningMessage.show(this,
"Das Datum darf nicht in der Zukunft liegen", "SuperX");
geprueft = null;
}
}
if (geprueft != null) // Form Ok
{
WindowUtils.setWaitCursor(this, true);
lblStand.setText("Stand: " + neuerStand);
try {
sichtgruppe.setStand(new Hashtable(),new HashMap(),new FieldContainer(),neuerStand);
}
catch (Exception e)
{
throw new SQLException(e.toString());
}
WindowUtils.setWaitCursor(this, false);
isStandChanged = true;
} else
JOptionPane.showMessageDialog(null, "Ungültige Eingabe!", "SuperX",
JOptionPane.ERROR_MESSAGE);
}
public LinkedList getSelections() {
return selections;
}
private void suchen() {
String such = JOptionPane.showInputDialog(null, "Suche:", "SuperX",
JOptionPane.QUESTION_MESSAGE);
if (such == null || such.length() < 1)
return;
such = such.toLowerCase();
SichtApplet sicht = (SichtApplet) sichtgruppe.getSelectedSicht();
sicht.searchEntries(such);
}
protected void performOk() {
try {
removeMouseListener(sichtgruppe, mouseList);
SichtApplet sicht = (SichtApplet) sichtgruppe
.getSelectedSicht();
if (sicht.getSelectionCount() == 0) {
SelectableItem selectedItem = new SelectableItem("-1", "");
selectedItem.setAllowed(false);
selections.add(selectedItem);
} else
for (int i = 0; i < sicht.getSelectionCount(); i++) {
DefaultMutableTreeNode selNode = (DefaultMutableTreeNode) sicht
.getSelectionPaths()[i].getLastPathComponent();
if (!(selNode.getUserObject() instanceof SelectableItem)) {
performClear();
break;
} else {
SelectableItem selectedItem = (SelectableItem) selNode
.getUserObject();
selections.add(selectedItem);
}
}
} catch (Exception e) {
WarningMessage.show(this, "Fehler\n" + e, "SuperX");
e.printStackTrace();
}
this.setVisible(false);
this.dispose();
}
protected void performCancel() {
removeMouseListener(sichtgruppe, mouseList);
/*
* if (!sichtgruppe.getLastSelectedSicht().getStand()
* .equals(standAmAnfang)) { WindowUtils.setWaitCursor(this, true); try {
* sichtgruppe.setStand(standAmAnfang); } catch (Exception e) {
* WarningMessage.show(this, "Stand konnte nicht geändert werden.\n" +
* e, "SuperX"); e.printStackTrace(); } WindowUtils.setWaitCursor(this,
* false); }
*/
selections.clear();
this.setVisible(false);
this.dispose();
}
protected void performClear() {
removeMouseListener(sichtgruppe, mouseList);
if (sichtgruppe != null)
sichtgruppe.getSelectedSicht().clearSelection();
SelectableItem selectedItem = new SelectableItem("null", "");
selectedItem.setAllowed(false);
selections.add(selectedItem);
this.setVisible(false);
this.dispose();
}
public void configure(String gewünschterStand) {
try {
sichtgruppe.setStand(new Hashtable(),new HashMap(),new FieldContainer(),gewünschterStand);
} catch (Exception e) {
WarningMessage.show(this, "Stand konnte nicht geändert werden.\n"
+ e, "SuperX");
e.printStackTrace();
}
}
private void removeMouseListener(Sichtgruppe sichtgruppe,
MouseListener mouseList) {
for (Iterator it = sichtgruppe.iterator(); it.hasNext();) {
SichtApplet aSicht = (SichtApplet) it.next();
try {
aSicht.removeMouseListener(mouseList);
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void setCursor(boolean b) {
WindowUtils.setWaitCursor(this, b);
}
class StandListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
try {
standAendern();
} catch (Exception e) {
WarningMessage.show(null,
"Stand konnte nicht geändert werden.\n" + e, "SuperX");
e.printStackTrace();
}
}
}
class SuchenListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
suchen();
}
}
class SichtenChangeListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
setCursor(true);
SichtApplet newSicht = (SichtApplet) cbSichten.getSelectedItem();
sichtgruppe.setSelectedSicht(newSicht);
try {
sichtgruppe.makeSureSelectedSichtIsOK(new Hashtable(),new HashMap(),new FieldContainer());
treeScroll.setViewportView(newSicht);
} catch (Exception e1) {
WarningMessage.show(null, "Fehler.\n" + e, "SuperX");
e1.printStackTrace();
}
updateStandVisibility();
setCursor(false);
}
}
/*
* Ausgebaut wegen Alt.Hier Problemen
*/
class SxTreeDlgMouseListener extends MouseAdapter {
SxTreeDlgMouseListener() {
}
public void mousePressed(MouseEvent e) {
if (e.getClickCount() == 2) {
// performOk();
}
}
}
public boolean isStandChanged() {
return isStandChanged;
}
}

562
src/de/superx/applet/SxUtils.java

@ -1,562 +0,0 @@ @@ -1,562 +0,0 @@
package de.superx.applet;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Locale;
import java.util.Properties;
import de.memtext.util.DateUtils;
import de.memtext.util.StringUtils;
import de.memtext.widgets.WarningMessage;
//SxNew mit superx.util.SqlStringUtils vergleichen und diese Klasse
/**
* Die Klasse SxUtils führt String-Operationen zur Vorbereitung von
* Datenbank-Transaktionen durch
*
* @deprecated
* @author R.Behr modified by Marlies Winterstein
* @version 2.0, 5 Jan 1998 - 0.9, 31 July 1998 modified 01-2002
*
*/
public class SxUtils {
public final static int bufSize = 32 * 1024;
public final static String errString = "--ERROR--";
private static String COMM_START = "/*";
private static String COMM_END = "*/";
private static int COMM_START_LEN = COMM_START.length();
private static int COMM_END_LEN = COMM_END.length();
private static String COMMENT1_ANF = "{";
private static String COMMENT1_END = "}";
private static String COMMENT2_ANF = "--";
private static String COMMENT2_END = "\n";
private static String COMMENT3_ANF = "/*";
private static String COMMENT3_END = "*/";
private static String COMMENT1_ANF_MASK = "#K#";
private static String COMMENT1_END_MASK = "#/K";
private static String COMMENT2_ANF_MASK = "#S#";
private static String COMMENT2_END_MASK = "#/S#";
private static String COMMENT3_ANF_MASK = "#*A#";
private static String COMMENT3_END_MASK = "#*E#";
private static String PREV_POS = ">>";
private static String PREV_POS_MASK = ">#>";
private static String NEXT_POS = "<<";
private static String NEXT_POS_MASK = "<#<";
private static String SELECT_DELIMITER = ";";
private static String SELECT_DELIMITER_MASK = "^";
private static String STR_DELIMITER1 = "\"";
private static String STR_DELIMITER1_MASK = "#s1#";
private static String STR_DELIMITER2 = "'";
private static String STR_DELIMITER2_MASK = "#s2#";
private static StringBuffer buffer;
private static String prev_str;
static {
buffer = new StringBuffer(bufSize);
}
public synchronized static void setFieldDelimiter(String field_start,
String field_end) {
if (field_start != null) {
if (field_start.length() == 0)
NEXT_POS = "";
else
NEXT_POS = field_start.substring(0, field_start.length() - 1);
}
if (field_end != null) {
if (field_end.length() == 0)
PREV_POS = "";
else
PREV_POS = field_end.substring(0, field_end.length() - 1);
}
}
public static String getFieldPrefix() {
return new String(NEXT_POS);
}
public static String getFieldSuffix() {
return new String(PREV_POS);
}
public synchronized static void setComment(String comm_start,
String comm_end) {
if (comm_start != null) {
COMM_START = comm_start;
COMM_START_LEN = comm_start.length();
}
if (comm_end != null) {
COMM_END = comm_end;
COMM_END_LEN = comm_end.length();
}
}
private static String noappletout(String sql_str) {
while (sql_str != null && sql_str.indexOf("--notinapplet") > -1) {
int pos = sql_str.indexOf("--notinapplet");
String prev = sql_str.substring(0, pos);
if (prev.lastIndexOf("/*") == -1)
throw new IllegalStateException(
"--notinapplet muss eingeschlossen sein von /* */, nicht "
+ sql_str);
prev = prev.substring(0, prev.lastIndexOf("/*") - 1);
if (sql_str.indexOf(("*/"), pos) == -1)
throw new IllegalStateException(
"--notinapplet muss eingeschlossen sein von /* */, nicht "
+ sql_str);
String post = sql_str.substring(sql_str.indexOf(("*/"), pos) + 2);
sql_str = prev + "\n" + post;
}
return sql_str;
}
static synchronized String generateSQL(SxForm sxform, String sqlStatement) {
Object obj = null;
sqlStatement = noappletout(sqlStatement);
sqlStatement = replace(sqlStatement, "<<erlaubt>>",
sxform.isErlaubt() ? "1" : "0");
Hashtable hashtable = sxform.getMap();
for (Enumeration enumeration = hashtable.keys(); enumeration
.hasMoreElements();) {
String fieldname = (String) enumeration.nextElement();
if (fieldname.startsWith("F_")) {
SxField sxField = sxform.getField(fieldname);
String fieldKey = sxform.getFieldKey("F_"
+ fieldname.substring(2));
//kommt was anderes raus : //fieldKey =
// sxField.getKey().toString();
if (fieldKey != null) {
sqlStatement = replace(sqlStatement, getFieldPrefix()
+ fieldname.substring(2) + getFieldSuffix(),
fieldKey);
}
if (sxField.hasSichten()) {
SichtApplet sicht = sxField.getSelectedSicht();
sqlStatement = replace(sqlStatement, "<<" + sicht.getArt()
+ ">>", sicht.getId().toString());
//z.B. beim ersetzen von <<abgebende Institution-Sicht>>
// und <<empfangende Institution-Sicht>>
//wäre sonst beides <<Organigramm-Sicht>>
sqlStatement = replace(sqlStatement, "<<"
+ sxField.getName().substring(2) + "-Sicht>>",
sicht.getId().toString());
String sx_db = (String) SxDefaults.getPropertyValue("SxDB");
java.util.Date date = null;
try {
date = DateUtils.parse(sicht.getStand());
} catch (ParseException e) {
e.printStackTrace();
WarningMessage
.show(
null,
"Datum "
+ sicht.getStand()
+ " der Sicht konnte nicht interpretiert werden",
"SuperX");
}
String replaceStr = null;
if (sx_db.equals("Postgres"))
replaceStr = "date_val('"
+ DateUtils.formatGerman(date) + "')";
else
replaceStr = "date('" + DateUtils.formatGerman(date)
+ "')";
String search = "<<" + sicht.getArt()
+ "Stand>>";
sqlStatement = replace(sqlStatement, search, replaceStr);
if (sicht.getArt() != null
&& sicht.getArt().endsWith("Sicht")) {
search = "<<"
+ StringUtils.removeFromEnd(sicht.getArt(),
"Sicht", true) + "Stand>>";
sqlStatement = replace(sqlStatement, search, replaceStr);
}
search = "<<" + sxField.getName().substring(2) + "-Stand>>";
sqlStatement = replace(sqlStatement, search, replaceStr);
}
}
}
String sx_db = (String) SxDefaults.getPropertyValue("SxDB");
String replaceStr = "IDS";
if (sx_db.equals("Postgres"))
replaceStr = "PG";
sqlStatement = sqlStatement.replaceAll("<<DATABASE_ABBR>>", replaceStr);
// falls jetzt noch Organigramm-Stand übrig, nicht durch Sicht ersetzt,
// also today()
sqlStatement = sqlStatement.replaceAll("<<Organigramm-Stand>>",
"today()");
//MB 07/2010 macht Probleme bei Freemarker hashes
// MB 10/2013 wieder aktiviert, bei {" drin lassen für Hashes
sqlStatement = deleteComment(sqlStatement, "{", "}");
sqlStatement = deleteComment(sqlStatement, "/*", "*/");
sqlStatement = deleteComment(sqlStatement, "--", "\n");
int i = 1;
return sqlStatement;
}
/**
* Kommentare werden gelöscht Für FreeMarker ist es problematisch dass {...}
* als Kommentar gelöscht wird, weil Variablen so definiert werden
* ${varname}. Änderung der Methode, dass {...} nur gelöscht wird, wenn das
* vorherige Zeichen kein $ ist
*
* @param str
* @param comm_start_str
* @param comm_end_str
* @deprecated original in SqlStringUtils
* @return
*/
private static String deleteComment(String str, String comm_start_str,
String comm_end_str) {
String search_str = comm_start_str;
int comm_end = -1;
int pos = -1;
int offset = 0;
int len = str.length();
int search_len = search_str.length();
StringBuffer lbuffer = new StringBuffer();
while (offset < len) {
pos = str.indexOf(search_str, offset);
if (pos != -1) {
if (pos > 0 && comm_start_str.equals("{")
&& (str.charAt(pos - 1) == '$'
//MB 16.10.13 folgendes Zeichen nicht " das sorgt dafür das Hashes erkannt bleiben
||str.charAt(pos+1)=='"')
) {
lbuffer.append(str.substring(offset, pos + 1));
offset = pos + 1;
continue;
}
prev_str = str.substring(offset, pos);
comm_end = str.indexOf(comm_end_str, pos + search_len);
//wenn kein Kommentar-Ende gefunden
//wird String Ende das Kommentar-Ende sein
if (comm_end == -1)
comm_end = str.length() - 1;
lbuffer.append(prev_str);
offset = comm_end + comm_end_str.length();
} else {
lbuffer.append(str.substring(offset, len));
offset = len;
}
}
return lbuffer.toString();
}
public synchronized static String replace(String str, String search_str,
String replace_str) {
String return_str;
boolean delete_comment = false;
int pos = -1;
int offset = 0;
int len = str.length();
int search_len = search_str.length();
int comm_start = -1;
int comm_end = -1;
int prev_pos = -1;
int next_pos = -1;
int mode = -1;
// mode: 0 = kein Kommentar,
// 1 = Kommentar loeschen mit Ersetzung,
// 2 = Loeschen von COMM_START bis COMM_END
try {
delete_comment = replace_str.equals("");
while (offset < len) {
mode = -1;
if ((pos = str.indexOf(search_str, offset)) != -1) {
prev_str = str.substring(offset, pos);
comm_start = prev_str.lastIndexOf(COMM_START);
prev_pos = prev_str.lastIndexOf(PREV_POS);
comm_end = str.indexOf(COMM_END, pos + search_len);
next_pos = str.indexOf(NEXT_POS, pos + search_len);
if (comm_start >= 0 && prev_pos >= 0) // kein Kommentar
if (comm_start < prev_pos)
comm_start = -1;
if (comm_end >= 0 && next_pos >= 0) // kein Kommentar
if (comm_end > next_pos)
comm_end = -1;
if (comm_start != -1 && comm_end != -1 && comm_start <= pos
&& comm_end >= pos) {
if (delete_comment) // keine Ersetzung,
mode = 2; // Loeschen von '/*' - '*/'
else
mode = 1;
} else
mode = 0;
switch (mode) {
case 0: {
buffer.append(prev_str);
buffer.append(replace_str);
offset = pos + search_len;
break;
}
case 1: {
buffer.append(prev_str.substring(0, comm_start));
buffer.append(prev_str.substring(comm_start
+ COMM_START_LEN));
buffer.append(replace_str);
buffer
.append(str.substring(pos + search_len,
comm_end));
offset = comm_end + COMM_END_LEN;
break;
}
case 2: {
buffer.append(prev_str.substring(0, comm_start));
offset = comm_end + COMM_END_LEN;
break;
}
default:
throw new Exception(errString);
}
} else {
buffer.append(str.substring(offset, len));
offset = len;
}
}
} catch (Exception e) {
buffer.append(errString);
buffer.append(search_str);
}
return_str = buffer.toString();
buffer.setLength(0);
return return_str;
}
public synchronized static String replaceString(String str,
String search_str, String replace_str) {
String zs = "";
int offset = 0;
int pos = str.indexOf(search_str, offset);
while (pos > -1) {
zs += str.substring(offset, pos);
zs += replace_str;
offset = pos + search_str.length();
pos = str.indexOf(search_str, offset);
}
zs += str.substring(offset, str.length());
return zs;
}
public synchronized static String escapeString(String str) {
String escapeString;
str = replaceString(str, PREV_POS, PREV_POS_MASK);
str = replaceString(str, NEXT_POS, NEXT_POS_MASK);
str = replaceString(str, SELECT_DELIMITER, SELECT_DELIMITER_MASK);
str = replaceString(str, STR_DELIMITER1, STR_DELIMITER1_MASK);
str = replaceString(str, STR_DELIMITER2, STR_DELIMITER2_MASK);
str = replaceString(str, COMMENT1_ANF, COMMENT1_ANF_MASK);
str = replaceString(str, COMMENT2_ANF, COMMENT2_ANF_MASK);
str = replaceString(str, COMMENT3_ANF, COMMENT3_ANF_MASK);
str = replaceString(str, COMMENT1_END, COMMENT1_END_MASK);
//str=replaceString(str,COMMENT2_END,COMMENT2_END_MASK);
str = replaceString(str, COMMENT3_END, COMMENT3_END_MASK);
escapeString = str;
return escapeString;
}
public synchronized static String unescapeString(String str) {
String unescapeString;
str = replaceString(str, PREV_POS_MASK, PREV_POS);
str = replaceString(str, NEXT_POS_MASK, NEXT_POS);
//str=replaceString(str,SELECT_DELIMITER_MASK, SELECT_DELIMITER);
str = replaceString(str, STR_DELIMITER1_MASK, STR_DELIMITER1);
str = replaceString(str, STR_DELIMITER2_MASK, "\\'");
//STR_DELIMITER2);
str = replaceString(str, COMMENT1_ANF_MASK, COMMENT1_ANF);
str = replaceString(str, COMMENT2_ANF_MASK, COMMENT2_ANF);
str = replaceString(str, COMMENT3_ANF_MASK, COMMENT3_ANF);
str = replaceString(str, COMMENT1_END_MASK, COMMENT1_END);
str = replaceString(str, COMMENT3_END_MASK, COMMENT3_END);
unescapeString = str;
return unescapeString;
}
public synchronized static String escapeSpecialChars(String str) {
String escapeSpecialChars;
str = replaceString(str, SELECT_DELIMITER, "\\" + SELECT_DELIMITER);
str = replaceString(str, STR_DELIMITER1, "\\" + STR_DELIMITER1);
str = replaceString(str, STR_DELIMITER2, "\\" + STR_DELIMITER2);
//str=replaceString(str,"\\","\\\\");
//str=replaceString(str,"%","\\%");
escapeSpecialChars = str;
return escapeSpecialChars;
}
public synchronized static String getValueAsString(Object value) {
String field_type = "";
String f_wert = "";
String fehler = "";
try {
if ((value instanceof java.sql.Date)) {
f_wert = ""
+ DateFormat.getDateInstance(DateFormat.MEDIUM,
Locale.GERMANY).format(value);
//System.out.println(f_wert);
} else {
if (value instanceof java.sql.Timestamp) {
//System.out.println(value.toString());
f_wert = ""
+ DateFormat.getDateTimeInstance(DateFormat.MEDIUM,
DateFormat.MEDIUM, Locale.GERMANY).format(
value);
} else {
if (value instanceof java.sql.Time)
f_wert = ""
+ DateFormat.getTimeInstance(DateFormat.MEDIUM,
Locale.GERMANY).format(value);
else
//default:
f_wert = value.toString();
}
}
} catch (Exception e) {
fehler = e.toString();
if (fehler.equals("java.lang.NullPointerException"))
f_wert = "";
else
f_wert = "Feldtyp unbekannt:" + fehler;
}
return f_wert;
}
/*
* public synchronized static String getRelationString (String feldart,
* String relation, String attribut) { String stmt=relation; if
* (stmt.startsWith (" < <SQL>>")) { stmt = stmt.substring (7); }
*
* if(attribut.trim().equals("")==false) { if (attribut.indexOf (',') == -1)
* attribut = "tid, " + attribut; stmt = "select " + attribut + " from " +
* relation + " order by 2"; }
*
* if (feldart.equals("4")) { //Hier fehlt noch userrechte und
* lehre-Einschränkung stmt = "SELECT organigramm.parent,
* organigramm.key_apnr, organigramm.name FROM organigramm WHERE
* gueltig_seit <now() And gueltig_bis>now() ORDER BY organigramm.name;"; }
* if (feldart.equals("6") ) { //6-Institutionsdialog für Lehreinheiten stmt =
* "SELECT organigramm.parent, organigramm.key_apnr, organigramm.name FROM
* organigramm WHERE gueltig_seit <now() And gueltig_bis>now() ORDER BY
* organigramm.name;"; } if (feldart.equals("7") ) { //7-Institutionsdialog
* für Lehreinheiten ohne Einschr. Userrechte stmt = "SELECT
* organigramm.parent, organigramm.key_apnr, organigramm.name FROM
* organigramm WHERE gueltig_seit <now() And gueltig_bis>now() ORDER BY
* organigramm.name;"; } String RelationString=stmt; return RelationString; }
*/
public static void main(String args[]) {
System.out
.println(noappletout("11764^Projekt^4^0^0^100^300^1^char^4^0^1^<<SQL>> /* execute procedure sp_user_orga_child(<<UserID>>,mdy (1, 1,year(<<Organigramm-Stand>>)),<<Organigramm-Sicht>>,<<Institution>>, <<erlaubt>>); --notinxmlfrontend */ /* execute procedure sp_user_orga(<<UserID>>,mdy (1, 1,year<<Organigramm-Stand>>)),<<Organigramm-Sicht>>); --notinapplet */ select distinct fb, fb || "
+ " || ktobez from mbs_projekte_konto where 1=1 and inst_nr in (select ch110_institut from tmp_ch110_institut) /* and dr in (<<Deckungsring>>) */ /* and jahr = <<Haushaltsjahr>> */ /* and kap in (<<Kapitel>>) */ order by 2;^ ^^"));
System.exit(1);
String sql_str = null;
String search_str = null;
String replace_str = null;
Properties props = new Properties();
if (args.length != 2) {
System.err.println("Usage: <filename> <propertyfile>");
System.exit(1);
}
String filename = "/" + args[0];
String propname = "/" + args[1];
try {
byte[] buf = new byte[bufSize];
byte[] data = new byte[bufSize];
int read_len = 0, data_len = 0;
InputStream is = props.getClass().getResourceAsStream(filename);
if (is == null) {
System.err.println("Resource '" + filename + "' not found");
System.exit(1);
}
while (read_len != -1) {
read_len = is.read(buf, 0, buf.length);
if (read_len != -1)
data_len = read_len;
}
is.close();
data = new byte[data_len];
System.arraycopy(buf, 0, data, 0, data_len);
sql_str = new String(data);
is = props.getClass().getResourceAsStream(propname);
if (is == null) {
System.err.println("Resource '" + propname + "' not found");
System.exit(1);
}
props.load(is);
is.close();
Enumeration en = props.propertyNames();
String key;
String value;
System.err.println("sql ... ");
while (en.hasMoreElements()) {
key = (String) en.nextElement();
value = (String) props.getProperty(key);
key = "<<" + key + ">>";
System.err.println("Key: " + key + " = " + value);
sql_str = SxUtils.replace(sql_str, key, value);
}
//MB 07/2010 macht Probleme bei Freemarker hashes
// sql_str = SxUtils.deleteComment(sql_str, "{", "}");
sql_str = SxUtils.deleteComment(sql_str, "--", "\n");
sql_str = SxUtils.deleteComment(sql_str, "/*", "*/");
} catch (FileNotFoundException e) {
System.err.println(e);
System.exit(1);
} catch (SecurityException e) {
System.err.println(e);
System.exit(1);
} catch (IOException e) {
System.err.println(e);
System.exit(1);
}
System.err.println("done");
}
}

28
src/de/superx/applet/SxWaitCursor.java

@ -1,28 +0,0 @@ @@ -1,28 +0,0 @@
package de.superx.applet;
import java.awt.Container;
import java.awt.Cursor;
import javax.swing.JComponent;
/**
* Den Cursor einer Komponente auf WAIT bzw. DEFAULT setzen.
*
* @version 1.0
* @author Rainer Behr
*/
public class SxWaitCursor
{
public static void set(JComponent comp, boolean isWait)
{
Container toplevel = comp.getTopLevelAncestor ();
if (toplevel != null)
{
if (isWait)
toplevel.setCursor (new Cursor (Cursor.WAIT_CURSOR));
else
toplevel.setCursor (new Cursor (Cursor.DEFAULT_CURSOR));
}
}
}

9
src/de/superx/bin/FMParser.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
package de.superx.bin;
import static de.superx.servlet.SxSQL_Server.DEFAULT_MANDANTEN_ID;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
@ -46,7 +46,8 @@ public class FMParser extends TemplateProcessor { @@ -46,7 +46,8 @@ public class FMParser extends TemplateProcessor {
private static String sqlDialect;
FMParser() {
inServlet = true;
super(DEFAULT_MANDANTEN_ID);
}
@ -87,12 +88,12 @@ public class FMParser extends TemplateProcessor { @@ -87,12 +88,12 @@ public class FMParser extends TemplateProcessor {
"connectionPassword");
stm = con.createStatement();
if(SqlStringUtils.tableExists(con,"fm_templates",super.mandantid))
if(SqlStringUtils.tableExists(con,"fm_templates",DEFAULT_MANDANTEN_ID))
{
setTemplates(readFromDb("select trim(both from id),content from fm_templates"));
repositoryToMap(readFromDb(REPOSITORY_SELECT), repositoryMap);
}
if(SqlStringUtils.tableExists(con,"konstanten",super.mandantid))
if(SqlStringUtils.tableExists(con,"konstanten",DEFAULT_MANDANTEN_ID))
{
SxResultSet rs = readFromDb("select trim(both from beschreibung),apnr from konstanten");
for (Iterator it = rs.iterator(); it.hasNext();) {

4
src/de/superx/common/StandaloneSicht.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
package de.superx.common;
import static de.superx.servlet.SxSQL_Server.DEFAULT_MANDANTEN_ID;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
@ -92,7 +92,7 @@ public class StandaloneSicht extends AbstractSicht { @@ -92,7 +92,7 @@ public class StandaloneSicht extends AbstractSicht {
public String dynmicSichtFMParsing(HashMap map,
FieldContainer individualFields, String sql)
throws TemplateException, IOException, SQLException {
sql = new TemplateProcessor().process("Sicht "+getName_intern()+" "+sql, sql, map, sqlDialect);
sql = new TemplateProcessor(DEFAULT_MANDANTEN_ID).process("Sicht "+getName_intern()+" "+sql, sql, map, sqlDialect);
return sql;
}

960
src/de/superx/common/TemplateProcessor.java

@ -1,15 +1,22 @@ @@ -1,15 +1,22 @@
package de.superx.common;
import static de.superx.servlet.SxSQL_Server.DEFAULT_MANDANTEN_ID;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
@ -19,17 +26,16 @@ import org.xml.sax.SAXException; @@ -19,17 +26,16 @@ import org.xml.sax.SAXException;
import de.memtext.baseobjects.coll.IdObjectSet;
import de.memtext.util.NumberUtils;
import de.memtext.util.XMLUtils;
import de.superx.applet.SxSQL;
import de.superx.bin.fm.EtlStarter;
import de.superx.util.SqlStringUtils;
import freemarker.cache.StringTemplateLoader;
import freemarker.cache.StringTemplateSource;
import freemarker.template.Configuration;
import freemarker.template.SimpleHash;
import freemarker.template.SimpleScalar;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateHashModel;
import freemarker.template.TemplateMethodModel;
import freemarker.template.TemplateMethodModelEx;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelException;
import freemarker.template.TemplateSequenceModel;
@ -39,495 +45,465 @@ import freemarker.template.TemplateSequenceModel; @@ -39,495 +45,465 @@ import freemarker.template.TemplateSequenceModel;
*/
public class TemplateProcessor {
private final Configuration cfg = new Configuration();
private final HashMap stringTemplates = new HashMap();
// wird für Lieferung ans Applet gebraucht
public SxResultSet rawFmTemplates;
protected HashMap repositoryMap = new HashMap();
protected boolean inServlet = false;
private List fmTemplateNames = new LinkedList();
protected String mandantid;
protected Connection con = null;
public static final String REPOSITORY_SELECT = "select trim(both from id) as id,caption,content,gueltig_seit,gueltig_bis,comment,sort1,sort2,sort3 from sx_repository where aktiv=1";
// static initializer for class
static {
try {
freemarker.log.Logger
.selectLoggerLibrary(freemarker.log.Logger.LIBRARY_NONE);
XMLUtils.getExceptionHandler().setExitWanted(false);
} catch (Exception e) {
System.out.println("FreeMarker warning: " + e);
}
}
public TemplateProcessor() {
cfg.setTemplateLoader(new StringTemplateLoader(stringTemplates));
try {
// die Formatierungseinstellung wird u.a. für sortnr gebraucht,
// sonst erscheint z.B. 1000 als 1.000
cfg.setSetting("number_format", "###########.####");
cfg.setSharedVariable("etl", new EtlStarter());
} catch (TemplateException e) {
System.out.println("FreeMarker warning: " + e);
e.printStackTrace();
}
}
public void setRepositoryMap(HashMap repository) {
this.repositoryMap = repository;
}
public void add(String id, StringTemplateSource ts) {
stringTemplates.put(id, ts);
}
public void clear() {
stringTemplates.clear();
fmTemplateNames.clear();
}
/**
* synchronized, damit bei Mandantenfähigkeit nicht zufällig praktisch
* gleichzeitig, 1 Thread ein Template für 17020 hinterlegt, dann ein 2.
* Thread ebenfalls für 17020 (und damit den Eintrag des ersten
* überschreibt) und der erste Thread dann fälschlicherweise den Eintrag vom
* 2. bekommt CFG.setTemplateLoader(new
* StringTemplateLoader(stringTemplates));
*
* trotz stringTemplates - sind Probleme aufgetaucht, wenn schnell
* hintereinander z.b. 3x mal xil_proplist als templateName kam (Makro
* eigentlich nicht sekundengenau gleichzeitig) als workaround wird
* zufällige Nummer angehängt
*
* @param templateName
* @param template
* @return
* @throws IOException
*/
protected synchronized Template buildTemplateObject(String templateName,
String template) throws IOException {
Template t = null;
templateName = cleanName(templateName);
templateName += "-rnd:" + NumberUtils.getRandomInt(1000000000);
stringTemplates.put(templateName, new StringTemplateSource(template));
try {
t = cfg.getTemplate(templateName);
// damit nicht fälschlicherweise nochmal ausgelesen wird
stringTemplates.remove(templateName);
} catch (freemarker.core.ParseException e) {
throw new RuntimeException(
"FreeMarker-Parsing fehlgeschlagen - "
+ e.getMessage()
+ "DETAILS: Die Zeilennummer bezieht sich auf folgende Vorlage\n(Masken select_stmt nach SuperX-Verarbeitung mit generateSql)\n"
+ template);
}
return t;
}
/**
* Wird vom SuperXDBServlet aufgerufen und von der anderen process Methode
*
* @param fmSql
* @param hmap
* @return
* @throws TemplateException
* @throws IOException
* @throws SQLException
*/
public String process(String templateName, String fmSql, HashMap hmap,
String sqldialect) throws TemplateException, IOException,
SQLException {
StringBuffer b = new StringBuffer();
for (Iterator it = fmTemplateNames.iterator(); it.hasNext();) {
b.append("<#include \"" + it.next() + "\"/>\n");
}
fmSql = b.toString() + fmSql;
templateName = cleanName(templateName);
hmap.put("SQLdialect", sqldialect);
hmap.putAll(repositoryMap);
if (fmSql.indexOf("<sqlvars>") > -1) {
addSqlVars(hmap, fmSql, sqldialect);
fmSql = removeSqlVars(fmSql);
}
Writer out = new StringWriter();
Template t = buildTemplateObject(templateName, fmSql);
t.process(hmap, out);
out.close();
return out.toString();
}
private synchronized void addSqlVars(HashMap hmap, String fmSql,
String sqldialect) throws SQLException, TemplateException,
IOException {
int i = fmSql.indexOf("<sqlvars>");
int i2 = fmSql.indexOf("</sqlvars>");
String sqlvarsxml = fmSql.substring(i, i2 + 10);
// Template t = buildTemplateObject("sqlvars" + "-rnd:"
// + NumberUtils.getRandomInt(1000000000), sqlvarsxml);
// Writer out = new StringWriter();
// t.process(hmap, out);
// out.close();
// sqlvarsxml = out.toString();
Document doc=null;
try
{
doc = XMLUtils.buildDocumentFromStringWithException(sqlvarsxml, false);
}
catch (SAXException e)
{
String msg="Sqlvars konnten nicht zu XML-Dokument verarbeitet werden, Syntax checken ";
System.out.println(msg);
System.out.println(sqlvarsxml);
e.printStackTrace();
throw new SQLException(msg+"vergl. catalina.out ");
}
NodeList list = doc.getElementsByTagName("sqlvar");
for (i = 0; i < list.getLength(); i++) {
Node n = list.item(i);
String varname = XMLUtils.getAttribValue(n, "name");
boolean isHash = XMLUtils.hasAttrib(n, "type")
&& (XMLUtils.getAttribValue(n, "type").equalsIgnoreCase(
"hash") || XMLUtils.getAttribValue(n, "type")
.equalsIgnoreCase("hashsequence"));
boolean isHashSequence = XMLUtils.hasAttrib(n, "type")
&& XMLUtils.getAttribValue(n, "type").equalsIgnoreCase(
"hashsequence");
boolean isSicht = XMLUtils.hasAttrib(n, "type")
&& XMLUtils.getAttribValue(n, "type").equalsIgnoreCase(
"sicht");
String name_intern = "";
boolean isSichtSequence=XMLUtils.hasAttrib(n, "type")
&& XMLUtils.getAttribValue(n, "type").equalsIgnoreCase(
"sichtsequence");
boolean isString=XMLUtils.hasAttrib(n, "type")
&& XMLUtils.getAttribValue(n, "type").equalsIgnoreCase(
"string");
if (isSichtSequence)
{
String sql = XMLUtils.getTheValue(n);
SxResultSet roh = new SxResultSet();
if (inServlet)
roh = readFromDb(sql);
else
roh = readFromDbApplet(sql);
FMListe liste = new FMListe();
for (Iterator it = roh.iterator(); it.hasNext();) {
SxResultRow zeile = (SxResultRow) it.next();
String gewuenschterStand = "today";
if (XMLUtils.hasAttrib(n, "stand"))
gewuenschterStand = XMLUtils.getAttribValue(n, "stand");
liste.add(addSqlVarSicht(hmap, "nur_ein_dummy", (String)zeile.get(0), gewuenschterStand));
}
hmap.put(varname, liste);
}
else
if (isSicht) {
name_intern = XMLUtils.getAttribValue(n, "name_intern");
String gewuenschterStand = "today";
if (XMLUtils.hasAttrib(n, "stand"))
gewuenschterStand = XMLUtils.getAttribValue(n, "stand");
addSqlVarSicht(hmap, varname, name_intern, gewuenschterStand);
} else {
String sql = XMLUtils.getTheValue(n);
if(SqlStringUtils.tableExists(con, "sx_repository",mandantid))
sql="<#include \"SuperX_general\"/><#include \"SQL_lingua_franca\"/>"+sql;
sql = process(
"sqlvar " + varname
+ NumberUtils.getRandomInt(99999999),
sql, hmap, sqldialect);
if (isString)
{
hmap.put(varname, sql);
}
else
{
SxResultSet roh = new SxResultSet();
if (inServlet)
roh = readFromDb(sql);
else
roh = readFromDbApplet(sql);
FMListe liste = new FMListe();
boolean isSelectableItem = false;
Object entry = "";
int rowcount = roh.size();
for (Iterator it = roh.iterator(); it.hasNext();) {
SxResultRow zeile = (SxResultRow) it.next();
if (isHash) {
SxHash h = new SxHash();
for (int j = 0; j < zeile.size(); j++) {
h.put(roh.getColumnName(j), zeile.get(j));
}
if (rowcount == 1) {
entry = h;
}
liste.add(h);
} else {
entry = zeile.get(0);
if (entry == null)
entry = "";
String nam = "";
if (zeile.size() > 1) {
nam = (String) zeile.get(1);
isSelectableItem = true;
}
SelectableItem item = new SelectableItem(entry, nam);
if (zeile.size() > 2) {
item.setStrukturInfo(zeile.get(2));
}
if (zeile.size() > 3) {
item.setStrukturInfo(zeile.get(3));
}
;
liste.add(new SelectableItemNode(item));
}
}
if (isHashSequence || (isHash && rowcount > 1)
|| isSelectableItem) {
hmap.put(varname, liste);
liste = null;
} else {
hmap.put(varname, entry);
entry = null;
}
}
}
}
}
/**
* Konkret umgegesetzt in bin/FMParser
* @param hmap
* @param varname
* @param name_intern
* @param gewuenschterStand
* @return
* @throws SQLException
*/
protected StandaloneSicht addSqlVarSicht(HashMap hmap, String varname,
String name_intern, String gewuenschterStand) throws SQLException {
throw new IllegalStateException(
"sqlvar mit type Sicht wird hier nicht unterstützt");
}
protected SxResultSet readFromDb(String sql) throws SQLException {
return new SxResultSet();
}
private String removeSqlVars(String fmSql) {
int i = fmSql.indexOf("<sqlvars>");
int i2 = fmSql.indexOf("</sqlvars>");
return fmSql.substring(0, i) + fmSql.substring(i2 + 10, fmSql.length());
}
protected String cleanName(String templateName) {
// es dürfen keine nach Dir-Trennzeichen aussehenden Bezeichnungen
// vorkommen
if (templateName.indexOf("/") > -1)
templateName = templateName.replace('/', ' ');
if (templateName.indexOf("\\") > -1)
templateName = templateName.replace('\\', ' ');
return templateName;
}
public static void main(String args[]) {
// addSqlVars(new HashMap(),"<sqlvars><sqlvar name=\"test\">select
// ..</sqlvar><sqlvar name=\"test2\">select 2 from
// test</sqlvar></sqlvars>");
}
public void setTemplates(SxResultSet rawFmTemplates) {
this.rawFmTemplates = rawFmTemplates;
if (rawFmTemplates == null)
throw new RuntimeException("Keine FreeMarker Templates geliefert");
clear();
for (Iterator it = rawFmTemplates.iterator(); it.hasNext();) {
SxResultRow row = (SxResultRow) it.next();
String name = (String) row.get(0);
fmTemplateNames.add(name);
String content = (String) row.get(1);
add(name, new StringTemplateSource(content));
}
}
protected SxResultSet readFromDbApplet(String sql) throws SQLException {
SxSQL.executeAll(sql);
SxResultSet rs = SxSQL.getResult();
SxSQL.close();
return rs;
}
/**
* Repository INfo in eine Map packen
*
* @param Daten
* nach REPOSITORY_SELECT
* @param map
*/
public static void repositoryToMap(SxResultSet rs, HashMap map) {
IdObjectSet riColls = new IdObjectSet();
for (Iterator it = rs.iterator(); it.hasNext();) {
SxResultRow row = (SxResultRow) it.next();
Object id = row.get(0);
String name = (String) row.get(1);
RepositoryItem ri = new RepositoryItem();
ri.setId(id);
ri.setName(name);
ri.setContent((String) row.get(2));
ri.setValidSince((Date) row.get(3));
ri.setValidTill((Date) row.get(4));
ri.setComment((String) row.get(5));
// TODO sortnr
RepositoryItemCollection riColl = null;
if (riColls.containsItemWithId(id)) {
// Gibt schon eine Coll - einfach hinzufügen
riColl = (RepositoryItemCollection) riColls.getById(id);
} else {
// gibt noch keine Coll für id neu anlegen
riColl = new RepositoryItemCollection(id);
riColls.add(riColl);
}
riColl.add(ri);
}
for (Iterator it = riColls.iterator(); it.hasNext();) {
RepositoryItemCollection rcoll = (RepositoryItemCollection) it
.next();
map.put(rcoll.getId(), rcoll);
}
}
class FMListe implements TemplateMethodModel, TemplateSequenceModel {
private static final long serialVersionUID = 1L;
private LinkedList liste = new LinkedList();
public void add(Object o) {
liste.add(o);
}
public Object exec(List l) throws TemplateModelException {
Object result = null;
if (l == null)
throw new IllegalArgumentException("keine Argumente übergeben");
String key = "";
if (l.get(0).toString().equalsIgnoreCase("get")) {
if (l.size() < 3)
throw new TemplateModelException(
"Syntax: get,id-column Schlüssel - mindestens 3 Elemente nötig");
String idcolumn = l.get(1).toString();
key = l.get(2).toString();
for (Iterator it = liste.iterator(); it.hasNext();) {
Object o = it.next();
if (o instanceof SxHash) {
SxHash h = (SxHash) o;
if (!h.containsKey(idcolumn))
throw new IllegalArgumentException("idcolumn "
+ idcolumn + " nicht gefunden");
if (h.get(idcolumn).toString().equals(key))
result = h;
}
}
} else if (l.get(0).toString().equalsIgnoreCase("getById")) {
if (l.size() < 2)
throw new TemplateModelException(
"Syntax: getbyId,Schlüssel - mindestens 2 Elemente nötig");
for (Iterator it = liste.iterator(); it.hasNext();) {
Object o = it.next();
if (o instanceof SelectableItem) {
SelectableItem s = (SelectableItem) o;
if (s.getId().toString().equals(key))
result = s;
}
}
} else
throw new IllegalArgumentException(
"nur getItem,Schlüssel implementiert");
if (result == null)
throw new IllegalArgumentException("Element " + key
+ " nicht gefunden in Freemarker hash");
return result;
}
public TemplateModel get(int i) throws TemplateModelException {
Object o = liste.get(i);
TemplateModel result = null;
if (o instanceof SxHash)
result = (SxHash) o;
else
result = new freemarker.template.DefaultObjectWrapper().wrap(o);
return result;
}
public int size() throws TemplateModelException {
return liste.size();
}
}
class SxHash implements TemplateHashModel {
private HashMap map = new HashMap();
public void put(String key, Object value) {
map.put(key, value);
// System.out.println(key+" :" +value);
}
public boolean containsKey(Object key) {
return map.containsKey(key);
}
public TemplateModel get(String key) throws TemplateModelException {
if (!map.containsKey(key))
throw new IllegalArgumentException("Kein attribut " + key
+ " bekannt");
Object val = map.get(key);
// System.out.println("get:" +key+" :" +val);
if (val == null)
val = "";
TemplateModel result = null;
if (val instanceof String)
result = new SimpleScalar(val.toString());
else if (val instanceof java.sql.Date)
result = new freemarker.template.SimpleDate((java.sql.Date) val);
else if (val instanceof java.lang.Number)
result = new freemarker.template.SimpleNumber(
(java.lang.Number) val);
return result;
}
public boolean isEmpty() throws TemplateModelException {
return map.isEmpty();
}
}
private Configuration cfg;
enum SqlVarType {
list,
hashlist,
hash,
hashsequence,
sicht,
sichtsequence,
string,
none
}
// wird für Lieferung ans Applet gebraucht
public SxResultSet rawFmTemplates;
protected HashMap repositoryMap = new HashMap();
protected String mandantenID = DEFAULT_MANDANTEN_ID;
protected Connection con = null;
public static final String REPOSITORY_SELECT = "select trim(both from id) as id,caption,content,gueltig_seit,gueltig_bis,comment,sort1,sort2,sort3 from sx_repository where aktiv=1";
static {
try {
freemarker.log.Logger.selectLoggerLibrary(freemarker.log.Logger.LIBRARY_NONE);
} catch (Exception e) {
System.out.println("FreeMarker warning: " + e);
}
}
public TemplateProcessor(String mandantenID, Connection con) {
this(mandantenID);
this.con = con;
}
public TemplateProcessor(String mandantenID) {
this.mandantenID = mandantenID;
Configuration myCfg = new Configuration(Configuration.VERSION_2_3_21);
myCfg.setTemplateLoader(new StringTemplateLoader());
try {
// die Formatierungseinstellung wird u.a. für sortnr gebraucht,
// sonst erscheint z.B. 1000 als 1.000
myCfg.setSetting("number_format", "###########.####");
// TODO myCfg.setSharedVariable("etl", new EtlStarter(mandantenID));
} catch (TemplateException e) {
System.out.println("FreeMarker warning: " + e);
e.printStackTrace();
}
this.cfg = myCfg;
}
public void setRepositoryMap(HashMap repository) {
this.repositoryMap = repository;
}
public void add(String id, String ts) {
((StringTemplateLoader) cfg.getTemplateLoader()).putTemplate(id, ts);
}
/**
* synchronized, damit bei Mandantenfähigkeit nicht zufällig praktisch
* gleichzeitig, 1 Thread ein Template für 17020 hinterlegt, dann ein 2. Thread
* ebenfalls für 17020 (und damit den Eintrag des ersten überschreibt) und der
* erste Thread dann fälschlicherweise den Eintrag vom 2. bekommt
* CFG.setTemplateLoader(new StringTemplateLoader(stringTemplates));
*
* trotz stringTemplates - sind Probleme aufgetaucht, wenn schnell
* hintereinander z.b. 3x mal xil_proplist als templateName kam (Makro
* eigentlich nicht sekundengenau gleichzeitig) als workaround wird zufällige
* Nummer angehängt
*
* @param templateName
* @param template
* @return
* @throws IOException
*/
protected synchronized Template buildTemplateObject(String templateName, String template) throws IOException {
Template t = null;
templateName = cleanName(templateName);
templateName += "-rnd:" + NumberUtils.getRandomInt(1000000000);
// replace all unicode whitespace chars with regular whitespace
// (those can get introduce for example when copy-pasting from html)
// TODO: Right place?
template = template.replaceAll("\\p{javaSpaceChar}", " ");
((StringTemplateLoader) cfg.getTemplateLoader()).putTemplate(templateName, template);
try {
t = cfg.getTemplate(templateName);
// damit nicht fälschlicherweise nochmal ausgelesen wird
cfg.removeTemplateFromCache(templateName);
} catch (freemarker.core.ParseException e) {
throw new RuntimeException("FreeMarker-Parsing fehlgeschlagen - " + e.getMessage()
+ "DETAILS: Die Zeilennummer bezieht sich auf folgende Vorlage\n(Masken select_stmt nach SuperX-Verarbeitung mit generateSql)\n"
+ template);
}
return t;
}
/**
* Wird vom SuperXDBServlet aufgerufen und von der anderen process Methode
*
* @param fmSql
* @param hmap
* @return
* @throws TemplateException
* @throws IOException
* @throws SQLException
*/
public String process(String templateName, String fmSql, HashMap hmap, String sqldialect)
throws TemplateException, IOException, SQLException {
StringBuffer b = new StringBuffer();
fmSql = b.toString() + fmSql;
templateName = cleanName(templateName);
hmap.put("SQLdialect", sqldialect);
hmap.putAll(repositoryMap);
if (fmSql.indexOf("<sqlvars>") > -1) {
addSqlVars(hmap, fmSql, sqldialect);
fmSql = removeSqlVars(fmSql);
}
Writer out = new StringWriter();
Template t = buildTemplateObject(templateName, fmSql);
t.process(hmap, out);
out.close();
return out.toString();
}
private synchronized void addSqlVars(HashMap hmap, String fmSql, String sqldialect)
throws SQLException, TemplateException, IOException {
int i = fmSql.indexOf("<sqlvars>");
int i2 = fmSql.indexOf("</sqlvars>");
String sqlvarsxml = fmSql.substring(i, i2 + 10);
Document doc = null;
try {
doc = XMLUtils.buildDocumentFromStringWithException(sqlvarsxml, false);
} catch (SAXException e) {
String msg = "Sqlvars konnten nicht zu XML-Dokument verarbeitet werden, Syntax checken ";
System.out.println(msg);
System.out.println(sqlvarsxml);
e.printStackTrace();
throw new SQLException(msg + "vergl. catalina.out ");
}
NodeList list = doc.getElementsByTagName("sqlvar");
for (i = 0; i < list.getLength(); i++) {
Node n = list.item(i);
String varname = XMLUtils.getAttribValue(n, "name");
String sql = n.getTextContent();
SqlVarType type = SqlVarType.none;
if ( XMLUtils.hasAttrib(n, "type") ) {
type = SqlVarType.valueOf(XMLUtils.getAttribValue(n, "type").toLowerCase());
}
String name_intern = "";
if (type == SqlVarType.sichtsequence) {
SxResultSet roh = readFromDb(sql);
FMListe liste = new FMListe();
for (Iterator<SxResultRow> it = roh.iterator(); it.hasNext();) {
SxResultRow zeile = it.next();
String gewuenschterStand = "today";
liste.add(addSqlVarSicht(hmap, "nur_ein_dummy", (String) zeile.get(0), gewuenschterStand));
}
hmap.put(varname, liste);
} else if (type == SqlVarType.hashlist) {
List<TemplateHashModel> results = selectFromDb(sql);
hmap.put(varname, results);
} else if (type == SqlVarType.sicht) {
name_intern = XMLUtils.getAttribValue(n, "name_intern");
String gewuenschterStand = "today";
if (XMLUtils.hasAttrib(n, "stand"))
gewuenschterStand = XMLUtils.getAttribValue(n, "stand");
addSqlVarSicht(hmap, varname, name_intern, gewuenschterStand);
} else if (type == SqlVarType.list) {
SxResultSet roh = readFromDb(sql);
List<String> results = new ArrayList<String>();
for (Iterator it = roh.iterator(); it.hasNext();) {
SxResultRow zeile = (SxResultRow) it.next();
results.add((String) zeile.get(0));
}
hmap.put(varname, results);
} else if (type==SqlVarType.string)
{
String resultstring = process("sqlvar " + varname + NumberUtils.getRandomInt(99999999), sql, hmap, sqldialect);
hmap.put(varname, resultstring);
}
else {
if (SqlStringUtils.tableExists(con, "sx_repository", mandantenID)) {
sql = "<#include \"SuperX_general\"/><#include \"SQL_lingua_franca\"/>" + sql;
}
sql = process("sqlvar " + varname + NumberUtils.getRandomInt(99999999), sql, hmap, sqldialect);
SxResultSet roh = readFromDb(sql);
FMListe liste = new FMListe();
boolean isSelectableItem = false;
Object entry = "";
int rowcount = roh.size();
for (Iterator it = roh.iterator(); it.hasNext();) {
SxResultRow zeile = (SxResultRow) it.next();
if (type == SqlVarType.hash || type == SqlVarType.hashsequence) {
SxHash h = new SxHash();
for (int j = 0; j < zeile.size(); j++) {
String key = roh.getColumnName(j).toLowerCase();
Object value = zeile.get(j);
h.put(key, value);
}
if (rowcount == 1) {
entry = h;
}
liste.add(h);
} else {
entry = zeile.get(0);
if (entry == null)
entry = "";
String nam = "";
if (zeile.size() > 1) {
nam = SqlStringUtils.getValueAsString(zeile.get(1));
isSelectableItem = true;
}
SelectableItem item = new SelectableItem(entry, nam);
if (zeile.size() > 2) {
item.setStrukturInfo(zeile.get(2));
}
if (zeile.size() > 3) {
item.setStrukturInfo(zeile.get(3));
}
liste.add(new SelectableItemNode(item));
}
}
if (type == SqlVarType.hashsequence
|| (type == SqlVarType.hash && rowcount > 1) || isSelectableItem) {
hmap.put(varname, liste);
liste = null;
} else {
hmap.put(varname, entry);
entry = null;
}
}
}
}
/**
* Gets the result for sql query and returns it as a list of maps.
* Each map contains one row of the result with the column labels
* as keys (String, lower case!) and the data as values (String).
* @param sql to execute on this.dbHandler
* @return List of Map result of the sql query
* @throws SQLException
*/
protected List<TemplateHashModel> selectFromDb(String sql) throws SQLException {
List<TemplateHashModel> result = new ArrayList<>();
try (Statement st = con.createStatement();
ResultSet res = st.executeQuery(sql)) {
ResultSetMetaData meta = res.getMetaData();
int colCount = meta.getColumnCount();
List<String> colLabels = new ArrayList<>(colCount);
for (int i = 0; i < colCount; i++) {
colLabels.add(meta.getColumnLabel(i + 1));
}
while (res.next()) {
Map<String, String> row = new HashMap<>();
for (String colLabel : colLabels) {
row.put(colLabel, res.getString(colLabel));
}
result.add(new SimpleHash(row));
}
}
return result;
}
/**
* Konkret umgegesetzt in bin/FMParser
*
* @param hmap
* @param varname
* @param name_intern
* @param gewuenschterStand
* @return
* @throws SQLException
*/
protected StandaloneSicht addSqlVarSicht(HashMap hmap, String varname, String name_intern, String gewuenschterStand)
throws SQLException {
throw new IllegalStateException("sqlvar mit type Sicht wird hier nicht unterstützt");
}
protected SxResultSet readFromDb(String sql) throws SQLException {
return new SxResultSet();
}
private String removeSqlVars(String fmSql) {
int i = fmSql.indexOf("<sqlvars>");
int i2 = fmSql.indexOf("</sqlvars>");
return fmSql.substring(0, i) + fmSql.substring(i2 + 10, fmSql.length());
}
protected String cleanName(String templateName) {
// es dürfen keine nach Dir-Trennzeichen aussehenden Bezeichnungen
// vorkommen
if (templateName.indexOf("/") > -1)
templateName = templateName.replace('/', ' ');
if (templateName.indexOf("\\") > -1)
templateName = templateName.replace('\\', ' ');
return templateName;
}
public void setTemplates(SxResultSet rawFmTemplates) {
this.rawFmTemplates = rawFmTemplates;
if (rawFmTemplates == null) {
throw new RuntimeException("Keine FreeMarker Templates geliefert");
}
for (Iterator it = rawFmTemplates.iterator(); it.hasNext();) {
SxResultRow row = (SxResultRow) it.next();
String name = (String) row.get(0);
String content = SqlStringUtils.getValueAsString(row.get(1));
add(name, content);
cfg.addAutoInclude(name);
}
}
/**
* Repository INfo in eine Map packen
*
* @param Daten nach REPOSITORY_SELECT
* @param map
*/
public static void repositoryToMap(SxResultSet rs, HashMap map) {
IdObjectSet riColls = new IdObjectSet();
for (Iterator it = rs.iterator(); it.hasNext();) {
SxResultRow row = (SxResultRow) it.next();
Object id = row.get(0);
String name = (String) row.get(1);
RepositoryItem ri = new RepositoryItem();
ri.setId(id);
ri.setName(name);
ri.setContent(SqlStringUtils.getValueAsString(row.get(2)));
ri.setValidSince((Date) row.get(3));
ri.setValidTill((Date) row.get(4));
ri.setComment(SqlStringUtils.getValueAsString(row.get(5)));
// TODO sortnr
RepositoryItemCollection riColl = null;
if (riColls.containsItemWithId(id)) {
// Gibt schon eine Coll - einfach hinzufügen
riColl = (RepositoryItemCollection) riColls.getById(id);
} else {
// gibt noch keine Coll für id neu anlegen
riColl = new RepositoryItemCollection(id);
riColls.add(riColl);
}
riColl.add(ri);
}
for (Iterator it = riColls.iterator(); it.hasNext();) {
RepositoryItemCollection rcoll = (RepositoryItemCollection) it.next();
map.put(rcoll.getId(), rcoll);
}
}
class FMListe implements TemplateMethodModelEx, TemplateSequenceModel {
private static final long serialVersionUID = 1L;
private LinkedList liste = new LinkedList();
public void add(Object o) {
liste.add(o);
}
public Object exec(List l) throws TemplateModelException {
Object result = null;
if (l == null) {
throw new IllegalArgumentException("keine Argumente übergeben");
}
String key = "";
if (l.get(0).toString().equalsIgnoreCase("get")) {
if (l.size() < 3) {
throw new TemplateModelException("Syntax: get,id-column Schlüssel - mindestens 3 Elemente nötig");
}
String idcolumn = l.get(1).toString();
key = l.get(2).toString();
for (Iterator it = liste.iterator(); it.hasNext();) {
Object o = it.next();
if (o instanceof SxHash) {
SxHash h = (SxHash) o;
if (!h.containsKey(idcolumn))
throw new IllegalArgumentException("idcolumn " + idcolumn + " nicht gefunden");
if (h.get(idcolumn).toString().equals(key))
result = h;
}
}
} else if (l.get(0).toString().equalsIgnoreCase("getById")) {
if (l.size() < 2)
throw new TemplateModelException("Syntax: getbyId,Schlüssel - mindestens 2 Elemente nötig");
for (Iterator it = liste.iterator(); it.hasNext();) {
Object o = it.next();
if (o instanceof SelectableItem) {
SelectableItem s = (SelectableItem) o;
if (s.getId().toString().equals(key))
result = s;
}
}
} else
throw new IllegalArgumentException("nur getItem,Schlüssel implementiert");
if (result == null) {
throw new IllegalArgumentException("Element " + key + " nicht gefunden in Freemarker hash");
}
return result;
}
public TemplateModel get(int i) throws TemplateModelException {
Object o = liste.get(i);
TemplateModel result = null;
if (o instanceof SxHash) {
result = (SxHash) o;
} else {
result = new freemarker.template.DefaultObjectWrapper().wrap(o);
}
return result;
}
public int size() throws TemplateModelException {
return liste.size();
}
}
class SxHash implements TemplateHashModel {
private HashMap map = new HashMap();
public void put(String key, Object value) {
map.put(key, value);
}
public boolean containsKey(Object key) {
return map.containsKey(key);
}
public TemplateModel get(String key) throws TemplateModelException {
if (!map.containsKey(key)) {
throw new IllegalArgumentException("Kein attribut " + key + " bekannt");
}
Object val = map.get(key);
if (val == null)
val = "";
TemplateModel result = null;
if (val instanceof String) {
result = new SimpleScalar(val.toString());
} else if (val instanceof java.sql.Date) {
result = new freemarker.template.SimpleDate((java.sql.Date) val);
} else if (val instanceof java.lang.Number) {
result = new freemarker.template.SimpleNumber((java.lang.Number) val);
} else if (val instanceof Clob) {
result = new SimpleScalar(SqlStringUtils.getValueAsString(val));
}
return result;
}
public boolean isEmpty() throws TemplateModelException {
return map.isEmpty();
}
}
}
// Created on 12.02.2005 at 13:46:05

103
src/de/superx/dbadmin/AbstractCellEditor.java

@ -1,103 +0,0 @@ @@ -1,103 +0,0 @@
package de.superx.dbadmin;
import java.awt.Component;
import java.awt.event.MouseEvent;
import java.util.EventObject;
import javax.swing.JTable;
import javax.swing.JTree;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.event.EventListenerList;
import javax.swing.table.TableCellEditor;
import javax.swing.tree.TreeCellEditor;
public class AbstractCellEditor
implements TableCellEditor, TreeCellEditor {
protected EventListenerList listenerList =
new EventListenerList();
protected Object value;
protected ChangeEvent changeEvent = null;
protected int clickCountToStart = 1;
public Object getCellEditorValue() {
return value;
}
public void setCellEditorValue(Object value) {
this.value = value;
}
public void setClickCountToStart(int count) {
clickCountToStart = count;
}
public int getClickCountToStart() {
return clickCountToStart;
}
public boolean isCellEditable(EventObject anEvent) {
if (anEvent instanceof MouseEvent) {
if (((MouseEvent)anEvent).getClickCount() <
clickCountToStart)
return false;
}
return true;
}
public boolean shouldSelectCell(EventObject anEvent) {
if (this.isCellEditable(anEvent)) {
if (anEvent == null ||
((MouseEvent)anEvent).getClickCount() >=
clickCountToStart)
return true;
}
return false;
}
public boolean stopCellEditing() {
fireEditingStopped();
return true;
}
public void cancelCellEditing() {
fireEditingCanceled();
}
public void addCellEditorListener(CellEditorListener l) {
listenerList.add(CellEditorListener.class, l);
}
public void removeCellEditorListener(CellEditorListener l) {
listenerList.remove(CellEditorListener.class, l);
}
public Component getTreeCellEditorComponent(
JTree tree, Object value,
boolean isSelected,
boolean expanded,
boolean leaf, int row) {
return null;
}
public Component getTableCellEditorComponent(
JTable table, Object value,
boolean isSelected,
int row, int column) {
return null;
}
protected void fireEditingStopped() {
Object[] listeners = listenerList.getListenerList();
for (int i = listeners.length-2; i>=0; i-=2) {
if (listeners[i]==CellEditorListener.class) {
if (changeEvent == null)
changeEvent = new ChangeEvent(this);
((CellEditorListener)
listeners[i+1]).editingStopped(changeEvent);
}
}
}
protected void fireEditingCanceled() {
Object[] listeners = listenerList.getListenerList();
for (int i = listeners.length-2; i>=0; i-=2) {
if (listeners[i]==CellEditorListener.class) {
if (changeEvent == null)
changeEvent = new ChangeEvent(this);
((CellEditorListener)
listeners[i+1]).editingCanceled(changeEvent);
}
}
}
}

1139
src/de/superx/dbadmin/AdminOrga.java

File diff suppressed because it is too large Load Diff

47
src/de/superx/dbadmin/AdminOrgaMouseListener.java

@ -1,47 +0,0 @@ @@ -1,47 +0,0 @@
package de.superx.dbadmin;
/**
* Insert the type's description here. Creation date: (13.09.01 18:26:13)
*
* @author: Administrator
*/
import java.awt.Frame;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Vector;
import javax.swing.JScrollPane;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
public class AdminOrgaMouseListener extends MouseAdapter {
AdminOrga derDialog;
MBDragTree derTree;
JScrollPane anzeige;
Vector merkungültig;
AdminOrgaMouseListener(AdminOrga dlg, MBDragTree ltree, Vector lmerkungültig) {
super();
derDialog = dlg;
derTree = ltree;
merkungültig = lmerkungültig;
// anzeige=lanzeige;
}
public void mousePressed(MouseEvent e) {
if (e.getClickCount() == 2) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) derTree
.getLastSelectedPathComponent();
if (node.getUserObject() instanceof OrgaEintrag2) {
OrgaBearbDialog dlg2 = new OrgaBearbDialog(
(Frame)derDialog.getTopLevelAncestor(), node, merkungültig);
DefaultTreeModel dtm = (DefaultTreeModel) derTree.getModel();
dtm.nodeChanged(node);
}
}
}
}

36
src/de/superx/dbadmin/AdminOrgaPrintRenderer.java

@ -1,36 +0,0 @@ @@ -1,36 +0,0 @@
package de.superx.dbadmin;
import java.awt.Component;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
class AdminOrgaPrintRenderer extends DefaultTreeCellRenderer
{
public Component getTreeCellRendererComponent(
JTree tree,
Object value,
boolean sel,
boolean expanded,
boolean leaf,
int row,
boolean hasFocus)
{
super.getTreeCellRendererComponent(
tree, value, sel,
expanded, leaf, row,
hasFocus);
DefaultMutableTreeNode theNode=(DefaultMutableTreeNode)value;
if (theNode.getUserObject() instanceof OrgaEintrag2)
{
OrgaEintrag2 x=(OrgaEintrag2)theNode.getUserObject();
setText(x.getName()+" ("+x.getKeyApnr().toString()+")");
}
return this;
}
}

27
src/de/superx/dbadmin/AdminOrgaSelList.java

@ -1,27 +0,0 @@ @@ -1,27 +0,0 @@
package de.superx.dbadmin;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
class AdminOrgaSelList implements TreeSelectionListener {
AdminOrga derDialog;
MBDragTree tree;
AdminOrgaSelList(AdminOrga dlg, MBDragTree ltree)
{
super();
derDialog=dlg;
tree=ltree;
}
public void valueChanged(TreeSelectionEvent event) {
DefaultMutableTreeNode node =
(DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
if (node != null) {
OrgaEintrag2 was = (OrgaEintrag2)node.getUserObject();
derDialog.setGewaehlt(was);
}
}
}

14
src/de/superx/dbadmin/BenutzerVerwaltung.java

@ -1,14 +0,0 @@ @@ -1,14 +0,0 @@
package de.superx.dbadmin;
/**
* Insert the type's description here.
* Creation date: (19.11.2001 15:34:23)
* @author:
*/
class BenutzerVerwaltung {
/**
* BenutzerVerwaltung constructor comment.
*/
public BenutzerVerwaltung() {
super();
}
}

105
src/de/superx/dbadmin/CheckPwd.java

@ -1,105 +0,0 @@ @@ -1,105 +0,0 @@
package de.superx.dbadmin;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.MessageDigest;
public class CheckPwd
{
public static void main(String args[])
{
MessageDigest sha = null;
File out_file = null;
FileInputStream fis = null;
byte [] data = null;
String data_value = null;
StringBuffer str_value = new StringBuffer ();
String filename = null;
String password = null;
if (args.length != 2)
{
System.err.println("usage: CheckPwd <password> <file>");
System.exit(1);
}
else
{
password = args[0];
filename = args[1];
}
try
{
int read_len, file_len;
File in_file = new File (filename + ".sha");
file_len = (int) in_file.length ();
data = new byte [file_len];
fis = new FileInputStream (in_file);
read_len = fis.read (data, 0, data.length);
fis.close ();
if (read_len != file_len)
throw new IOException ("ERROR: read_len != file_len");
data_value = new String (data);
}
catch (FileNotFoundException e)
{
System.err.println (e);
System.exit (1);
}
catch (SecurityException e)
{
System.err.println (e);
System.exit (1);
}
catch (IOException e)
{
System.err.println (e);
System.exit (1);
}
byte[] buf = password.getBytes();
byte[] digest = null;
try
{
String value;
int n;
sha = MessageDigest.getInstance("SHA-1");
sha.update(buf);
digest = sha.digest();
for (int i = 0; i < digest.length; i++)
{
n = (int) digest[i];
if (n < 0)
n += 256;
value = Integer.toHexString(n);
if (n < 16)
value = "0" + value;
str_value.append (value);
}
if (data_value.equals (str_value.toString()))
System.err.println ("Same password as encrypted in file '" +
filename + ".sha'");
else
throw new Exception ("Not the same password !");
}
catch (Exception e)
{
System.err.println(e);
System.exit (1);
}
}
}

53
src/de/superx/dbadmin/ComboViewAL.java

File diff suppressed because one or more lines are too long

32
src/de/superx/dbadmin/ComboViewRenderer.java

@ -1,32 +0,0 @@ @@ -1,32 +0,0 @@
package de.superx.dbadmin;
//MB Sep 2001
import java.awt.Component;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
class ComboViewRenderer extends JLabel implements ListCellRenderer
{
public Component getListCellRendererComponent(
JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
//Object[] array = (Object[])value;
//setText((String)array[1]);
if (value!=null&&(value instanceof java.lang.String))
{
setText(value.toString());
}
return this;
}
}

203
src/de/superx/dbadmin/DBAccess.java

@ -1,203 +0,0 @@ @@ -1,203 +0,0 @@
package de.superx.dbadmin;
/**
* Insert the type's description here. Creation date: (08.01.2002 16:15:26)
*
* @author:
*/
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Enumeration;
import java.util.Vector;
import javax.swing.JOptionPane;
class DBAccess {
static Connection myConnection;
static Vector userliste, gruppenliste, maskenliste = null;
static SxSQL sxsql;;
public static void init(String url, String logToKonsole, String user,
String passwd) throws Exception {
sxsql = new SxSQL(url, logToKonsole, user, passwd);
}
public static String getString(ResultSet rs1, String feldname) {
Object test;
String rückgabe = null;
try {
test = rs1.getObject(feldname);
if (test != null)
rückgabe = test.toString();
else
rückgabe = new String("");
} catch (Exception e) {
}
return rückgabe;
}
public static String getStringOrNull(String was) {
String back;
if (was.equals(""))
back = null;
else
back = "'" + was.trim() + "'";
return back;
}
public static String getIntegerOrNull(String was) {
String back;
if (was.equals(""))
back = null;
else
back = was.trim();
return back;
}
public static Integer getInteger(ResultSet rs1, String feldname) {
Object test;
Integer rückgabe = null;
try {
test = rs1.getObject(feldname);
if ((test != null) && (test instanceof Integer))
rückgabe = (Integer) test;
} catch (Exception e) {
}
return rückgabe;
}
public static Vector getMaskenListe() {
Vector liste = new Vector();
Vector row;
Integer id;
String name;
try {
String query = "select tid, name, erlaeuterung, select_stmt, cleanup_stmt,xil_proplist from maskeninfo order by 2";
liste = executeQuery(query);
} catch (Exception e) {
JOptionPane.showMessageDialog(null,
"Fehler beim Lesen aus der Datenbank: " + e.toString(),
"SuperX DB Admin", JOptionPane.WARNING_MESSAGE);
e.printStackTrace();
}
return liste;
}
public static Vector getUserListe() {
if (userliste == null)
userListeNeuEinlesen();
return userliste;
}
static void userListeNeuEinlesen() {
try {
userliste = new Vector();
Vector row;
Integer id;
String benutzer, email, name, max_versuch, akt_versuch, info;
Object wert;
String query = "select tid, benutzer,name,email,info,max_versuch,akt_versuch,passwd_sha from userinfo order by benutzer";
userliste = executeQuery(query);
for (Enumeration en = userliste.elements(); en.hasMoreElements();) {
row = (Vector) en.nextElement();
for (Enumeration en2 = row.elements(); en2.hasMoreElements();) {
wert = en2.nextElement();
if (wert == null)
wert = new String("");
}
}
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Fehler bei Datenbankzugriff: "
+ e.toString(), "DBAccess", 1);
}
}
public static Vector NutzerListeEinlesen_Alt() {
Vector liste = new Vector();
Vector row;
Integer id;
String benutzer;
try {
String query = "select tid, benutzer from userinfo order by benutzer";
Statement statement = myConnection.createStatement();
ResultSet rs1 = statement.executeQuery(query);
while (rs1.next()) {
id = (Integer) rs1.getObject("tid");
benutzer = rs1.getObject("benutzer").toString();
row = new Vector();
row.add(id);
row.add(benutzer.trim());
liste.add(row);
}
rs1.close();
statement.close();
} catch (Exception e) {
JOptionPane.showMessageDialog(null,
"Fehler beim Lesen aus der Datenbank: " + e.toString(),
"SuperX DB Admin", JOptionPane.WARNING_MESSAGE);
e.printStackTrace();
}
return liste;
}
public static Vector GruppenListeEinlesen() {
Vector liste = new Vector();
try {
String query = "select tid, name from groupinfo order by 2";
liste = executeQuery(query);
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Fehler bei Datenbankzugriff: "
+ e.toString(), "DBAccess", 1);
}
return liste;
}
public static Vector executeQuery(String query) throws Exception {
//ein Vector im Vector wird geliefert
Vector erg = null;
sxsql.executeQuery(query);
erg = sxsql.getResultVector();
return erg;
}
public static Object executeQuerySingleValue(String query) throws Exception {
Object rück = null;
Vector erg = executeQuery(query);
//ein Vector im Vector wird geliefert
Vector help = (Vector) erg.get(0);
rück = help.get(0);
return rück;
}
public static void executeUpdate(String upd) throws Exception {
sxsql.execute(upd);
}
public static void executeUpdateAll(String upd) throws Exception {
sxsql.executeAll(upd);
}
}

995
src/de/superx/dbadmin/GroupInst.java

@ -1,995 +0,0 @@ @@ -1,995 +0,0 @@
package de.superx.dbadmin;
// Gruppenrechte für Institutionen
//bisher nicht vorgesehen
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.dnd.DragGestureListener;
import java.awt.dnd.DragSource;
import java.awt.dnd.DragSourceListener;
import java.awt.dnd.DropTarget;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Enumeration;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import java.util.Vector;
import javax.swing.CellEditor;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
class GroupInst extends JPanel implements CellEditorListener, ActionListener {
boolean result;
boolean etwasGeändert = false;
Frame dummyframe;
OrgaEintrag2 gewaehlt = null;
OrgaEintrag2 einEintrag;
Vector orga;
Vector merkungültig;
int AnzahlEinträge;
JLabel Standlabel;
GregorianCalendar cal = new GregorianCalendar();
String Stand;
JTextField suchtext;
Container cp;
JTree tree=null;
DefaultTreeModel treeModel;
JScrollPane treeScroll;
DefaultMutableTreeNode root;
DragSource dragSource;
DropTarget dropTarget;
private DragGestureListener dgListener;
private DragSourceListener dsListener;
Connection myConnection = null;
int userid=-999;
SuperXDBAdmin linkToMain;
public GroupInst(SuperXDBAdmin llinkToMain,Connection conn) {
super();
linkToMain=llinkToMain;
myConnection=conn;
this.setLayout(new BorderLayout());
//top panel für Stand
Stand =
cal.get(Calendar.DATE)
+ "."
+ (cal.get(Calendar.MONTH) + 1)
+ "."
+ cal.get(Calendar.YEAR);
//aktuelles Datum ist default
JPanel top = new JPanel();
MBComboBox mbt = new MBComboBox(DBAccess.GruppenListeEinlesen());
//mbt.AddActionListener(this);
top.add(mbt);
Standlabel = new JLabel("Stand: " + Stand);
Standlabel.setFont(new Font("Arial", Font.PLAIN, 10));
JButton bStand = new JButton("anderer Stand");
bStand.setFont(new Font("Arial", Font.PLAIN, 10));
bStand.setDefaultCapable(false);
bStand.addActionListener(this);
top.add(Standlabel);
top.add(bStand);
this.add(top, "North");
//JTree erzeugen
JPanel center = new JPanel();//new GridLayout(1, 2));
tree = tree_erzeugen();
treeScroll = new JScrollPane(tree);
center.add(treeScroll);
// cp.add(treeScroll, "Center");
this.add(center, "Center");
//Suchen Feld + Buttons
JPanel down = new JPanel();
down.setLayout(new GridLayout(3, 1));
JPanel psuchen = new JPanel();
suchtext = new JTextField(10);
suchtext.setFont(new Font("Arial", Font.PLAIN, 10));
psuchen.add(suchtext);
JButton suchen = new JButton("Suchen");
suchen.setFont(new Font("Arial", Font.PLAIN, 10));
suchen.addActionListener(this);
psuchen.add(suchen);
down.add(psuchen);
JPanel pspeichern=new JPanel();
JButton speichern=new JButton("speichern");
speichern.addActionListener(this);
pspeichern.add(speichern);
down.add(pspeichern);
this.add("South", down);
//pack();
if (linkToMain.getLastGroup()!=-999) mbt.setSelection(linkToMain.getLastGroup());
}
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand().equals("speichern"))
GruppenRechteSpeichern();
if (event.getActionCommand().equals("Suchen"))
suchen();
Object src = event.getSource();
if (src instanceof MBComboBox) {
MBComboBox localbox = (MBComboBox) event.getSource();
DefaultMutableTreeNode r=(DefaultMutableTreeNode) tree.getModel().getRoot();
userid=localbox.getSelectedID();
GruppenRechteLesen(r,userid);
tree.repaint();
}
}
public void GruppeAuswählen() {
String[][] Nutzer = new String[1000][2];
try {
String query = "select tid, benutzer from userinfo";
Statement statement = myConnection.createStatement();
ResultSet rs1 = statement.executeQuery(query);
int i = 0;
while (rs1.next()) {
Nutzer[i][0] = rs1.getObject("tid").toString();
Nutzer[i][1] = rs1.getObject("benutzer").toString();
i++;
}
rs1.close();
statement.close();
} catch (Exception e) {
JOptionPane.showMessageDialog(
null,
"Fehler beim Lesen aus der Datenbank: " + e.toString(),
"SuperX DB Admin",
JOptionPane.WARNING_MESSAGE);
e.printStackTrace();
System.exit(-1);
}
String selectedValue =
(String) JOptionPane.showInputDialog(
null,
"Mehrere Treffer!\nBitte auswählen...",
"SuperX",
JOptionPane.INFORMATION_MESSAGE,
null,
Nutzer,
Nutzer[0]);
}
public void andererStand() {
int result =
JOptionPane.showConfirmDialog(
null,
"Bei Auswahl eines anderen Stands gehen eventuell gemachte Änderungen verloren!\n Erst speichern?",
"SuperX DB Admin",
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.OK_OPTION) {
GruppenRechteSpeichern();
}
String Standneu =
JOptionPane.showInputDialog(
this,
"Neues Datum eingeben:",
"SuperX",
JOptionPane.QUESTION_MESSAGE);
if (Standneu != null && DatumOK(Standneu)) //and FormOk
{
cp.setCursor(new Cursor(Cursor.WAIT_CURSOR));
Stand = Standneu;
Standlabel.setText("Stand: " + Stand);
tree = this.tree_erzeugen();
cp.remove(treeScroll);
treeScroll = new JScrollPane(tree);
cp.add(treeScroll);
cp.validate();
cp.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
}
private void children_freischalten(DefaultMutableTreeNode node) {
DefaultMutableTreeNode aNode;
OrgaEintrag2 x;
for (Enumeration en = node.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
x = (OrgaEintrag2) aNode.getUserObject();
x.setErlaubt(true);
}
}
public void childrenSperren(DefaultMutableTreeNode node) {
DefaultMutableTreeNode aNode;
OrgaEintrag2 x;
for (Enumeration en = node.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
x = (OrgaEintrag2) aNode.getUserObject();
x.setErlaubt(false);
}
}
public String dateToString(java.sql.Date inp) {
java.text.DateFormat df;
df = java.text.DateFormat.getDateInstance(java.text.DateFormat.MEDIUM);
// r.b. default Jahr 4-stellig
df.setTimeZone(TimeZone.getDefault());
df.setLenient(false);
String help = df.format((java.util.Date) inp);
return help;
}
public boolean DatumOK(String dat) {
DateFormat df;
df = DateFormat.getDateInstance(DateFormat.MEDIUM);
// r.b. default Jahr 4-stellig
df.setTimeZone(TimeZone.getDefault());
df.setLenient(false);
String geprueft = null;
try {
if (dat.endsWith("00")) {
switch (dat.charAt(dat.length() - 3)) {
case '-' :
case '.' :
case '/' :
dat = dat.substring(0, dat.length() - 2) + "2000";
break;
}
}
java.util.Date date = df.parse(dat);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
if (year >= 0 && year < 30)
calendar.add(Calendar.YEAR, 2000);
if (year >= 30 && year < 100)
calendar.add(Calendar.YEAR, 1900);
//wenn Format nicht OK bleibt geprueft null
geprueft = df.format((java.util.Date) date);
} catch (ParseException e_parse) {
// System.err.println ("SxDate: ERROR: parse: Date != " + value);
} catch (IllegalArgumentException e_arg) {
// System.err.println ("SxDate: ERROR: arg: Date != " + value);
}
return geprueft == null ? false : true;
}
public void druckanzeige() {
AdminOrgaPrintRenderer aopr = new AdminOrgaPrintRenderer();
tree.setCellRenderer(aopr);
DefaultMutableTreeNode aNode;
DefaultMutableTreeNode theRoot =
(DefaultMutableTreeNode) tree.getModel().getRoot();
TreePath tp;
for (Enumeration en = theRoot.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
tp = new TreePath(aNode.getPath());
if (tree.isCollapsed(tp))
tree.expandPath(tp);
}
//PrintUtilities.printComponent(treeScroll);
int level;
OrgaEintrag2 x;
String keyApnr;
for (Enumeration en = theRoot.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
if (aNode.getUserObject() instanceof OrgaEintrag2) {
x = (OrgaEintrag2) aNode.getUserObject();
level = aNode.getLevel();
for (int i = 1; i <= level; i++)
System.out.print(" ");
keyApnr = x.getKeyApnr() == null ? "" : x.getKeyApnr().toString();
System.out.println(x.getName() + " (" + keyApnr + ")");
}
}
}
public void editingCanceled(ChangeEvent e) {
CellEditor cellEditor = (CellEditor) e.getSource();
/* SelectableFile sf =
(SelectableFile)
cellEditor.getCellEditorValue();
System.out.println("editing canceled: " +
sf.toString());*/
}
public void editingStopped(ChangeEvent e) {
// CellEditor cellEditor = (CellEditor)e.getSource();
InstEditor cellEditor = (InstEditor) e.getSource();
DefaultMutableTreeNode node =
(DefaultMutableTreeNode) cellEditor.getLastEditedNode();
OrgaEintrag2 x = (OrgaEintrag2) node.getUserObject();
if (x.getErlaubt().intValue() == 1) {
children_freischalten(node);
prüfeObParentFreischalten(node);
} else
{
parents_sperren(node);
childrenSperren(node);
}
}
public static java.sql.Date getDate(String value) {
DateFormat df;
java.util.Date date;
java.sql.Date sql_date;
Calendar calendar;
df = DateFormat.getDateInstance(DateFormat.MEDIUM);
// r.b. default Jahr 4-stellig
df.setTimeZone(TimeZone.getDefault());
df.setLenient(false);
try {
if (value.endsWith("00")) {
switch (value.charAt(value.length() - 3)) {
case '-' :
case '.' :
case '/' :
value = value.substring(0, value.length() - 2) + "2000";
break;
}
}
date = df.parse(value);
calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
if (year >= 0 && year < 30)
calendar.add(Calendar.YEAR, 2000);
if (year >= 30 && year < 100)
calendar.add(Calendar.YEAR, 1900);
sql_date = new java.sql.Date(calendar.getTime().getTime());
return sql_date;
} catch (ParseException e_parse) {
// System.err.println ("SxDate: ERROR: parse: Date != " + value);
} catch (IllegalArgumentException e_arg) {
// System.err.println ("SxDate: ERROR: arg: Date != " + value);
}
return null;
}
public Frame getFrame() {
return dummyframe;
}
public OrgaEintrag2 getGewaehlt() {
return gewaehlt;
}
private void insertnodes(String theParent, DefaultMutableTreeNode aktNode) {
//rekursive Methode, die Institutionen in den Baum einträgt
Vector result = new Vector();
result = mySelect(theParent);
String eintrag_key;
for (Enumeration el = result.elements(); el.hasMoreElements();) {
einEintrag = (OrgaEintrag2) el.nextElement();
DefaultMutableTreeNode neuNode = new DefaultMutableTreeNode(einEintrag);
aktNode.add(neuNode);
eintrag_key = einEintrag.getKeyApnr();
//nervig null-Werte abfangen
if (eintrag_key != null & theParent == null)
insertnodes(einEintrag.getKeyApnr(), neuNode);
if (eintrag_key == null & theParent == null)
System.out.println(
"Achtung! Element hat fälschlicherweise sich selbst als parent:"
+ einEintrag.getName());
if (eintrag_key != null && theParent != null)
if (!theParent.equals(eintrag_key))
insertnodes(einEintrag.getKeyApnr(), neuNode);
else
System.out.println(
"Achtung! Element hat fälschlicherweise sich selbst als parent:"
+ einEintrag.getName()
+ " key_apnr:"
+ einEintrag.getKeyApnr());
}
}
public int KinderZählen(DefaultMutableTreeNode node) {
int zähler = 0;
DefaultMutableTreeNode aNode;
for (Enumeration en = node.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
zähler++;
}
return zähler - 1;
}
public void log(String was) {
System.out.println(was);
//ggfs. in Datei schreiben
}
private Vector mySelect(String pruefparent) {
//liefert alle Institute mit Parent =pruefparent zurück
Vector result = new Vector();
String eintrag_parent;
for (Enumeration el = orga.elements(); el.hasMoreElements();) {
einEintrag = (OrgaEintrag2) el.nextElement();
eintrag_parent = einEintrag.getParent();
if (eintrag_parent == null && pruefparent == null)
result.addElement(einEintrag);
if (eintrag_parent != null && pruefparent != null)
if (eintrag_parent.equals(pruefparent))
result.addElement(einEintrag);
}
return result;
}
private void GruppenRechteLesen(DefaultMutableTreeNode start, int userID) {
Integer institut;
DefaultMutableTreeNode aNode, childNode;
OrgaEintrag2 x;
//erstmal alles auf erlaubt=false setzen
for (Enumeration en = start.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
if (aNode.getUserObject() instanceof OrgaEintrag2) {
x = (OrgaEintrag2) aNode.getUserObject();
x.setErlaubt(false);
}
}
try {
//Datumsabfrage
//datum String in sql.Date umformen
java.sql.Date date = new java.sql.Date(1);
SxDate mydate = new SxDate();
date = mydate.getDate(Stand);
String query =
"select ch110_institut, hierarchie,lehre,gueltig_seit,gueltig_bis from user_institution where userid="
+ userID
+ " and gueltig_seit<=date('"
+ date
+ "') and gueltig_bis>=date('"
+ date
+ "')";
Statement statement = myConnection.createStatement();
ResultSet rs1 = statement.executeQuery(query);
Integer hierarchie, lehre;
java.sql.Date gueltig_seit, gueltig_bis;
Object input;
while (rs1.next()) {
institut = (Integer) rs1.getObject("ch110_institut");
for (Enumeration en = start.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
if (aNode.getUserObject() instanceof OrgaEintrag2) {
x = (OrgaEintrag2) aNode.getUserObject();
//standardmäßig erstmal erlaubt=false setzen
if (x.getKeyApnr().equals(institut)) {
input = rs1.getObject("hierarchie");
x.setHierarchie(input == null ? null : new Integer(input.toString()));
input = rs1.getObject("lehre");
x.setLehre(input == null ? null : new Integer(input.toString()));
//Gueltigkeitswerte aus user_inst in orgaEintrag übertragen, damit bei speichern erhalten bleiben
gueltig_seit = (java.sql.Date) rs1.getObject("gueltig_seit");
gueltig_bis = (java.sql.Date) rs1.getObject("gueltig_bis");
x.setGueltigSeit(gueltig_seit);
x.setGueltigBis(gueltig_bis);
x.setErlaubt(true);
//Kinder auch
for (Enumeration en2 = aNode.depthFirstEnumeration(); en2.hasMoreElements();) {
childNode = (DefaultMutableTreeNode) en2.nextElement();
x = (OrgaEintrag2) childNode.getUserObject();
x.setErlaubt(true);
}
break;
}
}
}
}
rs1.close();
statement.close();
linkToMain.setStatus("Gruppe geändert");
//linkToMain.setLastGroup(groupid);
} catch (Exception e) {
JOptionPane.showMessageDialog(
null,
"Fehler beim Lesen aus der Datenbank: " + e.toString(),
"SuperX DB Admin",
JOptionPane.WARNING_MESSAGE);
e.printStackTrace();
}
}
public void GruppenRechteSpeichern() {
Enumeration en;
int i = 0;
String ins = null;
String wo = null;
//datum String in sql.Date umformen
java.sql.Date date = new java.sql.Date(1);
SxDate mydate = new SxDate();
date = mydate.getDate(Stand);
// MBProgressBar progress=new MBProgressBar(10);
try {
Statement statement = myConnection.createStatement();
DefaultMutableTreeNode lroot =
(DefaultMutableTreeNode) tree.getModel().getRoot();
DefaultMutableTreeNode aNode;
OrgaEintrag2 x;
String upd =
"delete from user_institution where userid="+userid
+ " and gueltig_seit<=date('"
+ date
+ "') and gueltig_bis>=date('"
+ date
+ "')";
statement.executeUpdate(upd);
TreePath tp;
DefaultMutableTreeNode vorher;
aNode = null;
for (en = lroot.breadthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
x = (OrgaEintrag2) aNode.getUserObject();
if (x instanceof OrgaEintrag2) {
if (x.isErlaubt()) {
ins =
new String(
"insert into user_institution (userid, name,ch110_institut,hierarchie,gueltig_seit,gueltig_bis,lehre) "
+ "values ("+
userid+",'"
+ x.getName()
+ "',"
+ x.getKeyApnr()
+ ","
+ x.getHierarchie()
+ ",date('"
+ SxUtils.GetValueAsString(x.getGueltigSeit())
+ "'),date('"
+ SxUtils.GetValueAsString(x.getGueltigBis())
+ "'),"
+ x.getLehre()
+ ")");
statement.executeUpdate(ins);
i++;
//children sperren, da nur Eintrag von hierarchiehöchstem Element nötig
childrenSperren(aNode);
}
//progress.inc();
}
}
linkToMain.setStatus(i + " Einträge in user_institution geschrieben");
etwasGeändert = false;
//da Kinder der Verarbeitung wegen gesperrt wurden, muss neu eingelesen werden
GruppenRechteLesen(root,userid);
} catch (Exception e) {
JOptionPane.showMessageDialog(
null,
"Fehler beim Schreiben in die Datenbank:\n " + e.toString(),
"SuperX DB Admin",
JOptionPane.WARNING_MESSAGE);
System.out.println(wo + ": " + ins);
e.printStackTrace();
System.exit(-1);
}
//progress.hide();
//progress.dispose();
}
private void parents_sperren(DefaultMutableTreeNode node) {
DefaultMutableTreeNode aNode;
OrgaEintrag2 x;
boolean go = true;
while (go) {
aNode = (DefaultMutableTreeNode) node.getParent();
if (aNode == null || !(aNode.getUserObject() instanceof OrgaEintrag2))
return; //root
x = (OrgaEintrag2) aNode.getUserObject();
if (x.getErlaubt().intValue() == 1)
//wenn parent erlaubt ist, den auf false setzen
// und in Schleife weitermachen
//denn sobald nur eines der Kinderelemente eines parents nicht erlaubt,
//ist er selbst nicht mehr erlaubt
x.setErlaubt(false);
// ansonsten war parent schon auf false und man braucht nicht weitermachen
else
go = false;
node = aNode;
}
}
public void prüfeDifferenzen(DefaultMutableTreeNode root) {
Vector problemfälle;
problemfälle = (Vector) orga.clone();
DefaultMutableTreeNode aNode;
OrgaEintrag2 x;
String name;
Integer key_apnr;
java.sql.Date gueltig_seit, gueltig_bis;
//Problemfälle enthält zu Anfang alle eingelesenen, gültigen Einträge
//diejenigen, die in Baum vorkommen werden ausgelöscht
for (Enumeration en = root.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
x = (OrgaEintrag2) aNode.getUserObject();
problemfälle.remove(x);
}
if (problemfälle.size() > 0) {
JOptionPane.showMessageDialog(
null,
"Achtung!\nEs gibt "
+ problemfälle.size()
+ " gültige Einträge, die nicht in die Baumstruktur passten!\n(Bitte Organigramm korrigieren)",
"SuperX Admin",
JOptionPane.WARNING_MESSAGE);
log(
problemfälle.size()
+ " gültige Einträge, die nicht in die Baumstruktur passten:");
/* DefaultMutableTreeNode fehlernode = new DefaultMutableTreeNode("Fehler");
for (Enumeration el = problemfälle.elements(); el.hasMoreElements();) {
x = (orgaEintrag2) el.nextElement();
fehlernode.add(new DefaultMutableTreeNode(x));
log(x.getKeyApnr() + " - " + x.getName() + "parent (" + x.getParent() + ")");
}
root.add(fehlernode);
*/
}
}
private void prüfeObParentFreischalten(DefaultMutableTreeNode node) {
DefaultMutableTreeNode aNode;
DefaultMutableTreeNode parent = (DefaultMutableTreeNode) node.getParent();
OrgaEintrag2 x;
boolean alleKinderErlaubt = true;
for (Enumeration en = parent.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
if (!aNode.equals(parent)) {
x = (OrgaEintrag2) aNode.getUserObject();
if (x.getErlaubt().intValue() == 0)
alleKinderErlaubt = false;
}
}
if (alleKinderErlaubt) {
x = (OrgaEintrag2) parent.getUserObject();
x.setErlaubt(true);
}
if (!parent.isRoot())
prüfeObParentFreischalten(parent);
}
private void suchen() {
String such = suchtext.getText().toLowerCase();
String teststring;
TreePath tp;
boolean gefunden = false;
DefaultMutableTreeNode test, ausgesucht;
ausgesucht = null;
Vector treffer = new Vector();
Vector treffernodes = new Vector();
if (such.length() < 1) {
JOptionPane.showMessageDialog(null, "Bitte Suchbegriff eingeben!", "SuperX", 1);
return;
}
such = such.toLowerCase();
//JOptionPane.showMessageDialog(null, "neu","SuperX",1);
//alle Knoten durchlaufen
root = (DefaultMutableTreeNode) tree.getModel().getRoot();
Enumeration en = root.breadthFirstEnumeration();
while (en.hasMoreElements()) {
test = (DefaultMutableTreeNode) en.nextElement();
teststring = test.toString().toLowerCase();
if (teststring.indexOf(such) > -1) {
//wenn suchString im aktuellen Knoten vorhanden
//K
treffer.addElement(test.toString());
treffernodes.addElement(test);
}
}
if (treffer.size() > 0) {
if (treffer.size() > 1) {
//mehr als ein Treffer -> Auswahldialog
String[] trefferstring = new String[treffer.size()];
treffer.copyInto(trefferstring);
String selectedValue =
(String) JOptionPane.showInputDialog(
null,
"Mehrere Treffer!\nBitte auswählen...",
"SuperX",
JOptionPane.INFORMATION_MESSAGE,
null,
trefferstring,
trefferstring[0]);
if (selectedValue == null)
return;
gefunden = false;
//gewählten Knoten nach Name in Treffernodes-Vektor suchen
en = treffernodes.elements();
while (en.hasMoreElements() && gefunden == false) {
test = (DefaultMutableTreeNode) en.nextElement();
if (test.toString().equals(selectedValue)) {
ausgesucht = test;
gefunden = true;
}
}
}
if (ausgesucht == null) //bei treffer.size=1
ausgesucht = (DefaultMutableTreeNode) treffernodes.elementAt(0);
// collapse all brances + Selection anwählen
tree.clearSelection();
en = root.depthFirstEnumeration();
while (en.hasMoreElements()) {
test = (DefaultMutableTreeNode) en.nextElement();
tp = new TreePath(test.getPath());
if (tree.isExpanded(tp))
tree.collapsePath(tp);
}
tp = new TreePath(ausgesucht.getPath());
tree.addSelectionPath(tp);
//tree.makeVisible(tp);
// tree.validate();
// tree.repaint();
} else
JOptionPane.showMessageDialog(null, "Keine Treffer", "SuperX", 1);
}
public JTree tree_erzeugen() {
DefaultMutableTreeNode eb1, eb2, eb3, eb4, eb5, eb6;
int i = 0;
orga = new Vector();
merkungültig = new Vector();
String name, drucktext;
Integer ebene, lehre, orgstruktur;
String key_apnr,parent;
java.sql.Date gueltig_seit = null, gueltig_bis = null;
JTree ltree;
/*
String url = "jdbc:odbc:minisuperx";
String driverClass = "sun.jdbc.odbc.JdbcOdbcDriver";
try {
Class.forName(driverClass);
myConnection = DriverManager.getConnection(url);
checkForWarning(myConnection.getWarnings());
myDatabaseMetaData = myConnection.getMetaData();
} catch (Exception e) {
System.out.println(e.toString());
}*/
// addWindowListener(new WindowClosingAdapter());
//Einfaches TreeModel bauen
String query =
"SELECT name,drucktext,key_apnr,ebene,parent,lehre,gueltig_seit,gueltig_bis,orgstruktur FROM organigramm order by name";
int AnzahlGültige = 0;
int AnzahlFehler = 0;
try {
Statement statement = myConnection.createStatement();
ResultSet rs1 = statement.executeQuery(query);
AnzahlEinträge = 0;
java.sql.Timestamp mytimestamp;
long mytimestampwert;
java.sql.Date StandDate = getDate(Stand);
// new java.sql.Date(cal.getTime().getTime());
while (rs1.next()) {
name = rs1.getObject("name").toString();
drucktext = rs1.getObject("drucktext").toString();
key_apnr = (String) rs1.getObject("key_apnr");
ebene = (Integer) rs1.getObject("ebene");
parent = (String) rs1.getObject("parent");
lehre = new Integer(1);
Object helpx = rs1.getObject("lehre");
if (key_apnr.equals(parent)) {
AnzahlFehler++;
log("Eintrag hat sich selbst als parent: " + key_apnr);
}
lehre = new Integer(helpx.toString());
orgstruktur = (Integer) rs1.getObject("orgstruktur");
ResultSetMetaData rsmd = rs1.getMetaData();
//System.out.println(rsmd.getColumnClassName(4));
//für Access
/*if (DB.equals("access")) {
mytimestamp = (java.sql.Timestamp) rs1.getObject("gueltig_seit");
mytimestampwert = mytimestamp.getTime();
gueltig_seit = new java.sql.Date(mytimestampwert);
mytimestamp = (java.sql.Timestamp) rs1.getObject("gueltig_bis");
mytimestampwert = mytimestamp.getTime();
gueltig_bis = new java.sql.Date(mytimestampwert);
}
if (DB.equals("informix")) {*/
gueltig_seit = (java.sql.Date) rs1.getObject("gueltig_seit");
gueltig_bis = (java.sql.Date) rs1.getObject("gueltig_bis");
einEintrag =
new OrgaEintrag2(
name,
drucktext,
key_apnr,
ebene,
parent,
lehre,
gueltig_seit,
gueltig_bis,
orgstruktur);
if ((gueltig_seit.equals(StandDate) || gueltig_seit.before(StandDate))
&& (gueltig_bis.equals(StandDate) || gueltig_bis.after(StandDate))) {
orga.addElement(einEintrag);
AnzahlEinträge++;;
}
}
rs1.close();
statement.close();
} catch (Exception e) {
JOptionPane.showMessageDialog(
null,
"Fehler beim Lesen aus der Datenbank: " + e.toString(),
"SuperX DB Admin",
JOptionPane.WARNING_MESSAGE);
e.printStackTrace();
}
if (AnzahlFehler > 0)
JOptionPane.showMessageDialog(
null,
"Achtung!\n" + AnzahlFehler + " Einträge haben sich selbst als parent!",
"SuperX Admin",
JOptionPane.WARNING_MESSAGE);
OrgaEintrag2 hochschule =
new OrgaEintrag2("Hochschule", null, null, null, null, null, null, null, null);
root = new DefaultMutableTreeNode(hochschule);
/* DefaultMutableTreeNode e1=new DefaultMutableTreeNode(new orgaEintrag2("Studierende", null, null, null, null, null, null, null, null));
e1.add(new DefaultMutableTreeNode(new orgaEintrag2("ca-werte", null, null, null, null, null, null, null, null)));
root.add(e1);
e1.add(new DefaultMutableTreeNode(new orgaEintrag2("Stud. allgmein", null, null, null, null, null, null, null, null)));
DefaultMutableTreeNode e2=new DefaultMutableTreeNode(new orgaEintrag2("Haushalt", null, null, null, null, null, null, null, null));
DefaultMutableTreeNode e2b= new DefaultMutableTreeNode(new orgaEintrag2("Haushaltszeitreihen", null, null, null, null, null, null, null, null));
DefaultMutableTreeNode e2c= new DefaultMutableTreeNode(new orgaEintrag2("Haushalt (Zeitreihe)", null, null, null, null, null, null, null, null));
e2b.add(e2c);
e2.add(e2b);
e2.add(new DefaultMutableTreeNode( new orgaEintrag2("Altersstruktur der Beschäftigen", null, null, null, null, null, null, null, null)));
root.add(e2);
DefaultMutableTreeNode e3=new DefaultMutableTreeNode(new orgaEintrag2("Kennzahlen", null, null, null, null, null, null, null, null));
DefaultMutableTreeNode e3b=new DefaultMutableTreeNode(new orgaEintrag2("Basiskennzahlen", null, null, null, null, null, null, null, null));
e3b.add(new DefaultMutableTreeNode(new orgaEintrag2("ca-werte", null, null, null, null, null, null, null, null)));
e3.add(e3b);
e3.add(new DefaultMutableTreeNode(new orgaEintrag2("Neue Kennzahlabfrage", null, null, null, null, null, null, null, null)));
root.add(e3);
*/
//hier werden über eine rekursive Methode alle
//Institute in den Baum eingetragen
insertnodes(null, root);
//Konsistenz prüfen
int TreeEinträge = KinderZählen(root);
if (AnzahlGültige != TreeEinträge)
prüfeDifferenzen(root);
//Rechte der Gruppeeinlesen
GruppenRechteLesen((DefaultMutableTreeNode) root.getChildAt(0), 10);
//Baum erzeugen
treeModel = new DefaultTreeModel(root);
//AdminOrgaModelListener aoml=new AdminOrgaModelListener();
//treeModel.addTreeModelListener(new AdminOrgaModelListener());
ltree = new JTree(treeModel);
ltree.setRootVisible(false);
ltree.setEditable(true);
// ltree.setBackground(Color.lightGray);
//root Hochschule sieht man sowieso nicht
//first child GMU Duisburg muss aufgeklappt sein
//da Mouselistener Doubleclick umfunktioniert
DefaultMutableTreeNode ebene1 = (DefaultMutableTreeNode) root.getChildAt(0);
ltree.expandPath(new TreePath(ebene1.getPath()));
//Einfachselektion
ltree.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
InstRenderer renderer = new InstRenderer();
InstEditor editor = new InstEditor();
editor.addCellEditorListener(this);
ltree.setEditable(true);
ltree.setCellRenderer(renderer);
ltree.setCellEditor(new InstImmediateEditor(ltree, renderer, editor));
//TreeSelectionListener hinzufügen
// AdminOrgaSelList adosl = new AdminOrgaSelList(this, ltree);
// ltree.addTreeSelectionListener(adosl);
// AdminOrgaMouseListener ml =
// new AdminOrgaMouseListener(this, ltree, merkungültig);
// ltree.addMouseListener(ml);
linkToMain.setStatus(AnzahlEinträge + " OrgaEinträge eingelesen");
return ltree;
}
}

198
src/de/superx/dbadmin/GroupStammPanel.java

@ -1,198 +0,0 @@ @@ -1,198 +0,0 @@
package de.superx.dbadmin;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import de.memtext.util.WindowUtils;
class GroupStammPanel extends JPanel implements ActionListener {
Vector gruppenliste;
MBComboBox mbt;
JTextField tname = new JTextField(15);
public GroupStammPanel() {
mbt = new MBComboBox();
mbt.addActionListener(this);
this.setLayout(new GridLayout(3, 1));
JPanel p0 = new JPanel();
p0.add(mbt);
this.add(p0);
JPanel p1 = new JPanel();
JLabel lname = new JLabel("Name:");
p1.add(lname);
p1.add(tname);
JButton bspeich = new JButton("Name ändern");
bspeich.addActionListener(this);
p1.add(bspeich);
this.add(p1);
JPanel p5 = new JPanel();
JButton blöschen = new JButton("Gruppe löschen");
blöschen.addActionListener(this);
p5.add(blöschen);
JButton bneu = new JButton("Gruppe anlegen");
bneu.addActionListener(this);
p5.add(bneu);
this.add(p5);
}
public void prepare() {
WindowUtils.setWaitCursor(this,true);
gruppenliste = DBAccess.GruppenListeEinlesen();
mbt.removeAllItems();
//special version
mbt.addAll(gruppenliste);
if (SuperXDBAdmin.getLastGroup() != -999)
mbt.setSelection(SuperXDBAdmin.getLastGroup());
WindowUtils.setWaitCursor(this,false);
}
public void actionPerformed(ActionEvent event) {
// if (event.getActionCommand().equals("speichern"))
// NutzerRechteSpeichern();
if (event.getActionCommand().equals("Name ändern"))
gruppenDatenSpeichern();
if (event.getActionCommand().equals("Gruppe löschen"))
gruppeLöschen(mbt.getSelectedID());
if (event.getActionCommand().equals("Gruppe anlegen"))
gruppeAnlegen();
Object src = event.getSource();
if (src instanceof MBComboBox) {
MBComboBox localbox = (MBComboBox) event.getSource();
SuperXDBAdmin.setLastGroup(localbox.getSelectedID());
gruppeGewählt(SuperXDBAdmin.getLastGroup());
}
}
private void gruppenDatenSpeichern() {
try {
WindowUtils.setWaitCursor(this,true);
String upd = "update groupinfo set name="
+ DBAccess.getStringOrNull(tname.getText()) + ""
+ " where tid=" + mbt.getSelectedID();
DBAccess.executeUpdate(upd);
SuperXDBAdmin.setStatus("Gruppendaten gespeichert!");
gruppenliste = DBAccess.GruppenListeEinlesen();
mbt.neuAufbauen(gruppenliste);
} catch (Exception e) {
JOptionPane
.showMessageDialog(null,
"Fehler beim Schreiben in die Datenbank:\n "
+ e.toString(), "SuperX DB Admin",
JOptionPane.WARNING_MESSAGE);
e.printStackTrace();
}
finally
{
WindowUtils.setWaitCursor(this,false);
}
}
private void gruppeGewählt(int gruppeid) {
Vector zeile;
Integer test;
String help;
for (Enumeration el = gruppenliste.elements(); el.hasMoreElements();) {
zeile = ((Vector) el.nextElement());
test = (Integer) zeile.get(0);
if (test.intValue() == gruppeid) {
tname.setText((String) zeile.get(1));
tname.setCaretPosition(0);
}
}
this.repaint();
SuperXDBAdmin.setLastGroup(gruppeid);
}
private void gruppeLöschen(int gruppeid) {
String nochEingetrageneUser = new String("");
try {
Vector erg = DBAccess
.executeQuery("select unique benutzer,name from userinfo U,user_group_bez B where U.tid=B.userinfo_id and b.groupinfo_id="
+ gruppeid);
Vector help;
for (Enumeration el = erg.elements(); el.hasMoreElements();) {
help = (Vector) el.nextElement();
if (nochEingetrageneUser.equals(""))
nochEingetrageneUser = new String(
"Folgende Nutzer gehören zu dieser Gruppe:");
nochEingetrageneUser += "\n" + help.get(0).toString() + " ("
+ help.get(1).toString() + ")";
}
if (!nochEingetrageneUser.equals(""))
nochEingetrageneUser += "\n";
} catch (Exception e) {
SuperXDBAdmin.setStatus("Ein Datenbankfehler ist aufgetreten"+e);
e.printStackTrace();
}
int rc = JOptionPane.showConfirmDialog(null, nochEingetrageneUser
+ "Gruppe wirklich löschen?", "SuperX",
JOptionPane.YES_NO_OPTION);
if (rc == JOptionPane.YES_OPTION) {
try {
//DBAccess .executeUpdate("delete from group_themen where groupid=" + gruppeid);
DBAccess
.executeUpdate("delete from user_group_bez where groupinfo_id="
+ gruppeid);
DBAccess.executeUpdate("delete from groupinfo where tid ="
+ gruppeid);
SuperXDBAdmin.setStatus("Gruppe gelöscht");
mbt.neuAufbauen(DBAccess.GruppenListeEinlesen());
SuperXDBAdmin.setLastGroup(-999);
} catch (Exception e) {
SuperXDBAdmin
.setStatus("Ein Fehler ist aufgetreten - Gruppe nicht gelöscht"+e);
e.printStackTrace();
}
}
}
private void gruppeAnlegen() {
try {
Integer tid = (Integer) DBAccess
.executeQuerySingleValue("select max(tid) as tid from groupinfo");
int newtid = tid.intValue() + 1;
String name = JOptionPane.showInputDialog(this, "Name eingeben",
"SuperX", JOptionPane.QUESTION_MESSAGE);
if (name != null) {
String ins = "insert into groupinfo values (" + newtid + ",'"
+ name + "')";
DBAccess.executeUpdate(ins);
gruppenliste = DBAccess.GruppenListeEinlesen();
mbt.neuAufbauen(gruppenliste);
mbt.setSelection(name);
gruppeGewählt(newtid);
SuperXDBAdmin.setLastGroup(newtid);
SuperXDBAdmin.setStatus("Gruppe angelegt!");
}
} catch (Exception e) {
SuperXDBAdmin.setStatus("Interner Fehler: " + e.toString());
}
}
}

819
src/de/superx/dbadmin/GroupThemen.java

@ -1,819 +0,0 @@ @@ -1,819 +0,0 @@
package de.superx.dbadmin;
/**
* Insert the type's description here.
* Creation date: (23.01.2002 09:48:04)
* @author: Meikel Bisping
*/
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Enumeration;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import java.util.Vector;
import javax.swing.CellEditor;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
class GroupThemen
extends JPanel
implements CellEditorListener, ActionListener {
boolean result;
boolean etwasGeändert = false;
Vector themenbaum;
int AnzahlEinträge;
JLabel Standlabel;
GregorianCalendar cal = new GregorianCalendar();
String Stand;
JTextField suchtext;
Container cp;
JTree tree = null;
SxThemenEintrag2 einEintrag;
DefaultTreeModel treeModel;
JScrollPane treeScroll;
DefaultMutableTreeNode root;
SuperXDBAdmin linkToMain;
public GroupThemen(SuperXDBAdmin llinkToMain) {
super();
linkToMain = llinkToMain;
this.setLayout(new BorderLayout());
//top panel für Stand
Stand =
cal.get(Calendar.DATE)
+ "."
+ (cal.get(Calendar.MONTH) + 1)
+ "."
+ cal.get(Calendar.YEAR);
//aktuelles Datum ist default
JPanel top = new JPanel();
MBComboBox mbt = new MBComboBox(DBAccess.GruppenListeEinlesen());
//mbt.AddActionListener(this);
top.add(mbt);
Standlabel = new JLabel("Stand: " + Stand);
Standlabel.setFont(new Font("Arial", Font.PLAIN, 10));
JButton bStand = new JButton("anderer Stand");
bStand.setFont(new Font("Arial", Font.PLAIN, 10));
bStand.setDefaultCapable(false);
bStand.addActionListener(this);
top.add(Standlabel);
top.add(bStand);
this.add(top, "North");
//JTree erzeugen
JPanel center = new JPanel(); //new GridLayout(1, 2));
tree = tree_erzeugen(Stand);
treeScroll = new JScrollPane(tree);
//,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
center.add(treeScroll);
// cp.add(treeScroll, "Center");
this.add(treeScroll, "Center");
//Suchen Feld + Buttons
JPanel down = new JPanel();
down.setLayout(new GridLayout(3, 1));
JPanel psuchen = new JPanel();
suchtext = new JTextField(10);
suchtext.setFont(new Font("Arial", Font.PLAIN, 10));
psuchen.add(suchtext);
JButton suchen = new JButton("Suchen");
suchen.setFont(new Font("Arial", Font.PLAIN, 10));
suchen.addActionListener(this);
psuchen.add(suchen);
down.add(psuchen);
JPanel pspeichern = new JPanel();
JButton speichern = new JButton("speichern");
speichern.addActionListener(this);
pspeichern.add(speichern);
down.add(pspeichern);
this.add("South", down);
//pack();
if (linkToMain.getLastGroup() != -999)
mbt.setSelection(linkToMain.getLastGroup());
}
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand().equals("speichern"))
GruppenRechteSpeichern();
if (event.getActionCommand().equals("Suchen"))
suchen();
Object src = event.getSource();
if (src instanceof MBComboBox) {
MBComboBox localbox = (MBComboBox) event.getSource();
linkToMain.setLastGroup(localbox.getSelectedID());
GruppenRechteLesen(linkToMain.getLastGroup());
tree.repaint();
}
}
public void andererStand() {
int result =
JOptionPane.showConfirmDialog(
null,
"Bei Auswahl eines anderen Stands gehen eventuell gemachte Änderungen verloren!\n Erst speichern?",
"SuperX DB Admin",
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.OK_OPTION) {
GruppenRechteSpeichern();
}
String Standneu =
JOptionPane.showInputDialog(
this,
"Neues Datum eingeben:",
"SuperX",
JOptionPane.QUESTION_MESSAGE);
if (Standneu != null && DatumOK(Standneu)) //and FormOk
{
cp.setCursor(new Cursor(Cursor.WAIT_CURSOR));
Stand = Standneu;
Standlabel.setText("Stand: " + Stand);
tree = this.tree_erzeugen(Stand);
cp.remove(treeScroll);
treeScroll = new JScrollPane(tree);
cp.add(treeScroll);
cp.validate();
cp.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
}
private void children_freischalten(DefaultMutableTreeNode node) {
DefaultMutableTreeNode aNode;
SxThemenEintrag2 x;
for (Enumeration en = node.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
x = (SxThemenEintrag2) aNode.getUserObject();
x.setErlaubt(true);
wennMaskeÜberall(aNode, "freischalten");
}
}
public void childrenSperren(DefaultMutableTreeNode node) {
DefaultMutableTreeNode aNode;
SxThemenEintrag2 x;
for (Enumeration en = node.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
x = (SxThemenEintrag2) aNode.getUserObject();
x.setErlaubt(false);
wennMaskeÜberall(aNode, "sperren");
}
}
public String dateToString(java.sql.Date inp) {
java.text.DateFormat df;
df = java.text.DateFormat.getDateInstance(java.text.DateFormat.MEDIUM);
// r.b. default Jahr 4-stellig
df.setTimeZone(TimeZone.getDefault());
df.setLenient(false);
String help = df.format((java.util.Date) inp);
return help;
}
public boolean DatumOK(String dat) {
DateFormat df;
df = DateFormat.getDateInstance(DateFormat.MEDIUM);
// r.b. default Jahr 4-stellig
df.setTimeZone(TimeZone.getDefault());
df.setLenient(false);
String geprueft = null;
try {
if (dat.endsWith("00")) {
switch (dat.charAt(dat.length() - 3)) {
case '-' :
case '.' :
case '/' :
dat = dat.substring(0, dat.length() - 2) + "2000";
break;
}
}
java.util.Date date = df.parse(dat);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
if (year >= 0 && year < 30)
calendar.add(Calendar.YEAR, 2000);
if (year >= 30 && year < 100)
calendar.add(Calendar.YEAR, 1900);
//wenn Format nicht OK bleibt geprueft null
geprueft = df.format((java.util.Date) date);
}
catch (ParseException e_parse) {
// System.err.println ("SxDate: ERROR: parse: Date != " + value);
}
catch (IllegalArgumentException e_arg) {
// System.err.println ("SxDate: ERROR: arg: Date != " + value);
}
return geprueft == null ? false : true;
}
public void editingCanceled(ChangeEvent e) {
CellEditor cellEditor = (CellEditor) e.getSource();
/* SelectableFile sf =
(SelectableFile)
cellEditor.getCellEditorValue();
System.out.println("editing canceled: " +
sf.toString());*/
}
public void editingStopped(ChangeEvent e) {
// CellEditor cellEditor = (CellEditor)e.getSource();
InstEditor cellEditor = (InstEditor) e.getSource();
DefaultMutableTreeNode node =
(DefaultMutableTreeNode) cellEditor.getLastEditedNode();
SxThemenEintrag2 x = (SxThemenEintrag2) node.getUserObject();
if (x.isErlaubt()) {
children_freischalten(node);
prüfeObParentFreischalten(node);
wennMaskeÜberall(node, "freischalten");
}
else {
parents_sperren(node);
childrenSperren(node);
wennMaskeÜberall(node, "sperren");
}
}
public static java.sql.Date getDate(String value) {
DateFormat df;
java.util.Date date;
java.sql.Date sql_date;
Calendar calendar;
df = DateFormat.getDateInstance(DateFormat.MEDIUM);
// r.b. default Jahr 4-stellig
df.setTimeZone(TimeZone.getDefault());
df.setLenient(false);
try {
if (value.endsWith("00")) {
switch (value.charAt(value.length() - 3)) {
case '-' :
case '.' :
case '/' :
value = value.substring(0, value.length() - 2) + "2000";
break;
}
}
date = df.parse(value);
calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
if (year >= 0 && year < 30)
calendar.add(Calendar.YEAR, 2000);
if (year >= 30 && year < 100)
calendar.add(Calendar.YEAR, 1900);
sql_date = new java.sql.Date(calendar.getTime().getTime());
return sql_date;
}
catch (ParseException e_parse) {
// System.err.println ("SxDate: ERROR: parse: Date != " + value);
}
catch (IllegalArgumentException e_arg) {
// System.err.println ("SxDate: ERROR: arg: Date != " + value);
}
return null;
}
private void insertnodes(Integer theParent, DefaultMutableTreeNode aktNode) {
//rekursive Methode, die Institutionen in den Baum einträgt
Vector result = new Vector();
result = mySelect(theParent);
Integer eintrag_tid;
for (Enumeration el = result.elements(); el.hasMoreElements();) {
einEintrag = (SxThemenEintrag2) el.nextElement();
DefaultMutableTreeNode neuNode = new DefaultMutableTreeNode(einEintrag);
aktNode.add(neuNode);
eintrag_tid = einEintrag.getTid();
//nervig null-Werte abfangen
if (eintrag_tid != null & theParent == null)
insertnodes(einEintrag.getTid(), neuNode);
if (eintrag_tid == null & theParent == null)
System.out.println(
"Achtung! Element hat fälschlicherweise sich selbst als parent:"
+ einEintrag.getName());
if (eintrag_tid != null && theParent != null)
if (!theParent.equals(eintrag_tid))
insertnodes(einEintrag.getTid(), neuNode);
else
System.out.println(
"Achtung! Element hat fälschlicherweise sich selbst als parent:"
+ einEintrag.getName()
+ "tid:"
+ einEintrag.getTid());
}
//wenn eine Kategorie (maskeninfo==null) keine Blätter (Abfragen)
//enthält, die Kategorie entfernen
einEintrag = (SxThemenEintrag2) aktNode.getUserObject();
// if (einEintrag.getMaskeninfo_id()==null&&result.size()<1)
if (einEintrag.getMaskeninfo_id() == null && aktNode.isLeaf())
aktNode.removeFromParent();
}
public int KinderZählen(DefaultMutableTreeNode node) {
int zähler = 0;
DefaultMutableTreeNode aNode;
for (Enumeration en = node.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
zähler++;
}
return zähler - 1;
}
public void log(String was) {
System.out.println(was);
//ggfs. in Datei schreiben
}
private Vector mySelect(Integer pruefparent) {
//liefert alle Institute mit Parent =pruefparent zurück
Vector result = new Vector();
Integer eintrag_parent;
for (Enumeration el = themenbaum.elements(); el.hasMoreElements();) {
einEintrag = (SxThemenEintrag2) el.nextElement();
eintrag_parent = einEintrag.getParent();
if (eintrag_parent == null && pruefparent == null)
result.addElement(einEintrag);
if (eintrag_parent != null && pruefparent != null)
if (eintrag_parent.intValue() == pruefparent.intValue())
result.addElement(einEintrag);
}
return result;
}
private void GruppenRechteLesen(int GroupID) {
GruppenRechteLesen(GroupID, false);
}
private void GruppenRechteLesen(int GroupID, boolean mute) {
Integer id;
DefaultMutableTreeNode aNode, childNode;
SxThemenEintrag2 x;
DefaultMutableTreeNode start =
(DefaultMutableTreeNode) tree.getModel().getRoot();
//erstmal alles auf erlaubt=false setzen
for (Enumeration en = start.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
if (aNode.getUserObject() instanceof SxThemenEintrag2) {
x = (SxThemenEintrag2) aNode.getUserObject();
x.setErlaubt(false);
}
}
try {
String query = "select id, maske from Group_themen where groupid=" + GroupID;
Vector erg = DBAccess.executeQuery(query);
String maske;
Vector help;
for (Enumeration el = erg.elements(); el.hasMoreElements();) {
help = (Vector) el.nextElement();
id = (Integer) help.get(0);
maske = help.get(1).toString();
for (Enumeration en = start.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
if (aNode.getUserObject() instanceof SxThemenEintrag2) {
x = (SxThemenEintrag2) aNode.getUserObject();
if ((maske.equals("0") && x.getTid().equals(id))
|| (maske.equals("1")
&& x.getMaskeninfo_id() != null
&& x.getMaskeninfo_id().equals(id))) {
x.setErlaubt(true);
//Kinder auch
for (Enumeration en2 = aNode.depthFirstEnumeration(); en2.hasMoreElements();) {
childNode = (DefaultMutableTreeNode) en2.nextElement();
x = (SxThemenEintrag2) childNode.getUserObject();
x.setErlaubt(true);
}
break;
}
}
}
}
if (!mute)
linkToMain.setStatus("Group geändert");
linkToMain.setLastGroup(GroupID);
}
catch (Exception e) {
JOptionPane.showMessageDialog(
null,
"Fehler beim Lesen aus der Datenbank: " + e.toString(),
"SuperX DB Admin",
JOptionPane.WARNING_MESSAGE);
e.printStackTrace();
}
}
public void GruppenRechteSpeichern() {
Enumeration en;
int i = 0;
String ins = null;
String wo = null;
//datum String in sql.Date umformen
java.sql.Date date = new java.sql.Date(1);
SxDate mydate = new SxDate();
date = mydate.getDate(Stand);
// MBProgressBar progress=new MBProgressBar(10);
try {
DefaultMutableTreeNode lroot =
(DefaultMutableTreeNode) tree.getModel().getRoot();
DefaultMutableTreeNode aNode;
SxThemenEintrag2 x;
Object userobj;
String upd =
"delete from group_themen where groupid=" + linkToMain.getLastGroup();
DBAccess.executeUpdate(upd);
TreePath tp;
DefaultMutableTreeNode vorher;
aNode = null;
String id;
int maske = 0;
for (en = lroot.breadthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
userobj = aNode.getUserObject();
if (userobj instanceof SxThemenEintrag2 && aNode != lroot) {
x = (SxThemenEintrag2) userobj;
if (x.isErlaubt()) {
if (x.getMaskeninfo_id() != null) {
id = x.getMaskeninfo_id().toString();
maske = 1;
}
else {
id = x.getTid().toString();
maske = 0;
}
ins =
new String(
"insert into group_themen (groupid, id,maske) "
+ "values ("
+ linkToMain.getLastGroup()
+ ","
+ id
+ ","
+ maske
+ ")");
DBAccess.executeUpdate(ins);
i++;
//children sperren, da nur Eintrag von hierarchiehöchstem Element nötig
childrenSperren(aNode);
}
//progress.inc();
}
}
linkToMain.setStatus(i + " Einträge in group_themen geschrieben");
etwasGeändert = false;
//da Kinder der Verarbeitung wegen gesperrt wurden, muss neu eingelesen werden
GruppenRechteLesen(linkToMain.getLastGroup(), true);
}
catch (Exception e) {
JOptionPane.showMessageDialog(
null,
"Fehler beim Schreiben in die Datenbank:\n " + e.toString(),
"SuperX DB Admin",
JOptionPane.WARNING_MESSAGE);
System.out.println(wo + ": " + ins);
e.printStackTrace();
}
//progress.hide();
//progress.dispose();
}
private void parents_sperren(DefaultMutableTreeNode node) {
DefaultMutableTreeNode aNode;
SxThemenEintrag2 x;
boolean go = true;
while (go) {
aNode = (DefaultMutableTreeNode) node.getParent();
if (aNode == null || !(aNode.getUserObject() instanceof SxThemenEintrag2))
return; //root
x = (SxThemenEintrag2) aNode.getUserObject();
if (x.isErlaubt())
//wenn parent erlaubt ist, den auf false setzen
// und in Schleife weitermachen
//denn sobald nur eines der Kinderelemente eines parents nicht erlaubt,
//ist er selbst nicht mehr erlaubt
x.setErlaubt(false);
// ansonsten war parent schon auf false und man braucht nicht weitermachen
else
go = false;
node = aNode;
}
}
private void prüfeObParentFreischalten(DefaultMutableTreeNode node) {
DefaultMutableTreeNode aNode;
DefaultMutableTreeNode parent = (DefaultMutableTreeNode) node.getParent();
SxThemenEintrag2 x;
boolean alleKinderErlaubt = true;
for (Enumeration en = parent.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
if (!aNode.equals(parent)) {
x = (SxThemenEintrag2) aNode.getUserObject();
if (!x.isErlaubt())
alleKinderErlaubt = false;
}
}
if (alleKinderErlaubt) {
x = (SxThemenEintrag2) parent.getUserObject();
x.setErlaubt(true);
}
if (!parent.isRoot())
prüfeObParentFreischalten(parent);
}
private void suchen() {
String such = suchtext.getText().toLowerCase();
String teststring;
TreePath tp;
boolean gefunden = false;
DefaultMutableTreeNode test, ausgesucht;
ausgesucht = null;
Vector treffer = new Vector();
Vector treffernodes = new Vector();
if (such.length() < 1) {
JOptionPane.showMessageDialog(null, "Bitte Suchbegriff eingeben!", "SuperX", 1);
return;
}
such = such.toLowerCase();
//JOptionPane.showMessageDialog(null, "neu","SuperX",1);
//alle Knoten durchlaufen
DefaultMutableTreeNode root =
(DefaultMutableTreeNode) tree.getModel().getRoot();
Enumeration en = root.breadthFirstEnumeration();
while (en.hasMoreElements()) {
test = (DefaultMutableTreeNode) en.nextElement();
teststring = test.toString().toLowerCase();
if (teststring.indexOf(such) > -1) {
//wenn suchString im aktuellen Knoten vorhanden
//K
treffer.addElement(test.toString());
treffernodes.addElement(test);
}
}
if (treffer.size() > 0) {
if (treffer.size() > 1) {
//mehr als ein Treffer -> Auswahldialog
String[] trefferstring = new String[treffer.size()];
treffer.copyInto(trefferstring);
String selectedValue =
(String) JOptionPane.showInputDialog(
null,
"Mehrere Treffer!\nBitte auswählen...",
"SuperX",
JOptionPane.INFORMATION_MESSAGE,
null,
trefferstring,
trefferstring[0]);
if (selectedValue == null)
return;
gefunden = false;
//gewählten Knoten nach Name in Treffernodes-Vektor suchen
en = treffernodes.elements();
while (en.hasMoreElements() && gefunden == false) {
test = (DefaultMutableTreeNode) en.nextElement();
if (test.toString().equals(selectedValue)) {
ausgesucht = test;
gefunden = true;
}
}
}
if (ausgesucht == null) //bei treffer.size=1
ausgesucht = (DefaultMutableTreeNode) treffernodes.elementAt(0);
// collapse all brances + Selection anwählen
tree.clearSelection();
en = root.depthFirstEnumeration();
while (en.hasMoreElements()) {
test = (DefaultMutableTreeNode) en.nextElement();
tp = new TreePath(test.getPath());
if (tree.isExpanded(tp))
tree.collapsePath(tp);
}
tp = new TreePath(ausgesucht.getPath());
tree.addSelectionPath(tp);
//tree.makeVisible(tp);
// tree.validate();
// tree.repaint();
}
else
JOptionPane.showMessageDialog(null, "Keine Treffer", "SuperX", 1);
}
public JTree tree_erzeugen(String lStand) {
//liefert Organigramm v. angegebenen Stand zurück
String name, erlaeuterung;
Integer tid, maskeninfo_id, parent;
java.sql.Date gueltig_seit, gueltig_bis;
JTree ltree=null;
//neu erstellen nur beim 1.mal und anderem Stand
try {
// if (Stand == null || (!Stand.equals(lStand))) {
Stand = lStand;
//tree erzeugen für Stand
//aus Datenbank auslesen
//datum String in sql.Date umformen
java.sql.Date date = new java.sql.Date(1);
SxDate mydate = new SxDate();
date = mydate.getDate(Stand);
Vector rohform = new Vector();
//Rohfassung (vector in vector) aus DB
//informix
String query =
//Kategorien, wie Studierende/Prüfungen
//wenn keine Rechte für Abfragen darunter werden die Äste wieder gelöscht
"select T.tid,T.name, T.maskeninfo_id, T.parent, T.erlaeuterung,T.gueltig_seit,T.gueltig_bis "
+ "from themenbaum T "
+ "where T.maskeninfo_id is null and "
+ "T.gueltig_seit<=date('"
+ date
+ "') and T.gueltig_bis>=date('"
+ date
+ "') "
+ " union "
+
//und alle Abfragen
"select T.tid,M.name, T.maskeninfo_id, T.parent, M.erlaeuterung,T.gueltig_seit,T.gueltig_bis "
+ "from themenbaum T, maskeninfo M "
+ "where T.maskeninfo_id=M.tid and "
+ "T.gueltig_seit<=date('"
+ date
+ "') and T.gueltig_bis>=date('"
+ date
+ "') "
+ " order by 2";
Vector zeile;
rohform = DBAccess.executeQuery(query);
if (rohform.size() < 1)
return null;
//Umformen in Vector of SxThemenEintrag2
Vector dummy = new Vector();
themenbaum = new Vector();
Enumeration en1 = rohform.elements();
while (en1.hasMoreElements()) {
dummy = (Vector) en1.nextElement();
tid = (Integer) dummy.elementAt(0);
name = (String) dummy.elementAt(1);
name = name.trim();
maskeninfo_id = (Integer) dummy.elementAt(2);
parent = (Integer) dummy.elementAt(3);
erlaeuterung = (String) dummy.elementAt(4);
gueltig_seit = (java.sql.Date) dummy.elementAt(5);
gueltig_bis = (java.sql.Date) dummy.elementAt(6);
einEintrag =
new SxThemenEintrag2(tid, name, maskeninfo_id, parent, erlaeuterung,gueltig_seit,gueltig_bis);
themenbaum.addElement(einEintrag);
}
rohform = null;
SxThemenEintrag2 ebene0 =
new SxThemenEintrag2(null, "Abfragen/Berichte", null, null, null,null,null);
DefaultMutableTreeNode root = new DefaultMutableTreeNode(ebene0);
//hier werden über eine rekursive Methode alle
//Institute in den Baum eingetragen
insertnodes(null, root);
themenbaum = null;
//Baum erzeugen
ltree = new JTree(root);
ltree.setRootVisible(false);
//root Abfragen/Berichte sieht man sowieso nicht
//first child abfragen muss aufgeklappt sein
//da Mouselistener Doubleclick umfunktioniert
if (root.getChildCount() > 0) {
DefaultMutableTreeNode ebene1 = (DefaultMutableTreeNode) root.getChildAt(0);
ltree.expandPath(new TreePath(ebene1.getPath()));
}
//Einfachselektion
ltree.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
InstRenderer renderer = new InstRenderer();
//Markierungsrandfarbe grau nicht gelb
// renderer.setBorderSelectionColor(java.awt.Color.darkGray);
InstEditor editor = new InstEditor();
editor.addCellEditorListener(this);
ltree.setEditable(true);
ltree.setCellRenderer(renderer);
ltree.setCellEditor(new InstImmediateEditor(ltree, renderer, editor));
//TreeSelectionListener hinzufügen
// AdminOrgaSelList adosl = new AdminOrgaSelList(this, ltree);
// ltree.addTreeSelectionListener(adosl);
// AdminOrgaMouseListener ml =
// new AdminOrgaMouseListener(this, ltree, merkungültig);
// ltree.addMouseListener(ml);
linkToMain.setStatus(AnzahlEinträge + " ThemenEinträge eingelesen");
}
catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(
null,
"Fehler bei Datenbankzugriff: " + e.toString(),
"GroupThemen",
1);
}
return ltree;
}
private void wennMaskeÜberall(DefaultMutableTreeNode node, String was) {
Object userobj = node.getUserObject();
DefaultMutableTreeNode aNode;
DefaultMutableTreeNode root =
(DefaultMutableTreeNode) tree.getModel().getRoot();
SxThemenEintrag2 test;
if (userobj instanceof SxThemenEintrag2) {
SxThemenEintrag2 x = (SxThemenEintrag2) userobj;
if (x.getMaskeninfo_id() != null) {
for (Enumeration en = root.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
test = (SxThemenEintrag2) aNode.getUserObject();
if (test.getMaskeninfo_id() != null
&& test.getMaskeninfo_id().equals(x.getMaskeninfo_id())) {
if (was.equals("freischalten"))
test.setErlaubt(true);
else
test.setErlaubt(false);
}
}
}
}
}
}

52
src/de/superx/dbadmin/InstEditor.java

@ -1,52 +0,0 @@ @@ -1,52 +0,0 @@
package de.superx.dbadmin;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JCheckBox;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
class InstEditor extends AbstractCellEditor {
InstEditorRenderer renderer;
DefaultMutableTreeNode lastEditedNode;
JCheckBox checkBox;
public InstEditor() {
renderer = new InstEditorRenderer();
checkBox = renderer.getCheckBox();
checkBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Object userobj=lastEditedNode.getUserObject();
if (userobj instanceof OrgaEintrag2)
{
OrgaEintrag2 x=(OrgaEintrag2)userobj;
x.setErlaubt(checkBox.isSelected());
}
if (userobj instanceof SxThemenEintrag2)
{
SxThemenEintrag2 x=(SxThemenEintrag2)userobj;
x.setErlaubt(checkBox.isSelected());
}
stopCellEditing();
}
});
}
public Object getCellEditorValue() {
return lastEditedNode.getUserObject();
}
public DefaultMutableTreeNode getLastEditedNode() {
return lastEditedNode;
}
public Component getTreeCellEditorComponent(
JTree tree, Object value,
boolean selected, boolean expanded,
boolean leaf, int row) {
lastEditedNode = (DefaultMutableTreeNode)value;
return renderer.getTreeCellRendererComponent(tree,
value, selected, expanded,
leaf, row, true); // hasFocus ignored
}
}

21
src/de/superx/dbadmin/InstEditorRenderer.java

@ -1,21 +0,0 @@ @@ -1,21 +0,0 @@
package de.superx.dbadmin;
import java.awt.Component;
import javax.swing.JCheckBox;
import javax.swing.JTree;
class InstEditorRenderer extends InstRenderer {
public JCheckBox getCheckBox() {
return checkBox;
}
public Component getTreeCellRendererComponent(
JTree tree, Object value,
boolean selected, boolean expanded,
boolean leaf, int row,
boolean hasFocus) {
Component c = super.getTreeCellRendererComponent(tree,
value, selected, expanded,
leaf, row, hasFocus);
setIcon(null);
return c;
}
}

65
src/de/superx/dbadmin/InstImmediateEditor.java

@ -1,65 +0,0 @@ @@ -1,65 +0,0 @@
package de.superx.dbadmin;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.util.EventObject;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellEditor;
import javax.swing.tree.TreePath;
class InstImmediateEditor extends DefaultTreeCellEditor {
private InstRenderer renderer;
public InstImmediateEditor(JTree tree,
InstRenderer renderer,
InstEditor editor) {
super(tree, renderer, editor);
this.renderer = renderer;
}
protected boolean canEditImmediately(EventObject e) {
boolean rv = false; // rv = return value
if(e instanceof MouseEvent) {
MouseEvent me = (MouseEvent)e;
rv = inCheckBoxHitRegion(me);
}
return rv;
}
public boolean shouldSelectCell(EventObject e) {
boolean rv = false; // only mouse events
if(e instanceof MouseEvent) {
MouseEvent me = (MouseEvent)e;
TreePath path = tree.getPathForLocation(me.getX(),
me.getY());
//FileNode node = (FileNode)
// path.getLastPathComponent();
rv = !inCheckBoxHitRegion(me);
}
return rv;
}
public boolean inCheckBoxHitRegion(MouseEvent e) {
TreePath path = tree.getPathForLocation(e.getX(),
e.getY());
if (path==null) return false;
boolean rv = false;
DefaultMutableTreeNode node = (DefaultMutableTreeNode)path.getLastPathComponent();
// offset and lastRow DefaultTreeCellEditor
// protected members
Rectangle bounds = tree.getRowBounds(lastRow);
Dimension checkBoxOffset =
renderer.getCheckBoxOffset();
//bounds.translate(offset + checkBoxOffset.width-21, checkBoxOffset.height);
bounds.translate(10 ,0);
rv = bounds.contains(e.getPoint());
return rv;
}
}

125
src/de/superx/dbadmin/InstRenderer.java

@ -1,125 +0,0 @@ @@ -1,125 +0,0 @@
package de.superx.dbadmin;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.util.Enumeration;
import javax.swing.Box;
import javax.swing.JCheckBox;
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.UIManager;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
class InstRenderer extends DefaultTreeCellRenderer {
// protected JCheckBox checkBox = new JCheckBox(" ");
protected JCheckBox checkBox = new JCheckBox("");
private Component strut = Box.createHorizontalStrut(5);
private JPanel panel = new JPanel();
public InstRenderer() {
Color color = UIManager.getColor("Tree.textBackground");
setBackground(color);
setBackgroundNonSelectionColor(color);
setBackgroundSelectionColor(color);
panel.setBackground(color);
setOpaque(false);
checkBox.setOpaque(false);
panel.setOpaque(false);
panel.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
panel.add(this);
//panel.add(strut);
panel.add(checkBox);
}
public Component getTreeCellRendererComponent(
JTree tree,
Object value,
boolean selected,
boolean expanded,
boolean leaf,
int row,
boolean hasFocus) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
super.getTreeCellRendererComponent(
tree,
value,
selected,
expanded,
leaf,
row,
hasFocus);
boolean erl = false;
Object userobj = node.getUserObject();
if (userobj instanceof OrgaEintrag2) {
OrgaEintrag2 x = (OrgaEintrag2) node.getUserObject();
erl = x.getErlaubt().intValue() == 0 ? false : true;
}
if (userobj instanceof SxThemenEintrag2) {
SxThemenEintrag2 x = (SxThemenEintrag2) node.getUserObject();
erl = x.isErlaubt();
}
checkBox.setSelected(erl);
if (erl)
this.setForeground(new Color(0, 200, 0));
else
this.setForeground(colorcheck(node));
return panel;
}
private Color colorcheck(DefaultMutableTreeNode node) {
Color ergfarbe = Color.red;
DefaultMutableTreeNode aNode;
OrgaEintrag2 x;
SxThemenEintrag2 y;
Object userobj;
for (Enumeration en = node.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
userobj = aNode.getUserObject();
if (userobj instanceof OrgaEintrag2) {
x = (OrgaEintrag2) userobj;
if (x.getErlaubt().intValue() == 1) {
ergfarbe = new Color(130, 90, 0);
break;
}
}
if (userobj instanceof SxThemenEintrag2) {
y = (SxThemenEintrag2) userobj;
if (y.isErlaubt() == true) {
ergfarbe = new Color(130, 90, 0);
break;
}
}
}
return ergfarbe;
}
public Dimension getCheckBoxOffset() {
Graphics g = panel.getGraphics();
int xoffset = 0;
if (g != null) {
try {
FontMetrics fm = g.getFontMetrics();
xoffset = fm.stringWidth(getText());// + strut.getPreferredSize().width;
}
finally {
g.dispose();
}
}
return new Dimension(xoffset, 0);
}
}

104
src/de/superx/dbadmin/MBComboBox.java

@ -1,104 +0,0 @@ @@ -1,104 +0,0 @@
package de.superx.dbadmin;
import java.util.Enumeration;
import java.util.Vector;
import javax.swing.JComboBox;
class MBComboBox extends JComboBox {
/**
* MBComboBox constructor comment.
*/
// JComboBox box;
Vector daten, zeile;
String einItem;
public MBComboBox() {
super();
this.setEditable(false);
}
public MBComboBox(Vector daten) {
super();
this.setEditable(false);
addAll(daten);
}
public void addAll(Vector ldaten)
{
daten = ldaten;
for (Enumeration el = daten.elements(); el.hasMoreElements();) {
zeile=new Vector();
zeile = ((Vector) el.nextElement());
einItem=(String)zeile.get(1);
this.addItem(einItem);
}
}
public void neuAufbauen(Vector ldaten) {
Vector zeile;
daten = ldaten;
this.removeAllItems();
for (Enumeration el = daten.elements(); el.hasMoreElements();) {
zeile = ((Vector) el.nextElement());
einItem=(String)zeile.get(1);
this.addItem(einItem);
}
}
public int getSelectedID() {
Vector zeile;
int rückgabe = -999;
Integer umr;
String umr1;
String x = (String)super.getSelectedItem();
//daten durchsuchen bis gefunden
for (Enumeration el = daten.elements(); el.hasMoreElements();) {
zeile = ((Vector) el.nextElement());
einItem=(String)zeile.get(1);
if (einItem.equals(x)) {
umr = (Integer) zeile.get(0);
rückgabe = umr.intValue();
break;
}
}
return rückgabe;
}
public void setSelection(String was)
// für erscheinenden Text
{
String item;
String eintrag;Object help;
was = was.trim();
for (int i = 0; i < this.getItemCount(); i++) {
eintrag = (String) this.getItemAt(i);
eintrag = eintrag.trim();
if (was.equals(eintrag)) {
help=this.getItemAt(i);
this.setSelectedItem(help);
this.validate();
this.repaint();
break;
}
}
}
public void setSelection(int ID)
//für interne ID
{
Integer testid;
String was=null;
for (Enumeration el = daten.elements(); el.hasMoreElements();) {
zeile = ((Vector) el.nextElement());
testid = (Integer) zeile.get(0);
if (testid.intValue() == ID) {
einItem=(String)zeile.get(1);
setSelection(einItem);
break;
}
}
}
}

40
src/de/superx/dbadmin/MBComboView.java

File diff suppressed because one or more lines are too long

33
src/de/superx/dbadmin/MBDragModelListener.java

@ -1,33 +0,0 @@ @@ -1,33 +0,0 @@
package de.superx.dbadmin;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.DefaultMutableTreeNode;
class MBDragModelListener implements TreeModelListener {
public void treeNodesChanged(TreeModelEvent e) {
DefaultMutableTreeNode node;
node = (DefaultMutableTreeNode)
(e.getTreePath().getLastPathComponent());
/*
* If the event lists children, then the changed
* node is the child of the node we've already
* gotten. Otherwise, the changed node and the
* specified node are the same.
*/
try {
int index = e.getChildIndices()[0];
node = (DefaultMutableTreeNode)
(node.getChildAt(index));
} catch (NullPointerException exc) {}
// System.out.println("The user has finished editing the node.");
// System.out.println("New value: " + node.getUserObject());
}
public void treeNodesInserted(TreeModelEvent e) {
}
public void treeNodesRemoved(TreeModelEvent e) {
}
public void treeStructureChanged(TreeModelEvent e) {
}
}

137
src/de/superx/dbadmin/MBDragTree.java

@ -1,137 +0,0 @@ @@ -1,137 +0,0 @@
package de.superx.dbadmin;
import java.awt.Point;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DragGestureEvent;
import java.awt.dnd.DragGestureListener;
import java.awt.dnd.DragSource;
import java.awt.dnd.DragSourceDragEvent;
import java.awt.dnd.DragSourceDropEvent;
import java.awt.dnd.DragSourceEvent;
import java.awt.dnd.DragSourceListener;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import java.util.Enumeration;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import de.memtext.tree.AutoScrollJTree;
class MBDragTree extends AutoScrollJTree implements DragGestureListener,
DragSourceListener, DropTargetListener {
public MBDragTree() {
DragSource dragSource = DragSource.getDefaultDragSource();
dragSource.createDefaultDragGestureRecognizer(this, // component where
// drag originates
DnDConstants.ACTION_MOVE, // actions
this); // drag gesture recognizer
DropTarget dropTarget = new DropTarget(this, DnDConstants.ACTION_MOVE,
this);
}
//source
public void dragDropEnd(DragSourceDropEvent e) {
}
public void dragEnter(DragSourceDragEvent e) {
}
public void dragEnter(DropTargetDragEvent e) {
}
public void dragExit(DragSourceEvent e) {
}
public void dragExit(DropTargetEvent e) {
}
public void dragGestureRecognized(DragGestureEvent e) {
TreePath path = this.getLeadSelectionPath();
DefaultMutableTreeNode was = (DefaultMutableTreeNode) path
.getLastPathComponent();
Transferable tr = (Transferable) was.getUserObject();
e.startDrag(DragSource.DefaultMoveDrop, // cursor
tr, // transferable
this); // drag source listener
}
public void dragOver(DragSourceDragEvent e) {
}
public void dragOver(DropTargetDragEvent e) {
e.acceptDrag(DnDConstants.ACTION_MOVE);
}
//target
public void drop(DropTargetDropEvent e) {
try {
TreePath path = this.getLeadSelectionPath();
DefaultMutableTreeNode verschiebNode = (DefaultMutableTreeNode) path
.getLastPathComponent();
DefaultMutableTreeNode oldparent = (DefaultMutableTreeNode) verschiebNode
.getParent();
verschiebNode.removeFromParent();
String newParentKeyApnr;
//Transferable tr=e.getTransferable();
Point loc = e.getLocation();
TreePath destinationPath = this.getPathForLocation(loc.x, loc.y);
DefaultMutableTreeNode newParent = (DefaultMutableTreeNode) destinationPath
.getLastPathComponent();
OrgaEintrag2 newParentOrgaEintrag = (OrgaEintrag2) newParent
.getUserObject();
newParentKeyApnr = newParentOrgaEintrag.getKeyApnr();
newParent.add(verschiebNode);
OrgaEintrag2 verschiebOrgaEintrag = (OrgaEintrag2) verschiebNode
.getUserObject();
//parent anpassen
verschiebOrgaEintrag.setParent(newParentKeyApnr);
//Ebene knoten selbst + alle Unterknoten anpassen
Integer neueEbene = new Integer(verschiebNode.getLevel() - 1);
verschiebOrgaEintrag.setEbene(neueEbene);
DefaultMutableTreeNode aNode;
OrgaEintrag2 x;
for (Enumeration en = verschiebNode.depthFirstEnumeration(); en
.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
neueEbene = new Integer(aNode.getLevel() - 1);
x = (OrgaEintrag2) aNode.getUserObject();
x.setEbene(neueEbene);
}
e.acceptDrop(DnDConstants.ACTION_MOVE);
e.getDropTargetContext().dropComplete(true);
//model neu laden und Ast aufklappen
DefaultTreeModel model = (DefaultTreeModel) getModel();
model.reload(oldparent);
model.reload(newParent);
TreePath parentPath = new TreePath(newParent.getPath());
expandPath(parentPath);
} catch (Exception ex) {
ex.printStackTrace();
}
this.validate();
this.repaint();
}
public void dropActionChanged(DragSourceDragEvent e) {
}
public void dropActionChanged(DropTargetDragEvent e) {
}
}

49
src/de/superx/dbadmin/MBProgressBar.java

@ -1,49 +0,0 @@ @@ -1,49 +0,0 @@
package de.superx.dbadmin;
/**
* Insert the type's description here.
* Creation date: (24.09.2001 14:47:19)
* @author: Administrator
*/
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JTextField;
class MBProgressBar extends JFrame {
JTextField progressTextField;
JProgressBar progressBar;
public MBProgressBar (int max) {
Container cp=this.getContentPane();
cp.setLayout(new BorderLayout());
progressTextField = new JTextField("Titel");
cp.add(progressTextField, BorderLayout.NORTH);
JPanel bottomPanel = new JPanel();
progressBar = new JProgressBar();
progressBar.setMinimum(0);
progressBar.setMaximum(max);
progressBar.setStringPainted(true);
bottomPanel.setLayout(new GridLayout(0,1));
bottomPanel.add(progressBar);
bottomPanel.add(new JLabel("Status"));
cp.add(bottomPanel, BorderLayout.SOUTH);
this.pack();
this.show();
}
public void inc()
{
int value = progressBar.getValue();
progressBar.setValue(value+1);
}
}

82
src/de/superx/dbadmin/MBTableSelect.java

@ -1,82 +0,0 @@ @@ -1,82 +0,0 @@
package de.superx.dbadmin;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Frame;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
class MBTableSelect extends JDialog implements ActionListener {
JTable table;
JScrollPane scrollPane;
Vector rows;
public MBTableSelect(Frame owner, String title, Vector lrows, Vector colnames,boolean hidecol1, int selectionMode) {
super(owner, title, true);
Vector rows=lrows;
Point parloc = owner.getLocation();
setLocation(parloc.x + 30, parloc.y + 30);
/*Windows-Look
String plaf = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
try {
UIManager.setLookAndFeel(plaf);
SwingUtilities.updateComponentTreeUI(this);
} catch (Exception e) {
System.err.println(e.toString());
}*/
//Fenster
Container cp = getContentPane();
cp.setLayout(new BorderLayout());
table=new JTable(rows,colnames);
//table.setSelectionMode(selectionMode);
scrollPane=new JScrollPane(table);
cp.add(scrollPane,"Center");
JButton OK=new JButton("OK");
OK.addActionListener(this);
JButton Abbr=new JButton("Abbrechen");
Abbr.addActionListener(this);
JPanel down=new JPanel();
down.add(OK);down.add(Abbr);
cp.add(down,"South");
this.pack();
this.repaint();
}
public void actionPerformed(ActionEvent event) {
String cmd=event.getActionCommand();
if (cmd.equals("Abbrechen")) {
table.clearSelection();
this.setVisible(false);
this.dispose();
}
if (cmd.equals("OK")) {
this.setVisible(false);
this.dispose();
}
}
public Vector getGewählt()
{
int[] selectedrows=table.getSelectedRows();
Vector erg=new Vector();
for (int i=0;i<selectedrows.length;i++)
{
erg.add((Vector)rows.get(selectedrows[i]));
}
return erg;
}
}

400
src/de/superx/dbadmin/MaskeAendern.java

@ -1,400 +0,0 @@ @@ -1,400 +0,0 @@
package de.superx.dbadmin;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.security.MessageDigest;
import java.util.Enumeration;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/**
* Insert the type's description here.
* Creation date: (25.03.2002 15:18:32)
* @author:
*/
class MaskeAendern extends JPanel implements ActionListener {
SuperXDBAdmin linkToMain;
Vector liste;
MBComboBox mbt;
JTextField tname = new JTextField(50);
JTextArea terläuterung=new JTextArea(60,2);
JTextArea tselect=new JTextArea(60,6);
JTextArea tcleanup=new JTextArea(60,2);
JTextArea txil=new JTextArea(60,2);
public MaskeAendern(SuperXDBAdmin llinkToMain) {
super();
linkToMain = llinkToMain;
mbt=new MBComboBox(DBAccess.getMaskenListe());
//mbt.AddActionListener(this);
this.setLayout(new GridLayout(7, 1));
JPanel p0 = new JPanel();
p0.add(mbt);
this.add(p0);
JPanel p1 = new JPanel();
JLabel lname = new JLabel("Name:");
p1.add(lname);
p1.add(tname);
JPanel p2=new JPanel(new FlowLayout());
JLabel lerl=new JLabel("Erläuterung");
p2.add(lerl);
terläuterung.setLineWrap(true);
terläuterung.setWrapStyleWord(true);
terläuterung.setEditable(true);
JScrollPane terlscroll=new JScrollPane(terläuterung);
terlscroll.setPreferredSize(new Dimension(350,40));
p2.add(terlscroll);
this.add(p2);
JPanel p3=new JPanel(new FlowLayout());
JLabel lselect=new JLabel("Select Statement");
p3.add(lselect);
tselect.setLineWrap(true);
tselect.setWrapStyleWord(true);
tselect.setEditable(true);
JScrollPane tselectscroll=new JScrollPane(tselect);
tselectscroll.setPreferredSize(new Dimension(350,100));
p3.add(tselectscroll);
this.add(p3);
JPanel p4=new JPanel(new FlowLayout());
JLabel lcleanup=new JLabel("Cleanup Statement");
p4.add(lcleanup);
tcleanup.setLineWrap(true);
tcleanup.setWrapStyleWord(true);
tcleanup.setEditable(true);
JScrollPane tcleanupscroll=new JScrollPane(tcleanup);
tcleanupscroll.setPreferredSize(new Dimension(350,40));
p4.add(tcleanupscroll);
this.add(p4);
JPanel p5=new JPanel(new FlowLayout());
JLabel lxil=new JLabel("XIL List");
p5.add(lxil);
txil.setLineWrap(false);
txil.setWrapStyleWord(false);
tcleanup.setEditable(true);
JScrollPane txilscroll=new JScrollPane(txil);
txilscroll.setPreferredSize(new Dimension(350,100));
p5.add(txilscroll);
this.add(p5);
JPanel p6 = new JPanel();
JButton bspeich = new JButton("speichern");
bspeich.addActionListener(this);
p5.add(bspeich);
this.add(p6);
maskeGewählt();
}
public void actionPerformed(ActionEvent event) {
// if (event.getActionCommand().equals("speichern"))
// NutzerRechteSpeichern();
if (event.getActionCommand().equals("speichern"))
maskenDatenSpeichern();
Object src = event.getSource();
if (src instanceof MBComboBox) {
MBComboBox localbox = (MBComboBox) event.getSource();
//linkToMain.setSelectedUser(localbox.getSelectedID());
maskeGewählt();
}
}
private void maskenDatenSpeichern() {
try {
if (terläuterung.getText().length()>240||tcleanup.getText().length()>240)
{
// info=info.substring(0,254);
JOptionPane.showMessageDialog(
null,
"Achtung! Es wurden nur die ersten 240 Zeichen der Felder Erläuterung und Cleanup gespeichert ",
"SuperX DB Admin",
JOptionPane.WARNING_MESSAGE);
}
int tid=mbt.getSelectedID();
String upd =
"update maskeninfo set name="
+ DBAccess.getStringOrNull(tname.getText())
+ ",erlaeuterung="
+ DBAccess.getStringOrNull(terläuterung.getText())
+ ",select_stmt="
+ DBAccess.getStringOrNull(tselect.getText())
+ ",cleanup_stmt="
+ DBAccess.getStringOrNull(tcleanup.getText())
+ " ,xil_proplist="
+ DBAccess.getStringOrNull(txil.getText())
+ " where tid="
+ tid;
System.out.println(upd);
DBAccess.executeUpdate(upd);
linkToMain.setStatus("Maske aktualisiert!");
// DBAccess.UserListeNeuEinlesen();
mbt.neuAufbauen(DBAccess.getMaskenListe());
mbt.setSelection(tid);
}
catch (Exception e) {
JOptionPane.showMessageDialog(
null,
"Fehler beim Schreiben in die Datenbank:\n " + e.toString(),
"SuperX DB Admin",
JOptionPane.WARNING_MESSAGE);
e.printStackTrace();
System.exit(-1);
}
}
/* public Vector NutzerListeEinlesen() {
liste = new Vector();
Vector row;
Integer id;
String benutzer, email, name, max_versuch, akt_versuch, info;
try {
String query =
"select tid, benutzer,name,email,info,max_versuch,akt_versuch,passwd_sha from userinfo order by benutzer";
Statement statement = myConnection.createStatement();
ResultSet rs1 = statement.executeQuery(query);
while (rs1.next()) {
name=rs1.getString("passwd_sha");
id = (Integer) rs1.getObject("tid");
benutzer = rs1.getObject("benutzer").toString();
email = DBAccess.getString(rs1, "email");
info= DBAccess.getString(rs1,"info");
name = DBAccess.getString(rs1, "name");
max_versuch = DBAccess.getString(rs1, "max_versuch");
akt_versuch = DBAccess.getString(rs1, "akt_versuch");
row = new Vector();
row.add(id);
row.add(benutzer);
row.add(name);
row.add(email);
row.add(info);
row.add(max_versuch);
row.add(akt_versuch);
liste.add(row);
}
rs1.close();
statement.close();
}
catch (Exception e) {
JOptionPane.showMessageDialog(
null,
"Fehler beim Lesen aus der Datenbank: " + e.toString(),
"SuperX DB Admin",
JOptionPane.WARNING_MESSAGE);
e.printStackTrace();
}
return liste;
}*/
private void maskeGewählt() {
Vector zeile;
Integer test;
String help;Object help2;
for (Enumeration el = DBAccess.getMaskenListe().elements(); el.hasMoreElements();) {
zeile = ((Vector) el.nextElement());
test = (Integer) zeile.get(0);
if (test.intValue() == mbt.getSelectedID()) {
tname.setText((String) zeile.get(1));
tname.setCaretPosition(0);
terläuterung.setText((String) zeile.get(2));
terläuterung.setCaretPosition(0);
tselect.setText((String)zeile.get(3));
tselect.setCaretPosition(0);
tcleanup.setText((String)zeile.get(4));
tcleanup.setCaretPosition(0);
txil.setText((String)zeile.get(5));
tcleanup.setCaretPosition(0);
// System.out.println("Erl. Länge:"+terläuterung.getText().length());
}
}
this.repaint();
}
private void newPassword() {
try {
String passwd =
JOptionPane.showInputDialog(
this,
"Neues Passwort",
"SuperX",
JOptionPane.QUESTION_MESSAGE);
if (passwd==null) throw new Exception("Aktion abgebrochen");
String passwd2 =
JOptionPane.showInputDialog(
this,
"Passwort bestätigen",
"SuperX",
JOptionPane.QUESTION_MESSAGE);
if (passwd.equals(passwd2)) {
String upd_passwd_sha = null;
byte[] buf = passwd.getBytes();
byte[] digest = null;
StringBuffer passwd_str = new StringBuffer();
String value;
int n;
MessageDigest sha = MessageDigest.getInstance("SHA-1");
sha.update(buf);
digest = sha.digest();
for (int i = 0; i < digest.length; i++) {
n = (int) digest[i];
if (n < 0)
n += 256;
value = Integer.toHexString(n);
if (n < 16)
value = "0" + value;
passwd_str.append(value);
}
upd_passwd_sha =
"update userinfo set passwd_sha = '"
+ passwd_str
+ "'"
+ " where tid = "
+ linkToMain.getSelectedUser();
DBAccess.executeUpdate(upd_passwd_sha);
linkToMain.setStatus("Password geändert");
}
else
JOptionPane.showMessageDialog(
null,
"Eingaben stimmten nicht überein!",
"SuperX",
JOptionPane.WARNING_MESSAGE);
}
catch (Exception e) {
linkToMain.setStatus("Password nicht geändert!! "+e.toString());
}
}
private void benutzerLöschen() {
int rc =
JOptionPane.showConfirmDialog(
null,
"Benutzer wirklich löschen?",
"SuperX",
JOptionPane.YES_NO_OPTION);
if (rc == JOptionPane.YES_OPTION) {
try {
DBAccess.executeUpdate("delete from user_masken_bez where userinfo_id=" + linkToMain.getSelectedUser());
DBAccess.executeUpdate("delete from user_institution where userid=" + linkToMain.getSelectedUser());
DBAccess.executeUpdate("delete from user_group_bez where userinfo_id=" + linkToMain.getSelectedUser());
DBAccess.executeUpdate("delete from protokoll where userinfo_id=" + linkToMain.getSelectedUser());
DBAccess.executeUpdate("delete from userinfo where tid=" + linkToMain.getSelectedUser());
linkToMain.setStatus("Benutzer gelöscht");
DBAccess.userListeNeuEinlesen();
mbt.neuAufbauen(DBAccess.getUserListe());
linkToMain.setSelectedUser(mbt.getSelectedID());
}
catch (Exception e) {
linkToMain.setStatus("Ein Fehler ist aufgetreten - Benutzer nicht gelöscht");
}
}
}
private void benutzerAnlegen()
{
try {
Integer tid=(Integer)DBAccess.executeQuerySingleValue("select max(tid) as tid from userinfo");
int newtid=tid.intValue()+1;
String kennung =
JOptionPane.showInputDialog(
this,
"Kennung eingeben",
"SuperX",
JOptionPane.QUESTION_MESSAGE);
String ins="insert into userinfo values ("+newtid+",'"+kennung+"','',null,5,0,null,0,0,null,null)";
DBAccess.executeUpdate(ins);
//Startpasswort anfang setzten
String upd_passwd_sha = null;
String passwd="anfang";
byte[] buf = passwd.getBytes();
byte[] digest = null;
StringBuffer passwd_str = new StringBuffer();
String value;
int n;
MessageDigest sha = MessageDigest.getInstance("SHA-1");
sha.update(buf);
digest = sha.digest();
for (int i = 0; i < digest.length; i++) {
n = (int) digest[i];
if (n < 0)
n += 256;
value = Integer.toHexString(n);
if (n < 16)
value = "0" + value;
passwd_str.append(value);
}
upd_passwd_sha =
"update userinfo set passwd_sha = '"
+ passwd_str
+ "'"
+ " where tid = "
+ newtid;
DBAccess.executeUpdate(upd_passwd_sha);
DBAccess.userListeNeuEinlesen();
mbt.neuAufbauen(DBAccess.getUserListe());
mbt.setSelection(kennung);
maskeGewählt();
linkToMain.setStatus("Benutzer mit Standardpasswort angelegt!");
}
catch (Exception e)
{
linkToMain.setStatus("Interner Fehler: "+e.toString());
}
}
}

84
src/de/superx/dbadmin/Maskenauswahl.java

@ -1,84 +0,0 @@ @@ -1,84 +0,0 @@
package de.superx.dbadmin;
import java.awt.Container;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
class Maskenauswahl extends javax.swing.JDialog implements ActionListener {
Container cp;
JTextField tnummer;
int gewählt=-1;
MBComboBox mcb;
public Maskenauswahl(Frame owner) {
super(owner, "Maskenauswahl", true);
cp = getContentPane();
cp.setLayout(new GridLayout(4, 1));
JPanel titel = new JPanel();
JLabel ltitel = new JLabel("Nummer der Maske eingeben oder auswählen:");
ltitel.setFont(new Font("Arial", Font.BOLD, 14));
titel.add(ltitel);
cp.add(titel);
JPanel top = new JPanel();
JLabel lnr = new JLabel("Nummer:");
top.add(lnr);
tnummer = new JTextField(7);
top.add(tnummer);
cp.add(top);
JPanel combob=new JPanel();
mcb=new MBComboBox(DBAccess.getMaskenListe());
combob.add(mcb);
cp.add(combob);
JPanel down = new JPanel();
JButton bok = new JButton("OK");
bok.addActionListener(this);
down.add(bok);
JButton babbr = new JButton("Abbrechen");
babbr.addActionListener(this);
down.add(babbr);
cp.add(down);
pack();
setLocation(200, 200);
}
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand().equals("OK")) {
gewählt=mcb.getSelectedID();
String tb = tnummer.getText();
if (tb.length()>1)
try {
Integer dummy = new Integer(tb);
gewählt = dummy.intValue();
}
catch (Exception e) {
gewählt = -1;
}
this.setVisible(false);
}
if (event.getActionCommand().equals("Abbrechen")) {
gewählt = -1;
this.setVisible(false);
}
}
public int getGewählt()
{
return gewählt;
}
}

96
src/de/superx/dbadmin/Nachricht.java

@ -1,96 +0,0 @@ @@ -1,96 +0,0 @@
package de.superx.dbadmin;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
/**
* Insert the type's description here.
* Creation date: (21.01.2002 15:14:04)
* @author:
*/
class Nachricht extends JPanel implements ActionListener {
Connection myConnection;
SuperXDBAdmin linkToMain;
JTextField tnachricht = new JTextField(30);
public Nachricht(SuperXDBAdmin llinkToMain, Connection conn) {
super();
linkToMain = llinkToMain;
myConnection = conn;
this.setLayout(new GridLayout(3, 1));
JPanel p = new JPanel();
JLabel lbl = new JLabel("Aktuelle Nachricht");
lbl.setFont(new Font("Arial", Font.BOLD, 14));
p.add(lbl);
this.add(p);
JPanel p0 = new JPanel();
p0.add(tnachricht);
this.add(p0);
JPanel p1 = new JPanel();
JButton bspeich = new JButton("speichern");
bspeich.addActionListener(this);
p1.add(bspeich);
this.add(p1);
NachrichtHolen();
}
public void actionPerformed(ActionEvent event) {
// if (event.getActionCommand().equals("speichern"))
// NutzerRechteSpeichern();
if (event.getActionCommand().equals("speichern"))
NachrichtSpeichern();
}
private void NachrichtHolen() {
String nachricht = null;
try{
//prüfen ob Input gegeben
Object input =
DBAccess.executeQuerySingleValue("select aktuell from nachricht");
nachricht = input == null ? "<keine Nachricht>" : input.toString();
nachricht = nachricht.trim();
tnachricht.setText(nachricht);
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(
null,
"Fehler bei Datenbankzugriff: "+e.toString(),
"Nachricht",
1);
}
}
private void NachrichtSpeichern() {
try{
DBAccess.executeUpdate("delete from nachricht where 1=1");
if (tnachricht.getText() != null) {
String update =
"insert into Nachricht (aktuell) values('"
+ tnachricht.getText().trim()
+ "');";
DBAccess.executeUpdate(update);
NachrichtHolen();
}
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(
null,
"Fehler bei Datenbankzugriff: "+e.toString(),
"Nachricht",
1);
}
}
}

312
src/de/superx/dbadmin/OrgaBearbDialog.java

@ -1,312 +0,0 @@ @@ -1,312 +0,0 @@
package de.superx.dbadmin;
/**
* Insert the type's description here.
* Creation date: (12.09.01 19:20:55)
* @author: Administrator
*/
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;
import java.util.TimeZone;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.tree.DefaultMutableTreeNode;
class OrgaBearbDialog extends javax.swing.JDialog implements ActionListener {
OrgaEintrag2 derEintrag;
JTextField tname;
JTextField tdrucktext;
JTextField tkey;
JTextField tebene;
JTextField tparent;
JTextField tlehre;
JCheckBox clehre;
JTextField torgstruktur;
JTextField tgueltig_seit;
JTextField tgueltig_bis;
String oldKeyApnr;
java.sql.Date oldGueltigSeit, oldGueltigBis;
DefaultMutableTreeNode theNode, theRoot;
Vector ungültigeEinträge;
boolean bearbeiteNeueOrgaEinheit;
public OrgaBearbDialog(
Frame owner,
DefaultMutableTreeNode node,
Vector ungültigeE) {
super(owner, "OrgaEintrag bearbeiten", true);
bearbeiteNeueOrgaEinheit = false;
theNode = node;
theRoot = (DefaultMutableTreeNode) node.getRoot();
ungültigeEinträge = ungültigeE;
init();
}
public OrgaBearbDialog(
Frame owner,
DefaultMutableTreeNode node,
Vector ungültigeE,
DefaultMutableTreeNode lRoot) {
super(owner, "Neue OrgaEintrag bearbeiten", true);
bearbeiteNeueOrgaEinheit = true;
theNode = node;
theRoot = lRoot;
ungültigeEinträge = ungültigeE;
init();
}
public void actionPerformed(ActionEvent event) {
String cmd = event.getActionCommand();
if (cmd.equals("Abbrechen")) {
//wenn neue Einheit bearbeitet wird null zurückliefern, sonst einfach belassen wie's ist
if (bearbeiteNeueOrgaEinheit)
theNode = null;
this.setVisible(false);
this.dispose();
}
if (cmd.equals("OK"))
OKÄnderungAusführen();
}
public String dateToString(java.sql.Date inp) {
java.text.DateFormat df;
df = java.text.DateFormat.getDateInstance(java.text.DateFormat.MEDIUM);
// r.b. default Jahr 4-stellig
df.setTimeZone(TimeZone.getDefault());
df.setLenient(false);
String help = df.format((java.util.Date) inp);
return help;
}
public void init() {
derEintrag = (OrgaEintrag2) theNode.getUserObject();
Container cp = this.getContentPane();
cp.setLayout(new BorderLayout());
JPanel pcenter = new JPanel(new GridLayout(9, 1));
JPanel p1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
JLabel lname = new JLabel(" Name ");
tname = new JTextField(60);
tname.setText(derEintrag.getName());
p1.add(lname);
p1.add(tname);
pcenter.add(p1);
JPanel p1b=new JPanel(new FlowLayout(FlowLayout.LEFT));
JLabel ldrucktext=new JLabel("Drucktext ");
tdrucktext = new JTextField(60);
tdrucktext.setText(derEintrag.getDrucktext());
p1b.add(ldrucktext);p1b.add(tdrucktext);
pcenter.add(p1b);
JPanel p2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
JLabel lkey = new JLabel("Key_apnr ");
tkey = new JTextField(15);
tkey.setText(derEintrag.getKeyApnr().toString());
//keyapnr merken, da bei änderung children angepasst werden müssen s.u.
oldKeyApnr = derEintrag.getKeyApnr();
p2.add(lkey);
p2.add(tkey);
pcenter.add(p2);
JPanel p3 = new JPanel(new FlowLayout(FlowLayout.LEFT));
JLabel lebene = new JLabel("Ebene ");
tebene = new JTextField(3);
tebene.setText(derEintrag.getEbene().toString());
p3.add(lebene);
p3.add(tebene);
pcenter.add(p3);
JPanel p4 = new JPanel(new FlowLayout(FlowLayout.LEFT));
JLabel lparent = new JLabel("Parent: ");
Object parobj=derEintrag.getParent();
String itsParent;
if (parobj==null)
itsParent=""; else itsParent=parobj.toString();
tparent = new JTextField(itsParent);
JLabel lparentNum = new JLabel(itsParent);
p4.add(lparent);
p4.add(lparentNum);
pcenter.add(p4);
JPanel p5 = new JPanel(new FlowLayout(FlowLayout.LEFT));
JLabel llehre = new JLabel("Lehre");
//tlehre=new JTextField(derEintrag.getLehre().toString());
clehre = new JCheckBox("Lehre", derEintrag.isLehre());
p5.add(clehre);
pcenter.add(p5);
JPanel p5b = new JPanel(new FlowLayout(FlowLayout.LEFT));
JLabel lorgstruktur=new JLabel("Orgstruktur");
torgstruktur=new JTextField(4);
Object help_orgstruktur=derEintrag.getOrgstruktur();
String help_orgstruktur2;
if (help_orgstruktur==null) help_orgstruktur2=""; else help_orgstruktur2=help_orgstruktur.toString();
torgstruktur.setText(help_orgstruktur2);
p5b.add(lorgstruktur);p5b.add(torgstruktur);
pcenter.add(p5b);
JPanel p6 = new JPanel(new FlowLayout(FlowLayout.LEFT));
JLabel lgueltig_seit = new JLabel("gültig seit");
oldGueltigSeit = derEintrag.getGueltigSeit();
tgueltig_seit = new JTextField(dateToString(oldGueltigSeit));
p6.add(lgueltig_seit);
p6.add(tgueltig_seit);
pcenter.add(p6);
JPanel p7 = new JPanel(new FlowLayout(FlowLayout.LEFT));
JLabel lgueltig_bis = new JLabel("gültig bis ");
oldGueltigBis = derEintrag.getGueltigBis();
tgueltig_bis = new JTextField(dateToString(oldGueltigBis));
p7.add(lgueltig_bis);
p7.add(tgueltig_bis);
pcenter.add(p7);
cp.add(pcenter, BorderLayout.CENTER);
JPanel pOKAbr = new JPanel();
JButton OK = new JButton("OK");
OK.addActionListener(this);
pOKAbr.add(OK);
JButton Abbr = new JButton("Abbrechen");
Abbr.addActionListener(this);
pOKAbr.add(Abbr);
cp.add(pOKAbr, BorderLayout.SOUTH);
//this.setSize(250,190);
this.pack();
this.setLocation(100, 100);
this.show();
}
public boolean keyApnrOK(String keyApnr) {
Enumeration en;
DefaultMutableTreeNode aNode;
OrgaEintrag2 x;
boolean isOK = true;
for (en = theRoot.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
// nicht mit sich selbst und root vergleichen (root "Hochschule" hat keine key_apnr -> null pointer exception)
if (!aNode.equals(theNode) && !aNode.equals(theRoot)&&aNode.getUserObject() instanceof OrgaEintrag2) {
x = (OrgaEintrag2) aNode.getUserObject();
if (keyApnr.equals(x.getKeyApnr()))
isOK = false;
}
}
return isOK;
}
public boolean neueGültigkeitOK(
String newKeyApnr,
java.sql.Date gs,
java.sql.Date gb) {
boolean isOK = true;
boolean pruef1, pruef2;
OrgaEintrag2 x;
for (Enumeration el = ungültigeEinträge.elements(); el.hasMoreElements();) {
x = (OrgaEintrag2) el.nextElement();
if (x.getKeyApnr().equals(newKeyApnr)) {
pruef1 = (gs.before(x.getGueltigSeit()) && gb.before(x.getGueltigSeit()));
pruef2 = (gs.after(x.getGueltigBis()) && gb.after(x.getGueltigBis()));
if ((pruef1 == false) && (pruef2 == false))
isOK = false;
}
}
return isOK;
}
public void OKÄnderungAusführen() {
OrgaEintrag2 einEintrag;
String neuname = tname.getText();
String newKeyApnr = tkey.getText().trim();
if (!keyApnrOK(newKeyApnr)) {
JOptionPane.showMessageDialog(
null,
"Key_apnr bereits vergeben!",
"SuperX DB Admin",
JOptionPane.WARNING_MESSAGE);
return;
}
//wenn sich die KeyApnr geändert hat, muss auch
//der parent-Eintrag der direkten Kinder geändert werden
DefaultMutableTreeNode x;
if (!newKeyApnr.equals(oldKeyApnr)) {
Enumeration en = theNode.children();
while (en.hasMoreElements()) {
x = (DefaultMutableTreeNode) en.nextElement();
einEintrag = (OrgaEintrag2) x.getUserObject();
einEintrag.setParent(newKeyApnr);
}
}
String drucktext=tdrucktext.getText();
Integer neuEbene = new Integer(tebene.getText());
// parent nur automatisch ändern
// derEintrag.parent=new Integer(tparent.getText());
int lehre = clehre.isSelected() ? 1 : 0;
Integer neulehre = new Integer(lehre);
Integer orgstruktur=torgstruktur.getText().equals("")?null:new Integer(torgstruktur.getText());
java.sql.Date gs = stringToDate(tgueltig_seit.getText());
java.sql.Date gb = stringToDate(tgueltig_bis.getText());
if (gs == null || gb == null || gb.before(gs)) {
JOptionPane.showMessageDialog(
null,
"Fehler in Datumsfeldern!",
"SuperX DB Admin",
JOptionPane.WARNING_MESSAGE);
return;
}
//prüfen falls sich an Gültigkeitseinträgen was geändert hat
if (!oldGueltigSeit.equals(gs) || !oldGueltigBis.equals(gb)) {
if (!neueGültigkeitOK(newKeyApnr, gs, gb)) {
JOptionPane.showMessageDialog(
null,
"Die eingegebene Gültigkeit überlappt sich\nmit der Gültigkeit einer schon bestehenden key_apnr!",
"SuperX DB Admin",
JOptionPane.WARNING_MESSAGE);
return;
} else
JOptionPane.showMessageDialog(
null,
"Die Gültigkeit wurde geändert!\nGgf. Organigramm neu einlesen oder Stand ändern!",
"SuperX DB Admin",
JOptionPane.INFORMATION_MESSAGE);
}
derEintrag.name = neuname;
derEintrag.drucktext=drucktext;
derEintrag.key_apnr = newKeyApnr;
derEintrag.lehre = neulehre;
derEintrag.ebene = neuEbene;
derEintrag.orgstruktur=orgstruktur;
derEintrag.gueltig_seit = gs;
derEintrag.gueltig_bis = gb;
this.setVisible(false);
this.dispose();
}
public java.sql.Date stringToDate(String datum) {
java.text.DateFormat df;
df = java.text.DateFormat.getDateInstance(java.text.DateFormat.MEDIUM);
// r.b. default Jahr 4-stellig
df.setTimeZone(TimeZone.getDefault());
df.setLenient(false);
java.sql.Date date = null;
try {
java.util.Date date1 = df.parse(datum);
date = new java.sql.Date(date1.getTime());
} catch (Exception e) {
System.out.println(e.toString());
}
return date;
}
}

207
src/de/superx/dbadmin/OrgaEintrag2.java

@ -1,207 +0,0 @@ @@ -1,207 +0,0 @@
package de.superx.dbadmin;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import java.io.Serializable;
import java.sql.Date;
class OrgaEintrag2 implements Transferable, Serializable
{
final public static DataFlavor ORGA_FLAVOR= new DataFlavor(OrgaEintrag2.class,"orgaEintrag2");
static DataFlavor flavors[]={ORGA_FLAVOR};
String name;
String drucktext;
String key_apnr;
Integer ebene;
String parent;
Integer hierarchie;
Integer lehre;
Integer orgstruktur;
Integer erlaubt;
java.sql.Date gueltig_seit,gueltig_bis;
OrgaEintrag2()
{
name=null;
drucktext=null;
key_apnr=null;
ebene=null;
parent=null;
lehre=null;
gueltig_seit=null;
gueltig_bis=null;
orgstruktur=null;
erlaubt=null;
}
OrgaEintrag2(String lname, String ldrucktext,String lkey_apnr, Integer lebene,String lparent, Integer llehre, Date gs, Date gb, Integer lorgstruktur)
{
//akt. Änderung
char bindestrich=150;
name=lname;
if (name!=null) name=name.replace(bindestrich,'-');
drucktext=ldrucktext;
if (drucktext!=null) drucktext=drucktext.replace(bindestrich,'-');
key_apnr=lkey_apnr;
//if (key_apnr!=null&&key_apnr.equals("E07011100x"))
//test();
ebene=lebene;
parent=lparent;
lehre=llehre;
gueltig_seit=gs;
gueltig_bis=gb;
orgstruktur=lorgstruktur;
erlaubt=new Integer(0);
int i=0;
hierarchie=null;
}
private void test()
{
int i=1;
System.out.println((int)name.charAt(25));
int i2=1;
}
public void setHierarchie(Integer was)
{
hierarchie=was;
}
public String getDrucktext()
{
return drucktext;
}
public Integer getEbene()
{
return ebene;
}
public Integer getErlaubt()
{
return erlaubt;
}
public java.sql.Date getGueltigBis()
{
return gueltig_bis;
}
public void setGueltigBis(java.sql.Date bis)
{
gueltig_bis=bis;
}
public java.sql.Date getGueltigSeit()
{
return gueltig_seit;
}
public void setGueltigSeit(java.sql.Date seit)
{
gueltig_seit=seit;
}
public String getKeyApnr()
{
return key_apnr;
}
public Integer getLehre()
{
return lehre;
}
public String getName()
{
return name.trim();
}
public Integer getOrgstruktur()
{
return orgstruktur;
}
public String getParent()
{
return parent;
}
public Object getTransferData(DataFlavor df) throws UnsupportedFlavorException, IOException
{
if (df.equals(ORGA_FLAVOR)){
return this;
}
else throw new UnsupportedFlavorException(df);
}
public DataFlavor[] getTransferDataFlavors(){
return flavors;
}
// -----------transferable
public boolean isDataFlavorSupported(DataFlavor df)
{
return df.equals(ORGA_FLAVOR);
}
public boolean isLehre()
{
return lehre.intValue()==1?true:false;
}
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException {
in.defaultReadObject();
}
public void setDrucktext(String ldrucktext)
{
drucktext=ldrucktext;
}
public void setEbene(Integer neueEbene)
{
ebene=neueEbene;
}
public void setErlaubt(Integer erl)
{
erlaubt=erl;
}
public void setErlaubt(boolean was)
{
erlaubt=was?new Integer(1):new Integer(0);
}
public boolean isErlaubt()
{
return erlaubt.intValue()==0?false:true;
}
public void setKeyApnr(String was)
{
key_apnr=was;
}
public void setOrgstruktur(Integer lorgstruktur)
{
orgstruktur=lorgstruktur;
}
public void setParent(String was)
{
parent=was;
}
public String toString()
{
//akt. Änderung
String result="";
if (getKeyApnr()!=null)result+=getKeyApnr().trim()+"-";
result+=name.trim();
return result;
}
public void setLehre(Integer lehr)
{
lehre=lehr;
}
//-------serializable
private void writeObject(java.io.ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
}
public Integer getHierarchie()
{
return hierarchie;
}
}

574
src/de/superx/dbadmin/SuperXDBAdmin.java

@ -1,574 +0,0 @@ @@ -1,574 +0,0 @@
package de.superx.dbadmin;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.SQLWarning;
import java.util.Enumeration;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
import de.memtext.dlg.LoginDlg;
import de.memtext.util.PlafUtils;
import de.memtext.util.WindowUtils;
import de.memtext.widgets.CardLayoutPanel;
import de.memtext.widgets.MBFrame;
import de.memtext.widgets.TitlePanel;
import de.memtext.widgets.WarningMessage;
/**
* Hauptklasse des SuperX-DBAdmintools
*
* @autor Meikel Bisping
*/
public class SuperXDBAdmin extends MBFrame implements ActionListener,
TreeSelectionListener {
private static final String TITLE = "SuperX-Admin 0.94 beta";
private Label erg,lnachricht;
private JPanel pcenter = null;
private CardLayoutPanel workPanel = null;
static JLabel status;
private static int selectedUser = -999, lastgroup = -999;
private Connection myConnection = null;
private SxSQL sxsql;
private JTree tree = null;
private AdminOrga adminOrga;
private ThemenbaumPanel themenbaumPanel;
private UserStammPanel userStammPanel;
private UserGroupMembershipPanel userGroupMembershipPanel;
private GroupStammPanel groupStammPanel;
private UserThemenPanel userThemenPanel;
private JScrollPane taskSelectionScrollPane;
private TreePath lastSelectedPath;
private boolean isAutoLogin = true;
boolean selectionZurückgesetzt = false;
private String sxTitle, serverURL, logToKonsole, myDocBase;
//hier werden die Knoten im Auswahlbaum definiert,
//(-> makeTree())
//wenn ein Knoten angeklickt wird, wird in der
//Methode valueChanged überprüft, um welchen Knoten
//es sich handelt. z.B. if (angeklickterKnoten==userthemen) zeige...
private DefaultMutableTreeNode root, userv, usereinzel, userstamm,
userthemen, userinst, gruppen, gruppenstamm, gruppenmitgliedschaft,
gruppenthemen, gruppeninst, nachricht, maskenverw, maskeändern,
maskelöschen, organigramm, themenb;
/*
* Konstruktor, baut Hauptauswahlfenster auf, es wird ein BorderLayout
* benutzt im Zentrum ist ein FlowLayout Panel mit links dem Auswahlbaum und
* rechts dem "Themenblatt", das wird je nach angeklicktem Knoten
* ausgetauscht
*/
public SuperXDBAdmin(String propfile, String docBase) {
super(TITLE);
WarningMessage.show(this,"Veraltet - GEHT NICHT -müsste überarbeitet werden","Achtung");
//TODO statt Vector in Vector SxResultSet mit SxResultRows!!!
setSystemExitOnClose(false);
SxDefaults.setPropertyFile(propfile);
SxDefaults.setDefaultServerUrl(getCorrectDocBase(docBase));
PlafUtils.setWindowsLook(this);
try {
SxDefaults.setDefaultServerUrl(getDefaultServerUrl(docBase));
SxDefaults.init();
serverURL = (String) SxDefaults.getPropertyValue("SxServerURL");
} catch (Exception ex) {
System.err.println(ex);
JOptionPane.showMessageDialog(null, ex.toString(), "Fehler",
JOptionPane.ERROR_MESSAGE);
}
try {
logToKonsole = (String) SxDefaults.getPropertyValue("logToKonsole");
} catch (Exception ex) {
logToKonsole = "none";
}
try {
sxTitle = (String) SxDefaults.getPropertyValue("SxTitle");
} catch (Exception ex) {
}
String user = new String("");
String passwd = new String("");
try {
LoginDlg dlg = new LoginDlg(this, "AdminTool Anmeldung");
WindowUtils.center(dlg);
if (!isAutoLogin)
dlg.show();
user = dlg.getUsername();
passwd = dlg.getPassword();
if (isAutoLogin) {
user = "superx";
passwd = "anfang12";
}
if (user == null || passwd == null)
System.exit(1);
// DBAccess.init(url,driverClass,"superx","");
DBAccess.init(serverURL, logToKonsole, user, passwd);
// String user = props.getProperty("Username");
// String passwd = props.getProperty("Passwort");
/*
* try { Class.forName(driverClass); myConnection =
* DriverManager.getConnection(url, user, passwd);
* checkForWarning(myConnection.getWarnings());
* dropTempTables(myConnection); DatabaseMetaData myDatabaseMetaData =
* myConnection.getMetaData(); } catch (Exception e) {
* JOptionPane.showMessageDialog( null, "Fehler beim Aufbau der
* Datenbankverbindung:\n " + e.toString(), "SuperX DB Admin",
* JOptionPane.WARNING_MESSAGE); e.printStackTrace();
* System.exit(-1); } DBAccess.setConnection(myConnection);;
*/
//p.add(p1);
//this.add(p);
/*
* JPanel p2 = new JPanel(new FlowLayout(FlowLayout.CENTER));
* JButton button = new JButton("Organigramm");
* button.addActionListener(this); p2.add(button); JButton button2 =
* new JButton("Themenbaum"); button2.addActionListener(this);
* button2.setEnabled(false); p2.add(button2); JButton bnachr = new
* JButton("Nachricht festlegen"); bnachr.addActionListener(this);
* p2.add(bnachr); p.add(p2); JPanel p3 = new JPanel(new
* FlowLayout(FlowLayout.CENTER)); JLabel luser=new JLabel("User");
* luser.setFont(new Font("Arial", Font.BOLD, 12)); p3.add(luser);
* JButton bstamm = new JButton("Stammdaten"); bstamm.setFont(new
* Font("Arial", Font.PLAIN, 10)); bstamm.addActionListener(this);
* p3.add(bstamm); JButton bgroup = new JButton("Gruppen");
* bgroup.setFont(new Font("Arial", Font.PLAIN, 10));
* bgroup.addActionListener(this); p3.add(bgroup);
*
* JButton babfrage = new JButton("Rechte für Abfragen");
* babfrage.setFont(new Font("Arial", Font.PLAIN, 10));
* babfrage.addActionListener(this); p3.add(babfrage); JButton
* binst=new JButton("Rechte für Institutionen"); binst.setFont(new
* Font("Arial", Font.PLAIN, 10)); binst.addActionListener(this);
* p3.add(binst); p.add(p3);
*/
setNorth(new TitlePanel(TITLE));
// lnachricht = new Label(this.getNachricht());
// lnachricht.setBackground(java.awt.Color.cyan);
// this.add(lnachricht);
initCenterPanel();
//cp.add("Center",pcenter);
JPanel down = new JPanel(new GridLayout(2, 1));
JPanel p4 = new JPanel(new FlowLayout(FlowLayout.CENTER));
JButton Ende = new JButton("Ende");
Ende.setFont(new Font("Arial", Font.BOLD, 14));
//OK.setSize(14,100);
Ende.addActionListener(this);
p4.add(Ende);
down.add(p4);
JPanel p5 = new JPanel();
p5.setBorder(BorderFactory.createEtchedBorder());
status = new JLabel();
p5.add(status);
down.add(p5);
setSouth(down);
setLocation(50, 50);
setSize(700, 700);
initWorkPanel();
setVisible(true);
backupsAnlegen();
} catch (Exception e) {
JOptionPane.showMessageDialog(null,
"Fehler beim Aufbau der Datenbankverbindung:\n "
+ e.toString(), "SuperX DB Admin",
JOptionPane.WARNING_MESSAGE);
e.printStackTrace();
setVisible(false);
System.exit(-1);
}
}
private void initWorkPanel() {
workPanel.add(new JPanel(), "leer");
adminOrga = new AdminOrga();
workPanel.add(adminOrga, "adminOrga");
themenbaumPanel = new ThemenbaumPanel();
workPanel.add(themenbaumPanel, "themenbaumPanel");
userStammPanel = new UserStammPanel();
workPanel.add(userStammPanel, "userStammPanel");
userGroupMembershipPanel=new UserGroupMembershipPanel();
workPanel.add(userGroupMembershipPanel, "userGroupMembershipPanel");
groupStammPanel=new GroupStammPanel();
workPanel.add(groupStammPanel, "groupStammPanel");
userThemenPanel=new UserThemenPanel();
workPanel.add(userThemenPanel,"userThemenPanel");
}
private String getDefaultServerUrl(String docBase) {
String prop_file = docBase + "superx.properties";
//System.out.println("prop_file: " + prop_file); //Wint
int pos = docBase.indexOf("superx/applet");
String defaultServerUrl = null;
if (pos > 0) {
defaultServerUrl = docBase.substring(0, pos)
+ "superx/servlet/SuperXDBServlet";
//System.out.println("default URL of Servlet:
// "+defaultServerUrl);
} else {
System.out
.println("Can't identify SxServerURL automatically, since CodeBase doesn't contain super/applet.SxServerURL has to be specified in superx.properties");
}
return defaultServerUrl;
}
public void actionPerformed(ActionEvent event) {
String cmd = event.getActionCommand();
if (cmd.equals("Ende")) {
this.setVisible(false);
System.exit(1);
}
}
protected void doBeforeExit() {
setVisible(false);
try {
DBAccess.sxsql.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
private void backupsAnlegen() {
/*
* try{
*
* Statement statement=myConnection.createStatement();
* statement.execute("unload to orgamb.bak select * from organigramm");
* setStatus("Backups angelegt!"); }
*
* catch (Exception e) { setStatus(" <html> <font color=red>Achtung!
* Fehler beim Anlegen der Backups!"+e.toString()+" </font> </html>"); }
*/
}
private static void checkForWarning(SQLWarning warn) throws SQLException {
if (warn != null) {
System.out.println("***** Eine Warnung ist aufgetreten *****");
while (warn != null) {
System.out.println("SQL State: " + warn.getSQLState()
+ "\nMessage: " + warn.getMessage() + "\nVendor: "
+ warn.getErrorCode());
warn = warn.getNextWarning();
}
} else {
//System.out.println("***** Datenbankverbindung aufgebaut *****");
}
}
private void dropTempTables(Connection myConnection) {
/*
* try{ DatabaseMetaData dmd = myConnection.getMetaData(); Statement
* stmt = myConnection.createStatement(); String sql;
*
* String[] type = {"TABLE","GLOBAL TEMPORARY", "LOCAL TEMPORARY" };
*
*
* stmt.execute("create temp table tmp_orga7 (institut integer) ;");
* ResultSet rs= dmd.getTables(null,null,"tmp%",type); //ResultSet rs=
* dmd.getTableTypes();
*
*
* while(rs.next()) { sql="drop table "+rs.getString("TABLE_NAME");
* stmt.execute(sql); // System.out.println(rs.getString(1)); };
* rs.close(); stmt.close(); } catch (SQLException e) {
* System.out.println(e.toString()); }
*/}
public static int getLastGroup() {
return lastgroup;
}
public static int getSelectedUser() {
return selectedUser;
}
public static void main(String[] args) {
//SuperXDBAdmin wnd = new SuperXDBAdmin("file:superx.properties", System .getProperty("user.dir") + System.getProperty("file.separator"));
SuperXDBAdmin wnd = new SuperXDBAdmin("file:e:/mb/diss/workspace/superx/superx.properties", System .getProperty("user.dir") + System.getProperty("file.separator"));
wnd.setVisible(true);
}
private void makeTree() {
root = new DefaultMutableTreeNode("Admin");
organigramm = new DefaultMutableTreeNode("Organigramm");
root.add(organigramm);
themenb = new DefaultMutableTreeNode("Themenbaum");
root.add(themenb);
// nachricht=new DefaultMutableTreeNode("Nachricht");
//root.add(nachricht);
userv = new DefaultMutableTreeNode("Userverwaltung");
usereinzel = new DefaultMutableTreeNode("Einzeluser");
userstamm = new DefaultMutableTreeNode("Stammdaten");
gruppenmitgliedschaft = new DefaultMutableTreeNode(
"Gruppenmitgliedschaft");
userthemen = new DefaultMutableTreeNode("Themenrechte");
userinst = new DefaultMutableTreeNode("Institutionen");
usereinzel.add(userstamm);
usereinzel.add(gruppenmitgliedschaft);
// usereinzel.add(userthemen);
// usereinzel.add(userinst);
gruppen = new DefaultMutableTreeNode("Gruppen");
gruppenstamm = new DefaultMutableTreeNode("Stammdaten");
gruppenthemen = new DefaultMutableTreeNode("Themenrechte");
gruppen.add(gruppenstamm);
// gruppen.add(gruppenthemen);
//Gruppenrechte für Institutionen bisher nicht vorgesehen
// gruppeninst= new DefaultMutableTreeNode("Institutionen");
// gruppen.add(gruppeninst);
userv.add(usereinzel);
userv.add(gruppen);
root.add(userv);
maskenverw = new DefaultMutableTreeNode("Maskenverwaltung");
maskelöschen = new DefaultMutableTreeNode("Maske löschen");
// maskenverw.add(maskelöschen);
maskeändern = new DefaultMutableTreeNode("Maske ändern");
maskenverw.add(maskeändern);
//root.add(maskenverw);
tree = new JTree(root);
tree.addTreeSelectionListener(this);
DefaultMutableTreeNode aNode;
TreePath tp;
for (Enumeration en = root.depthFirstEnumeration(); en
.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
tp = new TreePath(aNode.getPath());
if (tree.isCollapsed(tp))
tree.expandPath(tp);
}
}
public static void setLastGroup(int was) {
lastgroup = was;
}
public static void setSelectedUser(int was) {
selectedUser = was;
}
public static void setStatus(String stat) {
status.setText(stat);
}
public static String getStatus() {
return status.getText();
}
private void initCenterPanel() {
pcenter = new JPanel(new BorderLayout());
makeTree();
taskSelectionScrollPane = new JScrollPane(tree);
taskSelectionScrollPane.setMinimumSize(new Dimension(250, 400));
pcenter.add(taskSelectionScrollPane, BorderLayout.WEST);
workPanel = new CardLayoutPanel();
workPanel.setMinimumSize(new Dimension(400, 400));
workPanel.setBorder(BorderFactory.createLineBorder(Color.black));
pcenter.add(workPanel, BorderLayout.CENTER);
this.setCenter(pcenter);
this.validate();
this.repaint();
}
public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree
.getLastSelectedPathComponent();
if (selectionZurückgesetzt) {
selectionZurückgesetzt = false;
return;
}
if (adminOrga.isSaveNecessary() || themenbaumPanel.isSaveNecessary()) {
int erg = JOptionPane
.showConfirmDialog(
this,
"Achtung!\n Änderungen wurden noch nicht gespeichert.\n Wollen Sie wirklich wechseln?",
"SuperX DB Admin", JOptionPane.YES_NO_OPTION);
if (erg == JOptionPane.NO_OPTION) {
selectionZurückgesetzt = true;
//tree.clearSelection();
tree.setSelectionPath(lastSelectedPath);
return;
}
}
if (node == organigramm) {
setStatus("Lese Organigramm ein...");
adminOrga.backupAnlegen();
adminOrga.readTreeFromDb();
workPanel.show("adminOrga");
}
if (node == themenb) {
themenbaumPanel.readTreeFromDb(null);
workPanel.show("themenbaumPanel");
}
if (node == userstamm) {
userStammPanel.prepare();
workPanel.show("userStammPanel");
}
if (node == userthemen) {
userThemenPanel.prepare();
workPanel.show("userThemenPanel");
}
if (node == userinst) {
// workPanel = new UserInst(this);
}
if (node == gruppenstamm) {
groupStammPanel.prepare();
workPanel.show("groupStammPanel");
}
if (node == gruppenthemen) {
// workPanel = new GroupThemen(this);
}
if (node == gruppeninst) {
// workPanel = new GroupInst(this, myConnection);
}
if (node == gruppenmitgliedschaft) {
userGroupMembershipPanel.prepare();
workPanel.show("userGroupMembershipPanel");
}
if (node == nachricht) {
// workPanel = new Nachricht(this, myConnection);
}
if (node == maskeändern) {
// workPanel = new MaskeAendern(this);
}
if (node == maskelöschen) {
//Maske auswählen MaskenAuswahl
//Eintrag löschen in maskeninfo, themenbaum where T.maskeninfo_id=
//delete from felderinfo where in tid in (select felderinfo_id from
// maske_felder_bez where maskeninfo_id=x)
//delete from maske_felder_bez where maskeninfo_id=x
//delete from user_themen where maske=1 and id=x
//delte from group_themen where maske=1 and id=x
//
}
lastSelectedPath = tree.getSelectionPath();
}
/**
* Set the component's cursor to an hourglass.
*
* @param c
* The component over which to change the cursor.
*/
public static final void gotoWaitCursor(Component c) {
// Set cursor to notify user to wait.
c.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
}
/**
* Set the component's cursor to the default pointer.
*
* @param c
* The component over which to change the cursor.
*/
public static final void gotoDefaultCursor(Component c) {
// Set cursor back to what it was.
c.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
private String getCorrectDocBase(String docBase) {
if (docBase.indexOf(".htm") > 0 || docBase.indexOf(".html") > 0
|| docBase.indexOf(".jsp") > 0) {
int posSeparator = docBase.lastIndexOf("/");
//System.out.print("correcting docbase: shouldn't be "+docBase);
System.out.print("korrigiere docbase: sollte nicht " + docBase
+ " sein");
docBase = docBase.substring(0, posSeparator + 1);
System.out.println(" sondern " + docBase);
}
if (!docBase.substring(docBase.length() - 1, docBase.length()).equals(
"/")) {
System.out.println("docBase doesn't end with /, " + docBase
+ " trying to correct it by clipping");
int posSeparator = docBase.lastIndexOf("/");
docBase = docBase.substring(0, posSeparator + 1);
}
return docBase;
}
}

29
src/de/superx/dbadmin/SxAdminApplet.java

@ -1,29 +0,0 @@ @@ -1,29 +0,0 @@
package de.superx.dbadmin;
import javax.swing.JApplet;
public class SxAdminApplet
extends JApplet
{
SuperXDBAdmin sxdbadmin;
public void init()
{
String propfile= getCodeBase()+ "superx.properties";
System.out.println("propfile:"+propfile);
sxdbadmin = new SuperXDBAdmin(propfile,getDocumentBase().toString());
sxdbadmin.setLocation(50, 50);
sxdbadmin.setSize(700, 700);
}
public void start()
{
sxdbadmin.setVisible(true);
}
public void stop()
{
sxdbadmin.setVisible(false);
}
}
//Creation date: (05.02.2002 11:25:20)

111
src/de/superx/dbadmin/SxDate.java

@ -1,111 +0,0 @@ @@ -1,111 +0,0 @@
package de.superx.dbadmin;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;
/**
* Statische Klasse mit Hilfsfunktionen für Datumsobjekte.
*
* @version 2.0 01/01/02
* @author Rainer Behr, modified by Meikel Bisping
*/
public class SxDate {
static DateFormat df;
static java.util.Date date;
static java.sql.Date sql_date;
static Calendar calendar;
static {
df = DateFormat.getDateInstance(DateFormat.MEDIUM);
// r.b. default Jahr 4-stellig
df.setTimeZone(TimeZone.getDefault());
df.setLenient(false);
}
/**
* Wandelt einen String in ein java.sql.Date-Objekt um.
* @param value umzuformender String
* @return java.sql.Date-Objekt. Wenn der String nicht in Ordnung ist, wird NULL zurückgeliefert.
*/
public static java.sql.Date getDate(String value) {
try {
if (value.endsWith("00")) {
switch (value.charAt(value.length() - 3)) {
case '-' :
case '.' :
case '/' :
value = value.substring(0, value.length() - 2) + "2000";
break;
}
}
date = df.parse(value);
calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
if (year >= 0 && year < 30)
calendar.add(Calendar.YEAR, 2000);
if (year >= 30 && year < 100)
calendar.add(Calendar.YEAR, 1900);
sql_date = new java.sql.Date(calendar.getTime().getTime());
return sql_date;
} catch (ParseException e_parse) {
// System.err.println ("SxDate: ERROR: parse: Date != " + value);
} catch (IllegalArgumentException e_arg) {
// System.err.println ("SxDate: ERROR: arg: Date != " + value);
}
return null;
}
/**
* Wandelt ein java.sql.Date-Objekt in einen String um.
* @param value umzuwandelndes sql.Date-Objekt
* @return String
*/
public static String toString(java.sql.Date aDate) {
return df.format((java.util.Date) aDate);
}
/**
* Liefert das aktuelle Datum als String zurück.
* @return aktuelles Datum als String
*/
public static String getTodayString() {
GregorianCalendar cal = new GregorianCalendar();
String today =
cal.get(Calendar.DATE)
+ "."
+ (cal.get(Calendar.MONTH) + 1)
+ "."
+ cal.get(Calendar.YEAR);
return today;
}
public static String getNowString() {
GregorianCalendar cal = new GregorianCalendar();
String jetzt =
cal.get(Calendar.DATE)
+ "."
+ (cal.get(Calendar.MONTH) + 1)
+ "."
+ cal.get(Calendar.YEAR)
+ " "
+ (cal.get(Calendar.HOUR_OF_DAY))
+ ":"
+ cal.get(Calendar.MINUTE)
+ ":"
+ cal.get(Calendar.SECOND);
return jetzt;
}
}

144
src/de/superx/dbadmin/SxDefaults.java

@ -1,144 +0,0 @@ @@ -1,144 +0,0 @@
package de.superx.dbadmin;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Properties;
import javax.swing.JOptionPane;
/**
* Defaultwerte werden aus superx.properties-Datei eingelesen (der wichtigste Wert ist SxServerURL, die URL des Servlets).
* <br>Weiterhin werden Defaultwerte von Auswahlfeldern (wie Semester oder Hörerstatus) abgelegt und wieder abgerufen.Diese Funktion wird in SxForm genutzt.
* @version 1.0 23.4.99
* @author Rainer Behr
*/
public class SxDefaults
{
static Hashtable defaults_map;
static String propertyFile;
static String defaultServerUrl;
static
{
defaults_map = new Hashtable ();
propertyFile = null;
}
public static void setPropertyFile (String file)
{
propertyFile = new String (file);
}
public static void addProperty (String name, Object nkey, Object nvalue)
{
Properties prop = new Properties ();
prop.put ("key", nkey);
prop.put ("value", nvalue);
defaults_map.put (name, prop);
}
public static Properties getProperty (String name)
{
Properties prop = (Properties) defaults_map.get (name);
return prop;
}
public static Object getPropertyValue (String name)
{
Properties prop = (Properties) defaults_map.get (name);
if (prop != null)
return prop.getProperty ("value");
else
{
String msg = "Property '" + name + "' in 'superx.properties' nicht gefunden !";
throw new NullPointerException (msg);
}
}
public static void contents()
{
Enumeration en;
Properties prop;
String name;
Object key;
Object value;
en = defaults_map.keys();
while (en.hasMoreElements())
{
name = (String) en.nextElement();
prop = (Properties) SxDefaults.getProperty (name);
if (prop == null)
continue;
key = prop.get ("key");
value = prop.get ("value");
//System.out.println (name + ": key=" + key.toString() + ", value=" + value.toString());
}
}
public static void clear()
{
defaults_map.clear();
defaults_map = new Hashtable ();
init ();
}
public static void init ()
{
// Default Properties
// ---------------------------------------------------------------------
String prop_file;
Properties props = new Properties();
int b_len = 0;
if (propertyFile != null)
prop_file = propertyFile;
else
prop_file = "file:superx.properties";
try
{
URL props_url = new URL (prop_file);
InputStream is = props_url.openStream();
if (is == null)
{
String msg = "Ressourcedatei '" + prop_file + "' nicht gefunden.";
throw new IOException (msg);
}
props.load (is);
is.close ();
// Properties in Class SxDefaults einfuegen
String key;
String value;
if (props.getProperty("SxServerURL")==null)
props.setProperty("SxServerURL",defaultServerUrl);
Enumeration en = props.propertyNames();
while (en.hasMoreElements())
{
key = (String) en.nextElement();
value = (String) props.getProperty (key);
addProperty (key, key, value);
}
}
catch (IOException ex)
{
System.err.println (ex);
JOptionPane.showMessageDialog(null, ex.toString(), "Fehler",
JOptionPane.ERROR_MESSAGE);
}
}
public static void setDefaultServerUrl (String url)
{
defaultServerUrl=url;
}
}

746
src/de/superx/dbadmin/SxSQL.java

File diff suppressed because one or more lines are too long

95
src/de/superx/dbadmin/SxSQLMetaData.java

@ -1,95 +0,0 @@ @@ -1,95 +0,0 @@
package de.superx.dbadmin;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.Vector;
import de.superx.common.SuperX_el;
/**
* The SxSQLMetaData class is a subset implementation of the
* JDBC ResultSetMetaData interface.<BR>
* Last modified %D%
* @version %A%
* @author Rainer Behr (rainer@rbehr.de)
*/
public class SxSQLMetaData implements Serializable
{
private Vector V_cols = new Vector ();;
private int numColumns = -1;
public SxSQLMetaData (SuperX_el gesamt)
throws SQLException
{
// used MetaData
// -------------
// String getColumnName(int column)
// String getColumnLabel(int column)
// int getColumnDisplaySize(int column)
// int getColumnType(int column)
// int getScale(int column)
// boolean isWritable(int column)
//ResultSetMetaData meta = resultset.getMetaData();
numColumns = gesamt.getColumnCount();
for (int i = 0; i < numColumns; i++)
{
Vector V_column = new Vector();
V_column.add (0, gesamt.getColumnNames() [i]);
V_column.add (1, gesamt.getColumnLabels() [i]);
V_column.add (2, new Integer (gesamt.getColumnDisplaySizes() [i]));
V_column.add (3, new Integer (gesamt.getColumnTypes() [i]));
V_column.add (4, new Integer (gesamt.getScales() [i]));
V_column.add (5, new Boolean (gesamt.getisWritable() [i]));
V_cols.add (V_column);
}
}
public int getColumnCount()
{
return numColumns;
}
public String getColumnName (int column)
{
Vector V_column = (Vector) V_cols.elementAt (column - 1);
return (String) V_column.elementAt (0);
}
public String getColumnLabel (int column)
{
Vector V_column = (Vector) V_cols.elementAt (column - 1);
return (String) V_column.elementAt (1);
}
public int getColumnDisplaySize (int column)
{
Vector V_column = (Vector) V_cols.elementAt (column - 1);
return ((Integer) V_column.elementAt (2)).intValue();
}
public int getColumnType (int column)
{
Vector V_column = (Vector) V_cols.elementAt (column - 1);
return ((Integer) V_column.elementAt (3)).intValue();
}
public int getScale (int column)
{
Vector V_column = (Vector) V_cols.elementAt (column - 1);
return ((Integer) V_column.elementAt (4)).intValue();
}
public boolean isWritable (int column)
{
Vector V_column = (Vector) V_cols.elementAt (column - 1);
return ((Boolean) V_column.elementAt (5)).booleanValue();
}
}

184
src/de/superx/dbadmin/SxThemenEintrag2.java

@ -1,184 +0,0 @@ @@ -1,184 +0,0 @@
package de.superx.dbadmin;
/**
Eintrag für den Themenbaum
*/
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import java.io.Serializable;
class SxThemenEintrag2 implements Transferable, Serializable, Cloneable
{
final public static DataFlavor THEMEN_FLAVOR= new DataFlavor(SxThemenEintrag2.class,"SxThemenEintrag2");
static DataFlavor flavors[]={THEMEN_FLAVOR};
Integer tid;
String name;
Integer maskeninfo_id;
Integer parent;
String erlaeuterung;
boolean erlaubt;
java.sql.Date gueltig_seit,gueltig_bis ;
public SxThemenEintrag2()
{
tid=null;
name=null;
maskeninfo_id=null;
parent=null;
erlaeuterung=null;
erlaubt=false;
gueltig_seit=gueltig_seit.valueOf("1900-01-01");
gueltig_bis =gueltig_bis.valueOf("2999-01-01");;
}
public SxThemenEintrag2(Integer ltid,String lname)
{
tid=ltid;
name=lname;
gueltig_seit=gueltig_seit.valueOf("1900-01-01");
gueltig_bis =gueltig_bis.valueOf("2999-01-01");;
}
public SxThemenEintrag2(Integer ltid, String lname, Integer lnr, Integer lparent)
{
tid=ltid;
name=lname;
maskeninfo_id=lnr;
parent=lparent;
gueltig_seit=gueltig_seit.valueOf("1900-01-01");
gueltig_bis =gueltig_bis.valueOf("2999-01-01");;
}
public SxThemenEintrag2(Integer ltid, String lname, Integer lnr, Integer lparent, String lerlaeuterung,java.sql.Date lgueltig_seit,java.sql.Date lgueltig_bis)
{
tid=ltid;
name=lname;
maskeninfo_id=lnr;
parent=lparent;
erlaeuterung=lerlaeuterung;
erlaubt=false;
gueltig_seit=lgueltig_seit;
gueltig_bis=lgueltig_bis;
}
public boolean isErlaubt()
{
return erlaubt;
}
public void setErlaubt(boolean lerlaubt)
{
erlaubt=lerlaubt;
}
public Integer getTid()
{
return tid;
}
public void setTid(Integer ltid)
{
tid=ltid;
}
public String getName()
{
return name;
}
public Integer getMaskeninfo_id()
{
return maskeninfo_id;
}
public boolean isKnoten()
{
return maskeninfo_id==null?true:false;
}
public Integer getParent()
{
return parent;
}
public void setParent(Integer lparent)
{
parent=lparent;
}
public java.sql.Date getGueltigBis()
{
return gueltig_bis;
}
public void setGueltigBis(java.sql.Date bis)
{
gueltig_bis=bis;
}
public java.sql.Date getGueltigSeit()
{
return gueltig_seit;
}
public void setGueltigSeit(java.sql.Date seit)
{
gueltig_seit=seit;
}
public String getErlaeuterung()
{
return erlaeuterung;
}
public String toString()
{
return this.name;
}
public Object getTransferData(DataFlavor df) throws UnsupportedFlavorException, IOException
{
if (df.equals(THEMEN_FLAVOR)){
return this;
}
else throw new UnsupportedFlavorException(df);
}
public DataFlavor[] getTransferDataFlavors(){
return flavors;
}
// -----------transferable
public boolean isDataFlavorSupported(DataFlavor df)
{
return df.equals(THEMEN_FLAVOR);
}
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException {
in.defaultReadObject();
}
//-------serializable
private void writeObject(java.io.ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
}
public Object clone()
{
Object neu=null;
try
{
neu= super.clone();
}
catch (Exception e)
{}
return neu;
}
}

540
src/de/superx/dbadmin/SxUtils.java

@ -1,540 +0,0 @@ @@ -1,540 +0,0 @@
package de.superx.dbadmin;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Vector;
/**
* Die Klasse SxUtils führt String-Operationen zur Vorbereitung von Datenbank-Transaktionen durch
*
*
* @author R.Behr modified by Marlies Winterstein
* @version 2.0, 5 Jan 1998 - 0.9, 31 July 1998 modified 01-2002
*
*/
public class SxUtils
{
public final static int bufSize = 32 * 1024;
public final static String errString = "--ERROR--";
private static String COMM_START = "/*";
private static String COMM_END = "*/";
private static int COMM_START_LEN = COMM_START.length();
private static int COMM_END_LEN = COMM_END.length();
private static String COMMENT1_ANF = "{";
private static String COMMENT1_END = "}";
private static String COMMENT2_ANF = "--";
private static String COMMENT2_END = "\n";
private static String COMMENT3_ANF = "/*";
private static String COMMENT3_END = "*/";
private static String COMMENT1_ANF_MASK = "#K#";
private static String COMMENT1_END_MASK = "#/K";
private static String COMMENT2_ANF_MASK = "#S#";
private static String COMMENT2_END_MASK = "#/S#";
private static String COMMENT3_ANF_MASK = "#*A#";
private static String COMMENT3_END_MASK = "#*E#";
private static String PREV_POS = ">>";
private static String PREV_POS_MASK =">#>";
private static String NEXT_POS = "<<";
private static String NEXT_POS_MASK ="<#<";
private static String SELECT_DELIMITER=";";
private static String SELECT_DELIMITER_MASK="^";
private static String STR_DELIMITER1="\"";
private static String STR_DELIMITER1_MASK="#s1#";
private static String STR_DELIMITER2="'";
private static String STR_DELIMITER2_MASK="#s2#";
private static StringBuffer buffer;
private static String prev_str;
static
{
buffer = new StringBuffer (bufSize);
}
public synchronized static void setFieldDelimiter (String field_start, String field_end)
{
if (field_start != null)
{
if (field_start.length() == 0)
NEXT_POS = "";
else
NEXT_POS = field_start.substring (0, field_start.length() - 1);
}
if (field_end != null)
{
if (field_end.length() == 0)
PREV_POS = "";
else
PREV_POS = field_end.substring (0, field_end.length() - 1);
}
}
public static String getFieldPrefix ()
{
return new String (NEXT_POS);
}
public static String getFieldSuffix ()
{
return new String (PREV_POS);
}
public synchronized static void setComment (String comm_start, String comm_end)
{
if (comm_start != null)
{
COMM_START = comm_start;
COMM_START_LEN = comm_start.length();
}
if (comm_end != null)
{
COMM_END = comm_end;
COMM_END_LEN = comm_end.length();
}
}
public synchronized static String deleteComment (String str, String comm_start_str, String comm_end_str)
{
String return_str;
String search_str = comm_start_str;
int comm_end = -1;
int pos = -1;
int offset = 0;
int len = str.length();
int search_len = search_str.length();
try
{
while (offset < len)
{
if ((pos = str.indexOf (search_str, offset)) != -1)
{
prev_str = str.substring (offset, pos);
comm_end = str.indexOf (comm_end_str, pos + search_len);
if (comm_end == -1)
throw new Exception ("no Comment-End found");
buffer.append (prev_str);
offset = comm_end + comm_end_str.length();
}
else
{
buffer.append (str.substring (offset, len));
offset = len;
}
}
}
catch (Exception e)
{
System.err.println (e.toString());
buffer.append (errString);
buffer.append (search_str);
}
return_str = buffer.toString();
buffer.setLength (0);
return return_str;
}
public synchronized static String replace (String str, String search_str, String replace_str)
{
String return_str;
boolean delete_comment = false;
int pos = -1;
int offset = 0;
int len = str.length();
int search_len = search_str.length();
int comm_start = -1;
int comm_end = -1;
int prev_pos = -1;
int next_pos = -1;
int mode = -1;
// mode: 0 = kein Kommentar,
// 1 = Kommentar loeschen mit Ersetzung,
// 2 = Loeschen von COMM_START bis COMM_END
try
{
delete_comment = replace_str.equals ("");
while (offset < len)
{
mode = -1;
if ((pos = str.indexOf (search_str, offset)) != -1)
{
prev_str = str.substring (offset, pos);
comm_start = prev_str.lastIndexOf (COMM_START);
prev_pos = prev_str.lastIndexOf (PREV_POS);
comm_end = str.indexOf (COMM_END, pos + search_len);
next_pos = str.indexOf (NEXT_POS, pos + search_len);
if (comm_start >= 0 && prev_pos >= 0) // kein Kommentar
if (comm_start < prev_pos)
comm_start = -1;
if (comm_end >= 0 && next_pos >=0) // kein Kommentar
if (comm_end > next_pos)
comm_end = -1;
if (comm_start != -1 &&
comm_end != -1 &&
comm_start <= pos &&
comm_end >= pos)
{
if (delete_comment) // keine Ersetzung,
mode = 2; // Loeschen von '/*' - '*/'
else
mode = 1;
}
else
mode = 0;
switch (mode)
{
case 0:
{
buffer.append (prev_str);
buffer.append (replace_str);
offset = pos + search_len;
break;
}
case 1:
{
buffer.append (prev_str.substring (0, comm_start));
buffer.append (prev_str.substring (comm_start + COMM_START_LEN));
buffer.append (replace_str);
buffer.append (str.substring (pos + search_len, comm_end));
offset = comm_end + COMM_END_LEN;
break;
}
case 2:
{
buffer.append (prev_str.substring (0, comm_start));
offset = comm_end + COMM_END_LEN;
break;
}
default:
throw new Exception (errString);
}
}
else
{
buffer.append (str.substring (offset, len));
offset = len;
}
}
}
catch (Exception e)
{
buffer.append (errString);
buffer.append (search_str);
}
return_str = buffer.toString();
buffer.setLength (0);
return return_str;
}
public synchronized static Vector getHeader (String str)
{
Vector header = new Vector ();
int pos = 0;
int end_pos = 0;
int offset = 0;
int len = str.length();
String search_str = "heading_text=\"";
String header_str = null;
int search_len = search_str.length();
while (offset < len)
{
if ((pos = str.indexOf (search_str, offset)) != -1)
{
if ((end_pos = str.indexOf ("\"", pos + search_len)) != -1)
{
header_str = str.substring (pos + search_len, end_pos);
header.addElement (header_str);
offset = pos + search_len + header_str.length() + 1;
}
else
break;
}
else
break;
}
return header;
}
public synchronized static Vector getWidth (String str)
{
Vector width = new Vector ();
int pos = 0;
int end_pos = 0;
int offset = 0;
int len = str.length();
String search_str = "width=";
String width_str = null;
int search_len = search_str.length();
while (offset < len)
{
if ((pos = str.indexOf (search_str, offset)) != -1)
{
//gesucht wird bis Zeilenende, da keine Begrenzung durch "
if ((end_pos = str.indexOf ("\n", pos + search_len)) != -1)
{
width_str = str.substring (pos + search_len, end_pos);
//falls dummerweise danach noch weitere Eigenschaften in
//gleicher Zeile
int pos_leer = 0;
if ((pos_leer = width_str.indexOf(" ")) != -1)
width_str = width_str.substring(0, pos_leer);
width.addElement (width_str);
offset = pos + search_len + width_str.length() + 1;
}
else
break;
}
else
break;
}
return width;
}
public synchronized static String replaceString (String str, String search_str, String replace_str)
{
String zs="";
int offset = 0;
int pos = str.indexOf (search_str, offset);
while (pos>-1)
{
zs += str.substring(offset, pos);
zs += replace_str;
offset=pos + search_str.length();
pos= str.indexOf (search_str, offset);
}
zs += str.substring(offset,str.length());
return zs;
}
public synchronized static String escapeString (String str)
{
String escapeString;
str=replaceString(str,PREV_POS,PREV_POS_MASK);
str=replaceString(str,NEXT_POS,NEXT_POS_MASK);
str=replaceString(str,SELECT_DELIMITER,SELECT_DELIMITER_MASK);
str=replaceString(str,STR_DELIMITER1,STR_DELIMITER1_MASK);
str=replaceString(str,STR_DELIMITER2,STR_DELIMITER2_MASK);
str=replaceString(str,COMMENT1_ANF,COMMENT1_ANF_MASK);
str=replaceString(str,COMMENT2_ANF,COMMENT2_ANF_MASK);
str=replaceString(str,COMMENT3_ANF,COMMENT3_ANF_MASK);
str=replaceString(str,COMMENT1_END,COMMENT1_END_MASK);
//str=replaceString(str,COMMENT2_END,COMMENT2_END_MASK);
str=replaceString(str,COMMENT3_END,COMMENT3_END_MASK);
escapeString=str;
return escapeString;
}
public synchronized static String unescapeString (String str)
{
String unescapeString;
str=replaceString(str,PREV_POS_MASK,PREV_POS);
str=replaceString(str,NEXT_POS_MASK,NEXT_POS);
//str=replaceString(str,SELECT_DELIMITER_MASK, SELECT_DELIMITER);
str=replaceString(str,STR_DELIMITER1_MASK,STR_DELIMITER1);
str=replaceString(str,STR_DELIMITER2_MASK,"\\'"); //STR_DELIMITER2);
str=replaceString(str,COMMENT1_ANF_MASK,COMMENT1_ANF);
str=replaceString(str,COMMENT2_ANF_MASK,COMMENT2_ANF);
str=replaceString(str,COMMENT3_ANF_MASK,COMMENT3_ANF);
str=replaceString(str,COMMENT1_END_MASK,COMMENT1_END);
str=replaceString(str,COMMENT3_END_MASK,COMMENT3_END);
unescapeString=str;
return unescapeString;
}
public synchronized static String escapeSpecialChars (String str)
{
String escapeSpecialChars;
str=replaceString(str,SELECT_DELIMITER,"\\"+SELECT_DELIMITER);
str=replaceString(str,STR_DELIMITER1,"\\"+STR_DELIMITER1);
str=replaceString(str,STR_DELIMITER2,"\\"+STR_DELIMITER2);
//str=replaceString(str,"\\","\\\\");
//str=replaceString(str,"%","\\%");
escapeSpecialChars=str;
return escapeSpecialChars;
}
public synchronized static String GetValueAsString (Object value)
{
String field_type="";
String f_wert="";
String fehler="";
try {
if ((value instanceof java.sql.Date))
f_wert = "" +DateFormat.getDateInstance().format(value);
else
{
if (value instanceof java.sql.Timestamp)
f_wert = "" +DateFormat.getDateTimeInstance().format(value);
else
{
if (value instanceof java.sql.Time)
f_wert = "" +DateFormat.getTimeInstance().format(value);
else //default:
f_wert=value.toString();
}
}
}
catch (Exception e)
{
fehler=e.toString();
if (fehler.equals("java.lang.NullPointerException"))
f_wert="";
else
f_wert="Feldtyp unbekannt:"+fehler;
}
String GetValueAsString=f_wert;
return GetValueAsString;
}
public synchronized static String RelationString (String feldart, String relation, String attribut)
{
String stmt=relation;
if (stmt.startsWith ("<<SQL>>"))
{
stmt = stmt.substring (7);
}
if(attribut.trim().equals("")==false)
{
if (attribut.indexOf (',') == -1)
attribut = "tid, " + attribut;
stmt = "select " + attribut + " from " + relation + " order by 2";
}
if (feldart.equals("4"))
{
//Hier fehlt noch userrechte und lehre-Einschränkung
stmt = "SELECT organigramm.parent, organigramm.key_apnr, organigramm.name FROM organigramm WHERE gueltig_seit<now() And gueltig_bis>now() ORDER BY organigramm.name;";
}
if (feldart.equals("6") )
{
//6-Institutionsdialog für Lehreinheiten
stmt = "SELECT organigramm.parent, organigramm.key_apnr, organigramm.name FROM organigramm WHERE gueltig_seit<now() And gueltig_bis>now() ORDER BY organigramm.name;";
}
if (feldart.equals("7") )
{
//7-Institutionsdialog für Lehreinheiten ohne Einschr. Userrechte
stmt = "SELECT organigramm.parent, organigramm.key_apnr, organigramm.name FROM organigramm WHERE gueltig_seit<now() And gueltig_bis>now() ORDER BY organigramm.name;";
}
String RelationString=stmt;
return RelationString;
}
public static void main (String args[])
{
String sql_str = null;
String search_str = null;
String replace_str = null;
Properties props = new Properties();
if (args.length != 2)
{
System.err.println ("Usage: <filename> <propertyfile>");
System.exit(1);
}
String filename = "/" + args[0];
String propname = "/" + args[1];
try
{
byte [] buf = new byte[bufSize];
byte [] data = new byte[bufSize];
int read_len = 0, data_len = 0;
InputStream is = props.getClass().getResourceAsStream(filename);
if (is == null)
{
System.err.println ("Resource '" + filename + "' not found");
System.exit (1);
}
while (read_len != -1)
{
read_len = is.read (buf, 0, buf.length);
if (read_len != -1)
data_len = read_len;
}
is.close ();
data = new byte [data_len];
System.arraycopy (buf, 0, data, 0, data_len);
sql_str = new String (data);
is = props.getClass().getResourceAsStream(propname);
if (is == null)
{
System.err.println ("Resource '" + propname + "' not found");
System.exit (1);
}
props.load (is);
is.close ();
Enumeration en = props.propertyNames();
String key;
String value;
System.err.println ("sql ... ");
while (en.hasMoreElements())
{
key = (String) en.nextElement();
value = (String) props.getProperty (key);
key = "<<" + key + ">>";
System.err.println ("Key: " + key + " = " + value);
sql_str = SxUtils.replace (sql_str, key, value);
}
sql_str = SxUtils.deleteComment (sql_str, "{", "}");
sql_str = SxUtils.deleteComment (sql_str, "--", "\n");
sql_str = SxUtils.deleteComment (sql_str, "/*", "*/");
}
catch (FileNotFoundException e)
{
System.err.println (e);
System.exit (1);
}
catch (SecurityException e)
{
System.err.println (e);
System.exit (1);
}
catch (IOException e)
{
System.err.println (e);
System.exit (1);
}
System.err.println ("done");
}
}

305
src/de/superx/dbadmin/ThemenDragTree.java

@ -1,305 +0,0 @@ @@ -1,305 +0,0 @@
package de.superx.dbadmin;
import java.awt.Cursor;
import java.awt.Image;
import java.awt.Point;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DragGestureEvent;
import java.awt.dnd.DragGestureListener;
import java.awt.dnd.DragGestureRecognizer;
import java.awt.dnd.DragSource;
import java.awt.dnd.DragSourceContext;
import java.awt.dnd.DragSourceDragEvent;
import java.awt.dnd.DragSourceDropEvent;
import java.awt.dnd.DragSourceEvent;
import java.awt.dnd.DragSourceListener;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import java.awt.dnd.peer.DragSourceContextPeer;
import java.awt.event.InputEvent;
import java.util.Enumeration;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import de.memtext.tree.AutoScrollJTree;
class ThemenDragTree extends AutoScrollJTree implements DragGestureListener,
DragSourceListener, DropTargetListener {
private DragSource dragSource;
private DragSourceContext dragSourceContext = null;
private DropTarget dropTarget;
int maxtid = 0;
int actions;
//DefaultTreeModel model;
//private ThemenbaumPanel themenb;
public ThemenDragTree(String actionstr) {
super();
// dragSource = DragSource.getDefaultDragSource();
/*
* ein Bug im Quellcode führt zu Cursorflakern,
* http://www.javaworld.com/javaworld/javatips/jw-javatip97.html daher
* updateCursor überlagern import
* java.awt.dnd.peer.DragSourceContextPeer; nötig
*/
dragSource = new DragSource() {
protected DragSourceContext createDragSourceContext(
DragSourceContextPeer dscp, DragGestureEvent dgl,
Cursor dragCursor, Image dragImage, Point imageOffset,
Transferable t, DragSourceListener dsl) {
return new DragSourceContext(dscp, dgl, dragCursor, dragImage,
imageOffset, t, dsl) {
protected void updateCurrentCursor(int dropOp,
int targetAct, int status) {
}
};
};
};
if (actionstr.equals("copy_move"))
actions = DnDConstants.ACTION_COPY_OR_MOVE;
else
actions = DnDConstants.ACTION_COPY;
DragGestureRecognizer dgr = dragSource
.createDefaultDragGestureRecognizer(this, // drag Herkunft
// Component
actions, // actions
this); // drag gesture recognizer
//rechte Maustaste ignorieren
dgr.setSourceActions(dgr.getSourceActions() & ~InputEvent.BUTTON3_MASK);
dropTarget = new DropTarget(this, actions, this);
}
private void setNoDropCursor() {
//dragSourceContext vorher als Membervariable definiert
if (dragSourceContext != null)
dragSourceContext.setCursor(DragSource.DefaultMoveNoDrop);
}
private void setCursor(DragSourceDragEvent e) {
dragSourceContext = e.getDragSourceContext();
dragSourceContext.setCursor(selectCursor(e.getDropAction()));
}
private Cursor selectCursor(int action) {
return (action == DnDConstants.ACTION_MOVE) ? DragSource.DefaultMoveDrop
: DragSource.DefaultCopyDrop;
}
//source
public void dragDropEnd(DragSourceDropEvent e) {
}
public void dragEnter(DragSourceDragEvent e) {
setCursor(e);
}
public void dragEnter(DropTargetDragEvent e) {
}
public void dragExit(DragSourceEvent e) {
}
public void dragExit(DropTargetEvent e) {
}
public void dragGestureRecognized(DragGestureEvent e) {
TreePath path = this.getLeadSelectionPath();
DefaultMutableTreeNode was = (DefaultMutableTreeNode) path
.getLastPathComponent();
Transferable tr = (Transferable) was.getUserObject();
Cursor cursor = selectCursor(e.getDragAction());
dragSource.startDrag(e, cursor, tr, this);
/*
* e.startDrag( cursor, // cursor null, // transferable this); // drag
* source listener
*/
}
public void dragOver(DragSourceDragEvent e) {
setCursor(e);
}
public void dragOver(DropTargetDragEvent e) {
//set cursor location. Needed in setCursor method
Point cursorLocationBis = e.getLocation();
TreePath destinationPath = getPathForLocation(cursorLocationBis.x,
cursorLocationBis.y);
if (destinationPath == null) {
e.rejectDrag();
setNoDropCursor();
return;
}
DefaultMutableTreeNode node = (DefaultMutableTreeNode) destinationPath
.getLastPathComponent();
Object userobj = node.getUserObject();
if (userobj instanceof SxThemenEintrag2) {
SxThemenEintrag2 x = (SxThemenEintrag2) userobj;
if (x.isKnoten())
e.acceptDrag(actions);
else {
e.rejectDrag();
setNoDropCursor();
}
} else {
setNoDropCursor();
e.rejectDrag();
}
}
public void dropActionChanged(DragSourceDragEvent e) {
setCursor(e);
}
//target
public void drop(DropTargetDropEvent e) {
DefaultMutableTreeNode oldParent = null, newParent = null;
SxThemenEintrag2 x;
try {
TreePath selectedNodePath = this.getLeadSelectionPath();
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) selectedNodePath
.getLastPathComponent();
Point loc = e.getLocation();
TreePath destinationPath = this.getPathForLocation(loc.x, loc.y);
newParent = (DefaultMutableTreeNode) destinationPath
.getLastPathComponent();
SxThemenEintrag2 xnewparent = (SxThemenEintrag2) newParent
.getUserObject();
//Transferable transferable=e.getTransferable();
DefaultMutableTreeNode newChild = null;
if (e.getDropAction() == DnDConstants.ACTION_COPY) { //neues Kind
// erstellen
//SxThemenEintrag2
// inhalt=(SxThemenEintrag2)selectedNode.getUserObject();
// Object data = transferable.getTransferData();
// newChild = new DefaultMutableTreeNode(data.clone());
// newChild=new DefaultMutableTreeNode(inhalt);
newChild = nodeCopy(selectedNode, xnewparent.getTid());
} else { //move
newChild = selectedNode;
oldParent = (DefaultMutableTreeNode) selectedNode.getParent();
oldParent.remove(newChild);
x = (SxThemenEintrag2) newChild.getUserObject();
x.setParent(xnewparent.getTid());
}
newParent.add(newChild);
if (e.getDropAction() == DnDConstants.ACTION_COPY)
e.acceptDrop(DnDConstants.ACTION_COPY);
else
e.acceptDrop(DnDConstants.ACTION_MOVE);
e.getDropTargetContext().dropComplete(true);
/*
* DefaultMutableTreeNode
* oldparent=(DefaultMutableTreeNode)selectedNode.getParent();
* verschiebNode.removeFromParent(); Integer newParentKeyApnr;
*
* //Transferable tr=e.getTransferable(); Point loc =
* e.getLocation(); TreePath destinationPath =
* this.getPathForLocation(loc.x, loc.y); DefaultMutableTreeNode
* newParent = (DefaultMutableTreeNode)
* destinationPath.getLastPathComponent(); SxThemenEintrag2
* newParentOrgaEintrag=(SxThemenEintrag2)newParent.getUserObject(); //
* newParentKeyApnr=newParentOrgaEintrag.getKeyApnr();
*
* newParent.add(selectedNode); orgaEintrag2
* verschiebOrgaEintrag=(orgaEintrag2)verschiebNode.getUserObject();
* //parent anpassen
* verschiebOrgaEintrag.setParent(newParentKeyApnr); //Ebene knoten
* selbst + alle Unterknoten anpassen Integer neueEbene=new
* Integer(verschiebNode.getLevel()-1);
* verschiebOrgaEintrag.setEbene(neueEbene); DefaultMutableTreeNode
* aNode;orgaEintrag2 x; for (Enumeration en =
* verschiebNode.depthFirstEnumeration() ; en.hasMoreElements() ;) {
* aNode=(DefaultMutableTreeNode)en.nextElement(); neueEbene=new
* Integer(aNode.getLevel()-1);
* x=(orgaEintrag2)aNode.getUserObject(); x.setEbene(neueEbene); }
*
* e.acceptDrop(DnDConstants.ACTION_MOVE);
* e.getDropTargetContext().dropComplete(true); //model neu laden
* und Ast aufklappen DefaultTreeModel model=(DefaultTreeModel)
* getModel(); model.reload(oldparent); model.reload(newParent);
* TreePath parentPath=new TreePath(newParent.getPath());
* expandPath(parentPath);
*/
((DefaultTreeModel) getModel()).reload(oldParent);
((DefaultTreeModel) getModel()).reload(newParent);
} catch (Exception ex) {
ex.printStackTrace();
}
this.validate();
this.repaint();
}
public void dropActionChanged(DropTargetDragEvent e) {
}
private void parentEintragAnpassen(DefaultMutableTreeNode node) {
DefaultMutableTreeNode aNode;
SxThemenEintrag2 x2;
SxThemenEintrag2 x = (SxThemenEintrag2) node.getUserObject();
//für weitere Unterknoten rekursiv aufrufen
for (Enumeration en = node.depthFirstEnumeration(); en
.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
if (aNode != node) {
x2 = (SxThemenEintrag2) aNode.getUserObject();
x2.setParent(x.getTid());
}
}
}
public int getMaxTid() {
return maxtid;
}
public void setMaxTid(int neu) {
maxtid = neu;
}
public void incMaxTid() {
maxtid++;
}
private DefaultMutableTreeNode nodeCopy(DefaultMutableTreeNode org,
Integer parent) {
DefaultMutableTreeNode aNode, weitererKnoten;
SxThemenEintrag2 x = (SxThemenEintrag2) org.getUserObject();
SxThemenEintrag2 xneu = (SxThemenEintrag2) x.clone();
int newtid = getMaxTid() + 1;
xneu.setTid(new Integer(newtid));
setMaxTid(newtid);
xneu.setParent(parent);
DefaultMutableTreeNode neu = new DefaultMutableTreeNode(xneu);
//für weitere Unterknoten rekursiv aufrufen
for (Enumeration en = org.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
if (aNode != org) {
weitererKnoten = nodeCopy(aNode, new Integer(newtid));
neu.add(weitererKnoten);
}
}
return neu;
}
}

719
src/de/superx/dbadmin/ThemenbaumPanel.java

@ -1,719 +0,0 @@ @@ -1,719 +0,0 @@
package de.superx.dbadmin;
//24.7.04 dq: Postgres themenbaum auf date_val geändert.
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.sql.SQLException;
import java.util.Enumeration;
import java.util.TimeZone;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import de.memtext.util.DateUtils;
import de.memtext.util.WindowUtils;
class ThemenbaumPanel extends JPanel implements ActionListener, KeyListener {
static Vector themenbaum;
static ThemenDragTree tree;
static SxThemenEintrag2 einEintrag;
static JScrollPane scrollp;
static String standDatum;
static Vector problemfälle;
private boolean isSaveNecessary;
public ThemenbaumPanel() {
super();
this.setLayout(new BorderLayout());
tree = new ThemenDragTree("copy_move");
tree.setRootVisible(false);
//Markierungsrandfarbe grau nicht gelb
DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
renderer.setBorderSelectionColor(java.awt.Color.darkGray);
tree.setCellRenderer(renderer);
tree.addKeyListener(this);
scrollp = new JScrollPane(tree);
this.add(scrollp, "Center");
JPanel down = new JPanel(new GridLayout(2, 1));
JPanel p1 = new JPanel();
JButton blöschen = new JButton("löschen");
blöschen.addActionListener(this);
p1.add(blöschen);
JButton bneuerKnoten = new JButton("Knoten hinzufügen");
bneuerKnoten.addActionListener(this);
p1.add(bneuerKnoten);
JButton bneueMaske = new JButton("Maske hinzufügen");
bneueMaske.addActionListener(this);
p1.add(bneueMaske);
down.add(p1);
JPanel p2 = new JPanel();
JButton bspeich = new JButton("speichern");
bspeich.addActionListener(this);
p2.add(bspeich);
JButton bneueinlesen = new JButton("neu einlesen");
bneueinlesen.addActionListener(this);
p2.add(bneueinlesen);
JButton bbackuprestore = new JButton("Backup wiederherstellen");
bbackuprestore.addActionListener(this);
p2.add(bbackuprestore);
down.add(p2);
this.add(down, "South");
backupAnlegen();
}
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if (cmd.equals("löschen"))
löschen();
if (cmd.equals("Knoten hinzufügen"))
knotenHinzufügen();
if (cmd.equals("Maske hinzufügen"))
MaskeHinzufügen();
if (cmd.equals("speichern"))
speichern();
if (cmd.equals("neu einlesen"))
neuEinlesen();
if (cmd.equals("Backup wiederherstellen"))
backupRestore();
}
private void backupAnlegen() {
try {
DBAccess.executeUpdate("delete from themenbaum_bak where 1=1");
DBAccess
.executeUpdate("insert into themenbaum_bak select * from themenbaum");
} catch (Exception e) {
JOptionPane.showMessageDialog(null,
"Fehler beim Datenbank-Zugriff:\n " + e.toString(),
"SuperX DB Admin", JOptionPane.WARNING_MESSAGE);
e.printStackTrace();
}
SuperXDBAdmin.setStatus("Backup von Tabelle themenbaum angelegt!");
}
private void backupRestore() {
try {
DBAccess.executeUpdate("delete from themenbaum where 1=1");
DBAccess
.executeUpdate("insert into themenbaum select * from themenbaum_bak");
neuEinlesen();
} catch (Exception e) {
JOptionPane.showMessageDialog(null,
"Fehler beim Datenbank-Zugriff:\n " + e.toString(),
"SuperX DB Admin", JOptionPane.WARNING_MESSAGE);
e.printStackTrace();
}
}
private void neuEinlesen() {
readTreeFromDb(standDatum);
this.validate();
isSaveNecessary=false;
}
private void MaskeHinzufügen() {
String rückmeldung = "";
TreePath currentSelection = tree.getSelectionPath();
if (currentSelection != null) {
DefaultMutableTreeNode currentNode = (DefaultMutableTreeNode) (currentSelection
.getLastPathComponent());
Object userobj = currentNode.getUserObject();
SxThemenEintrag2 x = (SxThemenEintrag2) userobj;
if (!x.isKnoten()) {
currentNode = (DefaultMutableTreeNode) currentNode.getParent();
userobj = currentNode.getUserObject();
x = (SxThemenEintrag2) userobj;
}
Maskenauswahl ma = new Maskenauswahl((Frame) this
.getTopLevelAncestor());
ma.show();
if (ma.getGewählt() != -1) {
try {
String name = (String) DBAccess
.executeQuerySingleValue("select name from maskeninfo where tid="
+ ma.getGewählt());
tree.incMaxTid();
SxThemenEintrag2 neu = new SxThemenEintrag2(new Integer(
tree.getMaxTid()), name, new Integer(ma
.getGewählt()), x.getTid());
DefaultMutableTreeNode neuerKnoten = new DefaultMutableTreeNode(
neu);
currentNode.add(neuerKnoten);
((DefaultTreeModel) tree.getModel()).reload(currentNode);
rückmeldung = new String("Maske hinzugefügt!");
isSaveNecessary = true;
} catch (Exception e) {
if (e.toString().indexOf("No current row") > 0)
rückmeldung = new String("Maske nicht gefunden");
else
rückmeldung = "Fehler beim Datenbankzugriff - "
+ e.toString();
}
}
} else
rückmeldung = new String(
"Es muss erst ein Knoten ausgewählt werden");
SuperXDBAdmin.setStatus(rückmeldung);
}
private void löschen() {
TreePath currentSelection = tree.getSelectionPath();
if (currentSelection != null) {
int erg = JOptionPane
.showConfirmDialog(
this,
"Soll dieser Eintrag gelöscht werden?\n\nHinweis: Es wird nur der Eintrag im Themenbaum gelöscht.\nWenn Sie eine Maske komplett löschen wollen,\ntun Sie dies unter Maskenverwaltung!",
"SuperX DB Admin", JOptionPane.YES_NO_OPTION);
if (erg != JOptionPane.YES_OPTION)
return;
DefaultMutableTreeNode currentNode = (DefaultMutableTreeNode) (currentSelection
.getLastPathComponent());
DefaultMutableTreeNode parent = (DefaultMutableTreeNode) (currentNode
.getParent());
if (parent != null) {
parent.remove(currentNode);
((DefaultTreeModel) tree.getModel()).reload(parent);
isSaveNecessary = true;
}
}
this.validate();
this.repaint();
}
private void knotenHinzufügen() {
java.sql.Date gueltig_seit = new java.sql.Date(1);
gueltig_seit = gueltig_seit.valueOf("1900-01-01");
java.sql.Date gueltig_bis = new java.sql.Date(1);
gueltig_bis = gueltig_bis.valueOf("2999-01-01");
TreePath currentSelection = tree.getSelectionPath();
if (currentSelection != null) {
DefaultMutableTreeNode currentNode = (DefaultMutableTreeNode) (currentSelection
.getLastPathComponent());
Object userobj = currentNode.getUserObject();
if (userobj instanceof SxThemenEintrag2) {
SxThemenEintrag2 x = (SxThemenEintrag2) userobj;
if (x.isKnoten()) {
String eingabe = JOptionPane.showInputDialog(this,
"Name des neuen Knotens:", "SuperX",
JOptionPane.QUESTION_MESSAGE);
if (eingabe != null) {
tree.incMaxTid();
SxThemenEintrag2 neu = new SxThemenEintrag2(
new Integer(tree.getMaxTid()), eingabe);
neu.setParent(x.getTid());
neu.setGueltigSeit(gueltig_seit);
neu.setGueltigBis(gueltig_bis);
DefaultMutableTreeNode neuerKnoten = new DefaultMutableTreeNode(
neu);
currentNode.add(neuerKnoten);
((DefaultTreeModel) tree.getModel())
.reload(currentNode);
isSaveNecessary = true;
}
}
}
}
}
void readTreeFromDb(String lStand) {
WindowUtils.setWaitCursor(this, true);
//liefert Themenbaum v. angegebenen Stand zurück
String name, erlaeuterung;
Integer tid, maskeninfo_id, parent;
java.sql.Date gueltig_seit, gueltig_bis;
//neu erstellen nur beim 1.mal und anderem Stand
int entryCount;
// if (Stand == null || (!Stand.equals(lStand))) {
if (lStand == null)
lStand = DateUtils.getTodayString();
standDatum = lStand;
String sx_db = (String) SxDefaults.getPropertyValue("SxDB");
//tree erzeugen für Stand
//aus Datenbank auslesen
try {
//datum String in sql.Date umformen
java.sql.Date date = new java.sql.Date(1);
SxDate mydate = new SxDate();
date = mydate.getDate(standDatum);
Vector rohform = new Vector();
String query = "";
//Rohfassung (vector in vector) aus DB
if (sx_db.equals("Postgres")) {
query = "select T.tid,T.name, T.maskeninfo_id, T.parent, T.erlaeuterung,T.gueltig_seit,T.gueltig_bis "
+ "from themenbaum T "
+ "where T.maskeninfo_id is null and "
+ "T.gueltig_seit<=date_val('"
+ standDatum
+ "') and T.gueltig_bis>=date_val('"
+ standDatum
+ "') "
+ " union "
+
//und alle Abfragen
"select T.tid,M.name, T.maskeninfo_id, T.parent, M.erlaeuterung,T.gueltig_seit,T.gueltig_bis "
+ "from themenbaum T, maskeninfo M "
+ "where T.maskeninfo_id=M.tid and "
+ "T.gueltig_seit<=date_val('"
+ standDatum
+ "') and T.gueltig_bis>=date_val('"
+ standDatum
+ "') " + " order by 2";
} else {
//informix
query = "select T.tid,T.name, T.maskeninfo_id, T.parent, T.erlaeuterung,T.gueltig_seit,T.gueltig_bis "
+ "from themenbaum T "
+ "where T.maskeninfo_id is null and "
+ "T.gueltig_seit<=date('"
+ standDatum
+ "') and T.gueltig_bis>=date('"
+ standDatum
+ "') "
+ " union "
+
//und alle Abfragen
"select T.tid,M.name, T.maskeninfo_id, T.parent, M.erlaeuterung,T.gueltig_seit,T.gueltig_bis "
+ "from themenbaum T, maskeninfo M "
+ "where T.maskeninfo_id=M.tid and "
+ "T.gueltig_seit<=date('"
+ standDatum
+ "') and T.gueltig_bis>=date('"
+ standDatum
+ "') "
+ " order by 2";
}
Integer mtid = (Integer) DBAccess
.executeQuerySingleValue("select max(tid) from themenbaum");
tree.setMaxTid(mtid.intValue());
rohform = DBAccess.executeQuery(query);
if (rohform.size() < 1)
throw new Exception();
entryCount = rohform.size();
//Umformen in Vector of SxThemenEintrag2
Vector dummy = new Vector();
themenbaum = new Vector();
Enumeration en1 = rohform.elements();
while (en1.hasMoreElements()) {
dummy = (Vector) en1.nextElement();
tid = (Integer) dummy.elementAt(0);
name = (String) dummy.elementAt(1);
name = name.trim();
maskeninfo_id = (Integer) dummy.elementAt(2);
parent = (Integer) dummy.elementAt(3);
erlaeuterung = (String) dummy.elementAt(4);
gueltig_seit = (java.sql.Date) dummy.elementAt(5);
gueltig_bis = (java.sql.Date) dummy.elementAt(6);
einEintrag = new SxThemenEintrag2(tid, name, maskeninfo_id,
parent, erlaeuterung, gueltig_seit, gueltig_bis);
themenbaum.addElement(einEintrag);
}
rohform = null;
SxThemenEintrag2 ebene0 = new SxThemenEintrag2(null,
"Abfragen/Berichte", null, null, null, null, null);
DefaultMutableTreeNode root = new DefaultMutableTreeNode(ebene0);
//hier werden über eine rekursive Methode alle
//Institute in den Baum eingetragen
insertnodes(null, root);
//
//Baum erzeugen
DefaultTreeModel treeModel = new DefaultTreeModel(root);
tree.setModel(treeModel);
prüfeDifferenzen(themenbaum);
themenbaum = null;
//root Abfragen/Berichte sieht man sowieso nicht
//first child abfragen muss aufgeklappt sein
//da Mouselistener Doubleclick umfunktioniert
if (root.getChildCount() > 0) {
DefaultMutableTreeNode ebene1 = (DefaultMutableTreeNode) root
.getChildAt(0);
tree.expandPath(new TreePath(ebene1.getPath()));
}
//Einfachselektion
tree.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
prüfeToteEinträge();
SuperXDBAdmin.setStatus(" Themenbaum eingelesen (" + entryCount
+ " Einträge)");
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Fehler bei Datenbankzugriff: "
+ e.toString(), "Themenbaum", 1);
} finally {
WindowUtils.setWaitCursor(this, false);
}
}
private void prüfeToteEinträge() throws Exception {
Vector eintrag;
Vector tot = DBAccess
.executeQuery("select maskeninfo_id,name, tid from themenbaum where maskeninfo_id not in (select tid from maskeninfo)");
if (tot.size() > 0) {
System.out
.println("Einträge in Themenbaum, für die kein Eintrag mehr in maskeninfo ist:");
for (Enumeration en = tot.elements(); en.hasMoreElements();) {
eintrag = (Vector) en.nextElement();
System.out.println(eintrag.get(0) + ": " + eintrag.get(1)
+ " themenbaum.tid=" + eintrag.get(2));
}
JOptionPane
.showMessageDialog(
null,
"Es gibt "
+ tot.size()
+ " Einträge in Themenbaum, für die kein Eintrag mehr in maskeninfo ist.\n(siehe Konsole) Wenn Sie speichern werden diese Einträge gelöscht!",
"SuperX DB Admin", 1);
}
}
public boolean isSaveNecessary() {
return isSaveNecessary;
}
private void insertnodes(Integer theParent, DefaultMutableTreeNode aktNode) {
//rekursive Methode, die Institutionen in den Baum einträgt
Vector result = new Vector();
result = mySelect(theParent);
Integer eintrag_tid;
for (Enumeration el = result.elements(); el.hasMoreElements();) {
einEintrag = (SxThemenEintrag2) el.nextElement();
DefaultMutableTreeNode neuNode = new DefaultMutableTreeNode(
einEintrag);
aktNode.add(neuNode);
eintrag_tid = einEintrag.getTid();
//nervig null-Werte abfangen
if (eintrag_tid != null & theParent == null)
insertnodes(einEintrag.getTid(), neuNode);
if (eintrag_tid == null & theParent == null)
System.out
.println("Achtung! Element hat fälschlicherweise sich selbst als parent:"
+ einEintrag.getName());
if (eintrag_tid != null && theParent != null)
if (!theParent.equals(eintrag_tid))
insertnodes(einEintrag.getTid(), neuNode);
else
System.out
.println("Achtung! Element hat fälschlicherweise sich selbst als parent:"
+ einEintrag.getName()
+ "tid:"
+ einEintrag.getTid());
}
}
private Vector mySelect(Integer pruefparent) {
//liefert alle Institute mit Parent =pruefparent zurück
Vector result = new Vector();
Integer eintrag_parent;
for (Enumeration el = themenbaum.elements(); el.hasMoreElements();) {
einEintrag = (SxThemenEintrag2) el.nextElement();
eintrag_parent = einEintrag.getParent();
if (eintrag_parent == null && pruefparent == null)
result.addElement(einEintrag);
if (eintrag_parent != null && pruefparent != null)
if (eintrag_parent.intValue() == pruefparent.intValue())
result.addElement(einEintrag);
}
return result;
}
private void addNode() {
/*
* DefaultMutableTreeNode parentNode = null; TreePath parentPath =
* tree.getSelectionPath();
*
* if (parentPath == null) { parentNode = root; } else { parentNode =
* (DefaultMutableTreeNode) (parentPath.getLastPathComponent()); }
*
* //ebene feststellen int ebene = parentNode.getLevel();
*
* orgaEintrag2 parentEintrag = (orgaEintrag2)
* parentNode.getUserObject();
*
* java.sql.Date gueltig_seit = new java.sql.Date(1); gueltig_seit =
* gueltig_seit.valueOf("2001-10-01"); java.sql.Date gueltig_bis = new
* java.sql.Date(1); gueltig_bis = gueltig_bis.valueOf("2999-01-01");
* orgaEintrag2 neuerEintrag = new orgaEintrag2( "Neue OrgaEinheit","",
* new Integer(1), new Integer(ebene), parentEintrag.getKeyApnr(), new
* Integer(1), gueltig_seit, gueltig_bis,new Integer(0));
* DefaultMutableTreeNode childNode = new
* DefaultMutableTreeNode(neuerEintrag);
*
* OrgaBearbDialog dlg = new OrgaBearbDialog( linkToMain, childNode,
* merkungültig, (DefaultMutableTreeNode) parentNode.getRoot());
*
* //wenn nicht Abbrechen, null setzen klappt aus irgend einem Grund
* nicht if (childNode != null) { neuerEintrag = (orgaEintrag2)
* childNode.getUserObject(); if (!neuerEintrag.getName().equals("Neue
* OrgaEinheit")) { treeModel.insertNodeInto(childNode, parentNode,
* parentNode.getChildCount());
* // Make sure the user can see the lovely new node.
*
* tree.scrollPathToVisible(new TreePath(childNode.getPath()));
* etwasGeändert = true; } }
*/
}
public void bearbeiten() {
/*
* etwasGeändert = true; DefaultMutableTreeNode node =
* (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
*
* OrgaBearbDialog dlg2 = new OrgaBearbDialog(dummyframe, node,
* merkungültig); DefaultTreeModel dtm = (DefaultTreeModel)
* tree.getModel();
*
* dtm.nodeChanged(node);
*/
}
public String dateToString(java.sql.Date inp) {
java.text.DateFormat df;
df = java.text.DateFormat.getDateInstance(java.text.DateFormat.MEDIUM);
// r.b. default Jahr 4-stellig
df.setTimeZone(TimeZone.getDefault());
df.setLenient(false);
String help = df.format((java.util.Date) inp);
return help;
}
private void speichern() {
String ins;
int i = 0;
String sql = null;
String sx_db = (String) SxDefaults.getPropertyValue("SxDB");
//erstmal von Informix ausgehen
try {
DefaultMutableTreeNode lroot = (DefaultMutableTreeNode) tree
.getModel().getRoot();
DefaultMutableTreeNode aNode;
SxThemenEintrag2 x;
//DBAccess.executeUpdate("delete from themenbaum where 1=1");
DefaultMutableTreeNode vorher;
aNode = null;
sql = "create temp table tmp_themenbaum (" + "tid integer,"
+ "name char(50) not null ," + "maskeninfo_id integer,"
+ "parent integer," + "gueltig_seit date,"
+ "gueltig_bis date," + "erlaeuterung char(240)); ";
for (Enumeration en = lroot.depthFirstEnumeration(); en
.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
if (!(aNode.getUserObject() instanceof SxThemenEintrag2))
continue;
x = (SxThemenEintrag2) aNode.getUserObject();
if (x.getTid() != null) {
// erstmal von Informix ausgehen
ins = new String(
"insert into tmp_themenbaum (tid,name,maskeninfo_id,parent,gueltig_seit,gueltig_bis) values ("
+ x.getTid()
+ ",'"
+ x.getName()
+ "',"
+ x.getMaskeninfo_id()
+ ","
+ x.getParent()
+ ",date('"
+ SxUtils.GetValueAsString(x
.getGueltigSeit())
+ "'),date('"
+ SxUtils.GetValueAsString(x
.getGueltigBis()) + "')); ");
if (sx_db.equals("Postgres")) {
ins = "insert into tmp_themenbaum (tid,name,maskeninfo_id,parent,gueltig_seit,gueltig_bis) values ("
+ x.getTid()
+ ",'"
+ x.getName()
+ "',"
+ x.getMaskeninfo_id()
+ ","
+ x.getParent()
+ ",date_val('"
+ SxUtils.GetValueAsString(x.getGueltigSeit())
+ "'),date('"
+ SxUtils.GetValueAsString(x.getGueltigBis())
+ "')); ";
}
sql += ins;
i++;
//progress.inc();
//System.out.println(ins);
}
}
try {
sql += "delete from themenbaum where 1=1; ";
sql += "insert into themenbaum select * from tmp_themenbaum;";
sql += "drop table tmp_themenbaum;";
DBAccess.executeUpdateAll(sql);
} catch (SQLException e) {
System.out.println(sql);
System.out.println("Fehler beim Schreiben in die Datenbank:\n "
+ e.toString());
}
//Probleme sind unter Knoten Fehler schon aufgeführt und werden
// auch mit der ersten
//Schleife gespeichert!!
//falls es Problemfälle gab, diese auch noch speichern
/*
* if(problemfälle != null) { for (Enumeration
* en=problemfälle.elements(); en.hasMoreElements(); ) {
* x=(SxThemenEintrag2)en.nextElement(); ins = new String( "insert
* into themenbaum
* (tid,name,maskeninfo_id,parent,gueltig_seit,gueltig_bis) values (" +
* x.getTid() + ",'" + x.getName() + "'," + x.getMaskeninfo_id() +
* "," + x.getParent() //
* +",date('01.01.1900'),date('01.01.3000'),null)"); + ",date('" +
* SxUtils.GetValueAsString(x.getGueltigSeit())+"'),date('" +
* SxUtils.GetValueAsString(x.getGueltigBis())+"'))");
*
* try { DBAccess.executeUpdate(ins); } catch (SQLException e){
* System.out.println(ins); System.out.println("Fehler beim
* Schreiben eines Problemfalls in die Datenbank:\n " +
* e.toString()); } i++;
* } //von for-Schleife } //wenn es Problemfälle gab
*/
isSaveNecessary=false;
} catch (Exception e) {
JOptionPane
.showMessageDialog(null,
"Fehler beim Schreiben in die Datenbank:\n "
+ e.toString(), "SuperX DB Admin",
JOptionPane.WARNING_MESSAGE);
e.printStackTrace();
}
//progress.hide();
//progress.dispose();
SuperXDBAdmin.setStatus(i + " Einträge in themenbaum geschrieben");
WindowUtils.setWaitCursor(this, false);
}
public void keyPressed(KeyEvent event) {
System.out.println(event.getKeyCode());
if (event.getKeyCode() == KeyEvent.VK_DELETE)
löschen();
}
public void keyReleased(KeyEvent event) {
}
public void keyTyped(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.VK_DELETE)
löschen();
}
private void prüfeDifferenzen(Vector themenbaum) {
problemfälle = null;
DefaultMutableTreeNode aNode;
DefaultMutableTreeNode root = (DefaultMutableTreeNode) tree.getModel()
.getRoot();
SxThemenEintrag2 x;
//Themenbaum enthält zu Anfang alle eingelesenen, gültigen Einträge
//diejenigen, die in Baum vorkommen werden ausgelöscht
for (Enumeration en = root.depthFirstEnumeration(); en
.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
x = (SxThemenEintrag2) aNode.getUserObject();
themenbaum.remove(x);
}
//System.out.println(themenbaum.size());
if (themenbaum.size() > 0) {
JOptionPane
.showMessageDialog(
null,
"Achtung!\nEs gibt "
+ themenbaum.size()
+ " gültige Einträge, die nicht in die Baumstruktur passten!\n(Siehe Konsole)",
"SuperX Admin", JOptionPane.WARNING_MESSAGE);
DefaultMutableTreeNode fehlernode = new DefaultMutableTreeNode(
"Fehler");
for (Enumeration el = themenbaum.elements(); el.hasMoreElements();) {
x = (SxThemenEintrag2) el.nextElement();
fehlernode.add(new DefaultMutableTreeNode(x));
System.out.println(x.getTid() + ":" + x.getName() + " parent:"
+ x.getParent());
}
root.add(fehlernode);
((DefaultTreeModel) tree.getModel()).reload();
tree.validate();
problemfälle = themenbaum;
}
}
}

239
src/de/superx/dbadmin/UserGroupMembershipPanel.java

@ -1,239 +0,0 @@ @@ -1,239 +0,0 @@
package de.superx.dbadmin;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import de.memtext.util.WindowUtils;
class UserGroupMembershipPanel extends JPanel implements ActionListener {
private MBComboBox mbt;
private JTextField tname = new JTextField(10);
private JTextField tkenn = new JTextField(10);
private JCheckBox[] groups;
private JPanel groupsPanel;
public UserGroupMembershipPanel() {
super();
mbt = new MBComboBox();
mbt.addActionListener(this);
this.setLayout(new GridLayout(5, 1));
JPanel p0 = new JPanel();
p0.add(mbt);
this.add(p0);
JPanel p1 = new JPanel();
JLabel lkenn = new JLabel("Kennung:");
p1.add(lkenn);
tkenn.setEnabled(false);
p1.add(tkenn);
JLabel lname = new JLabel("Name:");
p1.add(lname);
p1.add(tname);
this.add(p1);
groupsPanel = new JPanel(new GridLayout(10, 10));
this.add(groupsPanel);
JPanel p5 = new JPanel();
JButton bspeich = new JButton("speichern");
bspeich.addActionListener(this);
p5.add(bspeich);
this.add(p5);
}
void prepare() {
WindowUtils.setWaitCursor(this,true);
mbt.removeAllItems();
//special version!
mbt.addAll(DBAccess.getUserListe());
if (SuperXDBAdmin.getSelectedUser() != -999)
mbt.setSelection(SuperXDBAdmin.getSelectedUser());
else
SuperXDBAdmin.setSelectedUser(mbt.getSelectedID());
//array wird auch beim speichern noch gebraucht
groups = gruppenEinlesen();
groupsPanel.removeAll();
for (int i = 0; i < groups.length; i++) {
groupsPanel.add(groups[i]);
}
nutzerGewählt();
WindowUtils.setWaitCursor(this,false);
}
private JCheckBox[] gruppenEinlesen() {
JCheckBox[] gruppen = null;
String name;
Vector liste = new Vector();
try {
String query = "select name from groupinfo order by 1";
liste = DBAccess.executeQuery(query);
gruppen = new JCheckBox[liste.size()];
int i = 0;
Vector help;
for (Enumeration el = liste.elements(); el.hasMoreElements();) {
help = (Vector) el.nextElement();
name = (String) help.get(0);
gruppen[i] = new JCheckBox(name);
gruppen[i].setFont(new Font("Times", Font.PLAIN, 10));
i++;
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null,
"Fehler beim Lesen aus der Datenbank: " + e.toString(),
"SuperX DB Admin", JOptionPane.WARNING_MESSAGE);
e.printStackTrace();
}
return gruppen;
}
public void actionPerformed(ActionEvent event) {
// if (event.getActionCommand().equals("speichern"))
// NutzerRechteSpeichern();
if (event.getActionCommand().equals("speichern"))
userDatenSpeichern();
if (event.getSource() instanceof MBComboBox) {
MBComboBox localbox = (MBComboBox) event.getSource();
SuperXDBAdmin.setSelectedUser(localbox.getSelectedID());
nutzerGewählt();
}
}
/*
* public Vector NutzerListeEinlesen() { Vector userliste = new Vector();
* Vector row; Integer id; String benutzer, email, name, max_versuch,
* akt_versuch;
*
* try {
*
* String query = "select tid, benutzer,name,email,max_versuch,akt_versuch
* from userinfo order by benutzer"; Statement statement =
* myConnection.createStatement(); ResultSet rs1 =
* statement.executeQuery(query); while (rs1.next()) { id = (Integer)
* rs1.getObject("tid"); benutzer = rs1.getObject("benutzer").toString();
* email = DBAccess.getString(rs1, "email"); name = DBAccess.getString(rs1,
* "name"); max_versuch = DBAccess.getString(rs1, "max_versuch");
* akt_versuch = DBAccess.getString(rs1, "akt_versuch"); row = new Vector();
* row.add(id); row.add(benutzer); row.add(name); row.add(email);
* row.add(max_versuch); row.add(akt_versuch); userliste.add(row);
* } rs1.close(); statement.close();
* } catch (Exception e) { JOptionPane.showMessageDialog( null, "Fehler
* beim Lesen aus der Datenbank: " + e.toString(), "SuperX DB Admin",
* JOptionPane.WARNING_MESSAGE); e.printStackTrace(); } return userliste; }
*/
private void nutzerGewählt() {
Vector zeile;
Integer test;
for (Enumeration el = DBAccess.getUserListe().elements(); el
.hasMoreElements();) {
zeile = ((Vector) el.nextElement());
test = (Integer) zeile.get(0);
if (test.intValue() == SuperXDBAdmin.getSelectedUser()) {
tkenn.setText((String) zeile.get(1));
tkenn.setCaretPosition(0);
tname.setText((String) zeile.get(2));
tname.setCaretPosition(0);
}
}
try {
String query = "select G.name from groupinfo G, user_group_bez U where G.tid=U.groupinfo_id and "
+ " U.userinfo_id="
+ SuperXDBAdmin.getSelectedUser()
+ " order by 1";
String help2, help3;
Vector mitgliedschaft = DBAccess.executeQuery(query);
//erstmal auf false
for (int i2 = 0; i2 < groups.length; i2++) {
groups[i2].setSelected(false);
}
Vector help;
for (Enumeration el = mitgliedschaft.elements(); el
.hasMoreElements();) {
help = (Vector) el.nextElement(); //weil Vector in Vector
// zurückgeliefert
help2 = (String) help.get(0);
help2 = help2.trim();
for (int i = 0; i < groups.length; i++) {
help3 = groups[i].getText().trim();
if (help2.equals(help3)) {
groups[i].setSelected(true);
}
}
}
this.validate();
this.repaint();
SuperXDBAdmin.setStatus("Benutzer ausgewählt");
}
catch (Exception e) {
SuperXDBAdmin.setStatus("interner Fehler: " + e.toString());
}
this.repaint();
}
private void userDatenSpeichern() {
try {
WindowUtils.setWaitCursor(this,true);
String upd = "delete from user_group_bez where userinfo_id="
+ SuperXDBAdmin.getSelectedUser();
DBAccess.executeUpdate(upd);
Integer tid;
for (int i = 0; i < groups.length; i++) {
if (groups[i].isSelected()) {
tid = (Integer) DBAccess
.executeQuerySingleValue("select tid from groupinfo where name='"
+ groups[i].getText().trim() + "'");
upd = "insert into user_group_bez values("
+ SuperXDBAdmin.getSelectedUser() + "," + tid + ")";
DBAccess.executeUpdate(upd);
}
}
SuperXDBAdmin.setStatus("Gruppenzuordnung gespeichert!");
} catch (Exception e) {
JOptionPane
.showMessageDialog(null,
"Fehler beim Schreiben in die Datenbank:\n "
+ e.toString(), "SuperX DB Admin",
JOptionPane.WARNING_MESSAGE);
e.printStackTrace();
}
finally
{
WindowUtils.setWaitCursor(this,false);
}
}
}

946
src/de/superx/dbadmin/UserInst.java

@ -1,946 +0,0 @@ @@ -1,946 +0,0 @@
package de.superx.dbadmin;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Enumeration;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import java.util.Vector;
import javax.swing.CellEditor;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
class UserInst extends JPanel implements CellEditorListener, ActionListener {
boolean result;
boolean etwasGeändert = false;
Frame dummyframe;
OrgaEintrag2 gewaehlt = null;
OrgaEintrag2 einEintrag;
Vector orga;
Vector merkungültig;
int AnzahlEinträge;
JLabel Standlabel;
GregorianCalendar cal = new GregorianCalendar();
String Stand;
JTextField suchtext;
Container cp;
JTree tree=null;
DefaultTreeModel treeModel;
JScrollPane treeScroll;
DefaultMutableTreeNode root;
SuperXDBAdmin linkToMain;
public UserInst(SuperXDBAdmin llinkToMain) {
super();
linkToMain=llinkToMain;
this.setLayout(new BorderLayout());
//top panel für Stand
Stand =
cal.get(Calendar.DATE)
+ "."
+ (cal.get(Calendar.MONTH) + 1)
+ "."
+ cal.get(Calendar.YEAR);
//aktuelles Datum ist default
JPanel top = new JPanel();
MBComboBox mbt = new MBComboBox(DBAccess.getUserListe());
//mbt.AddActionListener(this);
top.add(mbt);
Standlabel = new JLabel("Stand: " + Stand);
Standlabel.setFont(new Font("Arial", Font.PLAIN, 10));
JButton bStand = new JButton("anderer Stand");
bStand.setFont(new Font("Arial", Font.PLAIN, 10));
bStand.setDefaultCapable(false);
bStand.addActionListener(this);
top.add(Standlabel);
top.add(bStand);
this.add(top, "North");
//JTree erzeugen
tree = tree_erzeugen();
treeScroll = new JScrollPane(tree);
// cp.add(treeScroll, "Center");
this.add(treeScroll, "Center");
//Suchen Feld + Buttons
JPanel down = new JPanel();
down.setLayout(new GridLayout(3, 1));
JPanel psuchen = new JPanel();
suchtext = new JTextField(10);
suchtext.setFont(new Font("Arial", Font.PLAIN, 10));
psuchen.add(suchtext);
JButton suchen = new JButton("Suchen");
suchen.setFont(new Font("Arial", Font.PLAIN, 10));
suchen.addActionListener(this);
psuchen.add(suchen);
down.add(psuchen);
JPanel pspeichern=new JPanel();
JButton speichern=new JButton("speichern");
speichern.addActionListener(this);
pspeichern.add(speichern);
down.add(pspeichern);
this.add("South", down);
//pack();
if (linkToMain.getSelectedUser()!=-999) mbt.setSelection(linkToMain.getSelectedUser());
else linkToMain.setSelectedUser(mbt.getSelectedID());
readUserRights();
}
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand().equals("speichern"))
saveUserRights();
if (event.getActionCommand().equals("Suchen"))
suchen();
Object src = event.getSource();
if (src instanceof MBComboBox) {
MBComboBox localbox = (MBComboBox) event.getSource();
linkToMain.setSelectedUser(localbox.getSelectedID());
readUserRights();
tree.repaint();
}
}
public void andererStand() {
int result =
JOptionPane.showConfirmDialog(
null,
"Bei Auswahl eines anderen Stands gehen eventuell gemachte Änderungen verloren!\n Erst speichern?",
"SuperX DB Admin",
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.OK_OPTION) {
saveUserRights();
}
String Standneu =
JOptionPane.showInputDialog(
this,
"Neues Datum eingeben:",
"SuperX",
JOptionPane.QUESTION_MESSAGE);
if (Standneu != null && DatumOK(Standneu)) //and FormOk
{
cp.setCursor(new Cursor(Cursor.WAIT_CURSOR));
Stand = Standneu;
Standlabel.setText("Stand: " + Stand);
tree = this.tree_erzeugen();
cp.remove(treeScroll);
treeScroll = new JScrollPane(tree);
cp.add(treeScroll);
cp.validate();
cp.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
}
private void children_freischalten(DefaultMutableTreeNode node) {
DefaultMutableTreeNode aNode;
OrgaEintrag2 x;
for (Enumeration en = node.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
x = (OrgaEintrag2) aNode.getUserObject();
x.setErlaubt(true);
}
}
public void childrenSperren(DefaultMutableTreeNode node) {
DefaultMutableTreeNode aNode;
OrgaEintrag2 x;
for (Enumeration en = node.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
x = (OrgaEintrag2) aNode.getUserObject();
x.setErlaubt(false);
}
}
public String dateToString(java.sql.Date inp) {
java.text.DateFormat df;
df = java.text.DateFormat.getDateInstance(java.text.DateFormat.MEDIUM);
// r.b. default Jahr 4-stellig
df.setTimeZone(TimeZone.getDefault());
df.setLenient(false);
String help = df.format((java.util.Date) inp);
return help;
}
public boolean DatumOK(String dat) {
DateFormat df;
df = DateFormat.getDateInstance(DateFormat.MEDIUM);
// r.b. default Jahr 4-stellig
df.setTimeZone(TimeZone.getDefault());
df.setLenient(false);
String geprueft = null;
try {
if (dat.endsWith("00")) {
switch (dat.charAt(dat.length() - 3)) {
case '-' :
case '.' :
case '/' :
dat = dat.substring(0, dat.length() - 2) + "2000";
break;
}
}
java.util.Date date = df.parse(dat);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
if (year >= 0 && year < 30)
calendar.add(Calendar.YEAR, 2000);
if (year >= 30 && year < 100)
calendar.add(Calendar.YEAR, 1900);
//wenn Format nicht OK bleibt geprueft null
geprueft = df.format((java.util.Date) date);
} catch (ParseException e_parse) {
// System.err.println ("SxDate: ERROR: parse: Date != " + value);
} catch (IllegalArgumentException e_arg) {
// System.err.println ("SxDate: ERROR: arg: Date != " + value);
}
return geprueft == null ? false : true;
}
public void druckanzeige() {
AdminOrgaPrintRenderer aopr = new AdminOrgaPrintRenderer();
tree.setCellRenderer(aopr);
DefaultMutableTreeNode aNode;
DefaultMutableTreeNode theRoot =
(DefaultMutableTreeNode) tree.getModel().getRoot();
TreePath tp;
for (Enumeration en = theRoot.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
tp = new TreePath(aNode.getPath());
if (tree.isCollapsed(tp))
tree.expandPath(tp);
}
//PrintUtilities.printComponent(treeScroll);
int level;
OrgaEintrag2 x;
String keyApnr;
for (Enumeration en = theRoot.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
if (aNode.getUserObject() instanceof OrgaEintrag2) {
x = (OrgaEintrag2) aNode.getUserObject();
level = aNode.getLevel();
for (int i = 1; i <= level; i++)
System.out.print(" ");
keyApnr = x.getKeyApnr() == null ? "" : x.getKeyApnr().toString();
System.out.println(x.getName() + " (" + keyApnr + ")");
}
}
}
public void editingCanceled(ChangeEvent e) {
CellEditor cellEditor = (CellEditor) e.getSource();
/* SelectableFile sf =
(SelectableFile)
cellEditor.getCellEditorValue();
System.out.println("editing canceled: " +
sf.toString());*/
}
public void editingStopped(ChangeEvent e) {
// CellEditor cellEditor = (CellEditor)e.getSource();
InstEditor cellEditor = (InstEditor) e.getSource();
DefaultMutableTreeNode node =
(DefaultMutableTreeNode) cellEditor.getLastEditedNode();
OrgaEintrag2 x = (OrgaEintrag2) node.getUserObject();
if (x.getErlaubt().intValue() == 1) {
children_freischalten(node);
prüfeObParentFreischalten(node);
} else
{
parents_sperren(node);
childrenSperren(node);
}
}
public static java.sql.Date getDate(String value) {
DateFormat df;
java.util.Date date;
java.sql.Date sql_date;
Calendar calendar;
df = DateFormat.getDateInstance(DateFormat.MEDIUM);
// r.b. default Jahr 4-stellig
df.setTimeZone(TimeZone.getDefault());
df.setLenient(false);
try {
if (value.endsWith("00")) {
switch (value.charAt(value.length() - 3)) {
case '-' :
case '.' :
case '/' :
value = value.substring(0, value.length() - 2) + "2000";
break;
}
}
date = df.parse(value);
calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
if (year >= 0 && year < 30)
calendar.add(Calendar.YEAR, 2000);
if (year >= 30 && year < 100)
calendar.add(Calendar.YEAR, 1900);
sql_date = new java.sql.Date(calendar.getTime().getTime());
return sql_date;
} catch (ParseException e_parse) {
// System.err.println ("SxDate: ERROR: parse: Date != " + value);
} catch (IllegalArgumentException e_arg) {
// System.err.println ("SxDate: ERROR: arg: Date != " + value);
}
return null;
}
public Frame getFrame() {
return dummyframe;
}
public OrgaEintrag2 getGewaehlt() {
return gewaehlt;
}
private void insertnodes(String theParent, DefaultMutableTreeNode aktNode) {
//rekursive Methode, die Institutionen in den Baum einträgt
Vector result = new Vector();
result = mySelect(theParent);
String eintrag_key;
for (Enumeration el = result.elements(); el.hasMoreElements();) {
einEintrag = (OrgaEintrag2) el.nextElement();
DefaultMutableTreeNode neuNode = new DefaultMutableTreeNode(einEintrag);
aktNode.add(neuNode);
eintrag_key = einEintrag.getKeyApnr();
//nervig null-Werte abfangen
if (eintrag_key != null & theParent == null)
insertnodes(einEintrag.getKeyApnr(), neuNode);
if (eintrag_key == null & theParent == null)
System.out.println(
"Achtung! Element hat fälschlicherweise sich selbst als parent:"
+ einEintrag.getName());
if (eintrag_key != null && theParent != null)
if (!theParent.equals(eintrag_key))
insertnodes(einEintrag.getKeyApnr(), neuNode);
else
System.out.println(
"Achtung! Element hat fälschlicherweise sich selbst als parent:"
+ einEintrag.getName()
+ " key_apnr:"
+ einEintrag.getKeyApnr());
}
}
public int KinderZählen(DefaultMutableTreeNode node) {
int zähler = 0;
DefaultMutableTreeNode aNode;
for (Enumeration en = node.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
zähler++;
}
return zähler - 1;
}
public void log(String was) {
System.out.println(was);
//ggfs. in Datei schreiben
}
private Vector mySelect(String pruefparent) {
//liefert alle Institute mit Parent =pruefparent zurück
Vector result = new Vector();
String eintrag_parent;
for (Enumeration el = orga.elements(); el.hasMoreElements();) {
einEintrag = (OrgaEintrag2) el.nextElement();
eintrag_parent = einEintrag.getParent();
if (eintrag_parent == null && pruefparent == null)
result.addElement(einEintrag);
if (eintrag_parent != null && pruefparent != null)
if (eintrag_parent.equals(pruefparent))
result.addElement(einEintrag);
}
return result;
}
private void readUserRights() {
Integer institut;
DefaultMutableTreeNode aNode, childNode;
OrgaEintrag2 x;
DefaultMutableTreeNode theRoot = (DefaultMutableTreeNode) tree.getModel().getRoot();
//erstmal alles auf erlaubt=false setzen
for (Enumeration en = theRoot.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
if (aNode.getUserObject() instanceof OrgaEintrag2) {
x = (OrgaEintrag2) aNode.getUserObject();
x.setErlaubt(false);
}
}
try {
//Datumsabfrage
//datum String in sql.Date umformen
java.sql.Date date = new java.sql.Date(1);
SxDate mydate = new SxDate();
date = mydate.getDate(Stand);
String query =
"select ch110_institut, hierarchie,lehre,gueltig_seit,gueltig_bis from user_institution where userid="
+ linkToMain.getSelectedUser()
+ " and gueltig_seit<=date('"
+ date
+ "') and gueltig_bis>=date('"
+ date
+ "')";
Vector erg=DBAccess.executeQuery(query);
Integer hierarchie, lehre;
java.sql.Date gueltig_seit, gueltig_bis;
Object input;Vector help;
for (Enumeration el=erg.elements(); el.hasMoreElements(); ) {
help=(Vector)el.nextElement();
institut = (Integer) help.get(0);
for (Enumeration en = theRoot.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
if (aNode.getUserObject() instanceof OrgaEintrag2) {
x = (OrgaEintrag2) aNode.getUserObject();
//standardmäßig erstmal erlaubt=false setzen
if (x.getKeyApnr()!=null&&x.getKeyApnr().equals(institut)) {
input = help.get(1);
x.setHierarchie(input == null ? null : new Integer(input.toString()));
input = help.get(2);
x.setLehre(input == null ? null : new Integer(input.toString()));
//Gueltigkeitswerte aus user_inst in orgaEintrag übertragen, damit bei speichern erhalten bleiben
gueltig_seit = (java.sql.Date) help.get(3);;
gueltig_bis = (java.sql.Date) help.get(4);
x.setGueltigSeit(gueltig_seit);
x.setGueltigBis(gueltig_bis);
x.setErlaubt(true);
//Kinder auch
for (Enumeration en2 = aNode.depthFirstEnumeration(); en2.hasMoreElements();) {
childNode = (DefaultMutableTreeNode) en2.nextElement();
x = (OrgaEintrag2) childNode.getUserObject();
x.setErlaubt(true);
}
break;
}
}
}
}
linkToMain.setStatus("User geändert");
} catch (Exception e) {
JOptionPane.showMessageDialog(
null,
"Fehler beim Lesen aus der Datenbank: " + e.toString(),
"SuperX DB Admin",
JOptionPane.WARNING_MESSAGE);
e.printStackTrace();
}
}
public void saveUserRights() {
Enumeration en;
int i = 0;
String ins = null;
String wo = null;
//datum String in sql.Date umformen
java.sql.Date date = new java.sql.Date(1);
SxDate mydate = new SxDate();
date = mydate.getDate(Stand);
// MBProgressBar progress=new MBProgressBar(10);
try {
DefaultMutableTreeNode lroot =
(DefaultMutableTreeNode) tree.getModel().getRoot();
DefaultMutableTreeNode aNode;
OrgaEintrag2 x;
String upd =
"delete from user_institution where userid="+linkToMain.getSelectedUser()
+ " and gueltig_seit<=date('"
+ date
+ "') and gueltig_bis>=date('"
+ date
+ "')";
DBAccess.executeUpdate(upd);
TreePath tp;
DefaultMutableTreeNode vorher;
aNode = null;
for (en = lroot.breadthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
x = (OrgaEintrag2) aNode.getUserObject();
if (x instanceof OrgaEintrag2) {
if (x.isErlaubt()) {
ins =
new String(
"insert into user_institution (userid, name,ch110_institut,hierarchie,gueltig_seit,gueltig_bis,lehre) "
+ "values ("+
linkToMain.getSelectedUser()+",'"
+ x.getName()
+ "',"
+ x.getKeyApnr()
+ ","
+ x.getHierarchie()
+ ",date('"
+ SxUtils.GetValueAsString(x.getGueltigSeit())
+ "'), date('"
+ SxUtils.GetValueAsString(x.getGueltigBis())
+ "'),"
+ x.getLehre()
+ ")");
DBAccess.executeUpdate(ins);
i++;
//children sperren, da nur Eintrag von hierarchiehöchstem Element nötig
childrenSperren(aNode);
}
//progress.inc();
}
}
linkToMain.setStatus(i + " Einträge in user_institution geschrieben");
etwasGeändert = false;
//da Kinder der Verarbeitung wegen gesperrt wurden, muss neu eingelesen werden
readUserRights();
} catch (Exception e) {
JOptionPane.showMessageDialog(
null,
"Fehler beim Schreiben in die Datenbank:\n " + e.toString(),
"SuperX DB Admin",
JOptionPane.WARNING_MESSAGE);
System.out.println(wo + ": " + ins);
e.printStackTrace();
System.exit(-1);
}
//progress.hide();
//progress.dispose();
}
private void parents_sperren(DefaultMutableTreeNode node) {
DefaultMutableTreeNode aNode;
OrgaEintrag2 x;
boolean go = true;
while (go) {
aNode = (DefaultMutableTreeNode) node.getParent();
if (aNode == null || !(aNode.getUserObject() instanceof OrgaEintrag2))
return; //root
x = (OrgaEintrag2) aNode.getUserObject();
if (x.getErlaubt().intValue() == 1)
//wenn parent erlaubt ist, den auf false setzen
// und in Schleife weitermachen
//denn sobald nur eines der Kinderelemente eines parents nicht erlaubt,
//ist er selbst nicht mehr erlaubt
x.setErlaubt(false);
// ansonsten war parent schon auf false und man braucht nicht weitermachen
else
go = false;
node = aNode;
}
}
public void prüfeDifferenzen(DefaultMutableTreeNode root) {
Vector problemfälle;
problemfälle = (Vector) orga.clone();
DefaultMutableTreeNode aNode;
OrgaEintrag2 x;
String name;
Integer key_apnr;
java.sql.Date gueltig_seit, gueltig_bis;
//Problemfälle enthält zu Anfang alle eingelesenen, gültigen Einträge
//diejenigen, die in Baum vorkommen werden ausgelöscht
for (Enumeration en = root.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
x = (OrgaEintrag2) aNode.getUserObject();
problemfälle.remove(x);
}
if (problemfälle.size() > 0) {
JOptionPane.showMessageDialog(
null,
"Achtung!\nEs gibt "
+ problemfälle.size()
+ " gültige Einträge, die nicht in die Baumstruktur passten!\n(Bitte Organigramm korrigieren)",
"SuperX Admin",
JOptionPane.WARNING_MESSAGE);
log(
problemfälle.size()
+ " gültige Einträge, die nicht in die Baumstruktur passten:");
/* DefaultMutableTreeNode fehlernode = new DefaultMutableTreeNode("Fehler");
for (Enumeration el = problemfälle.elements(); el.hasMoreElements();) {
x = (orgaEintrag2) el.nextElement();
fehlernode.add(new DefaultMutableTreeNode(x));
log(x.getKeyApnr() + " - " + x.getName() + "parent (" + x.getParent() + ")");
}
root.add(fehlernode);
*/
}
}
private void prüfeObParentFreischalten(DefaultMutableTreeNode node) {
DefaultMutableTreeNode aNode;
DefaultMutableTreeNode parent = (DefaultMutableTreeNode) node.getParent();
OrgaEintrag2 x;
boolean alleKinderErlaubt = true;
for (Enumeration en = parent.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
if (!aNode.equals(parent)) {
x = (OrgaEintrag2) aNode.getUserObject();
if (x.getErlaubt().intValue() == 0)
alleKinderErlaubt = false;
}
}
if (alleKinderErlaubt) {
x = (OrgaEintrag2) parent.getUserObject();
x.setErlaubt(true);
}
if (!parent.isRoot())
prüfeObParentFreischalten(parent);
}
private void suchen() {
String such = suchtext.getText().toLowerCase();
String teststring;
TreePath tp;
boolean gefunden = false;
DefaultMutableTreeNode test, ausgesucht;
ausgesucht = null;
Vector treffer = new Vector();
Vector treffernodes = new Vector();
if (such.length() < 1) {
JOptionPane.showMessageDialog(null, "Bitte Suchbegriff eingeben!", "SuperX", 1);
return;
}
such = such.toLowerCase();
//JOptionPane.showMessageDialog(null, "neu","SuperX",1);
//alle Knoten durchlaufen
root = (DefaultMutableTreeNode) tree.getModel().getRoot();
Enumeration en = root.breadthFirstEnumeration();
while (en.hasMoreElements()) {
test = (DefaultMutableTreeNode) en.nextElement();
teststring = test.toString().toLowerCase();
if (teststring.indexOf(such) > -1) {
//wenn suchString im aktuellen Knoten vorhanden
//K
treffer.addElement(test.toString());
treffernodes.addElement(test);
}
}
if (treffer.size() > 0) {
if (treffer.size() > 1) {
//mehr als ein Treffer -> Auswahldialog
String[] trefferstring = new String[treffer.size()];
treffer.copyInto(trefferstring);
String selectedValue =
(String) JOptionPane.showInputDialog(
null,
"Mehrere Treffer!\nBitte auswählen...",
"SuperX",
JOptionPane.INFORMATION_MESSAGE,
null,
trefferstring,
trefferstring[0]);
if (selectedValue == null)
return;
gefunden = false;
//gewählten Knoten nach Name in Treffernodes-Vektor suchen
en = treffernodes.elements();
while (en.hasMoreElements() && gefunden == false) {
test = (DefaultMutableTreeNode) en.nextElement();
if (test.toString().equals(selectedValue)) {
ausgesucht = test;
gefunden = true;
}
}
}
if (ausgesucht == null) //bei treffer.size=1
ausgesucht = (DefaultMutableTreeNode) treffernodes.elementAt(0);
// collapse all brances + Selection anwählen
tree.clearSelection();
en = root.depthFirstEnumeration();
while (en.hasMoreElements()) {
test = (DefaultMutableTreeNode) en.nextElement();
tp = new TreePath(test.getPath());
if (tree.isExpanded(tp))
tree.collapsePath(tp);
}
tp = new TreePath(ausgesucht.getPath());
tree.addSelectionPath(tp);
//tree.makeVisible(tp);
// tree.validate();
// tree.repaint();
} else
JOptionPane.showMessageDialog(null, "Keine Treffer", "SuperX", 1);
}
public JTree tree_erzeugen() {
DefaultMutableTreeNode eb1, eb2, eb3, eb4, eb5, eb6;
int i = 0;
orga = new Vector();
merkungültig = new Vector();
String name, drucktext;
Integer ebene, lehre, orgstruktur;
String key_apnr,parent;
java.sql.Date gueltig_seit = null, gueltig_bis = null;
JTree ltree;
/*
String url = "jdbc:odbc:minisuperx";
String driverClass = "sun.jdbc.odbc.JdbcOdbcDriver";
try {
Class.forName(driverClass);
myConnection = DriverManager.getConnection(url);
checkForWarning(myConnection.getWarnings());
myDatabaseMetaData = myConnection.getMetaData();
} catch (Exception e) {
System.out.println(e.toString());
}*/
// addWindowListener(new WindowClosingAdapter());
//Einfaches TreeModel bauen
String query =
"SELECT name,drucktext,key_apnr,ebene,parent,lehre,gueltig_seit,gueltig_bis,orgstruktur FROM organigramm order by name";
int AnzahlGültige = 0;
int AnzahlFehler = 0;
try {
Vector erg=DBAccess.executeQuery(query);
AnzahlEinträge = 0;
java.sql.Timestamp mytimestamp;
long mytimestampwert;
java.sql.Date StandDate = getDate(Stand);
// new java.sql.Date(cal.getTime().getTime());
Object input;
for (Enumeration el=erg.elements(); el.hasMoreElements(); ) {
Vector help=(Vector)el.nextElement();
name = help.get(0).toString();
drucktext = help.get(1).toString();
key_apnr = (String) help.get(2);
ebene = (Integer) help.get(3);
input=help.get(4);
if (input==null) parent = null; else parent=(String)input;
Object helpx = help.get(5);
if (key_apnr.equals(parent)) {
AnzahlFehler++;
log("Eintrag hat sich selbst als parent: " + key_apnr);
}
lehre = new Integer(helpx.toString());
input=help.get(8);
if (input==null) orgstruktur = null; else orgstruktur=(Integer) input;
//ResultSetMetaData rsmd = rs1.getMetaData();
//System.out.println(rsmd.getColumnClassName(4));
//für Access
/*if (DB.equals("access")) {
mytimestamp = (java.sql.Timestamp) rs1.getObject("gueltig_seit");
mytimestampwert = mytimestamp.getTime();
gueltig_seit = new java.sql.Date(mytimestampwert);
mytimestamp = (java.sql.Timestamp) rs1.getObject("gueltig_bis");
mytimestampwert = mytimestamp.getTime();
gueltig_bis = new java.sql.Date(mytimestampwert);
}
if (DB.equals("informix")) {*/
gueltig_seit = (java.sql.Date) help.get(6);
gueltig_bis = (java.sql.Date) help.get(7);
einEintrag =
new OrgaEintrag2(
name,
drucktext,
key_apnr,
ebene,
parent,
lehre,
gueltig_seit,
gueltig_bis,
orgstruktur);
if ((gueltig_seit.equals(StandDate) || gueltig_seit.before(StandDate))
&& (gueltig_bis.equals(StandDate) || gueltig_bis.after(StandDate))) {
orga.addElement(einEintrag);
AnzahlEinträge++;;
}
}
} catch (Exception e) {
JOptionPane.showMessageDialog(
null,
"Fehler beim Lesen aus der Datenbank: " + e.toString(),
"SuperX DB Admin",
JOptionPane.WARNING_MESSAGE);
e.printStackTrace();
}
if (AnzahlFehler > 0)
JOptionPane.showMessageDialog(
null,
"Achtung!\n" + AnzahlFehler + " Einträge haben sich selbst als parent!",
"SuperX Admin",
JOptionPane.WARNING_MESSAGE);
OrgaEintrag2 hochschule =
new OrgaEintrag2("Hochschule", null, null, null, null, null, null, null, null);
root = new DefaultMutableTreeNode(hochschule);
/* DefaultMutableTreeNode e1=new DefaultMutableTreeNode(new orgaEintrag2("Studierende", null, null, null, null, null, null, null, null));
e1.add(new DefaultMutableTreeNode(new orgaEintrag2("ca-werte", null, null, null, null, null, null, null, null)));
root.add(e1);
e1.add(new DefaultMutableTreeNode(new orgaEintrag2("Stud. allgmein", null, null, null, null, null, null, null, null)));
DefaultMutableTreeNode e2=new DefaultMutableTreeNode(new orgaEintrag2("Haushalt", null, null, null, null, null, null, null, null));
DefaultMutableTreeNode e2b= new DefaultMutableTreeNode(new orgaEintrag2("Haushaltszeitreihen", null, null, null, null, null, null, null, null));
DefaultMutableTreeNode e2c= new DefaultMutableTreeNode(new orgaEintrag2("Haushalt (Zeitreihe)", null, null, null, null, null, null, null, null));
e2b.add(e2c);
e2.add(e2b);
e2.add(new DefaultMutableTreeNode( new orgaEintrag2("Altersstruktur der Beschäftigen", null, null, null, null, null, null, null, null)));
root.add(e2);
DefaultMutableTreeNode e3=new DefaultMutableTreeNode(new orgaEintrag2("Kennzahlen", null, null, null, null, null, null, null, null));
DefaultMutableTreeNode e3b=new DefaultMutableTreeNode(new orgaEintrag2("Basiskennzahlen", null, null, null, null, null, null, null, null));
e3b.add(new DefaultMutableTreeNode(new orgaEintrag2("ca-werte", null, null, null, null, null, null, null, null)));
e3.add(e3b);
e3.add(new DefaultMutableTreeNode(new orgaEintrag2("Neue Kennzahlabfrage", null, null, null, null, null, null, null, null)));
root.add(e3);
*/
//hier werden über eine rekursive Methode alle
//Institute in den Baum eingetragen
insertnodes(null, root);
//Konsistenz prüfen
int TreeEinträge = KinderZählen(root);
if (AnzahlGültige != TreeEinträge)
prüfeDifferenzen(root);
//Rechte des Nutzers einlesen
// NutzerRechteLesen((DefaultMutableTreeNode) root.getChildAt(0));
//Baum erzeugen
treeModel = new DefaultTreeModel(root);
//AdminOrgaModelListener aoml=new AdminOrgaModelListener();
//treeModel.addTreeModelListener(new AdminOrgaModelListener());
ltree = new JTree(treeModel);
ltree.setRootVisible(false);
ltree.setEditable(true);
// ltree.setBackground(Color.lightGray);
//root Hochschule sieht man sowieso nicht
//first child GMU Duisburg muss aufgeklappt sein
//da Mouselistener Doubleclick umfunktioniert
DefaultMutableTreeNode ebene1 = (DefaultMutableTreeNode) root.getChildAt(0);
ltree.expandPath(new TreePath(ebene1.getPath()));
//Einfachselektion
ltree.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
InstRenderer renderer = new InstRenderer();
InstEditor editor = new InstEditor();
editor.addCellEditorListener(this);
ltree.setEditable(true);
ltree.setCellRenderer(renderer);
ltree.setCellEditor(new InstImmediateEditor(ltree, renderer, editor));
//TreeSelectionListener hinzufügen
// AdminOrgaSelList adosl = new AdminOrgaSelList(this, ltree);
// ltree.addTreeSelectionListener(adosl);
// AdminOrgaMouseListener ml =
// new AdminOrgaMouseListener(this, ltree, merkungültig);
// ltree.addMouseListener(ml);
linkToMain.setStatus(AnzahlEinträge + " OrgaEinträge eingelesen");
return ltree;
}
}

370
src/de/superx/dbadmin/UserStammPanel.java

@ -1,370 +0,0 @@ @@ -1,370 +0,0 @@
package de.superx.dbadmin;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.security.MessageDigest;
import java.util.Enumeration;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import de.memtext.util.WindowUtils;
class UserStammPanel extends JPanel implements ActionListener {
Vector liste;
MBComboBox mbt;
JTextField tname = new JTextField(10);
JTextField tkenn = new JTextField(10);
JTextField temail = new JTextField(20);
JTextField tmaxversuch = new JTextField(3);
JTextField taktversuch = new JTextField(3);
JTextArea tinfo = new JTextArea(60, 3);
public UserStammPanel() {
super();
mbt = new MBComboBox();
mbt.addActionListener(this);
this.setLayout(new GridLayout(8, 1));
JPanel p0 = new JPanel();
p0.add(mbt);
this.add(p0);
JPanel p1 = new JPanel();
JLabel lkenn = new JLabel("Kennung:");
p1.add(lkenn);
p1.add(tkenn);
JLabel lname = new JLabel("Name:");
p1.add(lname);
p1.add(tname);
this.add(p1);
JPanel p1b = new JPanel();
JLabel lemail = new JLabel("Email");
p1b.add(lemail);
p1b.add(temail);
this.add(p1b);
JPanel p1c = new JPanel(new FlowLayout());
JLabel linfo = new JLabel("Info");
p1c.add(linfo);
tinfo.setLineWrap(true);
tinfo.setWrapStyleWord(true);
tinfo.setEditable(true);
JScrollPane tinfoscroll = new JScrollPane(tinfo);
tinfoscroll.setPreferredSize(new Dimension(350, 60));
p1c.add(tinfoscroll);
this.add(p1c);
JPanel p2 = new JPanel();
JLabel lmaxversuch = new JLabel("Max Versuch");
p2.add(lmaxversuch);
p2.add(tmaxversuch);
JLabel laktversuch = new JLabel("akt.Versuch");
p2.add(laktversuch);
p2.add(taktversuch);
this.add(p2);
JPanel p3 = new JPanel();
JButton bkennw = new JButton("Kennwort");
bkennw.addActionListener(this);
p3.add(bkennw);
this.add(p3);
JPanel p4 = new JPanel();
JButton blöschen = new JButton("Benutzer löschen");
blöschen.addActionListener(this);
p4.add(blöschen);
JButton bneu = new JButton("Benutzer anlegen");
bneu.addActionListener(this);
p4.add(bneu);
this.add(p4);
JPanel p5 = new JPanel();
JButton bspeich = new JButton("speichern");
bspeich.addActionListener(this);
p5.add(bspeich);
this.add(p5);
}
public void prepare() {
WindowUtils.setWaitCursor(this,true);
mbt.removeAllItems();
//vector mit Daten nimmt einfach erstes element für display
mbt.addAll(DBAccess.getUserListe());
if (SuperXDBAdmin.getSelectedUser() != -999)
mbt.setSelection(SuperXDBAdmin.getSelectedUser());
else
SuperXDBAdmin.setSelectedUser(mbt.getSelectedID());
nutzerGewählt();
WindowUtils.setWaitCursor(this,false);
}
public void actionPerformed(ActionEvent event) {
// if (event.getActionCommand().equals("speichern"))
// NutzerRechteSpeichern();
if (event.getActionCommand().equals("speichern"))
userDatenSpeichern();
if (event.getActionCommand().equals("Kennwort"))
newPassword();
if (event.getActionCommand().equals("Benutzer löschen"))
benutzerLöschen();
if (event.getActionCommand().equals("Benutzer anlegen"))
benutzerAnlegen();
Object src = event.getSource();
if (src instanceof MBComboBox) {
MBComboBox localbox = (MBComboBox) event.getSource();
SuperXDBAdmin.setSelectedUser(localbox.getSelectedID());
nutzerGewählt();
}
}
private void userDatenSpeichern() {
try {
WindowUtils.setWaitCursor(this,true);
String info = tinfo.getText();
if (info.length() > 255) {
info = info.substring(0, 254);
JOptionPane
.showMessageDialog(
null,
"Achtung! Es wurden nur die ersten 255 Zeichen des Infotexts gespeichert ",
"SuperX DB Admin", JOptionPane.WARNING_MESSAGE);
}
String upd = "update userinfo set benutzer="
+ DBAccess.getStringOrNull(tkenn.getText()) + ", name="
+ DBAccess.getStringOrNull(tname.getText()) + ",email="
+ DBAccess.getStringOrNull(temail.getText()) + ",info="
+ DBAccess.getStringOrNull(info) + ",max_versuch="
+ DBAccess.getIntegerOrNull(tmaxversuch.getText())
+ " ,akt_versuch="
+ DBAccess.getIntegerOrNull(taktversuch.getText())
+ " where tid=" + SuperXDBAdmin.getSelectedUser();
DBAccess.executeUpdate(upd);
SuperXDBAdmin.setStatus("Userdaten gespeichert!");
DBAccess.userListeNeuEinlesen();
mbt.neuAufbauen(DBAccess.getUserListe());
mbt.setSelection(SuperXDBAdmin.getSelectedUser());
} catch (Exception e) {
JOptionPane
.showMessageDialog(null,
"Fehler beim Schreiben in die Datenbank:\n "
+ e.toString(), "SuperX DB Admin",
JOptionPane.WARNING_MESSAGE);
e.printStackTrace();
}
finally
{
WindowUtils.setWaitCursor(this,false);
}
}
/*
* public Vector NutzerListeEinlesen() { liste = new Vector(); Vector row;
* Integer id; String benutzer, email, name, max_versuch, akt_versuch, info;
*
* try {
*
* String query = "select tid,
* benutzer,name,email,info,max_versuch,akt_versuch,passwd_sha from userinfo
* order by benutzer"; Statement statement = myConnection.createStatement();
* ResultSet rs1 = statement.executeQuery(query); while (rs1.next()) {
* name=rs1.getString("passwd_sha"); id = (Integer) rs1.getObject("tid");
* benutzer = rs1.getObject("benutzer").toString(); email =
* DBAccess.getString(rs1, "email"); info= DBAccess.getString(rs1,"info");
* name = DBAccess.getString(rs1, "name"); max_versuch =
* DBAccess.getString(rs1, "max_versuch"); akt_versuch =
* DBAccess.getString(rs1, "akt_versuch"); row = new Vector(); row.add(id);
* row.add(benutzer); row.add(name); row.add(email); row.add(info);
* row.add(max_versuch); row.add(akt_versuch); liste.add(row);
* } rs1.close(); statement.close();
* } catch (Exception e) { JOptionPane.showMessageDialog( null, "Fehler
* beim Lesen aus der Datenbank: " + e.toString(), "SuperX DB Admin",
* JOptionPane.WARNING_MESSAGE); e.printStackTrace(); } return liste; }
*/
private void nutzerGewählt() {
Vector zeile;
Integer test;
String help;
Object help2;
for (Enumeration el = DBAccess.getUserListe().elements(); el
.hasMoreElements();) {
zeile = ((Vector) el.nextElement());
test = (Integer) zeile.get(0);
if (test.intValue() == SuperXDBAdmin.getSelectedUser()) {
tkenn.setText((String) zeile.get(1));
tkenn.setCaretPosition(0);
tname.setText((String) zeile.get(2));
tname.setCaretPosition(0);
temail.setText((String) zeile.get(3));
temail.setCaretPosition(0);
tinfo.setText((String) zeile.get(4));
tinfo.setCaretPosition(0);
tmaxversuch.setText(zeile.get(5).toString());
tmaxversuch.setCaretPosition(0);
taktversuch.setText(zeile.get(6).toString());
taktversuch.setCaretPosition(0);
}
}
this.repaint();
}
private void newPassword() {
try {
String passwd = JOptionPane.showInputDialog(this, "Neues Passwort",
"SuperX", JOptionPane.QUESTION_MESSAGE);
if (passwd == null)
throw new Exception("Aktion abgebrochen");
String passwd2 = JOptionPane.showInputDialog(this,
"Passwort bestätigen", "SuperX",
JOptionPane.QUESTION_MESSAGE);
if (passwd.equals(passwd2)) {
String upd_passwd_sha = null;
byte[] buf = passwd.getBytes();
byte[] digest = null;
StringBuffer passwd_str = new StringBuffer();
String value;
int n;
MessageDigest sha = MessageDigest.getInstance("SHA-1");
sha.update(buf);
digest = sha.digest();
for (int i = 0; i < digest.length; i++) {
n = (int) digest[i];
if (n < 0)
n += 256;
value = Integer.toHexString(n);
if (n < 16)
value = "0" + value;
passwd_str.append(value);
}
upd_passwd_sha = "update userinfo set passwd_sha = '"
+ passwd_str + "'" + " where tid = "
+ SuperXDBAdmin.getSelectedUser();
DBAccess.executeUpdate(upd_passwd_sha);
SuperXDBAdmin.setStatus("Password geändert");
} else
JOptionPane.showMessageDialog(null,
"Eingaben stimmten nicht überein!", "SuperX",
JOptionPane.WARNING_MESSAGE);
} catch (Exception e) {
SuperXDBAdmin
.setStatus("Password nicht geändert!! " + e.toString());
}
}
private void benutzerLöschen() {
int rc = JOptionPane.showConfirmDialog(null,
"Benutzer wirklich löschen?", "SuperX",
JOptionPane.YES_NO_OPTION);
if (rc == JOptionPane.YES_OPTION) {
try {
DBAccess
.executeUpdate("delete from user_masken_bez where userinfo_id="
+ SuperXDBAdmin.getSelectedUser());
DBAccess
.executeUpdate("delete from user_institution where userid="
+ SuperXDBAdmin.getSelectedUser());
DBAccess
.executeUpdate("delete from user_group_bez where userinfo_id="
+ SuperXDBAdmin.getSelectedUser());
DBAccess
.executeUpdate("delete from protokoll where userinfo_id="
+ SuperXDBAdmin.getSelectedUser());
DBAccess.executeUpdate("delete from userinfo where tid="
+ SuperXDBAdmin.getSelectedUser());
SuperXDBAdmin.setStatus("Benutzer gelöscht");
DBAccess.userListeNeuEinlesen();
mbt.neuAufbauen(DBAccess.getUserListe());
SuperXDBAdmin.setSelectedUser(mbt.getSelectedID());
} catch (Exception e) {
SuperXDBAdmin
.setStatus("Ein Fehler ist aufgetreten - Benutzer nicht gelöscht");
}
}
}
private void benutzerAnlegen() {
try {
Integer tid = (Integer) DBAccess
.executeQuerySingleValue("select max(tid) as tid from userinfo");
int newtid = tid.intValue() + 1;
String kennung = JOptionPane.showInputDialog(this,
"Kennung eingeben", "SuperX", JOptionPane.QUESTION_MESSAGE);
String ins = "insert into userinfo values (" + newtid + ",'"
+ kennung + "','',null,5,0,null,0,0,null,null)";
DBAccess.executeUpdate(ins);
//Startpasswort anfang setzten
String upd_passwd_sha = null;
String passwd = "anfang";
byte[] buf = passwd.getBytes();
byte[] digest = null;
StringBuffer passwd_str = new StringBuffer();
String value;
int n;
MessageDigest sha = MessageDigest.getInstance("SHA-1");
sha.update(buf);
digest = sha.digest();
for (int i = 0; i < digest.length; i++) {
n = (int) digest[i];
if (n < 0)
n += 256;
value = Integer.toHexString(n);
if (n < 16)
value = "0" + value;
passwd_str.append(value);
}
upd_passwd_sha = "update userinfo set passwd_sha = '" + passwd_str
+ "'" + " where tid = " + newtid;
DBAccess.executeUpdate(upd_passwd_sha);
DBAccess.userListeNeuEinlesen();
mbt.neuAufbauen(DBAccess.getUserListe());
mbt.setSelection(kennung);
nutzerGewählt();
SuperXDBAdmin.setStatus("Benutzer mit Standardpasswort angelegt!");
} catch (Exception e) {
SuperXDBAdmin.setStatus("Interner Fehler: " + e.toString());
}
}
}

782
src/de/superx/dbadmin/UserThemenPanel.java

@ -1,782 +0,0 @@ @@ -1,782 +0,0 @@
package de.superx.dbadmin;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Enumeration;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import de.memtext.tree.CheckBoxNodeDec;
import de.memtext.tree.CheckBoxTreeDec;
class UserThemenPanel extends JPanel implements CellEditorListener, ActionListener {
private static final Font BTN_FONT = new Font("Arial", Font.PLAIN, 10);
boolean result;
boolean etwasGeändert = false;
Vector themenbaum;
int AnzahlEinträge;
JLabel Standlabel;
GregorianCalendar cal = new GregorianCalendar();
String standString;
JTextField suchtext;
Container cp;
JTree tree = null;
SxThemenEintrag2 einEintrag;
JScrollPane treeScroll;
public UserThemenPanel() {
super();
this.setLayout(new BorderLayout());
//top panel für Stand
JPanel top = new JPanel();
MBComboBox mbt = new MBComboBox(DBAccess.getUserListe());
// mbt.AddActionListener(this);
top.add(mbt);
//Standauswahl erstmal nicht anzeigen
// top.add(Standlabel);
// top.add(bStand);
this.add(top, "North");
//JTree erzeugen
JPanel center = new JPanel(); //new GridLayout(1, 2));
tree = new JTree();
//,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
center.add(new CheckBoxTreeDec(tree,"setAllowed"));
// cp.add(treeScroll, "Center");
this.add(treeScroll, "Center");
//Suchen Feld + Buttons
JPanel down = new JPanel();
down.setLayout(new GridLayout(3, 1));
JPanel psuchen = new JPanel();
suchtext = new JTextField(10);
suchtext.setFont(BTN_FONT);
psuchen.add(suchtext);
JButton suchen = new JButton("Suchen");
suchen.setFont(BTN_FONT);
suchen.addActionListener(this);
psuchen.add(suchen);
down.add(psuchen);
JPanel pspeichern = new JPanel();
JButton speichern = new JButton("speichern");
speichern.addActionListener(this);
pspeichern.add(speichern);
down.add(pspeichern);
this.add("South", down);
//darf erst hier unten stehen, da tree schon existieren muss
if (SuperXDBAdmin.getSelectedUser()!=-999) mbt.setSelection(SuperXDBAdmin.getSelectedUser());
}
public void prepare()
{
tree_erzeugen();
}
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand().equals("speichern"))
saveUserRights();
if (event.getActionCommand().equals("Suchen"))
suchen();
Object src = event.getSource();
if (src instanceof MBComboBox) {
MBComboBox localbox = (MBComboBox) event.getSource();
SuperXDBAdmin.setSelectedUser(localbox.getSelectedID());
readUserRights();
tree.repaint();
}
}
/* Methode um alle Kinder eines Knotens freizuschalten. Wenn es sich bei einem Eintrag um eine Maske
* handelt, wird sie überall im Baum freigeschaltet
* param node Knoten desses Kinder freigeschaltet werden sollen
*/
private void children_freischalten(DefaultMutableTreeNode node) {
DefaultMutableTreeNode aNode;
SxThemenEintrag2 x;
for (Enumeration en = node.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
x = (SxThemenEintrag2) aNode.getUserObject();
x.setErlaubt(true);
wennMaskeÜberall(aNode,"freischalten");
}
}
/* Methode um alle Kinder eines Knotens zu sprren. Wenn es sich bei einem Eintrag um eine Maske
* handelt, wird sie überall im Baum gesperrt
* param node Knoten desses Kinder gesperrt werden sollen
*/
public void childrenSperren(DefaultMutableTreeNode node) {
DefaultMutableTreeNode aNode;
SxThemenEintrag2 x;
for (Enumeration en = node.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
x = (SxThemenEintrag2) aNode.getUserObject();
x.setErlaubt(false);
wennMaskeÜberall(aNode,"sperren");
}
}
public void editingCanceled(ChangeEvent e) {
}
/* Methode die das Ende einer Bearbeitung feststellt
*/
public void editingStopped(ChangeEvent e) {
// CellEditor cellEditor = (CellEditor)e.getSource();
InstEditor cellEditor = (InstEditor) e.getSource();
DefaultMutableTreeNode node =
(DefaultMutableTreeNode) cellEditor.getLastEditedNode();
SxThemenEintrag2 x = (SxThemenEintrag2) node.getUserObject();
if (x.isErlaubt()) {
children_freischalten(node);
prüfeObParentFreischalten(node);
wennMaskeÜberall(node,"freischalten");
}
else {
parents_sperren(node);
childrenSperren(node);
wennMaskeÜberall(node,"sperren");
}
}
/* Einen String in ein java.sql.Date-Objekt umformen
*
* returns java.sql.Date
*/
public static java.sql.Date getDate(String value) {
DateFormat df;
java.util.Date date;
java.sql.Date sql_date;
Calendar calendar;
df = DateFormat.getDateInstance(DateFormat.MEDIUM);
// r.b. default Jahr 4-stellig
df.setTimeZone(TimeZone.getDefault());
df.setLenient(false);
try {
if (value.endsWith("00")) {
switch (value.charAt(value.length() - 3)) {
case '-' :
case '.' :
case '/' :
value = value.substring(0, value.length() - 2) + "2000";
break;
}
}
date = df.parse(value);
calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
if (year >= 0 && year < 30)
calendar.add(Calendar.YEAR, 2000);
if (year >= 30 && year < 100)
calendar.add(Calendar.YEAR, 1900);
sql_date = new java.sql.Date(calendar.getTime().getTime());
return sql_date;
}
catch (ParseException e_parse) {
// System.err.println ("SxDate: ERROR: parse: Date != " + value);
}
catch (IllegalArgumentException e_arg) {
// System.err.println ("SxDate: ERROR: arg: Date != " + value);
}
return null;
}
/* rekursive Methode, die Institutionen in den Baum einträgt
* param Integer Parent - Nummer des Vaterknotens
* param aktNode - der Aktuelle Knoten
*/
private void insertnodes(Integer theParent, ThemenNode aktNode) {
Vector result = new Vector();
result = mySelect(theParent);
Integer eintrag_tid;
for (Enumeration el = result.elements(); el.hasMoreElements();) {
einEintrag = (SxThemenEintrag2) el.nextElement();
ThemenNode neuNode = new ThemenNode(einEintrag);
aktNode.add(neuNode);
eintrag_tid = einEintrag.getTid();
//nervig null-Werte abfangen
if (eintrag_tid != null & theParent == null)
insertnodes(einEintrag.getTid(), neuNode);
if (eintrag_tid == null & theParent == null)
System.out.println(
"Achtung! Element hat fälschlicherweise sich selbst als parent:"
+ einEintrag.getName());
if (eintrag_tid != null && theParent != null)
if (!theParent.equals(eintrag_tid))
insertnodes(einEintrag.getTid(), neuNode);
else
System.out.println(
"Achtung! Element hat fälschlicherweise sich selbst als parent:"
+ einEintrag.getName()
+ "tid:"
+ einEintrag.getTid());
}
//wenn eine Kategorie (maskeninfo==null) keine Blätter (Abfragen)
//enthält, die Kategorie entfernen
einEintrag = (SxThemenEintrag2) aktNode.getUserObject();
// if (einEintrag.getMaskeninfo_id()==null&&result.size()<1)
if (einEintrag.getMaskeninfo_id() == null && aktNode.isLeaf())
aktNode.removeFromParent();
}
/* Liefert die Anzahl der Kinder eines Knotens zurück
*/
public int countChildren(DefaultMutableTreeNode node) {
int zähler = 0;
DefaultMutableTreeNode aNode;
for (Enumeration en = node.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
zähler++;
}
return zähler - 1;
}
public void log(String was) {
System.out.println(was);
//ggfs. in Datei schreiben
}
/* Liefert ähnlich wie ein SQL-select alle Einträge mit einem bestimmten parent zurück
* param pruefparent -
* returns Vector
*/
private Vector mySelect(Integer pruefparent) {
Vector result = new Vector();
Integer eintrag_parent;
for (Enumeration el = themenbaum.elements(); el.hasMoreElements();) {
einEintrag = (SxThemenEintrag2) el.nextElement();
eintrag_parent = einEintrag.getParent();
if (eintrag_parent == null && pruefparent == null)
result.addElement(einEintrag);
if (eintrag_parent != null && pruefparent != null)
if (eintrag_parent.intValue() == pruefparent.intValue())
result.addElement(einEintrag);
}
return result;
}
private void readUserRights()
{
readUserRights(false);
}
/* Rechte eines Nutzers einlesen und den Baum aktualisieren
* param mute - boolean gibt an ob am Ende ein Hinweis "User geändert" ausgegeben werden soll
*/
private void readUserRights(boolean mute) {
Integer id;
DefaultMutableTreeNode aNode, childNode, nochnKnoten;
SxThemenEintrag2 x,x2;
DefaultMutableTreeNode root = (DefaultMutableTreeNode) tree.getModel().getRoot();
//erstmal alles auf erlaubt=false setzen
for (Enumeration en = root.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
if (aNode.getUserObject() instanceof SxThemenEintrag2) {
x = (SxThemenEintrag2) aNode.getUserObject();
x.setErlaubt(false);
}
}
try {
String query =
"select id, maske from user_themen where userid=" + SuperXDBAdmin.getSelectedUser();
// "select userinfo_id, maskeninfo_id from user_masken_bez where userinfo_id=" + SuperXDBAdmin.getSelectedUser();
Vector erg=DBAccess.executeQuery(query);
String maske;Vector help;
for (Enumeration el=erg.elements(); el.hasMoreElements(); ) {
help=(Vector)el.nextElement();
id = (Integer) help.get(0);
maske = help.get(1).toString();
for (Enumeration en = root.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
if (aNode.getUserObject() instanceof SxThemenEintrag2) {
x = (SxThemenEintrag2) aNode.getUserObject();
// wenn eine Maske freigegeben ist
if (maske.equals("1")
&& x.getMaskeninfo_id() != null
&& x.getMaskeninfo_id().equals(id))
x.setErlaubt(true);
// wenn es sich um keine Maske handelt, aber die Tid freigeben ist
// also bei Knoten wie "Haushalt"
if (maske.equals("0") && x.getTid().equals(id))
{
x.setErlaubt(true);
//Kinder auch
for (Enumeration en2 = aNode.depthFirstEnumeration(); en2.hasMoreElements();) {
childNode = (DefaultMutableTreeNode) en2.nextElement();
x = (SxThemenEintrag2) childNode.getUserObject();
x.setErlaubt(true);
//entsprechende Maske überall im Baum freischalten
for (Enumeration en3 = root.depthFirstEnumeration(); en3.hasMoreElements();) {
nochnKnoten=(DefaultMutableTreeNode)en3.nextElement();
x2=(SxThemenEintrag2)nochnKnoten.getUserObject();
if (x2.getMaskeninfo_id()!=null&&x2.getMaskeninfo_id().equals(x.getMaskeninfo_id()))
x2.setErlaubt(true);
}
}
break;
}
}
}
}
if (!mute) SuperXDBAdmin.setStatus("User geändert");
}
catch (Exception e) {
JOptionPane.showMessageDialog(
null,
"Fehler beim Lesen aus der Datenbank: " + e.toString(),
"SuperX DB Admin",
JOptionPane.WARNING_MESSAGE);
e.printStackTrace();
}
}
/* Rechte eines Nutzers in die Datenbank eintragen. Erst werden alle Einträge gelöscht.
* Wenn ein ganzer Knoten (mit Kindern) wie "Haushalt" freigegeben ist, wird nur die tid
* dieses Knotens in der Tabelle themenbaum in die Tabelle user_themen eingetragen.
* Wenn eine einzele Maske freigegeben wird, wird deren maskeninfo-id in user_themen eingetragen.
*/
public void saveUserRights() {
Enumeration en;
int i = 0;
String ins = null;
String wo = null;
//datum String in sql.Date umformen
java.sql.Date date = new java.sql.Date(1);
SxDate mydate = new SxDate();
date = mydate.getDate(standString);
// MBProgressBar progress=new MBProgressBar(10);
try {
DefaultMutableTreeNode lroot =
(DefaultMutableTreeNode) tree.getModel().getRoot();
DefaultMutableTreeNode aNode;
SxThemenEintrag2 x;Object userobj;
String upd = "delete from user_themen where userid=" + SuperXDBAdmin.getSelectedUser();
DBAccess.executeUpdate(upd);
TreePath tp;
DefaultMutableTreeNode vorher;
aNode = null;
String id;
int maske = 0;
for (en = lroot.breadthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
userobj = aNode.getUserObject();
if (userobj instanceof SxThemenEintrag2&&aNode!=lroot) {
x=(SxThemenEintrag2)userobj;
if (x.isErlaubt()) {
if (x.getMaskeninfo_id() != null) {
id = x.getMaskeninfo_id().toString();
maske = 1;
}
else {
id = x.getTid().toString();
maske = 0;
}
ins =
new String(
"insert into user_themen (userid, id,maske) "
+ "values ("
+ SuperXDBAdmin.getSelectedUser()
+ ","
+ id
+ ","
+ maske
+ ")");
DBAccess.executeUpdate(ins);
i++;
//children sperren, da nur Eintrag von hierarchiehöchstem Element nötig
childrenSperren(aNode);
}
//progress.inc();
}
}
SuperXDBAdmin.setStatus(i + " Einträge in user_themen geschrieben");
etwasGeändert = false;
//da Kinder der Verarbeitung wegen gesperrt wurden, muss neu eingelesen werden
readUserRights(true);
}
catch (Exception e) {
JOptionPane.showMessageDialog(
null,
"Fehler beim Schreiben in die Datenbank:\n " + e.toString(),
"SuperX DB Admin",
JOptionPane.WARNING_MESSAGE);
System.out.println(wo + ": " + ins);
e.printStackTrace();
}
//progress.hide();
//progress.dispose();
}
/* Parent eines Knotens und ggfs. wiederum desses Parent sperren
*/
private void parents_sperren(DefaultMutableTreeNode node) {
DefaultMutableTreeNode aNode;
SxThemenEintrag2 x;
boolean go = true;
while (go) {
aNode = (DefaultMutableTreeNode) node.getParent();
if (aNode == null || !(aNode.getUserObject() instanceof SxThemenEintrag2))
return; //root
x = (SxThemenEintrag2) aNode.getUserObject();
if (x.isErlaubt())
//wenn parent erlaubt ist, den auf false setzen
// und in Schleife weitermachen
//denn sobald nur eines der Kinderelemente eines parents nicht erlaubt,
//ist er selbst nicht mehr erlaubt
x.setErlaubt(false);
// ansonsten war parent schon auf false und man braucht nicht weitermachen
else
go = false;
node = aNode;
}
}
private void prüfeObParentSperren(DefaultMutableTreeNode node) {
DefaultMutableTreeNode aNode;
DefaultMutableTreeNode parent = (DefaultMutableTreeNode) node.getParent();
SxThemenEintrag2 x;
boolean alleKinderErlaubt = true;
for (Enumeration en = parent.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
if (!aNode.equals(parent)) {
x = (SxThemenEintrag2) aNode.getUserObject();
if (!x.isErlaubt())
alleKinderErlaubt = false;
}
}
if (!alleKinderErlaubt) {
x = (SxThemenEintrag2) parent.getUserObject();
x.setErlaubt(false);
}
if (!parent.isRoot())
prüfeObParentSperren(parent);
}
private void prüfeObParentFreischalten(DefaultMutableTreeNode node) {
DefaultMutableTreeNode aNode;
DefaultMutableTreeNode parent = (DefaultMutableTreeNode) node.getParent();
SxThemenEintrag2 x;
boolean alleKinderErlaubt = true;
for (Enumeration en = parent.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
if (!aNode.equals(parent)) {
x = (SxThemenEintrag2) aNode.getUserObject();
if (!x.isErlaubt())
alleKinderErlaubt = false;
}
}
if (alleKinderErlaubt) {
x = (SxThemenEintrag2) parent.getUserObject();
x.setErlaubt(true);
}
if (!parent.isRoot())
prüfeObParentFreischalten(parent);
}
private void suchen() {
String such = suchtext.getText().toLowerCase();
String teststring;
TreePath tp;
boolean gefunden = false;
DefaultMutableTreeNode test, ausgesucht;
ausgesucht = null;
Vector treffer = new Vector();
Vector treffernodes = new Vector();
if (such.length() < 1) {
JOptionPane.showMessageDialog(null, "Bitte Suchbegriff eingeben!", "SuperX", 1);
return;
}
such = such.toLowerCase();
//JOptionPane.showMessageDialog(null, "neu","SuperX",1);
//alle Knoten durchlaufen
DefaultMutableTreeNode root = (DefaultMutableTreeNode) tree.getModel().getRoot();
Enumeration en = root.breadthFirstEnumeration();
while (en.hasMoreElements()) {
test = (DefaultMutableTreeNode) en.nextElement();
teststring = test.toString().toLowerCase();
if (teststring.indexOf(such) > -1) {
//wenn suchString im aktuellen Knoten vorhanden
//K
treffer.addElement(test.toString());
treffernodes.addElement(test);
}
}
if (treffer.size() > 0) {
if (treffer.size() > 1) {
//mehr als ein Treffer -> Auswahldialog
String[] trefferstring = new String[treffer.size()];
treffer.copyInto(trefferstring);
String selectedValue =
(String) JOptionPane.showInputDialog(
null,
"Mehrere Treffer!\nBitte auswählen...",
"SuperX",
JOptionPane.INFORMATION_MESSAGE,
null,
trefferstring,
trefferstring[0]);
if (selectedValue == null)
return;
gefunden = false;
//gewählten Knoten nach Name in Treffernodes-Vektor suchen
en = treffernodes.elements();
while (en.hasMoreElements() && gefunden == false) {
test = (DefaultMutableTreeNode) en.nextElement();
if (test.toString().equals(selectedValue)) {
ausgesucht = test;
gefunden = true;
}
}
}
if (ausgesucht == null) //bei treffer.size=1
ausgesucht = (DefaultMutableTreeNode) treffernodes.elementAt(0);
// collapse all brances + Selection anwählen
tree.clearSelection();
en = root.depthFirstEnumeration();
while (en.hasMoreElements()) {
test = (DefaultMutableTreeNode) en.nextElement();
tp = new TreePath(test.getPath());
if (tree.isExpanded(tp))
tree.collapsePath(tp);
}
tp = new TreePath(ausgesucht.getPath());
tree.addSelectionPath(tp);
//tree.makeVisible(tp);
// tree.validate();
// tree.repaint();
}
else
JOptionPane.showMessageDialog(null, "Keine Treffer", "SuperX", 1);
}
private void tree_erzeugen() {
String name, erlaeuterung;
Integer tid, maskeninfo_id, parent;
java.sql.Date gueltig_seit, gueltig_bis;
try {
Vector rohform = new Vector();
//informix
String query =
//Kategorien, wie Studierende/Prüfungen
//wenn keine Rechte für Abfragen darunter werden die Äste wieder gelöscht
"select T.tid,T.name, T.maskeninfo_id, T.parent, T.erlaeuterung,T.gueltig_seit,T.gueltig_bis "
+ "from themenbaum T "
+ "where T.maskeninfo_id is null"
//+ " and T.gueltig_seit<=date('" + date + "') and T.gueltig_bis>=date('" + date + "') "
+ " union "
+
//und alle Abfragen
"select T.tid,M.name, T.maskeninfo_id, T.parent, M.erlaeuterung,T.gueltig_seit,T.gueltig_bis "
+ "from themenbaum T, maskeninfo M "
+ "where T.maskeninfo_id=M.tid"
//+ "and T.gueltig_seit<=date('" + date + "') and T.gueltig_bis>=date('" + date + "') "
+ " order by 2";
rohform = DBAccess.executeQuery(query);
if (rohform.size() < 1)
throw new RuntimeException("Keine Themenbaum-Einträge für User gefunden");
//Umformen in Vector of SxThemenEintrag2
Vector dummy = new Vector();
themenbaum = new Vector();
Enumeration en1 = rohform.elements();
while (en1.hasMoreElements()) {
dummy = (Vector) en1.nextElement();
tid = (Integer) dummy.elementAt(0);
name = (String) dummy.elementAt(1);
name = name.trim();
maskeninfo_id = (Integer) dummy.elementAt(2);
parent = (Integer) dummy.elementAt(3);
erlaeuterung = (String) dummy.elementAt(4);
gueltig_seit = (java.sql.Date) dummy.elementAt(5);
gueltig_bis = (java.sql.Date) dummy.elementAt(6);
einEintrag =
new SxThemenEintrag2(tid, name, maskeninfo_id, parent, erlaeuterung,gueltig_seit,gueltig_bis);
themenbaum.addElement(einEintrag);
}
rohform = null;
SxThemenEintrag2 ebene0 =
new SxThemenEintrag2(null, "Abfragen/Berichte", null, null, null,null,null);
ThemenNode root = new ThemenNode(ebene0);
//hier werden über eine rekursive Methode alle
//Institute in den Baum eingetragen
insertnodes(null, root);
themenbaum = null;
//Baum erzeugen
tree.setModel(new DefaultTreeModel(root));
//root Abfragen/Berichte sieht man sowieso nicht
//first child abfragen muss aufgeklappt sein
//da Mouselistener Doubleclick umfunktioniert
if (root.getChildCount() > 0) {
DefaultMutableTreeNode ebene1 = (DefaultMutableTreeNode) root.getChildAt(0);
tree.expandPath(new TreePath(ebene1.getPath()));
}
tree.setRootVisible(false);
//Einfachselektion
tree.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
SuperXDBAdmin.setStatus(AnzahlEinträge + " ThemenEinträge eingelesen");
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(
null,
"Fehler bei Datenbankzugriff: " + e.toString(),
"UserThemen",
1);
}
}
private void wennMaskeÜberall(DefaultMutableTreeNode node, String was) {
Object userobj = node.getUserObject();
DefaultMutableTreeNode root =
(DefaultMutableTreeNode) tree.getModel().getRoot();
DefaultMutableTreeNode aNode;
SxThemenEintrag2 test;
if (userobj instanceof SxThemenEintrag2) {
SxThemenEintrag2 x = (SxThemenEintrag2) userobj;
if (x.getMaskeninfo_id()!= null) {
for (Enumeration en = root.depthFirstEnumeration(); en.hasMoreElements();) {
aNode = (DefaultMutableTreeNode) en.nextElement();
test = (SxThemenEintrag2) aNode.getUserObject();
if (test.getMaskeninfo_id() != null
&& test.getMaskeninfo_id().equals(x.getMaskeninfo_id()))
{
if (was.equals("freischalten"))
{test.setErlaubt(true);prüfeObParentFreischalten(aNode);}
else
{test.setErlaubt(false);
prüfeObParentSperren(aNode);
}
}
}
}
}
}
class ThemenNode extends CheckBoxNodeDec
{
public ThemenNode(DefaultMutableTreeNode node, String setMethodName, boolean isCheckBoxVisible) {
super(node, setMethodName, isCheckBoxVisible);
}
public ThemenNode(Object userobj) {
super(null,null,false);
}
private boolean isAllowed;
public void setAllowed(boolean allowed)
{
isAllowed=allowed;
}
}
}

177
src/de/superx/servlet/ServletTemplateProcessor.java

@ -2,7 +2,6 @@ package de.superx.servlet; @@ -2,7 +2,6 @@ package de.superx.servlet;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
@ -12,129 +11,77 @@ import de.superx.common.FieldContainer; @@ -12,129 +11,77 @@ import de.superx.common.FieldContainer;
import de.superx.common.SuperX_el;
import de.superx.common.SxResultSet;
import de.superx.common.TemplateProcessor;
import freemarker.template.SimpleScalar;
import freemarker.template.TemplateException;
import freemarker.template.TemplateHashModel;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelException;
public class ServletTemplateProcessor extends TemplateProcessor {
private String mandantenID;
public ServletTemplateProcessor(String mandantenID)
{
this.mandantenID=mandantenID;
super.mandantid=mandantenID;
inServlet=true;
}
protected SxResultSet readFromDb(String sql) throws SQLException {
SuperX_el el=null;
try
{
el = ServletUtils.executeALL_el(null, null, "sqlvar:", sql, mandantenID, true);
}
catch (DBServletException ex)
{
throw new SQLException(ex.getMessage());
}
return el.getResultSet();
}
/**
* Template Processing liefert fertigen SQL zurück Aufgerufen von
* Maske.executeQuery
*
* @param String
* template
* @param map -wird angereichert um Maskennummer,SQLdialect, sqlvars, repository
* @return String sql
* @throws TemplateException
* @throws IOException
* @throws SQLException
*/
public ServletTemplateProcessor(String mandantenID) {
super(mandantenID);
}
public String process(HashMap map,Integer maskno,String templateName, String fmSql,
FieldContainer individualFields, HashMap repository,
String sqldialect) throws TemplateException, IOException, SQLException {
templateName = cleanName(templateName);
//neues Objekt anlegen
if (map==null) map= new HashMap();
map.put("Maskennummer",maskno);
this.setRepositoryMap(repository);
map.put("SQLdialect", sqldialect);
if (individualFields!=null)
{
//MB 2010 alle Parameter aus Formular hinzufügen,wird ggfs. unten durch Objekt ersetzt
map.putAll(individualFields.getFormular());
for (Iterator it = individualFields.iterator(); it.hasNext();) {
Field f = (Field) it.next();
if (f.getName() == null) {
}
if (f.isSicht()||f.isOldOrganigrammArt()) {
map.put(f.getName(), f);
if (f.getSichtgruppe()!=null&& f.getSichtgruppe().getSelectedSicht()!=null)
f.getSichtgruppe().getSelectedSicht().updateKlappstatus();
} else {
String val = f.getSelectedKey();
if (val == null)
val = "";
map.put(f.getName(), val);
}
map.put(f.getName()+"Object",f);
map.put(f.getName()+"DefaultKey",f.getDefaultValueKey());
}
}
return process(templateName, fmSql, map, sqldialect);
}
/**
* alte Variante als Object
* for(Enumeration en=individualFields.getFormular().keys();en.hasMoreElements();)
{
Object key= en.nextElement();
Object val=individualFields.getFormular().get(key);
if (val==null) val="";
rootMap.put(key,new Item(val.toString()));
}
*
class Item implements TemplateHashModel
{
private String selectedKey;
Item(String selectedKey)
{
setSelectedKey(selectedKey);
}
public void setSelectedKey(String selectedKey) {
this.selectedKey = selectedKey;
protected SxResultSet readFromDb(String sql) throws SQLException {
SuperX_el el = null;
try {
el = ServletUtils.executeALL_el(null, null, "sqlvar:", sql, mandantenID, true);
} catch (DBServletException ex) {
throw new SQLException(ex.getMessage());
}
return el.getResultSet();
}
public String getSelectedKey() {
return selectedKey;
/**
* Template Processing liefert fertigen SQL zurück Aufgerufen von
* Maske.executeQuery
*
* @param String template
* @param map -wird angereichert um Maskennummer,SQLdialect, sqlvars,
* repository
* @return String sql
* @throws TemplateException
* @throws IOException
* @throws SQLException
*/
public String process(HashMap map, Integer maskno, String templateName, String fmSql,
FieldContainer individualFields, HashMap repository, String sqldialect)
throws TemplateException, IOException, SQLException {
templateName = cleanName(templateName);
// neues Objekt anlegen
if (map == null) {
map = new HashMap();
}
public TemplateModel get(String key) throws TemplateModelException {
if (!key.equals("selectedKey")) throw new TemplateModelException("nur selectedKey definiert");
return new SimpleScalar(getSelectedKey());
map.put("Maskennummer", maskno);
this.setRepositoryMap(repository);
map.put("SQLdialect", sqldialect);
if (individualFields != null) {
// MB 2010 alle Parameter aus Formular hinzufügen,wird ggfs. unten durch Objekt
// ersetzt
map.putAll(individualFields.getFormular());
for (Iterator it = individualFields.iterator(); it.hasNext();) {
Field f = (Field) it.next();
if (f.isSicht() || f.isOldOrganigrammArt()) {
map.put(f.getName(), f);
if (f.getSichtgruppe() != null && f.getSichtgruppe().getSelectedSicht() != null) {
f.getSichtgruppe().getSelectedSicht().updateKlappstatus();
}
} else {
// #195679 ermöglichte bei Nutzung von Freemarker-Objekten ausbrechen aus
// FreemarkerCode bzw sogar SQL-Injection, da ; nicht zu ^ transformiert wurde
// Beispiel Verbundbarkeitstest 71580 mit Inhalt2 '/> update userinfo set
// max_versuch=999; <#assign inhalt_str='
String val = f.getSelectedKey();
if (val == null) {
val = "";
} else {
val = val.replace(';', '^');
}
map.put(f.getName(), val);
}
map.put(f.getName() + "Object", f);
map.put(f.getName() + "DefaultKey", f.getDefaultValueKey());
}
}
public boolean isEmpty() throws TemplateModelException {
return false;
}
} */
return process(templateName, fmSql, map, sqldialect);
}
}
//Created on 08.04.2005 at 12:10:29

2
src/de/superx/servlet/SxSQL_Server.java

@ -88,7 +88,7 @@ public class SxSQL_Server { @@ -88,7 +88,7 @@ public class SxSQL_Server {
private String mandantenID = "default";
private int updateCount = -1;
private int numberOfColumns = -1;
public final static String DEFAULT_MANDANTEN_ID = "default";
private ResultSetMetaData metaData;
public SxSQL_Server(String mandantenID) {

2
src/de/superx/servlet/Themenbaum.java

@ -105,7 +105,7 @@ public class Themenbaum implements ThemenbaumI, Serializable { @@ -105,7 +105,7 @@ public class Themenbaum implements ThemenbaumI, Serializable {
+ " hisinone_active=\""
+ (SuperXManager.isHis1 ? "true" : "false") + "\"\n"
+ "hisinone_refapp=\"" + SuperXManager.his1_refapp
+ "\">");
+ "\" showNavigation=\"true\">");
String welcomedPerson = login_name;
if (login_name == null || login_name.trim().equals(""))
welcomedPerson = userid.toString();

4
src/de/superx/util/HtmlUtils.java

@ -146,7 +146,7 @@ public class HtmlUtils { @@ -146,7 +146,7 @@ public class HtmlUtils {
* The toString method uses appropriate row and colspanning. e.g. rowspan=2
* for Institute/\norg.Unit and colspan=2 for the first Students entry.
*/
private static class HeaderMatrix {
public static class HeaderMatrix {
private int colCount, rowCount, currRow;
private HeaderData[][] headers;
private String colspanIndicator;
@ -163,7 +163,7 @@ public class HtmlUtils { @@ -163,7 +163,7 @@ public class HtmlUtils {
* @param colspanIndicator -
* the indicator that col/rowspanning is desired e.g. \000
*/
HeaderMatrix(String headerString, String headerDelim,
public HeaderMatrix(String headerString, String headerDelim,
String colspanIndicator) {
if (headerDelim.length() != 1 || colspanIndicator.length() != 1) {
throw new IllegalArgumentException(

35
src/de/superx/util/saxon/extensions/DateTodayString.java

@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
package de.superx.util.saxon.extensions;
import de.memtext.util.DateUtils;
import net.sf.saxon.s9api.ExtensionFunction;
import net.sf.saxon.s9api.ItemType;
import net.sf.saxon.s9api.OccurrenceIndicator;
import net.sf.saxon.s9api.QName;
import net.sf.saxon.s9api.SaxonApiException;
import net.sf.saxon.s9api.SequenceType;
import net.sf.saxon.s9api.XdmAtomicValue;
import net.sf.saxon.s9api.XdmValue;
public class DateTodayString implements ExtensionFunction {
@Override
public XdmValue call(XdmValue[] arg0) throws SaxonApiException {
return new XdmAtomicValue(DateUtils.getTodayString());
}
@Override
public SequenceType[] getArgumentTypes() {
return new SequenceType[] {};
}
@Override
public QName getName() {
return new QName("http://memtext.de", "getTodayString");
}
@Override
public SequenceType getResultType() {
return SequenceType.makeSequenceType(ItemType.STRING, OccurrenceIndicator.ONE);
}
}

52
src/de/superx/util/saxon/extensions/Headers2Html.java

@ -0,0 +1,52 @@ @@ -0,0 +1,52 @@
package de.superx.util.saxon.extensions;
import de.memtext.util.StringUtils;
import de.superx.util.HtmlUtils.HeaderMatrix;
import net.sf.saxon.s9api.ExtensionFunction;
import net.sf.saxon.s9api.ItemType;
import net.sf.saxon.s9api.OccurrenceIndicator;
import net.sf.saxon.s9api.QName;
import net.sf.saxon.s9api.SaxonApiException;
import net.sf.saxon.s9api.SequenceType;
import net.sf.saxon.s9api.XdmAtomicValue;
import net.sf.saxon.s9api.XdmValue;
import net.sf.saxon.trans.XPathException;
public class Headers2Html implements ExtensionFunction {
@Override
public QName getName() {
return new QName("http://memtext.de", "headers2html");
}
@Override
public SequenceType getResultType() {
return SequenceType.makeSequenceType(ItemType.STRING, OccurrenceIndicator.ONE);
}
@Override
public net.sf.saxon.s9api.SequenceType[] getArgumentTypes() {
return new SequenceType[] {SequenceType.makeSequenceType(ItemType.STRING, OccurrenceIndicator.ONE)};
}
@Override
public XdmValue call(XdmValue[] arguments) throws SaxonApiException {
//de-escapting \\n to regular \n
String headerStr = null;
try {
headerStr = arguments[0].getUnderlyingValue().getStringValue();
} catch (XPathException e) {
throw new RuntimeException(e);
}
headerStr = headerStr.trim();
//headerStr=headerStr.replaceAll("\\n","\n");
if (headerStr.endsWith("^")) headerStr = headerStr.substring(0, headerStr.length() - 1);
StringBuffer buf = new StringBuffer(headerStr);
StringUtils.replace(buf, "\\n", "\n");
StringUtils.replace(buf, "\\000", "\000");
HeaderMatrix headers = null;
headers = new HeaderMatrix(buf.toString(), "^", "\000");
return new XdmAtomicValue(headers.toString());
}
}

2
superx-build/build.xml

@ -33,7 +33,7 @@ @@ -33,7 +33,7 @@
classname="org.codehaus.groovy.ant.Groovy"
classpathref="classpath"/>
<property name="version" value="4.9" />
<property name="version" value="5.0" />
<target name="initTimestamp">

2
superx/WEB-INF/conf/edustore/db/bin/SQL_ENV.sam

@ -252,8 +252,6 @@ DBDELIMITER="^" ; export DBDELIMITER @@ -252,8 +252,6 @@ DBDELIMITER="^" ; export DBDELIMITER
#Der Datenbankname für die Shellscript in db/bin
DBNAME=superx; export DBNAME
#Legt fest, ob die edustore.xml für Saiku bei einem Upgrade neu erzeugt werden soll.
EDUSTORE_XML_GENERATE=true
if [ "$TERM" = "" ]
then TERM=vt100 ; export TERM

0
superx/WEB-INF/conf/edustore/db/bin/SQL_ENV_bau.sam

6
superx/WEB-INF/conf/edustore/db/bin/SQL_ENV_his1.sam

@ -15,12 +15,12 @@ @@ -15,12 +15,12 @@
# 30.11..04 DQ PATH-Erweiterung neue Routine
# JAVA_HOME fehlte
umask 066
SUPERX_DIR=~/apache-tomcat-5.5.17/webapps/superx/WEB-INF/conf/edustore
SUPERX_DIR=/var/lib/tomcat8/webapps/superx/WEB-INF/conf/edustore
export SUPERX_DIR
WEBAPP=$SUPERX_DIR/../../..
export WEBAPP
JAVA_HOME=/usr/lib/java
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
#Bei Cygwin muss der Pfad z.B.so aussehen:
#JAVA_HOME=/cygdrive/c/j2sdk1.4.1_01
export JAVA_HOME
@ -220,7 +220,7 @@ RECHNER=miles; export RECHNER @@ -220,7 +220,7 @@ RECHNER=miles; export RECHNER
#Bitte dies nicht ändern:
DBDELIMITER="^" ; export DBDELIMITER
#Der Datenbankname für die Shellscript in db/bin
DBNAME=edustore; export DBNAME
DBNAME=eduetl; export DBNAME
if [ "$TERM" = "" ]

0
superx/WEB-INF/conf/edustore/db/bin/SQL_ENV_kenn.sam

192
superx/WEB-INF/conf/edustore/db/bin/ant.bat

@ -1,96 +1,96 @@ @@ -1,96 +1,96 @@
@echo off
REM Copyright (c) 2001-2003 The Apache Software Foundation. All rights
REM reserved.
if exist "%HOME%\antrc_pre.bat" call "%HOME%\antrc_pre.bat"
if "%OS%"=="Windows_NT" @setlocal
rem %~dp0 is expanded pathname of the current script under NT
set DEFAULT_ANT_HOME=%~dp0..
if "%ANT_HOME%"=="" set ANT_HOME=%DEFAULT_ANT_HOME%
set DEFAULT_ANT_HOME=
rem Slurp the command line arguments. This loop allows for an unlimited number
rem of arguments (up to the command line limit, anyway).
set ANT_CMD_LINE_ARGS=%1
if ""%1""=="""" goto doneStart
shift
:setupArgs
if ""%1""=="""" goto doneStart
set ANT_CMD_LINE_ARGS=%ANT_CMD_LINE_ARGS% %1
shift
goto setupArgs
rem This label provides a place for the argument list loop to break out
rem and for NT handling to skip to.
:doneStart
rem find ANT_HOME if it does not exist due to either an invalid value passed
rem by the user or the %0 problem on Windows 9x
if exist "%ANT_HOME%\lib\ant.jar" goto checkJava
rem check for ant in Program Files on system drive
if not exist "%SystemDrive%\Program Files\ant" goto checkSystemDrive
set ANT_HOME=%SystemDrive%\Program Files\ant
goto checkJava
:checkSystemDrive
rem check for ant in root directory of system drive
if not exist %SystemDrive%\ant\lib\ant.jar goto checkCDrive
set ANT_HOME=%SystemDrive%\ant
goto checkJava
:checkCDrive
rem check for ant in C:\ant for Win9X users
if not exist C:\ant\lib\ant.jar goto noAntHome
set ANT_HOME=C:\ant
goto checkJava
:noAntHome
echo ANT_HOME is set incorrectly or ant could not be located. Please set ANT_HOME.
goto end
:checkJava
set _JAVACMD=%JAVACMD%
set LOCALCLASSPATH=%CLASSPATH%
for %%i in ("%ANT_HOME%\lib\*.jar") do call "%ANT_HOME%\bin\lcp.bat" %%i
if "%JAVA_HOME%" == "" goto noJavaHome
if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome
if "%_JAVACMD%" == "" set _JAVACMD=%JAVA_HOME%\bin\java.exe
if exist "%JAVA_HOME%\lib\tools.jar" set LOCALCLASSPATH=%JAVA_HOME%\lib\tools.jar;%LOCALCLASSPATH%
if exist "%JAVA_HOME%\lib\classes.zip" set LOCALCLASSPATH=%JAVA_HOME%\lib\classes.zip;%LOCALCLASSPATH%
goto checkJikes
:noJavaHome
if "%_JAVACMD%" == "" set _JAVACMD=java.exe
echo.
echo Warning: JAVA_HOME environment variable is not set.
echo If build fails because sun.* classes could not be found
echo you will need to set the JAVA_HOME environment variable
echo to the installation directory of java.
echo.
:checkJikes
if not "%JIKESPATH%"=="" goto runAntWithJikes
:runAnt
"%_JAVACMD%" %ANT_OPTS% -classpath "%LOCALCLASSPATH%" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.Main %ANT_ARGS% %ANT_CMD_LINE_ARGS%
goto end
:runAntWithJikes
"%_JAVACMD%" %ANT_OPTS% -classpath "%LOCALCLASSPATH%" "-Dant.home=%ANT_HOME%" "-Djikes.class.path=%JIKESPATH%" org.apache.tools.ant.Main %ANT_ARGS% %ANT_CMD_LINE_ARGS%
goto end
:end
set LOCALCLASSPATH=
set _JAVACMD=
set ANT_CMD_LINE_ARGS=
if "%OS%"=="Windows_NT" @endlocal
:mainEnd
if exist "%HOME%\antrc_post.bat" call "%HOME%\antrc_post.bat"
@echo off
REM Copyright (c) 2001-2003 The Apache Software Foundation. All rights
REM reserved.
if exist "%HOME%\antrc_pre.bat" call "%HOME%\antrc_pre.bat"
if "%OS%"=="Windows_NT" @setlocal
rem %~dp0 is expanded pathname of the current script under NT
set DEFAULT_ANT_HOME=%~dp0..
if "%ANT_HOME%"=="" set ANT_HOME=%DEFAULT_ANT_HOME%
set DEFAULT_ANT_HOME=
rem Slurp the command line arguments. This loop allows for an unlimited number
rem of arguments (up to the command line limit, anyway).
set ANT_CMD_LINE_ARGS=%1
if ""%1""=="""" goto doneStart
shift
:setupArgs
if ""%1""=="""" goto doneStart
set ANT_CMD_LINE_ARGS=%ANT_CMD_LINE_ARGS% %1
shift
goto setupArgs
rem This label provides a place for the argument list loop to break out
rem and for NT handling to skip to.
:doneStart
rem find ANT_HOME if it does not exist due to either an invalid value passed
rem by the user or the %0 problem on Windows 9x
if exist "%ANT_HOME%\lib\ant.jar" goto checkJava
rem check for ant in Program Files on system drive
if not exist "%SystemDrive%\Program Files\ant" goto checkSystemDrive
set ANT_HOME=%SystemDrive%\Program Files\ant
goto checkJava
:checkSystemDrive
rem check for ant in root directory of system drive
if not exist %SystemDrive%\ant\lib\ant.jar goto checkCDrive
set ANT_HOME=%SystemDrive%\ant
goto checkJava
:checkCDrive
rem check for ant in C:\ant for Win9X users
if not exist C:\ant\lib\ant.jar goto noAntHome
set ANT_HOME=C:\ant
goto checkJava
:noAntHome
echo ANT_HOME is set incorrectly or ant could not be located. Please set ANT_HOME.
goto end
:checkJava
set _JAVACMD=%JAVACMD%
set LOCALCLASSPATH=%CLASSPATH%
for %%i in ("%ANT_HOME%\lib\*.jar") do call "%ANT_HOME%\bin\lcp.bat" %%i
if "%JAVA_HOME%" == "" goto noJavaHome
if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome
if "%_JAVACMD%" == "" set _JAVACMD=%JAVA_HOME%\bin\java.exe
if exist "%JAVA_HOME%\lib\tools.jar" set LOCALCLASSPATH=%JAVA_HOME%\lib\tools.jar;%LOCALCLASSPATH%
if exist "%JAVA_HOME%\lib\classes.zip" set LOCALCLASSPATH=%JAVA_HOME%\lib\classes.zip;%LOCALCLASSPATH%
goto checkJikes
:noJavaHome
if "%_JAVACMD%" == "" set _JAVACMD=java.exe
echo.
echo Warning: JAVA_HOME environment variable is not set.
echo If build fails because sun.* classes could not be found
echo you will need to set the JAVA_HOME environment variable
echo to the installation directory of java.
echo.
:checkJikes
if not "%JIKESPATH%"=="" goto runAntWithJikes
:runAnt
"%_JAVACMD%" %ANT_OPTS% -classpath "%LOCALCLASSPATH%" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.Main %ANT_ARGS% %ANT_CMD_LINE_ARGS%
goto end
:runAntWithJikes
"%_JAVACMD%" %ANT_OPTS% -classpath "%LOCALCLASSPATH%" "-Dant.home=%ANT_HOME%" "-Djikes.class.path=%JIKESPATH%" org.apache.tools.ant.Main %ANT_ARGS% %ANT_CMD_LINE_ARGS%
goto end
:end
set LOCALCLASSPATH=
set _JAVACMD=
set ANT_CMD_LINE_ARGS=
if "%OS%"=="Windows_NT" @endlocal
:mainEnd
if exist "%HOME%\antrc_post.bat" call "%HOME%\antrc_post.bat"

62
superx/WEB-INF/conf/edustore/db/bin/antRun.bat

@ -1,31 +1,31 @@ @@ -1,31 +1,31 @@
@echo off
REM Copyright (c) 2001-2002 The Apache Software Foundation. All rights
REM reserved.
if "%OS%"=="Windows_NT" @setlocal
if ""%1""=="""" goto runCommand
rem Change drive and directory to %1
if "%OS%"=="Windows_NT" cd /d ""%1""
if not "%OS%"=="Windows_NT" cd ""%1""
shift
rem Slurp the command line arguments. This loop allows for an unlimited number
rem of agruments (up to the command line limit, anyway).
set ANT_RUN_CMD=%1
if ""%1""=="""" goto runCommand
shift
:loop
if ""%1""=="""" goto runCommand
set ANT_RUN_CMD=%ANT_RUN_CMD% %1
shift
goto loop
:runCommand
rem echo %ANT_RUN_CMD%
%ANT_RUN_CMD%
if "%OS%"=="Windows_NT" @endlocal
@echo off
REM Copyright (c) 2001-2002 The Apache Software Foundation. All rights
REM reserved.
if "%OS%"=="Windows_NT" @setlocal
if ""%1""=="""" goto runCommand
rem Change drive and directory to %1
if "%OS%"=="Windows_NT" cd /d ""%1""
if not "%OS%"=="Windows_NT" cd ""%1""
shift
rem Slurp the command line arguments. This loop allows for an unlimited number
rem of agruments (up to the command line limit, anyway).
set ANT_RUN_CMD=%1
if ""%1""=="""" goto runCommand
shift
:loop
if ""%1""=="""" goto runCommand
set ANT_RUN_CMD=%ANT_RUN_CMD% %1
shift
goto loop
:runCommand
rem echo %ANT_RUN_CMD%
%ANT_RUN_CMD%
if "%OS%"=="Windows_NT" @endlocal

174
superx/WEB-INF/conf/edustore/db/bin/client_env_sam.bat

@ -1,88 +1,88 @@ @@ -1,88 +1,88 @@
@echo off
rem -------------------------------------------------------------
rem Shell-Kommando "client_env"
rem Diese Datei wird für superx und für cronjobs benutzt
rem Außerdem stehen hier die Ladepfade für die operativen Systeme
rem Variablen sollten nur hier, nicht auch in der autoexec.bat!!
rem in der autoexec.bat kann man sie mit
rem set CLIENT_DIR=c:\Programme\edustore
rem call %CLIENT_DIR%\bin\client_env
rem aufrufen.
rem Hier müssen Sie Ihre jeweiligen Parameter einsetzen
rem -------------------------------------------------------------------------
rem
rem Environment Variable Prerequisites;
rem
rem CLIENT_DIR Der Pfad zum Client (sollte keine Leerzeichen enthalten)
rem
rem
rem -------------------------------------------------------------------------
rem ----- Save Environment Variables That May Change ------------------------
rem
rem
set _CP=%CP%
set _CLASSPATH=%CLASSPATH%
rem Umgebungsvariablen einrichten
rem -------------------------------------------------------------
set CLIENT_DIR=Y:
if not "%JAVA_HOME%" == "" goto gotJAVA_HOME
set JAVA_HOME=C:\Programme\java\jdk1.6.0_24
:gotJAVA_HOME
if not "%CLIENT_DIR%" == "" goto gotCLIENT_DIR
set CLIENT_DIR=..
:gotCLIENT_DIR
rem ----- Prepare Appropriate Java Execution Commands -----------------------
set _RUNJAVA="%JAVA_HOME%\bin\java"
rem ----- SuperX-Properties -----------------------
set LOGGER_PROPERTIES=%CLIENT_DIR%\conf\logging.properties
set DB_PROPERTIES=%CLIENT_DIR%\conf\db.properties
set O_DESCR=%CLIENT_DIR%\conf\unldescr_informix_load.xml
:setClasspath
set LIB_PATH=%CLIENT_DIR%\lib
REM SET THE CLASSPATH DYNAMICALLY
REM
REM Call the CPAPPEND.BAT program to build the JARS env variable,
REM then append that variable to the CLASSPATH.
REM To be clear, CPAPPEND.BAT builds the JARS variable.
REM (Note: Borrowed this approach from the
REM Jakarta Tomcat people - thanks!)
REM
set JARS=
set CLASSPATH=
for %%i in (%LIB_PATH%\*.jar) do call:cpappend %%i
set CLASSPATH=%JARS%
set JDBC_CLASSPATH=%JARS%
rem DB-Parameter
rem SET SX_CLIENT=psql
rem SET SX_CLIENT="db2 -t -f"
rem SET SX_CLIENT=dbaccess
SET SX_CLIENT=jdbc
set DBDELIMITER="^"
set DATABASE=POSTGRES
rem set DATABASE=INFORMIX
rem Win2000 does not understand ^ as delimiter, but it is default in our java programs
set CLASSPATH=.;%JDBC_CLASSPATH%;%XML_CLASSPATH%
set PATH=%PATH%;%CLIENT_DIR%\bin
goto finish
rem ----- Restore Environment Variables ---------------------------------------
:cleanup
set CP=%_CP%
set _CP=
:finish
GOTO:EOF
:cpappend
set JARS=%JARS%;%~1
@echo off
rem -------------------------------------------------------------
rem Shell-Kommando "client_env"
rem Diese Datei wird für superx und für cronjobs benutzt
rem Außerdem stehen hier die Ladepfade für die operativen Systeme
rem Variablen sollten nur hier, nicht auch in der autoexec.bat!!
rem in der autoexec.bat kann man sie mit
rem set CLIENT_DIR=c:\Programme\edustore
rem call %CLIENT_DIR%\bin\client_env
rem aufrufen.
rem Hier müssen Sie Ihre jeweiligen Parameter einsetzen
rem -------------------------------------------------------------------------
rem
rem Environment Variable Prerequisites;
rem
rem CLIENT_DIR Der Pfad zum Client (sollte keine Leerzeichen enthalten)
rem
rem
rem -------------------------------------------------------------------------
rem ----- Save Environment Variables That May Change ------------------------
rem
rem
set _CP=%CP%
set _CLASSPATH=%CLASSPATH%
rem Umgebungsvariablen einrichten
rem -------------------------------------------------------------
set CLIENT_DIR=Y:
if not "%JAVA_HOME%" == "" goto gotJAVA_HOME
set JAVA_HOME=C:\Programme\java\jdk1.6.0_24
:gotJAVA_HOME
if not "%CLIENT_DIR%" == "" goto gotCLIENT_DIR
set CLIENT_DIR=..
:gotCLIENT_DIR
rem ----- Prepare Appropriate Java Execution Commands -----------------------
set _RUNJAVA="%JAVA_HOME%\bin\java"
rem ----- SuperX-Properties -----------------------
set LOGGER_PROPERTIES=%CLIENT_DIR%\conf\logging.properties
set DB_PROPERTIES=%CLIENT_DIR%\conf\db.properties
set O_DESCR=%CLIENT_DIR%\conf\unldescr_informix_load.xml
:setClasspath
set LIB_PATH=%CLIENT_DIR%\lib
REM SET THE CLASSPATH DYNAMICALLY
REM
REM Call the CPAPPEND.BAT program to build the JARS env variable,
REM then append that variable to the CLASSPATH.
REM To be clear, CPAPPEND.BAT builds the JARS variable.
REM (Note: Borrowed this approach from the
REM Jakarta Tomcat people - thanks!)
REM
set JARS=
set CLASSPATH=
for %%i in (%LIB_PATH%\*.jar) do call:cpappend %%i
set CLASSPATH=%JARS%
set JDBC_CLASSPATH=%JARS%
rem DB-Parameter
rem SET SX_CLIENT=psql
rem SET SX_CLIENT="db2 -t -f"
rem SET SX_CLIENT=dbaccess
SET SX_CLIENT=jdbc
set DBDELIMITER="^"
set DATABASE=POSTGRES
rem set DATABASE=INFORMIX
rem Win2000 does not understand ^ as delimiter, but it is default in our java programs
set CLASSPATH=.;%JDBC_CLASSPATH%;%XML_CLASSPATH%
set PATH=%PATH%;%CLIENT_DIR%\bin
goto finish
rem ----- Restore Environment Variables ---------------------------------------
:cleanup
set CP=%_CP%
set _CP=
:finish
GOTO:EOF
:cpappend
set JARS=%JARS%;%~1
GOTO:EOF

38
superx/WEB-INF/conf/edustore/db/bin/cpappend.bat

@ -1,20 +1,20 @@ @@ -1,20 +1,20 @@
rem CPAPPEND.BAT
rem
rem Copyright 1999-2004 The Apache Software Foundation
rem
rem Licensed under the Apache License, Version 2.0 (the "License");
rem you may not use this file except in compliance with
rem the License.
rem You may obtain a copy of the License at
rem
rem http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing,
rem software distributed under the License is distributed on an
rem "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
rem OF ANY KIND, either express or implied.
rem See the License for the specific language governing
rem permissions and limitations under the License.
rem
@echo off
rem CPAPPEND.BAT
rem
rem Copyright 1999-2004 The Apache Software Foundation
rem
rem Licensed under the Apache License, Version 2.0 (the "License");
rem you may not use this file except in compliance with
rem the License.
rem You may obtain a copy of the License at
rem
rem http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing,
rem software distributed under the License is distributed on an
rem "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
rem OF ANY KIND, either express or implied.
rem See the License for the specific language governing
rem permissions and limitations under the License.
rem
@echo off
set JARS=%JARS%;%1

2
superx/WEB-INF/conf/edustore/db/bin/dbforms-config_upgrade.x

@ -40,7 +40,7 @@ then @@ -40,7 +40,7 @@ then
java -cp $CP de.superx.bin.SimpleTransform "-logger:$LOGGER_PROPERTIES" "-IN:$IN" "-XSL:$XSL" "-OUT:$OUT" -method:xml "-param:import=$XML" >$LOG 2>&1
else
sx_transform.x -IN:$WEBAPP/WEB-INF/dbforms-config.xml -XSL:$SUPERX_DIR/db/conf/dbforms-config-upgrade.xsl -OUT:$WEBAPP/WEB-INF/dbforms-config_new.xml -method:xml "-param:import=$XML,superx_dir=$SUPERX_DIR" >$LOG 2>&1
sx_transform.x -IN:$WEBAPP/WEB-INF/dbforms-config.xml -XSL:$SUPERX_DIR/db/conf/dbforms-config-upgrade.xsl -OUT:$WEBAPP/WEB-INF/dbforms-config_new.xml -method:xml "-params:import=$XML,superx_dir=$SUPERX_DIR" >$LOG 2>&1
fi
fgrep -s "not found" $LOG

80
superx/WEB-INF/conf/edustore/db/bin/doquery.bat

@ -1,40 +1,40 @@ @@ -1,40 +1,40 @@
@echo off
rem -----------------------------
rem Shell-Kommando "DOQUERY"
rem -----------------------------
rem -------------------------------------------------------------------
rem Eingegebene SQL-Anweisung (als Parameter)
rem in der Datenbank ausfuehren.
rem DOQUERY "sql-Anweisung" header (true,false)(optional) Ausgabedatei(optional)
rem Das Ergebnis kann mit Feldnamen (header=true) in eine Datei Ausgabedatei ausgegeben werden
rem -------------------------------------------------------------------
rem 31.5.04 DQ JAVA_OPTS hinzugefügt zu Java-Aufruf
if not [%1%] == [] goto gotSQL
echo Aufruf: doquery sql-Anweisung header(true,false)(optional) ausgabedatei(optional)
echo ------------------------------------------------------------------------
echo Aktion: doquery führt die sql-Anweisung in der Datei aus.
echo Das Ergebnis kann mit Feldnamen (header=true) in eine Datei Ausgabedatei ausgegeben werden
echo ------------------------------------------------------------------------
goto finish
:gotSQL
echo %1 >tmp$MANDANTENID.sql
:gotQuery
if [%2%] == [] goto gotHeader
set header=%2
:gotHeader
if [%3%] == [] goto gotOutfile
set outfile=%3
:gotOutfile
java %JAVA_OPTS% de.superx.bin.Dosql -logger:%LOGGER_PROPERTIES% -dbproperties:%DB_PROPERTIES% -sqlfile:tmp$MANDANTENID.sql -outFormat:txt -delim:%DBDELIMITER% -header:%header% -outfile:%outfile%
rem java de.superx.bin.Dosql %LOGGER_PROPERTIES% %DB_PROPERTIES% tmp$MANDANTENID.sql "txt" "%DBDELIMITER%" %header% %outfile%
erase tmp$MANDANTENID.sql
rem java de.superx.bin.Doquery %LOGGER_PROPERTIES% %DB_PROPERTIES% %sql% "txt" "%DBDELIMITER%" %header% %outfile%
:finish
@echo off
rem -----------------------------
rem Shell-Kommando "DOQUERY"
rem -----------------------------
rem -------------------------------------------------------------------
rem Eingegebene SQL-Anweisung (als Parameter)
rem in der Datenbank ausfuehren.
rem DOQUERY "sql-Anweisung" header (true,false)(optional) Ausgabedatei(optional)
rem Das Ergebnis kann mit Feldnamen (header=true) in eine Datei Ausgabedatei ausgegeben werden
rem -------------------------------------------------------------------
rem 31.5.04 DQ JAVA_OPTS hinzugefügt zu Java-Aufruf
if not [%1%] == [] goto gotSQL
echo Aufruf: doquery sql-Anweisung header(true,false)(optional) ausgabedatei(optional)
echo ------------------------------------------------------------------------
echo Aktion: doquery führt die sql-Anweisung in der Datei aus.
echo Das Ergebnis kann mit Feldnamen (header=true) in eine Datei Ausgabedatei ausgegeben werden
echo ------------------------------------------------------------------------
goto finish
:gotSQL
echo %1 >tmp$MANDANTENID.sql
:gotQuery
if [%2%] == [] goto gotHeader
set header=%2
:gotHeader
if [%3%] == [] goto gotOutfile
set outfile=%3
:gotOutfile
java %JAVA_OPTS% de.superx.bin.Dosql -logger:%LOGGER_PROPERTIES% -dbproperties:%DB_PROPERTIES% -sqlfile:tmp$MANDANTENID.sql -outFormat:txt -delim:%DBDELIMITER% -header:%header% -outfile:%outfile%
rem java de.superx.bin.Dosql %LOGGER_PROPERTIES% %DB_PROPERTIES% tmp$MANDANTENID.sql "txt" "%DBDELIMITER%" %header% %outfile%
erase tmp$MANDANTENID.sql
rem java de.superx.bin.Doquery %LOGGER_PROPERTIES% %DB_PROPERTIES% %sql% "txt" "%DBDELIMITER%" %header% %outfile%
:finish

58
superx/WEB-INF/conf/edustore/db/bin/dosql.bat

@ -1,29 +1,29 @@ @@ -1,29 +1,29 @@
@echo off
rem -----------------------------
rem Shell-Kommando "dosql"
rem -----------------------------
rem -------------------------------------------------------------------
rem Shellvariablen setzen und eingegebene SQL-Anweisungen (aus Datei)
rem in der SuperX-Datenbank ausfuehren.
rem -------------------------------------------------------------------
rem 31.5.04 DQ JAVA_OPTS hinzugefügt zu Java-Aufruf
if not "%1" == "" goto gotFile
echo Aufruf: dosql sql-Datei header (true,false)(optional) Ausgabedatei (optional)
echo ------------------------------------------------------------------------
echo Aktion: dosql führt die sql-Anweisung in der Datei aus.
echo Das Ergebnis kann mit Feldnamen (header=true) in eine Datei Ausgabedatei ausgegeben werden
echo ------------------------------------------------------------------------
goto finish
:gotFile
set filename=%1
set header=%2
set outfile=%3
java %JAVA_OPTS% de.superx.bin.Dosql -logger:%LOGGER_PROPERTIES% -dbproperties:%DB_PROPERTIES% -sqlfile:%filename% -outFormat:txt -delim:%DBDELIMITER% -header:%header% -outfile:%outfile%
:finish
@echo off
rem -----------------------------
rem Shell-Kommando "dosql"
rem -----------------------------
rem -------------------------------------------------------------------
rem Shellvariablen setzen und eingegebene SQL-Anweisungen (aus Datei)
rem in der SuperX-Datenbank ausfuehren.
rem -------------------------------------------------------------------
rem 31.5.04 DQ JAVA_OPTS hinzugefügt zu Java-Aufruf
if not "%1" == "" goto gotFile
echo Aufruf: dosql sql-Datei header (true,false)(optional) Ausgabedatei (optional)
echo ------------------------------------------------------------------------
echo Aktion: dosql führt die sql-Anweisung in der Datei aus.
echo Das Ergebnis kann mit Feldnamen (header=true) in eine Datei Ausgabedatei ausgegeben werden
echo ------------------------------------------------------------------------
goto finish
:gotFile
set filename=%1
set header=%2
set outfile=%3
java %JAVA_OPTS% de.superx.bin.Dosql -logger:%LOGGER_PROPERTIES% -dbproperties:%DB_PROPERTIES% -sqlfile:%filename% -outFormat:txt -delim:%DBDELIMITER% -header:%header% -outfile:%outfile%
:finish

7
superx/WEB-INF/conf/edustore/db/bin/edustore_xml_upgrade_all.x

@ -6,7 +6,6 @@ @@ -6,7 +6,6 @@
#27.7.2016 Daniel Quathamer
DATUM=`date +'%d.%m.%Y'`
mkdir -p $WEBAPP/WEB-INF/classes/edustore/upgrade_script
#Module die geprüft werden sollen
declare -a MODULE_LIST=(
@ -42,15 +41,15 @@ cd $SUPERX_DIR/db/conf @@ -42,15 +41,15 @@ cd $SUPERX_DIR/db/conf
#ant -f module_scripts_create_ant.xml -DMODULE=$MODUL_CREATE_EINGABE -DWEBAPP=$WEBAPP -DDATABASE=$DATABASE module_mondrian
#java -Dant.home=$LIB_PATH org.apache.tools.ant.Main -DMODULE=$MODUL_CREATE_EINGABE -DWEBAPP=$WEBAPP -DDATABASE=$DATABASE module_mondrian
#java -Dant.home=$LIB_PATH -DMODULE=sos -DWEBAPP=$WEBAPP -DDATABASE=$DATABASE org.apache.tools.ant.Main module_mondrian
sx_transform.x -IN:$SUPERX_DIR/db/module/$MODUL_CREATE_EINGABE/conf/$MODUL_CREATE_EINGABE.xml -XSL:$SUPERX_DIR/db/conf/mondrian_schema.xsl -OUT:$WEBAPP/WEB-INF/classes/edustore/upgrade_script/edustore_${MODUL_CREATE_EINGABE}.xml -method:xml "-param:date=${DATUM}",mode=unload
sx_transform.x -IN:$SUPERX_DIR/db/module/$MODUL_CREATE_EINGABE/conf/$MODUL_CREATE_EINGABE.xml -XSL:$SUPERX_DIR/db/conf/mondrian_schema.xsl -OUT:$WEBAPP/../src/edustore/edustore_${MODUL_CREATE_EINGABE}.xml -method:xml "-param:date=${DATUM}",mode=unload
#Abbrechen, falls Fehler auftritt
if [ $? -eq 1 ]
then
echo "Datei: $WEBAPP/WEB-INF/classes/edustore/upgrade_script/edustore_${MODUL_CREATE_EINGABE}.xml wurde nicht richtig erzeugt. edustore.xml Upgrade für Modul ${MODUL_CREATE_EINGABE} abgebrochen."
echo "Datei: $WEBAPP/../src/edustore/edustore_${MODUL_CREATE_EINGABE}.xml wurde nicht richtig erzeugt. edustore.xml Upgrade für Modul ${MODUL_CREATE_EINGABE} abgebrochen."
else
cp $WEBAPP/WEB-INF/classes/edustore/upgrade_script/edustore_${MODUL_CREATE_EINGABE}.xml $WEBAPP/WEB-INF/classes/edustore/
cp $WEBAPP/../src/edustore/edustore_${MODUL_CREATE_EINGABE}.xml $WEBAPP/WEB-INF/classes/edustore/
#Dann edustore_<MODUL>.xml ergänzen
cd $SUPERX_DIR/db/bin
./edustore_xml_upgrade.x $WEBAPP/WEB-INF/classes/edustore/edustore_${MODUL_CREATE_EINGABE}.xml

64
superx/WEB-INF/conf/edustore/db/bin/extraction-script-creator.bat

@ -1,32 +1,32 @@ @@ -1,32 +1,32 @@
@echo off
rem -----------------------------
rem Shell-Kommando "dosql"
rem -----------------------------
rem -------------------------------------------------------------------
rem Shellvariablen setzen und eingegebene SQL-Anweisungen (aus Datei)
rem in der SuperX-Datenbank ausfuehren.
rem -------------------------------------------------------------------
call %SUPERX_DIR%\db\bin\SQL_ENV
if not "%1" == "" goto gotTable
echo "Aufruf: extraction-script-creator <Joolap-Category> <Systeminfo-tid>"
echo " "
echo "Aktion: extraction-script-creator erzeugt das Script zum Entladen der Rohdaten des Würfels"
echo ""
echo " "
goto finish
:gotTable
set CATEGORY=%1
set SYSTEMINFO=%2
echo sx_transform %CATEGORY%\joolap.xml extraction-script-creator_bat.xsl %CATEGORY%\extraction-script.bat text "-PARAM CATEGORY %CATEGORY% -PARAM SYSTEMINFO %SYSTEMINFO%"
java -cp .;%XML_CLASSPATH% org.apache.xalan.xslt.Process -IN %CATEGORY%\joolap.xml -XSL extraction-script-creator_bat.xsl -OUT %CATEGORY%\extraction-script.bat -TEXT -PARAM CATEGORY %CATEGORY% -PARAM SYSTEMINFO %SYSTEMINFO%
rem sx_transform %CATEGORY%\joolap.xml extraction-script-creator_bat.xsl %CATEGORY%\extraction-script.bat -TEXT "-PARAM CATEGORY %CATEGORY% -PARAM SYSTEMINFO %SYSTEMINFO%"
:finish
@echo off
rem -----------------------------
rem Shell-Kommando "dosql"
rem -----------------------------
rem -------------------------------------------------------------------
rem Shellvariablen setzen und eingegebene SQL-Anweisungen (aus Datei)
rem in der SuperX-Datenbank ausfuehren.
rem -------------------------------------------------------------------
call %SUPERX_DIR%\db\bin\SQL_ENV
if not "%1" == "" goto gotTable
echo "Aufruf: extraction-script-creator <Joolap-Category> <Systeminfo-tid>"
echo " "
echo "Aktion: extraction-script-creator erzeugt das Script zum Entladen der Rohdaten des Würfels"
echo ""
echo " "
goto finish
:gotTable
set CATEGORY=%1
set SYSTEMINFO=%2
echo sx_transform %CATEGORY%\joolap.xml extraction-script-creator_bat.xsl %CATEGORY%\extraction-script.bat text "-PARAM CATEGORY %CATEGORY% -PARAM SYSTEMINFO %SYSTEMINFO%"
java -cp .;%XML_CLASSPATH% org.apache.xalan.xslt.Process -IN %CATEGORY%\joolap.xml -XSL extraction-script-creator_bat.xsl -OUT %CATEGORY%\extraction-script.bat -TEXT -PARAM CATEGORY %CATEGORY% -PARAM SYSTEMINFO %SYSTEMINFO%
rem sx_transform %CATEGORY%\joolap.xml extraction-script-creator_bat.xsl %CATEGORY%\extraction-script.bat -TEXT "-PARAM CATEGORY %CATEGORY% -PARAM SYSTEMINFO %SYSTEMINFO%"
:finish

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save