package qat.gui;
/**
*
* @author Stephen Kruger
* @version 2.3, 17 June 1999
*/
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Properties;
import java.util.StringTokenizer;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import qat.common.Common;
import qat.common.Resources;
import qat.common.SwingUtils;
import qat.common.Utils;
import qat.components.ComboList;
import qat.components.ComboText;
import qat.components.EComboBox;
public class EditProject extends JDialog implements ActionListener {
/**
*
*/
private static final long serialVersionUID = -4264894232031465628L;
Properties projectProperties;
Properties originalProperties;
Properties keyWordHistoryProperties;
Properties agentProperties;
Hashtable<String, String> actions;
JTextField testDirectoryPath;
JButton browseButton;
JTextArea projectPropertiesTextArea;
JTextArea systemPropertiesTextArea;
JCheckBox autosave, reuseTraceWindow, syntaxHighlighting, resetStatus;
EComboBox parserClassName, testfinderClassName, pluginClassNames;
JComboBox lookAndFeel;
ComboText httpPort;
ComboText bufferSize;
ComboText debugLevel;
private boolean reloadTests = false;
private String agentCount, propertiesVersion;
private JPanel guiPanel;
private ArrayList<JComponent> guiComponents;
private JScrollPane guiPanelPane;
private QAT parent;
private JTabbedPane tabbedPane;
public EditProject(QAT parent, Properties p, String title) {
super(parent,Resources.getString("projectSettings"),true);
this.parent = parent;
setupScreen();
chargeProperties(p);
pack();
setSize(640,480);
SwingUtils.setLocationRelativeTo(this,parent);
setVisible(true);
}
// private static Properties tempFunc(Properties p, String newKey, String oldKey, String defaultVal) {
// p.setProperty(newKey,p.getProperty(oldKey,defaultVal));
// p.remove(oldKey);
// return p;
// }
@SuppressWarnings("unchecked")
private void chargeGuiProperties(Properties p) {
ArrayList<JComponent> components1 = new ArrayList<JComponent>();
ArrayList<JComponent> components2 = new ArrayList<JComponent>();
ArrayList<JComponent> components3 = new ArrayList<JComponent>();
guiPanel.removeAll();
String key, name, value, values;
JComponent c;
for (Enumeration<String> e = (Enumeration<String>) p.propertyNames() ; e.hasMoreElements() ;) {
key = ((String)e.nextElement());
key = key.trim();
try {
if (key.startsWith("qat.project.guiproperty.checkbox")) {
name = key.substring(33,key.length());
value = (String)p.get(key);
components1.add(c = new JCheckBox(name, Boolean.valueOf(value).booleanValue()));
c.setToolTipText(key);
}
if (key.startsWith("qat.project.guiproperty.textfield")) {
name = key.substring(34,key.length());
value = (String)p.get(key);
components3.add(c = new ComboText(name, value));
c.setToolTipText(key);
}
if ((key.startsWith("qat.project.guiproperty.combobox"))&&
(key.indexOf(".values")<0)) {
name = key.substring(33,key.length());
value = (String)p.get(key);
values = (String)p.getProperty(key+".values",value);
components2.add(c = new ComboList(name, value, values));
c.setToolTipText(key);
}
}
catch (Throwable t) {
System.out.println("Error processing key:"+key);
}
}
//BoxLayout layout;
guiComponents = new ArrayList<JComponent>();
JPanel guiPanel1 = new JPanel(new GridLayout(components1.size()/2,2));
guiPanel1.setBorder(BorderFactory.createEtchedBorder());
for (int i = 0; i < components1.size(); i++) {
guiPanel1.add((JComponent)components1.get(i));
guiComponents.add(components1.get(i));
}
JPanel guiPanel2 = new JPanel(new GridLayout(components2.size()/2,2));
guiPanel2.setBorder(BorderFactory.createEtchedBorder());
for (int i = 0; i < components2.size(); i++) {
guiPanel2.add((JComponent)components2.get(i));
guiComponents.add(components2.get(i));
}
JPanel guiPanel3 = new JPanel();
guiPanel3.setBorder(BorderFactory.createEtchedBorder());
guiPanel3.setLayout(new BoxLayout(guiPanel3,BoxLayout.Y_AXIS));
for (int i = 0; i < components3.size(); i++) {
guiPanel3.add((JComponent)components3.get(i));
guiComponents.add(components3.get(i));
}
guiPanel.add(guiPanel1);
guiPanel.add(guiPanel2);
guiPanel.add(guiPanel3);
guiPanelPane.validate();
// don't display it if it's empty
if (guiComponents.size()==0)
tabbedPane.remove(guiPanelPane);
}
/**
* This will commit the user-selected gui properties into the
* properties file. The properties tab being displayed will take precedence.
*/
private void collectGuiProperties(Properties p) {
for (int i = 0; i < guiComponents.size(); i++) {
if (guiComponents.get(i) instanceof JCheckBox) {
p.put(((JCheckBox)guiComponents.get(i)).getToolTipText(),
new Boolean(((JCheckBox)guiComponents.get(i)).isSelected()).toString());
}
if (guiComponents.get(i) instanceof ComboText) {
p.put(((ComboText)guiComponents.get(i)).getToolTipText(),
((ComboText)guiComponents.get(i)).getText());
}
if (guiComponents.get(i) instanceof ComboList) {
p.put(((ComboList)guiComponents.get(i)).getToolTipText()+".values",
((ComboList)guiComponents.get(i)).getText());
p.put(((ComboList)guiComponents.get(i)).getToolTipText(),
((ComboList)guiComponents.get(i)).getValue());
}
}
}
/**
* Skim all the non-user stuff from the properties and set up the components
* which use it.
*/
@SuppressWarnings("unchecked")
private void chargeProperties(Properties p) {
chargeGuiProperties(p);
systemPropertiesTextArea.setEditable(true);
String name;
// clone the passed properties in case user chooses cancel
originalProperties = p; // keep a copy of them.
projectProperties = Utils.mergeProperties(new Properties(),p);
projectProperties =(Properties)p.clone();
// remove the reuseTraceWindow property
reuseTraceWindow.setSelected(new Boolean(projectProperties.getProperty(Common.REUSE_TRACE_WINDOW,"true")).booleanValue());
projectProperties.remove(Common.REUSE_TRACE_WINDOW);
// remove the http port property
httpPort.setText(projectProperties.getProperty(Common.HTTP_PORT_KEY,Common.HTTP_PORT_DEFAULT));
projectProperties.remove(Common.HTTP_PORT_KEY);
// remove the autosave property
autosave.setSelected(new Boolean(projectProperties.getProperty(Common.AUTOSAVE_PROJECT,"true")).booleanValue());
projectProperties.remove(Common.AUTOSAVE_PROJECT);
// remove the syntaxHighlighting property
syntaxHighlighting.setSelected(new Boolean(projectProperties.getProperty(Common.SYNTAX_HIGHLIGHTING,"true")).booleanValue());
projectProperties.remove(Common.SYNTAX_HIGHLIGHTING);
// remove the console buffer size property
bufferSize.setText(projectProperties.getProperty(Common.CONSOLE_BUFFER_SIZE,
Common.CONSOLE_BUFFER_SIZE_VALUE));
projectProperties.remove(Common.CONSOLE_BUFFER_SIZE);
// remove the console debug level property
debugLevel.setText(projectProperties.getProperty(Common.CONSOLE_DEBUG_LEVEL,
Common.CONSOLE_DEBUG_LEVEL_VALUE));
projectProperties.remove(Common.CONSOLE_DEBUG_LEVEL);
// remove the resetStatus property
resetStatus.setSelected(new Boolean(projectProperties.getProperty(Common.RESET_STATUS,"true")).booleanValue());
projectProperties.remove(Common.RESET_STATUS);
// remove the default parser class name property
parserClassName.setList(projectProperties.getProperty(Common.PARSER_CLASSNAMES,
Common.DEFAULT_PARSER_CLASSNAMES));
projectProperties.remove(Common.PARSER_CLASSNAMES);
// remove the default testfinder class name property
testfinderClassName.setList(projectProperties.getProperty(Common.TESTFINDER_CLASSNAMES,
Common.DEFAULT_TESTFINDER_CLASSNAMES));
projectProperties.remove(Common.TESTFINDER_CLASSNAMES);
// remove the plugin class list
pluginClassNames.setList(projectProperties.getProperty(Common.PLUGIN_CLASSES));
projectProperties.remove(Common.PLUGIN_CLASSES);
// remove the test directory path keyword
testDirectoryPath.setText(projectProperties.getProperty(Common.PROJECTPATH_KEY,"."));
systemPropertiesTextArea.append(Common.PROJECTPATH_KEY+"="+projectProperties.getProperty(Common.PROJECTPATH_KEY,"")+System.getProperty("line.separator"));
projectProperties.remove(Common.PROJECTPATH_KEY);
// remove the AGENT_COUNT property
agentCount = projectProperties.getProperty(Common.AGENT_COUNT,"0");
systemPropertiesTextArea.append(Common.AGENT_COUNT+"="+agentCount+System.getProperty("line.separator"));
projectProperties.remove(Common.AGENT_COUNT);
// remove the properties version property
propertiesVersion = projectProperties.getProperty(Common.PROPERTIES_VERSION,Common.CURRENT_PROPERTIES_VERSION);
systemPropertiesTextArea.append(Common.PROPERTIES_VERSION+"="+propertiesVersion+System.getProperty("line.separator"));
projectProperties.remove(Common.PROPERTIES_VERSION);
// remove the LOOK_AND_FEEL_KEY property
projectProperties.remove(Common.LOOK_AND_FEEL_KEY);
// remove keyword history and AGENT1_NAME etc stuff
keyWordHistoryProperties = new Properties();
agentProperties = new Properties();
for (Enumeration e = projectProperties.propertyNames() ; e.hasMoreElements() ;) {
name = (String)e.nextElement();
// remove and save keyword history stuff
if (name.indexOf("KeyWordHistory")==0) {
keyWordHistoryProperties.setProperty(name,projectProperties.getProperty(name));
projectProperties.remove(name);
}
// remove and save AGENT_XXXX system stuff
if (name.indexOf(Common.host)==0) {
if ((name.indexOf(Common.hostNamePattern)>0)||
(name.indexOf(Common.hostPortPattern)>0)||
(name.indexOf(Common.hostArchPattern)>0)||
(name.indexOf(Common.hostOSPattern)>0)) {
agentProperties.setProperty(name,projectProperties.getProperty(name));
projectProperties.remove(name);
}
}
}
// copy the user properties to this text area
ArrayList<String> elements = new ArrayList<String>();
for (Enumeration e = projectProperties.propertyNames() ; e.hasMoreElements() ;) {
name = (String)e.nextElement();
elements.add(name+"="+projectProperties.getProperty(name)+System.getProperty("line.separator"));
}
Object parray[] = elements.toArray();
Arrays.sort(parray);
for (int i = 0; i < parray.length; i++)
projectPropertiesTextArea.append((String)parray[i]);
systemPropertiesTextArea.setEditable(false);
}
/**
* Collects all the properties from the GUI components and returns them in
* a Properties object for use as a project.
*/
private void collectProperties() {
// copy the text area properties into our properties object
projectProperties = new Properties();
StringTokenizer propPair;
StringTokenizer token = new StringTokenizer(projectPropertiesTextArea.getText(),System.getProperty("line.separator"));
String s ="";
while (token.hasMoreTokens()) {
propPair = new StringTokenizer(token.nextToken(),"=");
try {
projectProperties.put(s = propPair.nextToken(),propPair.nextToken());
}
catch (java.util.NoSuchElementException ex) {
System.out.println("Warning - Undefined property encountered:"+s);
}
}
// restore the keyword info
Utils.mergeProperties(projectProperties,keyWordHistoryProperties);
// restore the agent info
Utils.mergeProperties(projectProperties,agentProperties);
// restore the reuse trace files window in tree property
projectProperties.setProperty(Common.REUSE_TRACE_WINDOW,
new Boolean(reuseTraceWindow.isSelected()).toString());
// restore the autosave property
projectProperties.setProperty(Common.AUTOSAVE_PROJECT,
new Boolean(autosave.isSelected()).toString());
// restore the http port property
projectProperties.setProperty(Common.HTTP_PORT_KEY,
httpPort.getText());
// restore the syntaxHighlighting in tree property
projectProperties.setProperty(Common.SYNTAX_HIGHLIGHTING,
new Boolean(syntaxHighlighting.isSelected()).toString());
// restore the resetStatus in tree property
projectProperties.setProperty(Common.RESET_STATUS,
new Boolean(resetStatus.isSelected()).toString());
// restore the default parser class name
projectProperties.setProperty(Common.PARSER_CLASSNAMES,
parserClassName.getList());
// restore the plugin class list
projectProperties.setProperty(Common.PLUGIN_CLASSES,
pluginClassNames.getList());
// restore the default testfinder class name
projectProperties.setProperty(Common.TESTFINDER_CLASSNAMES,
testfinderClassName.getList());
// restore the test directory info
projectProperties.setProperty(Common.PROJECTPATH_KEY, testDirectoryPath.getText());
// restore the AGENT_COUNT property
projectProperties.setProperty(Common.AGENT_COUNT,agentCount);
// restore the PROPERTIES_VERSION property
projectProperties.setProperty(Common.PROPERTIES_VERSION,propertiesVersion);
// restore the CONSOLE_BUFFER_SIZE property
projectProperties.setProperty(Common.CONSOLE_BUFFER_SIZE,bufferSize.getText());
// restore the CONSOLE_DEBUG_LEVEL property
projectProperties.setProperty(Common.CONSOLE_DEBUG_LEVEL,debugLevel.getText());
// decide whether the tests need to be reloaded or not
if ((!originalProperties.getProperty(Common.PROJECTPATH_KEY,"").equals(projectProperties.getProperty(Common.PROJECTPATH_KEY)))||
(!originalProperties.getProperty(Common.PARSER_CLASSNAMES,"").equals(projectProperties.getProperty(Common.PARSER_CLASSNAMES))) )
reloadTests = true;
// set up the selected look and feel
try {
// restore the LOOK_AND_FEEL_KEY property
projectProperties.setProperty(Common.LOOK_AND_FEEL_KEY,(String)lookAndFeel.getSelectedItem());
UIManager.setLookAndFeel(projectProperties.getProperty(Common.LOOK_AND_FEEL_KEY));
SwingUtilities.updateComponentTreeUI(parent);
}
catch (Exception e) {
JOptionPane.showMessageDialog(this,
e.toString(),
Resources.getString("error"),
JOptionPane.ERROR_MESSAGE);
}
// gui properties take precedence, but only if the tab is being displayed, else ignore
// the gui settings
if (tabbedPane.getTitleAt(tabbedPane.getSelectedIndex()).equals(Resources.getString("projectOptions"))) {
collectGuiProperties(projectProperties);
}
}
// private void createActionTable(JTextComponent textComponent) {
// actions = new Hashtable();
// Action[] actionsArray = textComponent.getActions();
// for (int i = 0; i < actionsArray.length; i++) {
// Action a = actionsArray[i];
// actions.put(a.getValue(Action.NAME), a);
// }
// }
// private Action getActionByName(String name) {
// return (Action)(actions.get(name));
// }
private void setupScreen() {
JPanel temp;
JPanel main = new JPanel(new BorderLayout());
tabbedPane = new JTabbedPane();
// now add the new GUI config panel
guiPanel = new JPanel();
guiPanel.setLayout(new BoxLayout(guiPanel,BoxLayout.Y_AXIS));
tabbedPane.add(Resources.getString("projectOptions"),guiPanelPane = new JScrollPane(guiPanel,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED));
// the Project properties panel
JPanel propsPanel = new JPanel(new BorderLayout());
JScrollPane scrollPane = new JScrollPane(projectPropertiesTextArea = new JTextArea());
projectPropertiesTextArea.setLineWrap(true);
// FIX START
// When you define a property which is extremly long (e.g. CLASSPATH),
// the scrollPane is drawn to fit in a way scroll bars are not needed;
// consequence is you get a fucking big window that goes out of screen limits !
// By setting the Dimension, I get an average result that looks good.
scrollPane.setPreferredSize(new Dimension(600,350)) ; // fix jqat.00018.E
// FIX END
temp = new JPanel(new GridLayout(1,1));
temp.setBorder(BorderFactory.createTitledBorder(Resources.getString("projectProperties")));
temp.add(scrollPane);
propsPanel.add(temp,BorderLayout.CENTER);
scrollPane = new JScrollPane(systemPropertiesTextArea = new JTextArea());
temp = new JPanel(new GridLayout(1,1));
temp.setBorder(BorderFactory.createTitledBorder(Resources.getString("systemProperties")));
temp.add(scrollPane);
propsPanel.add(temp,BorderLayout.SOUTH);
tabbedPane.add(Resources.getString("projectProperties"),propsPanel);
// the Project Settings panel
JPanel centerPanel = new JPanel();
centerPanel.setLayout(new BoxLayout(centerPanel,BoxLayout.Y_AXIS));
temp = new JPanel(new GridLayout(3,1));
temp.setBorder(BorderFactory.createTitledBorder(Resources.getString("userDefinedClasses")));
// add the Parser Class edit field
temp.add(parserClassName = new EComboBox());
parserClassName.setEditable(true);
// add the TestFinder Class edit field
temp.add(testfinderClassName = new EComboBox());
testfinderClassName.setEditable(true);
// add the Plugin Class edit field
JPanel tmp2 = new JPanel(new GridLayout(1,2));
tmp2.add(new JLabel(Resources.getString("pluginClassName"),SwingConstants.CENTER));
tmp2.add(pluginClassNames = new EComboBox());
pluginClassNames.setEditable(true);
temp.add(tmp2);
centerPanel.add(temp);
// add the miscOptions pane
temp = new JPanel(new GridLayout(4,2));
temp.setBorder(BorderFactory.createTitledBorder(Resources.getString("miscOptions")));
temp.add(autosave = new JCheckBox(Resources.getString("autosave")));
temp.add(reuseTraceWindow = new JCheckBox(Resources.getString("reuseTraceWindow")));
temp.add(syntaxHighlighting = new JCheckBox(Resources.getString("syntaxHighlighting")));
temp.add(resetStatus = new JCheckBox(Resources.getString("resetStatus")));
JPanel t;
// console buffer size
temp.add(bufferSize = new ComboText(Resources.getString("bufferSizeLabel"),6),BorderLayout.WEST);
// console debug level
temp.add(debugLevel = new ComboText(Resources.getString("debugLevelLabel"),6),BorderLayout.WEST);
// look and feel
t = new JPanel(new BorderLayout());
temp.add(new JLabel(Resources.getString("lookAndFeel"),SwingConstants.CENTER));
javax.swing.UIManager.LookAndFeelInfo installed[] = UIManager.getInstalledLookAndFeels();
String lfNames[] = new String[installed.length];
for (int i = 0; i < installed.length; i++)
lfNames[i] = installed[i].getClassName();
t.add(lookAndFeel = new JComboBox(lfNames));
lookAndFeel.setSelectedItem(UIManager.getLookAndFeel().getClass().getName());
temp.add(t);
centerPanel.add(temp);
// add the test path panel
temp = new JPanel(new GridLayout(2,1));
temp.setBorder(BorderFactory.createTitledBorder(Resources.getString("testSettings")));
// test path
t = new JPanel(new BorderLayout());
JPanel t2 = new JPanel(new FlowLayout());
t.add(new JLabel(Resources.getString("testPath")),BorderLayout.WEST);
t.add(testDirectoryPath = new JTextField(35),BorderLayout.CENTER);
t.add(browseButton = new JButton(Resources.getString("browse")),BorderLayout.EAST);
t2.add(t);
temp.add(t2);
// http port
temp.add(httpPort = new ComboText(Resources.getString("httpPort"),5));
browseButton.addActionListener(this);
centerPanel.add(temp);
tabbedPane.add(Resources.getString("projectSettings"),centerPanel);
JPanel south = new JPanel();
JButton button;
south.add(button = new JButton(Resources.getString("ok")));
button.addActionListener(this);
south.add(button = new JButton(Resources.getString("cancel")));
button.addActionListener(this);
main.add(tabbedPane,BorderLayout.CENTER);
main.add(south,BorderLayout.SOUTH);
getContentPane().add(main);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() instanceof JButton) {
// ok
if (((JButton)e.getSource()).getText().equals(Resources.getString("ok"))) {
setVisible(false);
collectProperties();
parent.editProjectCallback(this);
return;
}
if (e.getSource()==browseButton) {
JFileChooser testDir = new JFileChooser(testDirectoryPath.getText());
testDir.setDialogTitle(Resources.getString("selectTestDir"));
testDir.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
try {
if (testDir.showOpenDialog(this)==JFileChooser.APPROVE_OPTION) {
testDirectoryPath.setText(testDir.getSelectedFile().getCanonicalPath());
}
}
catch (Exception ex) {
System.out.println("Unexpected error loading test directory");
}
return;
}
// cancel
if (((JButton)e.getSource()).getText().equals(Resources.getString("cancel"))) {
setVisible(false);
projectProperties = originalProperties;// cancels any changes
return;
}
}
}
public Properties getProperties() {
return projectProperties;
}
public boolean needToReloadTests() {
return reloadTests;
}
}
//junit.classpath=C:\\Documents and Settings\\skruger\\.maven\\repository\\smartdocument\\jars\\smartdocument.core-1.2.1.jar;C:\\java\\apache-tomcat-5.5.15\\webapps\\smartdocument.core\\WEB-INF\\lib\\antlr-2.7.6.jar;C:\\java\\apache-tomcat-5.5.15\\webapps\\smartdocument.core\\WEB-INF\\lib\\axis-1.2.1.jar;C:\\java\\apache-tomcat-5.5.15\\webapps\\smartdocument.core\\WEB-INF\\lib\\axis-jaxrpc-1.3.jar;C:\\java\\apache-tomcat-5.5.15\\webapps\\smartdocument.core\\WEB-INF\\lib\\bsh-2.0b1.jar;C:\\java\\apache-tomcat-5.5.15\\webapps\\smartdocument.core\\WEB-INF\\lib\\exist-1.0b2.jar;C:\\java\\apache-tomcat-5.5.15\\webapps\\smartdocument.core\\WEB-INF\\lib\\exist-optional-1.0b2.jar;C:\\java\\apache-tomcat-5.5.15\\webapps\\smartdocument.core\\WEB-INF\\lib\\jcommon-0.9.6.jar;C:\\java\\apache-tomcat-5.5.15\\webapps\\smartdocument.core\\WEB-INF\\lib\\jmxremote-1.0.1.jar;C:\\java\\apache-tomcat-5.5.15\\webapps\\smartdocument.core\\WEB-INF\\lib\\jmxremote_optional-1.0.1.jar;C:\\java\\apache-tomcat-5.5.15\\webapps\\smartdocument.core\\WEB-INF\\lib\\jmxri-1.2.1.jar;C:\\java\\apache-tomcat-5.5.15\\webapps\\smartdocument.core\\WEB-INF\\lib\\jmxtools-1.2.1.jar;C:\\java\\apache-tomcat-5.5.15\\webapps\\smartdocument.core\\WEB-INF\\lib\\log4j-1.2.9.jar;C:\\java\\apache-tomcat-5.5.15\\webapps\\smartdocument.core\\WEB-INF\\lib\\oro-2.0.8.jar;C:\\java\\apache-tomcat-5.5.15\\webapps\\smartdocument.core\\WEB-INF\\lib\\xml-resolver-1.1.jar;C:\\java\\apache-tomcat-5.5.15\\webapps\\smartdocument.core\\WEB-INF\\lib\\xmldb-1.0b2.jar;C:\\java\\apache-tomcat-5.5.15\\webapps\\smartdocument.core\\WEB-INF\\lib\\xmlrpc-1.2.jar;C:\\java\\apache-tomcat-5.5.15\\common\\lib\\servlet-api.jar;C:\\java\\apache-tomcat-5.5.15\\webapps\\smartdocument.core\\WEB-INF\\lib\\commons-pool-1.2.jar;C:\\java\\apache-tomcat-5.5.15\\webapps\\smartdocument.core.war