summaryrefslogtreecommitdiffstats
path: root/pki/base/console/src/com/netscape/admin/certsrv/config/CMSBaseConfigDialog.java
diff options
context:
space:
mode:
Diffstat (limited to 'pki/base/console/src/com/netscape/admin/certsrv/config/CMSBaseConfigDialog.java')
-rw-r--r--pki/base/console/src/com/netscape/admin/certsrv/config/CMSBaseConfigDialog.java1084
1 files changed, 1084 insertions, 0 deletions
diff --git a/pki/base/console/src/com/netscape/admin/certsrv/config/CMSBaseConfigDialog.java b/pki/base/console/src/com/netscape/admin/certsrv/config/CMSBaseConfigDialog.java
new file mode 100644
index 000000000..2d3129f8e
--- /dev/null
+++ b/pki/base/console/src/com/netscape/admin/certsrv/config/CMSBaseConfigDialog.java
@@ -0,0 +1,1084 @@
+// --- BEGIN COPYRIGHT BLOCK ---
+// 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; version 2 of the License.
+//
+// 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.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+//
+// (C) 2007 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+package com.netscape.admin.certsrv.config;
+
+import com.netscape.admin.certsrv.*;
+import com.netscape.admin.certsrv.connection.*;
+import javax.swing.*;
+import javax.swing.event.*;
+import javax.swing.table.*;
+import javax.swing.text.*;
+import java.awt.event.*;
+import java.awt.*;
+import java.util.*;
+import com.netscape.management.client.*;
+import com.netscape.management.client.util.*;
+import com.netscape.certsrv.common.*;
+
+/**
+ * Plugin Parameter Configuration Dialog
+ *
+ * @author Steve Parkinson
+ * @version $Revision$, $Date$
+ * @see com.netscape.admin.certsrv.config
+ */
+public class CMSBaseConfigDialog extends JDialog
+ implements ActionListener, MouseListener, FocusListener
+{
+ /*==========================================================
+ * variables
+ *==========================================================*/
+ protected JFrame mParentFrame;
+ protected ResourceBundle mResource;
+
+ protected String PREFIX = null;
+
+ protected boolean mIsOK = false;
+ protected NameValuePairs mData=null;
+
+ protected JScrollPane mScrollPane=null;
+ protected JTable mTable=null;
+ protected String mRuleName=null;//instance name
+ protected JPanel mParamPanel=null;
+ protected JPanel mHelpPanel=null;
+ protected JTextArea mHelpLabel=null;
+
+ protected JButton mOK=null, mCancel=null, mHelp=null;
+ protected JTextField mPluginName=null;
+ protected JLabel mImplnameCaption=null,mRulenameCaption=null;
+ protected JLabel mImplName=null, mPluginLabel=null;
+ protected String RAHELPINDEX=null;
+ protected String KRAHELPINDEX=null;
+ protected String CAHELPINDEX=null;
+ protected String mHelpToken=null;
+
+ protected AdminConnection mAdminConnection = null;
+
+ protected String mImplName_token=null;//nvp index for plubinName
+ protected String mImplType=null;//plugin type:policy,auth etc
+ protected String mDest;
+ protected String mInstanceScope=null;
+ protected String mId = null; // used as a ip id for crl exts
+
+ /* true if creating a new instance
+ * false if editing an old one
+ */
+ protected boolean mNewInstance=false; //
+
+ private ExtendedPluginInfoSet mEPIs = null;
+ protected CMSBaseResourceModel mModel = null;
+
+ private String mServletName;
+
+ /*==========================================================
+ * constructors
+ *==========================================================*/
+ public CMSBaseConfigDialog(JFrame frame,
+ String dest) {
+ super(frame,true);
+ mServletName = dest;
+ }
+
+ protected void init(NameValuePairs nvp,
+ JFrame parent,
+ AdminConnection conn,
+ String dest)
+ {
+ mParentFrame = parent;
+ mDest = dest;
+ mAdminConnection = conn;
+ mResource = ResourceBundle.getBundle(CMSAdminResources.class.getName());
+ setSize(360, 415);
+
+ setTitle(mResource.getString(PREFIX+"_TITLE"));
+ setLocationRelativeTo(mParentFrame);
+ getRootPane().setDoubleBuffered(true);
+ setDisplay();
+ }
+
+ protected void init(NameValuePairs nvp,
+ JFrame parent,
+ AdminConnection conn,
+ String dest,
+ String id)
+ {
+ mId = id;
+ init(nvp, parent, conn, dest);
+ }
+
+ /*==========================================================
+ * public methods
+ *==========================================================*/
+
+ /**
+ * the model needs to be set if we need to start/stop the progress
+ * bar.
+ */
+
+ public void setModel(CMSBaseResourceModel model)
+ {
+ mModel = model;
+ }
+
+ public void setInstanceScope(String s)
+ {
+ mInstanceScope = s;
+ }
+
+ /**
+ * retrieve the extended plugin information for this plugin
+ * from the server. The servlet must implement the scope
+ * 'extendedPluginInfo' and the plugin must implement the
+ * IExtendedPluginInfo interface, or else the display
+ * will revert back to simple name-value pairs.
+ */
+
+ ExtendedPluginInfoSet getExtendedPluginInfo(String implname,
+ NameValuePairs oldstyle) {
+
+ NameValuePairs data = new NameValuePairs();
+ String query = mImplType+":"+implname;//implName:pluginName
+ NameValuePairs response=null;
+
+ if (mImplType.equals("policy") &&
+ (mRuleName != null) && !mRuleName.trim().equals("")) {
+ query = query + ":" + mRuleName;
+ }
+
+ /* make the request to the server */
+ try {
+ response = mAdminConnection.read(mServletName,
+ ScopeDef.SC_EXTENDED_PLUGIN_INFO,
+ query,
+ data);
+ }
+ catch (EAdminException e) {
+ }
+
+ ExtendedPluginInfoSet epis = new ExtendedPluginInfoSet();
+
+ if (response == null) response = new NameValuePairs();
+
+ /* if the servlet or rule wasn't capable of handling the new style
+ * of interface, just return the names from the name/value pairs that
+ * were passed in
+ */
+
+ Enumeration enum1 = oldstyle.elements();
+
+ /* otherwise, for each parameter name, fetch the associated
+ * parameter type from the extendedPluginInfo that the server
+ * returned
+ */
+ while (enum1.hasMoreElements()) {
+ NameValuePair pair = (NameValuePair)enum1.nextElement();
+ NameValuePair epiNVPair = (NameValuePair)response.getPair(pair.getName());
+ if (epiNVPair != null) {
+ epis.add(pair.getName(), epiNVPair.getValue(),false);
+ }
+ else {
+ epis.add(pair.getName(), "",true);
+ }
+ }
+
+
+ String ht = response.getValue("HELP_TOKEN");
+ if (ht != null) epis.setHelpToken(ht);
+
+ String hs = response.getValue("HELP_TEXT");
+ if (hs != null) epis.setHelpSummary(hs);
+
+ return epis;
+ }
+
+
+
+ /**
+ * show the list of configuration parameters
+ */
+ public void showDialog(NameValuePairs data, String name) {
+ mIsOK = false;
+
+ mData = data;
+
+ Debug.println("in CMSBaseConfigDialog.showDialog()");
+
+ JPanel p = mParamPanel;
+ GridBagLayout gb = new GridBagLayout();
+ GridBagConstraints gbc = new GridBagConstraints();
+ p.setLayout(gb);
+
+ mRuleName = data.getValue(mImplName_token);
+ mEPIs = getExtendedPluginInfo(mRuleName,data);
+
+ for (Enumeration e = data.getNames(); e.hasMoreElements() ;) {
+ String entry = ((String)e.nextElement()).trim();
+ Debug.println("in CMSBaseConfigDialog.showDialog() entry=" + entry);
+ if (!entry.equals(mImplName_token)) {
+ String labelname = entry;
+
+ /* comp is the component which represents the value
+ * of the parameter. It can be a checkbox, choice, or
+ * text field
+ */
+
+ JComponent comp = null;
+ String stringvalue = data.getValue(entry);
+ ExtendedPluginInfo epi = mEPIs.get(entry);
+ if (epi == null) {
+ Debug.println("no ExtendedPluginInfo for "+entry);
+ }
+
+ if (epi.getType() == ExtendedPluginInfo.TYPE_PASSWORD) {
+ labelname = "password";
+ }
+
+ if (epi.isRequired()) {
+ labelname = "* "+labelname;
+ }
+
+ /* this label is the name of the parameter. We need
+ * to add a mouselistener so that we can update the
+ * help text if someone clicks on the label
+ */
+ JLabel l = new JLabel(labelname);
+ l.addMouseListener(this);
+
+ CMSAdminUtil.resetGBC(gbc);
+
+ gbc.gridwidth = 1;
+ gbc.fill = gbc.NONE;
+ gbc.weightx = 0.2;
+ gbc.gridwidth = 1;
+ gbc.anchor = gbc.EAST;
+ gbc.insets = new Insets(
+ CMSAdminUtil.COMPONENT_SPACE, // top
+ 0, // left
+ 0, // bottom
+ 5); // right
+ p.add(l,gbc);
+
+
+ /* if there was no text extendedplugininfo for this parameter
+ * just make it a text box
+ */
+ if (epi == null) {
+ comp = new JTextField(stringvalue);
+ }
+ else {
+ epi.setValue(stringvalue);
+ comp = epi.makeComponent(this);
+ }
+
+ /* this lets us get an event when this component
+ * is clicked on, so we can update the help text
+ */
+ comp.addFocusListener(this);
+
+ gbc.weightx = 0.7;
+ gbc.fill = gbc.HORIZONTAL;
+ gbc.gridwidth = gbc.RELATIVE;
+ gbc.anchor = gbc.WEST;
+ gbc.insets = new Insets(
+ CMSAdminUtil.COMPONENT_SPACE, //top
+ 0, //left
+ 0, //bottom
+ 0); // right
+ p.add(comp ,gbc);
+
+ /* add a dummy component to the end of each row to
+ * keep it from hiting the edge of the panel
+ */
+ JLabel j = new JLabel("");
+ gbc.weightx = 0.1;
+ gbc.fill = gbc.HORIZONTAL;
+ gbc.gridwidth = gbc.REMAINDER;
+ gbc.anchor = gbc.WEST;
+ gbc.insets = new Insets(
+ CMSAdminUtil.COMPONENT_SPACE, //top
+ 0, //left
+ 0, //bottom
+ CMSAdminUtil.COMPONENT_SPACE); // right
+ p.add(j,gbc);
+
+ }
+ }
+
+ mImplName.setText(mRuleName);
+
+ if ((name==null)||name.equals("")) {
+ mNewInstance = true;
+ /* we're dealing with a new instance - so the rule name is
+ * a text box - it's editable
+ */
+ mPluginName.setVisible(true);
+ mPluginName.setText(getDefaultInstanceName(mRuleName));
+ mPluginLabel.setVisible(false);
+ } else {
+ mNewInstance = false;
+ /* we're editing an old instance - so the rule name is just
+ * a label - you can't edit it
+ */
+ mPluginName.setVisible(false);
+ mPluginLabel.setVisible(true);
+ mPluginLabel.setText(name);
+ }
+
+ mHelpLabel.setText(mEPIs.getHelpSummary());
+ mHelpLabel.repaint();
+
+ mImplName.addMouseListener(this);
+ mPluginName.addMouseListener(this);
+ mPluginLabel.addMouseListener(this);
+
+ this.show();
+ }
+
+ public String getDefaultInstanceName(String implName)
+ {
+ Debug.println("in CMSBaseConfigDialog::getDefaultInstanceName("+implName+") - returning ''");
+ return "";
+ }
+
+ public boolean isOK() {
+ return mIsOK;
+ }
+
+
+ public String getRuleName() {
+ return mRuleName;
+ }
+
+ /*==========================================================
+ * EVENT HANDLER METHODS
+ *==========================================================*/
+
+ /**
+ * From focuslistener interface. This lets us know when a component
+ * has received focus, so we can update the help text.
+ */
+ public void focusGained(FocusEvent f) {
+ Component comp = f.getComponent();
+ mPluginName.addFocusListener(this);
+ mPluginLabel.addMouseListener(this);
+ String text = "";
+
+ if (comp instanceof ExtendedPluginInfoComponent) {
+ ExtendedPluginInfoComponent epic = (ExtendedPluginInfoComponent)comp;
+ ExtendedPluginInfo epi = epic.getExtendedPluginInfo();
+ text = epi.getHelpText()+" ";
+ }
+ else if (doHelpSummary(comp)) {
+ text = mEPIs.getHelpSummary();
+ }
+ else {
+ }
+
+ mHelpLabel.setText(text);
+ mHelpLabel.repaint();
+
+ }
+
+ /** need to supply this method for focuslistener, but we
+ * really don't care about it
+ */
+ public void focusLost(FocusEvent f) {
+ }
+
+
+ /*
+ * mouselistener events - for JLabel
+ */
+
+ /**
+ * This lets us know when someone clicked a label, so we can
+ * update the help text
+ */
+ public void mouseClicked(MouseEvent e) {
+ Component c = e.getComponent();
+ String helpText = "";
+ if (c instanceof JLabel) {
+ String paramName = ((JLabel)c).getText();
+ ExtendedPluginInfo epi = mEPIs.get(paramName);
+
+ if (epi != null) helpText = epi.getHelpText();
+ else if (doHelpSummary(c)) {
+ helpText = mEPIs.getHelpSummary();
+ }
+ }
+ mHelpLabel.setText(helpText);
+ mHelpLabel.repaint();
+ }
+
+ public void mouseEntered(MouseEvent e) {
+ }
+ public void mouseExited(MouseEvent e) {
+ }
+ public void mousePressed(MouseEvent e) {
+ }
+ public void mouseReleased(MouseEvent e) {
+ }
+
+
+ public boolean doHelpSummary(Component c) {
+
+ if (c.equals(mPluginName) ||
+ c.equals(mPluginLabel) ||
+ c.equals(mRulenameCaption) ||
+ c.equals(mImplnameCaption) ||
+ c.equals(mImplName) ) {
+ return true;
+ }
+ else {
+ return false;
+ }
+ }
+
+ //=== ACTIONLISTENER =====================
+
+ /**
+ * this gets called when a someone made some kind of event happen.
+ * We really only check for the OK, Cancel, or Help buttons here
+ */
+ public void actionPerformed(ActionEvent evt) {
+
+ if (evt.getSource().equals(mOK)) {
+
+ /* if this is a new instance of a rule, (as opposed to editing an old one) */
+ if (mNewInstance) {
+ mRuleName = mPluginName.getText();
+ /* make sure they set the name of the rule, otherwise, show an error message */
+ if (mRuleName.trim().equals("")) {
+ CMSAdminUtil.showErrorDialog(mParentFrame, mResource,
+ mResource.getString("INSTANCECONFIGDIALOG_DIALOG_NOINSTANCENAME_MESSAGE"),
+ CMSAdminUtil.ERROR_MESSAGE);
+ return;
+ }
+ }
+ else {
+ mRuleName = mPluginLabel.getText();
+ }
+
+ Debug.println(4,"User pressed okay on instance config dialog");
+ Enumeration e = mEPIs.keys();
+ NameValuePairs nvp = new NameValuePairs();
+ while (e.hasMoreElements()) {
+ String paramName = (String)e.nextElement();
+ ExtendedPluginInfo epi = mEPIs.get(paramName);
+ String value = epi.getComponentStateAsString();
+ if (epi.getType() == ExtendedPluginInfo.TYPE_PASSWORD) {
+ String password = value;
+ value = "Rule "+mRuleName;
+ if (password != null && password.length() >0) {
+ nvp.add("PASSWORD_CACHE_ADD",value+";"+password);
+ }
+ }
+
+ nvp.add(paramName,value);
+ }
+ nvp.add(PolicyRuleDataModel.RULE_NAME,mRuleName);
+ nvp.add(mImplName_token,mImplName.getText());
+
+ mData = nvp;
+ try {
+ if (mModel != null) { mModel.progressStart(); }
+ if (mNewInstance == true) {
+ mAdminConnection.add(mDest, mInstanceScope, mRuleName, nvp);
+ }
+ else {
+ if (mId != null && mId.length() > 0) {
+ nvp.add(Constants.PR_ID, mId);
+ }
+ mAdminConnection.modify(mDest, mInstanceScope, mRuleName, nvp);
+ }
+ mIsOK = true;
+ if (mModel != null) { mModel.progressStop(); }
+ this.dispose();
+ }
+ catch (EAdminException ex) {
+ mModel.progressStop();
+ CMSAdminUtil.showErrorDialog(mParentFrame, mResource,
+ ex.toString(),CMSAdminUtil.ERROR_MESSAGE);
+ }
+ }
+
+ if (evt.getSource().equals(mCancel)) {
+ this.dispose();
+ }
+ if (evt.getSource().equals(mHelp)) {
+ String ht = mEPIs.getHelpToken();
+ if (ht == null || ht.equals("")) {
+ CMSAdminUtil.help(mHelpToken);
+ }
+ else {
+ CMSAdminUtil.help(ht);
+ }
+ }
+ }
+
+
+ public NameValuePairs getData() {
+ return mData;
+ }
+
+ /*==========================================================
+ * private methods
+ *==========================================================*/
+ private void setDisplay() {
+ getContentPane().setLayout(new BorderLayout());
+ JPanel center = new JPanel();
+ GridBagLayout gb = new GridBagLayout();
+ GridBagConstraints gbc = new GridBagConstraints();
+ center.setLayout(gb);
+
+
+ /* Content panel. This is where we put the name/value pairs,
+ * and the help text */
+ JPanel content = makeContentPane();
+ CMSAdminUtil.resetGBC(gbc);
+ gbc.anchor = gbc.NORTH;
+ gbc.fill = gbc.BOTH;
+ gbc.gridwidth = gbc.REMAINDER;
+ gbc.weightx = 1.0;
+ gbc.weighty = 1.0;
+ gb.setConstraints(content, gbc);
+ center.add(content);
+
+
+ /* Action panel. This is where we put the OK, Cancel, Help buttons */
+ JPanel action = makeActionPane();
+ CMSAdminUtil.resetGBC(gbc);
+ gbc.anchor = gbc.NORTH;
+ gbc.gridwidth = gbc.REMAINDER;
+ gbc.gridheight = gbc.REMAINDER;
+ gbc.weightx = 1.0;
+ gb.setConstraints(action, gbc);
+ center.add(action);
+
+ getContentPane().add("Center",center);
+ }
+
+ //create botton action panel
+ private JPanel makeActionPane() {
+
+ mOK = CMSAdminUtil.makeJButton(mResource, PREFIX, "OK", null, this);
+ mCancel = CMSAdminUtil.makeJButton(mResource, PREFIX, "CANCEL", null, this);
+ mHelp = CMSAdminUtil.makeJButton(mResource, PREFIX, "HELP", null, this);
+
+ JButton[] buttons = { mOK, mCancel, mHelp};
+ JButtonFactory.resize( buttons );
+ return CMSAdminUtil.makeJButtonPanel( buttons, true);
+ }
+
+ protected void setDestination(String dest) {
+ mDest = dest;
+ }
+
+ protected JPanel makeContentPane() {
+ JPanel mListPanel = new JPanel();
+ GridBagLayout gb = new GridBagLayout();
+ GridBagConstraints gbc = new GridBagConstraints();
+ mListPanel.setLayout(gb);
+
+ /* mPluginName and mPluginLabel occupy the same space in the UI, but
+ * only one of them is visible at a time. showDialog() determines which
+ * is visible. If this is a new component, mPluginName is visible, and is a
+ * a text field, so the user can enter the name of the new instance.
+ * Otherwise, it's just a label, showing the existing name.
+ */
+ // 'Policy Rule ID' here
+ CMSAdminUtil.resetGBC(gbc);
+ mRulenameCaption = CMSAdminUtil.makeJLabel(mResource, PREFIX,
+ "RULENAME", null);
+ mRulenameCaption.addMouseListener(this);
+ mPluginLabel = new JLabel();
+ mPluginLabel.setVisible(false);
+ mPluginName = new JTextField();
+
+ gbc.fill = gbc.NONE;
+ gbc.weightx = 0.0;
+ gbc.gridwidth = 1;
+ gbc.anchor = gbc.EAST;
+ gbc.insets = new Insets(CMSAdminUtil.COMPONENT_SPACE,
+ CMSAdminUtil.COMPONENT_SPACE,0,0);
+ mListPanel.add(mRulenameCaption, gbc);
+
+ gbc.anchor = gbc.WEST;
+ gbc.fill = gbc.HORIZONTAL;
+ gbc.weightx = 1.0;
+ gbc.gridwidth = gbc.REMAINDER;
+ gbc.insets = new Insets(CMSAdminUtil.COMPONENT_SPACE,
+ CMSAdminUtil.COMPONENT_SPACE,
+ 0,CMSAdminUtil.COMPONENT_SPACE);
+ mListPanel.add( mPluginName, gbc );
+ mListPanel.add( mPluginLabel, gbc );
+
+ // 'Policy Plugin ID' here
+ CMSAdminUtil.resetGBC(gbc);
+ mImplnameCaption = CMSAdminUtil.makeJLabel(mResource, PREFIX,
+ "IMPLNAME", null);
+ mImplnameCaption.addMouseListener(this);
+
+ gbc.fill = gbc.NONE;
+ gbc.weightx = 0.0;
+ gbc.gridwidth = 1;
+ gbc.anchor = gbc.EAST;
+ gbc.insets = new Insets(CMSAdminUtil.COMPONENT_SPACE,
+ CMSAdminUtil.COMPONENT_SPACE,0,0);
+ mListPanel.add( mImplnameCaption, gbc );
+
+ gbc.anchor = gbc.WEST;
+ gbc.fill = gbc.HORIZONTAL;
+ gbc.weightx = 1.0;
+ gbc.gridwidth = gbc.REMAINDER;
+ mImplName = new JLabel();
+ mListPanel.add( mImplName, gbc );
+
+ /* Panel for list of plugin's parameters */
+ mParamPanel = new JPanel();
+
+ mScrollPane = new JScrollPane(mParamPanel);
+ mScrollPane.setBorder(CMSAdminUtil.makeEtchedBorder());
+
+ CMSAdminUtil.resetGBC(gbc);
+ gbc.fill = gbc.BOTH;
+ gbc.anchor = gbc.WEST;
+ gbc.gridwidth = gbc.REMAINDER;
+ gbc.weightx = 1.0;
+ gbc.weighty = 1.0;
+ gb.setConstraints(mScrollPane, gbc);
+ mListPanel.add(mScrollPane);
+
+ /* Panel in which to put plugin's help text */
+ mHelpPanel = new JPanel();
+ mHelpPanel.setBorder(CMSAdminUtil.makeEtchedBorder());
+ mHelpLabel = new JTextArea(3,0);
+ mHelpLabel.setLineWrap(true);
+ mHelpLabel.setWrapStyleWord(true);
+ mHelpLabel.setBackground(mHelpPanel.getBackground());
+ mHelpLabel.setEditable(false);
+ GridBagLayout gb2 = new GridBagLayout();
+ GridBagConstraints gbc2 = new GridBagConstraints();
+
+ CMSAdminUtil.resetGBC(gbc2);
+ gbc2.fill = gbc.BOTH;
+ gbc2.anchor = gbc.WEST;
+ gbc2.gridwidth = gbc.REMAINDER;
+ gbc2.weightx = 1.0;
+ gbc2.weighty = 1.0;
+ gb2.setConstraints(mHelpLabel, gbc2);
+ mHelpPanel.setLayout(gb2);
+ mHelpPanel.add(mHelpLabel);
+
+ CMSAdminUtil.resetGBC(gbc);
+ gbc.anchor = gbc.SOUTH;
+ gbc.gridwidth = gbc.REMAINDER;
+ gbc.gridheight = gbc.REMAINDER;
+ gbc.weightx = 1.0;
+ gbc.weighty = 0.0;
+ gb.setConstraints(mHelpPanel, gbc);
+ mListPanel.add(mHelpPanel);
+
+ return mListPanel;
+ }
+
+}
+
+
+class ExtendedPluginInfoSet extends Hashtable {
+
+ /**
+ * Add a value for this config parameter.
+ * the format of 'syntax' is specified in
+ * @see com.netscape.certsrv.base.IExtendedPluginInfo
+ */
+ public void add(String param, String syntax, boolean oldstyle) {
+
+ try {
+ String type;
+ ExtendedPluginInfo epi;
+ boolean required=false;
+
+ if (!oldstyle) {
+ String rest, helptext;
+ int semicolon = syntax.indexOf(';');
+
+ type = syntax.substring(0,semicolon);
+ rest = syntax.substring(semicolon+1);
+
+ for (int i=0;i<1;i++) {
+ int length = type.length();
+ if (type.endsWith(",required")) {
+ type=type.substring(0,length-0);
+ required=true;
+ }
+ }
+ helptext = rest; // ADDED to fix bug #383969
+/*
+ semicolon = rest.indexOf(';');
+ if (semicolon == -1) { // no more semicolons
+ helptext = rest;
+ }
+ else {
+ helptext = rest.substring(0,semicolon);
+ rest = rest.substring(semicolon+1);
+ }
+*/
+ epi = new ExtendedPluginInfo(type,helptext);
+ epi.setRequired(required);
+ }
+ else {
+ epi = new ExtendedPluginInfo("string","");
+ }
+
+ put(param,epi);
+ } catch (Exception e) {
+ Debug.println("Badly formatted ExtendedpluginInfo for string: '"+
+ syntax+"'");
+ }
+ }
+
+ private String mHelpSummary = "";
+ private String mHelpToken = "";
+
+ public String getHelpSummary() {
+ return mHelpSummary;
+ }
+
+ public void setHelpSummary(String summary) {
+ mHelpSummary = summary;
+ }
+
+ public String getHelpToken() {
+ return mHelpToken;
+ }
+
+ public void setHelpToken(String token) {
+ mHelpToken = token;
+ }
+
+ public ExtendedPluginInfo get(String param) {
+ return (ExtendedPluginInfo)super.get(param);
+ }
+
+}
+
+
+
+interface ExtendedPluginInfoComponent
+{
+ public abstract ExtendedPluginInfo getExtendedPluginInfo();
+
+ public abstract String getValueAsString();
+}
+
+
+class ExtendedPluginInfoCheckBox extends JCheckBox
+implements ExtendedPluginInfoComponent
+{
+ private ExtendedPluginInfo mEpi;
+
+ public ExtendedPluginInfoCheckBox(ExtendedPluginInfo epi, boolean b)
+ {
+ super("",b);
+ mEpi = epi;
+ }
+
+ public ExtendedPluginInfo getExtendedPluginInfo() {
+ return mEpi;
+ }
+
+ public String getValueAsString() {
+ if (isSelected()) {
+ return "true";
+ }
+ else {
+ return "false";
+ }
+ }
+
+}
+
+class ExtendedPluginInfoComboBox extends JComboBox
+implements ExtendedPluginInfoComponent
+{
+ private ExtendedPluginInfo mEpi;
+
+ public ExtendedPluginInfoComboBox(ExtendedPluginInfo epi, Vector v)
+ {
+ super(v);
+ mEpi = epi;
+ }
+
+ public ExtendedPluginInfo getExtendedPluginInfo() {
+ return mEpi;
+ }
+
+ public String getValueAsString() {
+ return (String)getSelectedItem();
+ }
+}
+
+class ExtendedPluginInfoTextField extends JTextField
+implements ExtendedPluginInfoComponent
+{
+ private ExtendedPluginInfo mEpi;
+
+ public ExtendedPluginInfoTextField(ExtendedPluginInfo epi, String s)
+ {
+ super(s);
+ mEpi = epi;
+ }
+
+ public ExtendedPluginInfo getExtendedPluginInfo() {
+ return mEpi;
+ }
+
+ public String getValueAsString() {
+ return getText();
+ }
+}
+
+class ExtendedPluginInfoPasswordField extends JPasswordField
+implements ExtendedPluginInfoComponent
+{
+ private ExtendedPluginInfo mEpi;
+
+ public ExtendedPluginInfoPasswordField(ExtendedPluginInfo epi, String s)
+ {
+ super(s);
+ mEpi = epi;
+ }
+
+ public ExtendedPluginInfo getExtendedPluginInfo() {
+ return mEpi;
+ }
+
+ public String getValueAsString() {
+ return getText();
+ }
+}
+
+class ExtendedPluginInfoNumberField extends JTextField
+implements ExtendedPluginInfoComponent
+{
+ private ExtendedPluginInfo mEpi;
+
+ public ExtendedPluginInfoNumberField(ExtendedPluginInfo epi, String s)
+ {
+ super(s);
+ mEpi = epi;
+ }
+
+ public ExtendedPluginInfo getExtendedPluginInfo() {
+ return mEpi;
+ }
+
+ public String getValueAsString() {
+ return getText();
+ }
+
+ protected Document createDefaultModel() {
+ return new NumberDocument();
+ }
+
+ static class NumberDocument extends PlainDocument {
+
+ public void insertString(int offs, String str, AttributeSet a)
+ throws BadLocationException {
+
+ if (str == null) {
+ return;
+ }
+
+ char[] chars = str.toCharArray();
+ int j=0;
+
+ for (int i = 0; i < chars.length; i++) {
+ if ( (chars[i]<'0' || chars[i]>'9')
+ && (chars[i] != '.')
+ && (chars[i] != '-') ) {
+ }
+ else {
+ chars[j++] = chars[i];
+ }
+ }
+ char newchars[] = new char[j];
+ if (j != 0) {
+ System.arraycopy(chars,0,newchars,0,j);
+ }
+ super.insertString(offs, new String(newchars), a);
+ }
+ }
+}
+
+
+
+/**
+ * This class records information about the type of a parameter
+ * and what possible value it can take
+ */
+
+class ExtendedPluginInfo {
+
+ public static final int TYPE_STRING = 0;
+ public static final int TYPE_BOOLEAN = 1;
+ public static final int TYPE_NUMBER = 2;
+ public static final int TYPE_CHOICE = 3;
+ public static final int TYPE_PASSWORD = 4;
+
+ private int mType;
+ private boolean mRequired;
+
+ private String mValue = null;
+
+ private Vector mChoices = null;
+
+ private String mHelpText = null;
+
+
+ ExtendedPluginInfo(String type, String helptext)
+ {
+ mHelpText = helptext;
+
+ if (type.equals("string")) {
+ mType = TYPE_STRING;
+ }
+ else if (type.equals("boolean")) {
+ mType = TYPE_BOOLEAN;
+ }
+ else if (type.equals("number")) {
+ mType = TYPE_NUMBER;
+ }
+ else if (type.equals("integer")) {
+ mType = TYPE_NUMBER;
+ }
+ else if (type.equals("password")) {
+ mType = TYPE_PASSWORD;
+ }
+ else if (type.startsWith("choice")) {
+ mType = TYPE_CHOICE;
+ String choices = type.substring(
+ type.indexOf('(')+1,
+ type.indexOf(')')
+ );
+ StringTokenizer tokenizer = new StringTokenizer(choices,",",false);
+ mChoices = new Vector();
+ String prefix = null;
+ while (tokenizer.hasMoreElements()) {
+ String c = (String)tokenizer.nextElement();
+ int i = c.indexOf("\\");
+ if ( i != -1 ) {
+ if (prefix == null)
+ prefix = c.substring(0,i);
+ else
+ prefix = prefix + "," + c.substring(0,i);
+ } else {
+ if (prefix != null) {
+ c = prefix + "," + c;
+ prefix = null;
+ }
+ mChoices.addElement(c);
+ }
+ }
+ }
+ else {
+ mType = TYPE_STRING; // unknown type - default to string type
+ }
+ }
+
+ public Vector getChoices() {
+ return mChoices;
+ }
+
+ public String getHelpText() {
+ return mHelpText;
+ }
+
+ public String getValue() {
+ return mValue;
+ }
+
+ public void setValue(String val) {
+ mValue = val;
+ }
+
+ public int getType() {
+ return mType;
+ }
+
+ public void setRequired(boolean b) {
+ mRequired = b;
+ }
+
+ public boolean isRequired() {
+ return mRequired;
+ }
+
+ private JComponent component = null;
+
+ public JComponent getComponent() {
+ return component;
+ }
+
+ public String getComponentStateAsString() {
+ if (component == null)
+ return null;
+ return ((ExtendedPluginInfoComponent)component).getValueAsString();
+ }
+
+ public JComponent makeComponent(ActionListener al)
+ {
+ switch (getType()) {
+ case ExtendedPluginInfo.TYPE_BOOLEAN:
+ boolean b;
+ if (getValue().equals("true")) { b=true; }
+ else { b = false; }
+ component = new ExtendedPluginInfoCheckBox(this,b);
+ ((ExtendedPluginInfoCheckBox)component).addActionListener(al);
+ break;
+
+ case ExtendedPluginInfo.TYPE_STRING:
+ component = new ExtendedPluginInfoTextField(this,getValue());
+ ((ExtendedPluginInfoTextField)component).addActionListener(al);
+ break;
+
+ case ExtendedPluginInfo.TYPE_NUMBER:
+ component = new ExtendedPluginInfoNumberField(this,getValue());
+ ((ExtendedPluginInfoNumberField)component).addActionListener(al);
+ break;
+
+ case ExtendedPluginInfo.TYPE_PASSWORD:
+ component = new ExtendedPluginInfoPasswordField(this,"");
+ ((ExtendedPluginInfoPasswordField)component).addActionListener(al);
+ break;
+
+ case ExtendedPluginInfo.TYPE_CHOICE:
+ JComboBox cb = new ExtendedPluginInfoComboBox(this,getChoices());
+ cb.setSelectedItem(getValue());
+ ((ExtendedPluginInfoComboBox)cb).addActionListener(al);
+ component = cb;
+ break;
+
+ default:
+ return null;
+ }
+ return component;
+ }
+
+}