package de.superx.applet; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Container; import java.awt.Cursor; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; import java.awt.FontMetrics; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.io.IOException; import java.net.URL; import java.sql.SQLException; import java.text.DateFormat; import java.text.ParseException; import java.util.Calendar; import java.util.Enumeration; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; import java.util.TimeZone; import java.util.Vector; import javax.help.CSH; import javax.help.HelpBroker; import javax.help.HelpSet; import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JEditorPane; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JRootPane; import javax.swing.JScrollBar; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import javax.swing.JTextField; import javax.swing.JToolBar; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; import de.memtext.util.ClipboardUtils; import de.memtext.util.DateUtils; import de.memtext.util.WindowUtils; import de.memtext.widgets.HorizontalBox; import de.memtext.widgets.VerticalBox; import de.memtext.widgets.WarningMessage; import de.superx.common.DBServletException; import de.superx.common.FieldContainer; import de.superx.common.Sichten; import de.superx.common.Sichtgruppe; import de.superx.common.SxResultRow; import de.superx.common.SxUser; /** * SuperX-Hauptmaske, mit dem Buttons für Anmelden, Kopieren, Drucken etc und * den Registerkarten Themenauswahl, Maske und Ergebnistabelle. * * @version 2.0 01-01-02 * @author Rainer Behr, erweitert von Marlies Winterstein, Meikel Bisping */ public class SxMask extends JPanel implements ComponentListener { private static final long serialVersionUID = 1L; private static final Font SMALL_BOLD_FONT = new Font("SansSerif", Font.BOLD, 10); private static final Font NORMAL_BOLD_FONT = new Font("SansSerif", Font.BOLD, 12); private static final Font NORMAL_FONT = new Font("SansSerif", Font.PLAIN, 12); private static final Font SMALL_FONT = new Font("SansSerif", Font.PLAIN, 10); private SxUser user = new SxUser("default"); //kein Mandantenbetrieb für Applet private static boolean isApplet = false; private static boolean isLogin = false; private boolean helpsetfound = false; private static int countFrame = 0; private boolean dummyLogin = false; private JFrame sxFrame; private SxMask sxMask; // r.b. 'this' private SxLogoPanel logo; private Hashtable sx_map = null; private Thread activeThread = null; private boolean isInterrupted = false; private JTabbedPane tabPane; private ConnectionDlg connectionDlg; //Um Erläuterungen zu Masken anzuzeigen private ExplanationFrame explanationFrame = new ExplanationFrame(); private JButton btnExplanation = new JButton("Erläuterung"); private MaskeninfoElement selectedMaskeninfoElement = new MaskeninfoElement(); private String sxTitle, serverURL, logToKonsole; private ParameterPanel parameterPanel = new ParameterPanel(); // private Vector V_sachgeb = new Vector(); private Vector V_thema = new Vector(100); private SxTablePanel sxTablePanel = null; private Integer lastMaskeID = new Integer(-1); private JButton dbBtn, openBtn, searchBtn, resetBtn, stopBtn, themenAuswahlBtn; private JButton cloneBtn, copyBtn, saveBtn, printBtn, infoBtn, passwdBtn; private JScrollPane themenwahlscroll; private JTree themenwahltree; private GridBagConstraints gbctree = new GridBagConstraints(); private GridBagLayout gbl = new GridBagLayout(); JEditorPane terlaeuterung = new JEditorPane("text/html", ""); private JButton suchAbfrBtn, themenStandBtn, helpBtn; private SxThemenbaum sxThemenbaum; private JLabel themenStandLabel, aktuelleNachrichtL; private SxForm maskeForm; private JPanel sxSpanel; private JTextField statusField; private HelpSet hs; private HelpBroker hb; //String helpItemString = "tut.starttoc"; private String helpItemString = "SuperXAnleitung.htm"; class CloneListener implements ActionListener, Runnable { CloneListener clone_th; CloneListener() { }; public void actionPerformed(ActionEvent e) { if (isLogin == false) return; clone_th = new CloneListener(); new Thread(clone_th).start(); } public void run() { SxMask cloneM = new SxMask("SuperX", sx_map, isApplet); cloneM.setUser(user); } } class OpenListener implements ActionListener, Runnable { OpenListener open_th; OpenListener() { }; public void actionPerformed(ActionEvent e) { //Wint Hilfe entsprechend setzen if (selectedMaskeninfoElement.getTid() != null) { helpItemString = "M" + selectedMaskeninfoElement.getTid() + ".htm"; //System.out.println("helpItemString: " + helpItemString); } //helpItemString = "build.build"; //CSH.setHelpIDString(openBtn,helpItemString); if (helpsetfound) { CSH.setHelpIDString(helpBtn, helpItemString); hb.enableHelpKey(getRootPane(), helpItemString, hs); } open_th = new OpenListener(); activeThread = new Thread(open_th); activeThread.start(); } public void run() { // System.err.println ("OpenListener: " + openBtn.getActionCommand // ()); if (selectedMaskeninfoElement.getTid() == null) { getToolkit().beep(); statusField.setText("Bitte ein Thema auswählen !"); return; } maskeOeffnen(); activeThread = null; } } class ConnectListener implements ActionListener, Runnable { private ConnectListener connect_th; private int mode; ConnectListener(int mode) { this.mode = mode; } public void actionPerformed(ActionEvent e) { dbBtn.setEnabled(false); int rc = -1; if (isLogin && countFrame > 1) rc = 0; else rc = showConnectionDialog(); if (rc < 0 || rc == 2) { dbBtn.setEnabled(true); return; } DefaultTreeModel model =(DefaultTreeModel) themenwahltree.getModel(); DefaultMutableTreeNode root=(DefaultMutableTreeNode) themenwahltree.getModel().getRoot(); root.removeAllChildren(); model.reload(root); connect_th = new ConnectListener(rc); activeThread = new Thread(connect_th); activeThread.start(); } public void run() { //ist ja An/Ummeldung daher SuperX.isAuthentificationFound = false; initUser(mode); } } class SearchListener implements ActionListener, Runnable { SearchListener search_th; SearchListener() { }; public void actionPerformed(ActionEvent e) { //Wint Hilfe entsprechend setzen if (selectedMaskeninfoElement.getTid() != null) { helpItemString = "T" + selectedMaskeninfoElement.getTid() + ".htm"; //System.out.println("helpItemString: " + helpItemString); } //helpItemString = "debug.overview"; if (helpsetfound) { CSH.setHelpIDString(helpBtn, helpItemString); hb.enableHelpKey(getRootPane(), helpItemString, hs); } search_th = new SearchListener(); activeThread = new Thread(search_th); activeThread.start(); } public void run() { try { logo.start(); isInterrupted = false; searchBtn.setEnabled(false); resetBtn.setEnabled(false); Integer fixedColumns = new Integer(selectedMaskeninfoElement .getXilProps().getProperty("fixed_columns", "1")); sxTablePanel.setFixedColumns(fixedColumns.intValue()); String hinweis = selectedMaskeninfoElement.getHinweis(); if (hinweis != null) { if (hinweis.startsWith("<>")) { hinweis = hinweis.substring(7, hinweis.length()); try { //in Generate-sql wird auch Stand von Sichtfeldern // gesetzt String sql = SxUtils .generateSQL(maskeForm, hinweis); SxSQL.executeQuery(sql); SxResultRow r=(SxResultRow) SxSQL.getResult().first(); hinweis = (String) r.get(0); } catch (Exception e) { hinweis = null; } } //System.out.println("setting Hinweis:"+Hinweis); } maskeForm.setHinweis(hinweis); //throws an exception if something's wrong maskeForm.checkFields(); // Generate SQL boolean isTemplate = selectedMaskeninfoElement.getSelectStmt() .toUpperCase().indexOf("FREEMARKER TEMPLATE") > -1; String selectString = SxUtils.generateSQL(maskeForm, selectedMaskeninfoElement.getSelectStmt() + "\n" + selectedMaskeninfoElement.getCleanupStmt()); if (isTemplate) { //Trickmethode!! HashMap map = maskeForm.getHashMap(selectedMaskeninfoElement.getTid()); selectString = SxSQL.templateProcessor.process("Maske " + selectedMaskeninfoElement.getName(), selectString, map, (String) SxDefaults.getPropertyValue("SxDB")); } statusField.setBackground(Color.yellow); statusField.setText("Bitte warten .."); // Default-Values //Wint, vorübergehend zum Testen der Abfragen, Merken der Werte // ausschalten //Gedächtnis! maskeForm.rememberSelectionsAsDefaults(); // Parameterliste setzen parameterPanel.setParams(maskeForm.getParamList(user.getName(), true)); parameterPanel.setStand(selectedMaskeninfoElement .getStandString()); parameterPanel.setAbfragename(selectedMaskeninfoElement .getName()); //JLabel F_parameter = (JLabel) // tabelleForm.getComp("F_parameter"); //F_parameter.setText(); // Parameterliste stopBtn.setEnabled(true); SxSQL.executeAll("--Abfrage\n" + selectString); if (SxSQL.getRowCount() == 0) lastMaskeID = new Integer(-1); if (!selectedMaskeninfoElement.isSqlInHeaders() && selectedMaskeninfoElement.getTid().equals( lastMaskeID)) sxTablePanel.setData(SxSQL.getResultVector()); else { Vector headerVector = selectedMaskeninfoElement .getHeaderVector(); Vector resultVector = SxSQL.getResultVector(); SxSQLMetaData metaData = SxSQL.getResultSetMetaData(); if (selectedMaskeninfoElement.isSqlInHeaders()) runSqlInTableHeaders(headerVector); sxTablePanel.setData(resultVector, headerVector, selectedMaskeninfoElement.getWidthVector(), //selectedMaskeninfoElement.getSpaltenExplanations(), metaData); } if (SxSQL.getRowCount() > 0) lastMaskeID = selectedMaskeninfoElement.getTid(); //if (cleanupString.length () > 0) // SxSQL.execute (cleanupString); //MB } String nachr = SxSQL.getAktuelleNachricht(); if (nachr != null && !nachr.equals("")) { //aktuelleNachrichtL.setText(""+nachr+""); //aktuelleNachrichtL.setBackground(java.awt.Color.orange); statusField .setText("Bei der Abfrage ist ein SQL-Fehler aufgetreten (siehe Java-Konsole)"); System.out.println("SQL-Fehler: " + nachr); } //MB vertikal Scrollbar nach oben JScrollBar vsbar = sxTablePanel.getScrollPane() .getVerticalScrollBar(); vsbar.setValue(vsbar.getMinimum()); tabPane.setSelectedIndex(2); sxMask.repaint(); statusField.setBackground(Color.white); if (nachr == null || nachr.length() < 1) statusField.setText(sxTablePanel.getTable().getRowCount() + " Sätze gefunden"); } catch (SQLException ex) { String msg = ex.toString(); // System.err.println("msg: " + msg); ex.printStackTrace(); statusField.setText(msg.substring(msg.lastIndexOf(":") + 1)); ClipboardUtils.setContents(msg, null); statusField.setBackground(Color.red); try { // Bei Fehler neue Verbindung --> temp. Tabellen werden // geloescht SxSQL.close(); ImageIcon disconnect_icon = (ImageIcon) sx_map .get("disconnect"); dbBtn.setIcon(disconnect_icon); dbBtn.setDisabledIcon(disconnect_icon); if (countFrame == 1) passwdBtn.setEnabled(false); passwdBtn.setVisible(SuperX.remoteUser == null); openBtn.setEnabled(false); //TODO logging eintrag über Maskenaufruf /* * SxSQL.setUrl(serverURL); SxSQL.setLogMode(logToKonsole); * SxSQL.check(user); */ lastMaskeID = new Integer(-1); statusField.setBackground(Color.white); //statusField.setText("DB-Verbindung erneuert"); ImageIcon connect_icon = (ImageIcon) sx_map.get("connect"); dbBtn.setIcon(connect_icon); dbBtn.setDisabledIcon(connect_icon); if (countFrame == 1) passwdBtn.setEnabled(true); passwdBtn.setVisible(SuperX.remoteUser == null); openBtn.setEnabled(true); } catch (Exception ex2) { String msg2 = ex2.toString(); ex2.printStackTrace(); statusField.setText(msg2 .substring(msg2.lastIndexOf(":") + 1)); ClipboardUtils.setContents(msg2, null); } } catch (Exception ex_input) { String msg = ex_input.toString(); ex_input.printStackTrace(); System.out.println(ex_input.toString()); JOptionPane.showMessageDialog(sxMask, msg.substring(msg .lastIndexOf(":") + 1), "Eingabefehler", JOptionPane.ERROR_MESSAGE); ClipboardUtils.setContents(msg, null); } searchBtn.setEnabled(true); resetBtn.setEnabled(true); stopBtn.setEnabled(false); logo.stop(); JRootPane root = sxMask.getRootPane(); root.setDefaultButton(searchBtn); // DefaultButton setzen sxMask.repaint(); activeThread = null; } private void runSqlInTableHeaders(Vector headerVector) { //selectedMaskeninfoElement.cloneExplanations(); for (int i = 0; i < headerVector.size(); i++) { String aHeader = headerVector.get(i).toString(); String query; if (aHeader.trim().startsWith("<>")) { try { query = SxUtils.generateSQL(maskeForm, aHeader .substring(7)); SxSQL.executeQuery(query); Vector row0 = (Vector) SxSQL.getResultVector().get(0); String newHeader = row0.get(0).toString(); headerVector.remove(i); headerVector.add(i, newHeader); selectedMaskeninfoElement.adaptExplanation(i,newHeader); } catch (SQLException e) { WarningMessage.show(sxMask, "Spaltenüberschrift mit dem Ausdruck\n" + aHeader + "\nkonnte nicht aufgebaut werden", "SuperX"); ClipboardUtils.setContents(e.toString(), null); } } } } } class StopListener implements ActionListener { StopListener() { }; public void actionPerformed(ActionEvent e) { stopBtn.setEnabled(false); try { logo.start(); statusField.setBackground(Color.red); statusField.setText("Abbrechen .."); if (activeThread != null) { activeThread.interrupt(); isInterrupted = true; SxSQL.cancel(); // Methode not supplied by Informix JDBC isInterrupted = true; searchBtn.setEnabled(true); } } catch (Exception ex) { String msg = ex.toString(); // System.err.println("msg: " + msg); ex.printStackTrace(); statusField.setText(msg.substring(msg.lastIndexOf(":") + 1)); ClipboardUtils.setContents(msg, null); } stopBtn.setEnabled(true); logo.stop(); } } class ResetListener implements ActionListener { ResetListener() { }; public void actionPerformed(ActionEvent e) { resetBtn.setEnabled(false); String fielddefault = new String(); String fieldname = new String(); for (int i = 0; i < selectedMaskeninfoElement.getFelderinfos() .size(); i++) { Vector V_field = (Vector) selectedMaskeninfoElement .getFelderinfos().elementAt(i); fieldname = (String) V_field.elementAt(1); if (fieldname != null) fieldname = fieldname.trim(); fielddefault = (String) V_field.elementAt(14); if (fielddefault != null) fielddefault = fielddefault.trim(); SxField field = maskeForm.getField("F_" + fieldname); if (field!=null&&field.hasSichten()) field.clearSichtSelections(); // Default-Wert aus Tab. 'felderinfo' setzen if (fielddefault != null) { if (fielddefault.startsWith("<>")) { try { String stmt = fielddefault.substring(7); SxSQL.executeAll(stmt); Vector V_default = (Vector) SxSQL.getResultVector() .elementAt(0); Object key, value; if (V_default.size() == 2) { key = V_default.elementAt(0); field.setKey(key); value = V_default.elementAt(1); if (value instanceof java.sql.Date) value = SxDate .toString((java.sql.Date) value); field.setText(value.toString()); } if (V_default.size() == 1) { field.setKey(new Integer("-1")); value = V_default.elementAt(0); if (value instanceof java.sql.Date) value = SxDate .toString((java.sql.Date) value); field.setText(value.toString()); } } catch (Exception ex) { System.err.println(ex.toString()); ClipboardUtils.setContents(ex.toString(), null); } } else { if (field != null) {field.setText(fielddefault); field.setKey(new Integer(-1)); } } } } maskeForm.rememberSelectionsAsDefaults(); resetBtn.setEnabled(true); logo.stop(); } } class CopyListener implements ActionListener, Runnable { CopyListener copy_th; CopyListener() { }; public void actionPerformed(ActionEvent e) { copy_th = new CopyListener(); new Thread(copy_th).start(); } public void run() { if (sxTablePanel == null) return; StringBuffer data = new StringBuffer(); data.append(SxDefaults.getPropertyValue("SxTitle")); data.append("\n\n"); data.append(selectedMaskeninfoElement.getName()); data.append("\n"); data.append(selectedMaskeninfoElement.getStand()); data.append("\n\nEingabeparameter:\n"); data.append(maskeForm.getParamList(user.getName(), false)); data.append("\n\n"); //Wint "\n" in Überschrift streichen String s1 = SxUtils.replace(sxTablePanel.getText(), "\\n", ""); s1 = SxUtils.replace(s1, "\"", "'"); //wg. Problemen mit Excel data.append(s1); ClipboardUtils.setContents(data, null); } } class SaveDlgListener implements ActionListener { SaveDlgListener() { }; public void actionPerformed(ActionEvent e) { try { JFileChooser file_dlg = new JFileChooser(); file_dlg.setDialogType(JFileChooser.SAVE_DIALOG); SaveListener savel = new SaveListener(file_dlg); file_dlg.addActionListener(savel); file_dlg.showDialog(sxMask, "Sichern .."); } catch (Exception ex) { ClipboardUtils.setContents(ex.toString(), null); JOptionPane.showMessageDialog(sxMask, ex.toString(), "Fehler", JOptionPane.ERROR_MESSAGE); } } } class SaveListener implements ActionListener, Runnable { SaveListener save_th; JFileChooser file_dlg; SaveListener(JFileChooser aFile_dlg) { file_dlg = aFile_dlg; }; public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("CancelSelection")) return; save_th = new SaveListener(file_dlg); new Thread(save_th).start(); } public void run() { File out_file = file_dlg.getSelectedFile(); //if (out_file != null) // sxTablePanel.saveTable(out_file, sxMask); } } class PrintListener implements ActionListener, Runnable { PrintListener print_th; PrintListener() { }; public void actionPerformed(ActionEvent e) { print_th = new PrintListener(); new Thread(print_th).start(); } public void run() { try { printBtn.setEnabled(false); sxTablePanel.printTable(sxMask); } catch (Exception ex) { String msg = ex.toString(); ClipboardUtils.setContents(msg, null); statusField.setText(msg.substring(msg.lastIndexOf(":") + 1)); } printBtn.setEnabled(true); } } /* * //Wint class HelpListener implements ActionListener, Runnable { * HelpListener help_th; * * HelpListener(HelpBroker mainhb) { new CSH.DisplayHelpFromSource(mainhb); }; * * public void actionPerformed(ActionEvent e) { help_th = new * HelpListener(hb); * * new Thread(help_th).start(); } * * public void run() { try { helpBtn.setEnabled(false); * //helpBtn.addActionListener(new CSH.DisplayHelpFromSource(hb)); String * p_maske = SxMask.this.getName(); if (activeMaskeID != null) * System.out.println("ID: " + activeMaskeID.toString().toString()); * System.out.println(p_maske); CSH.setHelpIDString(getRootPane(), * "edit.editsource"); //helpBtn.addActionListener(new * CSH.DisplayHelpAfterTracking(hb)); helpBtn.addActionListener(new * CSH.DisplayHelpFromSource(hb)); } catch (Exception ex) { String msg = * ex.toString(); statusField.setText(msg.substring(msg.lastIndexOf(":") + * 1)); } * * helpBtn.setEnabled(true); } } */ class PwdListener implements ActionListener { JFrame frame; PwdListener(JFrame frame) { this.frame = frame; }; public void actionPerformed(ActionEvent e) { int rc = -1; //Hilfe für Paßwortänderung if (helpsetfound) { helpItemString = "Anmelden.htm"; CSH.setHelpIDString(passwdBtn, helpItemString); hb.enableHelpKey(passwdBtn, helpItemString, hs); hb.enableHelp(passwdBtn, helpItemString, hs); //CSH.setHelpIDString(helpBtn,helpItemString); } SxPasswdChangeDlg passwdChangeDlg = new SxPasswdChangeDlg(frame, "Passwort ändern"); passwdChangeDlg.setNewPasswordChecker(SxSQL.newPasswordChecker); // if (SxSQL.isAdmin()) { // passwdChangeDlg.setUsernameFieldEnabled(true); // passwdChangeDlg.setCheckOldPasswdWanted(false); // } else { passwdChangeDlg.setUsername(user.getName()); passwdChangeDlg.setUsernameFieldEnabled(false); passwdChangeDlg.setCheckOldPasswdWanted(true); // } passwdChangeDlg.show(); if (!passwdChangeDlg.wasOkSelected()) return; try { WindowUtils.setWaitCursor(statusField, true); //admin könnte auch von anderen Usern dass Passwort //ändern, darum wird nicht direkt user genommen, //sondern userToBeChanged SxUser userToBeChanged = null; if (user.getName().equals(passwdChangeDlg.getUsername())) userToBeChanged = user; else userToBeChanged = new SxUser("default", passwdChangeDlg.getUsername(), passwdChangeDlg.getOldPasswd()); SxSQL.storePwd(userToBeChanged, passwdChangeDlg.getNewPasswd(), true); //kein Mandantenbetrieb bei Applet statusField.setBackground(Color.white); statusField.setText("Kennwort geändert"); passwdChangeDlg.clear(); } catch (Exception ex) { ex.printStackTrace(); String msg = ex.toString(); ClipboardUtils.setContents(msg, null); msg = msg.substring(msg.lastIndexOf(":") + 1); statusField.setBackground(Color.red); statusField.setText(msg); JOptionPane.showMessageDialog(sxMask, msg, "Fehler", JOptionPane.ERROR_MESSAGE); statusField.setBackground(Color.white); statusField.setText(""); } finally { WindowUtils.setWaitCursor(statusField, false); } } } class SuchAbfrListener implements ActionListener, Runnable { SuchAbfrListener SuchAbfr_th; JTree tree; SuchAbfrListener(JTree ltree) { tree = ltree; }; public void actionPerformed(ActionEvent e) { SuchAbfr_th = new SuchAbfrListener(tree); new Thread(SuchAbfr_th).start(); } public void run() { // AbfrageSuchen(); JTree tree = themenwahltree; String such = JOptionPane.showInputDialog(null, "Suche nach Abfragen:", "SuperX", JOptionPane.QUESTION_MESSAGE); if (such.length() < 1) return; such = such.toLowerCase(); String teststring; TreePath tp; boolean gefunden = false; DefaultMutableTreeNode root, test, ausgesucht; ausgesucht = null; Vector treffer = new Vector(); Vector treffernodes = new Vector(); //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) showBigChoiceDialog(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 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.clearSelection(); tree.setSelectionPath(tp); tree.scrollPathToVisible(tp); // tree.makeVisible(tp); //tree.validate(); //tree.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; } } class ThemenStandListener implements ActionListener { ThemenStandListener() { }; public void actionPerformed(ActionEvent e) { DateFormat df; String neuerStand = JOptionPane.showInputDialog(null, "Neues Datum eingeben:", "SuperX", JOptionPane.QUESTION_MESSAGE); df = DateFormat.getDateInstance(DateFormat.MEDIUM); // r.b. default Jahr 4-stellig df.setTimeZone(TimeZone.getDefault()); df.setLenient(false); String geprueft = 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); java.sql.Date 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) // Form Ok { sxMask.setCursor(new Cursor(Cursor.WAIT_CURSOR)); themenStandLabel.setText(neuerStand); try { installThemenbaum(neuerStand); } catch (SQLException e1) { ClipboardUtils.setContents(e1.toString(), null); WarningMessage.show(sxMask, e1.toString(), "Fehler"); } sxMask.validate(); sxMask.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } else JOptionPane.showMessageDialog(null, "Ungültige Eingabe!", "SuperX", JOptionPane.ERROR_MESSAGE); } } class ThemenwahlPanel extends JPanel { ThemenwahlPanel() { super(new BorderLayout()); JPanel centerp = new JPanel(); GridBagConstraints gbc = new GridBagConstraints(); centerp.setLayout(gbl); themenStandLabel = new JLabel(DateUtils.getTodayString()); themenStandLabel.setFont(SMALL_FONT); JLabel lerlaueterung = new JLabel("Erläuterung"); lerlaueterung.setBackground(java.awt.Color.orange); JLabel platzhalterl = new JLabel(" "); JLabel platzhalterr = new JLabel(" "); themenStandBtn = new JButton("anderer Stand"); themenStandBtn.setFont(SMALL_FONT); themenStandBtn.setToolTipText("Zugriff auf alte Abfragen"); ThemenStandListener tsl = new ThemenStandListener(); themenStandBtn.addActionListener(tsl); gbc.gridx = 0; gbc.gridy = 0; gbc.gridwidth = 1; gbc.gridheight = 1; gbc.weightx = 0; gbc.weighty = 0; gbc.insets = new Insets(10, 2, 2, 0); gbc.fill = GridBagConstraints.NONE; gbc.anchor = GridBagConstraints.CENTER; gbl.setConstraints(platzhalterl, gbc); centerp.add(platzhalterl); JPanel pstand = new JPanel(); //Stand des Themenbaum erstmal nicht anzeigen //pstand.add(ThemenStandLabel); //pstand.add(ThemenStandBtn); gbc.gridx = 1; gbc.gridy = 0; gbl.setConstraints(pstand, gbc); centerp.add(pstand); gbc.gridx = 2; gbc.gridy = 0; // gbl.setConstraints(ThemenStandBtn, gbc); // centerp.add(ThemenStandBtn); gbc.gridx = 2; gbc.gridy = 0; gbl.setConstraints(platzhalterr, gbc); centerp.add(platzhalterr); gbc.gridx = 5; gbc.gridy = 0; gbl.setConstraints(lerlaueterung, gbc); centerp.add(lerlaueterung); //Pseudo initial-Baum anzeigen DefaultMutableTreeNode dummy = new DefaultMutableTreeNode( "Abfragen"); dummy.add(new DefaultMutableTreeNode("")); themenwahltree = new JTree(dummy); TreePath tp = new TreePath(dummy.getPath()); themenwahltree.collapsePath(tp); themenwahlscroll = new JScrollPane(themenwahltree); themenwahlscroll .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); gbctree.gridx = 0; gbctree.gridy = 1; gbctree.gridwidth = 4; gbctree.gridheight = 4; gbctree.insets = new Insets(0, 0, 0, 0); gbctree.weightx = 100; gbctree.weighty = 100; gbctree.fill = GridBagConstraints.BOTH; gbl.setConstraints(themenwahlscroll, gbctree); centerp.add(themenwahlscroll); terlaeuterung.setFont(NORMAL_FONT); terlaeuterung.setEditable(false); terlaeuterung.setAlignmentX(CENTER_ALIGNMENT); JScrollPane erlScroll = new JScrollPane(terlaeuterung); gbc.gridx = 4; gbc.gridy = 1; gbc.gridwidth = 2; gbc.gridheight = 4; gbc.weightx = 100; gbc.weighty = 1000; gbc.fill = GridBagConstraints.BOTH; gbc.insets = new Insets(0, 0, 0, 0); gbl.setConstraints(erlScroll, gbc); centerp.add(erlScroll); gbc.gridx = 1; gbc.gridy = 5; gbc.gridwidth = 1; gbc.gridheight = 1; gbc.insets = new Insets(5, 0, 5, 0); suchAbfrBtn = new JButton("Abfrage suchen"); suchAbfrBtn.setFont(SMALL_FONT); suchAbfrBtn.setToolTipText("Suchen von Abfragen mittels Stichwort"); SuchAbfrListener sabl = new SuchAbfrListener(themenwahltree); suchAbfrBtn.addActionListener(sabl); //psuchAbfr.add(suchAbfrBtn); gbc.gridx = 2; gbc.gridy = 5; gbc.gridwidth = 1; gbc.gridheight = 1; gbc.insets = new Insets(5, 0, 5, 0); gbc.fill = GridBagConstraints.NONE; gbc.weightx = 0; gbc.weighty = 0; gbc.ipadx = 0; gbl.setConstraints(suchAbfrBtn, gbc); centerp.add(suchAbfrBtn); JButton anpassenBtn = new JButton("anpassen"); anpassenBtn.setVisible(false); anpassenBtn.setFont(SMALL_FONT); gbc.gridx = 4; gbc.gridy = 5; gbc.gridwidth = 1; gbc.gridheight = 1; gbc.insets = new Insets(5, 0, 5, 0); gbc.fill = GridBagConstraints.NONE; gbc.weightx = 0; gbc.weighty = 0; gbl.setConstraints(anpassenBtn, gbc); centerp.add(anpassenBtn); aktuelleNachrichtL = new JLabel(""); aktuelleNachrichtL.setBackground(java.awt.Color.orange); aktuelleNachrichtL.setVisible(true); aktuelleNachrichtL.setFont(SMALL_FONT); gbc.gridx = 1; gbc.gridy = 6; gbc.gridwidth = 5; gbc.gridheight = 1; gbc.insets = new Insets(5, 0, 5, 0); gbc.fill = GridBagConstraints.NONE; gbc.weightx = 0; gbc.weighty = 0; gbl.setConstraints(aktuelleNachrichtL, gbc); centerp.add(aktuelleNachrichtL); JPanel openBtnPanel = new JPanel(); openBtnPanel.setBorder(BorderFactory.createEtchedBorder()); openBtn = new JButton("Öffnen"); openBtn.setMnemonic(KeyEvent.VK_O); openBtn.addActionListener(new OpenListener()); openBtn.setFont(NORMAL_BOLD_FONT); openBtn.setEnabled(false); //Hilfe //helpItemString = "proj.import"; helpItemString = "Themaauswhlen.htm"; CSH.setHelpIDString(openBtn, helpItemString); openBtnPanel.add(openBtn); this.add(centerp, BorderLayout.CENTER); this.add(openBtnPanel, BorderLayout.SOUTH); } } //der Druckdialog greift direkt auf die JLabels zu //wegen Font, Größe und Inhalt class ParameterPanel extends JPanel { JLabel lblAbfragename, lblEingabeparam, lblParams, lblStand; ParameterPanel() { super(new BorderLayout()); VerticalBox topBox = new VerticalBox(); topBox.addStrut(10); lblAbfragename = new JLabel(); lblAbfragename.setFont(new Font("SansSerif", Font.BOLD, 14)); lblParams = new JLabel(); this.setMaximumSize(new Dimension(200, 1000)); lblEingabeparam = new JLabel("Parameter: "); topBox.add(lblAbfragename); topBox.addStrut(5); topBox.add(lblEingabeparam); topBox.addStrut(5); this.add(topBox, BorderLayout.NORTH); this.add(lblParams, BorderLayout.CENTER); lblStand = new JLabel(); this.add(lblStand, BorderLayout.SOUTH); } public void setAbfragename(String name) { lblAbfragename.setText(name); } public void setParams(String params) { lblParams.setText(params); } public void setStand(String stand) { lblStand.setText("Stand: " + stand); } } class SxToolbar extends JToolBar { SxToolbar(JFrame frame) { // images in sx_map ImageIcon disconnect_icon = (ImageIcon) sx_map.get("disconnect"); ImageIcon clone_icon = (ImageIcon) sx_map.get("clone"); ImageIcon copy_icon = (ImageIcon) sx_map.get("copy"); ImageIcon save_icon = (ImageIcon) sx_map.get("save"); ImageIcon print_icon = (ImageIcon) sx_map.get("print"); ImageIcon info_icon = (ImageIcon) sx_map.get("info"); ImageIcon passwd_icon = (ImageIcon) sx_map.get("passwd"); ImageIcon help_icon = (ImageIcon) sx_map.get("help"); this.setFloatable(false); dbBtn = new JButton("Anmelden", disconnect_icon); dbBtn.setMargin(new Insets(2, 2, 2, 2)); dbBtn.setDisabledIcon(disconnect_icon); dbBtn.setMnemonic(KeyEvent.VK_D); dbBtn.setHorizontalTextPosition(JButton.CENTER); dbBtn.setVerticalTextPosition(JButton.BOTTOM); dbBtn.setFont(NORMAL_FONT); ConnectListener conl = new ConnectListener(0); dbBtn.addActionListener(conl); this.add(dbBtn); dbBtn.setVisible(SuperX.remoteUser == null); passwdBtn = new JButton("Passwort", passwd_icon); passwdBtn.setMargin(new Insets(2, 2, 2, 2)); passwdBtn.setHorizontalTextPosition(JButton.CENTER); passwdBtn.setVerticalTextPosition(JButton.BOTTOM); passwdBtn.setFont(NORMAL_FONT); PwdListener pwdl = new PwdListener(frame); passwdBtn.addActionListener(pwdl); passwdBtn.setEnabled(countFrame == 1 ? true : false); passwdBtn.setEnabled(false); this.add(passwdBtn); passwdBtn.setVisible(SuperX.remoteUser == null); cloneBtn = new JButton("Clone", clone_icon); cloneBtn .setToolTipText("öffnet weiteres SuperX-Fenster! Anschließend Anmelden anklicken!"); cloneBtn.setMargin(new Insets(2, 2, 2, 2)); cloneBtn.setHorizontalTextPosition(JButton.CENTER); cloneBtn.setVerticalTextPosition(JButton.BOTTOM); cloneBtn.setFont(NORMAL_FONT); cloneBtn.setEnabled(false); CloneListener clonel = new CloneListener(); cloneBtn.addActionListener(clonel); this.add(cloneBtn); copyBtn = new JButton("Kopieren", copy_icon); copyBtn .setToolTipText("Ergebnisse in Zwischenablage kopieren (als Trennzeichen wird Tabulator benutzt)"); copyBtn.setMargin(new Insets(2, 2, 2, 2)); copyBtn.setHorizontalTextPosition(JButton.CENTER); copyBtn.setVerticalTextPosition(JButton.BOTTOM); copyBtn.setFont(NORMAL_FONT); CopyListener copyl = new CopyListener(); copyBtn.addActionListener(copyl); this.add(copyBtn); saveBtn = new JButton("Sichern", save_icon); saveBtn.setToolTipText("Ergebnisse in Datei speichern"); saveBtn.setMargin(new Insets(2, 2, 2, 2)); saveBtn.setHorizontalTextPosition(JButton.CENTER); saveBtn.setVerticalTextPosition(JButton.BOTTOM); saveBtn.setFont(NORMAL_FONT); SaveDlgListener savedlgl = new SaveDlgListener(); saveBtn.addActionListener(savedlgl); //Wint 24.7.2001 Button gesperrt, wegen Problemen mit Policy //da angenommen wird, das er sowieso nicht benutzt wird. //Die Fehlermeldungen weisen darauf hin, dass FileChoser die ganze //Platte durchlesen will -- evtl. Vorbehalte bei Usern //this.add (saveBtn); printBtn = new JButton("Drucken", print_icon); printBtn.setMargin(new Insets(2, 2, 2, 2)); printBtn.setHorizontalTextPosition(JButton.CENTER); printBtn.setVerticalTextPosition(JButton.BOTTOM); printBtn.setFont(NORMAL_FONT); PrintListener printl = new PrintListener(); printBtn.addActionListener(printl); this.add(printBtn); if (helpsetfound) { helpBtn = new JButton("Hilfe", help_icon); helpBtn.setMargin(new Insets(2, 2, 2, 2)); helpBtn.setHorizontalTextPosition(JButton.CENTER); helpBtn.setVerticalTextPosition(JButton.BOTTOM); helpBtn.setFont(NORMAL_FONT); //JMenuItem menu_help = new JMenuItem(" ??"); //HelpListener helpl = new HelpListener(hb); //helpBtn.addActionListener(helpl); //helpBtn.addActionListener(new CSH.DisplayHelpFromSource(hb)); helpBtn.addActionListener(new CSH.DisplayHelpAfterTracking(hb)); helpBtn.setEnabled(true); helpBtn.setToolTipText("Hilfesystem aufrufen"); this.add(helpBtn); } //InfoButton MB infoBtn = new JButton("Info", info_icon); infoBtn.setMargin(new Insets(2, 5, 2, 5)); infoBtn.setHorizontalTextPosition(JButton.CENTER); infoBtn.setVerticalTextPosition(JButton.BOTTOM); infoBtn.setFont(NORMAL_FONT); infoBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { JOptionPane .showMessageDialog( null, "SuperX Version @version@\nbuild:@sxtimestamp@\n" + "Das Data Warehouse für Hochschulen\n" + "www.superx-projekt.de\nKontakt: info@superx-projekt.de" + "\nMandant: " + SxSQL.mandantenID + ",public/private key " + (SxSQL.dsaHandler == null ? "nicht aktiv" : "aktiv"), "SuperX", 1); } }); this.add(infoBtn); } } public SxMask(String title, Hashtable img_map, boolean ifApplet) { super(); isApplet = ifApplet; sxMask = this; sx_map = img_map; sxFrame = new JFrame(title); countFrame++; init(); sxFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { close(); } }); sxFrame.getContentPane().add(sxMask, BorderLayout.CENTER); if (countFrame > 1) { try { installThemenbaum(DateUtils.getTodayString()); } catch (SQLException e1) { ClipboardUtils.setContents(e1.toString(), null); WarningMessage.show(sxMask, e1.toString(), "Fehler"); } } sxFrame.pack(); sxFrame.setBounds(100 + countFrame * 50, 100 + countFrame * 50, 600, 500); sxFrame.setVisible(true); connectionDlg = new ConnectionDlg(user); } private void installThemenbaum(String date) throws SQLException { sxThemenbaum = new SxThemenbaum(sxMask); themenwahltree = sxThemenbaum.getTree(date); themenwahlscroll.setViewportView(themenwahltree); openBtn.setEnabled(true); } void clearThemenbaum() { themenwahltree.setModel(new DefaultTreeModel( new DefaultMutableTreeNode("Abfragen"))); } /** * Brings up a JDialog using JOptionPane containing the connectionPanel. If * the user clicks on the 'Connect' button the connection is reset. */ public int showConnectionDialog() { int rc = -999; if (!dummyLogin) { rc = connectionDlg.showDlg(this.getFrame()); user.setName(connectionDlg.getUserName()); user.setPasswd(connectionDlg.getPassword()); } else { rc = JOptionPane.YES_OPTION; user.setName("admin"); //user.setUsername("testuser"); user.setPasswd("anfang12"); } //SxNew autologin! return rc; } protected void addMouseListenerToLogo() { MouseAdapter listMouseListenerToLogo = new MouseAdapter() { public void mousePressed(MouseEvent e) { int button1 = e.getModifiers() & InputEvent.BUTTON1_MASK; if (button1 != 0) { if (activeThread != null) { try { // System.err.println ("interrupt .."); activeThread.interrupt(); //SxSQL.cancel(); } catch (Exception ex) { System.err.println(ex.toString()); } } } } }; logo.addMouseListener(listMouseListenerToLogo); } public synchronized void close() { countFrame--; if (SxSQL.isActive()) { try { SxSQL.close(); } catch (Exception ex) { System.err.println(ex.toString()); } } if (countFrame <= 1) { connectionDlg.setPassword(""); user.setPasswd(""); } if (countFrame <= 0) { isLogin = false; clearThemenbaum(); //if (!isApplet) // System.exit(0); } } public void componentHidden(ComponentEvent e) { } public void componentMoved(ComponentEvent e) { } public void componentResized(ComponentEvent e) { this.repaint(); } public void componentShown(ComponentEvent e) { } /** * Creates the connectionPanel, which will contain all the fields for the * connection information. * * @throws SQLException * @throws DBServletException */ protected void createMask() throws SQLException, DBServletException { // -------------------------------------------------------------------- // r.b. // direkt abgeleitet aus SuperX C++-Modul 'PlaceFields' in 'sx_win.cxx' // -------------------------------------------------------------------- int oldx = 20; // orginal: oldx = 50 + 10; int oldy = 20; // orginal: oldy = 50 + 10; int leftmargin = 20; // orginal: leftmargin = 50 + 10; int x_ofs = 20; int y_ofs = 20; int oldnw = 0, oldfw = 0; String fieldname = null; int fieldnr; int x; int y; int buttonbreite; int feldbreite; int zeilenanzahl; String typ; int laenge; int obligatorisch; int art; String relation = null; String attribut = null; String fielddefault = null; String sx_db = (String) SxDefaults.getPropertyValue("SxDB"); // Maskenelemente loeschen u. neu anlegen maskeForm.removeAll(); // "alte" Maskenelemente loeschen maskeForm.addComp( // (String) H_thema.get(activeMaskeID), selectedMaskeninfoElement.getName(), "M_headline", "JLabel", 0, 0, 0, 0); maskeForm.setPreferredCompWidth("M_headline", 500); maskeForm.setCompXY("M_headline", 20, 20); JLabel L_M_headline = (JLabel) maskeForm.getComp("M_headline"); L_M_headline.setFont(new Font("SansSerif", Font.BOLD, 14)); // Tabelle loeschen u. neu anlegen lastMaskeID = new Integer(-1); sxTablePanel.setData(new Vector(), new Vector(), new Vector(), null); // Maskengroesse auslesen int m_breite = selectedMaskeninfoElement.getBreite().intValue(); // Maskenbreite int m_hoehe = selectedMaskeninfoElement.getHoehe().intValue(); // Maskenhoehe // Unsichtbares Feld <> maskeForm.addComp("UserID", "L_UserID", "JLabel", 0, 0, 0, 0); JLabel L_userid = (JLabel) maskeForm.getComp("L_UserID"); L_userid.setVisible(false); // s.o. Benutzerautorisierung mit UserID maskeForm.addComp(SxSQL.getUserID().toString(), "F_UserID", "SxField", 0, SxField.TYPE_INTEGER, 4, 0); // maskeForm.addComp ("1", "F_UserID", "SxField", 0, // SxField.TYPE_INTEGER, 4, 0); SxField F_userid = (SxField) maskeForm.getComp("F_UserID"); F_userid.setVisible(false); // Einzelfelder einfügen addIndividualFields(oldy, leftmargin, x_ofs, y_ofs, oldnw, oldfw, sx_db); // Feld-Angaben in Form speichern maskeForm.setFieldVector(selectedMaskeninfoElement.getFelderinfos()); // Default-Values (letzte Feld-Eingaben) maskeForm.restoreValuesFromFormerSelections(); // Default-Button maskeForm.setDefaultBtn(searchBtn); // Fenstergroesse anpassen int diff_height = 0; maskeForm.revalidate(); //Wint maskeForm.setPreferredSize(new Dimension(m_breite, m_hoehe)); Rectangle m_rect = new Rectangle(0, 0, m_breite, m_hoehe); Rectangle f_rect = maskeForm.getBounds(); Container toplevel = maskeForm.getTopLevelAncestor(); Rectangle top_rect = toplevel.getBounds(); if (!f_rect.contains(m_rect)) { diff_height = m_rect.height - f_rect.height; f_rect.width += m_rect.width - f_rect.width + 5; f_rect.height += m_rect.height - f_rect.height; } if (!top_rect.contains(f_rect)) top_rect.width += f_rect.width - top_rect.width; top_rect.height += diff_height; if (top_rect.height > 600) // Fensterhoehe auf 600 Pixels begrenzen top_rect.height = 600; toplevel.setBounds(top_rect); sxFrame.invalidate(); sxFrame.validate(); sxFrame.repaint(); } /** * einzelne Felder auf die Maske packen von CreateMask aufgerufen * * @param oldy * @param leftmargin * @param x_ofs * @param y_ofs * @param oldnw * @param oldfw * @param sx_db * @throws SQLException * @throws DBServletException */ private void addIndividualFields(int oldy, int leftmargin, int x_ofs, int y_ofs, int oldnw, int oldfw, String sx_db) throws SQLException, DBServletException { int oldx; String fieldname; int fieldnr; int x; int y; int buttonbreite; int feldbreite; int zeilenanzahl; String typ; int laenge; int obligatorisch; int art; String relation; String attribut; String fielddefault; SichtApplet defaultsicht = null; for (int i = 0; i < selectedMaskeninfoElement.getFelderinfos().size(); i++) { defaultsicht = null; Vector V_field = (Vector) selectedMaskeninfoElement .getFelderinfos().elementAt(i); fieldname = (String) V_field.elementAt(1); if (fieldname != null) fieldname = fieldname.trim(); //captions holen SxSQL.executeQuery("select contents_short, contents_long " + " from sx_captions " + " where table_name='felderinfo' " + " and field_name='" + fieldname + "' and (record_no is null or record_no=" + V_field.elementAt(0) + ")"); Vector v_captions = SxSQL.getResultVector(); String erläuterung = ""; String fieldCaption = fieldname; if (v_captions.size() > 0) { Vector row = (Vector) v_captions.get(0); String cap = (String) row.get(0); if (cap != null) fieldCaption = cap; erläuterung = (String) row.get(1); } fieldnr = ((Integer) V_field.elementAt(2)).intValue(); x = ((Integer) V_field.elementAt(3)).intValue(); if (x == 0) x += leftmargin; if (x < 0) x = 0; y = ((Integer) V_field.elementAt(4)).intValue(); if (y == 0) { y = oldy + 25 + y_ofs; } if (y == -1) { x += 2 * x_ofs; y = oldy; } buttonbreite = ((Integer) V_field.elementAt(5)).intValue(); if (buttonbreite == 0) buttonbreite = oldnw; else buttonbreite += x_ofs; feldbreite = ((Integer) V_field.elementAt(6)).intValue(); if (feldbreite == 0) feldbreite = oldfw; zeilenanzahl = ((Integer) V_field.elementAt(7)).intValue(); typ = (String) V_field.elementAt(8); if (typ != null) typ = typ.trim(); laenge = ((Integer) V_field.elementAt(9)).intValue(); obligatorisch = ((Integer) V_field.elementAt(10)).intValue(); art = ((Integer) V_field.elementAt(11)).intValue(); //MB XML-Querabhängiges Feldart 16 wird einfach als reguläre 1 umgesetzt // gar nicht mehr nötig if (art==16) art=1; relation = (String) V_field.elementAt(12); if (relation != null) relation = relation.trim(); attribut = (String) V_field.elementAt(13); if (attribut != null) attribut = attribut.trim(); fielddefault = (String) V_field.elementAt(14); if (fielddefault != null) fielddefault = fielddefault.trim(); /* * System.err.println ("Feld : " + fieldname + ", x=" + x + ", y=" + * y + ", buttonbreite=" + buttonbreite + ", feldbreite=" + * feldbreite); */ //Rückgabewert defaultsicht ist brutale Methode um defaultsicht zu // merken if ((art > 0 && art <= 7) || art == 12) { defaultsicht = addButtonField(fieldname, fieldCaption, obligatorisch, art, relation, zeilenanzahl,erläuterung, i); } else { addLabelField(fieldname, x, y, buttonbreite, obligatorisch); } JComponent comp = (JComponent) maskeForm.getComp("L_" + fieldname); if(art==13||art==15) comp.setVisible(false); comp.setToolTipText(erläuterung); FontMetrics font_m = comp.getFontMetrics(comp.getFont()); int label_width = font_m.stringWidth(fieldCaption) + 10; maskeForm.setPreferredCompWidth("L_" + fieldname, label_width); maskeForm.setCompXY("L_" + fieldname, x + buttonbreite - label_width, y); String field_type = "SxField"; //MB Mehrfachwahlanzeige if (zeilenanzahl > 1) field_type = "JComboBox"; if (art == 10) field_type = "JCheckbox"; if (art == 11) field_type = "JPasswordField"; //field_type = "JComboView"; if (art != 8&&art!=13&&art!=15) //wenn es sich nicht um ein reines Label-Feld oder unsichtbare Felder handelt: Eingabefeld // einfügen { if (typ.toLowerCase().equals("integer")) maskeForm.addComp("", "F_" + fieldname, field_type, 0, SxField.TYPE_INTEGER, laenge, obligatorisch); if (typ.toLowerCase().equals("date")) maskeForm.addComp("", "F_" + fieldname, field_type, 0, SxField.TYPE_DATE, laenge, obligatorisch); if (typ.toLowerCase().equals("char")) maskeForm.addComp("", "F_" + fieldname, field_type, 0, SxField.TYPE_STRING, laenge, obligatorisch); if (typ.toLowerCase().equals("decimal")) maskeForm.addComp("", "F_" + fieldname, field_type, 0, SxField.TYPE_DOUBLE, laenge, obligatorisch); if (typ.toLowerCase().equals("sql")) maskeForm.addComp("", "F_" + fieldname, field_type, 0, SxField.TYPE_SQL, laenge, obligatorisch); maskeForm.setPreferredCompWidth("F_" + fieldname, feldbreite); maskeForm.setCompXY("F_" + fieldname, x_ofs + buttonbreite + x, y); SxField valuefield = maskeForm.getField("F_" + fieldname); if (art == 1 || art == 12) { valuefield.setEditable(false); } //ggfs. eine Default Sicht hinterlegen //vergl. addButtonField if (defaultsicht != null) { valuefield.setSelectedSicht(defaultsicht); } // Default-Wert aus Tab. 'felderinfo' setzen setFieldDefault(sx_db, fieldname, art, fielddefault, valuefield); } oldx = x; oldy = y; oldnw = buttonbreite; oldfw = feldbreite; } } /** * basis Default-werte setzen, später kommt noch Methode, die ggfs. durch * letzte Eingaben überlagert see createMask * * @param sx_db * @param fieldname * @param art * @param fielddefault * @param field */ private void setFieldDefault(String sx_db, String fieldname, int art, String fielddefault, SxField field) { if (fielddefault != null) { String stmt = ""; if (fielddefault.startsWith("<>") || fielddefault.startsWith("sp_")) { readFieldDefaultFromDb(sx_db, fieldname, fielddefault, field, stmt); } else { if (field != null) field.setText(fielddefault); field.setKey(new Integer(-1)); } //bei einem Institutionendialog, fielddefault auf null setzen //siehe Kommentar in SxField.setDefaultValue() if (art == 4 || art == 6 || art == 7 || art == 12) { field.setKey("null"); field.setDefaultValue("null"); } } } private void readFieldDefaultFromDb(String sx_db, String fieldname, String fielddefault, SxField field, String stmt) { try { stmt = fielddefault; if (fielddefault.startsWith("<>")) stmt = fielddefault.substring(7); stmt = stmt.trim(); if (stmt.startsWith("sp_")) { if (sx_db.equals("Postgres")) { stmt = "select " + stmt; } else { stmt = "execute procedure " + stmt; } } System.out.println(stmt); stmt = SxUtils.generateSQL(maskeForm, stmt); //MB 2/2016 auch Freemarker Parsing //Trickmethode!! HashMap map = maskeForm.getHashMap(selectedMaskeninfoElement.getTid()); stmt = SxSQL.templateProcessor.process("Felderdefault "+fieldname , stmt, map, (String) SxDefaults.getPropertyValue("SxDB")); SxSQL.executeAll(stmt); Vector result = SxSQL.getResultVector(); if (result.size() == 0) throw new IllegalStateException( "Defaultwert konnte nicht ermittelt werden, da der select nichts lieferte."); Vector V_default = (Vector) result.elementAt(0); Object key, value; if (V_default.size() == 2) { key = V_default.elementAt(0); field.setKey(key); value = V_default.elementAt(1); if (value instanceof java.sql.Date) value = SxDate.toString((java.sql.Date) value); field.setText(value.toString()); } if (V_default.size() == 1) { //field.setKey(new Integer("-1")); value = V_default.elementAt(0); key = value; if (value instanceof java.sql.Date) value = SxDate.toString((java.sql.Date) value); field.setText(value.toString()); } } catch (Exception ex) { System.out.println("Fehler beim Lesen von Defaultwert für Feld " + fieldname + "\n Sql-stmt=" + stmt); ex.printStackTrace(); } } private void addLabelField(String fieldname, int x, int y, int buttonbreite, int obligatorisch) { maskeForm.addComp(fieldname, "L_" + fieldname, "JLabel", 0, 0, 0, 0); maskeForm.setPreferredCompWidth("L_" + fieldname, buttonbreite); maskeForm.setCompXY("L_" + fieldname, x, y); JLabel L_fieldname = (JLabel) maskeForm.getComp("L_" + fieldname); L_fieldname.setHorizontalAlignment(JLabel.RIGHT); if (obligatorisch != 0) L_fieldname.setFont(NORMAL_BOLD_FONT); else L_fieldname.setFont(NORMAL_FONT); } private SichtApplet addButtonField(String fieldname, String fieldCaption, int obligatorisch, int art, String relation,int zeilenanzahl, String erläuterung, int i) throws SQLException, DBServletException { SichtApplet defaultsicht = null; maskeForm .addComp(fieldCaption, "L_" + fieldname, "JButton", 0, 0, 0, 0); JButton btn = (JButton) maskeForm.getComp("L_" + fieldname); btn.setHorizontalAlignment(JLabel.RIGHT); if (obligatorisch != 0) btn.setFont(NORMAL_BOLD_FONT); else btn.setFont(NORMAL_FONT); Sichtgruppe sichtgruppe = null; if (art == 4 || art == 6 || art == 7 || art == 12) { Vector sichtentids = new Vector(); try { //Falls Datenbankzugriff nötig hier schon machen //vergleichbare Methode im Servlet in Field.initSichtengruppe if (art == 12 && relation != null && relation.startsWith("<>")) { SxSQL.executeQuery(relation.substring(7)); Vector result = SxSQL.getResultVector(); for (Iterator iter = result.iterator(); iter.hasNext();) { Vector aRow = (Vector) iter.next(); Integer eineSichtTid = (Integer) aRow.get(0); sichtentids.add(eineSichtTid); } } //MB 1/16 dynamsiche Sichten vom Applet nicht unterstützt sichtgruppe = user.getSichten().getGruppe(new Hashtable(),new HashMap(),new FieldContainer(), fieldname,art, sichtentids, relation, zeilenanzahl,maskeForm.getDefaultStand(),SxSQL.mandantenID); } catch (Exception e) { String msg = "Konnte Sichten nicht einlesen:" + e.toString(); ClipboardUtils.setContents(msg, null); WarningMessage.show(sxMask, msg, "SuperX"); e.printStackTrace(); } } SxDlgListener dlgl = new SxDlgListener(sxMask, maskeForm, btn, erläuterung, i, art); if (sichtgruppe != null) { defaultsicht = (SichtApplet) sichtgruppe.getSelectedSicht(); dlgl.setSichtgruppe(sichtgruppe); } btn.addActionListener(dlgl); return defaultsicht; } void initUser(int mode) { try { stopBtn.setEnabled(true); statusField.setBackground(Color.yellow); //anmelden if (mode == 0) { String sql_stmt; logo.start(); if (SxSQL.isActive()) { SxSQL.close(); } // delete Dialog-Cache SxDlgManager.clear(); // delete Defaults-Cache SxDefaults.clear(); SxDefaults.init(); V_thema = null; user.getSichten().clear(); statusField.setText("Anmelden .."); passwdBtn.setEnabled(false); passwdBtn.setVisible(SuperX.remoteUser == null); SxSQL.setLogMode(logToKonsole); SxSQL.setUrl(serverURL); if (!SuperX.isAuthentificationFound) SxSQL.check(user); //bei An/ummeldung wird im connectListener // isAuthenficationFound auf false gesetzt SxSQL.readFMTemplates(); if (SuperX.remoteUser != null) passwdBtn.setEnabled(true); statusField.setText("Lade Standardwerte .."); //Sichten einlesen SxSQL.executeQuery(Sichten.getReadingSql(user)); user.getSichten().init(SxSQL.mandantenID, SxSQL.getResult(), SichtApplet.class); SxSQL.executeQuery("select distinct tid,type from sichten S where " + Sichten.getErlaubteSichtenSql(user)); user.getSichten().setAllowedSichten(SxSQL.getResult(), user.isAdmin()); if (SuperX.isSachgebieteNeeded) Sachgebiete.init(); installThemenbaum(DateUtils.getTodayString()); terlaeuterung.setText(""); statusField.setBackground(Color.white); statusField.setText("Anmeldung erfolgreich"); ImageIcon connect_icon = (ImageIcon) sx_map.get("connect"); dbBtn.setIcon(connect_icon); dbBtn.setDisabledIcon(connect_icon); if (countFrame == 1) passwdBtn.setEnabled(true); openBtn.setEnabled(true); isLogin = true; cloneBtn.setEnabled(true); tabPane.setSelectedIndex(0); JRootPane root = sxMask.getRootPane(); root.setDefaultButton(openBtn); // DefaultButton setzen } if (mode == 1) { logo.start(); statusField.setText("Abmelden .."); if (SxSQL.isActive()) SxSQL.close(); // delete Dialog-Cache SxDlgManager.clear(); // delete Defaults-Cache SxDefaults.clear(); statusField.setBackground(Color.white); statusField.setText("Keine DB-Verbindung"); ImageIcon disconnect_icon = (ImageIcon) sx_map .get("disconnect"); dbBtn.setIcon(disconnect_icon); dbBtn.setDisabledIcon(disconnect_icon); if (countFrame == 1) passwdBtn.setEnabled(false); openBtn.setEnabled(false); lastMaskeID = new Integer(-1); if (countFrame <= 1) { isLogin = false; cloneBtn.setEnabled(false); //sx_map.clear(); //Wint wars nicht!! } //Wint:Da bei http-Verbindung kein closeConnection //möglich ist, wird Applet-Fenster geschlossen close(); } } catch (Exception ex) { String msg = ex.toString(); // System.err.println("msg: " + msg); ex.printStackTrace(); statusField.setText(msg); ClipboardUtils.setContents(msg, null); } dbBtn.setEnabled(true); stopBtn.setEnabled(false); logo.stop(); sxMask.repaint(); activeThread = null; } void setUser(SxUser user) { this.user = user; } public Vector getFieldVector() { return selectedMaskeninfoElement.getFelderinfos(); } public SxForm getForm() { return maskeForm; } public JFrame getFrame() { return sxFrame; } public SxLogoPanel getLogo() { return logo; } public JTextField getStatusField() { return statusField; } public void init() { int start_x = 20, start_y = 20; sxMask.setLayout(new BorderLayout()); JPanel heading = new JPanel(); GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints constraints = new GridBagConstraints(); heading.setLayout(gridbag); constraints.weightx = 1.0; constraints.weighty = 1.0; int[] logo_pixels = (int[]) sx_map.get("logo_pixels"); JPanel sxTpanel = new JPanel(); sxTpanel.setLayout(new BoxLayout(sxTpanel, BoxLayout.X_AXIS)); initHelpSystem(); JToolBar toolbar = new SxToolbar(this.getFrame()); sxTpanel.add(toolbar); constraints.anchor = GridBagConstraints.CENTER; gridbag.setConstraints(sxTpanel, constraints); heading.add(sxTpanel); ImageIcon logo_icon = (ImageIcon) sx_map.get("logo"); logo = new SxLogoPanel(logo_icon, logo_pixels, 20, 50); addMouseListenerToLogo(); constraints.insets = new Insets(5, 5, 5, 5); constraints.anchor = GridBagConstraints.EAST; gridbag.setConstraints(logo, constraints); heading.add(logo); sxMask.add(heading, BorderLayout.NORTH); // Workpanel JPanel sxWpanel = new JPanel(); sxWpanel.setLayout(new BorderLayout()); sxWpanel.setBorder(BorderFactory.createEtchedBorder()); tabPane = new JTabbedPane(); tabPane.setFont(NORMAL_BOLD_FONT); // Themenauswahl ThemenwahlPanel themap = new ThemenwahlPanel(); tabPane.addTab("Themenauswahl", themap); //Hilfe für Thema helpItemString = "Themaauswhlen.htm"; CSH.setHelpIDString(themap, helpItemString); if (helpsetfound) { hb.enableHelpKey(themap, helpItemString, hs); hb.enableHelp(themap, helpItemString, hs); } // Maske // --------------------------------------------------------------------- initMaskeTab(); // Tabelle // --------------------------------------------------------------------- initTableTab(); // --------------------------------------------------------------------- tabPane.setSelectedIndex(0); sxWpanel.add(tabPane, "Center"); // Statusbar sxSpanel = new JPanel(); sxSpanel.setLayout(new BorderLayout()); sxSpanel.setBorder(BorderFactory.createEtchedBorder()); statusField = new JTextField(""); statusField.setFont(NORMAL_FONT); statusField.setMargin(new Insets(5, 5, 5, 5)); statusField.setEditable(false); sxSpanel.add(statusField, "Center"); sxMask.add(sxWpanel, "Center"); sxMask.add(sxSpanel, "South"); // Default Properties laden // --------------------------------------------------------------------- SxDefaults.init(); try { serverURL = (String) SxDefaults.getPropertyValue("SxServerURL"); //MB 20.6.06 damit schon früher bekannt SxSQL.setUrl(serverURL); } catch (Exception ex) { ClipboardUtils.setContents(ex.toString(), null); System.err.println(ex); JOptionPane.showMessageDialog(sxMask, ex.toString(), "Fehler", JOptionPane.ERROR_MESSAGE); } try { logToKonsole = (String) SxDefaults.getPropertyValue("logToKonsole"); } catch (Exception ex) { logToKonsole = "none"; } sxTitle = sxFrame.getTitle(); try { sxTitle = sxTitle + ", " + (String) SxDefaults.getPropertyValue("SxTitle"); sxFrame.setTitle(sxTitle); } catch (Exception ex) { sxFrame.setTitle(sxTitle); } } ParameterPanel getParameterPanel() { return parameterPanel; } private void initTableTab() { JPanel tableTab = new JPanel(); tableTab.setLayout(new BorderLayout()); // Ergebnistabelle fuer Maske sxTablePanel = new SxTablePanel(); //MB selection Deselektion ermöglichen (dekl. sxTablePanel drüber) parameterPanel.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { int button1 = e.getModifiers() & InputEvent.BUTTON1_MASK; if (button1 == 0) return; sxTablePanel.table.setColumnSelectionAllowed(false); sxTablePanel.rowheaderTable.setColumnSelectionAllowed(false); sxTablePanel.table.setRowSelectionAllowed(true); sxTablePanel.rowheaderTable.setRowSelectionAllowed(true); sxTablePanel.table.clearSelection(); sxTablePanel.rowheaderTable.clearSelection(); } }); HorizontalBox hbox = new HorizontalBox(); hbox.add(parameterPanel); hbox.addGlue(); tableTab.add(hbox, BorderLayout.NORTH); //tableTab.add(parameterPanel, BorderLayout.NORTH); tableTab.add(sxTablePanel, BorderLayout.CENTER); //Hilfe für Tabelle //helpItemString = "debug.overview"; if (helpsetfound) { helpItemString = "Auswertungsmglichkei.htm"; CSH.setHelpIDString(tableTab, helpItemString); hb.enableHelpKey(tableTab, helpItemString, hs); hb.enableHelp(tableTab, helpItemString, hs); //CSH.setHelpIDString(helpBtn,helpItemString); } JPanel pSouth = new JPanel(); pSouth.add(btnExplanation); tableTab.add(pSouth, BorderLayout.SOUTH); btnExplanation.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { explanationFrame.set(selectedMaskeninfoElement); explanationFrame.show(); } }); tabPane.addTab("Tabelle", tableTab); } private void initMaskeTab() { JPanel maskep = new JPanel(new BorderLayout()); // Control-Buttons JPanel sxCMpanel = new JPanel(); sxCMpanel.setLayout(new FlowLayout()); sxCMpanel.setBorder(BorderFactory.createEtchedBorder()); searchBtn = new JButton("Suchen"); searchBtn.setMnemonic(KeyEvent.VK_S); SearchListener searchl = new SearchListener(); searchBtn.addActionListener(searchl); searchBtn.setFont(NORMAL_BOLD_FONT); searchBtn.setEnabled(false); //Hilfe //helpItemString = "proj.paths"; helpItemString = "WeitereThemeneingren.htm"; sxCMpanel.add(searchBtn, 0); resetBtn = new JButton("Reset"); ResetListener resetl = new ResetListener(); resetBtn.addActionListener(resetl); resetBtn.setFont(NORMAL_BOLD_FONT); resetBtn.setEnabled(true); sxCMpanel.add(resetBtn, 1); stopBtn = new JButton("Abbrechen"); stopBtn.setMnemonic(KeyEvent.VK_C); StopListener stopl = new StopListener(); stopBtn.addActionListener(stopl); stopBtn.setFont(NORMAL_BOLD_FONT); stopBtn.setEnabled(false); stopBtn.setVisible(false); // Abbrechen bringt ConnectionPool durcheinander sxCMpanel.add(stopBtn, 2); // SxForm Maske // --------------------------------------------------------------------- maskeForm = new SxForm(0, 0, 0, 0); selectedMaskeninfoElement.setMaskeForm(maskeForm); maskeForm.setLogo(logo); maskep.add(new JScrollPane(maskeForm), BorderLayout.CENTER); maskep.add(sxCMpanel, BorderLayout.SOUTH); //Hilfe für Maske //helpItemString = "build.build"; if (helpsetfound) { helpItemString = "WeitereThemeneingren.htm"; CSH.setHelpIDString(maskep, helpItemString); hb.enableHelpKey(maskep, helpItemString, hs); hb.enableHelp(maskep, helpItemString, hs); //CSH.setHelpIDString(helpBtn,helpItemString); } tabPane.addTab("Maske", maskep); } private void initHelpSystem() { ClassLoader loader = this.getClass().getClassLoader(); URL url = null; try { url = HelpSet.findHelpSet(loader, "superx_help/superx"); if (url == null) { url = HelpSet.findHelpSet(loader, "superx_help/superx.hs"); //java.lang.String.debug("codeBase url=" + url); } hs = new HelpSet(loader, url); } catch (NoClassDefFoundError e) { JOptionPane.showMessageDialog(null, "Java Hilfesystem nicht gefunden. ", "SuperX", JOptionPane.WARNING_MESSAGE); } catch (Exception ee) { System.out.println("Hilfesystem nicht gefunden!"); } if (url != null) { //System.out.println("Hilfesystem gefunden: "+url.toString()); hb = hs.createHelpBroker(); helpsetfound = true; } } //MB Maske Öffnen wird vom OpenListener und Doppelklick in Tree Aufgerufen public void maskeOeffnen() { //sxMask.terlaeuterung.setText(""); openBtn.setEnabled(false); statusField.setText("Bitte warten .."); SxWaitCursor.set(sxMask, true); try { //afterwards selectedMaskeninfoEntry is up to date readMaskenFelderInfoFromDb(); // Neue Maske aufbauen sxMask.createMask(); //activeMaskeName = (String) V_id.elementAt(1); //MB name searchBtn.setEnabled(true); JRootPane root = sxMask.getRootPane(); root.setDefaultButton(searchBtn); // DefaultButton setzen tabPane.setSelectedIndex(1); statusField.setText(""); } catch (Exception ex) { ex.printStackTrace(); String msg = ex.toString(); ClipboardUtils.setContents(msg, null); System.out.println(msg); statusField.setText("Maske konnte nicht aufgebaut werden :" + msg.substring(msg.lastIndexOf(":") + 1) + "-" + SxSQL.getErrorString()); } finally { logo.stop(); openBtn.setEnabled(true); SxWaitCursor.set(sxMask, false); sxMask.repaint(); } } private void readMaskenFelderInfoFromDb() throws SQLException, IOException { String sql = "select M.tid, M.select_stmt, M.xil_proplist, M.cleanup_stmt, " + "M.breite, M.hoehe, S.datum, M.hinweis,M.erlaeuterung " + "from maskeninfo M, maske_system_bez B, systeminfo S " + "where M.tid = " + selectedMaskeninfoElement.getTid() + " and M.tid = B.maskeninfo_id" + " and S.tid = B.systeminfo_id" + ";"; SxSQL.executeQuery(sql); Vector vectorMaskeninfoEntries = SxSQL.getResultVector(); if (vectorMaskeninfoEntries.size() == 0) { throw new SQLException("Keine Daten zu dieser Maske (Nr." + selectedMaskeninfoElement.getTid() + ") in der Datenbank gefunden"); } //fieser Trick: es wird als letztes Element noch ein Vector mit //Spaltenerläuterungen mitgeliefert selectedMaskeninfoElement.init(vectorMaskeninfoEntries); sql = "select F.tid, F.name, F.nummer, F.x, F.y, F.buttonbreite, " + "F.feldbreite, F.zeilenanzahl, F.typ, F.laenge, " + "F.obligatorisch, F.art, F.relation, F.attribut, F.defaultwert " + "from felderinfo F, masken_felder_bez B " + "where F.art!=999 and B.maskeninfo_id = " + selectedMaskeninfoElement.getTid() + " and F.tid = B.felderinfo_id " + "order by F.nummer;"; SxSQL.executeQuery(sql); selectedMaskeninfoElement.setFelderinfos(SxSQL.getResultVector()); //captions_long für die Felder wird in addButtonField geholt if (SuperX.isSachgebieteNeeded) selectedMaskeninfoElement.readSachgebiete(); } void setConnectPwBtnsSVisible(boolean vis) { dbBtn.setVisible(vis); passwdBtn.setVisible(vis); } public void open() { sxFrame.setVisible(true); JRootPane root = sxMask.getRootPane(); if (SuperX.isAuthentificationFound) root.setDefaultButton(dbBtn); // DefaultButton setzen if (isLogin == false) { user.setPasswd(""); connectionDlg.setPassword(""); } if (!SuperX.isAuthentificationFound && SuperX.remoteUser == null) dbBtn.doClick(); passwdBtn.setVisible(SuperX.remoteUser == null); } public MaskeninfoElement getSelectedMaskeninfoElement() { return selectedMaskeninfoElement; } }