[jbpm-commits] JBoss JBPM SVN: r3644 - in projects/gwt-console/trunk/war/src: main/java/org/jboss/bpm/console/client/model and 9 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Thu Jan 15 06:05:36 EST 2009
Author: heiko.braun at jboss.com
Date: 2009-01-15 06:05:35 -0500 (Thu, 15 Jan 2009)
New Revision: 3644
Added:
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/View.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessEditor.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessImageComponent.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceListView.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceView.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/TokenEditorComponent.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/report/ProcessReportView.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/report/ReportEditor.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/TaskEditor.java
Removed:
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessDefinitionListEditor.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessImageView.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceEditor.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceListEditor.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/TokenEditor.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/report/OverviewReportEditor.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/report/ProcessReportEditor.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/TaskListEditor.java
Modified:
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Application.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Authentication.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/ConsoleConfig.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Editor.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Header.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/MainView.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Menu.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/MenuSection.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/UIConstants.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/URLBuilder.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Workspace.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/model/DTOParser.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessDefinitionList.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceDetailForm.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceList.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/TokenForm.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/report/BirtPanel.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/AssignmentCallback.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/AssignmentFormPanel.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/TaskDetailsFormPanel.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/TaskList.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/ConsoleLog.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/DateRenderer.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/JSONRequest.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/JSONRequestHandler.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/JSONWalk.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/ModelChangeListener.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/ModelListenerRegistry.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/ModelModificationCallback.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/FormWidgets.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/HelpPanel.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/RefreshableComboBox.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/RemoteListView.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/TeaserPanel.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/rebind/WorkspaceGenerator.java
projects/gwt-console/trunk/war/src/main/java/org/json/CDL.java
projects/gwt-console/trunk/war/src/main/java/org/json/Cookie.java
projects/gwt-console/trunk/war/src/main/java/org/json/CookieList.java
projects/gwt-console/trunk/war/src/main/java/org/json/HTTP.java
projects/gwt-console/trunk/war/src/main/java/org/json/HTTPTokener.java
projects/gwt-console/trunk/war/src/main/java/org/json/JSONArray.java
projects/gwt-console/trunk/war/src/main/java/org/json/JSONException.java
projects/gwt-console/trunk/war/src/main/java/org/json/JSONML.java
projects/gwt-console/trunk/war/src/main/java/org/json/JSONObject.java
projects/gwt-console/trunk/war/src/main/java/org/json/JSONString.java
projects/gwt-console/trunk/war/src/main/java/org/json/JSONStringer.java
projects/gwt-console/trunk/war/src/main/java/org/json/JSONTokener.java
projects/gwt-console/trunk/war/src/main/java/org/json/JSONWriter.java
projects/gwt-console/trunk/war/src/main/java/org/json/Test.java
projects/gwt-console/trunk/war/src/main/java/org/json/XML.java
projects/gwt-console/trunk/war/src/main/java/org/json/XMLTokener.java
projects/gwt-console/trunk/war/src/main/resources/org/jboss/bpm/console/workspace.txt
projects/gwt-console/trunk/war/src/test/java/org/jboss/bpm/console/client/GwtTestProcessManagement.java
Log:
Break down editors into assciated views. Added menu contribution to editors
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Application.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Application.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Application.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -27,140 +27,142 @@
*/
public class Application implements EntryPoint
{
- private MainView mainView;
- private Authentication auth;
- private ConsoleConfig config;
- private URLBuilder urlBuilder;
+ private MainView mainView;
+ private Authentication auth;
+ private ConsoleConfig config;
+ private URLBuilder urlBuilder;
- public final static String[] KNOWN_ROLES = {"admin", "manager", "user"};
+ public final static String[] KNOWN_ROLES = {"admin", "manager", "user"};
- /**
- * Note, we defer all application initialization code to
- * {@link #onModuleLoad2()} so that the UncaughtExceptionHandler
- * can catch any unexpected exceptions.
- */
- public void onModuleLoad() {
+ /**
+ * Note, we defer all application initialization code to
+ * {@link #onModuleLoad2()} so that the UncaughtExceptionHandler
+ * can catch any unexpected exceptions.
+ */
+ public void onModuleLoad()
+ {
- ConsoleLog.setEnabled(true);
+ ConsoleLog.setEnabled(true);
- /* Install an UncaughtExceptionHandler which will
- * produce <code>FATAL</code> log messages
- */
- ConsoleLog.setUncaughtExceptionHandler();
+ /* Install an UncaughtExceptionHandler which will
+ * produce <code>FATAL</code> log messages
+ */
+ ConsoleLog.setUncaughtExceptionHandler();
- /* Use a deferred command so that the UncaughtExceptionHandler
- * catches any exceptions in onModuleLoad2()
- */
- DeferredCommand.addCommand(new Command() {
- public void execute() {
- onModuleLoad2();
- }
- });
- }
-
- /**
- * This is the entry point method.
+ /* Use a deferred command so that the UncaughtExceptionHandler
+ * catches any exceptions in onModuleLoad2()
*/
- public void onModuleLoad2()
- {
- config = new ConsoleConfig();
-
- // setup
-
- if(!GWT.isScript())
+ DeferredCommand.addCommand(new Command()
+ {
+ public void execute()
{
- String proxyUrl = GWT.getModuleBaseURL() + "xhp";
- config.setConsoleServerUrl(proxyUrl);
+ onModuleLoad2();
}
+ });
+ }
- ConsoleLog.debug("Console server: " + config.getConsoleServerUrl());
- ConsoleLog.debug("Report server: " + config.getReportServerUrl());
+ /**
+ * This is the entry point method.
+ */
+ public void onModuleLoad2()
+ {
+ config = new ConsoleConfig();
- urlBuilder = new URLBuilder(config);
+ // setup
- // authentiction
-
- forceLogin();
- }
+ if (!GWT.isScript())
+ {
+ String proxyUrl = GWT.getModuleBaseURL() + "xhp";
+ config.setConsoleServerUrl(proxyUrl);
+ }
- public MainView getConsoleView()
- {
- return mainView;
- }
+ ConsoleLog.debug("Console server: " + config.getConsoleServerUrl());
+ ConsoleLog.debug("Report server: " + config.getReportServerUrl());
- private void forceLogin()
- {
- Panel panel = new Panel();
- panel.setPaddings(20);
- panel.setStyleName("login-panel-content");
- panel.setLayout(new VerticalLayout(10));
- panel.add( new HTML("Welcome, please login.") );
+ urlBuilder = new URLBuilder(config);
- final Window window = new Window();
- window.setTitle("GWT-Console");
- window.setClosable(false);
- window.setResizable(false);
- window.setWidth(300);
- window.setHeight(180);
- window.setLayout(new BorderLayout());
- window.setCloseAction(Window.CLOSE);
+ // authentiction
+ forceLogin();
+ }
- final FormPanel loginForm = new FormPanel();
- loginForm.setBorder(false);
- loginForm.add(new TextField("Username", "user"));
- TextField passwordField = new TextField("Password", "pass");
- passwordField.setPassword(true);
- loginForm.add(passwordField);
+ public MainView getConsoleView()
+ {
+ return mainView;
+ }
- final Button submitBtn = new Button("Login",
- new ButtonListenerAdapter()
- {
- public void onClick(Button button, EventObject e)
- {
- String user = loginForm.getForm().findField("user").getValueAsString();
- String pass = loginForm.getForm().findField("pass").getValueAsString();
+ private void forceLogin()
+ {
+ Panel panel = new Panel();
+ panel.setPaddings(20);
+ panel.setStyleName("login-panel-content");
+ panel.setLayout(new VerticalLayout(10));
+ panel.add(new HTML("Welcome, please login."));
- String url = urlBuilder.getUserInRoleURL(KNOWN_ROLES);
- auth = new Authentication(url);
- auth.setCallback(
- new Authentication.AuthCallback()
- {
+ final Window window = new Window();
+ window.setTitle("GWT-Console");
+ window.setClosable(false);
+ window.setResizable(false);
+ window.setWidth(300);
+ window.setHeight(180);
+ window.setLayout(new BorderLayout());
+ window.setCloseAction(Window.CLOSE);
- public void onLoginSuccess(Request request, Response response)
- {
- // clear the form
- loginForm.getForm().reset();
+ final FormPanel loginForm = new FormPanel();
+ loginForm.setBorder(false);
+ loginForm.add(new TextField("Username", "user"));
+ TextField passwordField = new TextField("Password", "pass");
+ passwordField.setPassword(true);
+ loginForm.add(passwordField);
- // display main console
- window.close();
+ final Button submitBtn = new Button("Login",
+ new ButtonListenerAdapter()
+ {
+ public void onClick(Button button, EventObject e)
+ {
+ String user = loginForm.getForm().findField("user").getValueAsString();
+ String pass = loginForm.getForm().findField("pass").getValueAsString();
- // assemble main view
- mainView = new MainView(auth, urlBuilder, config);
- }
+ String url = urlBuilder.getUserInRoleURL(KNOWN_ROLES);
+ auth = new Authentication(url);
+ auth.setCallback(
+ new Authentication.AuthCallback()
+ {
- public void onLoginFailed(Request request, Throwable t)
- {
- // auth failed
- ConsoleLog.error("Authentication failed.", t);
- }
- }
- );
+ public void onLoginSuccess(Request request, Response response)
+ {
+ // clear the form
+ loginForm.getForm().reset();
- auth.doLogin(user,pass);
+ // display main console
+ window.close();
- }
- });
+ // assemble main view
+ mainView = new MainView(auth, urlBuilder, config);
+ }
- loginForm.addButton(submitBtn);
- panel.add(loginForm);
+ public void onLoginFailed(Request request, Throwable t)
+ {
+ // auth failed
+ ConsoleLog.error("Authentication failed.", t);
+ }
+ }
+ );
- BorderLayoutData centerData = new BorderLayoutData(RegionPosition.CENTER);
- centerData.setMargins(3, 0, 3, 3);
+ auth.doLogin(user, pass);
- window.add(panel, centerData);
- // ------------------------------------------
+ }
+ });
- window.show();
- }
+ loginForm.addButton(submitBtn);
+ panel.add(loginForm);
+ BorderLayoutData centerData = new BorderLayoutData(RegionPosition.CENTER);
+ centerData.setMargins(3, 0, 3, 3);
+
+ window.add(panel, centerData);
+ // ------------------------------------------
+
+ window.show();
+ }
+
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Authentication.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Authentication.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Authentication.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -31,126 +31,128 @@
/**
* Does HTTP Basic Auth and keeps assigned roles
- * (piggy backed on response) and the username that was used.
- *
+ * (piggy backed on response) and the username that was used.
+ *
* @author Heiko.Braun <heiko.braun at jboss.com>
*/
public class Authentication
{
- private String loginUrl;
- private AuthCallback callback;
- private List<String> rolesAssigned = new ArrayList<String>();
- private String username;
+ private String loginUrl;
+ private AuthCallback callback;
+ private List<String> rolesAssigned = new ArrayList<String>();
+ private String username;
- public Authentication(String loginUrl)
- {
- this.loginUrl = loginUrl;
- }
+ public Authentication(String loginUrl)
+ {
+ this.loginUrl = loginUrl;
+ }
- public Authentication(String loginUrl, AuthCallback callback)
- {
- this.loginUrl = loginUrl;
- this.callback = callback;
- }
+ public Authentication(String loginUrl, AuthCallback callback)
+ {
+ this.loginUrl = loginUrl;
+ this.callback = callback;
+ }
- /**
- * Login, but leave credentials to GWT.
- * This will pop up a username/password dialog netive to the browser.
- */
- public void doLogin()
- {
- doLogin(null,null);
- }
+ /**
+ * Login, but leave credentials to GWT.
+ * This will pop up a username/password dialog netive to the browser.
+ */
+ public void doLogin()
+ {
+ doLogin(null, null);
+ }
- /**
- * Login using specific credentials.
- * This delegates to {@link com.google.gwt.http.client.RequestBuilder#setUser(String)}
- * and {@link com.google.gwt.http.client.RequestBuilder#setPassword(String)}
- */
- public void doLogin(String user, String pass)
- {
-
- RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, loginUrl);
- this.username = user;
- // discard password
+ /**
+ * Login using specific credentials.
+ * This delegates to {@link com.google.gwt.http.client.RequestBuilder#setUser(String)}
+ * and {@link com.google.gwt.http.client.RequestBuilder#setPassword(String)}
+ */
+ public void doLogin(String user, String pass)
+ {
- ConsoleLog.debug("Authentication against: " + rb.getUrl());
-
- if(user!=null&&pass!=null)
- {
- rb.setUser(user);
- rb.setPassword(pass);
+ RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, loginUrl);
+ this.username = user;
+ // discard password
- if(!GWT.isScript()) // hosted mode only
- {
- rb.setHeader("xtest-user", user);
- rb.setHeader("xtest-pass", pass); // NOTE: This is plaintext, use for testing only
- }
- }
+ ConsoleLog.debug("Authentication against: " + rb.getUrl());
- try
+ if (user != null && pass != null)
+ {
+ rb.setUser(user);
+ rb.setPassword(pass);
+
+ if (!GWT.isScript()) // hosted mode only
{
- rb.sendRequest(null,
- new RequestCallback() {
+ rb.setHeader("xtest-user", user);
+ rb.setHeader("xtest-pass", pass); // NOTE: This is plaintext, use for testing only
+ }
+ }
- public void onResponseReceived(Request request, Response response)
+ try
+ {
+ rb.sendRequest(null,
+ new RequestCallback()
+ {
+
+ public void onResponseReceived(Request request, Response response)
+ {
+ // parse roles
+ if (200 == response.getStatusCode())
{
- // parse roles
- if(200==response.getStatusCode())
- {
- rolesAssigned = DTOParser.parseRolesAssigned(response.getText());
- if(callback!=null) callback.onLoginSuccess(request, response);
- }
- else
- {
- onError(request, new Exception(response.getText()));
- }
+ rolesAssigned = DTOParser.parseRolesAssigned(response.getText());
+ if (callback != null) callback.onLoginSuccess(request, response);
}
-
- public void onError(Request request, Throwable t)
- {
- // auth failed
- // Couldn't connect to server (could be timeout, SOP violation, etc.)
- if(callback!=null)
- callback.onLoginFailed(request, t);
- else
- throw new RuntimeException("Unknown exception upon login attempt", t);
+ else
+ {
+ onError(request, new Exception(response.getText()));
}
- });
- }
+ }
- catch (RequestException e1)
- {
- // Couldn't connect to server
- throw new RuntimeException("Unknown error upon login attempt", e1);
- }
- }
+ public void onError(Request request, Throwable t)
+ {
+ // auth failed
+ // Couldn't connect to server (could be timeout, SOP violation, etc.)
+ if (callback != null)
+ callback.onLoginFailed(request, t);
+ else
+ throw new RuntimeException("Unknown exception upon login attempt", t);
+ }
+ });
+ }
+ catch (RequestException e1)
+ {
+ // Couldn't connect to server
+ throw new RuntimeException("Unknown error upon login attempt", e1);
+ }
+ }
- public void setCallback(AuthCallback callback)
- {
- this.callback = callback;
- }
- public native void doLogout() /*-{
+ public void setCallback(AuthCallback callback)
+ {
+ this.callback = callback;
+ }
+
+ public native void doLogout() /*-{
$wnd.location.reload();
}-*/;
- public interface AuthCallback
- {
- void onLoginSuccess(Request request, Response response);
- void onLoginFailed(Request request, Throwable t);
- }
+ public interface AuthCallback
+ {
+ void onLoginSuccess(Request request, Response response);
+ void onLoginFailed(Request request, Throwable t);
+ }
- public List<String> getRolesAssigned()
- {
- return rolesAssigned;
- }
- public String getUsername()
- {
- return username;
- }
+ public List<String> getRolesAssigned()
+ {
+ return rolesAssigned;
+ }
+
+ public String getUsername()
+ {
+ return username;
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/ConsoleConfig.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/ConsoleConfig.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/ConsoleConfig.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -27,90 +27,89 @@
* Initialize console config from host page (<code>Application.html</code>) variable:
* <pre>
* var consoleConfig = {
- consoleServerUrl: "http://localhost:8080/gwt-console-server",
- reportServerUrl: "http://localhost:8080/report",
- [...]
- };
+ * consoleServerUrl: "http://localhost:8080/gwt-console-server",
+ * reportServerUrl: "http://localhost:8080/report",
+ * [...]
+ * };
* </pre>
*
- * @see com.google.gwt.i18n.client.Dictionary
- *
* @author Heiko.Braun <heiko.braun at jboss.com>
+ * @see com.google.gwt.i18n.client.Dictionary
*/
public class ConsoleConfig
{
- private String consoleServerUrl;
- private String reportServerUrl;
+ private String consoleServerUrl;
+ private String reportServerUrl;
- private String overviewReportFile;
- private String definitionReportFile;
- private String instanceReportFile;
+ private String overviewReportFile;
+ private String definitionReportFile;
+ private String instanceReportFile;
- public ConsoleConfig(String consoleServerUrl, String reportServerUrl)
- {
- this.consoleServerUrl = consoleServerUrl;
- this.reportServerUrl = reportServerUrl;
- }
+ public ConsoleConfig(String consoleServerUrl, String reportServerUrl)
+ {
+ this.consoleServerUrl = consoleServerUrl;
+ this.reportServerUrl = reportServerUrl;
+ }
- public ConsoleConfig()
- {
- Dictionary theme = Dictionary.getDictionary("consoleConfig");
- consoleServerUrl = theme.get("consoleServerUrl");
- reportServerUrl = theme.get("reportServerUrl");
+ public ConsoleConfig()
+ {
+ Dictionary theme = Dictionary.getDictionary("consoleConfig");
+ consoleServerUrl = theme.get("consoleServerUrl");
+ reportServerUrl = theme.get("reportServerUrl");
- overviewReportFile = theme.get("overviewReportFile");
- definitionReportFile = theme.get("definitionReportFile");
- instanceReportFile = theme.get("instanceReportFile");
- }
+ overviewReportFile = theme.get("overviewReportFile");
+ definitionReportFile = theme.get("definitionReportFile");
+ instanceReportFile = theme.get("instanceReportFile");
+ }
- public String getConsoleServerUrl()
- {
- return consoleServerUrl;
- }
+ public String getConsoleServerUrl()
+ {
+ return consoleServerUrl;
+ }
- public void setConsoleServerUrl(String consoleServerUrl)
- {
- this.consoleServerUrl = consoleServerUrl;
- }
+ public void setConsoleServerUrl(String consoleServerUrl)
+ {
+ this.consoleServerUrl = consoleServerUrl;
+ }
- public String getReportServerUrl()
- {
- return reportServerUrl;
- }
+ public String getReportServerUrl()
+ {
+ return reportServerUrl;
+ }
- public void setReportServerUrl(String reportServerUrl)
- {
- this.reportServerUrl = reportServerUrl;
- }
+ public void setReportServerUrl(String reportServerUrl)
+ {
+ this.reportServerUrl = reportServerUrl;
+ }
- public String getOverviewReportFile()
- {
- return overviewReportFile;
- }
+ public String getOverviewReportFile()
+ {
+ return overviewReportFile;
+ }
- public void setOverviewReportFile(String overviewReportFile)
- {
- this.overviewReportFile = overviewReportFile;
- }
+ public void setOverviewReportFile(String overviewReportFile)
+ {
+ this.overviewReportFile = overviewReportFile;
+ }
- public String getDefinitionReportFile()
- {
- return definitionReportFile;
- }
+ public String getDefinitionReportFile()
+ {
+ return definitionReportFile;
+ }
- public void setDefinitionReportFile(String definitionReportFile)
- {
- this.definitionReportFile = definitionReportFile;
- }
+ public void setDefinitionReportFile(String definitionReportFile)
+ {
+ this.definitionReportFile = definitionReportFile;
+ }
- public String getInstanceReportFile()
- {
- return instanceReportFile;
- }
+ public String getInstanceReportFile()
+ {
+ return instanceReportFile;
+ }
- public void setInstanceReportFile(String instanceReportFile)
- {
- this.instanceReportFile = instanceReportFile;
- }
+ public void setInstanceReportFile(String instanceReportFile)
+ {
+ this.instanceReportFile = instanceReportFile;
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Editor.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Editor.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Editor.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -22,6 +22,12 @@
package org.jboss.bpm.console.client;
import com.gwtext.client.widgets.Panel;
+import com.gwtext.client.widgets.TabPanel;
+import com.gwtext.client.widgets.Component;
+import com.gwtext.client.widgets.layout.FitLayout;
+import com.gwtext.client.widgets.layout.BorderLayout;
+import com.gwtext.client.widgets.layout.BorderLayoutData;
+import com.gwtext.client.core.RegionPosition;
/**
* An editor can be plugged into a {@link org.jboss.bpm.console.client.Workspace}
@@ -30,13 +36,115 @@
*/
public abstract class Editor extends Panel
{
-
+ protected MainView main;
+ private TabPanel tabPanel;
+
protected Editor(MainView main)
{
super();
+ this.main = main;
+ this.setPaddings(10);
+
+ // -------
+ this.tabPanel = new TabPanel();
+ this.tabPanel.setResizeTabs(true);
+ this.tabPanel.setMinTabWidth(115);
+ this.tabPanel.setTabWidth(135);
+ this.tabPanel.setEnableTabScroll(true);
+ this.tabPanel.setAutoScroll(true);
+ this.tabPanel.setPlain(true);
+ this.tabPanel.setActiveTab(0);
+ this.tabPanel.setBorder(false);
+
+ // -------
+
+ Panel panel = new Panel();
+ panel.setBorder(false);
+ panel.setPaddings(10);
+ panel.setLayout(new FitLayout());
+
+ panel.setWidth(UIConstants.EDITOR_WIDTH);
+ panel.setHeight(500);
+
+ // -------
+
+ Panel borderPanel = new Panel();
+ borderPanel.setBorder(false);
+ borderPanel.setLayout(new BorderLayout());
+
+ //add east panel
+ /*Panel eastPanel = new Panel();
+ eastPanel.setHtml("<p>east panel</p>");
+ eastPanel.setTitle("East Side");
+ eastPanel.setCollapsible(true);
+ eastPanel.setWidth(225);
+
+ BorderLayoutData eastData = new BorderLayoutData(RegionPosition.EAST);
+ eastData.setSplit(false);
+ eastData.setMinSize(75);
+ eastData.setMaxSize(100);
+ eastData.setMargins(new Margins(0, 0, 5, 0));
+
+ borderPanel.add(eastPanel, eastData);*/
+
+ // add center panel
+ borderPanel.add(tabPanel, new BorderLayoutData(RegionPosition.CENTER));
+
+ panel.add(borderPanel);
+
+ this.add(panel);
}
public abstract String getEditorId();
+
public abstract String getTitle();
+
public abstract String getIconCSS();
+
+ public abstract MenuSection provideMenuSection();
+
+ public boolean hasView(String viewId)
+ {
+ boolean b = false;
+ final String tabId = viewId + ".tab";
+
+ Component[] tabs = tabPanel.getItems();
+ for (int i = 0; i < tabs.length; i++)
+ {
+ Component tab = tabs[i];
+ if (tab.getId().equals(tabId))
+ {
+ b = true;
+ break;
+ }
+ }
+
+ return b;
+ }
+
+ public void showView(String viewId)
+ {
+ final String tabId = viewId + ".tab";
+ this.tabPanel.setActiveTab(tabId);
+ }
+
+ public void addView(View view, boolean closable)
+ {
+ view.setId(view.getViewId() + ".tab");
+ view.setClosable(closable);
+ view.setIconCls(view.getIconCSS());
+
+ this.tabPanel.add(view);
+ this.tabPanel.setActiveTab(view.getId());
+
+ }
+
+ class WrapperPanel extends Panel
+ {
+ public WrapperPanel(String id)
+ {
+ super();
+ setId(id);
+ }
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Header.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Header.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Header.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -38,54 +38,55 @@
*/
public class Header extends Panel
{
- private MainView view;
-
- public final static String ID = "org.jboss.bpm.headerPanel";
-
- public Header(MainView view)
- {
- super();
- this.view = view;
- this.setId(ID);
+ private MainView view;
- this.setFrame(false);
- this.setBorder(false);
- this.setHeader(false);
+ public final static String ID = "org.jboss.bpm.headerPanel";
- //HorizontalLayout layout = new HorizontalLayout(20);
- //this.setLayout(layout);
+ public Header(MainView view)
+ {
+ super();
+ this.view = view;
+ this.setId(ID);
- this.setHeight(50);
- this.setBaseCls("bpm-header");
- }
+ this.setFrame(false);
+ this.setBorder(false);
+ this.setHeader(false);
- public void setUserInfo(String username, List<String> roles)
- {
- Panel userInfo = new Panel();
- userInfo.setBorder(false);
- userInfo.setHeader(false);
- userInfo.setFrame(false);
- userInfo.setStyleName("bpm-header-userinfo");
- HorizontalLayout layout = new HorizontalLayout(10);
- userInfo.setLayout(layout);
+ //HorizontalLayout layout = new HorizontalLayout(20);
+ //this.setLayout(layout);
- userInfo.add( new Image("images/icons/05.png") );
- userInfo.add( new HTML(view.getUsername()));
- userInfo.add(
- new Button("Logout",
- new ButtonListenerAdapter(){
+ this.setHeight(50);
+ this.setBaseCls("bpm-header");
+ }
- public void onClick(Button button, EventObject eventObject)
- {
- view.logout();
- }
- }
- )
- );
+ public void setUserInfo(String username, List<String> roles)
+ {
+ Panel userInfo = new Panel();
+ userInfo.setBorder(false);
+ userInfo.setHeader(false);
+ userInfo.setFrame(false);
+ userInfo.setStyleName("bpm-header-userinfo");
+ HorizontalLayout layout = new HorizontalLayout(10);
+ userInfo.setLayout(layout);
- //this.clear();
- this.add(userInfo);
- //this.doLayout();
-
- }
+ userInfo.add(new Image("images/icons/05.png"));
+ userInfo.add(new HTML(view.getUsername()));
+ userInfo.add(
+ new Button("Logout",
+ new ButtonListenerAdapter()
+ {
+
+ public void onClick(Button button, EventObject eventObject)
+ {
+ view.logout();
+ }
+ }
+ )
+ );
+
+ //this.clear();
+ this.add(userInfo);
+ //this.doLayout();
+
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/MainView.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/MainView.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/MainView.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -26,16 +26,10 @@
import com.google.gwt.core.client.GWT;
import com.gwtext.client.core.Margins;
import com.gwtext.client.core.RegionPosition;
-import com.gwtext.client.widgets.MessageBox;
-import com.gwtext.client.widgets.MessageBoxConfig;
-import com.gwtext.client.widgets.Panel;
-import com.gwtext.client.widgets.Viewport;
+import com.gwtext.client.widgets.*;
import com.gwtext.client.widgets.layout.BorderLayout;
import com.gwtext.client.widgets.layout.BorderLayoutData;
import com.gwtext.client.widgets.layout.FitLayout;
-import org.jboss.bpm.console.client.process.ProcessDefinitionListEditor;
-import org.jboss.bpm.console.client.report.OverviewReportEditor;
-import org.jboss.bpm.console.client.task.TaskListEditor;
import org.jboss.bpm.console.client.util.ConsoleLog;
import org.jboss.bpm.console.client.WorkspaceLauncher;
@@ -72,7 +66,7 @@
Panel mainPanel = createMainPanel();
assembleMainApplication(mainPanel);
-
+
viewport = new Viewport(mainPanel);
}
@@ -111,10 +105,10 @@
// ------------------------------------------
- workspace = new Workspace();
- WorkspaceLauncher launcher = GWT.create(WorkspaceLauncher.class);
+ workspace = new Workspace(menu);
+ WorkspaceLauncher launcher = GWT.create(WorkspaceLauncher.class);
launcher.launch(this, workspace);
-
+
borderPanel.add(workspace, new BorderLayoutData(RegionPosition.CENTER));
// ------------------------------------------
@@ -125,7 +119,7 @@
public void addEditor(Editor editor)
{
ConsoleLog.debug("Add editor " + editor.getEditorId());
- workspace.addEditor(editor, true);
+ workspace.addEditor(editor, true);
}
public boolean hasEditor(String id)
@@ -147,7 +141,8 @@
{
status.setText(message);
- MessageBox.show(new MessageBoxConfig() {
+ MessageBox.show(new MessageBoxConfig()
+ {
{
String title = isError ? "Error" : "System Message";
setTitle(title);
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Menu.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Menu.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Menu.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -21,16 +21,8 @@
*/
package org.jboss.bpm.console.client;
-import com.gwtext.client.core.EventObject;
-import com.gwtext.client.data.Node;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.layout.AccordionLayout;
-import com.gwtext.client.widgets.tree.TreeNode;
-import com.gwtext.client.widgets.tree.TreePanel;
-import com.gwtext.client.widgets.tree.event.TreeNodeListenerAdapter;
-import org.jboss.bpm.console.client.report.OverviewReportEditor;
-import org.jboss.bpm.console.client.process.ProcessDefinitionListEditor;
-import org.jboss.bpm.console.client.task.TaskListEditor;
import java.util.ArrayList;
import java.util.List;
@@ -43,182 +35,27 @@
*/
public class Menu extends Panel
{
- private final MainView view;
- private List<Panel> sections = new ArrayList<Panel>();
+ private final MainView mainView;
+ private List<Panel> sections = new ArrayList<Panel>();
- public Menu(final MainView view)
- {
- super();
- this.view = view;
+ public Menu(final MainView view)
+ {
+ super();
+ this.mainView = view;
- final AccordionLayout accordion = new AccordionLayout(true);
+ final AccordionLayout accordion = new AccordionLayout(true);
- this.setTitle("");
- this.setCollapsible(true);
- this.setWidth(200);
- this.setLayout(accordion);
+ this.setTitle("");
+ this.setCollapsible(true);
+ this.setWidth(200);
+ this.setLayout(accordion);
- MenuSection navPanel = new MenuSection("Process Management", "bpm-process-icon", new ProcessTree());
- MenuSection taskPanel = new MenuSection("Task Management", "bpm-task-icon", new TaskTree());
- MenuSection metricPanel = new MenuSection("Metrics and Stats", "bpm-metric-icon", new MetricTree());
- MenuSection settingsPanel = new MenuSection("Settings", "bpm-settings-icon", new SettingsTree());
+ }
- this.addSection(navPanel);
- this.addSection(taskPanel);
- this.addSection(metricPanel);
- this.addSection(settingsPanel);
- }
+ public void addSection(MenuSection menuSection)
+ {
+ this.sections.add(menuSection);
+ this.add(menuSection);
+ }
- public void addSection(MenuSection menuSection)
- {
- this.sections.add(menuSection);
- this.add(menuSection);
- }
-
- class ProcessTree extends TreePanel
- {
-
- public ProcessTree() {
-
- TreeNode root = new TreeNode("Process Definitions");
-
- TreeNode definitions = new TreeNode("View definitions");
- definitions.setExpanded(true);
- definitions.addListener(
- new TreeNodeListenerAdapter()
- {
- public void onClick(Node node, EventObject eventObject)
- {
- if(view.hasEditor(ProcessDefinitionListEditor.ID))
- {
- view.showEditor(ProcessDefinitionListEditor.ID);
- }
- else
- {
- view.addEditor( new ProcessDefinitionListEditor(view) );
- }
-
- }
- }
- );
- TreeNode upload = new TreeNode("Upload new definitions");
- upload.setExpanded(true);
-
- root.appendChild(definitions);
- root.appendChild(upload);
-
- setRootVisible(true);
- setRootNode(root);
- root.setExpanded(true);
- }
- }
-
- class MetricTree extends TreePanel
- {
-
- public MetricTree() {
-
- TreeNode root = new TreeNode("Process Metrics");
-
- TreeNode overview = new TreeNode("Process workload");
- overview.setExpanded(true);
- overview.addListener(
- new TreeNodeListenerAdapter()
- {
- public void onClick(Node node, EventObject eventObject)
- {
- if(view.hasEditor(OverviewReportEditor.ID))
- {
- view.showEditor(OverviewReportEditor.ID);
- }
- else
- {
- view.addEditor( new OverviewReportEditor(view) );
- }
-
- }
- }
- );
-
- TreeNode export = new TreeNode("Export stats");
- export.setExpanded(true);
-
- root.appendChild(overview);
- root.appendChild(export);
-
- setRootVisible(true);
- setRootNode(root);
- root.setExpanded(true);
- }
- }
-
- class SettingsTree extends TreePanel
- {
-
- public SettingsTree()
- {
- TreeNode root = new TreeNode("Debug");
-
- TreeNode overview = new TreeNode("Assigned roles");
- overview.setExpanded(true);
- overview.addListener(
- new TreeNodeListenerAdapter()
- {
- public void onClick(Node node, EventObject eventObject)
- {
- StringBuffer sb = new StringBuffer();
- for(String roleName : view.getRolesAssigned())
- {
- sb.append("<br> - ").append(roleName);
- }
-
- view.displayMessage("Assigned roles: " + sb.toString(), false);
- }
- }
- );
-
- root.appendChild(overview);
-
- setRootVisible(true);
- setRootNode(root);
- root.setExpanded(true);
-
- }
- }
-
- class TaskTree extends TreePanel
- {
-
- public TaskTree()
- {
- TreeNode root = new TreeNode("Your tasks");
-
- TreeNode overview = new TreeNode("Overview");
- overview.setExpanded(true);
- overview.addListener(
- new TreeNodeListenerAdapter()
- {
- public void onClick(Node node, EventObject eventObject)
- {
- if(view.hasEditor(TaskListEditor.ID))
- {
- view.showEditor(TaskListEditor.ID);
- }
- else
- {
- view.addEditor( new TaskListEditor(view) );
- }
-
- }
- }
- );
-
- root.appendChild(overview);
-
- setRootVisible(true);
- setRootNode(root);
- root.setExpanded(true);
-
- }
- }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/MenuSection.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/MenuSection.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/MenuSection.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -32,16 +32,16 @@
public class MenuSection extends Panel
{
- public MenuSection(String title, String iconClass, Component tree)
- {
- super();
+ public MenuSection(String title, String iconClass, Component tree)
+ {
+ super();
- setTitle(title);
- setBorder(false);
- setHideBorders(true);
- setIconCls(iconClass);
+ setTitle(title);
+ setBorder(false);
+ setHideBorders(true);
+ setIconCls(iconClass);
- if(tree!=null)
- add(tree);
- }
+ if (tree != null)
+ add(tree);
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/UIConstants.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/UIConstants.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/UIConstants.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -26,14 +26,14 @@
*/
public class UIConstants
{
- public static final int OVERALL_WIDTH = 1024;
- public static final int OVERALL_HEIGHT = 768;
- public static final int MAIN_MENU_MIN = 175;
- public static final int MAIN_MENU_MAX = 400;
- public static final int EDITOR_WIDTH = 680;
- public static final int TEASER_PANEL_WIDTH = 200;
- public static final int EDITOR_PANEL_WIDTH = 450;
+ public static final int OVERALL_WIDTH = 1024;
+ public static final int OVERALL_HEIGHT = 768;
+ public static final int MAIN_MENU_MIN = 175;
+ public static final int MAIN_MENU_MAX = 400;
+ public static final int EDITOR_WIDTH = 680;
+ public static final int TEASER_PANEL_WIDTH = 200;
+ public static final int EDITOR_PANEL_WIDTH = 450;
- public static final String DEFAULT_TRANSITION = "default transition";
- public static final String DATE_FORMAT = "yyyy-m-j H:i:s"; //08-10-02 13:51:27
+ public static final String DEFAULT_TRANSITION = "default transition";
+ public static final String DATE_FORMAT = "yyyy-m-j H:i:s"; //08-10-02 13:51:27
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/URLBuilder.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/URLBuilder.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/URLBuilder.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -31,149 +31,149 @@
*/
public class URLBuilder
{
- ConsoleConfig config;
+ ConsoleConfig config;
- public URLBuilder(ConsoleConfig config)
- {
- this.config = config;
- }
+ public URLBuilder(ConsoleConfig config)
+ {
+ this.config = config;
+ }
- public String getConsoleServerUrl()
- {
- return config.getConsoleServerUrl();
- }
+ public String getConsoleServerUrl()
+ {
+ return config.getConsoleServerUrl();
+ }
- public String getProcessDefinitionsURL()
- {
- return getConsoleServerUrl() + "/rs/process/definitions";
- }
+ public String getProcessDefinitionsURL()
+ {
+ return getConsoleServerUrl() + "/rs/process/definitions";
+ }
- public String getProcessInstancesURL(long processId)
- {
- return getConsoleServerUrl() + "/rs/process/definitions/"+processId+"/instances";
- }
+ public String getProcessInstancesURL(long processId)
+ {
+ return getConsoleServerUrl() + "/rs/process/definitions/" + processId + "/instances";
+ }
- public String getUserInRoleURL(String[] possibleRoles)
- {
- StringBuffer sb = new StringBuffer();
- for(int i=0; i<possibleRoles.length; i++)
- {
- sb.append(URL.encode(possibleRoles[i]));
- if(i<possibleRoles.length-1)
- sb.append(",");
- }
- return getConsoleServerUrl() + "/rs/identity/user/roles?roleCheck="+sb.toString();
- }
+ public String getUserInRoleURL(String[] possibleRoles)
+ {
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < possibleRoles.length; i++)
+ {
+ sb.append(URL.encode(possibleRoles[i]));
+ if (i < possibleRoles.length - 1)
+ sb.append(",");
+ }
+ return getConsoleServerUrl() + "/rs/identity/user/roles?roleCheck=" + sb.toString();
+ }
- @Deprecated
- public String getRemoveDefinitionURL(long processId)
- {
- return getConsoleServerUrl() + "/rs/process/definitions/" + processId + "/remove";
- }
+ @Deprecated
+ public String getRemoveDefinitionURL(long processId)
+ {
+ return getConsoleServerUrl() + "/rs/process/definitions/" + processId + "/remove";
+ }
- public String getProcessImageURL(long processId)
- {
- return getConsoleServerUrl() + "/rs/jbpm3/definitions/" + processId + "/image";
- }
+ public String getProcessImageURL(long processId)
+ {
+ return getConsoleServerUrl() + "/rs/jbpm3/definitions/" + processId + "/image";
+ }
- public String getDiagramInfoURL(long processId)
- {
- return getConsoleServerUrl() + "/rs/jbpm3/definitions/" + processId + "/diagramInfo";
- }
+ public String getDiagramInfoURL(long processId)
+ {
+ return getConsoleServerUrl() + "/rs/jbpm3/definitions/" + processId + "/diagramInfo";
+ }
- public String getActiveNodeInfoURL(long instanceId)
- {
- return getConsoleServerUrl() + "/rs/jbpm3/instances/" + instanceId + "/activeNodeInfo";
- }
+ public String getActiveNodeInfoURL(long instanceId)
+ {
+ return getConsoleServerUrl() + "/rs/jbpm3/instances/" + instanceId + "/activeNodeInfo";
+ }
- public String getStateChangeURL(long instanceId, ProcessInstanceRef.STATE state)
- {
- return getConsoleServerUrl() + "/rs/process/instances/" + instanceId + "/state/"+state;
- }
+ public String getStateChangeURL(long instanceId, ProcessInstanceRef.STATE state)
+ {
+ return getConsoleServerUrl() + "/rs/process/instances/" + instanceId + "/state/" + state;
+ }
- public String getStartNewInstanceURL(long processId)
- {
- return getConsoleServerUrl() + "/rs/process/definitions/"+processId+"/instances/new";
- }
+ public String getStartNewInstanceURL(long processId)
+ {
+ return getConsoleServerUrl() + "/rs/process/definitions/" + processId + "/instances/new";
+ }
- public String getUploadDefinitionURL()
- {
- return getConsoleServerUrl() + "/rs/jbpm3/definitions/new";
- }
+ public String getUploadDefinitionURL()
+ {
+ return getConsoleServerUrl() + "/rs/jbpm3/definitions/new";
+ }
- public String getTaskListByActorURL(String actor)
- {
- return getConsoleServerUrl() + "/rs/tasks/actor/"+URL.encode(actor);
- }
+ public String getTaskListByActorURL(String actor)
+ {
+ return getConsoleServerUrl() + "/rs/tasks/actor/" + URL.encode(actor);
+ }
- public String getTaskFormDefURL(long processId, long taskId)
- {
- return getConsoleServerUrl() + "/rs/tasks/forms/"+processId+"/"+taskId;
- }
+ public String getTaskFormDefURL(long processId, long taskId)
+ {
+ return getConsoleServerUrl() + "/rs/tasks/forms/" + processId + "/" + taskId;
+ }
- public String getTaskEndURL(long id)
- {
- return getConsoleServerUrl() + "/rs/tasks/"+id+"/close/transition/default";
- }
+ public String getTaskEndURL(long id)
+ {
+ return getConsoleServerUrl() + "/rs/tasks/" + id + "/close/transition/default";
+ }
- public String getTaskEndURL(long id, String signalName)
- {
- return getConsoleServerUrl() + "/rs/tasks/"+id+"/close/transition?signal=" + URL.encode(signalName);
- }
+ public String getTaskEndURL(long id, String signalName)
+ {
+ return getConsoleServerUrl() + "/rs/tasks/" + id + "/close/transition?signal=" + URL.encode(signalName);
+ }
- public String getTaskAssignmentURL(long id, String actor)
- {
- String actualActor = actor == null ? "" : "/"+actor;
- return getConsoleServerUrl() + "/rs/tasks/"+id+"/assignment"+URL.encode(actualActor);
- }
+ public String getTaskAssignmentURL(long id, String actor)
+ {
+ String actualActor = actor == null ? "" : "/" + actor;
+ return getConsoleServerUrl() + "/rs/tasks/" + id + "/assignment" + URL.encode(actualActor);
+ }
- public String getTokenSignalUrl(TokenReference tok)
- {
- return getConsoleServerUrl() + "/rs/jbpm3/tokens/"+tok.getId()+"/transition/default";
- }
+ public String getTokenSignalUrl(TokenReference tok)
+ {
+ return getConsoleServerUrl() + "/rs/jbpm3/tokens/" + tok.getId() + "/transition/default";
+ }
- public String getTokenSignalUrl(TokenReference tok, String signal)
- {
- String encodedSignal = URL.encode(signal);
- return getConsoleServerUrl() + "/rs/jbpm3/tokens/"+tok.getId()+"/transition?signal="+encodedSignal;
- }
+ public String getTokenSignalUrl(TokenReference tok, String signal)
+ {
+ String encodedSignal = URL.encode(signal);
+ return getConsoleServerUrl() + "/rs/jbpm3/tokens/" + tok.getId() + "/transition?signal=" + encodedSignal;
+ }
- public String getAvailableActorsUrl(String actorId)
- {
- return getConsoleServerUrl() + "/rs/identity/user/"+actorId+"/actors";
- }
+ public String getAvailableActorsUrl(String actorId)
+ {
+ return getConsoleServerUrl() + "/rs/identity/user/" + actorId + "/actors";
+ }
- public String getProcessDefinitionByNameURL(String name)
- {
- return getConsoleServerUrl() + "/rs/process/definitions/"+name;
- }
+ public String getProcessDefinitionByNameURL(String name)
+ {
+ return getConsoleServerUrl() + "/rs/process/definitions/" + name;
+ }
- public String getDeployTestHarnessUrl()
- {
- return getConsoleServerUrl()+ "/rs/test/deploy/harness";
- }
+ public String getDeployTestHarnessUrl()
+ {
+ return getConsoleServerUrl() + "/rs/test/deploy/harness";
+ }
- public String getUndeployTestHarnessUrl()
- {
- return getConsoleServerUrl()+ "/rs/test/undeploy/harness";
- }
+ public String getUndeployTestHarnessUrl()
+ {
+ return getConsoleServerUrl() + "/rs/test/undeploy/harness";
+ }
- public String getOverviewReportUrl()
- {
- String name = URL.encode(config.getOverviewReportFile());
- String url = config.getReportServerUrl() + "/rs/report/view/" + name;
- if(!GWT.isScript())
- url += "?id=birt";
- return url;
- }
+ public String getOverviewReportUrl()
+ {
+ String name = URL.encode(config.getOverviewReportFile());
+ String url = config.getReportServerUrl() + "/rs/report/view/" + name;
+ if (!GWT.isScript())
+ url += "?id=birt";
+ return url;
+ }
- public String getDefinitionReportUrl(String name)
- {
- String reportName = URL.encode(name);
- String reportFileName = URL.encode(config.getDefinitionReportFile());
- String url = config.getReportServerUrl() + "/rs/report/view/" + reportFileName + "?name=" + reportName;
- if(!GWT.isScript())
- url += "&id=birt";
- return url;
- }
+ public String getDefinitionReportUrl(String name)
+ {
+ String reportName = URL.encode(name);
+ String reportFileName = URL.encode(config.getDefinitionReportFile());
+ String url = config.getReportServerUrl() + "/rs/report/view/" + reportFileName + "?name=" + reportName;
+ if (!GWT.isScript())
+ url += "&id=birt";
+ return url;
+ }
}
Added: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/View.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/View.java (rev 0)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/View.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -0,0 +1,45 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.bpm.console.client;
+
+import com.gwtext.client.widgets.Panel;
+
+/**
+ * View's are {@link org.jboss.bpm.console.client.Editor} components
+ *
+ * @author Heiko.Braun <heiko.braun at jboss.com>
+ */
+public abstract class View extends Panel
+{
+
+ protected MainView mainMenu;
+
+ protected View(MainView main)
+ {
+ super();
+ this.mainMenu = main;
+ }
+
+ public abstract String getViewId();
+
+ public abstract String getIconCSS();
+}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Workspace.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Workspace.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/Workspace.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -24,81 +24,87 @@
import com.gwtext.client.widgets.Component;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.TabPanel;
-import org.jboss.bpm.console.client.Editor;
/**
* Maintains {@link org.jboss.bpm.console.client.Workspace}'s
- *
+ *
* @author Heiko.Braun <heiko.braun at jboss.com>
*/
public class Workspace extends TabPanel
{
- protected MainView view;
+ protected MainView view;
+ private Menu menu;
+
+ public Workspace(Menu menu)
+ {
+ super();
+ this.menu = menu;
- public Workspace()
- {
- super();
+ this.setResizeTabs(true);
+ this.setMinTabWidth(115);
+ this.setTabWidth(135);
+ this.setEnableTabScroll(true);
+ this.setAutoScroll(true);
+ this.setActiveTab(0);
+ }
- this.setResizeTabs(true);
- this.setMinTabWidth(115);
- this.setTabWidth(135);
- this.setEnableTabScroll(true);
- this.setAutoScroll(true);
- this.setActiveTab(0);
- }
+ private Panel createTab(Editor editor, boolean closeable)
+ {
+ Panel tab = new WrapperPanel(editor.getId() + ".tab");
+ tab.setTitle(editor.getTitle());
+ tab.setIconCls(editor.getIconCSS());
+ tab.setClosable(closeable);
+ tab.setAutoScroll(true);
+ tab.setBorder(false);
+ tab.setFrame(false);
+ tab.setHideBorders(true);
+ return tab;
+ }
- private Panel addTab(Editor editor, boolean closeable) {
- Panel tab = new WrapperPanel(editor.getId()+".tab");
- tab.setAutoScroll(true);
- tab.setTitle(editor.getTitle());
- tab.setClosable(closeable);
- tab.setBorder(false);
- tab.setFrame(false);
- tab.setHideBorders(true);
- tab.setIconCls(editor.getIconCSS());
- this.add(tab);
- return tab;
- }
+ public void addEditor(Editor editor, boolean closeable)
+ {
+ // Menu
+ menu.addSection(editor.provideMenuSection());
- public void addEditor(Editor editor, boolean closeable)
- {
- Panel tab = addTab(editor, closeable);
- tab.add(editor);
- this.setActiveTab(tab.getId());
- }
+ // Editor pane
+ Panel tab = createTab(editor, closeable);
+ tab.add(editor);
+ this.add(tab);
+ this.setActiveTab(tab.getId());
+ this.doLayout();
+ }
- public boolean hasEditor(String id)
- {
- boolean b = false;
- final String tabId = id +".tab";
+ public boolean hasEditor(String id)
+ {
+ boolean b = false;
+ final String tabId = id + ".tab";
- Component[] tabs = this.getItems();
- for(int i=0; i<tabs.length; i++)
+ Component[] tabs = this.getItems();
+ for (int i = 0; i < tabs.length; i++)
+ {
+ Component tab = tabs[i];
+ if (tab.getId().equals(tabId))
{
- Component tab = tabs[i];
- if(tab.getId().equals(tabId))
- {
- b=true;
- break;
- }
+ b = true;
+ break;
}
+ }
- return b;
- }
+ return b;
+ }
- public void showTab(String id)
- {
- final String tabId = id+".tab";
- this.setActiveTab(tabId);
- }
+ public void showTab(String id)
+ {
+ final String tabId = id + ".tab";
+ this.setActiveTab(tabId);
+ }
- class WrapperPanel extends Panel
- {
-
- public WrapperPanel(String id)
- {
- super();
- setId(id);
- }
- }
+ class WrapperPanel extends Panel
+ {
+ public WrapperPanel(String id)
+ {
+ super();
+ setId(id);
+ }
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/model/DTOParser.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/model/DTOParser.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/model/DTOParser.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -35,246 +35,247 @@
/**
* TODO: run integrated (gwt-console-server) test
+ *
* @author Heiko.Braun <heiko.braun at jboss.com>
*/
public class DTOParser
{
- public static ProcessDefinitionRef parseProcessDefinition(String json)
- {
- JSONValue root = JSONParser.parse(json);
- long id = JSONWalk.on(root).next("processId").asLong();
- String version = JSONWalk.on(root).next("version").asString();
- String name = JSONWalk.on(root).next("name").asString();
+ public static ProcessDefinitionRef parseProcessDefinition(String json)
+ {
+ JSONValue root = JSONParser.parse(json);
+ long id = JSONWalk.on(root).next("processId").asLong();
+ String version = JSONWalk.on(root).next("version").asString();
+ String name = JSONWalk.on(root).next("name").asString();
- return new ProcessDefinitionRef(id, name, version);
- }
- public static List<String> parseRolesAssigned(String json)
- {
- // parse roles
- List<String> roles = new ArrayList<String>();
+ return new ProcessDefinitionRef(id, name, version);
+ }
- // {"roles":[{"isAssigned":true,"role":"admin"},{"isAssigned":true,"role":"user"}]}
+ public static List<String> parseRolesAssigned(String json)
+ {
+ // parse roles
+ List<String> roles = new ArrayList<String>();
- JSONValue root = JSONParser.parse(json);
- JSONArray array = JSONWalk.on(root).next("roles").asArray();
+ // {"roles":[{"isAssigned":true,"role":"admin"},{"isAssigned":true,"role":"user"}]}
- for (int i = 0; i < array.size(); ++i)
+ JSONValue root = JSONParser.parse(json);
+ JSONArray array = JSONWalk.on(root).next("roles").asArray();
+
+ for (int i = 0; i < array.size(); ++i)
+ {
+ JSONObject item = array.get(i).isObject();
+ boolean assigned = JSONWalk.on(item).next("assigned").asBool();
+ String roleName = JSONWalk.on(item).next("role").asString();
+
+ if (assigned)
{
- JSONObject item = array.get(i).isObject();
- boolean assigned = JSONWalk.on(item).next("assigned").asBool();
- String roleName = JSONWalk.on(item).next("role").asString();
-
- if(assigned)
- {
- roles.add(roleName);
- }
+ roles.add(roleName);
}
+ }
- return roles;
- }
+ return roles;
+ }
- public static List<TaskRef> parseTaskReferenceList(String json)
- {
- List<TaskRef> results = new ArrayList<TaskRef>();
+ public static List<TaskRef> parseTaskReferenceList(String json)
+ {
+ List<TaskRef> results = new ArrayList<TaskRef>();
- // {"tasks":[{"id":14,"name":"manager evaluation","isSignalling":true,
- // "isBlocking":false,"tokenId":6,"processInstanceId":4,"actor":"manager",
- // "transitionNames":["reject","approve"]}]}
+ // {"tasks":[{"id":14,"name":"manager evaluation","isSignalling":true,
+ // "isBlocking":false,"tokenId":6,"processInstanceId":4,"actor":"manager",
+ // "transitionNames":["reject","approve"]}]}
- JSONValue root = JSONParser.parse(json);
- JSONArray array = JSONWalk.on(root).next("tasks").asArray();
+ JSONValue root = JSONParser.parse(json);
+ JSONArray array = JSONWalk.on(root).next("tasks").asArray();
- for (int i = 0; i < array.size(); ++i)
- {
- JSONObject item = array.get(i).isObject();
- TaskRef ref = parseTaskReference(item);
- results.add(ref);
- }
+ for (int i = 0; i < array.size(); ++i)
+ {
+ JSONObject item = array.get(i).isObject();
+ TaskRef ref = parseTaskReference(item);
+ results.add(ref);
+ }
- return results;
- }
+ return results;
+ }
- public static TaskRef parseTaskReference(JSONObject item)
- {
-
- long id = JSONWalk.on(item).next("id").asLong();
- long tokenId = JSONWalk.on(item).next("tokenId").asLong();
- long instanceId = JSONWalk.on(item).next("processInstanceId").asLong();
- long processId = JSONWalk.on(item).next("processId").asLong();
- String name = JSONWalk.on(item).next("name").asString();
- String actor = JSONWalk.on(item).next("actor").asString();
- boolean isBlocking = JSONWalk.on(item).next("isBlocking").asBool();
- boolean isSignalling = JSONWalk.on(item).next("isSignalling").asBool();
+ public static TaskRef parseTaskReference(JSONObject item)
+ {
- TaskRef ref = new TaskRef(
- id, tokenId, instanceId,
- processId,
- name, actor,
- isSignalling, isBlocking
- );
+ long id = JSONWalk.on(item).next("id").asLong();
+ long tokenId = JSONWalk.on(item).next("tokenId").asLong();
+ long instanceId = JSONWalk.on(item).next("processInstanceId").asLong();
+ long processId = JSONWalk.on(item).next("processId").asLong();
+ String name = JSONWalk.on(item).next("name").asString();
+ String actor = JSONWalk.on(item).next("actor").asString();
+ boolean isBlocking = JSONWalk.on(item).next("isBlocking").asBool();
+ boolean isSignalling = JSONWalk.on(item).next("isSignalling").asBool();
+ TaskRef ref = new TaskRef(
+ id, tokenId, instanceId,
+ processId,
+ name, actor,
+ isSignalling, isBlocking
+ );
- // pooled actors
- JSONArray pooledActors = JSONWalk.on(item).next("pooledActors").asArray();
- for (int k = 0; k < pooledActors.size(); ++k)
+ // pooled actors
+ JSONArray pooledActors = JSONWalk.on(item).next("pooledActors").asArray();
+ for (int k = 0; k < pooledActors.size(); ++k)
+ {
+ JSONValue jsonValue = pooledActors.get(k);
+ JSONString t = jsonValue.isString();
+ ref.addPooledActor(t.stringValue());
+ }
+
+ if (isSignalling)
+ {
+ JSONArray arr = JSONWalk.on(item).next("transitionNames").asArray();
+ for (int k = 0; k < arr.size(); ++k)
{
- JSONValue jsonValue = pooledActors.get(k);
- JSONString t = jsonValue.isString();
- ref.addPooledActor(t.stringValue());
+ JSONValue jsonValue = arr.get(k);
+ if (jsonValue.toString().equals("null"))
+ {
+ ConsoleLog.debug("FIXME JBPM-1828: Null value on transitionNames:" + arr.toString());
+ continue; // TODO: JBPM-1828
+ }
+ JSONString t = jsonValue.isString();
+ ref.getTransitionNames().add(t.stringValue());
}
- if(isSignalling)
- {
- JSONArray arr = JSONWalk.on(item).next("transitionNames").asArray();
- for (int k = 0; k < arr.size(); ++k)
- {
- JSONValue jsonValue = arr.get(k);
- if(jsonValue.toString().equals("null"))
- {
- ConsoleLog.debug("FIXME JBPM-1828: Null value on transitionNames:" +arr.toString());
- continue; // TODO: JBPM-1828
- }
- JSONString t = jsonValue.isString();
- ref.getTransitionNames().add(t.stringValue());
- }
+ }
- }
+ return ref;
+ }
- return ref;
- }
+ public static Map<String, String> parseFormMapping(String json)
+ {
+ //[{"name":"update erp","value":"form.raise.erp-update.xhtml"}]
- public static Map<String,String> parseFormMapping(String json)
- {
- //[{"name":"update erp","value":"form.raise.erp-update.xhtml"}]
+ throw new RuntimeException("Not implemented");
- throw new RuntimeException("Not implemented");
+ }
- }
+ public static FormDef parseFormDef(String json)
+ {
+ return parseFormDef(JSONParser.parse(json));
+ }
- public static FormDef parseFormDef(String json)
- {
- return parseFormDef(JSONParser.parse(json));
- }
+ public static FormDef parseFormDef(JSONValue root)
+ {
+ // {"formName":"taskform-15",
+ // "fields":[
+ // {"varname":"amount","label":"FirstName","required":true,"inputType":"TEXT",
+ // "dataTypeClass":"java.lang.String","defaults":[]}
+ // ]}
- public static FormDef parseFormDef(JSONValue root)
- {
- // {"formName":"taskform-15",
- // "fields":[
- // {"varname":"amount","label":"FirstName","required":true,"inputType":"TEXT",
- // "dataTypeClass":"java.lang.String","defaults":[]}
- // ]}
+ String formName = JSONWalk.on(root).next("formName").asString();
+ FormDef formDef = new FormDef(formName);
- String formName = JSONWalk.on(root).next("formName").asString();
- FormDef formDef = new FormDef(formName);
+ JSONArray array = JSONWalk.on(root).next("fields").asArray();
+ for (int i = 0; i < array.size(); i++)
+ {
+ JSONObject item = array.get(i).isObject();
- JSONArray array = JSONWalk.on(root).next("fields").asArray();
- for(int i=0; i<array.size(); i++)
- {
- JSONObject item = array.get(i).isObject();
+ // fieldDefs
+ String label = JSONWalk.on(item).next("label").asString();
+ String varName = JSONWalk.on(item).next("varname").asString();
+ boolean required = JSONWalk.on(item).next("required").asBool();
+ FieldDef.InputType inputType = FieldDef.InputType.valueOf(
+ JSONWalk.on(item).next("inputType").asString()
+ );
- // fieldDefs
- String label = JSONWalk.on(item).next("label").asString();
- String varName = JSONWalk.on(item).next("varname").asString();
- boolean required = JSONWalk.on(item).next("required").asBool();
- FieldDef.InputType inputType = FieldDef.InputType.valueOf(
- JSONWalk.on(item).next("inputType").asString()
- );
+ String dataType = JSONWalk.on(item).next("dataTypeClass").asString();
- String dataType = JSONWalk.on(item).next("dataTypeClass").asString();
+ // TODO: Parse defaults
- // TODO: Parse defaults
+ formDef.getFields().add(
+ new FieldDef(label, varName, inputType, dataType, required)
+ );
+ }
- formDef.getFields().add(
- new FieldDef(label, varName, inputType, dataType,required)
- );
- }
+ return formDef;
+ }
- return formDef;
- }
+ public static ProcessInstanceRef parseProcessInstance(JSONObject root)
+ {
+ ConsoleLog.debug("parse " + root);
- public static ProcessInstanceRef parseProcessInstance(JSONObject root)
- {
- ConsoleLog.debug("parse " + root);
+ long id = JSONWalk.on(root).next("instanceId").asLong();
+ long parentId = JSONWalk.on(root).next("parentId").asLong();
+ Date start = JSONWalk.on(root).next("startDate").asDate();
- long id = JSONWalk.on(root).next("instanceId").asLong();
- long parentId = JSONWalk.on(root).next("parentId").asLong();
- Date start = JSONWalk.on(root).next("startDate").asDate();
+ JSONWalk.JSONWrapper endDateJSON = JSONWalk.on(root).next("endDate");
+ Date end = null;
+ if (endDateJSON != null)
+ end = endDateJSON.asDate();
- JSONWalk.JSONWrapper endDateJSON = JSONWalk.on(root).next("endDate");
- Date end = null;
- if(endDateJSON!=null)
- end = endDateJSON.asDate();
+ boolean suspended = JSONWalk.on(root).next("suspended").asBool();
- boolean suspended = JSONWalk.on(root).next("suspended").asBool();
+ ProcessInstanceRef processInstance = new ProcessInstanceRef(
+ id, parentId,
+ start, end,
+ suspended
+ );
- ProcessInstanceRef processInstance = new ProcessInstanceRef(
- id, parentId,
- start, end,
- suspended
- );
+ // tokens
+ JSONObject tokJso = JSONWalk.on(root).next("rootToken").asObject();
+ TokenReference rootToken = parseTokenReference(tokJso);
+ processInstance.setRootToken(rootToken);
+ return processInstance;
+ }
- // tokens
- JSONObject tokJso = JSONWalk.on(root).next("rootToken").asObject();
- TokenReference rootToken = parseTokenReference(tokJso);
- processInstance.setRootToken(rootToken);
- return processInstance;
- }
+ public static TokenReference parseTokenReference(JSONObject jso)
+ {
+ long rootTokenId = JSONWalk.on(jso).next("id").asLong();
+ String name = JSONWalk.on(jso).next("name").asString();
+ String nodeName = JSONWalk.on(jso).next("currentNodeName").asString();
- public static TokenReference parseTokenReference(JSONObject jso)
- {
- long rootTokenId = JSONWalk.on(jso).next("id").asLong();
- String name = JSONWalk.on(jso).next("name").asString();
- String nodeName = JSONWalk.on(jso).next("currentNodeName").asString();
+ TokenReference rt = new TokenReference(rootTokenId, name, nodeName);
- TokenReference rt = new TokenReference(rootTokenId, name, nodeName);
+ boolean canBeSignaled = JSONWalk.on(jso).next("canBeSignaled").asBool();
+ rt.setCanBeSignaled(canBeSignaled);
- boolean canBeSignaled = JSONWalk.on(jso).next("canBeSignaled").asBool();
- rt.setCanBeSignaled(canBeSignaled);
-
- JSONArray signals = JSONWalk.on(jso).next("availableSignals").asArray();
- for(int i=0; i<signals.size(); i++)
+ JSONArray signals = JSONWalk.on(jso).next("availableSignals").asArray();
+ for (int i = 0; i < signals.size(); i++)
+ {
+ JSONValue jsonValue = signals.get(i);
+ if (jsonValue.toString().equals("null"))
{
- JSONValue jsonValue = signals.get(i);
- if(jsonValue.toString().equals("null"))
- {
- ConsoleLog.debug("FIXME JBPM-1828: Null value on availableSignals:" +signals.toString());
- continue; // TODO: JBPM-1828
- }
- JSONString item = jsonValue.isString();
- rt.getAvailableSignals().add(item.stringValue());
+ ConsoleLog.debug("FIXME JBPM-1828: Null value on availableSignals:" + signals.toString());
+ continue; // TODO: JBPM-1828
}
+ JSONString item = jsonValue.isString();
+ rt.getAvailableSignals().add(item.stringValue());
+ }
- JSONArray childArr = JSONWalk.on(jso).next("children").asArray();
- for(int i=0; i<childArr.size(); i++)
- {
- JSONObject item = childArr.get(i).isObject();
- rt.getChildren().add(parseTokenReference(item));
- }
+ JSONArray childArr = JSONWalk.on(jso).next("children").asArray();
+ for (int i = 0; i < childArr.size(); i++)
+ {
+ JSONObject item = childArr.get(i).isObject();
+ rt.getChildren().add(parseTokenReference(item));
+ }
- return rt;
- }
+ return rt;
+ }
- public static List<String> parseStringArray(JSONValue jso)
- {
- List<String> result = new ArrayList<String>();
+ public static List<String> parseStringArray(JSONValue jso)
+ {
+ List<String> result = new ArrayList<String>();
- JSONArray jsonArray = jso.isArray();
+ JSONArray jsonArray = jso.isArray();
- if(null==jsonArray)
- throw new IllegalArgumentException("Not an array: " +jso);
-
- for(int i=0; i<jsonArray.size(); i++)
+ if (null == jsonArray)
+ throw new IllegalArgumentException("Not an array: " + jso);
+
+ for (int i = 0; i < jsonArray.size(); i++)
+ {
+ JSONValue jsonValue = jsonArray.get(i);
+ if (jsonValue.toString().equals("null"))
{
- JSONValue jsonValue = jsonArray.get(i);
- if(jsonValue.toString().equals("null"))
- {
- ConsoleLog.debug("FIXME JBPM-1828: Null value on string array:" +jsonArray.toString());
- continue; // TODO: JBPM-1828
- }
- JSONString item = jsonValue.isString();
- result.add(item.stringValue());
+ ConsoleLog.debug("FIXME JBPM-1828: Null value on string array:" + jsonArray.toString());
+ continue; // TODO: JBPM-1828
}
+ JSONString item = jsonValue.isString();
+ result.add(item.stringValue());
+ }
- return result;
- }
+ return result;
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessDefinitionList.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessDefinitionList.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessDefinitionList.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -25,12 +25,14 @@
import com.gwtext.client.data.*;
import com.gwtext.client.widgets.MessageBox;
import com.gwtext.client.widgets.MessageBoxConfig;
+import com.gwtext.client.widgets.ComponentMgr;
import com.gwtext.client.widgets.grid.ColumnConfig;
import com.gwtext.client.widgets.grid.ColumnModel;
import com.gwtext.client.widgets.grid.RowSelectionModel;
import org.jboss.bpm.console.client.util.ConsoleLog;
import org.jboss.bpm.console.client.util.ModelModificationCallback;
import org.jboss.bpm.console.client.MainView;
+import org.jboss.bpm.console.client.Editor;
import org.jboss.bpm.console.client.model.ProcessDefinitionRef;
import org.jboss.bpm.console.client.widgets.RemoteListView;
@@ -41,149 +43,152 @@
*/
public class ProcessDefinitionList extends RemoteListView
{
- private Map<Integer, ProcessDefinitionRef> row2ProcessMap = new HashMap<Integer, ProcessDefinitionRef>();
+ private Map<Integer, ProcessDefinitionRef> row2ProcessMap = new HashMap<Integer, ProcessDefinitionRef>();
- public ProcessDefinitionList(ModelModificationCallback callback, String titleName, final MainView view)
- {
- super(callback, titleName, view, getResourceUrl(view));
- enableAddBtn(false);
- final RowSelectionModel sm = new RowSelectionModel(true);
- setRowSelectionModel(sm);
- }
+ public ProcessDefinitionList(ModelModificationCallback callback, String titleName, final MainView view)
+ {
+ super(callback, titleName, view, getResourceUrl(view));
+ enableAddBtn(false);
+ final RowSelectionModel sm = new RowSelectionModel(true);
+ setRowSelectionModel(sm);
+ }
- private static String getResourceUrl(MainView view)
- {
- return view.getUrlBuilder().getProcessDefinitionsURL();
- }
+ private static String getResourceUrl(MainView view)
+ {
+ return view.getUrlBuilder().getProcessDefinitionsURL();
+ }
- protected ColumnModel createColumnModel()
- {
- final ColumnModel columnModel = new ColumnModel(
+ protected ColumnModel createColumnModel()
+ {
+ final ColumnModel columnModel = new ColumnModel(
new ColumnConfig[]
- {
- new ColumnConfig("Process ID", "processId", 75, true),
- new ColumnConfig("Name", "name", 300, true, null, "expand"),
- new ColumnConfig("Version", "version", 75, true)
- }
- );
- return columnModel;
- }
+ {
+ new ColumnConfig("Process ID", "processId", 75, true),
+ new ColumnConfig("Name", "name", 300, true, null, "expand"),
+ new ColumnConfig("Version", "version", 75, true)
+ }
+ );
+ return columnModel;
+ }
- protected JsonReader createReader()
- {
- final RecordDef recordDef = new RecordDef(
+ protected JsonReader createReader()
+ {
+ final RecordDef recordDef = new RecordDef(
new FieldDef[]{
- new IntegerFieldDef("processId"),
- new StringFieldDef("name"),
- new StringFieldDef("version")
+ new IntegerFieldDef("processId"),
+ new StringFieldDef("name"),
+ new StringFieldDef("version")
}
- );
+ );
- final JsonReader reader = new JsonReader(recordDef);
- reader.setRoot("definitions");
- reader.setTotalProperty("totalCount");
- reader.setId("processId");
- return reader;
- }
+ final JsonReader reader = new JsonReader(recordDef);
+ reader.setRoot("definitions");
+ reader.setTotalProperty("totalCount");
+ reader.setId("processId");
+ return reader;
+ }
- public void onExamine(int row)
- {
- ProcessDefinitionRef proc = row2ProcessMap.get(row);
- launchEditor(proc);
- }
+ public void onExamine(int row)
+ {
+ ProcessDefinitionRef proc = row2ProcessMap.get(row);
+ launchView(proc);
+ }
- public void launchEditor(ProcessDefinitionRef proc)
- {
- String editorId = ProcessInstanceListEditor.createWidgetID(proc);
+ public void launchView(ProcessDefinitionRef proc)
+ {
+ String editorId = ProcessEditor.ID;
+ Editor editor = (Editor) ComponentMgr.getComponent(editorId);
+ if (editor.hasView(editorId))
+ editor.showView(editorId);
+ else
+ editor.addView(new ProcessInstanceListView(proc, view), true);
+ }
- if(view.hasEditor(editorId))
- view.showEditor(editorId);
- else
- view.addEditor( new ProcessInstanceListEditor(proc, view) );
- }
+ public void onDelete(final int row)
+ {
+ MessageBox.show(new MessageBoxConfig()
+ {
+ {
+ setTitle("Delete process?");
+ setMsg("Deleting the process will remove all instances as well. " +
+ "Would you like to delete this process?");
+ setButtons(MessageBox.YESNOCANCEL);
+ setCallback(new MessageBox.PromptCallback()
+ {
+ public void execute(String btnID, String text)
+ {
+ if ("yes".equals(btnID))
+ {
+ ProcessDefinitionRef proc = (ProcessDefinitionRef) row2ProcessMap.get(row);
+ String url = view.getUrlBuilder().getRemoveDefinitionURL(proc.getProcessId());
+ RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, url);
- public void onDelete(final int row)
- {
- MessageBox.show(new MessageBoxConfig() {
- {
- setTitle("Delete process?");
- setMsg("Deleting the process will remove all instances as well. " +
- "Would you like to delete this process?");
- setButtons(MessageBox.YESNOCANCEL);
- setCallback(new MessageBox.PromptCallback() {
- public void execute(String btnID, String text)
- {
- if("yes".equals( btnID) )
- {
- ProcessDefinitionRef proc = (ProcessDefinitionRef)row2ProcessMap.get(row);
- String url = view.getUrlBuilder().getRemoveDefinitionURL(proc.getProcessId());
- RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, url);
+ try
+ {
+ rb.sendRequest("",
+ new RequestCallback()
+ {
- try
- {
- rb.sendRequest("",
- new RequestCallback() {
+ public void onResponseReceived(Request request, Response response)
+ {
+ modelModificationCallback.onStaleModel();
+ }
- public void onResponseReceived(Request request, Response response)
- {
- modelModificationCallback.onStaleModel();
- }
+ public void onError(Request request, Throwable t)
+ {
+ // auth failed
+ ConsoleLog.error("Failed to remove process definition", t);
+ }
+ });
+ }
+ catch (RequestException e1)
+ {
+ ConsoleLog.error("Request failed", e1);
+ }
+ }
+ }
+ });
+ }
+ });
+ }
- public void onError(Request request, Throwable t)
- {
- // auth failed
- ConsoleLog.error("Failed to remove process definition", t);
- }
- });
- }
- catch (RequestException e1)
- {
- ConsoleLog.error("Request failed", e1);
- }
- }
- }
- });
- }
- });
- }
+ public void onAdd()
+ {
- public void onAdd()
- {
-
- }
+ }
- protected void onRecordsLoaded(Record[] records)
- {
- row2ProcessMap.clear();
+ protected void onRecordsLoaded(Record[] records)
+ {
+ row2ProcessMap.clear();
- int i = 0;
- for(Record r : records)
- {
- Long id = Long.valueOf(r.getAsString("processId"));
- ProcessDefinitionRef pd = new ProcessDefinitionRef(
- id,
- r.getAsString("name"),
- r.getAsString("version")
- );
+ int i = 0;
+ for (Record r : records)
+ {
+ Long id = Long.valueOf(r.getAsString("processId"));
+ ProcessDefinitionRef pd = new ProcessDefinitionRef(
+ id,
+ r.getAsString("name"),
+ r.getAsString("version")
+ );
- row2ProcessMap.put(i, pd);
- i++;
- }
+ row2ProcessMap.put(i, pd);
+ i++;
+ }
- ConsoleLog.debug("Loaded " + row2ProcessMap.size() + " process definitions");
- }
+ ConsoleLog.debug("Loaded " + row2ProcessMap.size() + " process definitions");
+ }
- public List<ProcessDefinitionRef> getAvailableProcessDefinitions()
- {
- List<ProcessDefinitionRef> results = new ArrayList<ProcessDefinitionRef>();
- Iterator<Integer> keys = row2ProcessMap.keySet().iterator();
- while(keys.hasNext())
- {
- results.add(row2ProcessMap.get(keys.next()));
- }
+ public List<ProcessDefinitionRef> getAvailableProcessDefinitions()
+ {
+ List<ProcessDefinitionRef> results = new ArrayList<ProcessDefinitionRef>();
+ Iterator<Integer> keys = row2ProcessMap.keySet().iterator();
+ while (keys.hasNext())
+ {
+ results.add(row2ProcessMap.get(keys.next()));
+ }
- return results;
- }
+ return results;
+ }
}
Deleted: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessDefinitionListEditor.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessDefinitionListEditor.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessDefinitionListEditor.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -1,180 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.bpm.console.client.process;
-
-import com.google.gwt.core.client.GWT;
-import com.gwtext.client.core.Connection;
-import com.gwtext.client.core.EventObject;
-import com.gwtext.client.widgets.Button;
-import com.gwtext.client.widgets.MessageBox;
-import com.gwtext.client.widgets.Panel;
-import com.gwtext.client.widgets.event.ButtonListenerAdapter;
-import com.gwtext.client.widgets.form.Form;
-import com.gwtext.client.widgets.form.FormPanel;
-import com.gwtext.client.widgets.form.TextField;
-import com.gwtext.client.widgets.form.event.FormListenerAdapter;
-import org.jboss.bpm.console.client.Editor;
-import org.jboss.bpm.console.client.MainView;
-import org.jboss.bpm.console.client.UIConstants;
-import org.jboss.bpm.console.client.util.ConsoleLog;
-import org.jboss.bpm.console.client.util.ModelListenerRegistry;
-import org.jboss.bpm.console.client.util.ModelModificationCallback;
-
-/**
- * @author Heiko.Braun <heiko.braun at jboss.com>
- */
-public class ProcessDefinitionListEditor extends Editor
-{
- public final static String ID = "org.jboss.bpm.process.ProcessDefinitionListEditor";
-
- private ProcessDefinitionList processDefinitionList;
- private MainView view;
- private Panel teaserPanel;
- private ModelListenerRegistry modelListeners = new ModelListenerRegistry();
-
- public ProcessDefinitionListEditor(final MainView view)
- {
- super(view);
- this.setId(ID);
- this.view = view;
-
- this.setWidth(UIConstants.EDITOR_WIDTH);
-
-
- // ----------------------------------
-
- final ModelModificationCallback modelModificationCallback = new ModelModificationCallback()
- {
- public void onStaleModel()
- {
- resetEditor();
- }
- };
-
- // ----------------------------------
-
- processDefinitionList = new ProcessDefinitionList(
- modelModificationCallback, "Process Definitions", view
- );
-
- // ----------------------------------
-
- Panel outerFormPanel = new Panel();
- outerFormPanel.setBorder(false);
- outerFormPanel.setPaddings(10);
-
-
- final FormPanel formPanel = new FormPanel();
- formPanel.setFrame(true);
- formPanel.setTitle("Upload new process definition");
- formPanel.setLabelWidth(75);
- formPanel.setWidth(UIConstants.EDITOR_PANEL_WIDTH);
-
- formPanel.setFileUpload(true);
- final TextField file = new TextField("File", "file");
- file.setInputType("file");
-
- formPanel.add(file);
-
- Button uploadButton = new Button("Upload", new ButtonListenerAdapter()
- {
- public void onClick(Button button, EventObject e)
- {
- formPanel.getForm().submit(
- view.getUrlBuilder().getUploadDefinitionURL(), null,
- Connection.POST, "Uploading definition ...", false);
- }
- });
- formPanel.addButton(uploadButton);
-
- formPanel.getForm().addListener(
- new FormListenerAdapter()
- {
-
- public boolean doBeforeAction(Form form)
- {
- if(!GWT.isScript())
- {
- MessageBox.alert("Uploads only work on web mode!");
- return false;
- }
- else if(form.findField("file").getValueAsString().equals(""))
- {
- MessageBox.alert("Please provide a process definition file");
- return false;
- }
-
-
- return true;
- }
-
- public void onActionComplete(Form form, int i, String string)
- {
- processDefinitionList.reloadStore();
- doLayout();
- form.reset();
- }
-
- public void onActionFailed(Form form, int i, String string)
- {
- super.onActionFailed(form, i, string);
- ConsoleLog.error("Failed to upload process definition: " + string );
- }
- }
- );
-
- outerFormPanel.add(formPanel);
-
- // ----------------------------------
-
- this.add(processDefinitionList);
- this.add(outerFormPanel);
-
- }
-
-
- public String getEditorId()
- {
- return ID;
- }
-
- public String getTitle()
- {
- return "Processes";
- }
-
- public String getIconCSS()
- {
- return "bpm-process-icon";
- }
-
- public ProcessDefinitionList getProcessDefinitionList()
- {
- return processDefinitionList;
- }
-
- public void resetEditor()
- {
- processDefinitionList.reloadStore();
- modelListeners.fireResetEvent();
- }
-}
Copied: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessEditor.java (from rev 3638, projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessDefinitionListEditor.java)
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessEditor.java (rev 0)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessEditor.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -0,0 +1,242 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.bpm.console.client.process;
+
+import com.google.gwt.core.client.GWT;
+import com.gwtext.client.core.Connection;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.widgets.Button;
+import com.gwtext.client.widgets.MessageBox;
+import com.gwtext.client.widgets.Panel;
+import com.gwtext.client.widgets.tree.TreePanel;
+import com.gwtext.client.widgets.tree.TreeNode;
+import com.gwtext.client.widgets.tree.event.TreeNodeListenerAdapter;
+import com.gwtext.client.widgets.event.ButtonListenerAdapter;
+import com.gwtext.client.widgets.form.Form;
+import com.gwtext.client.widgets.form.FormPanel;
+import com.gwtext.client.widgets.form.TextField;
+import com.gwtext.client.widgets.form.event.FormListenerAdapter;
+import com.gwtext.client.data.Node;
+import org.jboss.bpm.console.client.*;
+import org.jboss.bpm.console.client.util.ConsoleLog;
+import org.jboss.bpm.console.client.util.ModelListenerRegistry;
+import org.jboss.bpm.console.client.util.ModelModificationCallback;
+
+/**
+ * @author Heiko.Braun <heiko.braun at jboss.com>
+ */
+public class ProcessEditor extends Editor
+{
+ public final static String ID = "org.jboss.bpm.process.ProcessEditor";
+
+ private ProcessDefinitionList processDefinitionList;
+ private MainView mainView;
+ private ModelListenerRegistry modelListeners = new ModelListenerRegistry();
+
+ public ProcessEditor(final MainView view)
+ {
+ super(view);
+ this.setId(ID);
+ this.mainView = view;
+
+ this.setWidth(UIConstants.EDITOR_WIDTH);
+
+ // ----------------------------------
+
+ final ModelModificationCallback modelModificationCallback = new ModelModificationCallback()
+ {
+ public void onStaleModel()
+ {
+ resetEditor();
+ }
+ };
+
+ // ----------------------------------
+
+ processDefinitionList = new ProcessDefinitionList(
+ modelModificationCallback, "Process Definitions", view
+ );
+
+ // ----------------------------------
+
+ Panel outerFormPanel = new Panel();
+ outerFormPanel.setBorder(false);
+ outerFormPanel.setPaddings(10, 0, 0, 0);
+
+ final FormPanel formPanel = new FormPanel();
+ formPanel.setFrame(true);
+ formPanel.setTitle("Upload new process definition");
+ formPanel.setLabelWidth(75);
+ formPanel.setWidth(UIConstants.EDITOR_PANEL_WIDTH);
+
+ formPanel.setFileUpload(true);
+ final TextField file = new TextField("File", "file");
+ file.setInputType("file");
+
+ formPanel.add(file);
+
+ Button uploadButton = new Button("Upload", new ButtonListenerAdapter()
+ {
+ public void onClick(Button button, EventObject e)
+ {
+ formPanel.getForm().submit(
+ view.getUrlBuilder().getUploadDefinitionURL(), null,
+ Connection.POST, "Uploading definition ...", false);
+ }
+ });
+ formPanel.addButton(uploadButton);
+
+ formPanel.getForm().addListener(
+ new FormListenerAdapter()
+ {
+
+ public boolean doBeforeAction(Form form)
+ {
+ if (!GWT.isScript())
+ {
+ MessageBox.alert("Uploads only work on web mode!");
+ return false;
+ }
+ else if (form.findField("file").getValueAsString().equals(""))
+ {
+ MessageBox.alert("Please provide a process definition file");
+ return false;
+ }
+
+
+ return true;
+ }
+
+ public void onActionComplete(Form form, int i, String string)
+ {
+ processDefinitionList.reloadStore();
+ doLayout();
+ form.reset();
+ }
+
+ public void onActionFailed(Form form, int i, String string)
+ {
+ super.onActionFailed(form, i, string);
+ ConsoleLog.error("Failed to upload process definition: " + string);
+ }
+ }
+ );
+
+ outerFormPanel.add(formPanel);
+
+ // ----------------------------------
+
+ final View defaultView = new View(main)
+ {
+
+ public String getViewId()
+ {
+ return getEditorId() + ".defaultView";
+ }
+
+ public String getIconCSS()
+ {
+ return "";
+ }
+ };
+
+ defaultView.setBorder(false);
+ defaultView.setTitle("Process definitions");
+ defaultView.add(processDefinitionList);
+ defaultView.add(outerFormPanel);
+
+ addView(defaultView, false);
+ }
+
+
+ public String getEditorId()
+ {
+ return ID;
+ }
+
+ public String getTitle()
+ {
+ return "Processes";
+ }
+
+ public String getIconCSS()
+ {
+ return "bpm-process-icon";
+ }
+
+
+ public MenuSection provideMenuSection()
+ {
+ return new MenuSection("Process Management", "bpm-process-icon", new ProcessTree());
+ }
+
+ public ProcessDefinitionList getProcessDefinitionList()
+ {
+ return processDefinitionList;
+ }
+
+ public void resetEditor()
+ {
+ processDefinitionList.reloadStore();
+ modelListeners.fireResetEvent();
+ }
+
+ class ProcessTree extends TreePanel
+ {
+
+ public ProcessTree()
+ {
+
+ TreeNode root = new TreeNode("Process Definitions");
+
+ TreeNode definitions = new TreeNode("View definitions");
+ definitions.setExpanded(true);
+ definitions.addListener(
+ new TreeNodeListenerAdapter()
+ {
+ public void onClick(Node node, EventObject eventObject)
+ {
+ if (mainView.hasEditor(ProcessEditor.ID))
+ {
+ mainView.showEditor(ProcessEditor.ID);
+ }
+ else
+ {
+ mainView.addEditor(new ProcessEditor(mainView));
+ }
+
+ }
+ }
+ );
+ //TreeNode upload = new TreeNode("Upload new definitions");
+ //upload.setExpanded(true);
+
+ root.appendChild(definitions);
+ //root.appendChild(upload);
+
+ setRootVisible(true);
+ setRootNode(root);
+ root.setExpanded(true);
+ }
+ }
+
+}
Property changes on: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessEditor.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Copied: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessImageComponent.java (from rev 3630, projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessImageView.java)
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessImageComponent.java (rev 0)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessImageComponent.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -0,0 +1,159 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.bpm.console.client.process;
+
+import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.json.client.JSONObject;
+import com.google.gwt.user.client.ui.HTML;
+import com.gwtext.client.widgets.Component;
+import com.gwtext.client.widgets.Panel;
+import com.gwtext.client.widgets.event.PanelListenerAdapter;
+import org.jboss.bpm.console.client.util.ConsoleLog;
+import org.jboss.bpm.console.client.MainView;
+import org.jboss.bpm.console.client.model.ProcessInstanceRef;
+import org.jboss.bpm.console.client.model.jbpm3.ActiveNodeInfo;
+import org.jboss.bpm.console.client.model.jbpm3.DiagramNodeInfo;
+import org.jboss.bpm.console.client.util.JSONRequest;
+import org.jboss.bpm.console.client.util.JSONRequestHandler;
+import org.jboss.bpm.console.client.util.JSONWalk;
+
+/**
+ * Fetches the {@link org.jboss.bpm.console.client.model.jbpm3.ActiveNodeInfo}
+ * and displays the process image.<p>
+ * <p/>
+ * The {@link com.gwtext.client.widgets.event.PanelListenerAdapter#doBeforeRender(com.gwtext.client.widgets.Component)}
+ * callback forces the GET request on the active node info, but has weak error handling and thus can result in 'null'.<br>
+ * <p/>
+ * The {@link com.gwtext.client.widgets.event.PanelListenerAdapter#onRender(com.gwtext.client.widgets.Component)}
+ * callback fetches the process definition image, if available.
+ *
+ * @author Heiko.Braun <heiko.braun at jboss.com>
+ */
+public class ProcessImageComponent extends Panel
+{
+ private ProcessInstanceRef instance;
+ private MainView view;
+ private ActiveNodeInfo activeNodeInfo = null;
+
+ public ProcessImageComponent(final ProcessInstanceRef instance, final MainView view)
+ {
+ super();
+ this.instance = instance;
+ this.view = view;
+
+ this.setHeader(false);
+ this.setBorder(true);
+ this.setFrame(false);
+
+ this.setAutoScroll(true);
+
+ this.addListener(
+ new PanelListenerAdapter()
+ {
+ public boolean doBeforeRender(Component component)
+ {
+ loadActiveNodeInfo();
+ return true;
+ }
+
+
+ public void onRender(Component component)
+ {
+ /*final Image image = new Image("images/processSample.jpg");
+ image.setStyleName("bpm-ProcessImage");
+ add(image);*/
+
+ }
+ }
+ );
+
+ }
+
+ private void loadActiveNodeInfo()
+ {
+ String url = view.getUrlBuilder().getActiveNodeInfoURL(this.instance.getInstanceId());
+ ConsoleLog.debug("Loading activeNodeInfo: " + url);
+
+ JSONRequest.get(url,
+ new JSONRequestHandler()
+ {
+
+ public void onRequestComplete(JavaScriptObject json)
+ {
+
+ //TODO: move to DTO Parser
+ JSONObject root = new JSONObject(json);
+ int diagramWidth = JSONWalk.on(root).next("diagramWidth").asInt();
+ int diagramHeight = JSONWalk.on(root).next("diagramHeight").asInt();
+
+ JSONObject activeNode = JSONWalk.on(root).next("activeNode").asObject();
+
+ int x = JSONWalk.on(activeNode).next("x").asInt();
+ int y = JSONWalk.on(activeNode).next("y").asInt();
+
+ int width = JSONWalk.on(activeNode).next("width").asInt();
+ int height = JSONWalk.on(activeNode).next("height").asInt();
+ String name = JSONWalk.on(activeNode).next("name").asString();
+
+ ActiveNodeInfo activeNodeInfo =
+ new ActiveNodeInfo(
+ diagramWidth, diagramHeight,
+ new DiagramNodeInfo(name, x, y, width, height)
+ );
+
+ onActiveNodeInfoLoaded(activeNodeInfo);
+ }
+ }
+ );
+
+ }
+
+ public void onActiveNodeInfoLoaded(ActiveNodeInfo activeNodeInfo)
+ {
+ ConsoleLog.debug("Successfully loaded activeNodeInfo:" + activeNodeInfo.getActiveNode().getName());
+ this.activeNodeInfo = activeNodeInfo;
+
+ DiagramNodeInfo activeNode = activeNodeInfo.getActiveNode();
+ String imageUrl = view.getUrlBuilder().getProcessImageURL(instance.getParentId());
+
+ HTML html = new HTML(
+ "<div id=\"imageContainer\" style=\"position:relative;top:-1;left:-1;height:" + activeNodeInfo.getHeight() + "px;width:" + activeNodeInfo.getWidth() + "px\">" +
+ "<img src=\"" + imageUrl + "\" style=\"position:absolute;top:0;left:0\" />" +
+ "" +
+ "<div class=\"activeNode\" style=\"top:" + (activeNode.getY()) + "px;left:" + activeNode.getX() + "px;width:" + (activeNode.getWidth() - 2) + "px;height:" + (activeNode.getHeight() - 2) + "px\"></div>" +
+ "" +
+ "<div class=\"activeNode-header\" style=\"top:" + (activeNode.getY() - 15) + "px;left:" + activeNode.getX() + "px;width:" + activeNode.getWidth() + "px;height:15px\">" +
+ " <div class=\"activeNode-header-link\"><a href=\"javascript:alert('Not implemented!')\">Running</a></div>" +
+ "</div>" +
+ "</div>"
+ );
+
+ add(html);
+ doLayout();
+
+ }
+
+ public ActiveNodeInfo getActiveNodeInfo()
+ {
+ return activeNodeInfo;
+ }
+}
Property changes on: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessImageComponent.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Deleted: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessImageView.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessImageView.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessImageView.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -1,157 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.bpm.console.client.process;
-
-import com.google.gwt.core.client.JavaScriptObject;
-import com.google.gwt.json.client.JSONObject;
-import com.google.gwt.user.client.ui.HTML;
-import com.gwtext.client.widgets.Component;
-import com.gwtext.client.widgets.Panel;
-import com.gwtext.client.widgets.event.PanelListenerAdapter;
-import org.jboss.bpm.console.client.util.ConsoleLog;
-import org.jboss.bpm.console.client.MainView;
-import org.jboss.bpm.console.client.model.ProcessInstanceRef;
-import org.jboss.bpm.console.client.model.jbpm3.ActiveNodeInfo;
-import org.jboss.bpm.console.client.model.jbpm3.DiagramNodeInfo;
-import org.jboss.bpm.console.client.util.JSONRequest;
-import org.jboss.bpm.console.client.util.JSONRequestHandler;
-import org.jboss.bpm.console.client.util.JSONWalk;
-
-/**
- * Fetches the {@link org.jboss.bpm.console.client.model.jbpm3.ActiveNodeInfo}
- * and displays the process image.<p>
- *
- * The {@link com.gwtext.client.widgets.event.PanelListenerAdapter#doBeforeRender(com.gwtext.client.widgets.Component)}
- * callback forces the GET request on the active node info, but has weak error handling and thus can result in 'null'.<br>
- *
- * The {@link com.gwtext.client.widgets.event.PanelListenerAdapter#onRender(com.gwtext.client.widgets.Component)}
- * callback fetches the process definition image, if available.
- * @author Heiko.Braun <heiko.braun at jboss.com>
- */
-public class ProcessImageView extends Panel
-{
- private ProcessInstanceRef instance;
- private MainView view;
- private ActiveNodeInfo activeNodeInfo = null;
-
- public ProcessImageView(final ProcessInstanceRef instance, final MainView view)
- {
- super();
- this.instance = instance;
- this.view = view;
-
- this.setHeader(false);
- this.setBorder(true);
- this.setFrame(false);
-
- this.setAutoScroll(true);
-
- this.addListener(
- new PanelListenerAdapter()
- {
- public boolean doBeforeRender(Component component)
- {
- loadActiveNodeInfo();
- return true;
- }
-
-
- public void onRender(Component component)
- {
- /*final Image image = new Image("images/processSample.jpg");
- image.setStyleName("bpm-ProcessImage");
- add(image);*/
-
- }
- }
- );
-
- }
-
- private void loadActiveNodeInfo()
- {
- String url = view.getUrlBuilder().getActiveNodeInfoURL(this.instance.getInstanceId());
- ConsoleLog.debug("Loading activeNodeInfo: " + url);
-
- JSONRequest.get(url,
- new JSONRequestHandler() {
-
- public void onRequestComplete(JavaScriptObject json)
- {
-
- //TODO: move to DTO Parser
- JSONObject root = new JSONObject(json);
- int diagramWidth = JSONWalk.on(root).next("diagramWidth").asInt();
- int diagramHeight = JSONWalk.on(root).next("diagramHeight").asInt();
-
- JSONObject activeNode = JSONWalk.on(root).next("activeNode").asObject();
-
- int x = JSONWalk.on(activeNode).next("x").asInt();
- int y = JSONWalk.on(activeNode).next("y").asInt();
-
- int width = JSONWalk.on(activeNode).next("width").asInt();
- int height = JSONWalk.on(activeNode).next("height").asInt();
- String name = JSONWalk.on(activeNode).next("name").asString();
-
- ActiveNodeInfo activeNodeInfo =
- new ActiveNodeInfo(
- diagramWidth, diagramHeight,
- new DiagramNodeInfo(name, x, y, width, height)
- );
-
- onActiveNodeInfoLoaded(activeNodeInfo);
- }
- }
- );
-
- }
-
- public void onActiveNodeInfoLoaded(ActiveNodeInfo activeNodeInfo)
- {
- ConsoleLog.debug("Successfully loaded activeNodeInfo:" + activeNodeInfo.getActiveNode().getName());
- this.activeNodeInfo = activeNodeInfo;
-
- DiagramNodeInfo activeNode = activeNodeInfo.getActiveNode();
- String imageUrl = view.getUrlBuilder().getProcessImageURL(instance.getParentId());
-
- HTML html = new HTML(
- "<div id=\"imageContainer\" style=\"position:relative;top:-1;left:-1;height:"+activeNodeInfo.getHeight()+"px;width:"+activeNodeInfo.getWidth()+"px\">" +
- "<img src=\""+imageUrl+"\" style=\"position:absolute;top:0;left:0\" />" +
- "" +
- "<div class=\"activeNode\" style=\"top:"+ (activeNode.getY()) +"px;left:"+activeNode.getX()+"px;width:"+(activeNode.getWidth()-2)+"px;height:"+(activeNode.getHeight()-2)+"px\"></div>" +
- "" +
- "<div class=\"activeNode-header\" style=\"top:"+(activeNode.getY()-15)+"px;left:"+activeNode.getX()+"px;width:"+activeNode.getWidth()+"px;height:15px\">" +
- " <div class=\"activeNode-header-link\"><a href=\"javascript:alert('Not implemented!')\">Running</a></div>" +
- "</div>" +
- "</div>"
- );
-
- add(html);
- doLayout();
-
- }
-
- public ActiveNodeInfo getActiveNodeInfo()
- {
- return activeNodeInfo;
- }
-}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceDetailForm.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceDetailForm.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceDetailForm.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -44,147 +44,148 @@
class ProcessInstanceDetailForm extends Panel implements ModelChangeListener
{
- private FormPanel detailsForm;
+ private FormPanel detailsForm;
- private ProcessInstanceRef selectedInstance;
+ private ProcessInstanceRef selectedInstance;
- private ModelModificationCallback callback;
+ private ModelModificationCallback callback;
- private MainView mainView;
+ private MainView mainView;
- private Button suspendButton;
- private Button resumeButton;
+ private Button suspendButton;
+ private Button resumeButton;
- public ProcessInstanceDetailForm(MainView view, ModelModificationCallback callback)
- {
- super();
+ public ProcessInstanceDetailForm(MainView view, ModelModificationCallback callback)
+ {
+ super();
- this.mainView = view;
- this.callback = callback;
+ this.mainView = view;
+ this.callback = callback;
- setTitle("Instance Details");
- setBorder(false);
- setFrame(false);
+ setTitle("Instance Details");
+ setBorder(false);
+ setFrame(false);
- // ---------------
+ // ---------------
- detailsForm = FormWidgets.createBaseFormPanel();
+ detailsForm = FormWidgets.createBaseFormPanel();
- // ---------------
+ // ---------------
- TextField idField = new TextField("Id", "instanceId", 230);
- idField.setReadOnly(true);
- detailsForm.add(idField);
- TextField keyField = new TextField("Key", "key", 230);
- keyField.setReadOnly(true);
- detailsForm.add(keyField);
- TextField stateField = new TextField("State", "state", 230);
- stateField.setReadOnly(true);
- detailsForm.add(stateField);
- DateField startDateField = new DateField("Start Date", "startDate", 230);
- startDateField.setReadOnly(true);
- detailsForm.add(startDateField);
- //detailsForm.add(new DateField("End Date", "endDate", 230));
+ TextField idField = new TextField("Id", "instanceId", 230);
+ idField.setReadOnly(true);
+ detailsForm.add(idField);
+ TextField keyField = new TextField("Key", "key", 230);
+ keyField.setReadOnly(true);
+ detailsForm.add(keyField);
+ TextField stateField = new TextField("State", "state", 230);
+ stateField.setReadOnly(true);
+ detailsForm.add(stateField);
+ DateField startDateField = new DateField("Start Date", "startDate", 230);
+ startDateField.setReadOnly(true);
+ detailsForm.add(startDateField);
+ //detailsForm.add(new DateField("End Date", "endDate", 230));
- suspendButton = new Button("Suspend",
- new ButtonListenerAdapter()
- {
- public void onClick(Button button, EventObject eventObject)
- {
- selectedInstance.setState(ProcessInstanceRef.STATE.SUSPENDED);
- persistStateChange();
- }
- }
- );
+ suspendButton = new Button("Suspend",
+ new ButtonListenerAdapter()
+ {
+ public void onClick(Button button, EventObject eventObject)
+ {
+ selectedInstance.setState(ProcessInstanceRef.STATE.SUSPENDED);
+ persistStateChange();
+ }
+ }
+ );
- resumeButton = new Button("Resume",
- new ButtonListenerAdapter()
- {
+ resumeButton = new Button("Resume",
+ new ButtonListenerAdapter()
+ {
- public void onClick(Button button, EventObject eventObject)
- {
- selectedInstance.setState(ProcessInstanceRef.STATE.RUNNING);
- persistStateChange();
- }
- }
- );
+ public void onClick(Button button, EventObject eventObject)
+ {
+ selectedInstance.setState(ProcessInstanceRef.STATE.RUNNING);
+ persistStateChange();
+ }
+ }
+ );
- detailsForm.addButton(suspendButton);
- detailsForm.addButton(resumeButton);
+ detailsForm.addButton(suspendButton);
+ detailsForm.addButton(resumeButton);
- this.add(detailsForm);
-
- }
+ this.add(detailsForm);
- private void persistStateChange()
- {
- String url = mainView.getUrlBuilder().getStateChangeURL(
- selectedInstance.getInstanceId(), selectedInstance.getState()
- );
+ }
- RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, url);
+ private void persistStateChange()
+ {
+ String url = mainView.getUrlBuilder().getStateChangeURL(
+ selectedInstance.getInstanceId(), selectedInstance.getState()
+ );
- try
- {
- rb.sendRequest(null,
- new RequestCallback() {
+ RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, url);
- public void onResponseReceived(Request request, Response response)
- {
- if(response.getStatusCode()!=200)
- ConsoleLog.error("Failed to change state: " +response.getStatusText());
- else
- callback.onStaleModel();
- }
+ try
+ {
+ rb.sendRequest(null,
+ new RequestCallback()
+ {
- public void onError(Request request, Throwable t)
- {
- // Unknown error
- ConsoleLog.error("Unknown error", t);
- }
- });
- }
- catch (RequestException e1)
- {
- ConsoleLog.error("Request failed", e1);
- }
- }
+ public void onResponseReceived(Request request, Response response)
+ {
+ if (response.getStatusCode() != 200)
+ ConsoleLog.error("Failed to change state: " + response.getStatusText());
+ else
+ callback.onStaleModel();
+ }
+ public void onError(Request request, Throwable t)
+ {
+ // Unknown error
+ ConsoleLog.error("Unknown error", t);
+ }
+ });
+ }
+ catch (RequestException e1)
+ {
+ ConsoleLog.error("Request failed", e1);
+ }
+ }
- public void onModelChange(ModelListenerRegistry parent, Object changeEvent)
- {
- // not used
- }
- public void onRecordChange(ModelListenerRegistry parent, Record record)
- {
- selectedInstance = ProcessInstanceList.transform(record);
+ public void onModelChange(ModelListenerRegistry parent, Object changeEvent)
+ {
+ // not used
+ }
- if(selectedInstance.isSuspended())
- {
- suspendButton.disable();
- resumeButton.enable();
- }
- else
- {
- resumeButton.disable();
- suspendButton.enable();
- }
+ public void onRecordChange(ModelListenerRegistry parent, Record record)
+ {
+ selectedInstance = ProcessInstanceList.transform(record);
- detailsForm.getForm().loadRecord(record);
+ if (selectedInstance.isSuspended())
+ {
+ suspendButton.disable();
+ resumeButton.enable();
+ }
+ else
+ {
+ resumeButton.disable();
+ suspendButton.enable();
+ }
- // state not part of the payload
- detailsForm.getForm().findField("state").setRawValue(
- selectedInstance.getState().toString()
- );
+ detailsForm.getForm().loadRecord(record);
- detailsForm.doLayout();
+ // state not part of the payload
+ detailsForm.getForm().findField("state").setRawValue(
+ selectedInstance.getState().toString()
+ );
- }
+ detailsForm.doLayout();
- public void onReset()
- {
- selectedInstance = null;
- detailsForm.getForm().reset();
- }
+ }
+
+ public void onReset()
+ {
+ selectedInstance = null;
+ detailsForm.getForm().reset();
+ }
}
Deleted: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceEditor.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceEditor.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceEditor.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -1,123 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.bpm.console.client.process;
-
-import com.gwtext.client.core.EventObject;
-import com.gwtext.client.widgets.*;
-import com.gwtext.client.widgets.event.ButtonListenerAdapter;
-import org.jboss.bpm.console.client.Editor;
-import org.jboss.bpm.console.client.MainView;
-import org.jboss.bpm.console.client.UIConstants;
-import org.jboss.bpm.console.client.model.ProcessDefinitionRef;
-import org.jboss.bpm.console.client.model.ProcessInstanceRef;
-
-/**
- * @author Heiko.Braun <heiko.braun at jboss.com>
- *
- * @see ProcessInstanceList#onExamine(int)
- */
-public class ProcessInstanceEditor extends Editor
-{
- public final static String ID = "org.jboss.bpm.process.ProcessInstance";
-
- private ProcessDefinitionRef processDefinition;
-
- private ProcessInstanceRef processInstance;
-
- private MainView view;
-
- private Panel teaserPanel;
-
- public ProcessInstanceEditor(final ProcessDefinitionRef proc, final ProcessInstanceRef instance, final MainView view)
- {
- super(view);
- this.setId(ProcessInstanceEditor.ID+"."+instance.getInstanceId());
-
- this.processDefinition = proc;
- this.processInstance = instance;
- this.view = view;
-
- // ----------------------------------
-
- this.setPaddings(10);
- this.setWidth(UIConstants.EDITOR_WIDTH);
-
- this.setBorder(false);
- this.setHeader(false);
-
- // ----------------------------------
-
- ProcessImageView imageView = new ProcessImageView(instance, view);
- imageView.setWidth(UIConstants.EDITOR_PANEL_WIDTH);
-
- Toolbar imageToolbar = new Toolbar();
- imageToolbar.addFill();
- ToolbarButton toolbarButton = new ToolbarButton("Enlarge",
- new ButtonListenerAdapter()
- {
- public void onClick(Button button, EventObject e)
- {
-
- final Window window = new Window();
- window.setTitle("Process Graph");
- window.setClosable(true);
- window.setWidth(800);
- window.setHeight(600);
- window.setPlain(true);
- window.setCloseAction(Window.HIDE);
- window.add(new ProcessImageView(instance, view) );
- window.show("");
- }
- }
- );
- toolbarButton.setIconCls("bpm-enlarge-icon");
- imageToolbar.addButton( toolbarButton );
- imageView.setBottomToolbar(imageToolbar);
-
- PaddedPanel padding = new PaddedPanel(imageView, 5, 5, 0, 5);
-
- // ----------------------------------
-
- this.add(padding);
- }
-
- public String getEditorId()
- {
- return ID;
- }
-
- public String getTitle()
- {
- return "#"+processInstance.getInstanceId()+" ("+processDefinition.getName()+")";
- }
-
-
- public String getIconCSS()
- {
- return "bpm-instance-icon";
- }
-
- public static String createWidgetID(ProcessDefinitionRef parent)
- {
- return ProcessInstanceEditor.ID+"."+parent.getName()+"."+parent.getVersion();
- }
-}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceList.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceList.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceList.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -27,6 +27,7 @@
import com.gwtext.client.data.*;
import com.gwtext.client.widgets.MessageBox;
import com.gwtext.client.widgets.MessageBoxConfig;
+import com.gwtext.client.widgets.ComponentMgr;
import com.gwtext.client.widgets.grid.ColumnConfig;
import com.gwtext.client.widgets.grid.ColumnModel;
import com.gwtext.client.widgets.grid.Renderer;
@@ -34,6 +35,7 @@
import org.jboss.bpm.console.client.util.ConsoleLog;
import org.jboss.bpm.console.client.MainView;
import org.jboss.bpm.console.client.UIConstants;
+import org.jboss.bpm.console.client.Editor;
import org.jboss.bpm.console.client.util.DateRenderer;
import org.jboss.bpm.console.client.model.ProcessDefinitionRef;
import org.jboss.bpm.console.client.model.ProcessInstanceRef;
@@ -50,207 +52,214 @@
public class ProcessInstanceList extends RemoteListView
{
- private Map<Integer, ProcessInstanceRef> row2InstanceMap = new HashMap<Integer, ProcessInstanceRef>();
- private ProcessDefinitionRef parent;
-
- public ProcessInstanceList(ModelModificationCallback callback, ProcessDefinitionRef procDef, String titleName, MainView view)
- {
- super(callback,titleName, view, getResourceUrl(view, procDef.getProcessId()));
- this.parent = procDef;
- }
+ private Map<Integer, ProcessInstanceRef> row2InstanceMap = new HashMap<Integer, ProcessInstanceRef>();
+ private ProcessDefinitionRef parent;
- ProcessDefinitionRef getProcessDefinition()
- {
- return parent;
- }
+ public ProcessInstanceList(ModelModificationCallback callback, ProcessDefinitionRef procDef, String titleName, MainView view)
+ {
+ super(callback, titleName, view, getResourceUrl(view, procDef.getProcessId()));
+ this.parent = procDef;
+ }
- public void onExamine(final int row)
- {
- ProcessInstanceRef instance = row2InstanceMap.get(row);
- String id = ProcessInstanceEditor.ID+"."+instance.getInstanceId();
- if(view.hasEditor(id))
- view.showEditor(id);
- else
- view.addEditor( new ProcessInstanceEditor(parent, instance, view) );
- }
+ ProcessDefinitionRef getProcessDefinition()
+ {
+ return parent;
+ }
- public void onDelete(final int row)
- {
- MessageBox.show(new MessageBoxConfig() {
- {
- setTitle("Delete process instance?");
- setMsg("Would you like to delete this process instance?");
- setButtons(MessageBox.YESNOCANCEL);
- setCallback(new MessageBox.PromptCallback() {
- public void execute(String btnID, String text)
- {
- if("yes".equals( btnID) )
- {
- ProcessInstanceRef instance = row2InstanceMap.get(row);
- instance.setState(ProcessInstanceRef.STATE.ENDED);
- String url = view.getUrlBuilder().getStateChangeURL(instance.getInstanceId(), instance.getState());
- RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, url);
+ public void onExamine(final int row)
+ {
+ ProcessInstanceRef instance = row2InstanceMap.get(row);
+ String id = ProcessInstanceView.ID + "." + instance.getInstanceId();
+ Editor editor = (Editor) ComponentMgr.getComponent(ProcessEditor.ID);
+ if (editor.hasView(id))
+ editor.showView(id);
+ else
+ editor.addView(new ProcessInstanceView(parent, instance, view), true);
+ }
- try
- {
- rb.sendRequest("",
- new RequestCallback() {
+ public void onDelete(final int row)
+ {
+ MessageBox.show(new MessageBoxConfig()
+ {
+ {
+ setTitle("Delete process instance?");
+ setMsg("Would you like to delete this process instance?");
+ setButtons(MessageBox.YESNOCANCEL);
+ setCallback(new MessageBox.PromptCallback()
+ {
+ public void execute(String btnID, String text)
+ {
+ if ("yes".equals(btnID))
+ {
+ ProcessInstanceRef instance = row2InstanceMap.get(row);
+ instance.setState(ProcessInstanceRef.STATE.ENDED);
+ String url = view.getUrlBuilder().getStateChangeURL(instance.getInstanceId(), instance.getState());
+ RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, url);
- public void onResponseReceived(Request request, Response response)
- {
- modelModificationCallback.onStaleModel();
- }
+ try
+ {
+ rb.sendRequest("",
+ new RequestCallback()
+ {
- public void onError(Request request, Throwable t)
- {
- // auth failed
- ConsoleLog.error("Failed to remove process instance", t);
- }
- });
- }
- catch (RequestException e1)
- {
- ConsoleLog.error("Request failed", e1);
- }
- }
- }
- });
- }
- });
- }
+ public void onResponseReceived(Request request, Response response)
+ {
+ modelModificationCallback.onStaleModel();
+ }
+ public void onError(Request request, Throwable t)
+ {
+ // auth failed
+ ConsoleLog.error("Failed to remove process instance", t);
+ }
+ });
+ }
+ catch (RequestException e1)
+ {
+ ConsoleLog.error("Request failed", e1);
+ }
+ }
+ }
+ });
+ }
+ });
+ }
- public void onAdd()
- {
- MessageBox.show(new MessageBoxConfig() {
- {
- setTitle("New instance");
- setMsg("Would you like to start a new instance?");
- setButtons(MessageBox.YESNOCANCEL);
- setCallback(new MessageBox.PromptCallback() {
- public void execute(String btnID, String text)
- {
- if("yes".equals( btnID) )
- {
- String url = view.getUrlBuilder().getStartNewInstanceURL(parent.getProcessId());
- RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, url);
- try
- {
- rb.sendRequest("",
- new RequestCallback() {
+ public void onAdd()
+ {
+ MessageBox.show(new MessageBoxConfig()
+ {
+ {
+ setTitle("New instance");
+ setMsg("Would you like to start a new instance?");
+ setButtons(MessageBox.YESNOCANCEL);
+ setCallback(new MessageBox.PromptCallback()
+ {
+ public void execute(String btnID, String text)
+ {
+ if ("yes".equals(btnID))
+ {
+ String url = view.getUrlBuilder().getStartNewInstanceURL(parent.getProcessId());
+ RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, url);
- public void onResponseReceived(Request request, Response response)
- {
- if(response.getStatusCode()!=200)
- {
- ConsoleLog.error("Failed to start new instance: " +response.getStatusText());
- }
- else
- {
- modelModificationCallback.onStaleModel();
- doLayout();
- }
- }
+ try
+ {
+ rb.sendRequest("",
+ new RequestCallback()
+ {
- public void onError(Request request, Throwable t)
- {
- // auth failed
- ConsoleLog.error("Failed to start new instance", t);
- }
- });
- }
- catch (RequestException e1)
- {
- ConsoleLog.error("Request failed", e1);
- }
- }
- }
- });
- }
- });
- }
+ public void onResponseReceived(Request request, Response response)
+ {
+ if (response.getStatusCode() != 200)
+ {
+ ConsoleLog.error("Failed to start new instance: " + response.getStatusText());
+ }
+ else
+ {
+ modelModificationCallback.onStaleModel();
+ doLayout();
+ }
+ }
- protected void onRecordsLoaded(Record[] records)
- {
- int i = 0;
- for(Record r : records)
- {
- ProcessInstanceRef pd = transform(r);
- row2InstanceMap.put(i, pd);
- i++;
+ public void onError(Request request, Throwable t)
+ {
+ // auth failed
+ ConsoleLog.error("Failed to start new instance", t);
+ }
+ });
+ }
+ catch (RequestException e1)
+ {
+ ConsoleLog.error("Request failed", e1);
+ }
+ }
+ }
+ });
}
+ });
+ }
- ConsoleLog.debug("Loaded " + row2InstanceMap.size() + " process instances");
- }
+ protected void onRecordsLoaded(Record[] records)
+ {
+ int i = 0;
+ for (Record r : records)
+ {
+ ProcessInstanceRef pd = transform(r);
+ row2InstanceMap.put(i, pd);
+ i++;
+ }
- public static ProcessInstanceRef transform(Record r)
- {
- ProcessInstanceRef processInstance = null;
- try
- {
- JavaScriptObject js = r.getDataAsJsObject();
- JSONObject jso = new JSONObject(js);
- processInstance = DTOParser.parseProcessInstance(jso);
- }
- catch (Throwable t)
- {
- ConsoleLog.error("Failed to parse process instance", t);
- }
-
- return processInstance;
- }
+ ConsoleLog.debug("Loaded " + row2InstanceMap.size() + " process instances");
+ }
- protected ColumnModel createColumnModel()
- {
- final ColumnModel columnModel = new ColumnModel(
+ public static ProcessInstanceRef transform(Record r)
+ {
+ ProcessInstanceRef processInstance = null;
+ try
+ {
+ JavaScriptObject js = r.getDataAsJsObject();
+ JSONObject jso = new JSONObject(js);
+ processInstance = DTOParser.parseProcessInstance(jso);
+ }
+ catch (Throwable t)
+ {
+ ConsoleLog.error("Failed to parse process instance", t);
+ }
+
+ return processInstance;
+ }
+
+ protected ColumnModel createColumnModel()
+ {
+ final ColumnModel columnModel = new ColumnModel(
new ColumnConfig[]
- {
- new ColumnConfig("Instance ID", "instanceId", 75, true),
- //new ColumnConfig("Process ID", "parentId", 25, true),
- //new ColumnConfig("Key", "key", 50, true),
- new ColumnConfig("State", "state", 100, true,
- new Renderer()
- {
- public String render(Object object, CellMetadata cellMetadata, Record record, int i, int i1, Store store)
- {
+ {
+ new ColumnConfig("Instance ID", "instanceId", 75, true),
+ //new ColumnConfig("Process ID", "parentId", 25, true),
+ //new ColumnConfig("Key", "key", 50, true),
+ new ColumnConfig("State", "state", 100, true,
+ new Renderer()
+ {
+ public String render(Object object, CellMetadata cellMetadata, Record record, int i, int i1, Store store)
+ {
ProcessInstanceRef tmp = transform(record);
return tmp.getState().toString();
- }
- }
- , "expand"),
- new ColumnConfig("Start Date", "startDate", 125, true, new DateRenderer("startDate")),
- //new ColumnConfig("End Date", "endDate", 125, true, new DateRenderer("endDate"))
- }
- );
+ }
+ }
+ , "expand"),
+ new ColumnConfig("Start Date", "startDate", 125, true, new DateRenderer("startDate")),
+ //new ColumnConfig("End Date", "endDate", 125, true, new DateRenderer("endDate"))
+ }
+ );
- return columnModel;
- }
+ return columnModel;
+ }
- protected JsonReader createReader()
- {
- final RecordDef recordDef = new RecordDef(
+ protected JsonReader createReader()
+ {
+ final RecordDef recordDef = new RecordDef(
new FieldDef[]{
- new IntegerFieldDef("instanceId"),
- new IntegerFieldDef("parentId"),
- new StringFieldDef("key"),
- new StringFieldDef("state"),
- new DateFieldDef("startDate", UIConstants.DATE_FORMAT),
- new DateFieldDef("endDate", UIConstants.DATE_FORMAT),
- new BooleanFieldDef("suspended")
+ new IntegerFieldDef("instanceId"),
+ new IntegerFieldDef("parentId"),
+ new StringFieldDef("key"),
+ new StringFieldDef("state"),
+ new DateFieldDef("startDate", UIConstants.DATE_FORMAT),
+ new DateFieldDef("endDate", UIConstants.DATE_FORMAT),
+ new BooleanFieldDef("suspended")
}
- );
+ );
- final JsonReader reader = new JsonReader(recordDef);
- reader.setRoot("instances");
- reader.setTotalProperty("totalCount");
- reader.setId("instanceId");
+ final JsonReader reader = new JsonReader(recordDef);
+ reader.setRoot("instances");
+ reader.setTotalProperty("totalCount");
+ reader.setId("instanceId");
- return reader;
- }
+ return reader;
+ }
- private static String getResourceUrl(MainView view, long parentId)
- {
- return view.getUrlBuilder().getProcessInstancesURL(parentId);
- }
+ private static String getResourceUrl(MainView view, long parentId)
+ {
+ return view.getUrlBuilder().getProcessInstancesURL(parentId);
+ }
}
Deleted: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceListEditor.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceListEditor.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceListEditor.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -1,181 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.bpm.console.client.process;
-
-import com.gwtext.client.data.Record;
-import com.gwtext.client.widgets.PaddedPanel;
-import com.gwtext.client.widgets.Panel;
-import com.gwtext.client.widgets.TabPanel;
-import com.gwtext.client.widgets.grid.RowSelectionModel;
-import com.gwtext.client.widgets.grid.event.RowSelectionListenerAdapter;
-import org.jboss.bpm.console.client.Editor;
-import org.jboss.bpm.console.client.MainView;
-import org.jboss.bpm.console.client.UIConstants;
-import org.jboss.bpm.console.client.model.ProcessDefinitionRef;
-import org.jboss.bpm.console.client.model.ProcessInstanceRef;
-import org.jboss.bpm.console.client.util.ModelChangeListener;
-import org.jboss.bpm.console.client.util.ModelListenerRegistry;
-import org.jboss.bpm.console.client.util.ModelModificationCallback;
-
-/**
- * @author Heiko.Braun <heiko.braun at jboss.com>
- *
- * @see org.jboss.bpm.console.client.process.ProcessDefinitionList#onExamine(int)
- */
-public class ProcessInstanceListEditor extends Editor
-{
- public final static String ID = "org.jboss.bpm.process.ProcessInstanceList";
-
- private MainView view;
- private ProcessDefinitionRef parent;
- private ProcessInstanceList instanceList;
-
- private Panel tokenEditorPanel;
- private ProcessInstanceRef selectedInstance;
-
- private ProcessInstanceDetailForm detailsForm;
- private TokenEditor currentTokenEditor;
-
- private TabPanel tabPanel;
-
- private ModelListenerRegistry modelListeners = new ModelListenerRegistry();
- private ModelModificationCallback modelModificationCallback;
-
- public ProcessInstanceListEditor(ProcessDefinitionRef proc, final MainView view)
- {
- super(view);
-
- this.parent = proc;
- this.view = view;
- this.setId( ProcessInstanceListEditor.createWidgetID(proc) );
-
- // --------------------------------------------------
-
- this.setWidth(UIConstants.EDITOR_WIDTH);
-
- modelModificationCallback = new ModelModificationCallback()
- {
- public void onStaleModel()
- {
- resetEditor();
- }
- };
-
- instanceList = new ProcessInstanceList(modelModificationCallback, proc, "Process Instances", view);
-
- // ---------------
-
- tabPanel = new TabPanel();
- tabPanel.setPaddings(10);
- tabPanel.setPlain(true);
- tabPanel.setActiveTab(0);
- tabPanel.setWidth(UIConstants.EDITOR_PANEL_WIDTH);
-
- PaddedPanel tabPadding = new PaddedPanel(tabPanel, 0,10,0,10);
-
- // ----------------------------------------
-
-
- detailsForm = new ProcessInstanceDetailForm(view, modelModificationCallback);
- modelListeners.addListener( (ModelChangeListener) detailsForm);
-
- // ----------------
-
-
- final RowSelectionModel sm = new RowSelectionModel(true);
- sm.addListener(
- new RowSelectionListenerAdapter()
- {
- public void onRowSelect(RowSelectionModel sm, int rowIndex, Record record)
- {
- selectedInstance = ProcessInstanceList.transform(record);
-
- modelListeners.fireRecordChangeEvent(record);
- modelListeners.fireModelChangeEvent(selectedInstance);
-
- // --------------------
-
- // token form update
- // TODO: can't this use ModelChangeListener callbacks as well?
- tokenEditorPanel.clear();
- currentTokenEditor = new TokenEditor(view, selectedInstance, modelModificationCallback);
- tokenEditorPanel.add( // TODO: LRU caching (i.e. last 5)
- currentTokenEditor
- );
- tokenEditorPanel.doLayout();
- }
- }
- );
- instanceList.setRowSelectionModel(sm);
-
-
- tokenEditorPanel = new Panel("Tokens");
- tokenEditorPanel.setIconCls("bpm-tools-icon");
-
- tabPanel.add( detailsForm );
- tabPanel.add(tokenEditorPanel);
-
-
- // ----------------------------------
-
- this.add(instanceList);
- this.add(tabPadding);
-
- }
-
- public String getEditorId()
- {
- return getId();
- }
-
- public String getTitle()
- {
- return parent.getName()+" (#"+parent.getVersion()+")";
- }
-
-
- public String getIconCSS()
- {
- return "bpm-instance-icon";
- }
-
- void resetEditor()
- {
- instanceList.reloadStore();
- selectedInstance = null;
-
- modelListeners.fireResetEvent();
-
- if(currentTokenEditor!=null)
- currentTokenEditor.resetEditor();
-
- tokenEditorPanel.clear();
- tokenEditorPanel.doLayout();
- }
-
- public static String createWidgetID(ProcessDefinitionRef proc)
- {
- return ProcessInstanceListEditor.ID+"."+proc.getName()+"."+proc.getVersion();
-
- }
-}
-
Copied: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceListView.java (from rev 3638, projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceListEditor.java)
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceListView.java (rev 0)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceListView.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -0,0 +1,181 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.bpm.console.client.process;
+
+import com.gwtext.client.data.Record;
+import com.gwtext.client.widgets.PaddedPanel;
+import com.gwtext.client.widgets.Panel;
+import com.gwtext.client.widgets.TabPanel;
+import com.gwtext.client.widgets.grid.RowSelectionModel;
+import com.gwtext.client.widgets.grid.event.RowSelectionListenerAdapter;
+import org.jboss.bpm.console.client.MainView;
+import org.jboss.bpm.console.client.UIConstants;
+import org.jboss.bpm.console.client.View;
+import org.jboss.bpm.console.client.model.ProcessDefinitionRef;
+import org.jboss.bpm.console.client.model.ProcessInstanceRef;
+import org.jboss.bpm.console.client.util.ModelChangeListener;
+import org.jboss.bpm.console.client.util.ModelListenerRegistry;
+import org.jboss.bpm.console.client.util.ModelModificationCallback;
+
+/**
+ * @author Heiko.Braun <heiko.braun at jboss.com>
+ * @see org.jboss.bpm.console.client.process.ProcessDefinitionList#onExamine(int)
+ */
+public class ProcessInstanceListView extends View
+{
+ public final static String ID = "org.jboss.bpm.process.ProcessInstanceList";
+
+ private MainView view;
+ private ProcessDefinitionRef parent;
+ private ProcessInstanceList instanceList;
+
+ private Panel tokenEditorPanel;
+ private ProcessInstanceRef selectedInstance;
+
+ private ProcessInstanceDetailForm detailsForm;
+ private TokenEditorComponent currentTokenEditor;
+
+ private TabPanel tabPanel;
+
+ private ModelListenerRegistry modelListeners = new ModelListenerRegistry();
+ private ModelModificationCallback modelModificationCallback;
+
+ public ProcessInstanceListView(ProcessDefinitionRef proc, final MainView view)
+ {
+ super(view);
+
+ this.parent = proc;
+ this.view = view;
+ this.setId(createWidgetID(proc));
+
+ this.setTitle(proc.getName() + " Instances");
+
+ // --------------------------------------------------
+
+ this.setWidth(UIConstants.EDITOR_WIDTH);
+
+ modelModificationCallback = new ModelModificationCallback()
+ {
+ public void onStaleModel()
+ {
+ resetEditor();
+ }
+ };
+
+ instanceList = new ProcessInstanceList(modelModificationCallback, proc, "Active", view);
+
+ // ---------------
+
+ tabPanel = new TabPanel();
+ tabPanel.setPaddings(10);
+ tabPanel.setPlain(true);
+ tabPanel.setActiveTab(0);
+ tabPanel.setWidth(UIConstants.EDITOR_PANEL_WIDTH);
+
+ PaddedPanel tabPadding = new PaddedPanel(tabPanel, 10, 0, 0, 0);
+
+ // ----------------------------------------
+
+
+ detailsForm = new ProcessInstanceDetailForm(view, modelModificationCallback);
+ modelListeners.addListener((ModelChangeListener) detailsForm);
+
+ // ----------------
+
+
+ final RowSelectionModel sm = new RowSelectionModel(true);
+ sm.addListener(
+ new RowSelectionListenerAdapter()
+ {
+ public void onRowSelect(RowSelectionModel sm, int rowIndex, Record record)
+ {
+ selectedInstance = ProcessInstanceList.transform(record);
+
+ modelListeners.fireRecordChangeEvent(record);
+ modelListeners.fireModelChangeEvent(selectedInstance);
+
+ // --------------------
+
+ // token form update
+ // TODO: can't this use ModelChangeListener callbacks as well?
+ tokenEditorPanel.clear();
+ currentTokenEditor = new TokenEditorComponent(view, selectedInstance, modelModificationCallback);
+ tokenEditorPanel.add( // TODO: LRU caching (i.e. last 5)
+ currentTokenEditor
+ );
+ tokenEditorPanel.doLayout();
+ }
+ }
+ );
+ instanceList.setRowSelectionModel(sm);
+
+
+ tokenEditorPanel = new Panel("Tokens");
+ tokenEditorPanel.setIconCls("bpm-tools-icon");
+
+ tabPanel.add(detailsForm);
+ tabPanel.add(tokenEditorPanel);
+
+ // ----------------------------------
+
+ this.add(instanceList);
+ this.add(tabPadding);
+
+ }
+
+ public String getViewId()
+ {
+ return getId();
+ }
+
+ public String getTitle()
+ {
+ return parent.getName() + " (#" + parent.getVersion() + ")";
+ }
+
+
+ public String getIconCSS()
+ {
+ return "bpm-instance-icon";
+ }
+
+ void resetEditor()
+ {
+ instanceList.reloadStore();
+ selectedInstance = null;
+
+ modelListeners.fireResetEvent();
+
+ if (currentTokenEditor != null)
+ currentTokenEditor.resetEditor();
+
+ tokenEditorPanel.clear();
+ tokenEditorPanel.doLayout();
+ }
+
+ public static String createWidgetID(ProcessDefinitionRef proc)
+ {
+ return ID + "." + proc.getName() + "." + proc.getVersion();
+
+ }
+}
+
Property changes on: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceListView.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Copied: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceView.java (from rev 3638, projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceEditor.java)
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceView.java (rev 0)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceView.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -0,0 +1,122 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.bpm.console.client.process;
+
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.widgets.*;
+import com.gwtext.client.widgets.event.ButtonListenerAdapter;
+import org.jboss.bpm.console.client.MainView;
+import org.jboss.bpm.console.client.UIConstants;
+import org.jboss.bpm.console.client.View;
+import org.jboss.bpm.console.client.model.ProcessDefinitionRef;
+import org.jboss.bpm.console.client.model.ProcessInstanceRef;
+
+/**
+ * @author Heiko.Braun <heiko.braun at jboss.com>
+ * @see ProcessInstanceList#onExamine(int)
+ */
+public class ProcessInstanceView extends View
+{
+ public final static String ID = "org.jboss.bpm.process.ProcessInstance";
+
+ private ProcessDefinitionRef processDefinition;
+
+ private ProcessInstanceRef processInstance;
+
+ private MainView mainView;
+
+ public ProcessInstanceView(final ProcessDefinitionRef proc, final ProcessInstanceRef instance, final MainView view)
+ {
+ super(view);
+ this.setId(ID + "." + instance.getInstanceId());
+
+ this.processDefinition = proc;
+ this.processInstance = instance;
+ this.mainView = view;
+
+ this.setTitle("# " + instance.getInstanceId());
+
+ // ----------------------------------
+
+ this.setPaddings(10);
+ this.setWidth(UIConstants.EDITOR_WIDTH);
+
+ this.setBorder(false);
+ this.setHeader(false);
+
+ // ----------------------------------
+
+ ProcessImageComponent imageView = new ProcessImageComponent(instance, view);
+ imageView.setWidth(UIConstants.EDITOR_PANEL_WIDTH);
+
+ Toolbar imageToolbar = new Toolbar();
+ imageToolbar.addFill();
+ ToolbarButton toolbarButton = new ToolbarButton("Enlarge",
+ new ButtonListenerAdapter()
+ {
+ public void onClick(Button button, EventObject e)
+ {
+
+ final Window window = new Window();
+ window.setTitle("Process Graph");
+ window.setClosable(true);
+ window.setWidth(800);
+ window.setHeight(600);
+ window.setPlain(true);
+ window.setCloseAction(Window.HIDE);
+ window.add(new ProcessImageComponent(instance, view));
+ window.show("");
+ }
+ }
+ );
+ toolbarButton.setIconCls("bpm-enlarge-icon");
+ imageToolbar.addButton(toolbarButton);
+ imageView.setBottomToolbar(imageToolbar);
+
+ PaddedPanel padding = new PaddedPanel(imageView, 5, 5, 0, 5);
+
+ // ----------------------------------
+
+ this.add(padding);
+ }
+
+ public String getViewId()
+ {
+ return ID + "." + processInstance.getInstanceId();
+ }
+
+ public String getTitle()
+ {
+ return "#" + processInstance.getInstanceId() + " (" + processDefinition.getName() + ")";
+ }
+
+
+ public String getIconCSS()
+ {
+ return "bpm-instance-icon";
+ }
+
+ public static String createWidgetID(ProcessDefinitionRef parent)
+ {
+ return ID + "." + parent.getName() + "." + parent.getVersion();
+ }
+}
Property changes on: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceView.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Deleted: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/TokenEditor.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/TokenEditor.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/TokenEditor.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -1,206 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.bpm.console.client.process;
-
-import org.jboss.bpm.console.client.util.ConsoleLog;
-import com.google.gwt.http.client.*;
-import com.gwtext.client.core.EventObject;
-import com.gwtext.client.data.Node;
-import com.gwtext.client.widgets.Panel;
-import com.gwtext.client.widgets.layout.ColumnLayout;
-import com.gwtext.client.widgets.layout.ColumnLayoutData;
-import com.gwtext.client.widgets.tree.TreeNode;
-import com.gwtext.client.widgets.tree.TreePanel;
-import com.gwtext.client.widgets.tree.event.TreeNodeListenerAdapter;
-import org.jboss.bpm.console.client.MainView;
-import org.jboss.bpm.console.client.UIConstants;
-import org.jboss.bpm.console.client.util.ModelModificationCallback;
-import org.jboss.bpm.console.client.model.ProcessInstanceRef;
-import org.jboss.bpm.console.client.model.jbpm3.TokenReference;
-
-/**
- * @author Heiko.Braun <heiko.braun at jboss.com>
- */
-public class TokenEditor extends Panel
-{
-
- private TokenForm tokenForm;
- private TokenTree tokenTree;
- private MainView mainView;
- private ModelModificationCallback callback;
-
- public TokenEditor(
- MainView mainView, final ProcessInstanceRef instance,
- ModelModificationCallback callback
- )
- {
- super();
-
- this.mainView = mainView;
- this.callback = callback;
-
- this.setHeader(false);
- this.setBorder(false);
- this.setFrame(false);
-
- this.setLayout(new ColumnLayout());
-
- // ----------------
-
- tokenTree = new TokenTree(instance.getRootToken(),
- new TokenSelectionCallback()
- {
- public void onSelectedToken(TokenReference tok)
- {
- // update form
- tokenForm.display(instance, tok);
- }
- }
- );
-
- tokenTree.expandAll();
-
- // ----------------
-
- tokenForm = new TokenForm(
- new SignalCallback()
- {
-
- public void onSignalToken(TokenReference tok, String signal)
- {
- remoteSignal(tok, signal);
- }
- }
- );
-
- // ----------------
-
- this.add(tokenTree, new ColumnLayoutData(0.3));
- this.add(tokenForm, new ColumnLayoutData(0.7));
- }
-
- public void resetEditor()
- {
- tokenForm.resetForm();
- }
-
- class TokenTree extends TreePanel
- {
- private TokenSelectionCallback callback;
-
- public TokenTree(final TokenReference rootToken,
- final TokenSelectionCallback callback)
- {
- this.callback = callback;
-
- this.setBorder(false);
-
- TreeNode outermost = new TreeNode("Tokens");
- TreeNode rootNode = buildTreeNode(rootToken);
- outermost.appendChild(rootNode);
-
- buildChildNodes(rootNode, rootToken);
-
- setRootVisible(true);
- setRootNode(outermost);
- outermost.setExpanded(true);
- }
-
- private void buildChildNodes(TreeNode parent, TokenReference rootToken)
- {
- for(final TokenReference childToken : rootToken.getChildren())
- {
- TreeNode child = buildTreeNode(childToken);
- buildChildNodes(child, childToken); // recursive
- parent.appendChild(child);
- }
- }
-
- private TreeNode buildTreeNode(final TokenReference tok)
- {
- TreeNode treeNode = new TreeNode("Token " +tok.getId());
- treeNode.setExpanded(true);
- treeNode.addListener(
- new TreeNodeListenerAdapter()
- {
- public void onClick(Node node, EventObject eventObject)
- {
- callback.onSelectedToken(tok);
- }
- }
- );
-
- if(!tok.canBeSignaled())
- treeNode.setIcon("images/icons/lock.png");
- return treeNode;
- }
- }
-
- interface TokenSelectionCallback
- {
- void onSelectedToken(TokenReference tok);
- }
-
- public interface SignalCallback
- {
- void onSignalToken(TokenReference tok, String signal);
- }
-
- private void remoteSignal(TokenReference tok, String signal)
- {
-
- String url = signal.equals(UIConstants.DEFAULT_TRANSITION) ?
- mainView.getUrlBuilder().getTokenSignalUrl(tok) :
- mainView.getUrlBuilder().getTokenSignalUrl(tok, signal);
-
- RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, url);
-
- try
- {
- rb.sendRequest(null,
- new RequestCallback() {
-
- public void onResponseReceived(Request request, Response response)
- {
- if(response.getStatusCode()!=200)
- ConsoleLog.error("Signaling failed: " +response.getText());
- else
- {
- resetEditor();
- callback.onStaleModel();
- }
- }
-
- public void onError(Request request, Throwable t)
- {
- // Unknown error
- ConsoleLog.error("Unknown error", t);
- }
- });
- }
- catch (RequestException e1)
- {
- ConsoleLog.error("Request failed", e1);
- }
- }
-}
-
Copied: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/TokenEditorComponent.java (from rev 3630, projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/TokenEditor.java)
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/TokenEditorComponent.java (rev 0)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/TokenEditorComponent.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -0,0 +1,207 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.bpm.console.client.process;
+
+import org.jboss.bpm.console.client.util.ConsoleLog;
+import com.google.gwt.http.client.*;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.data.Node;
+import com.gwtext.client.widgets.Panel;
+import com.gwtext.client.widgets.layout.ColumnLayout;
+import com.gwtext.client.widgets.layout.ColumnLayoutData;
+import com.gwtext.client.widgets.tree.TreeNode;
+import com.gwtext.client.widgets.tree.TreePanel;
+import com.gwtext.client.widgets.tree.event.TreeNodeListenerAdapter;
+import org.jboss.bpm.console.client.MainView;
+import org.jboss.bpm.console.client.UIConstants;
+import org.jboss.bpm.console.client.util.ModelModificationCallback;
+import org.jboss.bpm.console.client.model.ProcessInstanceRef;
+import org.jboss.bpm.console.client.model.jbpm3.TokenReference;
+
+/**
+ * @author Heiko.Braun <heiko.braun at jboss.com>
+ */
+public class TokenEditorComponent extends Panel
+{
+
+ private TokenForm tokenForm;
+ private TokenTree tokenTree;
+ private MainView mainView;
+ private ModelModificationCallback callback;
+
+ public TokenEditorComponent(
+ MainView mainView, final ProcessInstanceRef instance,
+ ModelModificationCallback callback
+ )
+ {
+ super();
+
+ this.mainView = mainView;
+ this.callback = callback;
+
+ this.setHeader(false);
+ this.setBorder(false);
+ this.setFrame(false);
+
+ this.setLayout(new ColumnLayout());
+
+ // ----------------
+
+ tokenTree = new TokenTree(instance.getRootToken(),
+ new TokenSelectionCallback()
+ {
+ public void onSelectedToken(TokenReference tok)
+ {
+ // update form
+ tokenForm.display(instance, tok);
+ }
+ }
+ );
+
+ tokenTree.expandAll();
+
+ // ----------------
+
+ tokenForm = new TokenForm(
+ new SignalCallback()
+ {
+
+ public void onSignalToken(TokenReference tok, String signal)
+ {
+ remoteSignal(tok, signal);
+ }
+ }
+ );
+
+ // ----------------
+
+ this.add(tokenTree, new ColumnLayoutData(0.3));
+ this.add(tokenForm, new ColumnLayoutData(0.7));
+ }
+
+ public void resetEditor()
+ {
+ tokenForm.resetForm();
+ }
+
+ class TokenTree extends TreePanel
+ {
+ private TokenSelectionCallback callback;
+
+ public TokenTree(final TokenReference rootToken,
+ final TokenSelectionCallback callback)
+ {
+ this.callback = callback;
+
+ this.setBorder(false);
+
+ TreeNode outermost = new TreeNode("Tokens");
+ TreeNode rootNode = buildTreeNode(rootToken);
+ outermost.appendChild(rootNode);
+
+ buildChildNodes(rootNode, rootToken);
+
+ setRootVisible(true);
+ setRootNode(outermost);
+ outermost.setExpanded(true);
+ }
+
+ private void buildChildNodes(TreeNode parent, TokenReference rootToken)
+ {
+ for (final TokenReference childToken : rootToken.getChildren())
+ {
+ TreeNode child = buildTreeNode(childToken);
+ buildChildNodes(child, childToken); // recursive
+ parent.appendChild(child);
+ }
+ }
+
+ private TreeNode buildTreeNode(final TokenReference tok)
+ {
+ TreeNode treeNode = new TreeNode("Token " + tok.getId());
+ treeNode.setExpanded(true);
+ treeNode.addListener(
+ new TreeNodeListenerAdapter()
+ {
+ public void onClick(Node node, EventObject eventObject)
+ {
+ callback.onSelectedToken(tok);
+ }
+ }
+ );
+
+ if (!tok.canBeSignaled())
+ treeNode.setIcon("images/icons/lock.png");
+ return treeNode;
+ }
+ }
+
+ interface TokenSelectionCallback
+ {
+ void onSelectedToken(TokenReference tok);
+ }
+
+ public interface SignalCallback
+ {
+ void onSignalToken(TokenReference tok, String signal);
+ }
+
+ private void remoteSignal(TokenReference tok, String signal)
+ {
+
+ String url = signal.equals(UIConstants.DEFAULT_TRANSITION) ?
+ mainView.getUrlBuilder().getTokenSignalUrl(tok) :
+ mainView.getUrlBuilder().getTokenSignalUrl(tok, signal);
+
+ RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, url);
+
+ try
+ {
+ rb.sendRequest(null,
+ new RequestCallback()
+ {
+
+ public void onResponseReceived(Request request, Response response)
+ {
+ if (response.getStatusCode() != 200)
+ ConsoleLog.error("Signaling failed: " + response.getText());
+ else
+ {
+ resetEditor();
+ callback.onStaleModel();
+ }
+ }
+
+ public void onError(Request request, Throwable t)
+ {
+ // Unknown error
+ ConsoleLog.error("Unknown error", t);
+ }
+ });
+ }
+ catch (RequestException e1)
+ {
+ ConsoleLog.error("Request failed", e1);
+ }
+ }
+}
+
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/TokenForm.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/TokenForm.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/TokenForm.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -41,114 +41,113 @@
*/
public class TokenForm extends Panel
{
- private final FormPanel tokenForm;
- private final Button signalButton;
- private TokenReference lastSelectedToken;
-
- public TokenForm(final TokenEditor.SignalCallback callback)
- {
- super();
+ private final FormPanel tokenForm;
+ private final Button signalButton;
+ private TokenReference lastSelectedToken;
- this.setHeader(false);
- this.setBorder(false);
- this.setFrame(false);
+ public TokenForm(final TokenEditorComponent.SignalCallback callback)
+ {
+ super();
- tokenForm = new FormPanel();
- tokenForm.setLabelAlign(Position.LEFT);
- tokenForm.setWidth(UIConstants.EDITOR_PANEL_WIDTH);
- tokenForm.setHeader(false);
- tokenForm.setFrame(false);
- tokenForm.setBorder(false);
- tokenForm.setPaddings(5, 5, 5, 0);
- tokenForm.setLabelWidth(50);
+ this.setHeader(false);
+ this.setBorder(false);
+ this.setFrame(false);
- // ----------
+ tokenForm = new FormPanel();
+ tokenForm.setLabelAlign(Position.LEFT);
+ tokenForm.setWidth(UIConstants.EDITOR_PANEL_WIDTH);
+ tokenForm.setHeader(false);
+ tokenForm.setFrame(false);
+ tokenForm.setBorder(false);
+ tokenForm.setPaddings(5, 5, 5, 0);
+ tokenForm.setLabelWidth(50);
- TextField idField = new TextField("Id", "id", 230);
- idField.setReadOnly(true);
- tokenForm.add(idField);
+ // ----------
- //tokenForm.add(new TextField("Token Name", "name", 230));
- TextField nameField = new TextField("Node Name", "nodeName", 230);
- nameField.setReadOnly(true);
- tokenForm.add(nameField);
+ TextField idField = new TextField("Id", "id", 230);
+ idField.setReadOnly(true);
+ tokenForm.add(idField);
+ //tokenForm.add(new TextField("Token Name", "name", 230));
+ TextField nameField = new TextField("Node Name", "nodeName", 230);
+ nameField.setReadOnly(true);
+ tokenForm.add(nameField);
- // ----------
- RefreshableComboBox cb = new RefreshableComboBox("signal", "Signal");
- tokenForm.add(cb);
+ // ----------
+ RefreshableComboBox cb = new RefreshableComboBox("signal", "Signal");
+ tokenForm.add(cb);
- final ButtonListenerAdapter listenerAdapter = new ButtonListenerAdapter()
+ final ButtonListenerAdapter listenerAdapter = new ButtonListenerAdapter()
+ {
+ public void onClick(Button button, EventObject eventObject)
{
- public void onClick(Button button, EventObject eventObject)
- {
- ComboBox cb = (ComboBox)tokenForm.getForm().findField("signal");
-
- String signalValue = cb.getValueAsString();
- if(signalValue.equals(""))
- MessageBox.alert("Please select a signal");
- else
- callback.onSignalToken(lastSelectedToken, signalValue);
- }
+ ComboBox cb = (ComboBox) tokenForm.getForm().findField("signal");
- };
- signalButton = new Button("Signal", listenerAdapter);
+ String signalValue = cb.getValueAsString();
+ if (signalValue.equals(""))
+ MessageBox.alert("Please select a signal");
+ else
+ callback.onSignalToken(lastSelectedToken, signalValue);
+ }
+ };
+ signalButton = new Button("Signal", listenerAdapter);
- tokenForm.addButton(signalButton);
- // -------------------
+ tokenForm.addButton(signalButton);
- this.add(tokenForm);
+ // -------------------
- }
+ this.add(tokenForm);
- /**
- * display the root token
- */
- void display(ProcessInstanceRef processInstance)
- {
- display(processInstance, processInstance.getRootToken());
- }
+ }
- /**
- * display a particular token
- */
- void display(final ProcessInstanceRef processInstance, final TokenReference tok)
- {
- Form form = tokenForm.getForm();
+ /**
+ * display the root token
+ */
+ void display(ProcessInstanceRef processInstance)
+ {
+ display(processInstance, processInstance.getRootToken());
+ }
- if(form.findField("id")!=null) // TODO: the fields are not initialized on first callback?
- {
- form.findField("id").setRawValue(tok.getId()+"");
- form.findField("nodeName").setRawValue(tok.getCurrentNodeName());
+ /**
+ * display a particular token
+ */
+ void display(final ProcessInstanceRef processInstance, final TokenReference tok)
+ {
+ Form form = tokenForm.getForm();
- // display combo box
- RefreshableComboBox cb = (RefreshableComboBox)form.findField("signal");
- cb.reset();
- cb.display( tok.getAvailableSignals());
-
- // suspended instances cannot be signaled
- if(processInstance.isSuspended() || !tok.canBeSignaled())
- {
- signalButton.disable();
- cb.disable();
- }
- else
- {
- signalButton.enable();
- cb.enable();
- }
+ if (form.findField("id") != null) // TODO: the fields are not initialized on first callback?
+ {
+ form.findField("id").setRawValue(tok.getId() + "");
+ form.findField("nodeName").setRawValue(tok.getCurrentNodeName());
+
+ // display combo box
+ RefreshableComboBox cb = (RefreshableComboBox) form.findField("signal");
+ cb.reset();
+ cb.display(tok.getAvailableSignals());
+
+ // suspended instances cannot be signaled
+ if (processInstance.isSuspended() || !tok.canBeSignaled())
+ {
+ signalButton.disable();
+ cb.disable();
}
+ else
+ {
+ signalButton.enable();
+ cb.enable();
+ }
+ }
- // -----------
+ // -----------
- lastSelectedToken = tok;
- }
-
- public void resetForm()
- {
- tokenForm.getForm().reset();
- }
+ lastSelectedToken = tok;
+ }
+
+ public void resetForm()
+ {
+ tokenForm.getForm().reset();
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/report/BirtPanel.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/report/BirtPanel.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/report/BirtPanel.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -29,23 +29,23 @@
*/
public class BirtPanel extends Panel
{
- private Frame frame;
+ private Frame frame;
- public BirtPanel()
- {
- setHeader(false);
- setWidth(660);
- setHeight(450);
+ public BirtPanel()
+ {
+ setHeader(false);
+ setWidth(660);
+ setHeight(450);
- frame = new Frame();
- frame.setWidth("660");
- frame.setHeight("448");
-
- add(frame);
- }
+ frame = new Frame();
+ frame.setWidth("660");
+ frame.setHeight("448");
- public void setUrl(String url)
- {
- frame.setUrl(url);
- }
+ add(frame);
+ }
+
+ public void setUrl(String url)
+ {
+ frame.setUrl(url);
+ }
}
Deleted: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/report/OverviewReportEditor.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/report/OverviewReportEditor.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/report/OverviewReportEditor.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -1,183 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.bpm.console.client.report;
-
-import com.gwtext.client.core.EventObject;
-import com.gwtext.client.data.*;
-import com.gwtext.client.widgets.Button;
-import com.gwtext.client.widgets.Component;
-import com.gwtext.client.widgets.Panel;
-import com.gwtext.client.widgets.MessageBox;
-import com.gwtext.client.widgets.event.ButtonListenerAdapter;
-import com.gwtext.client.widgets.event.PanelListenerAdapter;
-import com.gwtext.client.widgets.form.ComboBox;
-import com.gwtext.client.widgets.form.Label;
-import com.gwtext.client.widgets.layout.HorizontalLayout;
-import com.gwtext.client.widgets.layout.VerticalLayout;
-import com.gwtext.client.widgets.menu.Separator;
-import org.jboss.bpm.console.client.Editor;
-import org.jboss.bpm.console.client.MainView;
-import org.jboss.bpm.console.client.util.ConsoleLog;
-
-/**
- * @author Heiko.Braun <heiko.braun at jboss.com>
- */
-public class OverviewReportEditor extends Editor
-{
- public final static String ID = "org.jboss.bpm.metric.ProcessMetricOverview";
- private MainView view;
-
- public OverviewReportEditor(final MainView view)
- {
- super(view);
- this.view = view;
- this.setId(ID);
- this.setPaddings(10);
-
- // -------------------------------------
- this.setLayout(new VerticalLayout(10) );
-
- this.addListener(
- new PanelListenerAdapter()
- {
- public void onRender(Component component)
- {
- Panel panel = new Panel("Metric overview");
- panel.setPaddings(10);
-
- final String reportUrl= view.getUrlBuilder().getOverviewReportUrl();
- ConsoleLog.debug("Report resource:" + reportUrl);
-
- final ComboBox comboBox = buildProcessSelection();
-
- final BirtPanel birtPanel = new BirtPanel();
- birtPanel.setUrl(reportUrl);
-
- // --
-
- Button refreshBtn = new Button("Refresh", new ButtonListenerAdapter()
- {
-
- public void onClick(Button button, EventObject eventObject)
- {
- birtPanel.setUrl(reportUrl);
- }
- });
-
- Button viewBtn = new Button("Examine", new ButtonListenerAdapter()
- {
-
- public void onClick(Button button, EventObject eventObject)
- {
- String rawValue = comboBox.getRawValue();
- if(rawValue==null || rawValue.equals(""))
- MessageBox.alert("Please enter a process definition name!");
- else
- onExamine(rawValue);
- }
- });
-
- // --
-
- Panel toolsPanel = new Panel();
- toolsPanel.setLayout( new HorizontalLayout(10) );
- Label label = new Label("Process definition");
- label.setStyleName("bpm-label");
- toolsPanel.add(label);
- toolsPanel.add(comboBox);
- toolsPanel.add( viewBtn );
- toolsPanel.add( new Separator() );
- toolsPanel.add( refreshBtn );
-
- panel.add(toolsPanel);
- panel.add(birtPanel);
-
- add(panel);
- }
- }
- );
- }
-
-
- private void onExamine(String definitionName)
- {
- String editorId = ProcessReportEditor.createWidgetID(definitionName);
-
- if(view.hasEditor(editorId))
- view.showEditor(editorId);
- else
- view.addEditor( new ProcessReportEditor(definitionName, view) );
- }
-
- private ComboBox buildProcessSelection()
- {
-
- final RecordDef recordDef = new RecordDef(
- new FieldDef[]{
- new IntegerFieldDef("processId"),
- new StringFieldDef("name"),
- new StringFieldDef("version")
- }
- );
-
- final JsonReader reader = new JsonReader(recordDef);
- reader.setRoot("definitions");
- reader.setTotalProperty("totalCount");
- reader.setId("processId");
-
- DataProxy dataProxy = new ScriptTagProxy(
- view.getUrlBuilder().getProcessDefinitionsURL(), 1000*10);
-
- final Store store = new Store(dataProxy, reader, false);
- store.load();
-
- ComboBox cb = new ComboBox();
- cb.setMinChars(1);
- cb.setFieldLabel("Process definition");
- cb.setStore(store);
- cb.setDisplayField("name");
- cb.setMode(ComboBox.LOCAL);
- cb.setTriggerAction(ComboBox.ALL);
- cb.setEmptyText("Please enter a name");
- cb.setLoadingText("Searching...");
- cb.setTypeAhead(true);
- cb.setSelectOnFocus(true);
- cb.setWidth(180);
-
- return cb;
- }
-
- public String getEditorId()
- {
- return ID;
- }
-
- public String getTitle()
- {
- return "Metrics and Stats";
- }
-
- public String getIconCSS()
- {
- return "bpm-report-icon";
- }
-}
Deleted: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/report/ProcessReportEditor.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/report/ProcessReportEditor.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/report/ProcessReportEditor.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -1,181 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.bpm.console.client.report;
-
-import org.jboss.bpm.console.client.MainView;
-import org.jboss.bpm.console.client.Editor;
-import org.jboss.bpm.console.client.UIConstants;
-import org.jboss.bpm.console.client.util.ConsoleLog;
-import com.gwtext.client.widgets.layout.VerticalLayout;
-import com.gwtext.client.widgets.layout.HorizontalLayout;
-import com.gwtext.client.widgets.event.PanelListenerAdapter;
-import com.gwtext.client.widgets.event.ButtonListenerAdapter;
-import com.gwtext.client.widgets.Component;
-import com.gwtext.client.widgets.Button;
-import com.gwtext.client.widgets.MessageBox;
-import com.gwtext.client.widgets.Panel;
-import com.gwtext.client.widgets.menu.Separator;
-import com.gwtext.client.widgets.form.ComboBox;
-import com.gwtext.client.widgets.form.Label;
-import com.gwtext.client.core.EventObject;
-import com.gwtext.client.data.*;
-
-/**
- * @author Heiko.Braun <heiko.braun at jboss.com>
- */
-public class ProcessReportEditor extends Editor
-{
- public final static String ID = "org.jboss.bpm.metric.ProcessMetric";
- private String definitionName;
- private MainView view;
-
- public ProcessReportEditor(final String definitionName, final MainView view)
- {
- super(view);
- this.definitionName = definitionName;
- this.view = view;
- this.setId( createWidgetID(definitionName) );
-
- this.setPaddings(10);
-
- // -------------------------------------
- this.setLayout(new VerticalLayout(10) );
-
- this.addListener(
- new PanelListenerAdapter()
- {
-
- public void onRender(Component component)
- {
-
- final String reportUrl= view.getUrlBuilder().getDefinitionReportUrl(definitionName);
- ConsoleLog.debug("Report resource:" + reportUrl);
-
- final ComboBox comboBox = buildInstanceSelection();
-
- final BirtPanel birtPanel = new BirtPanel();
- birtPanel.setUrl(reportUrl);
-
- // --
-
- Button refreshBtn = new Button("Refresh", new ButtonListenerAdapter()
- {
-
- public void onClick(Button button, EventObject eventObject)
- {
- birtPanel.setUrl(reportUrl);
- }
- });
-
- Button viewBtn = new Button("Examine", new ButtonListenerAdapter()
- {
-
- public void onClick(Button button, EventObject eventObject)
- {
- String rawValue = comboBox.getRawValue();
- if(rawValue==null || rawValue.equals(""))
- MessageBox.alert("Please enter a process instance ID!");
- else
- MessageBox.alert("Not implemented");
- }
- });
-
- // --
-
- Panel p = new Panel();
- p.setLayout( new HorizontalLayout(10) );
- Label label = new Label("Instance ID");
- label.setStyleName("bpm-label");
- p.add(label);
- p.add(comboBox);
- p.add( viewBtn );
- p.add( new Separator() );
- p.add( refreshBtn );
-
- add(p);
- add(birtPanel);
- }
- }
- );
- }
-
- private ComboBox buildInstanceSelection()
- {
-
- final RecordDef recordDef = new RecordDef(
- new FieldDef[]{
- new IntegerFieldDef("instanceId"),
- new IntegerFieldDef("parentId"),
- new StringFieldDef("key"),
- new StringFieldDef("state"),
- new DateFieldDef("startDate", UIConstants.DATE_FORMAT),
- new DateFieldDef("endDate", UIConstants.DATE_FORMAT),
- new BooleanFieldDef("suspended")
- }
- );
-
- final JsonReader reader = new JsonReader(recordDef);
- reader.setRoot("instances");
- reader.setTotalProperty("totalCount");
- reader.setId("instanceId");
-
- DataProxy dataProxy = new ScriptTagProxy(
- view.getUrlBuilder().getProcessDefinitionsURL(), 1000*10);
-
- final Store store = new Store(dataProxy, reader, false);
- store.load();
-
- ComboBox cb = new ComboBox();
- cb.setMinChars(1);
- cb.setFieldLabel("Instance ID");
- cb.setStore(store);
- cb.setDisplayField("ID");
- cb.setMode(ComboBox.LOCAL);
- cb.setTriggerAction(ComboBox.ALL);
- cb.setEmptyText("Please enter an ID");
- cb.setLoadingText("Searching...");
- cb.setTypeAhead(true);
- cb.setSelectOnFocus(true);
- cb.setWidth(180);
-
- return cb;
- }
- public String getEditorId()
- {
- return createWidgetID(definitionName);
- }
-
- public String getTitle()
- {
- return definitionName +" Metrics";
- }
-
- public String getIconCSS()
- {
- return "bpm-report-icon";
- }
-
- public static String createWidgetID(String definitionName)
- {
- return ID+"."+definitionName;
- }
-}
Copied: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/report/ProcessReportView.java (from rev 3636, projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/report/ProcessReportEditor.java)
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/report/ProcessReportView.java (rev 0)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/report/ProcessReportView.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -0,0 +1,182 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.bpm.console.client.report;
+
+import org.jboss.bpm.console.client.MainView;
+import org.jboss.bpm.console.client.UIConstants;
+import org.jboss.bpm.console.client.View;
+import org.jboss.bpm.console.client.util.ConsoleLog;
+import com.gwtext.client.widgets.layout.VerticalLayout;
+import com.gwtext.client.widgets.layout.HorizontalLayout;
+import com.gwtext.client.widgets.event.PanelListenerAdapter;
+import com.gwtext.client.widgets.event.ButtonListenerAdapter;
+import com.gwtext.client.widgets.Component;
+import com.gwtext.client.widgets.Button;
+import com.gwtext.client.widgets.MessageBox;
+import com.gwtext.client.widgets.Panel;
+import com.gwtext.client.widgets.menu.Separator;
+import com.gwtext.client.widgets.form.ComboBox;
+import com.gwtext.client.widgets.form.Label;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.data.*;
+
+/**
+ * @author Heiko.Braun <heiko.braun at jboss.com>
+ */
+public class ProcessReportView extends View
+{
+ public final static String ID = "org.jboss.bpm.metric.ProcessMetric";
+ private String definitionName;
+ private MainView mainView;
+
+ public ProcessReportView(final String definitionName, final MainView view)
+ {
+ super(view);
+ this.definitionName = definitionName;
+ this.mainView = view;
+ this.setId(createWidgetID(definitionName));
+ this.setTitle(definitionName + " Report");
+ this.setPaddings(10);
+
+ // -------------------------------------
+ this.setLayout(new VerticalLayout(10));
+
+ this.addListener(
+ new PanelListenerAdapter()
+ {
+
+ public void onRender(Component component)
+ {
+
+ final String reportUrl = view.getUrlBuilder().getDefinitionReportUrl(definitionName);
+ ConsoleLog.debug("Report resource:" + reportUrl);
+
+ final ComboBox comboBox = buildInstanceSelection();
+
+ final BirtPanel birtPanel = new BirtPanel();
+ birtPanel.setUrl(reportUrl);
+
+ // --
+
+ Button refreshBtn = new Button("Refresh", new ButtonListenerAdapter()
+ {
+
+ public void onClick(Button button, EventObject eventObject)
+ {
+ birtPanel.setUrl(reportUrl);
+ }
+ });
+
+ Button viewBtn = new Button("Examine", new ButtonListenerAdapter()
+ {
+
+ public void onClick(Button button, EventObject eventObject)
+ {
+ String rawValue = comboBox.getRawValue();
+ if (rawValue == null || rawValue.equals(""))
+ MessageBox.alert("Please enter a process instance ID!");
+ else
+ MessageBox.alert("Not implemented");
+ }
+ });
+
+ // --
+
+ Panel p = new Panel();
+ p.setLayout(new HorizontalLayout(10));
+ Label label = new Label("Instance ID");
+ label.setStyleName("bpm-label");
+ p.add(label);
+ p.add(comboBox);
+ p.add(viewBtn);
+ p.add(new Separator());
+ p.add(refreshBtn);
+
+ add(p);
+ add(birtPanel);
+ }
+ }
+ );
+ }
+
+ private ComboBox buildInstanceSelection()
+ {
+
+ final RecordDef recordDef = new RecordDef(
+ new FieldDef[]{
+ new IntegerFieldDef("instanceId"),
+ new IntegerFieldDef("parentId"),
+ new StringFieldDef("key"),
+ new StringFieldDef("state"),
+ new DateFieldDef("startDate", UIConstants.DATE_FORMAT),
+ new DateFieldDef("endDate", UIConstants.DATE_FORMAT),
+ new BooleanFieldDef("suspended")
+ }
+ );
+
+ final JsonReader reader = new JsonReader(recordDef);
+ reader.setRoot("instances");
+ reader.setTotalProperty("totalCount");
+ reader.setId("instanceId");
+
+ DataProxy dataProxy = new ScriptTagProxy(
+ mainView.getUrlBuilder().getProcessDefinitionsURL(), 1000 * 10);
+
+ final Store store = new Store(dataProxy, reader, false);
+ store.load();
+
+ ComboBox cb = new ComboBox();
+ cb.setMinChars(1);
+ cb.setFieldLabel("Instance ID");
+ cb.setStore(store);
+ cb.setDisplayField("ID");
+ cb.setMode(ComboBox.LOCAL);
+ cb.setTriggerAction(ComboBox.ALL);
+ cb.setEmptyText("Please enter an ID");
+ cb.setLoadingText("Searching...");
+ cb.setTypeAhead(true);
+ cb.setSelectOnFocus(true);
+ cb.setWidth(180);
+
+ return cb;
+ }
+
+ public String getViewId()
+ {
+ return createWidgetID(definitionName);
+ }
+
+ public String getTitle()
+ {
+ return definitionName + " Report";
+ }
+
+ public String getIconCSS()
+ {
+ return "bpm-report-icon";
+ }
+
+ public static String createWidgetID(String definitionName)
+ {
+ return ID + "." + definitionName;
+ }
+}
Copied: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/report/ReportEditor.java (from rev 3636, projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/report/OverviewReportEditor.java)
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/report/ReportEditor.java (rev 0)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/report/ReportEditor.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -0,0 +1,247 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.bpm.console.client.report;
+
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.data.*;
+import com.gwtext.client.widgets.*;
+import com.gwtext.client.widgets.tree.TreePanel;
+import com.gwtext.client.widgets.tree.TreeNode;
+import com.gwtext.client.widgets.tree.event.TreeNodeListenerAdapter;
+import com.gwtext.client.widgets.event.ButtonListenerAdapter;
+import com.gwtext.client.widgets.event.PanelListenerAdapter;
+import com.gwtext.client.widgets.form.ComboBox;
+import com.gwtext.client.widgets.form.Label;
+import com.gwtext.client.widgets.layout.HorizontalLayout;
+import com.gwtext.client.widgets.layout.VerticalLayout;
+import com.gwtext.client.widgets.menu.Separator;
+import org.jboss.bpm.console.client.Editor;
+import org.jboss.bpm.console.client.MainView;
+import org.jboss.bpm.console.client.MenuSection;
+import org.jboss.bpm.console.client.View;
+import org.jboss.bpm.console.client.util.ConsoleLog;
+
+/**
+ * @author Heiko.Braun <heiko.braun at jboss.com>
+ */
+public class ReportEditor extends Editor
+{
+ public final static String ID = "org.jboss.bpm.metric.ProcessMetricOverview";
+ private MainView mainView;
+
+ public ReportEditor(final MainView view)
+ {
+ super(view);
+ this.mainView = view;
+ this.setId(ID);
+ this.setPaddings(10);
+
+ // -------------------------------------
+ this.setLayout(new VerticalLayout(10));
+
+ this.addListener(
+ new PanelListenerAdapter()
+ {
+ public void onRender(Component component)
+ {
+
+ final String reportUrl = view.getUrlBuilder().getOverviewReportUrl();
+ ConsoleLog.debug("Report resource:" + reportUrl);
+
+ final ComboBox comboBox = buildProcessSelection();
+
+ final BirtPanel birtPanel = new BirtPanel();
+ birtPanel.setUrl(reportUrl);
+
+ // --
+
+ Button refreshBtn = new Button("Refresh", new ButtonListenerAdapter()
+ {
+
+ public void onClick(Button button, EventObject eventObject)
+ {
+ birtPanel.setUrl(reportUrl);
+ }
+ });
+
+ Button viewBtn = new Button("Examine", new ButtonListenerAdapter()
+ {
+
+ public void onClick(Button button, EventObject eventObject)
+ {
+ String rawValue = comboBox.getRawValue();
+ if (rawValue == null || rawValue.equals(""))
+ MessageBox.alert("Please enter a process definition name!");
+ else
+ onExamine(rawValue);
+ }
+ });
+
+ // --
+
+ Panel toolsPanel = new Panel();
+ toolsPanel.setLayout(new HorizontalLayout(10));
+ Label label = new Label("Process definition");
+ label.setStyleName("bpm-label");
+ toolsPanel.add(label);
+ toolsPanel.add(comboBox);
+ toolsPanel.add(viewBtn);
+ toolsPanel.add(new Separator());
+ toolsPanel.add(refreshBtn);
+
+ final View defaultView = new View(main)
+ {
+
+ public String getViewId()
+ {
+ return getEditorId() + ".defaultView";
+ }
+
+ public String getIconCSS()
+ {
+ return "";
+ }
+ };
+
+ defaultView.setBorder(false);
+ defaultView.setTitle("Metric Overview");
+
+
+ defaultView.add(toolsPanel);
+ defaultView.add(birtPanel);
+
+ addView(defaultView, false);
+ }
+ }
+ );
+ }
+
+
+ private void onExamine(String definitionName)
+ {
+ String viewId = ProcessReportView.createWidgetID(definitionName);
+ Editor editor = (Editor) ComponentMgr.getComponent(ReportEditor.ID);
+
+ if (editor.hasView(viewId))
+ editor.showView(viewId);
+ else
+ editor.addView(new ProcessReportView(definitionName, mainView), true);
+ }
+
+ private ComboBox buildProcessSelection()
+ {
+
+ final RecordDef recordDef = new RecordDef(
+ new FieldDef[]{
+ new IntegerFieldDef("processId"),
+ new StringFieldDef("name"),
+ new StringFieldDef("version")
+ }
+ );
+
+ final JsonReader reader = new JsonReader(recordDef);
+ reader.setRoot("definitions");
+ reader.setTotalProperty("totalCount");
+ reader.setId("processId");
+
+ DataProxy dataProxy = new ScriptTagProxy(
+ mainView.getUrlBuilder().getProcessDefinitionsURL(), 1000 * 10);
+
+ final Store store = new Store(dataProxy, reader, false);
+ store.load();
+
+ ComboBox cb = new ComboBox();
+ cb.setMinChars(1);
+ cb.setFieldLabel("Process definition");
+ cb.setStore(store);
+ cb.setDisplayField("name");
+ cb.setMode(ComboBox.LOCAL);
+ cb.setTriggerAction(ComboBox.ALL);
+ cb.setEmptyText("Please enter a name");
+ cb.setLoadingText("Searching...");
+ cb.setTypeAhead(true);
+ cb.setSelectOnFocus(true);
+ cb.setWidth(180);
+
+ return cb;
+ }
+
+ public String getEditorId()
+ {
+ return ID;
+ }
+
+ public String getTitle()
+ {
+ return "Metrics and Stats";
+ }
+
+ public String getIconCSS()
+ {
+ return "bpm-report-icon";
+ }
+
+ public MenuSection provideMenuSection()
+ {
+ return new MenuSection("Metrics and Stats", "bpm-metric-icon", new MetricTree());
+ }
+
+ class MetricTree extends TreePanel
+ {
+
+ public MetricTree()
+ {
+
+ TreeNode root = new TreeNode("Process Metrics");
+
+ TreeNode overview = new TreeNode("Process workload");
+ overview.setExpanded(true);
+ overview.addListener(
+ new TreeNodeListenerAdapter()
+ {
+ public void onClick(Node node, EventObject eventObject)
+ {
+ if (mainView.hasEditor(ReportEditor.ID))
+ {
+ mainView.showEditor(ReportEditor.ID);
+ }
+ else
+ {
+ mainView.addEditor(new ReportEditor(mainView));
+ }
+
+ }
+ }
+ );
+
+ TreeNode export = new TreeNode("Export stats");
+ export.setExpanded(true);
+
+ root.appendChild(overview);
+ root.appendChild(export);
+
+ setRootVisible(true);
+ setRootNode(root);
+ root.setExpanded(true);
+ }
+ }
+}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/AssignmentCallback.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/AssignmentCallback.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/AssignmentCallback.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -26,7 +26,7 @@
*/
interface AssignmentCallback
{
- void onAssignmentDone();
+ void onAssignmentDone();
- void onTaskEnd();
+ void onTaskEnd();
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/AssignmentFormPanel.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/AssignmentFormPanel.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/AssignmentFormPanel.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -49,188 +49,190 @@
*/
class AssignmentFormPanel extends Panel implements ModelChangeListener
{
- private FormPanel formPanel;
+ private FormPanel formPanel;
- private MainView mainView;
- private AssignmentCallback callback;
+ private MainView mainView;
+ private AssignmentCallback callback;
- private List<String> availableActors;
- private TaskRef selectedInstance;
+ private List<String> availableActors;
+ private TaskRef selectedInstance;
- public AssignmentFormPanel(MainView mainView, AssignmentCallback callback)
- {
- super();
- this.mainView = mainView;
- this.callback = callback;
+ public AssignmentFormPanel(MainView mainView, AssignmentCallback callback)
+ {
+ super();
+ this.mainView = mainView;
+ this.callback = callback;
- setTitle("Reassign Task");
- setBorder(false);
- setFrame(false);
- setIconCls("bpm-tools-icon");
+ setTitle("Reassign Task");
+ setBorder(false);
+ setFrame(false);
+ setIconCls("bpm-tools-icon");
- // ---------------
+ // ---------------
- formPanel = FormWidgets.createBaseFormPanel();
- RefreshableComboBox cb = new RefreshableComboBox("actorId", "Actor");
- formPanel.add(cb);
+ formPanel = FormWidgets.createBaseFormPanel();
+ RefreshableComboBox cb = new RefreshableComboBox("actorId", "Actor");
+ formPanel.add(cb);
- final Button assignBtn = new Button("Delegate",
- new ButtonListenerAdapter()
- {
+ final Button assignBtn = new Button("Delegate",
+ new ButtonListenerAdapter()
+ {
- public void onClick(Button button, EventObject eventObject)
- {
- Form form = formPanel.getForm();
- RefreshableComboBox cb = (RefreshableComboBox)form.findField("actorId");
- String rawValue = cb.getRawValue();
+ public void onClick(Button button, EventObject eventObject)
+ {
+ Form form = formPanel.getForm();
+ RefreshableComboBox cb = (RefreshableComboBox) form.findField("actorId");
+ String rawValue = cb.getRawValue();
- if(null==rawValue || rawValue.equals(""))
- {
- MessageBox.alert("Please select an actor.");
- return;
- }
+ if (null == rawValue || rawValue.equals(""))
+ {
+ MessageBox.alert("Please select an actor.");
+ return;
+ }
- if(null==selectedInstance)
- throw new IllegalArgumentException("Task selection cannot be null");
+ if (null == selectedInstance)
+ throw new IllegalArgumentException("Task selection cannot be null");
- reassignTask(selectedInstance.getId(), rawValue);
- }
- }
- );
+ reassignTask(selectedInstance.getId(), rawValue);
+ }
+ }
+ );
- formPanel.add(assignBtn);
- this.add(formPanel);
+ formPanel.add(assignBtn);
+ this.add(formPanel);
- // ---------------
- this.addListener(
- new PanelListenerAdapter()
- {
- public void onAfterLayout(Container container)
- {
- refreshComboBox();
- }
- }
- );
+ // ---------------
+ this.addListener(
+ new PanelListenerAdapter()
+ {
+ public void onAfterLayout(Container container)
+ {
+ refreshComboBox();
+ }
+ }
+ );
- }
+ }
- public void onModelChange(ModelListenerRegistry parent, Object changeEvent)
- {
- selectedInstance= (TaskRef)changeEvent;
- availableActors = null;
+ public void onModelChange(ModelListenerRegistry parent, Object changeEvent)
+ {
+ selectedInstance = (TaskRef) changeEvent;
+ availableActors = null;
- boolean hasPooledActors = selectedInstance.getPooledActors().size()>0;
- if(hasPooledActors)
- {
- // has pooled actors -> can be asigned to pooled actors only
- availableActors = selectedInstance.getPooledActors();
- }
- else if(!hasPooledActors &&
- TaskRef.STATE.ASSIGNED ==selectedInstance.getCurrentState())
- {
- // no pooled actors but an assigned actor
- loadActors();
- }
- else
- {
- // no pooled actors and no assignee
- // should be covered by assignment handler
- throw new IllegalStateException(selectedInstance + " has no pooled actors and no assignee");
- }
+ boolean hasPooledActors = selectedInstance.getPooledActors().size() > 0;
+ if (hasPooledActors)
+ {
+ // has pooled actors -> can be asigned to pooled actors only
+ availableActors = selectedInstance.getPooledActors();
+ }
+ else if (!hasPooledActors &&
+ TaskRef.STATE.ASSIGNED == selectedInstance.getCurrentState())
+ {
+ // no pooled actors but an assigned actor
+ loadActors();
+ }
+ else
+ {
+ // no pooled actors and no assignee
+ // should be covered by assignment handler
+ throw new IllegalStateException(selectedInstance + " has no pooled actors and no assignee");
+ }
- // finally refresh the combobox
- refreshComboBox();
- }
+ // finally refresh the combobox
+ refreshComboBox();
+ }
- public void onRecordChange(ModelListenerRegistry parent, Record record)
- {
- // ignore
- }
+ public void onRecordChange(ModelListenerRegistry parent, Record record)
+ {
+ // ignore
+ }
- private void loadActors()
- {
- String url = mainView.getUrlBuilder().getAvailableActorsUrl(mainView.getUsername());
- RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, url );
+ private void loadActors()
+ {
+ String url = mainView.getUrlBuilder().getAvailableActorsUrl(mainView.getUsername());
+ RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, url);
- try
- {
- rb.sendRequest(null,
- new RequestCallback() {
+ try
+ {
+ rb.sendRequest(null,
+ new RequestCallback()
+ {
- public void onResponseReceived(Request request, Response response)
- {
- if(200 != response.getStatusCode())
- ConsoleLog.error("Failed to retrieve groups: " + response.getStatusText());
+ public void onResponseReceived(Request request, Response response)
+ {
+ if (200 != response.getStatusCode())
+ ConsoleLog.error("Failed to retrieve groups: " + response.getStatusText());
- JSONValue value = JSONParser.parse(response.getText());
+ JSONValue value = JSONParser.parse(response.getText());
- availableActors = DTOParser.parseStringArray(value);
- }
+ availableActors = DTOParser.parseStringArray(value);
+ }
- public void onError(Request request, Throwable t)
- {
- // Unknown error
- ConsoleLog.error("Unknown error", t);
- }
- });
- }
- catch (RequestException e1)
- {
- ConsoleLog.error("Request failed" ,e1);
- }
- }
+ public void onError(Request request, Throwable t)
+ {
+ // Unknown error
+ ConsoleLog.error("Unknown error", t);
+ }
+ });
+ }
+ catch (RequestException e1)
+ {
+ ConsoleLog.error("Request failed", e1);
+ }
+ }
- private void refreshComboBox()
- {
- if(null== availableActors)
- throw new IllegalArgumentException("available actors cannot be null");
+ private void refreshComboBox()
+ {
+ if (null == availableActors)
+ throw new IllegalArgumentException("available actors cannot be null");
- if(isRendered())
- {
- Form form = formPanel.getForm();
- RefreshableComboBox cb = (RefreshableComboBox)form.findField("actorId");
- cb.display(availableActors);
- }
- }
+ if (isRendered())
+ {
+ Form form = formPanel.getForm();
+ RefreshableComboBox cb = (RefreshableComboBox) form.findField("actorId");
+ cb.display(availableActors);
+ }
+ }
- private void reassignTask(long taskId, String actor)
- {
- RequestBuilder rb = new RequestBuilder(RequestBuilder.POST,
- mainView.getUrlBuilder().getTaskAssignmentURL(taskId, actor)
- );
+ private void reassignTask(long taskId, String actor)
+ {
+ RequestBuilder rb = new RequestBuilder(RequestBuilder.POST,
+ mainView.getUrlBuilder().getTaskAssignmentURL(taskId, actor)
+ );
- try
- {
- rb.sendRequest("",
- new RequestCallback() {
+ try
+ {
+ rb.sendRequest("",
+ new RequestCallback()
+ {
- public void onResponseReceived(Request request, Response response)
- {
- if(200 != response.getStatusCode())
- ConsoleLog.error("Failed to reassign task: " + response.getStatusText());
+ public void onResponseReceived(Request request, Response response)
+ {
+ if (200 != response.getStatusCode())
+ ConsoleLog.error("Failed to reassign task: " + response.getStatusText());
- selectedInstance = null;
- callback.onAssignmentDone();
- }
+ selectedInstance = null;
+ callback.onAssignmentDone();
+ }
- public void onError(Request request, Throwable t)
- {
- // Unknown error
- ConsoleLog.error("Unknown error", t);
- }
- });
- }
- catch (RequestException e1)
- {
- ConsoleLog.error("Request failed" ,e1);
- }
- }
+ public void onError(Request request, Throwable t)
+ {
+ // Unknown error
+ ConsoleLog.error("Unknown error", t);
+ }
+ });
+ }
+ catch (RequestException e1)
+ {
+ ConsoleLog.error("Request failed", e1);
+ }
+ }
- public void onReset()
- {
- Form form = formPanel.getForm();
- form.reset();
- }
+ public void onReset()
+ {
+ Form form = formPanel.getForm();
+ form.reset();
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/TaskDetailsFormPanel.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/TaskDetailsFormPanel.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/TaskDetailsFormPanel.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -47,229 +47,231 @@
class TaskDetailsFormPanel extends Panel implements ModelChangeListener
{
- private FormPanel formPanel;
- private TaskRef selectedInstance;
- private MainView mainView;
+ private FormPanel formPanel;
+ private TaskRef selectedInstance;
+ private MainView mainView;
- private Button startBtn;
- private Button stopBtn;
- private Button endBtn;
+ private Button startBtn;
+ private Button stopBtn;
+ private Button endBtn;
- private AssignmentCallback callback;
-
- public TaskDetailsFormPanel(final MainView mainView, AssignmentCallback callback)
- {
- super();
- this.mainView = mainView;
- this.callback = callback;
+ private AssignmentCallback callback;
- setTitle("Task Details");
- setBorder(false);
- setFrame(false);
+ public TaskDetailsFormPanel(final MainView mainView, AssignmentCallback callback)
+ {
+ super();
+ this.mainView = mainView;
+ this.callback = callback;
- // ---------------
+ setTitle("Task Details");
+ setBorder(false);
+ setFrame(false);
- formPanel = FormWidgets.createBaseFormPanel();
+ // ---------------
- //the field names must match the data field values from the Store
- TextField idField = new TextField("Id", "id", 230);
- idField.setReadOnly(true);
- formPanel.add(idField);
+ formPanel = FormWidgets.createBaseFormPanel();
- TextField nameField = new TextField("Name", "name", 230);
- nameField.setReadOnly(true);
- formPanel.add(nameField);
+ //the field names must match the data field values from the Store
+ TextField idField = new TextField("Id", "id", 230);
+ idField.setReadOnly(true);
+ formPanel.add(idField);
- TextField actorField = new TextField("Actor", "actor", 230);
- actorField.setReadOnly(true);
- formPanel.add(actorField);
+ TextField nameField = new TextField("Name", "name", 230);
+ nameField.setReadOnly(true);
+ formPanel.add(nameField);
- TextField stateField = new TextField("State", "currentState", 230);
- stateField.setReadOnly(true);
- formPanel.add(stateField);
+ TextField actorField = new TextField("Actor", "actor", 230);
+ actorField.setReadOnly(true);
+ formPanel.add(actorField);
- // ----------
- RefreshableComboBox cb = new RefreshableComboBox("signal", "Signal");
- formPanel.add(cb);
+ TextField stateField = new TextField("State", "currentState", 230);
+ stateField.setReadOnly(true);
+ formPanel.add(stateField);
- startBtn = new Button("Claim",
- new ButtonListenerAdapter()
+ // ----------
+ RefreshableComboBox cb = new RefreshableComboBox("signal", "Signal");
+ formPanel.add(cb);
+
+ startBtn = new Button("Claim",
+ new ButtonListenerAdapter()
+ {
+
+ public void onClick(Button button, EventObject eventObject)
+ {
+ if (null == selectedInstance)
{
-
- public void onClick(Button button, EventObject eventObject)
- {
- if(null==selectedInstance)
- {
- MessageBox.alert("Please select a task.");
- return;
- }
- selectedInstance.setActor(mainView.getUsername());
- reassignTask();
- }
+ MessageBox.alert("Please select a task.");
+ return;
}
- );
+ selectedInstance.setActor(mainView.getUsername());
+ reassignTask();
+ }
+ }
+ );
- stopBtn = new Button("Release",
- new ButtonListenerAdapter()
+ stopBtn = new Button("Release",
+ new ButtonListenerAdapter()
+ {
+
+ public void onClick(Button button, EventObject eventObject)
+ {
+ if (null == selectedInstance)
{
-
- public void onClick(Button button, EventObject eventObject)
- {
- if(null==selectedInstance)
- {
- MessageBox.alert("Please select a task.");
- return;
- }
- selectedInstance.setActor(null);
- reassignTask();
- }
+ MessageBox.alert("Please select a task.");
+ return;
}
- );
+ selectedInstance.setActor(null);
+ reassignTask();
+ }
+ }
+ );
- endBtn = new Button("Complete",
- new ButtonListenerAdapter()
+ endBtn = new Button("Complete",
+ new ButtonListenerAdapter()
+ {
+
+ public void onClick(Button button, EventObject eventObject)
+ {
+ if (null == selectedInstance)
{
+ MessageBox.alert("Please select a task.");
+ return;
+ }
- public void onClick(Button button, EventObject eventObject)
- {
- if(null==selectedInstance)
- {
- MessageBox.alert("Please select a task.");
- return;
- }
+ selectedInstance.close();
- selectedInstance.close();
+ ComboBox cb = (ComboBox) formPanel.getForm().findField("signal");
+ String signalName = cb.getRawValue();
+ if (signalName.equals(""))
+ MessageBox.alert("Please select a signal to end this task");
+ else
+ endTask(signalName);
+ }
+ }
+ );
- ComboBox cb = (ComboBox) formPanel.getForm().findField("signal");
- String signalName = cb.getRawValue();
- if(signalName.equals(""))
- MessageBox.alert("Please select a signal to end this task");
- else
- endTask(signalName);
- }
- }
- );
+ formPanel.addButton(startBtn);
+ formPanel.addButton(stopBtn);
+ formPanel.addButton(endBtn);
- formPanel.addButton(startBtn);
- formPanel.addButton(stopBtn);
- formPanel.addButton(endBtn);
+ this.add(formPanel);
+ }
- this.add(formPanel);
- }
+ private void reassignTask()
+ {
+ RequestBuilder rb = new RequestBuilder(RequestBuilder.POST,
+ mainView.getUrlBuilder().getTaskAssignmentURL(
+ selectedInstance.getId(), selectedInstance.getActor()
+ )
+ );
- private void reassignTask()
- {
- RequestBuilder rb = new RequestBuilder(RequestBuilder.POST,
- mainView.getUrlBuilder().getTaskAssignmentURL(
- selectedInstance.getId(), selectedInstance.getActor()
- )
- );
+ try
+ {
+ rb.sendRequest("",
+ new RequestCallback()
+ {
- try
- {
- rb.sendRequest("",
- new RequestCallback() {
+ public void onResponseReceived(Request request, Response response)
+ {
+ if (200 != response.getStatusCode())
+ ConsoleLog.error("Failed to reassign task: " + response.getStatusText());
- public void onResponseReceived(Request request, Response response)
- {
- if(200 != response.getStatusCode())
- ConsoleLog.error("Failed to reassign task: " + response.getStatusText());
-
- selectedInstance = null;
- callback.onAssignmentDone();
- }
+ selectedInstance = null;
+ callback.onAssignmentDone();
+ }
- public void onError(Request request, Throwable t)
- {
- // Unknown error
- ConsoleLog.error("Unknown error", t);
- }
- });
- }
- catch (RequestException e1)
- {
- ConsoleLog.error("Request failed" ,e1);
- }
- }
+ public void onError(Request request, Throwable t)
+ {
+ // Unknown error
+ ConsoleLog.error("Unknown error", t);
+ }
+ });
+ }
+ catch (RequestException e1)
+ {
+ ConsoleLog.error("Request failed", e1);
+ }
+ }
- private void endTask(String signalName)
- {
- String taskCloseURL = signalName.equals(UIConstants.DEFAULT_TRANSITION) ?
- mainView.getUrlBuilder().getTaskEndURL(selectedInstance.getId()) :
- mainView.getUrlBuilder().getTaskEndURL(selectedInstance.getId(), signalName);
+ private void endTask(String signalName)
+ {
+ String taskCloseURL = signalName.equals(UIConstants.DEFAULT_TRANSITION) ?
+ mainView.getUrlBuilder().getTaskEndURL(selectedInstance.getId()) :
+ mainView.getUrlBuilder().getTaskEndURL(selectedInstance.getId(), signalName);
- RequestBuilder rb = new RequestBuilder(RequestBuilder.POST,taskCloseURL);
+ RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, taskCloseURL);
- try
- {
- rb.sendRequest("",
- new RequestCallback() {
+ try
+ {
+ rb.sendRequest("",
+ new RequestCallback()
+ {
- public void onResponseReceived(Request request, Response response)
- {
- if(200 != response.getStatusCode())
- ConsoleLog.error("Failed to end task: " + response.getStatusText());
-
- selectedInstance = null;
- callback.onTaskEnd();
- }
+ public void onResponseReceived(Request request, Response response)
+ {
+ if (200 != response.getStatusCode())
+ ConsoleLog.error("Failed to end task: " + response.getStatusText());
- public void onError(Request request, Throwable t)
- {
- // Unknown error
- ConsoleLog.error("Unknown error", t);
- }
- });
- }
- catch (RequestException e1)
- {
- ConsoleLog.error("Failed to close task", e1);
- }
- }
+ selectedInstance = null;
+ callback.onTaskEnd();
+ }
+ public void onError(Request request, Throwable t)
+ {
+ // Unknown error
+ ConsoleLog.error("Unknown error", t);
+ }
+ });
+ }
+ catch (RequestException e1)
+ {
+ ConsoleLog.error("Failed to close task", e1);
+ }
+ }
- public void onRecordChange(ModelListenerRegistry parent, Record changeEvent)
- {
- selectedInstance = TaskList.transform(changeEvent);
- Form form = formPanel.getForm();
- RefreshableComboBox cb = (RefreshableComboBox)form.findField("signal");
+ public void onRecordChange(ModelListenerRegistry parent, Record changeEvent)
+ {
+ selectedInstance = TaskList.transform(changeEvent);
- if(selectedInstance.getPooledActors().isEmpty())
- {
- // no group assignment available
- startBtn.disable();
- stopBtn.disable();
- }
- else if(TaskRef.STATE.ASSIGNED == selectedInstance.getCurrentState())
- {
- startBtn.disable();
- stopBtn.enable();
- cb.enable();
- endBtn.enable();
- }
- else
- {
- startBtn.enable();
- stopBtn.disable();
- cb.disable();
- endBtn.disable();
- }
+ Form form = formPanel.getForm();
+ RefreshableComboBox cb = (RefreshableComboBox) form.findField("signal");
- cb.display( selectedInstance.getTransitionNames() );
+ if (selectedInstance.getPooledActors().isEmpty())
+ {
+ // no group assignment available
+ startBtn.disable();
+ stopBtn.disable();
+ }
+ else if (TaskRef.STATE.ASSIGNED == selectedInstance.getCurrentState())
+ {
+ startBtn.disable();
+ stopBtn.enable();
+ cb.enable();
+ endBtn.enable();
+ }
+ else
+ {
+ startBtn.enable();
+ stopBtn.disable();
+ cb.disable();
+ endBtn.disable();
+ }
- formPanel.getForm().loadRecord(changeEvent);
- formPanel.doLayout();
- }
+ cb.display(selectedInstance.getTransitionNames());
+ formPanel.getForm().loadRecord(changeEvent);
+ formPanel.doLayout();
+ }
- public void onModelChange(ModelListenerRegistry parent, Object changeEvent)
- {
- // ignore
- }
- public void onReset()
- {
- formPanel.getForm().reset();
- }
+ public void onModelChange(ModelListenerRegistry parent, Object changeEvent)
+ {
+ // ignore
+ }
+
+ public void onReset()
+ {
+ formPanel.getForm().reset();
+ }
}
Copied: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/TaskEditor.java (from rev 3636, projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/TaskListEditor.java)
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/TaskEditor.java (rev 0)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/TaskEditor.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -0,0 +1,241 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.bpm.console.client.task;
+
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.data.Node;
+import com.gwtext.client.data.Record;
+import com.gwtext.client.widgets.Component;
+import com.gwtext.client.widgets.PaddedPanel;
+import com.gwtext.client.widgets.Panel;
+import com.gwtext.client.widgets.TabPanel;
+import com.gwtext.client.widgets.event.PanelListenerAdapter;
+import com.gwtext.client.widgets.grid.RowSelectionModel;
+import com.gwtext.client.widgets.grid.event.RowSelectionListenerAdapter;
+import com.gwtext.client.widgets.layout.ColumnLayout;
+import com.gwtext.client.widgets.tree.TreeNode;
+import com.gwtext.client.widgets.tree.TreePanel;
+import com.gwtext.client.widgets.tree.event.TreeNodeListenerAdapter;
+import org.jboss.bpm.console.client.*;
+import org.jboss.bpm.console.client.model.TaskRef;
+import org.jboss.bpm.console.client.util.ModelChangeListener;
+import org.jboss.bpm.console.client.util.ModelListenerRegistry;
+import org.jboss.bpm.console.client.util.ModelModificationCallback;
+
+/**
+ * @author Heiko.Braun <heiko.braun at jboss.com>
+ */
+public class TaskEditor extends Editor implements AssignmentCallback
+{
+
+ public final static String ID = "org.jboss.bpm.task.TaskList";
+ private MainView mainView;
+ private TaskList taskList;
+
+ private boolean initialized;
+ private TabPanel tabPanel;
+
+ private ModelListenerRegistry modelListeners = new ModelListenerRegistry();
+
+ public TaskEditor(MainView mainView)
+ {
+ super(mainView);
+ this.setId(ID);
+ this.mainView = mainView;
+
+ this.setLayout(new ColumnLayout());
+ this.setWidth(UIConstants.EDITOR_WIDTH);
+
+ this.addListener(
+ new PanelListenerAdapter()
+ {
+ public boolean doBeforeRender(Component component)
+ {
+ return beforeRenderCallback();
+ }
+ }
+ );
+
+ }
+
+ public String getEditorId()
+ {
+ return ID;
+ }
+
+ public String getTitle()
+ {
+ return "Tasks";
+ }
+
+ public String getIconCSS()
+ {
+ return "bpm-task-icon";
+ }
+
+
+ public MenuSection provideMenuSection()
+ {
+ return new MenuSection("Task Management", "bpm-task-icon", new TaskTree());
+ }
+
+ /**
+ * TaskList editor requires an authenticated user,
+ * hence the initialization through callback
+ */
+ public boolean beforeRenderCallback()
+ {
+ if (!initialized)
+ {
+
+ tabPanel = new TabPanel();
+ tabPanel.setPaddings(10);
+ tabPanel.setPlain(true);
+ tabPanel.setActiveTab(0);
+ tabPanel.setWidth(UIConstants.EDITOR_PANEL_WIDTH);
+
+ PaddedPanel tabPadding = new PaddedPanel(tabPanel, 10, 0, 0, 0);
+
+ // ----------------------------------
+
+ ModelModificationCallback modelModificationCallback = new ModelModificationCallback()
+ {
+
+ public void onStaleModel()
+ {
+ resetEditor();
+ }
+ };
+
+ taskList = new TaskList(modelModificationCallback, "Task overview", mainView);
+ final RowSelectionModel sm = new RowSelectionModel(true);
+ sm.addListener(
+ new RowSelectionListenerAdapter()
+ {
+ public void onRowSelect(RowSelectionModel sm, int rowIndex, Record record)
+ {
+ TaskRef taskRef = TaskList.transform(record);
+ modelListeners.fireRecordChangeEvent(record);
+ modelListeners.fireModelChangeEvent(taskRef);
+ }
+ }
+ );
+ taskList.setRowSelectionModel(sm);
+
+
+ // ----------------------------------
+
+ Panel detailsPanel = new TaskDetailsFormPanel(mainView, this);
+ Panel assignmentPanel = new AssignmentFormPanel(mainView, this);
+
+ modelListeners.addListener((ModelChangeListener) detailsPanel);
+ modelListeners.addListener((ModelChangeListener) assignmentPanel);
+
+ tabPanel.add(detailsPanel);
+ tabPanel.add(assignmentPanel);
+
+ // -------
+
+ final View defaultView = new View(main)
+ {
+
+ public String getViewId()
+ {
+ return getEditorId() + ".defaultView";
+ }
+
+ public String getIconCSS()
+ {
+ return "";
+ }
+ };
+
+ defaultView.setBorder(false);
+ defaultView.setTitle("Task list");
+
+ defaultView.add(taskList);
+ defaultView.add(tabPadding);
+
+ // -------
+
+ addView(defaultView, false);
+
+ doLayout();
+
+ initialized = true;
+ }
+
+ return true;
+ }
+
+ private void resetEditor()
+ {
+ taskList.reloadStore();
+ modelListeners.fireResetEvent();
+ }
+
+ public void onAssignmentDone()
+ {
+ resetEditor();
+ }
+
+ public void onTaskEnd()
+ {
+ resetEditor();
+ }
+
+ class TaskTree extends TreePanel
+ {
+
+ public TaskTree()
+ {
+ TreeNode root = new TreeNode("Your tasks");
+
+ TreeNode overview = new TreeNode("Overview");
+ overview.setExpanded(true);
+ overview.addListener(
+ new TreeNodeListenerAdapter()
+ {
+ public void onClick(Node node, EventObject eventObject)
+ {
+ if (mainView.hasEditor(ID))
+ {
+ mainView.showEditor(ID);
+ }
+ else
+ {
+ mainView.addEditor(new TaskEditor(mainView));
+ }
+
+ }
+ }
+ );
+
+ root.appendChild(overview);
+
+ setRootVisible(true);
+ setRootNode(root);
+ root.setExpanded(true);
+
+ }
+ }
+}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/TaskList.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/TaskList.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/TaskList.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -42,240 +42,242 @@
import java.util.HashMap;
import java.util.Map;
-/**
+/**
* @author Heiko.Braun <heiko.braun at jboss.com>
*/
public class TaskList extends Panel
{
- private Map<Integer, TaskRef> row2taskref = new HashMap<Integer, TaskRef>();
- private MainView mainView;
- private GridPanel grid;
- private GroupingStore store;
- private String title;
- private RowSelectionModel rowSelectionModel;
- public static final int PAGE_SIZE = 15;
- private int selectedRowIndex = -1;
+ private Map<Integer, TaskRef> row2taskref = new HashMap<Integer, TaskRef>();
+ private MainView mainView;
+ private GridPanel grid;
+ private GroupingStore store;
+ private String title;
+ private RowSelectionModel rowSelectionModel;
+ public static final int PAGE_SIZE = 15;
+ private int selectedRowIndex = -1;
- private ModelModificationCallback modelModificationCallback;
+ private ModelModificationCallback modelModificationCallback;
- public TaskList(ModelModificationCallback callback, String titleName, final MainView view)
- {
- this.mainView = view;
- this.title = titleName;
- this.modelModificationCallback = callback;
+ public TaskList(ModelModificationCallback callback, String titleName, final MainView view)
+ {
+ this.mainView = view;
+ //this.title = titleName;
+ this.modelModificationCallback = callback;
- this.setPaddings(10);
- this.setHeader(false);
- this.setBorder(false);
- this.setFrame(false);
- this.setIconCls("bpm-task-icon");
+ this.setPaddings(10, 0,0,0);
+ this.setHeader(false);
+ this.setBorder(false);
+ this.setFrame(false);
+ this.setIconCls("bpm-task-icon");
- String resourceUrl = view.getUrlBuilder().getTaskListByActorURL(view.getUsername());
- DataProxy dataProxy = new ScriptTagProxy(resourceUrl, 1000*10);
+ String resourceUrl = view.getUrlBuilder().getTaskListByActorURL(view.getUsername());
+ DataProxy dataProxy = new ScriptTagProxy(resourceUrl, 1000 * 10);
- final Reader reader = createReader();
+ final Reader reader = createReader();
- store = new GroupingStore();
- store.setReader(reader);
- store.setDataProxy(dataProxy);
- store.setSortInfo(new SortState("id", SortDir.ASC));
- store.setGroupField("currentState");
- store.addStoreListener( new ListViewStoreListener(this) );
+ store = new GroupingStore();
+ store.setReader(reader);
+ store.setDataProxy(dataProxy);
+ store.setSortInfo(new SortState("id", SortDir.ASC));
+ store.setGroupField("currentState");
+ store.addStoreListener(new ListViewStoreListener(this));
- // PanelListener will lazy load store data.
- // Store.onLoad() callback will populate the grid
- // and add it to the container panel.
- this.addListener(
- new PanelListenerAdapter()
- {
- public boolean doBeforeRender(Component component)
- {
- modelModificationCallback.onStaleModel();
- return true;
- }
- }
- );
- }
+ // PanelListener will lazy load store data.
+ // Store.onLoad() callback will populate the grid
+ // and add it to the container panel.
+ this.addListener(
+ new PanelListenerAdapter()
+ {
+ public boolean doBeforeRender(Component component)
+ {
+ modelModificationCallback.onStaleModel();
+ return true;
+ }
+ }
+ );
+ }
- protected void onRecordsLoaded(Record[] records)
- {
- try
+ protected void onRecordsLoaded(Record[] records)
+ {
+ try
+ {
+ int i = 0;
+ for (Record r : records)
{
- int i=0;
- for(Record r : records)
- {
- TaskRef ref = transform(r);
- row2taskref.put(i, ref);
- i++;
- }
+ TaskRef ref = transform(r);
+ row2taskref.put(i, ref);
+ i++;
}
- catch (Throwable e)
- {
- ConsoleLog.error("Failed to parse task ref", e);
- }
+ }
+ catch (Throwable e)
+ {
+ ConsoleLog.error("Failed to parse task ref", e);
+ }
- ConsoleLog.debug("Loaded " + row2taskref.size() + " tasks");
- }
+ ConsoleLog.debug("Loaded " + row2taskref.size() + " tasks");
+ }
- public static TaskRef transform(Record r)
- {
- JavaScriptObject js = r.getDataAsJsObject();
- JSONObject jso = new JSONObject(js);
- TaskRef ref = DTOParser.parseTaskReference(jso);
- return ref;
- }
+ public static TaskRef transform(Record r)
+ {
+ JavaScriptObject js = r.getDataAsJsObject();
+ JSONObject jso = new JSONObject(js);
+ TaskRef ref = DTOParser.parseTaskReference(jso);
+ return ref;
+ }
- private ColumnModel createColumnModel()
- {
- final ColumnModel columnModel = new ColumnModel(
- new ColumnConfig[]
- {
- new ColumnConfig("ID", "id", 35, true),
- new ColumnConfig("Task Name", "name", 290, true, null, "expand"),
- new ColumnConfig("Assigned to", "actor", 75, true),
- new ColumnConfig("State", "currentState", 50, true)
- }
- );
- return columnModel;
- }
-
- private JsonReader createReader()
- {
- final RecordDef recordDef = new RecordDef(
- new FieldDef[]{
- new IntegerFieldDef("id"),
- new StringFieldDef("name"),
- new StringFieldDef("actor"),
- new StringFieldDef("currentState")
+ private ColumnModel createColumnModel()
+ {
+ final ColumnModel columnModel = new ColumnModel(
+ new ColumnConfig[]
+ {
+ new ColumnConfig("ID", "id", 35, true),
+ new ColumnConfig("Task Name", "name", 290, true, null, "expand"),
+ new ColumnConfig("Assigned to", "actor", 75, true),
+ new ColumnConfig("State", "currentState", 50, true)
}
- );
+ );
+ return columnModel;
+ }
- final JsonReader reader = new JsonReader(recordDef);
- reader.setRoot("tasks");
- reader.setTotalProperty("totalCount");
- reader.setId("id");
- return reader;
- }
+ private JsonReader createReader()
+ {
+ final RecordDef recordDef = new RecordDef(
+ new FieldDef[]{
+ new IntegerFieldDef("id"),
+ new StringFieldDef("name"),
+ new StringFieldDef("actor"),
+ new StringFieldDef("currentState")
+ }
+ );
- private class ListViewStoreListener extends StoreListenerAdapter
- {
+ final JsonReader reader = new JsonReader(recordDef);
+ reader.setRoot("tasks");
+ reader.setTotalProperty("totalCount");
+ reader.setId("id");
+ return reader;
+ }
- Panel containerPanel;
+ private class ListViewStoreListener extends StoreListenerAdapter
+ {
- public ListViewStoreListener(Panel containerPanel)
- {
- this.containerPanel = containerPanel;
- }
+ Panel containerPanel;
- /**
- * load callback will push records to implementation
- * and (!) add the grid to the container panel.
- */
- public void onLoad(Store store, Record[] records)
- {
+ public ListViewStoreListener(Panel containerPanel)
+ {
+ this.containerPanel = containerPanel;
+ }
- onRecordsLoaded(records);
+ /**
+ * load callback will push records to implementation
+ * and (!) add the grid to the container panel.
+ */
+ public void onLoad(Store store, Record[] records)
+ {
- grid = assembleGrid();
+ onRecordsLoaded(records);
- containerPanel.clear();
- containerPanel.add(grid);
- containerPanel.doLayout();
- }
+ grid = assembleGrid();
- public void onLoadException(Throwable throwable)
- {
- ConsoleLog.error("Failed to load remote data", throwable);
- }
+ containerPanel.clear();
+ containerPanel.add(grid);
+ containerPanel.doLayout();
+ }
- }
+ public void onLoadException(Throwable throwable)
+ {
+ ConsoleLog.error("Failed to load remote data", throwable);
+ }
- private GridPanel assembleGrid()
- {
- final ColumnModel columnModel = createColumnModel();
+ }
- GridPanel grid = new GridPanel();
- grid.setStore(store);
- grid.setColumnModel(columnModel);
- grid.setFrame(true);
- grid.setStripeRows(true);
- grid.setAutoExpandColumn("name");
- grid.setTitle(title);
+ private GridPanel assembleGrid()
+ {
+ final ColumnModel columnModel = createColumnModel();
- GroupingView gridView = new GroupingView();
- gridView.setForceFit(true);
- gridView.setGroupTextTpl("{text} ({[values.rs.length]} {[values.rs.length > 1 ? \"Items\" : \"Item\"]})");
+ GridPanel grid = new GridPanel();
+ grid.setStore(store);
+ grid.setColumnModel(columnModel);
+ grid.setFrame(true);
+ grid.setBorder(false);
+ grid.setStripeRows(true);
+ grid.setAutoExpandColumn("name");
+ //grid.setTitle(title);
- if(rowSelectionModel!=null)
+ GroupingView gridView = new GroupingView();
+ gridView.setForceFit(true);
+ gridView.setGroupTextTpl("{text} ({[values.rs.length]} {[values.rs.length > 1 ? \"Items\" : \"Item\"]})");
+
+ if (rowSelectionModel != null)
+ {
+ grid.setSelectionModel(rowSelectionModel);
+ grid.doOnRender(new Function()
{
- grid.setSelectionModel(rowSelectionModel);
- grid.doOnRender(new Function() {
- public void execute()
- {
- if(-1==selectedRowIndex)
- rowSelectionModel.selectFirstRow();
- else
- rowSelectionModel.selectRow(selectedRowIndex);
- }
- }, 10);
- }
- grid.setView(gridView);
- grid.setFrame(true);
- grid.setWidth(UIConstants.EDITOR_PANEL_WIDTH);
- grid.setHeight(250);
- grid.setEnableHdMenu(false);
+ public void execute()
+ {
+ if (-1 == selectedRowIndex)
+ rowSelectionModel.selectFirstRow();
+ else
+ rowSelectionModel.selectRow(selectedRowIndex);
+ }
+ }, 10);
+ }
+ grid.setView(gridView);
+ grid.setFrame(true);
+ grid.setWidth(UIConstants.EDITOR_PANEL_WIDTH);
+ grid.setHeight(250);
+ grid.setEnableHdMenu(false);
- grid.setBottomToolbar(createToolbar(store));
+ grid.setBottomToolbar(createToolbar(store));
- return grid;
- }
+ return grid;
+ }
- private PagingToolbar createToolbar(final Store store)
- {
- PagingToolbar pagingToolbar = new PagingToolbar(store);
- pagingToolbar.setPageSize(PAGE_SIZE);
- pagingToolbar.setDisplayInfo(true);
- pagingToolbar.setDisplayMsg("{0} - {1} of {2}");
+ private PagingToolbar createToolbar(final Store store)
+ {
+ PagingToolbar pagingToolbar = new PagingToolbar(store);
+ pagingToolbar.setPageSize(PAGE_SIZE);
+ pagingToolbar.setDisplayInfo(true);
+ pagingToolbar.setDisplayMsg("{0} - {1} of {2}");
- pagingToolbar.addSeparator();
- pagingToolbar.addSpacer();
-
- return pagingToolbar;
- }
+ pagingToolbar.addSeparator();
+ pagingToolbar.addSpacer();
+ return pagingToolbar;
+ }
- public void reloadStore()
- {
- ConsoleLog.debug("Reload " + this.getId());
- store.load(0, PAGE_SIZE);
- }
- public GridPanel getGrid()
- {
- return grid;
- }
+ public void reloadStore()
+ {
+ ConsoleLog.debug("Reload " + this.getId());
+ store.load(0, PAGE_SIZE);
+ }
- public void setRowSelectionModel(RowSelectionModel model)
- {
- this.rowSelectionModel = model;
- }
+ public GridPanel getGrid()
+ {
+ return grid;
+ }
- public class ListViewCellListener implements GridCellListener
- {
- public void onCellClick(GridPanel grid, int rowIndex, int colindex, EventObject e)
- {
- selectedRowIndex = rowIndex;
- }
+ public void setRowSelectionModel(RowSelectionModel model)
+ {
+ this.rowSelectionModel = model;
+ }
+ public class ListViewCellListener implements GridCellListener
+ {
+ public void onCellClick(GridPanel grid, int rowIndex, int colindex, EventObject e)
+ {
+ selectedRowIndex = rowIndex;
+ }
- public void onCellContextMenu(GridPanel gridPanel, int i, int i1, EventObject eventObject)
- {
- }
+ public void onCellContextMenu(GridPanel gridPanel, int i, int i1, EventObject eventObject)
+ {
- public void onCellDblClick(GridPanel gridPanel, int i, int i1, EventObject eventObject)
- {
+ }
- }
- }
+ public void onCellDblClick(GridPanel gridPanel, int i, int i1, EventObject eventObject)
+ {
+
+ }
+ }
}
Deleted: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/TaskListEditor.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/TaskListEditor.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/task/TaskListEditor.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -1,191 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2006, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.bpm.console.client.task;
-
-import com.gwtext.client.data.Record;
-import com.gwtext.client.widgets.Component;
-import com.gwtext.client.widgets.PaddedPanel;
-import com.gwtext.client.widgets.Panel;
-import com.gwtext.client.widgets.TabPanel;
-import com.gwtext.client.widgets.event.PanelListenerAdapter;
-import com.gwtext.client.widgets.grid.RowSelectionModel;
-import com.gwtext.client.widgets.grid.event.RowSelectionListenerAdapter;
-import com.gwtext.client.widgets.layout.ColumnLayout;
-import com.gwtext.client.widgets.layout.ColumnLayoutData;
-import org.jboss.bpm.console.client.Editor;
-import org.jboss.bpm.console.client.MainView;
-import org.jboss.bpm.console.client.UIConstants;
-import org.jboss.bpm.console.client.model.TaskRef;
-import org.jboss.bpm.console.client.util.ModelChangeListener;
-import org.jboss.bpm.console.client.util.ModelListenerRegistry;
-import org.jboss.bpm.console.client.widgets.TeaserPanel;
-import org.jboss.bpm.console.client.util.ModelModificationCallback;
-
-/**
- * @author Heiko.Braun <heiko.braun at jboss.com>
- */
-public class TaskListEditor extends Editor implements AssignmentCallback
-{
-
- public final static String ID = "org.jboss.bpm.task.TaskList";
- private MainView mainView;
- private TaskList taskList;
- private Panel teaserPanel;
- private boolean initialized;
- private TabPanel tabPanel;
-
- private ModelListenerRegistry modelListeners =new ModelListenerRegistry();
-
- public TaskListEditor(MainView mainView)
- {
- super(mainView);
- this.setId(ID);
- this.mainView = mainView;
-
- this.setLayout( new ColumnLayout() );
- this.setWidth(UIConstants.EDITOR_WIDTH);
-
- this.addListener(
- new PanelListenerAdapter()
- {
- public boolean doBeforeRender(Component component)
- {
- return beforeRenderCallback();
- }
- }
- );
-
- }
-
- public String getEditorId()
- {
- return ID;
- }
-
- public String getTitle()
- {
- return "Tasks";
- }
-
- public String getIconCSS()
- {
- return "bpm-task-icon";
- }
-
- /**
- * TaskList editor requires an authenticated user,
- * hence the initialization through callback
- */
- public boolean beforeRenderCallback()
- {
- if(!initialized)
- {
- final Panel leftHand = new Panel();
- leftHand.setFrame(false);
- leftHand.setHeader(false);
- leftHand.setBorder(false);
-
- // ----------------------------------
-
- tabPanel = new TabPanel();
- tabPanel.setPaddings(10);
- tabPanel.setPlain(true);
- tabPanel.setActiveTab(0);
- tabPanel.setWidth(UIConstants.EDITOR_PANEL_WIDTH);
-
- PaddedPanel tabPadding = new PaddedPanel(tabPanel, 0,10,0,10);
-
- // ----------------------------------
-
- ModelModificationCallback modelModificationCallback = new ModelModificationCallback()
- {
-
- public void onStaleModel()
- {
- resetEditor();
- }
- };
-
- taskList = new TaskList(modelModificationCallback, "Task overview", mainView);
- final RowSelectionModel sm = new RowSelectionModel(true);
- sm.addListener(
- new RowSelectionListenerAdapter()
- {
- public void onRowSelect(RowSelectionModel sm, int rowIndex, Record record)
- {
- TaskRef taskRef = TaskList.transform(record);
- modelListeners.fireRecordChangeEvent(record);
- modelListeners.fireModelChangeEvent(taskRef);
- }
- }
- );
- taskList.setRowSelectionModel(sm);
- leftHand.add(taskList);
-
- // ----------------------------------
-
- Panel detailsPanel = new TaskDetailsFormPanel(mainView, this);
- Panel assignmentPanel = new AssignmentFormPanel(mainView, this);
-
- modelListeners.addListener((ModelChangeListener)detailsPanel);
- modelListeners.addListener((ModelChangeListener)assignmentPanel);
-
- tabPanel.add( detailsPanel );
- tabPanel.add( assignmentPanel );
-
- // ----------------------------------
-
- leftHand.add(tabPadding);
-
- // ----------------------------------
-
- teaserPanel = new TeaserPanel();
-
- // ----------------------------------
-
- this.add(leftHand, new ColumnLayoutData(0.7) );
- this.add(teaserPanel , new ColumnLayoutData(0.3) );
-
- doLayout();
-
- initialized = true;
- }
-
- return true;
- }
-
- private void resetEditor()
- {
- taskList.reloadStore();
- modelListeners.fireResetEvent();
- }
-
- public void onAssignmentDone()
- {
- resetEditor();
- }
-
- public void onTaskEnd()
- {
- resetEditor();
- }
-}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/ConsoleLog.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/ConsoleLog.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/ConsoleLog.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -25,47 +25,47 @@
* The maven gwt:test mojo treats any output to stderr as
* a test failure. gwt-log does dump some information there,
* hence we need to proxy log invocation and be able to disable them at all.
- * <p>
+ * <p/>
* If you want to test the application, make sure to lauch it using
* {@link org.jboss.bpm.console.client.Application#onModuleLoad2()}.
- *
+ *
* @author Heiko.Braun <heiko.braun at jboss.com>
*/
public class ConsoleLog
{
- private static boolean enabled = false;
+ private static boolean enabled = false;
- public static void debug(String msg)
- {
- if(enabled)
- com.allen_sauer.gwt.log.client.Log.debug(msg);
- }
+ public static void debug(String msg)
+ {
+ if (enabled)
+ com.allen_sauer.gwt.log.client.Log.debug(msg);
+ }
- public static void error(String msg)
- {
- if(enabled)
- com.allen_sauer.gwt.log.client.Log.error(msg);
- }
+ public static void error(String msg)
+ {
+ if (enabled)
+ com.allen_sauer.gwt.log.client.Log.error(msg);
+ }
- public static void error(String msg, Throwable t)
- {
- if(enabled)
- com.allen_sauer.gwt.log.client.Log.error(msg, t);
- }
+ public static void error(String msg, Throwable t)
+ {
+ if (enabled)
+ com.allen_sauer.gwt.log.client.Log.error(msg, t);
+ }
- public static void setUncaughtExceptionHandler()
- {
- if(enabled)
- com.allen_sauer.gwt.log.client.Log.setUncaughtExceptionHandler();
- }
+ public static void setUncaughtExceptionHandler()
+ {
+ if (enabled)
+ com.allen_sauer.gwt.log.client.Log.setUncaughtExceptionHandler();
+ }
- public static boolean isEnabled()
- {
- return enabled;
- }
+ public static boolean isEnabled()
+ {
+ return enabled;
+ }
- public static void setEnabled(boolean enabled)
- {
- ConsoleLog.enabled = enabled;
- }
+ public static void setEnabled(boolean enabled)
+ {
+ ConsoleLog.enabled = enabled;
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/DateRenderer.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/DateRenderer.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/DateRenderer.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -32,30 +32,30 @@
/**
* Renders a Date according to {@link org.jboss.bpm.console.client.model.util.SimpleDateFormat#DEFAULT_FORMAT}
- *
+ *
* @author Heiko.Braun <heiko.braun at jboss.com>
*/
public class DateRenderer implements Renderer
{
- private String fieldName;
-
- public DateRenderer(String fieldName)
- {
- this.fieldName = fieldName;
- }
+ private String fieldName;
- /**
- * Returns an empty string (field is null) or a formatted date (field is set).
- */
- public String render(Object value, CellMetadata cellMetadata, Record record,
- int rowIndex, int colNum, Store store)
- {
- String s = "";
- SimpleDateFormat df = new SimpleDateFormat();
- Date d = record.getAsDate(fieldName);
- if(d!=null)
- s = df.format(d);
+ public DateRenderer(String fieldName)
+ {
+ this.fieldName = fieldName;
+ }
- return s;
- }
+ /**
+ * Returns an empty string (field is null) or a formatted date (field is set).
+ */
+ public String render(Object value, CellMetadata cellMetadata, Record record,
+ int rowIndex, int colNum, Store store)
+ {
+ String s = "";
+ SimpleDateFormat df = new SimpleDateFormat();
+ Date d = record.getAsDate(fieldName);
+ if (d != null)
+ s = df.format(d);
+
+ return s;
+ }
}
\ No newline at end of file
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/JSONRequest.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/JSONRequest.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/JSONRequest.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -24,29 +24,31 @@
/**
* Request helper, to bypass SOP restrictions.<br>
* Can only be used to retrieve Json data, wrapped in a script tag.
+ *
* @author Heiko.Braun <heiko.braun at jboss.com>
*/
-public class JSONRequest {
- public static void get(String url, JSONRequestHandler handler)
- {
- String callbackName = "JSONCallback"+handler.hashCode();
- get( url+"?callback="+callbackName, callbackName, handler );
- }
+public class JSONRequest
+{
+ public static void get(String url, JSONRequestHandler handler)
+ {
+ String callbackName = "JSONCallback" + handler.hashCode();
+ get(url + "?callback=" + callbackName, callbackName, handler);
+ }
- public static void get(String url, String callbackName, JSONRequestHandler handler )
- {
- createCallbackFunction( handler, callbackName );
- addScript(url);
- }
+ public static void get(String url, String callbackName, JSONRequestHandler handler)
+ {
+ createCallbackFunction(handler, callbackName);
+ addScript(url);
+ }
- public static native void addScript(String url) /*-{
+ public static native void addScript(String url) /*-{
var scr = document.createElement("script");
scr.setAttribute("language", "JavaScript");
scr.setAttribute("src", url);
document.getElementsByTagName("body")[0].appendChild(scr);
}-*/;
- private native static void createCallbackFunction( JSONRequestHandler obj, String callbackName)/*-{
+ private native static void createCallbackFunction(JSONRequestHandler obj, String callbackName)/*-{
tmpcallback = function(j) {
obj. at org.jboss.bpm.console.client.util.JSONRequestHandler::onRequestComplete(Lcom/google/gwt/core/client/JavaScriptObject;)(j);
};
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/JSONRequestHandler.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/JSONRequestHandler.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/JSONRequestHandler.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -28,5 +28,5 @@
*/
public interface JSONRequestHandler
{
- void onRequestComplete(JavaScriptObject json);
+ void onRequestComplete(JavaScriptObject json);
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/JSONWalk.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/JSONWalk.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/JSONWalk.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -36,158 +36,158 @@
*/
public class JSONWalk
{
- private JSONValue root;
+ private JSONValue root;
- private JSONWalk(JSONValue root)
- {
- this.root = root;
- }
+ private JSONWalk(JSONValue root)
+ {
+ this.root = root;
+ }
- public static JSONWalk on(JSONValue root)
- {
- return new JSONWalk(root);
- }
+ public static JSONWalk on(JSONValue root)
+ {
+ return new JSONWalk(root);
+ }
- public JSONWrapper next(String name)
- {
- if(null==root || root.isObject()==null) return null;
- JSONObject rootObject = root.isObject();
-
- JSONWrapper match = null;
- Set<String> keySet = rootObject.keySet();
+ public JSONWrapper next(String name)
+ {
+ if (null == root || root.isObject() == null) return null;
+ JSONObject rootObject = root.isObject();
- Iterator it = keySet.iterator();
- while(it.hasNext())
+ JSONWrapper match = null;
+ Set<String> keySet = rootObject.keySet();
+
+ Iterator it = keySet.iterator();
+ while (it.hasNext())
+ {
+ String s = (String) it.next();
+ JSONValue child = rootObject.get(s);
+ if (name.equals(s))
{
- String s = (String)it.next();
- JSONValue child = rootObject.get(s);
- if(name.equals(s))
- {
- match = new JSONWrapper(child);
- break;
- }
- else
- {
- match = JSONWalk.on(child).next(name);
- }
+ match = new JSONWrapper(child);
+ break;
}
+ else
+ {
+ match = JSONWalk.on(child).next(name);
+ }
+ }
- return match;
- }
+ return match;
+ }
- public class JSONWrapper
- {
+ public class JSONWrapper
+ {
- private JSONValue value;
+ private JSONValue value;
- public JSONWrapper(JSONValue value)
+ public JSONWrapper(JSONValue value)
+ {
+ this.value = value;
+ }
+
+ public int asInt()
+ {
+ if (value.isNumber() != null)
{
- this.value = value;
+ return new Double(value.isNumber().getValue()).intValue();
}
+ else
+ {
+ throw new IllegalArgumentException("Not a number: " + value);
+ }
+ }
- public int asInt()
+ public long asLong()
+ {
+ if (value.isNumber() != null)
{
- if(value.isNumber()!=null)
- {
- return new Double(value.isNumber().getValue()).intValue();
- }
- else
- {
- throw new IllegalArgumentException("Not a number: " + value);
- }
+ return new Double(value.isNumber().getValue()).longValue();
}
+ else
+ {
+ throw new IllegalArgumentException("Not a number: " + value);
+ }
+ }
- public long asLong()
+ public double asDouble()
+ {
+ if (value.isNumber() != null)
{
- if(value.isNumber()!=null)
- {
- return new Double(value.isNumber().getValue()).longValue();
- }
- else
- {
- throw new IllegalArgumentException("Not a number: " + value);
- }
+ return value.isNumber().getValue();
}
+ else
+ {
+ throw new IllegalArgumentException("Not a number: " + value);
+ }
+ }
- public double asDouble()
+ public String asString()
+ {
+ if (value.isString() != null)
{
- if(value.isNumber()!=null)
- {
- return value.isNumber().getValue();
- }
- else
- {
- throw new IllegalArgumentException("Not a number: " + value);
- }
+ return value.isString().stringValue();
}
+ else
+ {
+ throw new IllegalArgumentException("Not a string: " + value);
+ }
+ }
- public String asString()
+ public boolean asBool()
+ {
+ if (value.isBoolean() != null)
{
- if(value.isString()!=null)
- {
- return value.isString().stringValue();
- }
- else
- {
- throw new IllegalArgumentException("Not a string: " + value);
- }
+ return value.isBoolean().booleanValue();
}
+ else
+ {
+ throw new IllegalArgumentException("Not a boolean: " + value);
+ }
+ }
- public boolean asBool()
+ public Date asDate()
+ {
+ if (value.isString() != null)
{
- if(value.isBoolean()!=null)
- {
- return value.isBoolean().booleanValue();
- }
- else
- {
- throw new IllegalArgumentException("Not a boolean: " + value);
- }
+ SimpleDateFormat df = new SimpleDateFormat();
+ return df.parse(value.isString().stringValue());
}
+ else
+ {
+ throw new IllegalArgumentException("Not a date string: " + value);
+ }
+ }
- public Date asDate()
- {
- if(value.isString()!=null)
- {
- SimpleDateFormat df = new SimpleDateFormat();
- return df.parse(value.isString().stringValue());
- }
- else
- {
- throw new IllegalArgumentException("Not a date string: " + value);
- }
- }
-
- public JSONArray asArray()
+ public JSONArray asArray()
+ {
+ if (value.isArray() != null)
{
- if(value.isArray()!=null)
- {
- return value.isArray();
- }
- else
- {
- throw new IllegalArgumentException("Not a number: " + value);
- }
+ return value.isArray();
}
+ else
+ {
+ throw new IllegalArgumentException("Not a number: " + value);
+ }
+ }
- public JSONObject asObject()
+ public JSONObject asObject()
+ {
+ if (value.isObject() != null)
{
- if(value.isObject()!=null)
- {
- return value.isObject();
- }
- else
- {
- throw new IllegalArgumentException("Not an object: " + value);
- }
+ return value.isObject();
}
+ else
+ {
+ throw new IllegalArgumentException("Not an object: " + value);
+ }
+ }
- public String toString() throws JSONException
- {
- return value.toString();
- }
- }
+ public String toString() throws JSONException
+ {
+ return value.toString();
+ }
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/ModelChangeListener.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/ModelChangeListener.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/ModelChangeListener.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -25,11 +25,14 @@
/**
* Get's notified when model change events are fire on {@link ModelListenerRegistry}
+ *
* @author Heiko.Braun <heiko.braun at jboss.com>
*/
public interface ModelChangeListener
{
- void onModelChange(ModelListenerRegistry parent, Object changeEvent);
- void onRecordChange(ModelListenerRegistry parent, Record record);
- void onReset();
+ void onModelChange(ModelListenerRegistry parent, Object changeEvent);
+
+ void onRecordChange(ModelListenerRegistry parent, Record record);
+
+ void onReset();
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/ModelListenerRegistry.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/ModelListenerRegistry.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/ModelListenerRegistry.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -28,39 +28,39 @@
/**
* Utility to propagate model change events to {@link ModelChangeListener}
- *
+ *
* @author Heiko.Braun <heiko.braun at jboss.com>
*/
public class ModelListenerRegistry
{
- private List<ModelChangeListener> listeners = new ArrayList<ModelChangeListener>();
-
- public void addListener(ModelChangeListener listener)
- {
- this.listeners.add(listener);
- }
+ private List<ModelChangeListener> listeners = new ArrayList<ModelChangeListener>();
- public void fireRecordChangeEvent(Record record)
- {
- for(ModelChangeListener l : listeners)
- {
- l.onRecordChange(this, record);
- }
- }
+ public void addListener(ModelChangeListener listener)
+ {
+ this.listeners.add(listener);
+ }
- public void fireModelChangeEvent(Object event)
- {
- for(ModelChangeListener l : listeners)
- {
- l.onModelChange(this, event);
- }
- }
+ public void fireRecordChangeEvent(Record record)
+ {
+ for (ModelChangeListener l : listeners)
+ {
+ l.onRecordChange(this, record);
+ }
+ }
- public void fireResetEvent()
- {
- for(ModelChangeListener l : listeners)
- {
- l.onReset();
- }
- }
+ public void fireModelChangeEvent(Object event)
+ {
+ for (ModelChangeListener l : listeners)
+ {
+ l.onModelChange(this, event);
+ }
+ }
+
+ public void fireResetEvent()
+ {
+ for (ModelChangeListener l : listeners)
+ {
+ l.onReset();
+ }
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/ModelModificationCallback.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/ModelModificationCallback.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/ModelModificationCallback.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -28,5 +28,5 @@
*/
public interface ModelModificationCallback
{
- void onStaleModel();
+ void onStaleModel();
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/FormWidgets.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/FormWidgets.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/FormWidgets.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -27,23 +27,23 @@
/**
* Helps construction common form elements.
- *
+ *
* @author Heiko.Braun <heiko.braun at jboss.com>
*/
public class FormWidgets
{
- public static FormPanel createBaseFormPanel()
- {
- final FormPanel formPanel = new FormPanel();
- formPanel.setLabelAlign(Position.LEFT);
- formPanel.setWidth(UIConstants.EDITOR_PANEL_WIDTH);
- formPanel.setHeader(false);
- formPanel.setFrame(false);
- formPanel.setBorder(false);
- formPanel.setPaddings(5, 5, 5, 0);
- formPanel.setLabelWidth(120);
- return formPanel;
- }
+ public static FormPanel createBaseFormPanel()
+ {
+ final FormPanel formPanel = new FormPanel();
+ formPanel.setLabelAlign(Position.LEFT);
+ formPanel.setWidth(UIConstants.EDITOR_PANEL_WIDTH);
+ formPanel.setHeader(false);
+ formPanel.setFrame(false);
+ formPanel.setBorder(false);
+ formPanel.setPaddings(5, 5, 5, 0);
+ formPanel.setLabelWidth(120);
+ return formPanel;
+ }
-
+
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/HelpPanel.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/HelpPanel.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/HelpPanel.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -30,31 +30,31 @@
*/
public class HelpPanel extends Panel
{
- private int width, height;
+ private int width, height;
- public HelpPanel(int width, int height, String title)
- {
- super();
- setTitle(title);
- setWidth(width);
- setHeight(height);
- setIconCls("bpm-help-icon");
+ public HelpPanel(int width, int height, String title)
+ {
+ super();
+ setTitle(title);
+ setWidth(width);
+ setHeight(height);
+ setIconCls("bpm-help-icon");
- this.width = width;
- this.height = height;
- }
+ this.width = width;
+ this.height = height;
+ }
- public void setContent(String content)
- {
- Panel wrapper = new Panel();
- wrapper.setBaseCls("bpm-help-panel");
- wrapper.setFrame(false);
- wrapper.setHideBorders(true);
- wrapper.setPaddings(5);
- wrapper.add(new HTML(content));
- wrapper.setLayout(new FitLayout());
- wrapper.setWidth(width);
- wrapper.setHeight(height);
- this.add(wrapper);
- }
+ public void setContent(String content)
+ {
+ Panel wrapper = new Panel();
+ wrapper.setBaseCls("bpm-help-panel");
+ wrapper.setFrame(false);
+ wrapper.setHideBorders(true);
+ wrapper.setPaddings(5);
+ wrapper.add(new HTML(content));
+ wrapper.setLayout(new FitLayout());
+ wrapper.setWidth(width);
+ wrapper.setHeight(height);
+ this.add(wrapper);
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/RefreshableComboBox.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/RefreshableComboBox.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/RefreshableComboBox.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -35,56 +35,56 @@
public class RefreshableComboBox extends ComboBox
{
- private final Reader reader;
+ private final Reader reader;
- public RefreshableComboBox(String fieldName, String label)
- {
- super();
- this.reader = new ArrayReader(new RecordDef(
- new FieldDef[]{
- new StringFieldDef(fieldName)
- }
- ));
+ public RefreshableComboBox(String fieldName, String label)
+ {
+ super();
+ this.reader = new ArrayReader(new RecordDef(
+ new FieldDef[]{
+ new StringFieldDef(fieldName)
+ }
+ ));
- MemoryProxy dataProxy = createMemoryProxy(new ArrayList<String>());
- Store store = new Store(dataProxy, reader);
- store.load();
+ MemoryProxy dataProxy = createMemoryProxy(new ArrayList<String>());
+ Store store = new Store(dataProxy, reader);
+ store.load();
- setFieldLabel(label);
- setHiddenName(fieldName);
- setStore(store);
- setDisplayField(fieldName);
- setMode(ComboBox.LOCAL);
- setTriggerAction(ComboBox.ALL);
- setEmptyText("");
- setSelectOnFocus(true);
- setWidth(190);
- setEditable(false);
- }
+ setFieldLabel(label);
+ setHiddenName(fieldName);
+ setStore(store);
+ setDisplayField(fieldName);
+ setMode(ComboBox.LOCAL);
+ setTriggerAction(ComboBox.ALL);
+ setEmptyText("");
+ setSelectOnFocus(true);
+ setWidth(190);
+ setEditable(false);
+ }
- private MemoryProxy createMemoryProxy(List<String> items)
- {
- if(items.isEmpty())
- items.add(UIConstants.DEFAULT_TRANSITION);
+ private MemoryProxy createMemoryProxy(List<String> items)
+ {
+ if (items.isEmpty())
+ items.add(UIConstants.DEFAULT_TRANSITION);
- Object[][] objs = new Object[items.size()][];
- int i=0;
- for(String s : items)
- {
- objs[i] = new Object[]{s};
- i++;
- }
+ Object[][] objs = new Object[items.size()][];
+ int i = 0;
+ for (String s : items)
+ {
+ objs[i] = new Object[]{s};
+ i++;
+ }
- return new MemoryProxy(objs);
- }
+ return new MemoryProxy(objs);
+ }
- public void display(List<String> items)
- {
- super.reset();
-
- MemoryProxy dataProxy = createMemoryProxy(items);
- Store store = new Store(dataProxy, reader);
- store.load();
- super.setStore(store);
- }
+ public void display(List<String> items)
+ {
+ super.reset();
+
+ MemoryProxy dataProxy = createMemoryProxy(items);
+ Store store = new Store(dataProxy, reader);
+ store.load();
+ super.setStore(store);
+ }
}
\ No newline at end of file
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/RemoteListView.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/RemoteListView.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/RemoteListView.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -40,277 +40,281 @@
/**
* A {@link com.gwtext.client.widgets.grid.GridPanel} view that will pull data
* from a remote REST/Json resource.
- * <p>
+ * <p/>
* The view will be lazily initialized by calling {@link com.gwtext.client.data.Store#load()}
* in {@link com.gwtext.client.widgets.event.PanelListenerAdapter#doBeforeRender(com.gwtext.client.widgets.Component)}
- * and subsequently add the grid to the container panel upon {@link com.gwtext.client.data.event.StoreListenerAdapter#onLoad(com.gwtext.client.data.Store, com.gwtext.client.data.Record[])}
+ * and subsequently add the grid to the container panel upon {@link com.gwtext.client.data.event.StoreListenerAdapter#onLoad(com.gwtext.client.data.Store,com.gwtext.client.data.Record[])}
*
* @author Heiko.Braun <heiko.braun at jboss.com>
*/
public abstract class RemoteListView extends Panel
{
- protected int selectedRowIndex = -1;
- protected MainView view;
- public static final int PAGE_SIZE = 25;
- private GridPanel grid;
- protected String title;
+ protected int selectedRowIndex = -1;
+ protected MainView view;
+ public static final int PAGE_SIZE = 25;
+ private GridPanel grid;
+ protected String title;
- protected Store store;
+ protected Store store;
- private ToolbarButton addButton;
- private ToolbarButton deleteButton;
+ private ToolbarButton addButton;
+ private ToolbarButton deleteButton;
- boolean addBtnEnabled = true;
- boolean deleteBtnEnabled = true;
+ boolean addBtnEnabled = true;
+ boolean deleteBtnEnabled = true;
- private RowSelectionModel rowSelectionModel;
+ private RowSelectionModel rowSelectionModel;
- protected String resourceUrl;
+ protected String resourceUrl;
- protected ModelModificationCallback modelModificationCallback;
+ protected ModelModificationCallback modelModificationCallback;
- public RemoteListView(ModelModificationCallback callback, String titleName, MainView view, String resourceUrl)
- {
- super();
+ public RemoteListView(ModelModificationCallback callback, String titleName, MainView view, String resourceUrl)
+ {
+ super();
- this.modelModificationCallback = callback;
- this.title = titleName;
- this.view = view;
- this.resourceUrl = resourceUrl;
- this.setId( getId() + "("+titleName+")");
+ this.modelModificationCallback = callback;
+ //this.title = titleName;
+ this.view = view;
+ this.resourceUrl = resourceUrl;
+ this.setId(getId() + "(" + titleName + ")");
- // ----------------------------------------
+ // ----------------------------------------
- this.setPaddings(10);
- this.setHeader(false);
- this.setBorder(false);
- this.setFrame(false);
+ this.setPaddings(10, 0, 0, 0);
+ this.setHeader(false);
+ this.setBorder(false);
+ this.setFrame(false);
- // ----------------------------------------
+ // ----------------------------------------
- final JsonReader reader = createReader();
- DataProxy dataProxy = new ScriptTagProxy(resourceUrl, 1000*10);
+ final JsonReader reader = createReader();
+ DataProxy dataProxy = new ScriptTagProxy(resourceUrl, 1000 * 10);
- store = new Store(dataProxy, reader, false); // boolean==remoteSort, add's GET parameters
- store.addStoreListener( new ListViewStoreListener(this) );
+ store = new Store(dataProxy, reader, false); // boolean==remoteSort, add's GET parameters
+ store.addStoreListener(new ListViewStoreListener(this));
- // PanelListener will lazy load store data.
- // Store.onLoad() callback will populate the grid
- // and add it to the container panel.
- this.addListener( new PanelListenerAdapter()
+ // PanelListener will lazy load store data.
+ // Store.onLoad() callback will populate the grid
+ // and add it to the container panel.
+ this.addListener(new PanelListenerAdapter()
+ {
+ public boolean doBeforeRender(Component component)
{
- public boolean doBeforeRender(Component component)
- {
- modelModificationCallback.onStaleModel();
- return true;
- }
+ modelModificationCallback.onStaleModel();
+ return true;
}
- );
+ }
+ );
- }
+ }
- protected void enableAddBtn(boolean isEnabled)
- {
- this.addBtnEnabled = isEnabled;
- }
+ protected void enableAddBtn(boolean isEnabled)
+ {
+ this.addBtnEnabled = isEnabled;
+ }
- protected void enableDeleteBtn(boolean isEnabled)
- {
- this.deleteBtnEnabled = isEnabled;
- }
+ protected void enableDeleteBtn(boolean isEnabled)
+ {
+ this.deleteBtnEnabled = isEnabled;
+ }
- protected GridPanel createGridPanel(String titleName)
- {
- GridPanel grid = new GridPanel();
+ protected GridPanel createGridPanel(String titleName)
+ {
+ GridPanel grid = new GridPanel();
- grid.setTitle(titleName);
- grid.setFrame(true);
- grid.setWidth(UIConstants.EDITOR_PANEL_WIDTH);
- grid.stripeRows(true);
- grid.setLoadMask(true);
+ grid.setTitle(titleName);
+ grid.setFrame(true);
+ grid.setBorder(false);
+ grid.setWidth(UIConstants.EDITOR_PANEL_WIDTH);
+ grid.stripeRows(true);
+ grid.setLoadMask(true);
- if(rowSelectionModel!=null)
+ if (rowSelectionModel != null)
+ {
+ grid.setSelectionModel(rowSelectionModel);
+ grid.doOnRender(new Function()
{
- grid.setSelectionModel(rowSelectionModel);
- grid.doOnRender(new Function() {
- public void execute() {
- if(-1==selectedRowIndex)
- {
- rowSelectionModel.selectFirstRow();
- selectedRowIndex = 0;
- }
- else
- {
- rowSelectionModel.selectRow(selectedRowIndex);
- }
- }
- }, 10);
- }
- grid.addGridCellListener( new ListViewCellListener() );
+ public void execute()
+ {
+ if (-1 == selectedRowIndex)
+ {
+ rowSelectionModel.selectFirstRow();
+ selectedRowIndex = 0;
+ }
+ else
+ {
+ rowSelectionModel.selectRow(selectedRowIndex);
+ }
+ }
+ }, 10);
+ }
+ grid.addGridCellListener(new ListViewCellListener());
- return grid;
- }
+ return grid;
+ }
- private PagingToolbar createToolbar(final Store store)
- {
- PagingToolbar pagingToolbar = new PagingToolbar(store);
- pagingToolbar.setPageSize(PAGE_SIZE);
- pagingToolbar.setDisplayInfo(true);
- pagingToolbar.setDisplayMsg("{0} - {1} of {2}");
- //pagingToolbar.setEmptyMsg("No entities to display");
+ private PagingToolbar createToolbar(final Store store)
+ {
+ PagingToolbar pagingToolbar = new PagingToolbar(store);
+ pagingToolbar.setPageSize(PAGE_SIZE);
+ pagingToolbar.setDisplayInfo(true);
+ pagingToolbar.setDisplayMsg("{0} - {1} of {2}");
+ //pagingToolbar.setEmptyMsg("No entities to display");
- pagingToolbar.addSeparator();
- pagingToolbar.addSpacer();
+ pagingToolbar.addSeparator();
+ pagingToolbar.addSpacer();
- ToolbarButton examineButton = new ToolbarButton("Examine", new ButtonListenerAdapter()
+ ToolbarButton examineButton = new ToolbarButton("Examine", new ButtonListenerAdapter()
+ {
+ public void onClick(Button button, EventObject e)
{
- public void onClick(Button button, EventObject e)
- {
- if (-1 == selectedRowIndex)
- MessageBox.alert("Please select a process.");
- else
- onExamine(selectedRowIndex);
- }
- });
- //examineButton.setIcon("images/icons/examine.png");
- examineButton.setTooltip("Examine");
- pagingToolbar.addButton(examineButton);
+ if (-1 == selectedRowIndex)
+ MessageBox.alert("Please select a process.");
+ else
+ onExamine(selectedRowIndex);
+ }
+ });
+ //examineButton.setIcon("images/icons/examine.png");
+ examineButton.setTooltip("Examine");
+ pagingToolbar.addButton(examineButton);
- if(addBtnEnabled)
+ if (addBtnEnabled)
+ {
+ addButton = new ToolbarButton("Add", new ButtonListenerAdapter()
{
- addButton = new ToolbarButton("Add", new ButtonListenerAdapter()
- {
- public void onClick(Button button, EventObject e)
- {
- onAdd();
- }
- });
- //addButton.setIcon("images/icons/add.png");
- addButton.setTooltip("Add");
- pagingToolbar.addButton( addButton );
- }
+ public void onClick(Button button, EventObject e)
+ {
+ onAdd();
+ }
+ });
+ //addButton.setIcon("images/icons/add.png");
+ addButton.setTooltip("Add");
+ pagingToolbar.addButton(addButton);
+ }
- if(deleteBtnEnabled)
+ if (deleteBtnEnabled)
+ {
+ deleteButton = new ToolbarButton("Remove", new ButtonListenerAdapter()
{
- deleteButton = new ToolbarButton("Remove", new ButtonListenerAdapter()
- {
- public void onClick(Button button, EventObject e)
- {
- if (-1 == selectedRowIndex)
- {
- MessageBox.alert("Please select a process.");
- } else
- {
- onDelete(selectedRowIndex);
- }
- }
- });
- //deleteButton.setIcon("images/icons/remove.png");
- deleteButton.setTooltip("Remove");
- pagingToolbar.addButton(deleteButton);
- }
+ public void onClick(Button button, EventObject e)
+ {
+ if (-1 == selectedRowIndex)
+ {
+ MessageBox.alert("Please select a process.");
+ }
+ else
+ {
+ onDelete(selectedRowIndex);
+ }
+ }
+ });
+ //deleteButton.setIcon("images/icons/remove.png");
+ deleteButton.setTooltip("Remove");
+ pagingToolbar.addButton(deleteButton);
+ }
- return pagingToolbar;
- }
+ return pagingToolbar;
+ }
- public abstract void onAdd();
+ public abstract void onAdd();
- public abstract void onExamine(final int row);
+ public abstract void onExamine(final int row);
- public abstract void onDelete(final int row);
+ public abstract void onDelete(final int row);
- protected abstract void onRecordsLoaded(Record[] records);
+ protected abstract void onRecordsLoaded(Record[] records);
- protected abstract ColumnModel createColumnModel();
+ protected abstract ColumnModel createColumnModel();
- protected abstract JsonReader createReader();
+ protected abstract JsonReader createReader();
- private class ListViewStoreListener extends StoreListenerAdapter
- {
+ private class ListViewStoreListener extends StoreListenerAdapter
+ {
- Panel containerPanel;
+ Panel containerPanel;
- public ListViewStoreListener(Panel containerPanel)
- {
- this.containerPanel = containerPanel;
- }
+ public ListViewStoreListener(Panel containerPanel)
+ {
+ this.containerPanel = containerPanel;
+ }
- /**
- * load callback will push records to implementation
- * and (!) add the grid to the container panel.
- */
- public void onLoad(Store store, Record[] records)
- {
+ /**
+ * load callback will push records to implementation
+ * and (!) add the grid to the container panel.
+ */
+ public void onLoad(Store store, Record[] records)
+ {
-
- onRecordsLoaded(records);
- grid = assembleGrid();
+ onRecordsLoaded(records);
- containerPanel.clear();
- containerPanel.add(grid);
- containerPanel.doLayout();
- }
+ grid = assembleGrid();
- public void onLoadException(Throwable throwable)
- {
- ConsoleLog.error("Failed to load remote data", throwable);
- }
+ containerPanel.clear();
+ containerPanel.add(grid);
+ containerPanel.doLayout();
+ }
- }
+ public void onLoadException(Throwable throwable)
+ {
+ ConsoleLog.error("Failed to load remote data", throwable);
+ }
- private GridPanel assembleGrid()
- {
- GridPanel grid = createGridPanel(title);
+ }
- final ColumnModel columnModel = createColumnModel();
- grid.setColumnModel(columnModel);
- grid.setAutoExpandColumn("expand");
+ private GridPanel assembleGrid()
+ {
+ GridPanel grid = createGridPanel(title);
- grid.setStore(store);
-
- PagingToolbar pagingToolbar = createToolbar(store);
- grid.setBottomToolbar(pagingToolbar);
+ final ColumnModel columnModel = createColumnModel();
+ grid.setColumnModel(columnModel);
+ grid.setAutoExpandColumn("expand");
- if(rowSelectionModel!=null)
- grid.setSelectionModel(rowSelectionModel);
-
- return grid;
+ grid.setStore(store);
- }
+ PagingToolbar pagingToolbar = createToolbar(store);
+ grid.setBottomToolbar(pagingToolbar);
- public class ListViewCellListener implements GridCellListener
- {
- public void onCellClick(GridPanel grid, int rowIndex, int colindex, EventObject e)
- {
- selectedRowIndex = rowIndex;
- }
+ if (rowSelectionModel != null)
+ grid.setSelectionModel(rowSelectionModel);
- public void onCellContextMenu(GridPanel gridPanel, int i, int i1, EventObject eventObject)
- {
+ return grid;
- }
+ }
- public void onCellDblClick(GridPanel gridPanel, int i, int i1, EventObject eventObject)
- {
+ public class ListViewCellListener implements GridCellListener
+ {
+ public void onCellClick(GridPanel grid, int rowIndex, int colindex, EventObject e)
+ {
+ selectedRowIndex = rowIndex;
+ }
- }
- }
+ public void onCellContextMenu(GridPanel gridPanel, int i, int i1, EventObject eventObject)
+ {
- public GridPanel getGrid()
- {
- return grid;
- }
+ }
- public void reloadStore()
- {
- ConsoleLog.debug("Reload " + this.getId());
- store.load(0,PAGE_SIZE);
-
- }
+ public void onCellDblClick(GridPanel gridPanel, int i, int i1, EventObject eventObject)
+ {
- public void setRowSelectionModel(RowSelectionModel rowSelectionModel)
- {
- this.rowSelectionModel = rowSelectionModel;
- }
+ }
+ }
+
+ public GridPanel getGrid()
+ {
+ return grid;
+ }
+
+ public void reloadStore()
+ {
+ ConsoleLog.debug("Reload " + this.getId());
+ store.load(0, PAGE_SIZE);
+
+ }
+
+ public void setRowSelectionModel(RowSelectionModel rowSelectionModel)
+ {
+ this.rowSelectionModel = rowSelectionModel;
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/TeaserPanel.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/TeaserPanel.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/TeaserPanel.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -30,14 +30,14 @@
public class TeaserPanel extends Panel
{
- public TeaserPanel()
- {
- super();
+ public TeaserPanel()
+ {
+ super();
- setPaddings(10,0,0,5);
- setLayout(new VerticalLayout(20));
- setHideBorders(true);
- setFrame(false);
- setBorder(false);
- }
+ setPaddings(10, 0, 0, 5);
+ setLayout(new VerticalLayout(20));
+ setHideBorders(true);
+ setFrame(false);
+ setBorder(false);
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/rebind/WorkspaceGenerator.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/rebind/WorkspaceGenerator.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/rebind/WorkspaceGenerator.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -38,11 +38,17 @@
public class WorkspaceGenerator extends Generator
{
- /** Simple name of class to be generated */
+ /**
+ * Simple name of class to be generated
+ */
private String className = null;
- /** Package name of class to be generated */
+ /**
+ * Package name of class to be generated
+ */
private String packageName = null;
- /** Fully qualified class name passed into GWT.create() */
+ /**
+ * Fully qualified class name passed into GWT.create()
+ */
private String typeName = null;
public String generate(TreeLogger logger, GeneratorContext context, String typeName)
@@ -51,7 +57,8 @@
this.typeName = typeName;
TypeOracle typeOracle = context.getTypeOracle();
- try {
+ try
+ {
// get classType and save instance variables
JClassType classType = typeOracle.getType(typeName);
packageName = classType.getPackage().getName();
@@ -60,7 +67,9 @@
// Generate class source code
generateClass(logger, context);
- } catch (Exception e) {
+ }
+ catch (Exception e)
+ {
// record to logger that Map generation threw an exception
e.printStackTrace(System.out);
logger.log(TreeLogger.ERROR, "Failed to generate workspace launcher", e);
@@ -72,13 +81,14 @@
/**
* Generate source code for new class. Class extends
- <code>HashMap</code>.
+ * <code>HashMap</code>.
*
- * @param logger Logger object
+ * @param logger Logger object
* @param context Generator context
*/
private void generateClass(TreeLogger logger, GeneratorContext
- context) {
+ context)
+ {
// get print writer that receives the source code
PrintWriter printWriter = null;
@@ -105,7 +115,6 @@
// Methods
generateMethods(sourceWriter);
-
// close generated class
sourceWriter.outdent();
sourceWriter.println("}");
@@ -124,29 +133,34 @@
"org/jboss/bpm/console/workspace.txt"
);
- if(null==in)
+ if (null == in)
throw new RuntimeException("Cannot find 'org/jboss/bpm/console/workspace.txt'");
- try {
+ try
+ {
//use buffering, reading one line at a time
//FileReader always assumes default encoding is OK!
- BufferedReader input = new BufferedReader(new InputStreamReader(in));
- try {
+ BufferedReader input = new BufferedReader(new InputStreamReader(in));
+ try
+ {
String line = null;
- while (( line = input.readLine()) != null){
+ while ((line = input.readLine()) != null)
+ {
// ignore comments and empty lines
- if(line.equals("") || line.startsWith("#"))
+ if (line.equals("") || line.startsWith("#"))
continue;
-
- sourceWriter.println("workspace.addEditor( new "+line+"(main), false );");
+
+ sourceWriter.println("workspace.addEditor( new " + line + "(main), false );");
}
}
- finally {
+ finally
+ {
input.close();
}
}
- catch (IOException ex){
+ catch (IOException ex)
+ {
throw new RuntimeException("Error reading 'org/jboss/bpm/console/workspace.txt'");
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/json/CDL.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/json/CDL.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/json/CDL.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -29,233 +29,282 @@
* JSONArray, and to covert a JSONArray into comma delimited text. Comma
* delimited text is a very popular format for data interchange. It is
* understood by most database, spreadsheet, and organizer programs.
- * <p>
+ * <p/>
* Each row of text represents a row in a table or a data record. Each row
* ends with a NEWLINE character. Each row contains one or more values.
* Values are separated by commas. A value can contain any character except
* for comma, unless is is wrapped in single quotes or double quotes.
- * <p>
+ * <p/>
* The first row usually contains the names of the columns.
- * <p>
+ * <p/>
* A comma delimited list can be converted into a JSONArray of JSONObjects.
* The names for the elements in the JSONObjects can be taken from the names
* in the first row.
+ *
* @author JSON.org
* @version 2008-09-18
*/
-public class CDL {
+public class CDL
+{
- /**
- * Get the next value. The value can be wrapped in quotes. The value can
- * be empty.
- * @param x A JSONTokener of the source text.
- * @return The value string, or null if empty.
- * @throws JSONException if the quoted string is badly formed.
- */
- private static String getValue(JSONTokener x) throws JSONException {
- char c;
- do {
- c = x.next();
- } while (c == ' ' || c == '\t');
- switch (c) {
- case 0:
- return null;
- case '"':
- case '\'':
- return x.nextString(c);
- case ',':
- x.back();
- return "";
- default:
- x.back();
- return x.nextTo(',');
- }
+ /**
+ * Get the next value. The value can be wrapped in quotes. The value can
+ * be empty.
+ *
+ * @param x A JSONTokener of the source text.
+ * @return The value string, or null if empty.
+ * @throws JSONException if the quoted string is badly formed.
+ */
+ private static String getValue(JSONTokener x) throws JSONException
+ {
+ char c;
+ do
+ {
+ c = x.next();
}
+ while (c == ' ' || c == '\t');
+ switch (c)
+ {
+ case 0:
+ return null;
+ case'"':
+ case'\'':
+ return x.nextString(c);
+ case',':
+ x.back();
+ return "";
+ default:
+ x.back();
+ return x.nextTo(',');
+ }
+ }
- /**
- * Produce a JSONArray of strings from a row of comma delimited values.
- * @param x A JSONTokener of the source text.
- * @return A JSONArray of strings.
- * @throws JSONException
- */
- public static JSONArray rowToJSONArray(JSONTokener x) throws JSONException {
- JSONArray ja = new JSONArray();
- for (;;) {
- String value = getValue(x);
- if (value == null || (ja.length() == 0 && value.length() == 0)) {
- return null;
- }
- ja.put(value);
- for (;;) {
- char c = x.next();
- if (c == ',') {
- break;
- }
- if (c != ' ') {
- if (c == '\n' || c == '\r' || c == 0) {
- return ja;
- }
- throw x.syntaxError("Bad character '" + c + "' (" +
- (int)c + ").");
- }
- }
+ /**
+ * Produce a JSONArray of strings from a row of comma delimited values.
+ *
+ * @param x A JSONTokener of the source text.
+ * @return A JSONArray of strings.
+ * @throws JSONException
+ */
+ public static JSONArray rowToJSONArray(JSONTokener x) throws JSONException
+ {
+ JSONArray ja = new JSONArray();
+ for (; ;)
+ {
+ String value = getValue(x);
+ if (value == null || (ja.length() == 0 && value.length() == 0))
+ {
+ return null;
+ }
+ ja.put(value);
+ for (; ;)
+ {
+ char c = x.next();
+ if (c == ',')
+ {
+ break;
}
+ if (c != ' ')
+ {
+ if (c == '\n' || c == '\r' || c == 0)
+ {
+ return ja;
+ }
+ throw x.syntaxError("Bad character '" + c + "' (" +
+ (int) c + ").");
+ }
+ }
}
+ }
- /**
- * Produce a JSONObject from a row of comma delimited text, using a
- * parallel JSONArray of strings to provides the names of the elements.
- * @param names A JSONArray of names. This is commonly obtained from the
- * first row of a comma delimited text file using the rowToJSONArray
- * method.
- * @param x A JSONTokener of the source text.
- * @return A JSONObject combining the names and values.
- * @throws JSONException
- */
- public static JSONObject rowToJSONObject(JSONArray names, JSONTokener x)
- throws JSONException {
- JSONArray ja = rowToJSONArray(x);
- return ja != null ? ja.toJSONObject(names) : null;
- }
+ /**
+ * Produce a JSONObject from a row of comma delimited text, using a
+ * parallel JSONArray of strings to provides the names of the elements.
+ *
+ * @param names A JSONArray of names. This is commonly obtained from the
+ * first row of a comma delimited text file using the rowToJSONArray
+ * method.
+ * @param x A JSONTokener of the source text.
+ * @return A JSONObject combining the names and values.
+ * @throws JSONException
+ */
+ public static JSONObject rowToJSONObject(JSONArray names, JSONTokener x)
+ throws JSONException
+ {
+ JSONArray ja = rowToJSONArray(x);
+ return ja != null ? ja.toJSONObject(names) : null;
+ }
- /**
- * Produce a JSONArray of JSONObjects from a comma delimited text string,
- * using the first row as a source of names.
- * @param string The comma delimited text.
- * @return A JSONArray of JSONObjects.
- * @throws JSONException
- */
- public static JSONArray toJSONArray(String string) throws JSONException {
- return toJSONArray(new JSONTokener(string));
- }
+ /**
+ * Produce a JSONArray of JSONObjects from a comma delimited text string,
+ * using the first row as a source of names.
+ *
+ * @param string The comma delimited text.
+ * @return A JSONArray of JSONObjects.
+ * @throws JSONException
+ */
+ public static JSONArray toJSONArray(String string) throws JSONException
+ {
+ return toJSONArray(new JSONTokener(string));
+ }
- /**
- * Produce a JSONArray of JSONObjects from a comma delimited text string,
- * using the first row as a source of names.
- * @param x The JSONTokener containing the comma delimited text.
- * @return A JSONArray of JSONObjects.
- * @throws JSONException
- */
- public static JSONArray toJSONArray(JSONTokener x) throws JSONException {
- return toJSONArray(rowToJSONArray(x), x);
- }
+ /**
+ * Produce a JSONArray of JSONObjects from a comma delimited text string,
+ * using the first row as a source of names.
+ *
+ * @param x The JSONTokener containing the comma delimited text.
+ * @return A JSONArray of JSONObjects.
+ * @throws JSONException
+ */
+ public static JSONArray toJSONArray(JSONTokener x) throws JSONException
+ {
+ return toJSONArray(rowToJSONArray(x), x);
+ }
- /**
- * Produce a JSONArray of JSONObjects from a comma delimited text string
- * using a supplied JSONArray as the source of element names.
- * @param names A JSONArray of strings.
- * @param string The comma delimited text.
- * @return A JSONArray of JSONObjects.
- * @throws JSONException
- */
- public static JSONArray toJSONArray(JSONArray names, String string)
- throws JSONException {
- return toJSONArray(names, new JSONTokener(string));
+ /**
+ * Produce a JSONArray of JSONObjects from a comma delimited text string
+ * using a supplied JSONArray as the source of element names.
+ *
+ * @param names A JSONArray of strings.
+ * @param string The comma delimited text.
+ * @return A JSONArray of JSONObjects.
+ * @throws JSONException
+ */
+ public static JSONArray toJSONArray(JSONArray names, String string)
+ throws JSONException
+ {
+ return toJSONArray(names, new JSONTokener(string));
+ }
+
+ /**
+ * Produce a JSONArray of JSONObjects from a comma delimited text string
+ * using a supplied JSONArray as the source of element names.
+ *
+ * @param names A JSONArray of strings.
+ * @param x A JSONTokener of the source text.
+ * @return A JSONArray of JSONObjects.
+ * @throws JSONException
+ */
+ public static JSONArray toJSONArray(JSONArray names, JSONTokener x)
+ throws JSONException
+ {
+ if (names == null || names.length() == 0)
+ {
+ return null;
}
+ JSONArray ja = new JSONArray();
+ for (; ;)
+ {
+ JSONObject jo = rowToJSONObject(names, x);
+ if (jo == null)
+ {
+ break;
+ }
+ ja.put(jo);
+ }
+ if (ja.length() == 0)
+ {
+ return null;
+ }
+ return ja;
+ }
- /**
- * Produce a JSONArray of JSONObjects from a comma delimited text string
- * using a supplied JSONArray as the source of element names.
- * @param names A JSONArray of strings.
- * @param x A JSONTokener of the source text.
- * @return A JSONArray of JSONObjects.
- * @throws JSONException
- */
- public static JSONArray toJSONArray(JSONArray names, JSONTokener x)
- throws JSONException {
- if (names == null || names.length() == 0) {
- return null;
+
+ /**
+ * Produce a comma delimited text row from a JSONArray. Values containing
+ * the comma character will be quoted.
+ *
+ * @param ja A JSONArray of strings.
+ * @return A string ending in NEWLINE.
+ */
+ public static String rowToString(JSONArray ja)
+ {
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < ja.length(); i += 1)
+ {
+ if (i > 0)
+ {
+ sb.append(',');
+ }
+ Object o = ja.opt(i);
+ if (o != null)
+ {
+ String s = o.toString();
+ if (s.indexOf(',') >= 0)
+ {
+ if (s.indexOf('"') >= 0)
+ {
+ sb.append('\'');
+ sb.append(s);
+ sb.append('\'');
+ }
+ else
+ {
+ sb.append('"');
+ sb.append(s);
+ sb.append('"');
+ }
}
- JSONArray ja = new JSONArray();
- for (;;) {
- JSONObject jo = rowToJSONObject(names, x);
- if (jo == null) {
- break;
- }
- ja.put(jo);
+ else
+ {
+ sb.append(s);
}
- if (ja.length() == 0) {
- return null;
- }
- return ja;
+ }
}
+ sb.append('\n');
+ return sb.toString();
+ }
- /**
- * Produce a comma delimited text row from a JSONArray. Values containing
- * the comma character will be quoted.
- * @param ja A JSONArray of strings.
- * @return A string ending in NEWLINE.
- */
- public static String rowToString(JSONArray ja) {
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < ja.length(); i += 1) {
- if (i > 0) {
- sb.append(',');
- }
- Object o = ja.opt(i);
- if (o != null) {
- String s = o.toString();
- if (s.indexOf(',') >= 0) {
- if (s.indexOf('"') >= 0) {
- sb.append('\'');
- sb.append(s);
- sb.append('\'');
- } else {
- sb.append('"');
- sb.append(s);
- sb.append('"');
- }
- } else {
- sb.append(s);
- }
- }
- }
- sb.append('\n');
- return sb.toString();
-
+ /**
+ * Produce a comma delimited text from a JSONArray of JSONObjects. The
+ * first row will be a list of names obtained by inspecting the first
+ * JSONObject.
+ *
+ * @param ja A JSONArray of JSONObjects.
+ * @return A comma delimited text.
+ * @throws JSONException
+ */
+ public static String toString(JSONArray ja) throws JSONException
+ {
+ JSONObject jo = ja.optJSONObject(0);
+ if (jo != null)
+ {
+ JSONArray names = jo.names();
+ if (names != null)
+ {
+ return rowToString(names) + toString(names, ja);
+ }
}
+ return null;
+ }
- /**
- * Produce a comma delimited text from a JSONArray of JSONObjects. The
- * first row will be a list of names obtained by inspecting the first
- * JSONObject.
- * @param ja A JSONArray of JSONObjects.
- * @return A comma delimited text.
- * @throws JSONException
- */
- public static String toString(JSONArray ja) throws JSONException {
- JSONObject jo = ja.optJSONObject(0);
- if (jo != null) {
- JSONArray names = jo.names();
- if (names != null) {
- return rowToString(names) + toString(names, ja);
- }
- }
- return null;
+ /**
+ * Produce a comma delimited text from a JSONArray of JSONObjects using
+ * a provided list of names. The list of names is not included in the
+ * output.
+ *
+ * @param names A JSONArray of strings.
+ * @param ja A JSONArray of JSONObjects.
+ * @return A comma delimited text.
+ * @throws JSONException
+ */
+ public static String toString(JSONArray names, JSONArray ja)
+ throws JSONException
+ {
+ if (names == null || names.length() == 0)
+ {
+ return null;
}
-
- /**
- * Produce a comma delimited text from a JSONArray of JSONObjects using
- * a provided list of names. The list of names is not included in the
- * output.
- * @param names A JSONArray of strings.
- * @param ja A JSONArray of JSONObjects.
- * @return A comma delimited text.
- * @throws JSONException
- */
- public static String toString(JSONArray names, JSONArray ja)
- throws JSONException {
- if (names == null || names.length() == 0) {
- return null;
- }
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < ja.length(); i += 1) {
- JSONObject jo = ja.optJSONObject(i);
- if (jo != null) {
- sb.append(rowToString(jo.toJSONArray(names)));
- }
- }
- return sb.toString();
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < ja.length(); i += 1)
+ {
+ JSONObject jo = ja.optJSONObject(i);
+ if (jo != null)
+ {
+ sb.append(rowToString(jo.toJSONArray(names)));
+ }
}
+ return sb.toString();
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/json/Cookie.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/json/Cookie.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/json/Cookie.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -27,143 +27,173 @@
/**
* Convert a web browser cookie specification to a JSONObject and back.
* JSON and Cookies are both notations for name/value pairs.
+ *
* @author JSON.org
* @version 2008-09-18
*/
-public class Cookie {
+public class Cookie
+{
- /**
- * Produce a copy of a string in which the characters '+', '%', '=', ';'
- * and control characters are replaced with "%hh". This is a gentle form
- * of URL encoding, attempting to cause as little distortion to the
- * string as possible. The characters '=' and ';' are meta characters in
- * cookies. By convention, they are escaped using the URL-encoding. This is
- * only a convention, not a standard. Often, cookies are expected to have
- * encoded values. We encode '=' and ';' because we must. We encode '%' and
- * '+' because they are meta characters in URL encoding.
- * @param string The source string.
- * @return The escaped result.
- */
- public static String escape(String string) {
- char c;
- String s = string.trim();
- StringBuffer sb = new StringBuffer();
- int len = s.length();
- for (int i = 0; i < len; i += 1) {
- c = s.charAt(i);
- if (c < ' ' || c == '+' || c == '%' || c == '=' || c == ';') {
- sb.append('%');
- sb.append(Character.forDigit((char)((c >>> 4) & 0x0f), 16));
- sb.append(Character.forDigit((char)(c & 0x0f), 16));
- } else {
- sb.append(c);
- }
- }
- return sb.toString();
+ /**
+ * Produce a copy of a string in which the characters '+', '%', '=', ';'
+ * and control characters are replaced with "%hh". This is a gentle form
+ * of URL encoding, attempting to cause as little distortion to the
+ * string as possible. The characters '=' and ';' are meta characters in
+ * cookies. By convention, they are escaped using the URL-encoding. This is
+ * only a convention, not a standard. Often, cookies are expected to have
+ * encoded values. We encode '=' and ';' because we must. We encode '%' and
+ * '+' because they are meta characters in URL encoding.
+ *
+ * @param string The source string.
+ * @return The escaped result.
+ */
+ public static String escape(String string)
+ {
+ char c;
+ String s = string.trim();
+ StringBuffer sb = new StringBuffer();
+ int len = s.length();
+ for (int i = 0; i < len; i += 1)
+ {
+ c = s.charAt(i);
+ if (c < ' ' || c == '+' || c == '%' || c == '=' || c == ';')
+ {
+ sb.append('%');
+ sb.append(Character.forDigit((char) ((c >>> 4) & 0x0f), 16));
+ sb.append(Character.forDigit((char) (c & 0x0f), 16));
+ }
+ else
+ {
+ sb.append(c);
+ }
}
+ return sb.toString();
+ }
- /**
- * Convert a cookie specification string into a JSONObject. The string
- * will contain a name value pair separated by '='. The name and the value
- * will be unescaped, possibly converting '+' and '%' sequences. The
- * cookie properties may follow, separated by ';', also represented as
- * name=value (except the secure property, which does not have a value).
- * The name will be stored under the key "name", and the value will be
- * stored under the key "value". This method does not do checking or
- * validation of the parameters. It only converts the cookie string into
- * a JSONObject.
- * @param string The cookie specification string.
- * @return A JSONObject containing "name", "value", and possibly other
- * members.
- * @throws JSONException
- */
- public static JSONObject toJSONObject(String string) throws JSONException {
- String n;
- JSONObject o = new JSONObject();
- Object v;
- JSONTokener x = new JSONTokener(string);
- o.put("name", x.nextTo('='));
- x.next('=');
- o.put("value", x.nextTo(';'));
+ /**
+ * Convert a cookie specification string into a JSONObject. The string
+ * will contain a name value pair separated by '='. The name and the value
+ * will be unescaped, possibly converting '+' and '%' sequences. The
+ * cookie properties may follow, separated by ';', also represented as
+ * name=value (except the secure property, which does not have a value).
+ * The name will be stored under the key "name", and the value will be
+ * stored under the key "value". This method does not do checking or
+ * validation of the parameters. It only converts the cookie string into
+ * a JSONObject.
+ *
+ * @param string The cookie specification string.
+ * @return A JSONObject containing "name", "value", and possibly other
+ * members.
+ * @throws JSONException
+ */
+ public static JSONObject toJSONObject(String string) throws JSONException
+ {
+ String n;
+ JSONObject o = new JSONObject();
+ Object v;
+ JSONTokener x = new JSONTokener(string);
+ o.put("name", x.nextTo('='));
+ x.next('=');
+ o.put("value", x.nextTo(';'));
+ x.next();
+ while (x.more())
+ {
+ n = unescape(x.nextTo("=;"));
+ if (x.next() != '=')
+ {
+ if (n.equals("secure"))
+ {
+ v = Boolean.TRUE;
+ }
+ else
+ {
+ throw x.syntaxError("Missing '=' in cookie parameter.");
+ }
+ }
+ else
+ {
+ v = unescape(x.nextTo(';'));
x.next();
- while (x.more()) {
- n = unescape(x.nextTo("=;"));
- if (x.next() != '=') {
- if (n.equals("secure")) {
- v = Boolean.TRUE;
- } else {
- throw x.syntaxError("Missing '=' in cookie parameter.");
- }
- } else {
- v = unescape(x.nextTo(';'));
- x.next();
- }
- o.put(n, v);
- }
- return o;
+ }
+ o.put(n, v);
}
+ return o;
+ }
- /**
- * Convert a JSONObject into a cookie specification string. The JSONObject
- * must contain "name" and "value" members.
- * If the JSONObject contains "expires", "domain", "path", or "secure"
- * members, they will be appended to the cookie specification string.
- * All other members are ignored.
- * @param o A JSONObject
- * @return A cookie specification string
- * @throws JSONException
- */
- public static String toString(JSONObject o) throws JSONException {
- StringBuffer sb = new StringBuffer();
+ /**
+ * Convert a JSONObject into a cookie specification string. The JSONObject
+ * must contain "name" and "value" members.
+ * If the JSONObject contains "expires", "domain", "path", or "secure"
+ * members, they will be appended to the cookie specification string.
+ * All other members are ignored.
+ *
+ * @param o A JSONObject
+ * @return A cookie specification string
+ * @throws JSONException
+ */
+ public static String toString(JSONObject o) throws JSONException
+ {
+ StringBuffer sb = new StringBuffer();
- sb.append(escape(o.getString("name")));
- sb.append("=");
- sb.append(escape(o.getString("value")));
- if (o.has("expires")) {
- sb.append(";expires=");
- sb.append(o.getString("expires"));
- }
- if (o.has("domain")) {
- sb.append(";domain=");
- sb.append(escape(o.getString("domain")));
- }
- if (o.has("path")) {
- sb.append(";path=");
- sb.append(escape(o.getString("path")));
- }
- if (o.optBoolean("secure")) {
- sb.append(";secure");
- }
- return sb.toString();
+ sb.append(escape(o.getString("name")));
+ sb.append("=");
+ sb.append(escape(o.getString("value")));
+ if (o.has("expires"))
+ {
+ sb.append(";expires=");
+ sb.append(o.getString("expires"));
}
+ if (o.has("domain"))
+ {
+ sb.append(";domain=");
+ sb.append(escape(o.getString("domain")));
+ }
+ if (o.has("path"))
+ {
+ sb.append(";path=");
+ sb.append(escape(o.getString("path")));
+ }
+ if (o.optBoolean("secure"))
+ {
+ sb.append(";secure");
+ }
+ return sb.toString();
+ }
- /**
- * Convert <code>%</code><i>hh</i> sequences to single characters, and
- * convert plus to space.
- * @param s A string that may contain
- * <code>+</code> <small>(plus)</small> and
- * <code>%</code><i>hh</i> sequences.
- * @return The unescaped string.
- */
- public static String unescape(String s) {
- int len = s.length();
- StringBuffer b = new StringBuffer();
- for (int i = 0; i < len; ++i) {
- char c = s.charAt(i);
- if (c == '+') {
- c = ' ';
- } else if (c == '%' && i + 2 < len) {
- int d = JSONTokener.dehexchar(s.charAt(i + 1));
- int e = JSONTokener.dehexchar(s.charAt(i + 2));
- if (d >= 0 && e >= 0) {
- c = (char)(d * 16 + e);
- i += 2;
- }
- }
- b.append(c);
+ /**
+ * Convert <code>%</code><i>hh</i> sequences to single characters, and
+ * convert plus to space.
+ *
+ * @param s A string that may contain
+ * <code>+</code> <small>(plus)</small> and
+ * <code>%</code><i>hh</i> sequences.
+ * @return The unescaped string.
+ */
+ public static String unescape(String s)
+ {
+ int len = s.length();
+ StringBuffer b = new StringBuffer();
+ for (int i = 0; i < len; ++i)
+ {
+ char c = s.charAt(i);
+ if (c == '+')
+ {
+ c = ' ';
+ }
+ else if (c == '%' && i + 2 < len)
+ {
+ int d = JSONTokener.dehexchar(s.charAt(i + 1));
+ int e = JSONTokener.dehexchar(s.charAt(i + 2));
+ if (d >= 0 && e >= 0)
+ {
+ c = (char) (d * 16 + e);
+ i += 2;
}
- return b.toString();
+ }
+ b.append(c);
}
+ return b.toString();
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/json/CookieList.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/json/CookieList.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/json/CookieList.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -28,63 +28,73 @@
/**
* Convert a web browser cookie list string to a JSONObject and back.
+ *
* @author JSON.org
* @version 2008-09-18
*/
-public class CookieList {
+public class CookieList
+{
- /**
- * Convert a cookie list into a JSONObject. A cookie list is a sequence
- * of name/value pairs. The names are separated from the values by '='.
- * The pairs are separated by ';'. The names and the values
- * will be unescaped, possibly converting '+' and '%' sequences.
- *
- * To add a cookie to a cooklist,
- * cookielistJSONObject.put(cookieJSONObject.getString("name"),
- * cookieJSONObject.getString("value"));
- * @param string A cookie list string
- * @return A JSONObject
- * @throws JSONException
- */
- public static JSONObject toJSONObject(String string) throws JSONException {
- JSONObject o = new JSONObject();
- JSONTokener x = new JSONTokener(string);
- while (x.more()) {
- String name = Cookie.unescape(x.nextTo('='));
- x.next('=');
- o.put(name, Cookie.unescape(x.nextTo(';')));
- x.next();
- }
- return o;
+ /**
+ * Convert a cookie list into a JSONObject. A cookie list is a sequence
+ * of name/value pairs. The names are separated from the values by '='.
+ * The pairs are separated by ';'. The names and the values
+ * will be unescaped, possibly converting '+' and '%' sequences.
+ * <p/>
+ * To add a cookie to a cooklist,
+ * cookielistJSONObject.put(cookieJSONObject.getString("name"),
+ * cookieJSONObject.getString("value"));
+ *
+ * @param string A cookie list string
+ * @return A JSONObject
+ * @throws JSONException
+ */
+ public static JSONObject toJSONObject(String string) throws JSONException
+ {
+ JSONObject o = new JSONObject();
+ JSONTokener x = new JSONTokener(string);
+ while (x.more())
+ {
+ String name = Cookie.unescape(x.nextTo('='));
+ x.next('=');
+ o.put(name, Cookie.unescape(x.nextTo(';')));
+ x.next();
}
+ return o;
+ }
- /**
- * Convert a JSONObject into a cookie list. A cookie list is a sequence
- * of name/value pairs. The names are separated from the values by '='.
- * The pairs are separated by ';'. The characters '%', '+', '=', and ';'
- * in the names and values are replaced by "%hh".
- * @param o A JSONObject
- * @return A cookie list string
- * @throws JSONException
- */
- public static String toString(JSONObject o) throws JSONException {
- boolean b = false;
- Iterator keys = o.keys();
- String s;
- StringBuffer sb = new StringBuffer();
- while (keys.hasNext()) {
- s = keys.next().toString();
- if (!o.isNull(s)) {
- if (b) {
- sb.append(';');
- }
- sb.append(Cookie.escape(s));
- sb.append("=");
- sb.append(Cookie.escape(o.getString(s)));
- b = true;
- }
+ /**
+ * Convert a JSONObject into a cookie list. A cookie list is a sequence
+ * of name/value pairs. The names are separated from the values by '='.
+ * The pairs are separated by ';'. The characters '%', '+', '=', and ';'
+ * in the names and values are replaced by "%hh".
+ *
+ * @param o A JSONObject
+ * @return A cookie list string
+ * @throws JSONException
+ */
+ public static String toString(JSONObject o) throws JSONException
+ {
+ boolean b = false;
+ Iterator keys = o.keys();
+ String s;
+ StringBuffer sb = new StringBuffer();
+ while (keys.hasNext())
+ {
+ s = keys.next().toString();
+ if (!o.isNull(s))
+ {
+ if (b)
+ {
+ sb.append(';');
}
- return sb.toString();
+ sb.append(Cookie.escape(s));
+ sb.append("=");
+ sb.append(Cookie.escape(o.getString(s)));
+ b = true;
+ }
}
+ return sb.toString();
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/json/HTTP.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/json/HTTP.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/json/HTTP.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -28,136 +28,155 @@
/**
* Convert an HTTP header to a JSONObject and back.
+ *
* @author JSON.org
* @version 2008-09-18
*/
-public class HTTP {
+public class HTTP
+{
- /** Carriage return/line feed. */
- public static final String CRLF = "\r\n";
+ /**
+ * Carriage return/line feed.
+ */
+ public static final String CRLF = "\r\n";
- /**
- * Convert an HTTP header string into a JSONObject. It can be a request
- * header or a response header. A request header will contain
- * <pre>{
- * Method: "POST" (for example),
- * "Request-URI": "/" (for example),
- * "HTTP-Version": "HTTP/1.1" (for example)
- * }</pre>
- * A response header will contain
- * <pre>{
- * "HTTP-Version": "HTTP/1.1" (for example),
- * "Status-Code": "200" (for example),
- * "Reason-Phrase": "OK" (for example)
- * }</pre>
- * In addition, the other parameters in the header will be captured, using
- * the HTTP field names as JSON names, so that <pre>
- * Date: Sun, 26 May 2002 18:06:04 GMT
- * Cookie: Q=q2=PPEAsg--; B=677gi6ouf29bn&b=2&f=s
- * Cache-Control: no-cache</pre>
- * become
- * <pre>{...
- * Date: "Sun, 26 May 2002 18:06:04 GMT",
- * Cookie: "Q=q2=PPEAsg--; B=677gi6ouf29bn&b=2&f=s",
- * "Cache-Control": "no-cache",
- * ...}</pre>
- * It does no further checking or conversion. It does not parse dates.
- * It does not do '%' transforms on URLs.
- * @param string An HTTP header string.
- * @return A JSONObject containing the elements and attributes
- * of the XML string.
- * @throws JSONException
- */
- public static JSONObject toJSONObject(String string) throws JSONException {
- JSONObject o = new JSONObject();
- HTTPTokener x = new HTTPTokener(string);
- String t;
+ /**
+ * Convert an HTTP header string into a JSONObject. It can be a request
+ * header or a response header. A request header will contain
+ * <pre>{
+ * Method: "POST" (for example),
+ * "Request-URI": "/" (for example),
+ * "HTTP-Version": "HTTP/1.1" (for example)
+ * }</pre>
+ * A response header will contain
+ * <pre>{
+ * "HTTP-Version": "HTTP/1.1" (for example),
+ * "Status-Code": "200" (for example),
+ * "Reason-Phrase": "OK" (for example)
+ * }</pre>
+ * In addition, the other parameters in the header will be captured, using
+ * the HTTP field names as JSON names, so that <pre>
+ * Date: Sun, 26 May 2002 18:06:04 GMT
+ * Cookie: Q=q2=PPEAsg--; B=677gi6ouf29bn&b=2&f=s
+ * Cache-Control: no-cache</pre>
+ * become
+ * <pre>{...
+ * Date: "Sun, 26 May 2002 18:06:04 GMT",
+ * Cookie: "Q=q2=PPEAsg--; B=677gi6ouf29bn&b=2&f=s",
+ * "Cache-Control": "no-cache",
+ * ...}</pre>
+ * It does no further checking or conversion. It does not parse dates.
+ * It does not do '%' transforms on URLs.
+ *
+ * @param string An HTTP header string.
+ * @return A JSONObject containing the elements and attributes
+ * of the XML string.
+ * @throws JSONException
+ */
+ public static JSONObject toJSONObject(String string) throws JSONException
+ {
+ JSONObject o = new JSONObject();
+ HTTPTokener x = new HTTPTokener(string);
+ String t;
- t = x.nextToken();
- if (t.toUpperCase().startsWith("HTTP")) {
+ t = x.nextToken();
+ if (t.toUpperCase().startsWith("HTTP"))
+ {
// Response
- o.put("HTTP-Version", t);
- o.put("Status-Code", x.nextToken());
- o.put("Reason-Phrase", x.nextTo('\0'));
- x.next();
+ o.put("HTTP-Version", t);
+ o.put("Status-Code", x.nextToken());
+ o.put("Reason-Phrase", x.nextTo('\0'));
+ x.next();
- } else {
+ }
+ else
+ {
// Request
- o.put("Method", t);
- o.put("Request-URI", x.nextToken());
- o.put("HTTP-Version", x.nextToken());
- }
+ o.put("Method", t);
+ o.put("Request-URI", x.nextToken());
+ o.put("HTTP-Version", x.nextToken());
+ }
// Fields
- while (x.more()) {
- String name = x.nextTo(':');
- x.next(':');
- o.put(name, x.nextTo('\0'));
- x.next();
- }
- return o;
+ while (x.more())
+ {
+ String name = x.nextTo(':');
+ x.next(':');
+ o.put(name, x.nextTo('\0'));
+ x.next();
}
+ return o;
+ }
- /**
- * Convert a JSONObject into an HTTP header. A request header must contain
- * <pre>{
- * Method: "POST" (for example),
- * "Request-URI": "/" (for example),
- * "HTTP-Version": "HTTP/1.1" (for example)
- * }</pre>
- * A response header must contain
- * <pre>{
- * "HTTP-Version": "HTTP/1.1" (for example),
- * "Status-Code": "200" (for example),
- * "Reason-Phrase": "OK" (for example)
- * }</pre>
- * Any other members of the JSONObject will be output as HTTP fields.
- * The result will end with two CRLF pairs.
- * @param o A JSONObject
- * @return An HTTP header string.
- * @throws JSONException if the object does not contain enough
- * information.
- */
- public static String toString(JSONObject o) throws JSONException {
- Iterator keys = o.keys();
- String s;
- StringBuffer sb = new StringBuffer();
- if (o.has("Status-Code") && o.has("Reason-Phrase")) {
- sb.append(o.getString("HTTP-Version"));
- sb.append(' ');
- sb.append(o.getString("Status-Code"));
- sb.append(' ');
- sb.append(o.getString("Reason-Phrase"));
- } else if (o.has("Method") && o.has("Request-URI")) {
- sb.append(o.getString("Method"));
- sb.append(' ');
- sb.append('"');
- sb.append(o.getString("Request-URI"));
- sb.append('"');
- sb.append(' ');
- sb.append(o.getString("HTTP-Version"));
- } else {
- throw new JSONException("Not enough material for an HTTP header.");
- }
+ /**
+ * Convert a JSONObject into an HTTP header. A request header must contain
+ * <pre>{
+ * Method: "POST" (for example),
+ * "Request-URI": "/" (for example),
+ * "HTTP-Version": "HTTP/1.1" (for example)
+ * }</pre>
+ * A response header must contain
+ * <pre>{
+ * "HTTP-Version": "HTTP/1.1" (for example),
+ * "Status-Code": "200" (for example),
+ * "Reason-Phrase": "OK" (for example)
+ * }</pre>
+ * Any other members of the JSONObject will be output as HTTP fields.
+ * The result will end with two CRLF pairs.
+ *
+ * @param o A JSONObject
+ * @return An HTTP header string.
+ * @throws JSONException if the object does not contain enough
+ * information.
+ */
+ public static String toString(JSONObject o) throws JSONException
+ {
+ Iterator keys = o.keys();
+ String s;
+ StringBuffer sb = new StringBuffer();
+ if (o.has("Status-Code") && o.has("Reason-Phrase"))
+ {
+ sb.append(o.getString("HTTP-Version"));
+ sb.append(' ');
+ sb.append(o.getString("Status-Code"));
+ sb.append(' ');
+ sb.append(o.getString("Reason-Phrase"));
+ }
+ else if (o.has("Method") && o.has("Request-URI"))
+ {
+ sb.append(o.getString("Method"));
+ sb.append(' ');
+ sb.append('"');
+ sb.append(o.getString("Request-URI"));
+ sb.append('"');
+ sb.append(' ');
+ sb.append(o.getString("HTTP-Version"));
+ }
+ else
+ {
+ throw new JSONException("Not enough material for an HTTP header.");
+ }
+ sb.append(CRLF);
+ while (keys.hasNext())
+ {
+ s = keys.next().toString();
+ if (!s.equals("HTTP-Version") && !s.equals("Status-Code") &&
+ !s.equals("Reason-Phrase") && !s.equals("Method") &&
+ !s.equals("Request-URI") && !o.isNull(s))
+ {
+ sb.append(s);
+ sb.append(": ");
+ sb.append(o.getString(s));
sb.append(CRLF);
- while (keys.hasNext()) {
- s = keys.next().toString();
- if (!s.equals("HTTP-Version") && !s.equals("Status-Code") &&
- !s.equals("Reason-Phrase") && !s.equals("Method") &&
- !s.equals("Request-URI") && !o.isNull(s)) {
- sb.append(s);
- sb.append(": ");
- sb.append(o.getString(s));
- sb.append(CRLF);
- }
- }
- sb.append(CRLF);
- return sb.toString();
+ }
}
+ sb.append(CRLF);
+ return sb.toString();
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/json/HTTPTokener.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/json/HTTPTokener.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/json/HTTPTokener.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -27,51 +27,65 @@
/**
* The HTTPTokener extends the JSONTokener to provide additional methods
* for the parsing of HTTP headers.
+ *
* @author JSON.org
* @version 2008-09-18
*/
-public class HTTPTokener extends JSONTokener {
+public class HTTPTokener extends JSONTokener
+{
- /**
- * Construct an XMLTokener from a string.
- * @param s A source string.
- */
- public HTTPTokener(String s) {
- super(s);
- }
+ /**
+ * Construct an XMLTokener from a string.
+ *
+ * @param s A source string.
+ */
+ public HTTPTokener(String s)
+ {
+ super(s);
+ }
- /**
- * Get the next token or string. This is used in parsing HTTP headers.
- * @throws JSONException
- * @return A String.
- */
- public String nextToken() throws JSONException {
- char c;
- char q;
- StringBuffer sb = new StringBuffer();
- do {
- c = next();
- } while (Character.isWhitespace(c));
- if (c == '"' || c == '\'') {
- q = c;
- for (;;) {
- c = next();
- if (c < ' ') {
- throw syntaxError("Unterminated string.");
- }
- if (c == q) {
- return sb.toString();
- }
- sb.append(c);
- }
- }
- for (;;) {
- if (c == 0 || Character.isWhitespace(c)) {
- return sb.toString();
- }
- sb.append(c);
- c = next();
+ /**
+ * Get the next token or string. This is used in parsing HTTP headers.
+ *
+ * @return A String.
+ * @throws JSONException
+ */
+ public String nextToken() throws JSONException
+ {
+ char c;
+ char q;
+ StringBuffer sb = new StringBuffer();
+ do
+ {
+ c = next();
+ }
+ while (Character.isWhitespace(c));
+ if (c == '"' || c == '\'')
+ {
+ q = c;
+ for (; ;)
+ {
+ c = next();
+ if (c < ' ')
+ {
+ throw syntaxError("Unterminated string.");
}
+ if (c == q)
+ {
+ return sb.toString();
+ }
+ sb.append(c);
+ }
}
+ for (; ;)
+ {
+ if (c == 0 || Character.isWhitespace(c))
+ {
+ return sb.toString();
+ }
+ sb.append(c);
+ c = next();
+ }
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/json/JSONArray.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/json/JSONArray.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/json/JSONArray.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -41,896 +41,1046 @@
* <code>Boolean</code>, <code>JSONArray</code>, <code>JSONObject</code>,
* <code>Number</code>, <code>String</code>, or the
* <code>JSONObject.NULL object</code>.
- * <p>
+ * <p/>
* The constructor can convert a JSON text into a Java object. The
* <code>toString</code> method converts to JSON text.
- * <p>
+ * <p/>
* A <code>get</code> method returns a value if one can be found, and throws an
* exception if one cannot be found. An <code>opt</code> method returns a
* default value instead of throwing an exception, and so is useful for
* obtaining optional values.
- * <p>
+ * <p/>
* The generic <code>get()</code> and <code>opt()</code> methods return an
* object which you can cast or query for type. There are also typed
* <code>get</code> and <code>opt</code> methods that do type checking and type
* coersion for you.
- * <p>
+ * <p/>
* The texts produced by the <code>toString</code> methods strictly conform to
* JSON syntax rules. The constructors are more forgiving in the texts they will
* accept:
* <ul>
* <li>An extra <code>,</code> <small>(comma)</small> may appear just
- * before the closing bracket.</li>
+ * before the closing bracket.</li>
* <li>The <code>null</code> value will be inserted when there
- * is <code>,</code> <small>(comma)</small> elision.</li>
+ * is <code>,</code> <small>(comma)</small> elision.</li>
* <li>Strings may be quoted with <code>'</code> <small>(single
- * quote)</small>.</li>
+ * quote)</small>.</li>
* <li>Strings do not need to be quoted at all if they do not begin with a quote
- * or single quote, and if they do not contain leading or trailing spaces,
- * and if they do not contain any of these characters:
- * <code>{ } [ ] / \ : , = ; #</code> and if they do not look like numbers
- * and if they are not the reserved words <code>true</code>,
- * <code>false</code>, or <code>null</code>.</li>
+ * or single quote, and if they do not contain leading or trailing spaces,
+ * and if they do not contain any of these characters:
+ * <code>{ } [ ] / \ : , = ; #</code> and if they do not look like numbers
+ * and if they are not the reserved words <code>true</code>,
+ * <code>false</code>, or <code>null</code>.</li>
* <li>Values can be separated by <code>;</code> <small>(semicolon)</small> as
- * well as by <code>,</code> <small>(comma)</small>.</li>
+ * well as by <code>,</code> <small>(comma)</small>.</li>
* <li>Numbers may have the <code>0-</code> <small>(octal)</small> or
- * <code>0x-</code> <small>(hex)</small> prefix.</li>
+ * <code>0x-</code> <small>(hex)</small> prefix.</li>
* <li>Comments written in the slashshlash, slashstar, and hash conventions
- * will be ignored.</li>
+ * will be ignored.</li>
* </ul>
-
+ *
* @author JSON.org
* @version 2008-09-18
*/
-public class JSONArray {
+public class JSONArray
+{
- /**
- * The arrayList where the JSONArray's properties are kept.
- */
- private ArrayList myArrayList;
+ /**
+ * The arrayList where the JSONArray's properties are kept.
+ */
+ private ArrayList myArrayList;
- /**
- * Construct an empty JSONArray.
- */
- public JSONArray() {
- this.myArrayList = new ArrayList();
+ /**
+ * Construct an empty JSONArray.
+ */
+ public JSONArray()
+ {
+ this.myArrayList = new ArrayList();
+ }
+
+ /**
+ * Construct a JSONArray from a JSONTokener.
+ *
+ * @param x A JSONTokener
+ * @throws JSONException If there is a syntax error.
+ */
+ public JSONArray(JSONTokener x) throws JSONException
+ {
+ this();
+ char c = x.nextClean();
+ char q;
+ if (c == '[')
+ {
+ q = ']';
}
-
- /**
- * Construct a JSONArray from a JSONTokener.
- * @param x A JSONTokener
- * @throws JSONException If there is a syntax error.
- */
- public JSONArray(JSONTokener x) throws JSONException {
- this();
- char c = x.nextClean();
- char q;
- if (c == '[') {
- q = ']';
- } else if (c == '(') {
- q = ')';
- } else {
- throw x.syntaxError("A JSONArray text must start with '['");
- }
- if (x.nextClean() == ']') {
+ else if (c == '(')
+ {
+ q = ')';
+ }
+ else
+ {
+ throw x.syntaxError("A JSONArray text must start with '['");
+ }
+ if (x.nextClean() == ']')
+ {
+ return;
+ }
+ x.back();
+ for (; ;)
+ {
+ if (x.nextClean() == ',')
+ {
+ x.back();
+ this.myArrayList.add(null);
+ }
+ else
+ {
+ x.back();
+ this.myArrayList.add(x.nextValue());
+ }
+ c = x.nextClean();
+ switch (c)
+ {
+ case';':
+ case',':
+ if (x.nextClean() == ']')
+ {
return;
- }
- x.back();
- for (;;) {
- if (x.nextClean() == ',') {
- x.back();
- this.myArrayList.add(null);
- } else {
- x.back();
- this.myArrayList.add(x.nextValue());
- }
- c = x.nextClean();
- switch (c) {
- case ';':
- case ',':
- if (x.nextClean() == ']') {
- return;
- }
- x.back();
- break;
- case ']':
- case ')':
- if (q != c) {
- throw x.syntaxError("Expected a '" + new Character(q) + "'");
- }
- return;
- default:
- throw x.syntaxError("Expected a ',' or ']'");
- }
- }
+ }
+ x.back();
+ break;
+ case']':
+ case')':
+ if (q != c)
+ {
+ throw x.syntaxError("Expected a '" + new Character(q) + "'");
+ }
+ return;
+ default:
+ throw x.syntaxError("Expected a ',' or ']'");
+ }
}
+ }
- /**
- * Construct a JSONArray from a source JSON text.
- * @param source A string that begins with
- * <code>[</code> <small>(left bracket)</small>
- * and ends with <code>]</code> <small>(right bracket)</small>.
- * @throws JSONException If there is a syntax error.
- */
- public JSONArray(String source) throws JSONException {
- this(new JSONTokener(source));
- }
+ /**
+ * Construct a JSONArray from a source JSON text.
+ *
+ * @param source A string that begins with
+ * <code>[</code> <small>(left bracket)</small>
+ * and ends with <code>]</code> <small>(right bracket)</small>.
+ * @throws JSONException If there is a syntax error.
+ */
+ public JSONArray(String source) throws JSONException
+ {
+ this(new JSONTokener(source));
+ }
- /**
- * Construct a JSONArray from a Collection.
- * @param collection A Collection.
- */
- public JSONArray(Collection collection) {
- this.myArrayList = (collection == null) ?
- new ArrayList() :
- new ArrayList(collection);
- }
+ /**
+ * Construct a JSONArray from a Collection.
+ *
+ * @param collection A Collection.
+ */
+ public JSONArray(Collection collection)
+ {
+ this.myArrayList = (collection == null) ?
+ new ArrayList() :
+ new ArrayList(collection);
+ }
- /**
- * Construct a JSONArray from a collection of beans.
- * The collection should have Java Beans.
- *
- * @throws JSONException If not an array.
- */
+ /**
+ * Construct a JSONArray from a collection of beans.
+ * The collection should have Java Beans.
+ *
+ * @throws JSONException If not an array.
+ */
- public JSONArray(Collection collection,boolean includeSuperClass) {
- this.myArrayList = new ArrayList();
- if(collection != null) {
- for (Iterator iter = collection.iterator(); iter.hasNext();) {
- this.myArrayList.add(new JSONObject(iter.next(),includeSuperClass));
- }
- }
+ public JSONArray(Collection collection, boolean includeSuperClass)
+ {
+ this.myArrayList = new ArrayList();
+ if (collection != null)
+ {
+ for (Iterator iter = collection.iterator(); iter.hasNext();)
+ {
+ this.myArrayList.add(new JSONObject(iter.next(), includeSuperClass));
+ }
}
+ }
-
- /**
- * Construct a JSONArray from an array
- * @throws JSONException If not an array.
- */
- public JSONArray(Object array) throws JSONException {
- this();
- if (array.getClass().isArray()) {
- int length = Array.getLength(array);
- for (int i = 0; i < length; i += 1) {
- this.put(Array.get(array, i));
- }
- } else {
- throw new JSONException("JSONArray initial value should be a string or collection or array.");
- }
- }
- /**
- * Construct a JSONArray from an array with a bean.
- * The array should have Java Beans.
- *
- * @throws JSONException If not an array.
- */
- public JSONArray(Object array,boolean includeSuperClass) throws JSONException {
- this();
- if (array.getClass().isArray()) {
- int length = Array.getLength(array);
- for (int i = 0; i < length; i += 1) {
- this.put(new JSONObject(Array.get(array, i),includeSuperClass));
- }
- } else {
- throw new JSONException("JSONArray initial value should be a string or collection or array.");
- }
+ /**
+ * Construct a JSONArray from an array
+ *
+ * @throws JSONException If not an array.
+ */
+ public JSONArray(Object array) throws JSONException
+ {
+ this();
+ if (array.getClass().isArray())
+ {
+ int length = Array.getLength(array);
+ for (int i = 0; i < length; i += 1)
+ {
+ this.put(Array.get(array, i));
+ }
}
+ else
+ {
+ throw new JSONException("JSONArray initial value should be a string or collection or array.");
+ }
+ }
-
-
- /**
- * Get the object value associated with an index.
- * @param index
- * The index must be between 0 and length() - 1.
- * @return An object value.
- * @throws JSONException If there is no value for the index.
- */
- public Object get(int index) throws JSONException {
- Object o = opt(index);
- if (o == null) {
- throw new JSONException("JSONArray[" + index + "] not found.");
- }
- return o;
+ /**
+ * Construct a JSONArray from an array with a bean.
+ * The array should have Java Beans.
+ *
+ * @throws JSONException If not an array.
+ */
+ public JSONArray(Object array, boolean includeSuperClass) throws JSONException
+ {
+ this();
+ if (array.getClass().isArray())
+ {
+ int length = Array.getLength(array);
+ for (int i = 0; i < length; i += 1)
+ {
+ this.put(new JSONObject(Array.get(array, i), includeSuperClass));
+ }
}
+ else
+ {
+ throw new JSONException("JSONArray initial value should be a string or collection or array.");
+ }
+ }
- /**
- * Get the boolean value associated with an index.
- * The string values "true" and "false" are converted to boolean.
- *
- * @param index The index must be between 0 and length() - 1.
- * @return The truth.
- * @throws JSONException If there is no value for the index or if the
- * value is not convertable to boolean.
- */
- public boolean getBoolean(int index) throws JSONException {
- Object o = get(index);
- if (o.equals(Boolean.FALSE) ||
- (o instanceof String &&
- ((String)o).equalsIgnoreCase("false"))) {
- return false;
- } else if (o.equals(Boolean.TRUE) ||
- (o instanceof String &&
- ((String)o).equalsIgnoreCase("true"))) {
- return true;
- }
- throw new JSONException("JSONArray[" + index + "] is not a Boolean.");
+ /**
+ * Get the object value associated with an index.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return An object value.
+ * @throws JSONException If there is no value for the index.
+ */
+ public Object get(int index) throws JSONException
+ {
+ Object o = opt(index);
+ if (o == null)
+ {
+ throw new JSONException("JSONArray[" + index + "] not found.");
}
+ return o;
+ }
- /**
- * Get the double value associated with an index.
- *
- * @param index The index must be between 0 and length() - 1.
- * @return The value.
- * @throws JSONException If the key is not found or if the value cannot
- * be converted to a number.
- */
- public double getDouble(int index) throws JSONException {
- Object o = get(index);
- try {
- return o instanceof Number ?
- ((Number)o).doubleValue() :
- Double.valueOf((String)o).doubleValue();
- } catch (Exception e) {
- throw new JSONException("JSONArray[" + index +
- "] is not a number.");
- }
+ /**
+ * Get the boolean value associated with an index.
+ * The string values "true" and "false" are converted to boolean.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return The truth.
+ * @throws JSONException If there is no value for the index or if the
+ * value is not convertable to boolean.
+ */
+ public boolean getBoolean(int index) throws JSONException
+ {
+ Object o = get(index);
+ if (o.equals(Boolean.FALSE) ||
+ (o instanceof String &&
+ ((String) o).equalsIgnoreCase("false")))
+ {
+ return false;
}
+ else if (o.equals(Boolean.TRUE) ||
+ (o instanceof String &&
+ ((String) o).equalsIgnoreCase("true")))
+ {
+ return true;
+ }
+ throw new JSONException("JSONArray[" + index + "] is not a Boolean.");
+ }
- /**
- * Get the int value associated with an index.
- *
- * @param index The index must be between 0 and length() - 1.
- * @return The value.
- * @throws JSONException If the key is not found or if the value cannot
- * be converted to a number.
- * if the value cannot be converted to a number.
- */
- public int getInt(int index) throws JSONException {
- Object o = get(index);
- return o instanceof Number ?
- ((Number)o).intValue() : (int)getDouble(index);
+ /**
+ * Get the double value associated with an index.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return The value.
+ * @throws JSONException If the key is not found or if the value cannot
+ * be converted to a number.
+ */
+ public double getDouble(int index) throws JSONException
+ {
+ Object o = get(index);
+ try
+ {
+ return o instanceof Number ?
+ ((Number) o).doubleValue() :
+ Double.valueOf((String) o).doubleValue();
}
+ catch (Exception e)
+ {
+ throw new JSONException("JSONArray[" + index +
+ "] is not a number.");
+ }
+ }
- /**
- * Get the JSONArray associated with an index.
- * @param index The index must be between 0 and length() - 1.
- * @return A JSONArray value.
- * @throws JSONException If there is no value for the index. or if the
- * value is not a JSONArray
- */
- public JSONArray getJSONArray(int index) throws JSONException {
- Object o = get(index);
- if (o instanceof JSONArray) {
- return (JSONArray)o;
- }
- throw new JSONException("JSONArray[" + index +
- "] is not a JSONArray.");
- }
+ /**
+ * Get the int value associated with an index.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return The value.
+ * @throws JSONException If the key is not found or if the value cannot
+ * be converted to a number.
+ * if the value cannot be converted to a number.
+ */
+ public int getInt(int index) throws JSONException
+ {
+ Object o = get(index);
+ return o instanceof Number ?
+ ((Number) o).intValue() : (int) getDouble(index);
+ }
- /**
- * Get the JSONObject associated with an index.
- * @param index subscript
- * @return A JSONObject value.
- * @throws JSONException If there is no value for the index or if the
- * value is not a JSONObject
- */
- public JSONObject getJSONObject(int index) throws JSONException {
- Object o = get(index);
- if (o instanceof JSONObject) {
- return (JSONObject)o;
- }
- throw new JSONException("JSONArray[" + index +
- "] is not a JSONObject.");
+ /**
+ * Get the JSONArray associated with an index.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return A JSONArray value.
+ * @throws JSONException If there is no value for the index. or if the
+ * value is not a JSONArray
+ */
+ public JSONArray getJSONArray(int index) throws JSONException
+ {
+ Object o = get(index);
+ if (o instanceof JSONArray)
+ {
+ return (JSONArray) o;
}
+ throw new JSONException("JSONArray[" + index +
+ "] is not a JSONArray.");
+ }
- /**
- * Get the long value associated with an index.
- *
- * @param index The index must be between 0 and length() - 1.
- * @return The value.
- * @throws JSONException If the key is not found or if the value cannot
- * be converted to a number.
- */
- public long getLong(int index) throws JSONException {
- Object o = get(index);
- return o instanceof Number ?
- ((Number)o).longValue() : (long)getDouble(index);
+ /**
+ * Get the JSONObject associated with an index.
+ *
+ * @param index subscript
+ * @return A JSONObject value.
+ * @throws JSONException If there is no value for the index or if the
+ * value is not a JSONObject
+ */
+ public JSONObject getJSONObject(int index) throws JSONException
+ {
+ Object o = get(index);
+ if (o instanceof JSONObject)
+ {
+ return (JSONObject) o;
}
+ throw new JSONException("JSONArray[" + index +
+ "] is not a JSONObject.");
+ }
- /**
- * Get the string associated with an index.
- * @param index The index must be between 0 and length() - 1.
- * @return A string value.
- * @throws JSONException If there is no value for the index.
- */
- public String getString(int index) throws JSONException {
- return get(index).toString();
- }
+ /**
+ * Get the long value associated with an index.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return The value.
+ * @throws JSONException If the key is not found or if the value cannot
+ * be converted to a number.
+ */
+ public long getLong(int index) throws JSONException
+ {
+ Object o = get(index);
+ return o instanceof Number ?
+ ((Number) o).longValue() : (long) getDouble(index);
+ }
- /**
- * Determine if the value is null.
- * @param index The index must be between 0 and length() - 1.
- * @return true if the value at the index is null, or if there is no value.
- */
- public boolean isNull(int index) {
- return JSONObject.NULL.equals(opt(index));
- }
+ /**
+ * Get the string associated with an index.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return A string value.
+ * @throws JSONException If there is no value for the index.
+ */
+ public String getString(int index) throws JSONException
+ {
+ return get(index).toString();
+ }
- /**
- * Make a string from the contents of this JSONArray. The
- * <code>separator</code> string is inserted between each element.
- * Warning: This method assumes that the data structure is acyclical.
- * @param separator A string that will be inserted between the elements.
- * @return a string.
- * @throws JSONException If the array contains an invalid number.
- */
- public String join(String separator) throws JSONException {
- int len = length();
- StringBuffer sb = new StringBuffer();
+ /**
+ * Determine if the value is null.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return true if the value at the index is null, or if there is no value.
+ */
+ public boolean isNull(int index)
+ {
+ return JSONObject.NULL.equals(opt(index));
+ }
- for (int i = 0; i < len; i += 1) {
- if (i > 0) {
- sb.append(separator);
- }
- sb.append(JSONObject.valueToString(this.myArrayList.get(i)));
- }
- return sb.toString();
- }
+ /**
+ * Make a string from the contents of this JSONArray. The
+ * <code>separator</code> string is inserted between each element.
+ * Warning: This method assumes that the data structure is acyclical.
+ *
+ * @param separator A string that will be inserted between the elements.
+ * @return a string.
+ * @throws JSONException If the array contains an invalid number.
+ */
+ public String join(String separator) throws JSONException
+ {
+ int len = length();
+ StringBuffer sb = new StringBuffer();
- /**
- * Get the number of elements in the JSONArray, included nulls.
- *
- * @return The length (or size).
- */
- public int length() {
- return this.myArrayList.size();
+ for (int i = 0; i < len; i += 1)
+ {
+ if (i > 0)
+ {
+ sb.append(separator);
+ }
+ sb.append(JSONObject.valueToString(this.myArrayList.get(i)));
}
+ return sb.toString();
+ }
- /**
- * Get the optional object value associated with an index.
- * @param index The index must be between 0 and length() - 1.
- * @return An object value, or null if there is no
- * object at that index.
- */
- public Object opt(int index) {
- return (index < 0 || index >= length()) ?
- null : this.myArrayList.get(index);
- }
+ /**
+ * Get the number of elements in the JSONArray, included nulls.
+ *
+ * @return The length (or size).
+ */
+ public int length()
+ {
+ return this.myArrayList.size();
+ }
- /**
- * Get the optional boolean value associated with an index.
- * It returns false if there is no value at that index,
- * or if the value is not Boolean.TRUE or the String "true".
- *
- * @param index The index must be between 0 and length() - 1.
- * @return The truth.
- */
- public boolean optBoolean(int index) {
- return optBoolean(index, false);
- }
+ /**
+ * Get the optional object value associated with an index.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return An object value, or null if there is no
+ * object at that index.
+ */
+ public Object opt(int index)
+ {
+ return (index < 0 || index >= length()) ?
+ null : this.myArrayList.get(index);
+ }
- /**
- * Get the optional boolean value associated with an index.
- * It returns the defaultValue if there is no value at that index or if
- * it is not a Boolean or the String "true" or "false" (case insensitive).
- *
- * @param index The index must be between 0 and length() - 1.
- * @param defaultValue A boolean default.
- * @return The truth.
- */
- public boolean optBoolean(int index, boolean defaultValue) {
- try {
- return getBoolean(index);
- } catch (Exception e) {
- return defaultValue;
- }
- }
+ /**
+ * Get the optional boolean value associated with an index.
+ * It returns false if there is no value at that index,
+ * or if the value is not Boolean.TRUE or the String "true".
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return The truth.
+ */
+ public boolean optBoolean(int index)
+ {
+ return optBoolean(index, false);
+ }
- /**
- * Get the optional double value associated with an index.
- * NaN is returned if there is no value for the index,
- * or if the value is not a number and cannot be converted to a number.
- *
- * @param index The index must be between 0 and length() - 1.
- * @return The value.
- */
- public double optDouble(int index) {
- return optDouble(index, Double.NaN);
+ /**
+ * Get the optional boolean value associated with an index.
+ * It returns the defaultValue if there is no value at that index or if
+ * it is not a Boolean or the String "true" or "false" (case insensitive).
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @param defaultValue A boolean default.
+ * @return The truth.
+ */
+ public boolean optBoolean(int index, boolean defaultValue)
+ {
+ try
+ {
+ return getBoolean(index);
}
+ catch (Exception e)
+ {
+ return defaultValue;
+ }
+ }
- /**
- * Get the optional double value associated with an index.
- * The defaultValue is returned if there is no value for the index,
- * or if the value is not a number and cannot be converted to a number.
- *
- * @param index subscript
- * @param defaultValue The default value.
- * @return The value.
- */
- public double optDouble(int index, double defaultValue) {
- try {
- return getDouble(index);
- } catch (Exception e) {
- return defaultValue;
- }
- }
+ /**
+ * Get the optional double value associated with an index.
+ * NaN is returned if there is no value for the index,
+ * or if the value is not a number and cannot be converted to a number.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return The value.
+ */
+ public double optDouble(int index)
+ {
+ return optDouble(index, Double.NaN);
+ }
- /**
- * Get the optional int value associated with an index.
- * Zero is returned if there is no value for the index,
- * or if the value is not a number and cannot be converted to a number.
- *
- * @param index The index must be between 0 and length() - 1.
- * @return The value.
- */
- public int optInt(int index) {
- return optInt(index, 0);
+ /**
+ * Get the optional double value associated with an index.
+ * The defaultValue is returned if there is no value for the index,
+ * or if the value is not a number and cannot be converted to a number.
+ *
+ * @param index subscript
+ * @param defaultValue The default value.
+ * @return The value.
+ */
+ public double optDouble(int index, double defaultValue)
+ {
+ try
+ {
+ return getDouble(index);
}
+ catch (Exception e)
+ {
+ return defaultValue;
+ }
+ }
- /**
- * Get the optional int value associated with an index.
- * The defaultValue is returned if there is no value for the index,
- * or if the value is not a number and cannot be converted to a number.
- * @param index The index must be between 0 and length() - 1.
- * @param defaultValue The default value.
- * @return The value.
- */
- public int optInt(int index, int defaultValue) {
- try {
- return getInt(index);
- } catch (Exception e) {
- return defaultValue;
- }
- }
+ /**
+ * Get the optional int value associated with an index.
+ * Zero is returned if there is no value for the index,
+ * or if the value is not a number and cannot be converted to a number.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return The value.
+ */
+ public int optInt(int index)
+ {
+ return optInt(index, 0);
+ }
- /**
- * Get the optional JSONArray associated with an index.
- * @param index subscript
- * @return A JSONArray value, or null if the index has no value,
- * or if the value is not a JSONArray.
- */
- public JSONArray optJSONArray(int index) {
- Object o = opt(index);
- return o instanceof JSONArray ? (JSONArray)o : null;
+ /**
+ * Get the optional int value associated with an index.
+ * The defaultValue is returned if there is no value for the index,
+ * or if the value is not a number and cannot be converted to a number.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @param defaultValue The default value.
+ * @return The value.
+ */
+ public int optInt(int index, int defaultValue)
+ {
+ try
+ {
+ return getInt(index);
}
+ catch (Exception e)
+ {
+ return defaultValue;
+ }
+ }
- /**
- * Get the optional JSONObject associated with an index.
- * Null is returned if the key is not found, or null if the index has
- * no value, or if the value is not a JSONObject.
- *
- * @param index The index must be between 0 and length() - 1.
- * @return A JSONObject value.
- */
- public JSONObject optJSONObject(int index) {
- Object o = opt(index);
- return o instanceof JSONObject ? (JSONObject)o : null;
- }
+ /**
+ * Get the optional JSONArray associated with an index.
+ *
+ * @param index subscript
+ * @return A JSONArray value, or null if the index has no value,
+ * or if the value is not a JSONArray.
+ */
+ public JSONArray optJSONArray(int index)
+ {
+ Object o = opt(index);
+ return o instanceof JSONArray ? (JSONArray) o : null;
+ }
- /**
- * Get the optional long value associated with an index.
- * Zero is returned if there is no value for the index,
- * or if the value is not a number and cannot be converted to a number.
- *
- * @param index The index must be between 0 and length() - 1.
- * @return The value.
- */
- public long optLong(int index) {
- return optLong(index, 0);
- }
+ /**
+ * Get the optional JSONObject associated with an index.
+ * Null is returned if the key is not found, or null if the index has
+ * no value, or if the value is not a JSONObject.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return A JSONObject value.
+ */
+ public JSONObject optJSONObject(int index)
+ {
+ Object o = opt(index);
+ return o instanceof JSONObject ? (JSONObject) o : null;
+ }
- /**
- * Get the optional long value associated with an index.
- * The defaultValue is returned if there is no value for the index,
- * or if the value is not a number and cannot be converted to a number.
- * @param index The index must be between 0 and length() - 1.
- * @param defaultValue The default value.
- * @return The value.
- */
- public long optLong(int index, long defaultValue) {
- try {
- return getLong(index);
- } catch (Exception e) {
- return defaultValue;
- }
- }
+ /**
+ * Get the optional long value associated with an index.
+ * Zero is returned if there is no value for the index,
+ * or if the value is not a number and cannot be converted to a number.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return The value.
+ */
+ public long optLong(int index)
+ {
+ return optLong(index, 0);
+ }
- /**
- * Get the optional string value associated with an index. It returns an
- * empty string if there is no value at that index. If the value
- * is not a string and is not null, then it is coverted to a string.
- *
- * @param index The index must be between 0 and length() - 1.
- * @return A String value.
- */
- public String optString(int index) {
- return optString(index, "");
+ /**
+ * Get the optional long value associated with an index.
+ * The defaultValue is returned if there is no value for the index,
+ * or if the value is not a number and cannot be converted to a number.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @param defaultValue The default value.
+ * @return The value.
+ */
+ public long optLong(int index, long defaultValue)
+ {
+ try
+ {
+ return getLong(index);
}
+ catch (Exception e)
+ {
+ return defaultValue;
+ }
+ }
- /**
- * Get the optional string associated with an index.
- * The defaultValue is returned if the key is not found.
- *
- * @param index The index must be between 0 and length() - 1.
- * @param defaultValue The default value.
- * @return A String value.
- */
- public String optString(int index, String defaultValue) {
- Object o = opt(index);
- return o != null ? o.toString() : defaultValue;
- }
+ /**
+ * Get the optional string value associated with an index. It returns an
+ * empty string if there is no value at that index. If the value
+ * is not a string and is not null, then it is coverted to a string.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @return A String value.
+ */
+ public String optString(int index)
+ {
+ return optString(index, "");
+ }
- /**
- * Append a boolean value. This increases the array's length by one.
- *
- * @param value A boolean value.
- * @return this.
- */
- public JSONArray put(boolean value) {
- put(value ? Boolean.TRUE : Boolean.FALSE);
- return this;
- }
+ /**
+ * Get the optional string associated with an index.
+ * The defaultValue is returned if the key is not found.
+ *
+ * @param index The index must be between 0 and length() - 1.
+ * @param defaultValue The default value.
+ * @return A String value.
+ */
+ public String optString(int index, String defaultValue)
+ {
+ Object o = opt(index);
+ return o != null ? o.toString() : defaultValue;
+ }
- /**
- * Put a value in the JSONArray, where the value will be a
- * JSONArray which is produced from a Collection.
- * @param value A Collection value.
- * @return this.
- */
- public JSONArray put(Collection value) {
- put(new JSONArray(value));
- return this;
- }
+ /**
+ * Append a boolean value. This increases the array's length by one.
+ *
+ * @param value A boolean value.
+ * @return this.
+ */
+ public JSONArray put(boolean value)
+ {
+ put(value ? Boolean.TRUE : Boolean.FALSE);
+ return this;
+ }
- /**
- * Append a double value. This increases the array's length by one.
- *
- * @param value A double value.
- * @throws JSONException if the value is not finite.
- * @return this.
- */
- public JSONArray put(double value) throws JSONException {
- Double d = new Double(value);
- JSONObject.testValidity(d);
- put(d);
- return this;
- }
+ /**
+ * Put a value in the JSONArray, where the value will be a
+ * JSONArray which is produced from a Collection.
+ *
+ * @param value A Collection value.
+ * @return this.
+ */
+ public JSONArray put(Collection value)
+ {
+ put(new JSONArray(value));
+ return this;
+ }
- /**
- * Append an int value. This increases the array's length by one.
- *
- * @param value An int value.
- * @return this.
- */
- public JSONArray put(int value) {
- put(new Integer(value));
- return this;
- }
+ /**
+ * Append a double value. This increases the array's length by one.
+ *
+ * @param value A double value.
+ * @return this.
+ * @throws JSONException if the value is not finite.
+ */
+ public JSONArray put(double value) throws JSONException
+ {
+ Double d = new Double(value);
+ JSONObject.testValidity(d);
+ put(d);
+ return this;
+ }
- /**
- * Append an long value. This increases the array's length by one.
- *
- * @param value A long value.
- * @return this.
- */
- public JSONArray put(long value) {
- put(new Long(value));
- return this;
- }
+ /**
+ * Append an int value. This increases the array's length by one.
+ *
+ * @param value An int value.
+ * @return this.
+ */
+ public JSONArray put(int value)
+ {
+ put(new Integer(value));
+ return this;
+ }
- /**
- * Put a value in the JSONArray, where the value will be a
- * JSONObject which is produced from a Map.
- * @param value A Map value.
- * @return this.
- */
- public JSONArray put(Map value) {
- put(new JSONObject(value));
- return this;
- }
+ /**
+ * Append an long value. This increases the array's length by one.
+ *
+ * @param value A long value.
+ * @return this.
+ */
+ public JSONArray put(long value)
+ {
+ put(new Long(value));
+ return this;
+ }
- /**
- * Append an object value. This increases the array's length by one.
- * @param value An object value. The value should be a
- * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the
- * JSONObject.NULL object.
- * @return this.
- */
- public JSONArray put(Object value) {
- this.myArrayList.add(value);
- return this;
- }
+ /**
+ * Put a value in the JSONArray, where the value will be a
+ * JSONObject which is produced from a Map.
+ *
+ * @param value A Map value.
+ * @return this.
+ */
+ public JSONArray put(Map value)
+ {
+ put(new JSONObject(value));
+ return this;
+ }
- /**
- * Put or replace a boolean value in the JSONArray. If the index is greater
- * than the length of the JSONArray, then null elements will be added as
- * necessary to pad it out.
- * @param index The subscript.
- * @param value A boolean value.
- * @return this.
- * @throws JSONException If the index is negative.
- */
- public JSONArray put(int index, boolean value) throws JSONException {
- put(index, value ? Boolean.TRUE : Boolean.FALSE);
- return this;
- }
+ /**
+ * Append an object value. This increases the array's length by one.
+ *
+ * @param value An object value. The value should be a
+ * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the
+ * JSONObject.NULL object.
+ * @return this.
+ */
+ public JSONArray put(Object value)
+ {
+ this.myArrayList.add(value);
+ return this;
+ }
- /**
- * Put a value in the JSONArray, where the value will be a
- * JSONArray which is produced from a Collection.
- * @param index The subscript.
- * @param value A Collection value.
- * @return this.
- * @throws JSONException If the index is negative or if the value is
- * not finite.
- */
- public JSONArray put(int index, Collection value) throws JSONException {
- put(index, new JSONArray(value));
- return this;
- }
+ /**
+ * Put or replace a boolean value in the JSONArray. If the index is greater
+ * than the length of the JSONArray, then null elements will be added as
+ * necessary to pad it out.
+ *
+ * @param index The subscript.
+ * @param value A boolean value.
+ * @return this.
+ * @throws JSONException If the index is negative.
+ */
+ public JSONArray put(int index, boolean value) throws JSONException
+ {
+ put(index, value ? Boolean.TRUE : Boolean.FALSE);
+ return this;
+ }
- /**
- * Put or replace a double value. If the index is greater than the length of
- * the JSONArray, then null elements will be added as necessary to pad
- * it out.
- * @param index The subscript.
- * @param value A double value.
- * @return this.
- * @throws JSONException If the index is negative or if the value is
- * not finite.
- */
- public JSONArray put(int index, double value) throws JSONException {
- put(index, new Double(value));
- return this;
- }
+ /**
+ * Put a value in the JSONArray, where the value will be a
+ * JSONArray which is produced from a Collection.
+ *
+ * @param index The subscript.
+ * @param value A Collection value.
+ * @return this.
+ * @throws JSONException If the index is negative or if the value is
+ * not finite.
+ */
+ public JSONArray put(int index, Collection value) throws JSONException
+ {
+ put(index, new JSONArray(value));
+ return this;
+ }
- /**
- * Put or replace an int value. If the index is greater than the length of
- * the JSONArray, then null elements will be added as necessary to pad
- * it out.
- * @param index The subscript.
- * @param value An int value.
- * @return this.
- * @throws JSONException If the index is negative.
- */
- public JSONArray put(int index, int value) throws JSONException {
- put(index, new Integer(value));
- return this;
- }
+ /**
+ * Put or replace a double value. If the index is greater than the length of
+ * the JSONArray, then null elements will be added as necessary to pad
+ * it out.
+ *
+ * @param index The subscript.
+ * @param value A double value.
+ * @return this.
+ * @throws JSONException If the index is negative or if the value is
+ * not finite.
+ */
+ public JSONArray put(int index, double value) throws JSONException
+ {
+ put(index, new Double(value));
+ return this;
+ }
- /**
- * Put or replace a long value. If the index is greater than the length of
- * the JSONArray, then null elements will be added as necessary to pad
- * it out.
- * @param index The subscript.
- * @param value A long value.
- * @return this.
- * @throws JSONException If the index is negative.
- */
- public JSONArray put(int index, long value) throws JSONException {
- put(index, new Long(value));
- return this;
- }
+ /**
+ * Put or replace an int value. If the index is greater than the length of
+ * the JSONArray, then null elements will be added as necessary to pad
+ * it out.
+ *
+ * @param index The subscript.
+ * @param value An int value.
+ * @return this.
+ * @throws JSONException If the index is negative.
+ */
+ public JSONArray put(int index, int value) throws JSONException
+ {
+ put(index, new Integer(value));
+ return this;
+ }
- /**
- * Put a value in the JSONArray, where the value will be a
- * JSONObject which is produced from a Map.
- * @param index The subscript.
- * @param value The Map value.
- * @return this.
- * @throws JSONException If the index is negative or if the the value is
- * an invalid number.
- */
- public JSONArray put(int index, Map value) throws JSONException {
- put(index, new JSONObject(value));
- return this;
- }
+ /**
+ * Put or replace a long value. If the index is greater than the length of
+ * the JSONArray, then null elements will be added as necessary to pad
+ * it out.
+ *
+ * @param index The subscript.
+ * @param value A long value.
+ * @return this.
+ * @throws JSONException If the index is negative.
+ */
+ public JSONArray put(int index, long value) throws JSONException
+ {
+ put(index, new Long(value));
+ return this;
+ }
- /**
- * Put or replace an object value in the JSONArray. If the index is greater
- * than the length of the JSONArray, then null elements will be added as
- * necessary to pad it out.
- * @param index The subscript.
- * @param value The value to put into the array. The value should be a
- * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the
- * JSONObject.NULL object.
- * @return this.
- * @throws JSONException If the index is negative or if the the value is
- * an invalid number.
- */
- public JSONArray put(int index, Object value) throws JSONException {
- JSONObject.testValidity(value);
- if (index < 0) {
- throw new JSONException("JSONArray[" + index + "] not found.");
- }
- if (index < length()) {
- this.myArrayList.set(index, value);
- } else {
- while (index != length()) {
- put(JSONObject.NULL);
- }
- put(value);
- }
- return this;
- }
+ /**
+ * Put a value in the JSONArray, where the value will be a
+ * JSONObject which is produced from a Map.
+ *
+ * @param index The subscript.
+ * @param value The Map value.
+ * @return this.
+ * @throws JSONException If the index is negative or if the the value is
+ * an invalid number.
+ */
+ public JSONArray put(int index, Map value) throws JSONException
+ {
+ put(index, new JSONObject(value));
+ return this;
+ }
- /**
- * Produce a JSONObject by combining a JSONArray of names with the values
- * of this JSONArray.
- * @param names A JSONArray containing a list of key strings. These will be
- * paired with the values.
- * @return A JSONObject, or null if there are no names or if this JSONArray
- * has no values.
- * @throws JSONException If any of the names are null.
- */
- public JSONObject toJSONObject(JSONArray names) throws JSONException {
- if (names == null || names.length() == 0 || length() == 0) {
- return null;
- }
- JSONObject jo = new JSONObject();
- for (int i = 0; i < names.length(); i += 1) {
- jo.put(names.getString(i), this.opt(i));
- }
- return jo;
+ /**
+ * Put or replace an object value in the JSONArray. If the index is greater
+ * than the length of the JSONArray, then null elements will be added as
+ * necessary to pad it out.
+ *
+ * @param index The subscript.
+ * @param value The value to put into the array. The value should be a
+ * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the
+ * JSONObject.NULL object.
+ * @return this.
+ * @throws JSONException If the index is negative or if the the value is
+ * an invalid number.
+ */
+ public JSONArray put(int index, Object value) throws JSONException
+ {
+ JSONObject.testValidity(value);
+ if (index < 0)
+ {
+ throw new JSONException("JSONArray[" + index + "] not found.");
}
+ if (index < length())
+ {
+ this.myArrayList.set(index, value);
+ }
+ else
+ {
+ while (index != length())
+ {
+ put(JSONObject.NULL);
+ }
+ put(value);
+ }
+ return this;
+ }
- /**
- * Make a JSON text of this JSONArray. For compactness, no
- * unnecessary whitespace is added. If it is not possible to produce a
- * syntactically correct JSON text then null will be returned instead. This
- * could occur if the array contains an invalid number.
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- *
- * @return a printable, displayable, transmittable
- * representation of the array.
- */
- public String toString() {
- try {
- return '[' + join(",") + ']';
- } catch (Exception e) {
- return null;
- }
+ /**
+ * Produce a JSONObject by combining a JSONArray of names with the values
+ * of this JSONArray.
+ *
+ * @param names A JSONArray containing a list of key strings. These will be
+ * paired with the values.
+ * @return A JSONObject, or null if there are no names or if this JSONArray
+ * has no values.
+ * @throws JSONException If any of the names are null.
+ */
+ public JSONObject toJSONObject(JSONArray names) throws JSONException
+ {
+ if (names == null || names.length() == 0 || length() == 0)
+ {
+ return null;
}
+ JSONObject jo = new JSONObject();
+ for (int i = 0; i < names.length(); i += 1)
+ {
+ jo.put(names.getString(i), this.opt(i));
+ }
+ return jo;
+ }
- /**
- * Make a prettyprinted JSON text of this JSONArray.
- * Warning: This method assumes that the data structure is acyclical.
- * @param indentFactor The number of spaces to add to each level of
- * indentation.
- * @return a printable, displayable, transmittable
- * representation of the object, beginning
- * with <code>[</code> <small>(left bracket)</small> and ending
- * with <code>]</code> <small>(right bracket)</small>.
- * @throws JSONException
- */
- public String toString(int indentFactor) throws JSONException {
- return toString(indentFactor, 0);
+ /**
+ * Make a JSON text of this JSONArray. For compactness, no
+ * unnecessary whitespace is added. If it is not possible to produce a
+ * syntactically correct JSON text then null will be returned instead. This
+ * could occur if the array contains an invalid number.
+ * <p/>
+ * Warning: This method assumes that the data structure is acyclical.
+ *
+ * @return a printable, displayable, transmittable
+ * representation of the array.
+ */
+ public String toString()
+ {
+ try
+ {
+ return '[' + join(",") + ']';
}
+ catch (Exception e)
+ {
+ return null;
+ }
+ }
- /**
- * Make a prettyprinted JSON text of this JSONArray.
- * Warning: This method assumes that the data structure is acyclical.
- * @param indentFactor The number of spaces to add to each level of
- * indentation.
- * @param indent The indention of the top level.
- * @return a printable, displayable, transmittable
- * representation of the array.
- * @throws JSONException
- */
- String toString(int indentFactor, int indent) throws JSONException {
- int len = length();
- if (len == 0) {
- return "[]";
+ /**
+ * Make a prettyprinted JSON text of this JSONArray.
+ * Warning: This method assumes that the data structure is acyclical.
+ *
+ * @param indentFactor The number of spaces to add to each level of
+ * indentation.
+ * @return a printable, displayable, transmittable
+ * representation of the object, beginning
+ * with <code>[</code> <small>(left bracket)</small> and ending
+ * with <code>]</code> <small>(right bracket)</small>.
+ * @throws JSONException
+ */
+ public String toString(int indentFactor) throws JSONException
+ {
+ return toString(indentFactor, 0);
+ }
+
+
+ /**
+ * Make a prettyprinted JSON text of this JSONArray.
+ * Warning: This method assumes that the data structure is acyclical.
+ *
+ * @param indentFactor The number of spaces to add to each level of
+ * indentation.
+ * @param indent The indention of the top level.
+ * @return a printable, displayable, transmittable
+ * representation of the array.
+ * @throws JSONException
+ */
+ String toString(int indentFactor, int indent) throws JSONException
+ {
+ int len = length();
+ if (len == 0)
+ {
+ return "[]";
+ }
+ int i;
+ StringBuffer sb = new StringBuffer("[");
+ if (len == 1)
+ {
+ sb.append(JSONObject.valueToString(this.myArrayList.get(0),
+ indentFactor, indent));
+ }
+ else
+ {
+ int newindent = indent + indentFactor;
+ sb.append('\n');
+ for (i = 0; i < len; i += 1)
+ {
+ if (i > 0)
+ {
+ sb.append(",\n");
}
- int i;
- StringBuffer sb = new StringBuffer("[");
- if (len == 1) {
- sb.append(JSONObject.valueToString(this.myArrayList.get(0),
- indentFactor, indent));
- } else {
- int newindent = indent + indentFactor;
- sb.append('\n');
- for (i = 0; i < len; i += 1) {
- if (i > 0) {
- sb.append(",\n");
- }
- for (int j = 0; j < newindent; j += 1) {
- sb.append(' ');
- }
- sb.append(JSONObject.valueToString(this.myArrayList.get(i),
- indentFactor, newindent));
- }
- sb.append('\n');
- for (i = 0; i < indent; i += 1) {
- sb.append(' ');
- }
+ for (int j = 0; j < newindent; j += 1)
+ {
+ sb.append(' ');
}
- sb.append(']');
- return sb.toString();
+ sb.append(JSONObject.valueToString(this.myArrayList.get(i),
+ indentFactor, newindent));
+ }
+ sb.append('\n');
+ for (i = 0; i < indent; i += 1)
+ {
+ sb.append(' ');
+ }
}
+ sb.append(']');
+ return sb.toString();
+ }
- /**
- * Write the contents of the JSONArray as JSON text to a writer.
- * For compactness, no whitespace is added.
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- *
- * @return The writer.
- * @throws JSONException
- */
- public Writer write(Writer writer) throws JSONException {
- try {
- boolean b = false;
- int len = length();
+ /**
+ * Write the contents of the JSONArray as JSON text to a writer.
+ * For compactness, no whitespace is added.
+ * <p/>
+ * Warning: This method assumes that the data structure is acyclical.
+ *
+ * @return The writer.
+ * @throws JSONException
+ */
+ public Writer write(Writer writer) throws JSONException
+ {
+ try
+ {
+ boolean b = false;
+ int len = length();
- writer.write('[');
+ writer.write('[');
- for (int i = 0; i < len; i += 1) {
- if (b) {
- writer.write(',');
- }
- Object v = this.myArrayList.get(i);
- if (v instanceof JSONObject) {
- ((JSONObject)v).write(writer);
- } else if (v instanceof JSONArray) {
- ((JSONArray)v).write(writer);
- } else {
- writer.write(JSONObject.valueToString(v));
- }
- b = true;
- }
- writer.write(']');
- return writer;
- } catch (IOException e) {
- throw new JSONException(e);
+ for (int i = 0; i < len; i += 1)
+ {
+ if (b)
+ {
+ writer.write(',');
}
+ Object v = this.myArrayList.get(i);
+ if (v instanceof JSONObject)
+ {
+ ((JSONObject) v).write(writer);
+ }
+ else if (v instanceof JSONArray)
+ {
+ ((JSONArray) v).write(writer);
+ }
+ else
+ {
+ writer.write(JSONObject.valueToString(v));
+ }
+ b = true;
+ }
+ writer.write(']');
+ return writer;
}
+ catch (IOException e)
+ {
+ throw new JSONException(e);
+ }
+ }
}
\ No newline at end of file
Modified: projects/gwt-console/trunk/war/src/main/java/org/json/JSONException.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/json/JSONException.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/json/JSONException.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -2,26 +2,32 @@
/**
* The JSONException is thrown by the JSON.org classes then things are amiss.
+ *
* @author JSON.org
* @version 2008-09-18
*/
-public class JSONException extends Exception {
- private Throwable cause;
+public class JSONException extends Exception
+{
+ private Throwable cause;
- /**
- * Constructs a JSONException with an explanatory message.
- * @param message Detail about the reason for the exception.
- */
- public JSONException(String message) {
- super(message);
- }
+ /**
+ * Constructs a JSONException with an explanatory message.
+ *
+ * @param message Detail about the reason for the exception.
+ */
+ public JSONException(String message)
+ {
+ super(message);
+ }
- public JSONException(Throwable t) {
- super(t.getMessage());
- this.cause = t;
- }
+ public JSONException(Throwable t)
+ {
+ super(t.getMessage());
+ this.cause = t;
+ }
- public Throwable getCause() {
- return this.cause;
- }
+ public Throwable getCause()
+ {
+ return this.cause;
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/json/JSONML.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/json/JSONML.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/json/JSONML.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -28,420 +28,526 @@
/**
- * This provides static methods to convert an XML text into a JSONArray or
- * JSONObject, and to covert a JSONArray or JSONObject into an XML text using
+ * This provides static methods to convert an XML text into a JSONArray or
+ * JSONObject, and to covert a JSONArray or JSONObject into an XML text using
* the JsonML transform.
+ *
* @author JSON.org
* @version 2008-09-18
*/
-public class JSONML {
-
- /**
- * Parse XML values and store them in a JSONArray.
- * @param x The XMLTokener containing the source string.
- * @param arrayForm true if array form, false if object form.
- * @param ja The JSONArray that is containing the current tag or null
- * if we are at the outermost level.
- * @return A JSONArray if the value is the outermost tag, otherwise null.
- * @throws JSONException
- */
- private static Object parse(XMLTokener x, boolean arrayForm,
- JSONArray ja) throws JSONException {
- String attribute;
- char c;
- String closeTag = null;
- int i;
- JSONArray newja = null;
- JSONObject newjo = null;
- Object token;
- String tagName = null;
-
+public class JSONML
+{
+
+ /**
+ * Parse XML values and store them in a JSONArray.
+ *
+ * @param x The XMLTokener containing the source string.
+ * @param arrayForm true if array form, false if object form.
+ * @param ja The JSONArray that is containing the current tag or null
+ * if we are at the outermost level.
+ * @return A JSONArray if the value is the outermost tag, otherwise null.
+ * @throws JSONException
+ */
+ private static Object parse(XMLTokener x, boolean arrayForm,
+ JSONArray ja) throws JSONException
+ {
+ String attribute;
+ char c;
+ String closeTag = null;
+ int i;
+ JSONArray newja = null;
+ JSONObject newjo = null;
+ Object token;
+ String tagName = null;
+
// Test for and skip past these forms:
// <!-- ... -->
// <![ ... ]]>
// <! ... >
// <? ... ?>
-
- while (true) {
- token = x.nextContent();
- if (token == XML.LT) {
- token = x.nextToken();
- if (token instanceof Character) {
- if (token == XML.SLASH) {
+ while (true)
+ {
+ token = x.nextContent();
+ if (token == XML.LT)
+ {
+ token = x.nextToken();
+ if (token instanceof Character)
+ {
+ if (token == XML.SLASH)
+ {
+
// Close tag </
- token = x.nextToken();
- if (!(token instanceof String)) {
- throw new JSONException(
- "Expected a closing name instead of '" +
- token + "'.");
- }
- if (x.nextToken() != XML.GT) {
- throw x.syntaxError("Misshaped close tag");
- }
- return token;
- } else if (token == XML.BANG) {
-
+ token = x.nextToken();
+ if (!(token instanceof String))
+ {
+ throw new JSONException(
+ "Expected a closing name instead of '" +
+ token + "'.");
+ }
+ if (x.nextToken() != XML.GT)
+ {
+ throw x.syntaxError("Misshaped close tag");
+ }
+ return token;
+ }
+ else if (token == XML.BANG)
+ {
+
// <!
-
- c = x.next();
- if (c == '-') {
- if (x.next() == '-') {
- x.skipPast("-->");
- }
- x.back();
- } else if (c == '[') {
- token = x.nextToken();
- if (token.equals("CDATA") && x.next() == '[') {
- if (ja != null) {
- ja.put(x.nextCDATA());
- }
- } else {
- throw x.syntaxError("Expected 'CDATA['");
- }
- } else {
- i = 1;
- do {
- token = x.nextMeta();
- if (token == null) {
- throw x.syntaxError("Missing '>' after '<!'.");
- } else if (token == XML.LT) {
- i += 1;
- } else if (token == XML.GT) {
- i -= 1;
- }
- } while (i > 0);
- }
- } else if (token == XML.QUEST) {
+ c = x.next();
+ if (c == '-')
+ {
+ if (x.next() == '-')
+ {
+ x.skipPast("-->");
+ }
+ x.back();
+ }
+ else if (c == '[')
+ {
+ token = x.nextToken();
+ if (token.equals("CDATA") && x.next() == '[')
+ {
+ if (ja != null)
+ {
+ ja.put(x.nextCDATA());
+ }
+ }
+ else
+ {
+ throw x.syntaxError("Expected 'CDATA['");
+ }
+ }
+ else
+ {
+ i = 1;
+ do
+ {
+ token = x.nextMeta();
+ if (token == null)
+ {
+ throw x.syntaxError("Missing '>' after '<!'.");
+ }
+ else if (token == XML.LT)
+ {
+ i += 1;
+ }
+ else if (token == XML.GT)
+ {
+ i -= 1;
+ }
+ }
+ while (i > 0);
+ }
+ }
+ else if (token == XML.QUEST)
+ {
+
// <?
- x.skipPast("?>");
- } else {
- throw x.syntaxError("Misshaped tag");
- }
+ x.skipPast("?>");
+ }
+ else
+ {
+ throw x.syntaxError("Misshaped tag");
+ }
// Open tag <
- } else {
- if (!(token instanceof String)) {
- throw x.syntaxError("Bad tagName '" + token + "'.");
- }
- tagName = (String)token;
- newja = new JSONArray();
- newjo = new JSONObject();
- if (arrayForm) {
- newja.put(tagName);
- if (ja != null) {
- ja.put(newja);
- }
- } else {
- newjo.put("tagName", tagName);
- if (ja != null) {
- ja.put(newjo);
- }
- }
- token = null;
- for (;;) {
- if (token == null) {
- token = x.nextToken();
- }
- if (token == null) {
- throw x.syntaxError("Misshaped tag");
- }
- if (!(token instanceof String)) {
- break;
- }
+ }
+ else
+ {
+ if (!(token instanceof String))
+ {
+ throw x.syntaxError("Bad tagName '" + token + "'.");
+ }
+ tagName = (String) token;
+ newja = new JSONArray();
+ newjo = new JSONObject();
+ if (arrayForm)
+ {
+ newja.put(tagName);
+ if (ja != null)
+ {
+ ja.put(newja);
+ }
+ }
+ else
+ {
+ newjo.put("tagName", tagName);
+ if (ja != null)
+ {
+ ja.put(newjo);
+ }
+ }
+ token = null;
+ for (; ;)
+ {
+ if (token == null)
+ {
+ token = x.nextToken();
+ }
+ if (token == null)
+ {
+ throw x.syntaxError("Misshaped tag");
+ }
+ if (!(token instanceof String))
+ {
+ break;
+ }
// attribute = value
- attribute = (String)token;
- if (!arrayForm && (attribute == "tagName" || attribute == "childNode")) {
- throw x.syntaxError("Reserved attribute.");
- }
- token = x.nextToken();
- if (token == XML.EQ) {
- token = x.nextToken();
- if (!(token instanceof String)) {
- throw x.syntaxError("Missing value");
- }
- newjo.accumulate(attribute, JSONObject.stringToValue((String)token));
- token = null;
- } else {
- newjo.accumulate(attribute, "");
- }
- }
- if (arrayForm && newjo.length() > 0) {
- newja.put(newjo);
- }
+ attribute = (String) token;
+ if (!arrayForm && (attribute == "tagName" || attribute == "childNode"))
+ {
+ throw x.syntaxError("Reserved attribute.");
+ }
+ token = x.nextToken();
+ if (token == XML.EQ)
+ {
+ token = x.nextToken();
+ if (!(token instanceof String))
+ {
+ throw x.syntaxError("Missing value");
+ }
+ newjo.accumulate(attribute, JSONObject.stringToValue((String) token));
+ token = null;
+ }
+ else
+ {
+ newjo.accumulate(attribute, "");
+ }
+ }
+ if (arrayForm && newjo.length() > 0)
+ {
+ newja.put(newjo);
+ }
// Empty tag <.../>
- if (token == XML.SLASH) {
- if (x.nextToken() != XML.GT) {
- throw x.syntaxError("Misshaped tag");
- }
- if (ja == null) {
- return arrayForm ? newja : newjo;
- }
+ if (token == XML.SLASH)
+ {
+ if (x.nextToken() != XML.GT)
+ {
+ throw x.syntaxError("Misshaped tag");
+ }
+ if (ja == null)
+ {
+ return arrayForm ? newja : newjo;
+ }
// Content, between <...> and </...>
- } else {
- if (token != XML.GT) {
- throw x.syntaxError("Misshaped tag");
- }
- closeTag = (String)parse(x, arrayForm, newja);
- if (closeTag != null) {
- if (!closeTag.equals(tagName)) {
- throw x.syntaxError("Mismatched '" + tagName +
- "' and '" + closeTag + "'");
- }
- tagName = null;
- if (!arrayForm && newja.length() > 0) {
- newjo.put("childNodes", newja);
- }
- if (ja == null) {
- return arrayForm ? newja : newjo;
- }
- }
- }
- }
- } else {
- if (ja != null) {
- ja.put(token instanceof String ?
- JSONObject.stringToValue((String)token) : token);
- }
- }
+ }
+ else
+ {
+ if (token != XML.GT)
+ {
+ throw x.syntaxError("Misshaped tag");
+ }
+ closeTag = (String) parse(x, arrayForm, newja);
+ if (closeTag != null)
+ {
+ if (!closeTag.equals(tagName))
+ {
+ throw x.syntaxError("Mismatched '" + tagName +
+ "' and '" + closeTag + "'");
+ }
+ tagName = null;
+ if (!arrayForm && newja.length() > 0)
+ {
+ newjo.put("childNodes", newja);
+ }
+ if (ja == null)
+ {
+ return arrayForm ? newja : newjo;
+ }
+ }
+ }
}
+ }
+ else
+ {
+ if (ja != null)
+ {
+ ja.put(token instanceof String ?
+ JSONObject.stringToValue((String) token) : token);
+ }
+ }
}
+ }
- /**
- * Convert a well-formed (but not necessarily valid) XML string into a
- * JSONArray using the JsonML transform. Each XML tag is represented as
- * a JSONArray in which the first element is the tag name. If the tag has
- * attributes, then the second element will be JSONObject containing the
- * name/value pairs. If the tag contains children, then strings and
- * JSONArrays will represent the child tags.
- * Comments, prologs, DTDs, and <code><[ [ ]]></code> are ignored.
- * @param string The source string.
- * @return A JSONArray containing the structured data from the XML string.
- * @throws JSONException
- */
- public static JSONArray toJSONArray(String string) throws JSONException {
- return toJSONArray(new XMLTokener(string));
- }
+ /**
+ * Convert a well-formed (but not necessarily valid) XML string into a
+ * JSONArray using the JsonML transform. Each XML tag is represented as
+ * a JSONArray in which the first element is the tag name. If the tag has
+ * attributes, then the second element will be JSONObject containing the
+ * name/value pairs. If the tag contains children, then strings and
+ * JSONArrays will represent the child tags.
+ * Comments, prologs, DTDs, and <code><[ [ ]]></code> are ignored.
+ *
+ * @param string The source string.
+ * @return A JSONArray containing the structured data from the XML string.
+ * @throws JSONException
+ */
+ public static JSONArray toJSONArray(String string) throws JSONException
+ {
+ return toJSONArray(new XMLTokener(string));
+ }
- /**
- * Convert a well-formed (but not necessarily valid) XML string into a
- * JSONArray using the JsonML transform. Each XML tag is represented as
- * a JSONArray in which the first element is the tag name. If the tag has
- * attributes, then the second element will be JSONObject containing the
- * name/value pairs. If the tag contains children, then strings and
- * JSONArrays will represent the child content and tags.
- * Comments, prologs, DTDs, and <code><[ [ ]]></code> are ignored.
- * @param x An XMLTokener.
- * @return A JSONArray containing the structured data from the XML string.
- * @throws JSONException
- */
- public static JSONArray toJSONArray(XMLTokener x) throws JSONException {
- return (JSONArray)parse(x, true, null);
- }
+ /**
+ * Convert a well-formed (but not necessarily valid) XML string into a
+ * JSONArray using the JsonML transform. Each XML tag is represented as
+ * a JSONArray in which the first element is the tag name. If the tag has
+ * attributes, then the second element will be JSONObject containing the
+ * name/value pairs. If the tag contains children, then strings and
+ * JSONArrays will represent the child content and tags.
+ * Comments, prologs, DTDs, and <code><[ [ ]]></code> are ignored.
+ *
+ * @param x An XMLTokener.
+ * @return A JSONArray containing the structured data from the XML string.
+ * @throws JSONException
+ */
+ public static JSONArray toJSONArray(XMLTokener x) throws JSONException
+ {
+ return (JSONArray) parse(x, true, null);
+ }
-
- /**
- * Convert a well-formed (but not necessarily valid) XML string into a
- * JSONObject using the JsonML transform. Each XML tag is represented as
- * a JSONObject with a "tagName" property. If the tag has attributes, then
- * the attributes will be in the JSONObject as properties. If the tag
- * contains children, the object will have a "childNodes" property which
- * will be an array of strings and JsonML JSONObjects.
+ /**
+ * Convert a well-formed (but not necessarily valid) XML string into a
+ * JSONObject using the JsonML transform. Each XML tag is represented as
+ * a JSONObject with a "tagName" property. If the tag has attributes, then
+ * the attributes will be in the JSONObject as properties. If the tag
+ * contains children, the object will have a "childNodes" property which
+ * will be an array of strings and JsonML JSONObjects.
+ * <p/>
+ * Comments, prologs, DTDs, and <code><[ [ ]]></code> are ignored.
+ *
+ * @param x An XMLTokener of the XML source text.
+ * @return A JSONObject containing the structured data from the XML string.
+ * @throws JSONException
+ */
+ public static JSONObject toJSONObject(XMLTokener x) throws JSONException
+ {
+ return (JSONObject) parse(x, false, null);
+ }
- * Comments, prologs, DTDs, and <code><[ [ ]]></code> are ignored.
- * @param x An XMLTokener of the XML source text.
- * @return A JSONObject containing the structured data from the XML string.
- * @throws JSONException
- */
- public static JSONObject toJSONObject(XMLTokener x) throws JSONException {
- return (JSONObject)parse(x, false, null);
- }
- /**
- * Convert a well-formed (but not necessarily valid) XML string into a
- * JSONObject using the JsonML transform. Each XML tag is represented as
- * a JSONObject with a "tagName" property. If the tag has attributes, then
- * the attributes will be in the JSONObject as properties. If the tag
- * contains children, the object will have a "childNodes" property which
- * will be an array of strings and JsonML JSONObjects.
+ /**
+ * Convert a well-formed (but not necessarily valid) XML string into a
+ * JSONObject using the JsonML transform. Each XML tag is represented as
+ * a JSONObject with a "tagName" property. If the tag has attributes, then
+ * the attributes will be in the JSONObject as properties. If the tag
+ * contains children, the object will have a "childNodes" property which
+ * will be an array of strings and JsonML JSONObjects.
+ * <p/>
+ * Comments, prologs, DTDs, and <code><[ [ ]]></code> are ignored.
+ *
+ * @param string The XML source text.
+ * @return A JSONObject containing the structured data from the XML string.
+ * @throws JSONException
+ */
+ public static JSONObject toJSONObject(String string) throws JSONException
+ {
+ return toJSONObject(new XMLTokener(string));
+ }
- * Comments, prologs, DTDs, and <code><[ [ ]]></code> are ignored.
- * @param string The XML source text.
- * @return A JSONObject containing the structured data from the XML string.
- * @throws JSONException
- */
- public static JSONObject toJSONObject(String string) throws JSONException {
- return toJSONObject(new XMLTokener(string));
- }
+ /**
+ * Reverse the JSONML transformation, making an XML text from a JSONArray.
+ *
+ * @param ja A JSONArray.
+ * @return An XML string.
+ * @throws JSONException
+ */
+ public static String toString(JSONArray ja) throws JSONException
+ {
+ Object e;
+ int i;
+ JSONObject jo;
+ String k;
+ Iterator keys;
+ int length;
+ StringBuffer sb = new StringBuffer();
+ String tagName;
+ String v;
- /**
- * Reverse the JSONML transformation, making an XML text from a JSONArray.
- * @param ja A JSONArray.
- * @return An XML string.
- * @throws JSONException
- */
- public static String toString(JSONArray ja) throws JSONException {
- Object e;
- int i;
- JSONObject jo;
- String k;
- Iterator keys;
- int length;
- StringBuffer sb = new StringBuffer();
- String tagName;
- String v;
-
// Emit <tagName
-
- tagName = ja.getString(0);
- XML.noSpace(tagName);
- tagName = XML.escape(tagName);
- sb.append('<');
- sb.append(tagName);
-
- e = ja.opt(1);
- if (e instanceof JSONObject) {
- i = 2;
- jo = (JSONObject)e;
-
+
+ tagName = ja.getString(0);
+ XML.noSpace(tagName);
+ tagName = XML.escape(tagName);
+ sb.append('<');
+ sb.append(tagName);
+
+ e = ja.opt(1);
+ if (e instanceof JSONObject)
+ {
+ i = 2;
+ jo = (JSONObject) e;
+
// Emit the attributes
-
- keys = jo.keys();
- while (keys.hasNext()) {
- k = keys.next().toString();
- XML.noSpace(k);
- v = jo.optString(k);
- if (v != null) {
- sb.append(' ');
- sb.append(XML.escape(k));
- sb.append('=');
- sb.append('"');
- sb.append(XML.escape(v));
- sb.append('"');
- }
- }
- } else {
- i = 1;
- }
-
+
+ keys = jo.keys();
+ while (keys.hasNext())
+ {
+ k = keys.next().toString();
+ XML.noSpace(k);
+ v = jo.optString(k);
+ if (v != null)
+ {
+ sb.append(' ');
+ sb.append(XML.escape(k));
+ sb.append('=');
+ sb.append('"');
+ sb.append(XML.escape(v));
+ sb.append('"');
+ }
+ }
+ }
+ else
+ {
+ i = 1;
+ }
+
//Emit content in body
-
- length = ja.length();
- if (i >= length) {
- sb.append('/');
- sb.append('>');
- } else {
- sb.append('>');
- do {
- e = ja.get(i);
- i += 1;
- if (e != null) {
- if (e instanceof String) {
- sb.append(XML.escape(e.toString()));
- } else if (e instanceof JSONObject) {
- sb.append(toString((JSONObject)e));
- } else if (e instanceof JSONArray) {
- sb.append(toString((JSONArray)e));
- }
- }
- } while (i < length);
- sb.append('<');
- sb.append('/');
- sb.append(tagName);
- sb.append('>');
- }
- return sb.toString();
+
+ length = ja.length();
+ if (i >= length)
+ {
+ sb.append('/');
+ sb.append('>');
}
-
- /**
- * Reverse the JSONML transformation, making an XML text from a JSONObject.
- * The JSONObject must contain a "tagName" property. If it has children,
- * then it must have a "childNodes" property containing an array of objects.
- * The other properties are attributes with string values.
- * @param jo A JSONObject.
- * @return An XML string.
- * @throws JSONException
- */
- public static String toString(JSONObject jo) throws JSONException {
- StringBuffer sb = new StringBuffer();
- Object e;
- int i;
- JSONArray ja;
- String k;
- Iterator keys;
- int len;
- String tagName;
- String v;
-
+ else
+ {
+ sb.append('>');
+ do
+ {
+ e = ja.get(i);
+ i += 1;
+ if (e != null)
+ {
+ if (e instanceof String)
+ {
+ sb.append(XML.escape(e.toString()));
+ }
+ else if (e instanceof JSONObject)
+ {
+ sb.append(toString((JSONObject) e));
+ }
+ else if (e instanceof JSONArray)
+ {
+ sb.append(toString((JSONArray) e));
+ }
+ }
+ }
+ while (i < length);
+ sb.append('<');
+ sb.append('/');
+ sb.append(tagName);
+ sb.append('>');
+ }
+ return sb.toString();
+ }
+
+ /**
+ * Reverse the JSONML transformation, making an XML text from a JSONObject.
+ * The JSONObject must contain a "tagName" property. If it has children,
+ * then it must have a "childNodes" property containing an array of objects.
+ * The other properties are attributes with string values.
+ *
+ * @param jo A JSONObject.
+ * @return An XML string.
+ * @throws JSONException
+ */
+ public static String toString(JSONObject jo) throws JSONException
+ {
+ StringBuffer sb = new StringBuffer();
+ Object e;
+ int i;
+ JSONArray ja;
+ String k;
+ Iterator keys;
+ int len;
+ String tagName;
+ String v;
+
//Emit <tagName
-
- tagName = jo.optString("tagName");
- if (tagName == null) {
- return XML.escape(jo.toString());
- }
- XML.noSpace(tagName);
- tagName = XML.escape(tagName);
- sb.append('<');
- sb.append(tagName);
-
+
+ tagName = jo.optString("tagName");
+ if (tagName == null)
+ {
+ return XML.escape(jo.toString());
+ }
+ XML.noSpace(tagName);
+ tagName = XML.escape(tagName);
+ sb.append('<');
+ sb.append(tagName);
+
//Emit the attributes
-
- keys = jo.keys();
- while (keys.hasNext()) {
- k = keys.next().toString();
- if (!k.equals("tagName") && !k.equals("childNodes")) {
- XML.noSpace(k);
- v = jo.optString(k);
- if (v != null) {
- sb.append(' ');
- sb.append(XML.escape(k));
- sb.append('=');
- sb.append('"');
- sb.append(XML.escape(v));
- sb.append('"');
- }
- }
- }
-
+
+ keys = jo.keys();
+ while (keys.hasNext())
+ {
+ k = keys.next().toString();
+ if (!k.equals("tagName") && !k.equals("childNodes"))
+ {
+ XML.noSpace(k);
+ v = jo.optString(k);
+ if (v != null)
+ {
+ sb.append(' ');
+ sb.append(XML.escape(k));
+ sb.append('=');
+ sb.append('"');
+ sb.append(XML.escape(v));
+ sb.append('"');
+ }
+ }
+ }
+
//Emit content in body
-
- ja = jo.optJSONArray("childNodes");
- if (ja == null) {
- sb.append('/');
- sb.append('>');
- } else {
- sb.append('>');
- len = ja.length();
- for (i = 0; i < len; i += 1) {
- e = ja.get(i);
- if (e != null) {
- if (e instanceof String) {
- sb.append(XML.escape(e.toString()));
- } else if (e instanceof JSONObject) {
- sb.append(toString((JSONObject)e));
- } else if (e instanceof JSONArray) {
- sb.append(toString((JSONArray)e));
- }
- }
- }
- sb.append('<');
- sb.append('/');
- sb.append(tagName);
- sb.append('>');
- }
- return sb.toString();
+
+ ja = jo.optJSONArray("childNodes");
+ if (ja == null)
+ {
+ sb.append('/');
+ sb.append('>');
}
+ else
+ {
+ sb.append('>');
+ len = ja.length();
+ for (i = 0; i < len; i += 1)
+ {
+ e = ja.get(i);
+ if (e != null)
+ {
+ if (e instanceof String)
+ {
+ sb.append(XML.escape(e.toString()));
+ }
+ else if (e instanceof JSONObject)
+ {
+ sb.append(toString((JSONObject) e));
+ }
+ else if (e instanceof JSONArray)
+ {
+ sb.append(toString((JSONArray) e));
+ }
+ }
+ }
+ sb.append('<');
+ sb.append('/');
+ sb.append(tagName);
+ sb.append('>');
+ }
+ return sb.toString();
+ }
}
\ No newline at end of file
Modified: projects/gwt-console/trunk/war/src/main/java/org/json/JSONObject.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/json/JSONObject.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/json/JSONObject.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -51,1500 +51,1782 @@
* exception if one cannot be found. An <code>opt</code> method returns a
* default value instead of throwing an exception, and so is useful for
* obtaining optional values.
- * <p>
+ * <p/>
* The generic <code>get()</code> and <code>opt()</code> methods return an
* object, which you can cast or query for type. There are also typed
* <code>get</code> and <code>opt</code> methods that do type checking and type
* coercion for you.
- * <p>
+ * <p/>
* The <code>put</code> methods adds values to an object. For example, <pre>
* myString = new JSONObject().put("JSON", "Hello, World!").toString();</pre>
* produces the string <code>{"JSON": "Hello, World"}</code>.
- * <p>
+ * <p/>
* The texts produced by the <code>toString</code> methods strictly conform to
* the JSON syntax rules.
* The constructors are more forgiving in the texts they will accept:
* <ul>
* <li>An extra <code>,</code> <small>(comma)</small> may appear just
- * before the closing brace.</li>
+ * before the closing brace.</li>
* <li>Strings may be quoted with <code>'</code> <small>(single
- * quote)</small>.</li>
+ * quote)</small>.</li>
* <li>Strings do not need to be quoted at all if they do not begin with a quote
- * or single quote, and if they do not contain leading or trailing spaces,
- * and if they do not contain any of these characters:
- * <code>{ } [ ] / \ : , = ; #</code> and if they do not look like numbers
- * and if they are not the reserved words <code>true</code>,
- * <code>false</code>, or <code>null</code>.</li>
+ * or single quote, and if they do not contain leading or trailing spaces,
+ * and if they do not contain any of these characters:
+ * <code>{ } [ ] / \ : , = ; #</code> and if they do not look like numbers
+ * and if they are not the reserved words <code>true</code>,
+ * <code>false</code>, or <code>null</code>.</li>
* <li>Keys can be followed by <code>=</code> or <code>=></code> as well as
- * by <code>:</code>.</li>
+ * by <code>:</code>.</li>
* <li>Values can be followed by <code>;</code> <small>(semicolon)</small> as
- * well as by <code>,</code> <small>(comma)</small>.</li>
+ * well as by <code>,</code> <small>(comma)</small>.</li>
* <li>Numbers may have the <code>0-</code> <small>(octal)</small> or
- * <code>0x-</code> <small>(hex)</small> prefix.</li>
+ * <code>0x-</code> <small>(hex)</small> prefix.</li>
* </ul>
+ *
* @author JSON.org
* @version 2008-09-18
*/
-public class JSONObject {
+public class JSONObject
+{
+ /**
+ * JSONObject.NULL is equivalent to the value that JavaScript calls null,
+ * whilst Java's null is equivalent to the value that JavaScript calls
+ * undefined.
+ */
+ private static final class Null
+ {
+
/**
- * JSONObject.NULL is equivalent to the value that JavaScript calls null,
- * whilst Java's null is equivalent to the value that JavaScript calls
- * undefined.
+ * There is only intended to be a single instance of the NULL object,
+ * so the clone method returns itself.
+ *
+ * @return NULL.
*/
- private static final class Null {
-
- /**
- * There is only intended to be a single instance of the NULL object,
- * so the clone method returns itself.
- * @return NULL.
- */
- protected final Object clone() {
- return this;
- }
-
-
- /**
- * A Null object is equal to the null value and to itself.
- * @param object An object to test for nullness.
- * @return true if the object parameter is the JSONObject.NULL object
- * or null.
- */
- public boolean equals(Object object) {
- return object == null || object == this;
- }
-
-
- /**
- * Get the "null" string value.
- * @return The string "null".
- */
- public String toString() {
- return "null";
- }
+ protected final Object clone()
+ {
+ return this;
}
/**
- * The map where the JSONObject's properties are kept.
+ * A Null object is equal to the null value and to itself.
+ *
+ * @param object An object to test for nullness.
+ * @return true if the object parameter is the JSONObject.NULL object
+ * or null.
*/
- private Map map;
+ public boolean equals(Object object)
+ {
+ return object == null || object == this;
+ }
/**
- * It is sometimes more convenient and less ambiguous to have a
- * <code>NULL</code> object than to use Java's <code>null</code> value.
- * <code>JSONObject.NULL.equals(null)</code> returns <code>true</code>.
- * <code>JSONObject.NULL.toString()</code> returns <code>"null"</code>.
+ * Get the "null" string value.
+ *
+ * @return The string "null".
*/
- public static final Object NULL = new Null();
-
-
- /**
- * Construct an empty JSONObject.
- */
- public JSONObject() {
- this.map = new HashMap();
+ public String toString()
+ {
+ return "null";
}
+ }
- /**
- * Construct a JSONObject from a subset of another JSONObject.
- * An array of strings is used to identify the keys that should be copied.
- * Missing keys are ignored.
- * @param jo A JSONObject.
- * @param names An array of strings.
- * @exception JSONException If a value is a non-finite number or if a name is duplicated.
- */
- public JSONObject(JSONObject jo, String[] names) throws JSONException {
- this();
- for (int i = 0; i < names.length; i += 1) {
- putOnce(names[i], jo.opt(names[i]));
- }
- }
+ /**
+ * The map where the JSONObject's properties are kept.
+ */
+ private Map map;
- /**
- * Construct a JSONObject from a JSONTokener.
- * @param x A JSONTokener object containing the source string.
- * @throws JSONException If there is a syntax error in the source string
- * or a duplicated key.
- */
- public JSONObject(JSONTokener x) throws JSONException {
- this();
- char c;
- String key;
+ /**
+ * It is sometimes more convenient and less ambiguous to have a
+ * <code>NULL</code> object than to use Java's <code>null</code> value.
+ * <code>JSONObject.NULL.equals(null)</code> returns <code>true</code>.
+ * <code>JSONObject.NULL.toString()</code> returns <code>"null"</code>.
+ */
+ public static final Object NULL = new Null();
- if (x.nextClean() != '{') {
- throw x.syntaxError("A JSONObject text must begin with '{'");
- }
- for (;;) {
- c = x.nextClean();
- switch (c) {
- case 0:
- throw x.syntaxError("A JSONObject text must end with '}'");
- case '}':
- return;
- default:
- x.back();
- key = x.nextValue().toString();
- }
- /*
- * The key is followed by ':'. We will also tolerate '=' or '=>'.
- */
+ /**
+ * Construct an empty JSONObject.
+ */
+ public JSONObject()
+ {
+ this.map = new HashMap();
+ }
- c = x.nextClean();
- if (c == '=') {
- if (x.next() != '>') {
- x.back();
- }
- } else if (c != ':') {
- throw x.syntaxError("Expected a ':' after a key");
- }
- putOnce(key, x.nextValue());
- /*
- * Pairs are separated by ','. We will also tolerate ';'.
- */
-
- switch (x.nextClean()) {
- case ';':
- case ',':
- if (x.nextClean() == '}') {
- return;
- }
- x.back();
- break;
- case '}':
- return;
- default:
- throw x.syntaxError("Expected a ',' or '}'");
- }
- }
+ /**
+ * Construct a JSONObject from a subset of another JSONObject.
+ * An array of strings is used to identify the keys that should be copied.
+ * Missing keys are ignored.
+ *
+ * @param jo A JSONObject.
+ * @param names An array of strings.
+ * @throws JSONException If a value is a non-finite number or if a name is duplicated.
+ */
+ public JSONObject(JSONObject jo, String[] names) throws JSONException
+ {
+ this();
+ for (int i = 0; i < names.length; i += 1)
+ {
+ putOnce(names[i], jo.opt(names[i]));
}
+ }
- /**
- * Construct a JSONObject from a Map.
- *
- * @param map A map object that can be used to initialize the contents of
- * the JSONObject.
- */
- public JSONObject(Map map) {
- this.map = (map == null) ? new HashMap() : map;
- }
+ /**
+ * Construct a JSONObject from a JSONTokener.
+ *
+ * @param x A JSONTokener object containing the source string.
+ * @throws JSONException If there is a syntax error in the source string
+ * or a duplicated key.
+ */
+ public JSONObject(JSONTokener x) throws JSONException
+ {
+ this();
+ char c;
+ String key;
- /**
- * Construct a JSONObject from a Map.
- *
- * Note: Use this constructor when the map contains <key,bean>.
- *
- * @param map - A map with Key-Bean data.
- * @param includeSuperClass - Tell whether to include the super class properties.
- */
- public JSONObject(Map map, boolean includeSuperClass) {
- this.map = new HashMap();
- if (map != null){
- for (Iterator i = map.entrySet().iterator(); i.hasNext(); ) {
- Map.Entry e = (Map.Entry)i.next();
- this.map.put(e.getKey(), new JSONObject(e.getValue(), includeSuperClass));
- }
- }
+ if (x.nextClean() != '{')
+ {
+ throw x.syntaxError("A JSONObject text must begin with '{'");
}
+ for (; ;)
+ {
+ c = x.nextClean();
+ switch (c)
+ {
+ case 0:
+ throw x.syntaxError("A JSONObject text must end with '}'");
+ case'}':
+ return;
+ default:
+ x.back();
+ key = x.nextValue().toString();
+ }
-
- /**
- * Construct a JSONObject from an Object using bean getters.
- * It reflects on all of the public methods of the object.
- * For each of the methods with no parameters and a name starting
- * with <code>"get"</code> or <code>"is"</code> followed by an uppercase letter,
- * the method is invoked, and a key and the value returned from the getter method
- * are put into the new JSONObject.
- *
- * The key is formed by removing the <code>"get"</code> or <code>"is"</code> prefix. If the second remaining
- * character is not upper case, then the first
- * character is converted to lower case.
- *
- * For example, if an object has a method named <code>"getName"</code>, and
- * if the result of calling <code>object.getName()</code> is <code>"Larry Fine"</code>,
- * then the JSONObject will contain <code>"name": "Larry Fine"</code>.
- *
- * @param bean An object that has getter methods that should be used
- * to make a JSONObject.
- */
- public JSONObject(Object bean) {
- this();
- populateInternalMap(bean, false);
- }
-
-
- /**
- * Construct JSONObject from the given bean. This will also create JSONObject
- * for all internal object (List, Map, Inner Objects) of the provided bean.
- *
- * -- See Documentation of JSONObject(Object bean) also.
- *
- * @param bean An object that has getter methods that should be used
- * to make a JSONObject.
- * @param includeSuperClass - Tell whether to include the super class properties.
- */
- public JSONObject(Object bean, boolean includeSuperClass) {
- this();
- populateInternalMap(bean, includeSuperClass);
- }
-
- private void populateInternalMap(Object bean, boolean includeSuperClass){
- Class klass = bean.getClass();
-
- //If klass.getSuperClass is System class then includeSuperClass = false;
-
- if (klass.getClassLoader() == null) {
- includeSuperClass = false;
- }
-
- Method[] methods = (includeSuperClass) ?
- klass.getMethods() : klass.getDeclaredMethods();
- for (int i = 0; i < methods.length; i += 1) {
- try {
- Method method = methods[i];
- String name = method.getName();
- String key = "";
- if (name.startsWith("get")) {
- key = name.substring(3);
- } else if (name.startsWith("is")) {
- key = name.substring(2);
- }
- if (key.length() > 0 &&
- Character.isUpperCase(key.charAt(0)) &&
- method.getParameterTypes().length == 0) {
- if (key.length() == 1) {
- key = key.toLowerCase();
- } else if (!Character.isUpperCase(key.charAt(1))) {
- key = key.substring(0, 1).toLowerCase() +
- key.substring(1);
- }
-
- Object result = method.invoke(bean, (Object[])null);
- if (result == null){
- map.put(key, NULL);
- }else if (result.getClass().isArray()) {
- map.put(key, new JSONArray(result,includeSuperClass));
- }else if (result instanceof Collection) { //List or Set
- map.put(key, new JSONArray((Collection)result,includeSuperClass));
- }else if (result instanceof Map) {
- map.put(key, new JSONObject((Map)result,includeSuperClass));
- }else if (isStandardProperty(result.getClass())) { //Primitives, String and Wrapper
- map.put(key, result);
- }else{
- if (result.getClass().getPackage().getName().startsWith("java") ||
- result.getClass().getClassLoader() == null) {
- map.put(key, result.toString());
- } else { //User defined Objects
- map.put(key, new JSONObject(result,includeSuperClass));
- }
- }
- }
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
+ /*
+ * The key is followed by ':'. We will also tolerate '=' or '=>'.
+ */
+
+ c = x.nextClean();
+ if (c == '=')
+ {
+ if (x.next() != '>')
+ {
+ x.back();
}
- }
-
- private boolean isStandardProperty(Class clazz) {
- return clazz.isPrimitive() ||
- clazz.isAssignableFrom(Byte.class) ||
- clazz.isAssignableFrom(Short.class) ||
- clazz.isAssignableFrom(Integer.class) ||
- clazz.isAssignableFrom(Long.class) ||
- clazz.isAssignableFrom(Float.class) ||
- clazz.isAssignableFrom(Double.class) ||
- clazz.isAssignableFrom(Character.class) ||
- clazz.isAssignableFrom(String.class) ||
- clazz.isAssignableFrom(Boolean.class);
- }
+ }
+ else if (c != ':')
+ {
+ throw x.syntaxError("Expected a ':' after a key");
+ }
+ putOnce(key, x.nextValue());
- /**
- * Construct a JSONObject from an Object, using reflection to find the
- * public members. The resulting JSONObject's keys will be the strings
- * from the names array, and the values will be the field values associated
- * with those keys in the object. If a key is not found or not visible,
- * then it will not be copied into the new JSONObject.
- * @param object An object that has fields that should be used to make a
- * JSONObject.
- * @param names An array of strings, the names of the fields to be obtained
- * from the object.
- */
- public JSONObject(Object object, String names[]) {
- this();
- Class c = object.getClass();
- for (int i = 0; i < names.length; i += 1) {
- String name = names[i];
- try {
- putOpt(name, c.getField(name).get(object));
- } catch (Exception e) {
- /* forget about it */
- }
- }
+ /*
+ * Pairs are separated by ','. We will also tolerate ';'.
+ */
+
+ switch (x.nextClean())
+ {
+ case';':
+ case',':
+ if (x.nextClean() == '}')
+ {
+ return;
+ }
+ x.back();
+ break;
+ case'}':
+ return;
+ default:
+ throw x.syntaxError("Expected a ',' or '}'");
+ }
}
+ }
- /**
- * Construct a JSONObject from a source JSON text string.
- * This is the most commonly used JSONObject constructor.
- * @param source A string beginning
- * with <code>{</code> <small>(left brace)</small> and ending
- * with <code>}</code> <small>(right brace)</small>.
- * @exception JSONException If there is a syntax error in the source
- * string or a duplicated key.
- */
- public JSONObject(String source) throws JSONException {
- this(new JSONTokener(source));
+ /**
+ * Construct a JSONObject from a Map.
+ *
+ * @param map A map object that can be used to initialize the contents of
+ * the JSONObject.
+ */
+ public JSONObject(Map map)
+ {
+ this.map = (map == null) ? new HashMap() : map;
+ }
+
+ /**
+ * Construct a JSONObject from a Map.
+ * <p/>
+ * Note: Use this constructor when the map contains <key,bean>.
+ *
+ * @param map - A map with Key-Bean data.
+ * @param includeSuperClass - Tell whether to include the super class properties.
+ */
+ public JSONObject(Map map, boolean includeSuperClass)
+ {
+ this.map = new HashMap();
+ if (map != null)
+ {
+ for (Iterator i = map.entrySet().iterator(); i.hasNext();)
+ {
+ Map.Entry e = (Map.Entry) i.next();
+ this.map.put(e.getKey(), new JSONObject(e.getValue(), includeSuperClass));
+ }
}
+ }
- /**
- * Accumulate values under a key. It is similar to the put method except
- * that if there is already an object stored under the key then a
- * JSONArray is stored under the key to hold all of the accumulated values.
- * If there is already a JSONArray, then the new value is appended to it.
- * In contrast, the put method replaces the previous value.
- * @param key A key string.
- * @param value An object to be accumulated under the key.
- * @return this.
- * @throws JSONException If the value is an invalid number
- * or if the key is null.
- */
- public JSONObject accumulate(String key, Object value)
- throws JSONException {
- testValidity(value);
- Object o = opt(key);
- if (o == null) {
- put(key, value instanceof JSONArray ?
- new JSONArray().put(value) :
- value);
- } else if (o instanceof JSONArray) {
- ((JSONArray)o).put(value);
- } else {
- put(key, new JSONArray().put(o).put(value));
- }
- return this;
- }
+ /**
+ * Construct a JSONObject from an Object using bean getters.
+ * It reflects on all of the public methods of the object.
+ * For each of the methods with no parameters and a name starting
+ * with <code>"get"</code> or <code>"is"</code> followed by an uppercase letter,
+ * the method is invoked, and a key and the value returned from the getter method
+ * are put into the new JSONObject.
+ * <p/>
+ * The key is formed by removing the <code>"get"</code> or <code>"is"</code> prefix. If the second remaining
+ * character is not upper case, then the first
+ * character is converted to lower case.
+ * <p/>
+ * For example, if an object has a method named <code>"getName"</code>, and
+ * if the result of calling <code>object.getName()</code> is <code>"Larry Fine"</code>,
+ * then the JSONObject will contain <code>"name": "Larry Fine"</code>.
+ *
+ * @param bean An object that has getter methods that should be used
+ * to make a JSONObject.
+ */
+ public JSONObject(Object bean)
+ {
+ this();
+ populateInternalMap(bean, false);
+ }
- /**
- * Append values to the array under a key. If the key does not exist in the
- * JSONObject, then the key is put in the JSONObject with its value being a
- * JSONArray containing the value parameter. If the key was already
- * associated with a JSONArray, then the value parameter is appended to it.
- * @param key A key string.
- * @param value An object to be accumulated under the key.
- * @return this.
- * @throws JSONException If the key is null or if the current value
- * associated with the key is not a JSONArray.
- */
- public JSONObject append(String key, Object value)
- throws JSONException {
- testValidity(value);
- Object o = opt(key);
- if (o == null) {
- put(key, new JSONArray().put(value));
- } else if (o instanceof JSONArray) {
- put(key, ((JSONArray)o).put(value));
- } else {
- throw new JSONException("JSONObject[" + key +
- "] is not a JSONArray.");
- }
- return this;
+ /**
+ * Construct JSONObject from the given bean. This will also create JSONObject
+ * for all internal object (List, Map, Inner Objects) of the provided bean.
+ * <p/>
+ * -- See Documentation of JSONObject(Object bean) also.
+ *
+ * @param bean An object that has getter methods that should be used
+ * to make a JSONObject.
+ * @param includeSuperClass - Tell whether to include the super class properties.
+ */
+ public JSONObject(Object bean, boolean includeSuperClass)
+ {
+ this();
+ populateInternalMap(bean, includeSuperClass);
+ }
+
+ private void populateInternalMap(Object bean, boolean includeSuperClass)
+ {
+ Class klass = bean.getClass();
+
+ //If klass.getSuperClass is System class then includeSuperClass = false;
+
+ if (klass.getClassLoader() == null)
+ {
+ includeSuperClass = false;
}
-
- /**
- * Produce a string from a double. The string "null" will be returned if
- * the number is not finite.
- * @param d A double.
- * @return A String.
- */
- static public String doubleToString(double d) {
- if (Double.isInfinite(d) || Double.isNaN(d)) {
- return "null";
+ Method[] methods = (includeSuperClass) ?
+ klass.getMethods() : klass.getDeclaredMethods();
+ for (int i = 0; i < methods.length; i += 1)
+ {
+ try
+ {
+ Method method = methods[i];
+ String name = method.getName();
+ String key = "";
+ if (name.startsWith("get"))
+ {
+ key = name.substring(3);
}
+ else if (name.startsWith("is"))
+ {
+ key = name.substring(2);
+ }
+ if (key.length() > 0 &&
+ Character.isUpperCase(key.charAt(0)) &&
+ method.getParameterTypes().length == 0)
+ {
+ if (key.length() == 1)
+ {
+ key = key.toLowerCase();
+ }
+ else if (!Character.isUpperCase(key.charAt(1)))
+ {
+ key = key.substring(0, 1).toLowerCase() +
+ key.substring(1);
+ }
-// Shave off trailing zeros and decimal point, if possible.
-
- String s = Double.toString(d);
- if (s.indexOf('.') > 0 && s.indexOf('e') < 0 && s.indexOf('E') < 0) {
- while (s.endsWith("0")) {
- s = s.substring(0, s.length() - 1);
+ Object result = method.invoke(bean, (Object[]) null);
+ if (result == null)
+ {
+ map.put(key, NULL);
+ }
+ else if (result.getClass().isArray())
+ {
+ map.put(key, new JSONArray(result, includeSuperClass));
+ }
+ else if (result instanceof Collection)
+ { //List or Set
+ map.put(key, new JSONArray((Collection) result, includeSuperClass));
+ }
+ else if (result instanceof Map)
+ {
+ map.put(key, new JSONObject((Map) result, includeSuperClass));
+ }
+ else if (isStandardProperty(result.getClass()))
+ { //Primitives, String and Wrapper
+ map.put(key, result);
+ }
+ else
+ {
+ if (result.getClass().getPackage().getName().startsWith("java") ||
+ result.getClass().getClassLoader() == null)
+ {
+ map.put(key, result.toString());
}
- if (s.endsWith(".")) {
- s = s.substring(0, s.length() - 1);
+ else
+ { //User defined Objects
+ map.put(key, new JSONObject(result, includeSuperClass));
}
+ }
}
- return s;
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
}
+ }
+ private boolean isStandardProperty(Class clazz)
+ {
+ return clazz.isPrimitive() ||
+ clazz.isAssignableFrom(Byte.class) ||
+ clazz.isAssignableFrom(Short.class) ||
+ clazz.isAssignableFrom(Integer.class) ||
+ clazz.isAssignableFrom(Long.class) ||
+ clazz.isAssignableFrom(Float.class) ||
+ clazz.isAssignableFrom(Double.class) ||
+ clazz.isAssignableFrom(Character.class) ||
+ clazz.isAssignableFrom(String.class) ||
+ clazz.isAssignableFrom(Boolean.class);
+ }
- /**
- * Get the value object associated with a key.
- *
- * @param key A key string.
- * @return The object associated with the key.
- * @throws JSONException if the key is not found.
- */
- public Object get(String key) throws JSONException {
- Object o = opt(key);
- if (o == null) {
- throw new JSONException("JSONObject[" + quote(key) +
- "] not found.");
- }
- return o;
+ /**
+ * Construct a JSONObject from an Object, using reflection to find the
+ * public members. The resulting JSONObject's keys will be the strings
+ * from the names array, and the values will be the field values associated
+ * with those keys in the object. If a key is not found or not visible,
+ * then it will not be copied into the new JSONObject.
+ *
+ * @param object An object that has fields that should be used to make a
+ * JSONObject.
+ * @param names An array of strings, the names of the fields to be obtained
+ * from the object.
+ */
+ public JSONObject(Object object, String names[])
+ {
+ this();
+ Class c = object.getClass();
+ for (int i = 0; i < names.length; i += 1)
+ {
+ String name = names[i];
+ try
+ {
+ putOpt(name, c.getField(name).get(object));
+ }
+ catch (Exception e)
+ {
+ /* forget about it */
+ }
}
+ }
- /**
- * Get the boolean value associated with a key.
- *
- * @param key A key string.
- * @return The truth.
- * @throws JSONException
- * if the value is not a Boolean or the String "true" or "false".
- */
- public boolean getBoolean(String key) throws JSONException {
- Object o = get(key);
- if (o.equals(Boolean.FALSE) ||
- (o instanceof String &&
- ((String)o).equalsIgnoreCase("false"))) {
- return false;
- } else if (o.equals(Boolean.TRUE) ||
- (o instanceof String &&
- ((String)o).equalsIgnoreCase("true"))) {
- return true;
- }
- throw new JSONException("JSONObject[" + quote(key) +
- "] is not a Boolean.");
- }
+ /**
+ * Construct a JSONObject from a source JSON text string.
+ * This is the most commonly used JSONObject constructor.
+ *
+ * @param source A string beginning
+ * with <code>{</code> <small>(left brace)</small> and ending
+ * with <code>}</code> <small>(right brace)</small>.
+ * @throws JSONException If there is a syntax error in the source
+ * string or a duplicated key.
+ */
+ public JSONObject(String source) throws JSONException
+ {
+ this(new JSONTokener(source));
+ }
- /**
- * Get the double value associated with a key.
- * @param key A key string.
- * @return The numeric value.
- * @throws JSONException if the key is not found or
- * if the value is not a Number object and cannot be converted to a number.
- */
- public double getDouble(String key) throws JSONException {
- Object o = get(key);
- try {
- return o instanceof Number ?
- ((Number)o).doubleValue() :
- Double.valueOf((String)o).doubleValue();
- } catch (Exception e) {
- throw new JSONException("JSONObject[" + quote(key) +
- "] is not a number.");
- }
+ /**
+ * Accumulate values under a key. It is similar to the put method except
+ * that if there is already an object stored under the key then a
+ * JSONArray is stored under the key to hold all of the accumulated values.
+ * If there is already a JSONArray, then the new value is appended to it.
+ * In contrast, the put method replaces the previous value.
+ *
+ * @param key A key string.
+ * @param value An object to be accumulated under the key.
+ * @return this.
+ * @throws JSONException If the value is an invalid number
+ * or if the key is null.
+ */
+ public JSONObject accumulate(String key, Object value)
+ throws JSONException
+ {
+ testValidity(value);
+ Object o = opt(key);
+ if (o == null)
+ {
+ put(key, value instanceof JSONArray ?
+ new JSONArray().put(value) :
+ value);
}
+ else if (o instanceof JSONArray)
+ {
+ ((JSONArray) o).put(value);
+ }
+ else
+ {
+ put(key, new JSONArray().put(o).put(value));
+ }
+ return this;
+ }
- /**
- * Get the int value associated with a key. If the number value is too
- * large for an int, it will be clipped.
- *
- * @param key A key string.
- * @return The integer value.
- * @throws JSONException if the key is not found or if the value cannot
- * be converted to an integer.
- */
- public int getInt(String key) throws JSONException {
- Object o = get(key);
- return o instanceof Number ?
- ((Number)o).intValue() : (int)getDouble(key);
+ /**
+ * Append values to the array under a key. If the key does not exist in the
+ * JSONObject, then the key is put in the JSONObject with its value being a
+ * JSONArray containing the value parameter. If the key was already
+ * associated with a JSONArray, then the value parameter is appended to it.
+ *
+ * @param key A key string.
+ * @param value An object to be accumulated under the key.
+ * @return this.
+ * @throws JSONException If the key is null or if the current value
+ * associated with the key is not a JSONArray.
+ */
+ public JSONObject append(String key, Object value)
+ throws JSONException
+ {
+ testValidity(value);
+ Object o = opt(key);
+ if (o == null)
+ {
+ put(key, new JSONArray().put(value));
}
+ else if (o instanceof JSONArray)
+ {
+ put(key, ((JSONArray) o).put(value));
+ }
+ else
+ {
+ throw new JSONException("JSONObject[" + key +
+ "] is not a JSONArray.");
+ }
+ return this;
+ }
- /**
- * Get the JSONArray value associated with a key.
- *
- * @param key A key string.
- * @return A JSONArray which is the value.
- * @throws JSONException if the key is not found or
- * if the value is not a JSONArray.
- */
- public JSONArray getJSONArray(String key) throws JSONException {
- Object o = get(key);
- if (o instanceof JSONArray) {
- return (JSONArray)o;
- }
- throw new JSONException("JSONObject[" + quote(key) +
- "] is not a JSONArray.");
+ /**
+ * Produce a string from a double. The string "null" will be returned if
+ * the number is not finite.
+ *
+ * @param d A double.
+ * @return A String.
+ */
+ static public String doubleToString(double d)
+ {
+ if (Double.isInfinite(d) || Double.isNaN(d))
+ {
+ return "null";
}
+// Shave off trailing zeros and decimal point, if possible.
- /**
- * Get the JSONObject value associated with a key.
- *
- * @param key A key string.
- * @return A JSONObject which is the value.
- * @throws JSONException if the key is not found or
- * if the value is not a JSONObject.
- */
- public JSONObject getJSONObject(String key) throws JSONException {
- Object o = get(key);
- if (o instanceof JSONObject) {
- return (JSONObject)o;
- }
- throw new JSONException("JSONObject[" + quote(key) +
- "] is not a JSONObject.");
+ String s = Double.toString(d);
+ if (s.indexOf('.') > 0 && s.indexOf('e') < 0 && s.indexOf('E') < 0)
+ {
+ while (s.endsWith("0"))
+ {
+ s = s.substring(0, s.length() - 1);
+ }
+ if (s.endsWith("."))
+ {
+ s = s.substring(0, s.length() - 1);
+ }
}
+ return s;
+ }
- /**
- * Get the long value associated with a key. If the number value is too
- * long for a long, it will be clipped.
- *
- * @param key A key string.
- * @return The long value.
- * @throws JSONException if the key is not found or if the value cannot
- * be converted to a long.
- */
- public long getLong(String key) throws JSONException {
- Object o = get(key);
- return o instanceof Number ?
- ((Number)o).longValue() : (long)getDouble(key);
+ /**
+ * Get the value object associated with a key.
+ *
+ * @param key A key string.
+ * @return The object associated with the key.
+ * @throws JSONException if the key is not found.
+ */
+ public Object get(String key) throws JSONException
+ {
+ Object o = opt(key);
+ if (o == null)
+ {
+ throw new JSONException("JSONObject[" + quote(key) +
+ "] not found.");
}
+ return o;
+ }
- /**
- * Get an array of field names from a JSONObject.
- *
- * @return An array of field names, or null if there are no names.
- */
- public static String[] getNames(JSONObject jo) {
- int length = jo.length();
- if (length == 0) {
- return null;
- }
- Iterator i = jo.keys();
- String[] names = new String[length];
- int j = 0;
- while (i.hasNext()) {
- names[j] = (String)i.next();
- j += 1;
- }
- return names;
+ /**
+ * Get the boolean value associated with a key.
+ *
+ * @param key A key string.
+ * @return The truth.
+ * @throws JSONException if the value is not a Boolean or the String "true" or "false".
+ */
+ public boolean getBoolean(String key) throws JSONException
+ {
+ Object o = get(key);
+ if (o.equals(Boolean.FALSE) ||
+ (o instanceof String &&
+ ((String) o).equalsIgnoreCase("false")))
+ {
+ return false;
}
+ else if (o.equals(Boolean.TRUE) ||
+ (o instanceof String &&
+ ((String) o).equalsIgnoreCase("true")))
+ {
+ return true;
+ }
+ throw new JSONException("JSONObject[" + quote(key) +
+ "] is not a Boolean.");
+ }
- /**
- * Get an array of field names from an Object.
- *
- * @return An array of field names, or null if there are no names.
- */
- public static String[] getNames(Object object) {
- if (object == null) {
- return null;
- }
- Class klass = object.getClass();
- Field[] fields = klass.getFields();
- int length = fields.length;
- if (length == 0) {
- return null;
- }
- String[] names = new String[length];
- for (int i = 0; i < length; i += 1) {
- names[i] = fields[i].getName();
- }
- return names;
+ /**
+ * Get the double value associated with a key.
+ *
+ * @param key A key string.
+ * @return The numeric value.
+ * @throws JSONException if the key is not found or
+ * if the value is not a Number object and cannot be converted to a number.
+ */
+ public double getDouble(String key) throws JSONException
+ {
+ Object o = get(key);
+ try
+ {
+ return o instanceof Number ?
+ ((Number) o).doubleValue() :
+ Double.valueOf((String) o).doubleValue();
}
+ catch (Exception e)
+ {
+ throw new JSONException("JSONObject[" + quote(key) +
+ "] is not a number.");
+ }
+ }
- /**
- * Get the string associated with a key.
- *
- * @param key A key string.
- * @return A string which is the value.
- * @throws JSONException if the key is not found.
- */
- public String getString(String key) throws JSONException {
- return get(key).toString();
- }
+ /**
+ * Get the int value associated with a key. If the number value is too
+ * large for an int, it will be clipped.
+ *
+ * @param key A key string.
+ * @return The integer value.
+ * @throws JSONException if the key is not found or if the value cannot
+ * be converted to an integer.
+ */
+ public int getInt(String key) throws JSONException
+ {
+ Object o = get(key);
+ return o instanceof Number ?
+ ((Number) o).intValue() : (int) getDouble(key);
+ }
- /**
- * Determine if the JSONObject contains a specific key.
- * @param key A key string.
- * @return true if the key exists in the JSONObject.
- */
- public boolean has(String key) {
- return this.map.containsKey(key);
+ /**
+ * Get the JSONArray value associated with a key.
+ *
+ * @param key A key string.
+ * @return A JSONArray which is the value.
+ * @throws JSONException if the key is not found or
+ * if the value is not a JSONArray.
+ */
+ public JSONArray getJSONArray(String key) throws JSONException
+ {
+ Object o = get(key);
+ if (o instanceof JSONArray)
+ {
+ return (JSONArray) o;
}
+ throw new JSONException("JSONObject[" + quote(key) +
+ "] is not a JSONArray.");
+ }
- /**
- * Determine if the value associated with the key is null or if there is
- * no value.
- * @param key A key string.
- * @return true if there is no value associated with the key or if
- * the value is the JSONObject.NULL object.
- */
- public boolean isNull(String key) {
- return JSONObject.NULL.equals(opt(key));
+ /**
+ * Get the JSONObject value associated with a key.
+ *
+ * @param key A key string.
+ * @return A JSONObject which is the value.
+ * @throws JSONException if the key is not found or
+ * if the value is not a JSONObject.
+ */
+ public JSONObject getJSONObject(String key) throws JSONException
+ {
+ Object o = get(key);
+ if (o instanceof JSONObject)
+ {
+ return (JSONObject) o;
}
+ throw new JSONException("JSONObject[" + quote(key) +
+ "] is not a JSONObject.");
+ }
- /**
- * Get an enumeration of the keys of the JSONObject.
- *
- * @return An iterator of the keys.
- */
- public Iterator keys() {
- return this.map.keySet().iterator();
+ /**
+ * Get the long value associated with a key. If the number value is too
+ * long for a long, it will be clipped.
+ *
+ * @param key A key string.
+ * @return The long value.
+ * @throws JSONException if the key is not found or if the value cannot
+ * be converted to a long.
+ */
+ public long getLong(String key) throws JSONException
+ {
+ Object o = get(key);
+ return o instanceof Number ?
+ ((Number) o).longValue() : (long) getDouble(key);
+ }
+
+
+ /**
+ * Get an array of field names from a JSONObject.
+ *
+ * @return An array of field names, or null if there are no names.
+ */
+ public static String[] getNames(JSONObject jo)
+ {
+ int length = jo.length();
+ if (length == 0)
+ {
+ return null;
}
+ Iterator i = jo.keys();
+ String[] names = new String[length];
+ int j = 0;
+ while (i.hasNext())
+ {
+ names[j] = (String) i.next();
+ j += 1;
+ }
+ return names;
+ }
- /**
- * Get the number of keys stored in the JSONObject.
- *
- * @return The number of keys in the JSONObject.
- */
- public int length() {
- return this.map.size();
+ /**
+ * Get an array of field names from an Object.
+ *
+ * @return An array of field names, or null if there are no names.
+ */
+ public static String[] getNames(Object object)
+ {
+ if (object == null)
+ {
+ return null;
}
+ Class klass = object.getClass();
+ Field[] fields = klass.getFields();
+ int length = fields.length;
+ if (length == 0)
+ {
+ return null;
+ }
+ String[] names = new String[length];
+ for (int i = 0; i < length; i += 1)
+ {
+ names[i] = fields[i].getName();
+ }
+ return names;
+ }
- /**
- * Produce a JSONArray containing the names of the elements of this
- * JSONObject.
- * @return A JSONArray containing the key strings, or null if the JSONObject
- * is empty.
- */
- public JSONArray names() {
- JSONArray ja = new JSONArray();
- Iterator keys = keys();
- while (keys.hasNext()) {
- ja.put(keys.next());
- }
- return ja.length() == 0 ? null : ja;
+ /**
+ * Get the string associated with a key.
+ *
+ * @param key A key string.
+ * @return A string which is the value.
+ * @throws JSONException if the key is not found.
+ */
+ public String getString(String key) throws JSONException
+ {
+ return get(key).toString();
+ }
+
+
+ /**
+ * Determine if the JSONObject contains a specific key.
+ *
+ * @param key A key string.
+ * @return true if the key exists in the JSONObject.
+ */
+ public boolean has(String key)
+ {
+ return this.map.containsKey(key);
+ }
+
+
+ /**
+ * Determine if the value associated with the key is null or if there is
+ * no value.
+ *
+ * @param key A key string.
+ * @return true if there is no value associated with the key or if
+ * the value is the JSONObject.NULL object.
+ */
+ public boolean isNull(String key)
+ {
+ return JSONObject.NULL.equals(opt(key));
+ }
+
+
+ /**
+ * Get an enumeration of the keys of the JSONObject.
+ *
+ * @return An iterator of the keys.
+ */
+ public Iterator keys()
+ {
+ return this.map.keySet().iterator();
+ }
+
+
+ /**
+ * Get the number of keys stored in the JSONObject.
+ *
+ * @return The number of keys in the JSONObject.
+ */
+ public int length()
+ {
+ return this.map.size();
+ }
+
+
+ /**
+ * Produce a JSONArray containing the names of the elements of this
+ * JSONObject.
+ *
+ * @return A JSONArray containing the key strings, or null if the JSONObject
+ * is empty.
+ */
+ public JSONArray names()
+ {
+ JSONArray ja = new JSONArray();
+ Iterator keys = keys();
+ while (keys.hasNext())
+ {
+ ja.put(keys.next());
}
+ return ja.length() == 0 ? null : ja;
+ }
- /**
- * Produce a string from a Number.
- * @param n A Number
- * @return A String.
- * @throws JSONException If n is a non-finite number.
- */
- static public String numberToString(Number n)
- throws JSONException {
- if (n == null) {
- throw new JSONException("Null pointer");
- }
- testValidity(n);
+ /**
+ * Produce a string from a Number.
+ *
+ * @param n A Number
+ * @return A String.
+ * @throws JSONException If n is a non-finite number.
+ */
+ static public String numberToString(Number n)
+ throws JSONException
+ {
+ if (n == null)
+ {
+ throw new JSONException("Null pointer");
+ }
+ testValidity(n);
// Shave off trailing zeros and decimal point, if possible.
- String s = n.toString();
- if (s.indexOf('.') > 0 && s.indexOf('e') < 0 && s.indexOf('E') < 0) {
- while (s.endsWith("0")) {
- s = s.substring(0, s.length() - 1);
- }
- if (s.endsWith(".")) {
- s = s.substring(0, s.length() - 1);
- }
- }
- return s;
+ String s = n.toString();
+ if (s.indexOf('.') > 0 && s.indexOf('e') < 0 && s.indexOf('E') < 0)
+ {
+ while (s.endsWith("0"))
+ {
+ s = s.substring(0, s.length() - 1);
+ }
+ if (s.endsWith("."))
+ {
+ s = s.substring(0, s.length() - 1);
+ }
}
+ return s;
+ }
- /**
- * Get an optional value associated with a key.
- * @param key A key string.
- * @return An object which is the value, or null if there is no value.
- */
- public Object opt(String key) {
- return key == null ? null : this.map.get(key);
- }
+ /**
+ * Get an optional value associated with a key.
+ *
+ * @param key A key string.
+ * @return An object which is the value, or null if there is no value.
+ */
+ public Object opt(String key)
+ {
+ return key == null ? null : this.map.get(key);
+ }
- /**
- * Get an optional boolean associated with a key.
- * It returns false if there is no such key, or if the value is not
- * Boolean.TRUE or the String "true".
- *
- * @param key A key string.
- * @return The truth.
- */
- public boolean optBoolean(String key) {
- return optBoolean(key, false);
- }
+ /**
+ * Get an optional boolean associated with a key.
+ * It returns false if there is no such key, or if the value is not
+ * Boolean.TRUE or the String "true".
+ *
+ * @param key A key string.
+ * @return The truth.
+ */
+ public boolean optBoolean(String key)
+ {
+ return optBoolean(key, false);
+ }
- /**
- * Get an optional boolean associated with a key.
- * It returns the defaultValue if there is no such key, or if it is not
- * a Boolean or the String "true" or "false" (case insensitive).
- *
- * @param key A key string.
- * @param defaultValue The default.
- * @return The truth.
- */
- public boolean optBoolean(String key, boolean defaultValue) {
- try {
- return getBoolean(key);
- } catch (Exception e) {
- return defaultValue;
- }
+ /**
+ * Get an optional boolean associated with a key.
+ * It returns the defaultValue if there is no such key, or if it is not
+ * a Boolean or the String "true" or "false" (case insensitive).
+ *
+ * @param key A key string.
+ * @param defaultValue The default.
+ * @return The truth.
+ */
+ public boolean optBoolean(String key, boolean defaultValue)
+ {
+ try
+ {
+ return getBoolean(key);
}
+ catch (Exception e)
+ {
+ return defaultValue;
+ }
+ }
- /**
- * Put a key/value pair in the JSONObject, where the value will be a
- * JSONArray which is produced from a Collection.
- * @param key A key string.
- * @param value A Collection value.
- * @return this.
- * @throws JSONException
- */
- public JSONObject put(String key, Collection value) throws JSONException {
- put(key, new JSONArray(value));
- return this;
- }
+ /**
+ * Put a key/value pair in the JSONObject, where the value will be a
+ * JSONArray which is produced from a Collection.
+ *
+ * @param key A key string.
+ * @param value A Collection value.
+ * @return this.
+ * @throws JSONException
+ */
+ public JSONObject put(String key, Collection value) throws JSONException
+ {
+ put(key, new JSONArray(value));
+ return this;
+ }
- /**
- * Get an optional double associated with a key,
- * or NaN if there is no such key or if its value is not a number.
- * If the value is a string, an attempt will be made to evaluate it as
- * a number.
- *
- * @param key A string which is the key.
- * @return An object which is the value.
- */
- public double optDouble(String key) {
- return optDouble(key, Double.NaN);
- }
+ /**
+ * Get an optional double associated with a key,
+ * or NaN if there is no such key or if its value is not a number.
+ * If the value is a string, an attempt will be made to evaluate it as
+ * a number.
+ *
+ * @param key A string which is the key.
+ * @return An object which is the value.
+ */
+ public double optDouble(String key)
+ {
+ return optDouble(key, Double.NaN);
+ }
- /**
- * Get an optional double associated with a key, or the
- * defaultValue if there is no such key or if its value is not a number.
- * If the value is a string, an attempt will be made to evaluate it as
- * a number.
- *
- * @param key A key string.
- * @param defaultValue The default.
- * @return An object which is the value.
- */
- public double optDouble(String key, double defaultValue) {
- try {
- Object o = opt(key);
- return o instanceof Number ? ((Number)o).doubleValue() :
- new Double((String)o).doubleValue();
- } catch (Exception e) {
- return defaultValue;
- }
+ /**
+ * Get an optional double associated with a key, or the
+ * defaultValue if there is no such key or if its value is not a number.
+ * If the value is a string, an attempt will be made to evaluate it as
+ * a number.
+ *
+ * @param key A key string.
+ * @param defaultValue The default.
+ * @return An object which is the value.
+ */
+ public double optDouble(String key, double defaultValue)
+ {
+ try
+ {
+ Object o = opt(key);
+ return o instanceof Number ? ((Number) o).doubleValue() :
+ new Double((String) o).doubleValue();
}
+ catch (Exception e)
+ {
+ return defaultValue;
+ }
+ }
- /**
- * Get an optional int value associated with a key,
- * or zero if there is no such key or if the value is not a number.
- * If the value is a string, an attempt will be made to evaluate it as
- * a number.
- *
- * @param key A key string.
- * @return An object which is the value.
- */
- public int optInt(String key) {
- return optInt(key, 0);
- }
+ /**
+ * Get an optional int value associated with a key,
+ * or zero if there is no such key or if the value is not a number.
+ * If the value is a string, an attempt will be made to evaluate it as
+ * a number.
+ *
+ * @param key A key string.
+ * @return An object which is the value.
+ */
+ public int optInt(String key)
+ {
+ return optInt(key, 0);
+ }
- /**
- * Get an optional int value associated with a key,
- * or the default if there is no such key or if the value is not a number.
- * If the value is a string, an attempt will be made to evaluate it as
- * a number.
- *
- * @param key A key string.
- * @param defaultValue The default.
- * @return An object which is the value.
- */
- public int optInt(String key, int defaultValue) {
- try {
- return getInt(key);
- } catch (Exception e) {
- return defaultValue;
- }
+ /**
+ * Get an optional int value associated with a key,
+ * or the default if there is no such key or if the value is not a number.
+ * If the value is a string, an attempt will be made to evaluate it as
+ * a number.
+ *
+ * @param key A key string.
+ * @param defaultValue The default.
+ * @return An object which is the value.
+ */
+ public int optInt(String key, int defaultValue)
+ {
+ try
+ {
+ return getInt(key);
}
+ catch (Exception e)
+ {
+ return defaultValue;
+ }
+ }
- /**
- * Get an optional JSONArray associated with a key.
- * It returns null if there is no such key, or if its value is not a
- * JSONArray.
- *
- * @param key A key string.
- * @return A JSONArray which is the value.
- */
- public JSONArray optJSONArray(String key) {
- Object o = opt(key);
- return o instanceof JSONArray ? (JSONArray)o : null;
- }
+ /**
+ * Get an optional JSONArray associated with a key.
+ * It returns null if there is no such key, or if its value is not a
+ * JSONArray.
+ *
+ * @param key A key string.
+ * @return A JSONArray which is the value.
+ */
+ public JSONArray optJSONArray(String key)
+ {
+ Object o = opt(key);
+ return o instanceof JSONArray ? (JSONArray) o : null;
+ }
- /**
- * Get an optional JSONObject associated with a key.
- * It returns null if there is no such key, or if its value is not a
- * JSONObject.
- *
- * @param key A key string.
- * @return A JSONObject which is the value.
- */
- public JSONObject optJSONObject(String key) {
- Object o = opt(key);
- return o instanceof JSONObject ? (JSONObject)o : null;
- }
+ /**
+ * Get an optional JSONObject associated with a key.
+ * It returns null if there is no such key, or if its value is not a
+ * JSONObject.
+ *
+ * @param key A key string.
+ * @return A JSONObject which is the value.
+ */
+ public JSONObject optJSONObject(String key)
+ {
+ Object o = opt(key);
+ return o instanceof JSONObject ? (JSONObject) o : null;
+ }
- /**
- * Get an optional long value associated with a key,
- * or zero if there is no such key or if the value is not a number.
- * If the value is a string, an attempt will be made to evaluate it as
- * a number.
- *
- * @param key A key string.
- * @return An object which is the value.
- */
- public long optLong(String key) {
- return optLong(key, 0);
- }
+ /**
+ * Get an optional long value associated with a key,
+ * or zero if there is no such key or if the value is not a number.
+ * If the value is a string, an attempt will be made to evaluate it as
+ * a number.
+ *
+ * @param key A key string.
+ * @return An object which is the value.
+ */
+ public long optLong(String key)
+ {
+ return optLong(key, 0);
+ }
- /**
- * Get an optional long value associated with a key,
- * or the default if there is no such key or if the value is not a number.
- * If the value is a string, an attempt will be made to evaluate it as
- * a number.
- *
- * @param key A key string.
- * @param defaultValue The default.
- * @return An object which is the value.
- */
- public long optLong(String key, long defaultValue) {
- try {
- return getLong(key);
- } catch (Exception e) {
- return defaultValue;
- }
+ /**
+ * Get an optional long value associated with a key,
+ * or the default if there is no such key or if the value is not a number.
+ * If the value is a string, an attempt will be made to evaluate it as
+ * a number.
+ *
+ * @param key A key string.
+ * @param defaultValue The default.
+ * @return An object which is the value.
+ */
+ public long optLong(String key, long defaultValue)
+ {
+ try
+ {
+ return getLong(key);
}
+ catch (Exception e)
+ {
+ return defaultValue;
+ }
+ }
- /**
- * Get an optional string associated with a key.
- * It returns an empty string if there is no such key. If the value is not
- * a string and is not null, then it is coverted to a string.
- *
- * @param key A key string.
- * @return A string which is the value.
- */
- public String optString(String key) {
- return optString(key, "");
- }
+ /**
+ * Get an optional string associated with a key.
+ * It returns an empty string if there is no such key. If the value is not
+ * a string and is not null, then it is coverted to a string.
+ *
+ * @param key A key string.
+ * @return A string which is the value.
+ */
+ public String optString(String key)
+ {
+ return optString(key, "");
+ }
- /**
- * Get an optional string associated with a key.
- * It returns the defaultValue if there is no such key.
- *
- * @param key A key string.
- * @param defaultValue The default.
- * @return A string which is the value.
- */
- public String optString(String key, String defaultValue) {
- Object o = opt(key);
- return o != null ? o.toString() : defaultValue;
- }
+ /**
+ * Get an optional string associated with a key.
+ * It returns the defaultValue if there is no such key.
+ *
+ * @param key A key string.
+ * @param defaultValue The default.
+ * @return A string which is the value.
+ */
+ public String optString(String key, String defaultValue)
+ {
+ Object o = opt(key);
+ return o != null ? o.toString() : defaultValue;
+ }
- /**
- * Put a key/boolean pair in the JSONObject.
- *
- * @param key A key string.
- * @param value A boolean which is the value.
- * @return this.
- * @throws JSONException If the key is null.
- */
- public JSONObject put(String key, boolean value) throws JSONException {
- put(key, value ? Boolean.TRUE : Boolean.FALSE);
- return this;
- }
+ /**
+ * Put a key/boolean pair in the JSONObject.
+ *
+ * @param key A key string.
+ * @param value A boolean which is the value.
+ * @return this.
+ * @throws JSONException If the key is null.
+ */
+ public JSONObject put(String key, boolean value) throws JSONException
+ {
+ put(key, value ? Boolean.TRUE : Boolean.FALSE);
+ return this;
+ }
- /**
- * Put a key/double pair in the JSONObject.
- *
- * @param key A key string.
- * @param value A double which is the value.
- * @return this.
- * @throws JSONException If the key is null or if the number is invalid.
- */
- public JSONObject put(String key, double value) throws JSONException {
- put(key, new Double(value));
- return this;
- }
+ /**
+ * Put a key/double pair in the JSONObject.
+ *
+ * @param key A key string.
+ * @param value A double which is the value.
+ * @return this.
+ * @throws JSONException If the key is null or if the number is invalid.
+ */
+ public JSONObject put(String key, double value) throws JSONException
+ {
+ put(key, new Double(value));
+ return this;
+ }
- /**
- * Put a key/int pair in the JSONObject.
- *
- * @param key A key string.
- * @param value An int which is the value.
- * @return this.
- * @throws JSONException If the key is null.
- */
- public JSONObject put(String key, int value) throws JSONException {
- put(key, new Integer(value));
- return this;
- }
+ /**
+ * Put a key/int pair in the JSONObject.
+ *
+ * @param key A key string.
+ * @param value An int which is the value.
+ * @return this.
+ * @throws JSONException If the key is null.
+ */
+ public JSONObject put(String key, int value) throws JSONException
+ {
+ put(key, new Integer(value));
+ return this;
+ }
- /**
- * Put a key/long pair in the JSONObject.
- *
- * @param key A key string.
- * @param value A long which is the value.
- * @return this.
- * @throws JSONException If the key is null.
- */
- public JSONObject put(String key, long value) throws JSONException {
- put(key, new Long(value));
- return this;
- }
+ /**
+ * Put a key/long pair in the JSONObject.
+ *
+ * @param key A key string.
+ * @param value A long which is the value.
+ * @return this.
+ * @throws JSONException If the key is null.
+ */
+ public JSONObject put(String key, long value) throws JSONException
+ {
+ put(key, new Long(value));
+ return this;
+ }
- /**
- * Put a key/value pair in the JSONObject, where the value will be a
- * JSONObject which is produced from a Map.
- * @param key A key string.
- * @param value A Map value.
- * @return this.
- * @throws JSONException
- */
- public JSONObject put(String key, Map value) throws JSONException {
- put(key, new JSONObject(value));
- return this;
+ /**
+ * Put a key/value pair in the JSONObject, where the value will be a
+ * JSONObject which is produced from a Map.
+ *
+ * @param key A key string.
+ * @param value A Map value.
+ * @return this.
+ * @throws JSONException
+ */
+ public JSONObject put(String key, Map value) throws JSONException
+ {
+ put(key, new JSONObject(value));
+ return this;
+ }
+
+
+ /**
+ * Put a key/value pair in the JSONObject. If the value is null,
+ * then the key will be removed from the JSONObject if it is present.
+ *
+ * @param key A key string.
+ * @param value An object which is the value. It should be of one of these
+ * types: Boolean, Double, Integer, JSONArray, JSONObject, Long, String,
+ * or the JSONObject.NULL object.
+ * @return this.
+ * @throws JSONException If the value is non-finite number
+ * or if the key is null.
+ */
+ public JSONObject put(String key, Object value) throws JSONException
+ {
+ if (key == null)
+ {
+ throw new JSONException("Null key.");
}
+ if (value != null)
+ {
+ testValidity(value);
+ this.map.put(key, value);
+ }
+ else
+ {
+ remove(key);
+ }
+ return this;
+ }
- /**
- * Put a key/value pair in the JSONObject. If the value is null,
- * then the key will be removed from the JSONObject if it is present.
- * @param key A key string.
- * @param value An object which is the value. It should be of one of these
- * types: Boolean, Double, Integer, JSONArray, JSONObject, Long, String,
- * or the JSONObject.NULL object.
- * @return this.
- * @throws JSONException If the value is non-finite number
- * or if the key is null.
- */
- public JSONObject put(String key, Object value) throws JSONException {
- if (key == null) {
- throw new JSONException("Null key.");
- }
- if (value != null) {
- testValidity(value);
- this.map.put(key, value);
- } else {
- remove(key);
- }
- return this;
+ /**
+ * Put a key/value pair in the JSONObject, but only if the key and the
+ * value are both non-null, and only if there is not already a member
+ * with that name.
+ *
+ * @param key
+ * @param value
+ * @return his.
+ * @throws JSONException if the key is a duplicate
+ */
+ public JSONObject putOnce(String key, Object value) throws JSONException
+ {
+ if (key != null && value != null)
+ {
+ if (opt(key) != null)
+ {
+ throw new JSONException("Duplicate key \"" + key + "\"");
+ }
+ put(key, value);
}
+ return this;
+ }
- /**
- * Put a key/value pair in the JSONObject, but only if the key and the
- * value are both non-null, and only if there is not already a member
- * with that name.
- * @param key
- * @param value
- * @return his.
- * @throws JSONException if the key is a duplicate
- */
- public JSONObject putOnce(String key, Object value) throws JSONException {
- if (key != null && value != null) {
- if (opt(key) != null) {
- throw new JSONException("Duplicate key \"" + key + "\"");
- }
- put(key, value);
- }
- return this;
+ /**
+ * Put a key/value pair in the JSONObject, but only if the
+ * key and the value are both non-null.
+ *
+ * @param key A key string.
+ * @param value An object which is the value. It should be of one of these
+ * types: Boolean, Double, Integer, JSONArray, JSONObject, Long, String,
+ * or the JSONObject.NULL object.
+ * @return this.
+ * @throws JSONException If the value is a non-finite number.
+ */
+ public JSONObject putOpt(String key, Object value) throws JSONException
+ {
+ if (key != null && value != null)
+ {
+ put(key, value);
}
+ return this;
+ }
- /**
- * Put a key/value pair in the JSONObject, but only if the
- * key and the value are both non-null.
- * @param key A key string.
- * @param value An object which is the value. It should be of one of these
- * types: Boolean, Double, Integer, JSONArray, JSONObject, Long, String,
- * or the JSONObject.NULL object.
- * @return this.
- * @throws JSONException If the value is a non-finite number.
- */
- public JSONObject putOpt(String key, Object value) throws JSONException {
- if (key != null && value != null) {
- put(key, value);
- }
- return this;
+ /**
+ * Produce a string in double quotes with backslash sequences in all the
+ * right places. A backslash will be inserted within </, allowing JSON
+ * text to be delivered in HTML. In JSON text, a string cannot contain a
+ * control character or an unescaped quote or backslash.
+ *
+ * @param string A String
+ * @return A String correctly formatted for insertion in a JSON text.
+ */
+ public static String quote(String string)
+ {
+ if (string == null || string.length() == 0)
+ {
+ return "\"\"";
}
-
-
- /**
- * Produce a string in double quotes with backslash sequences in all the
- * right places. A backslash will be inserted within </, allowing JSON
- * text to be delivered in HTML. In JSON text, a string cannot contain a
- * control character or an unescaped quote or backslash.
- * @param string A String
- * @return A String correctly formatted for insertion in a JSON text.
- */
- public static String quote(String string) {
- if (string == null || string.length() == 0) {
- return "\"\"";
- }
- char b;
- char c = 0;
- int i;
- int len = string.length();
- StringBuffer sb = new StringBuffer(len + 4);
- String t;
+ char b;
+ char c = 0;
+ int i;
+ int len = string.length();
+ StringBuffer sb = new StringBuffer(len + 4);
+ String t;
- sb.append('"');
- for (i = 0; i < len; i += 1) {
- b = c;
- c = string.charAt(i);
- switch (c) {
- case '\\':
- case '"':
- sb.append('\\');
- sb.append(c);
- break;
- case '/':
- if (b == '<') {
- sb.append('\\');
- }
- sb.append(c);
- break;
- case '\b':
- sb.append("\\b");
- break;
- case '\t':
- sb.append("\\t");
- break;
- case '\n':
- sb.append("\\n");
- break;
- case '\f':
- sb.append("\\f");
- break;
- case '\r':
- sb.append("\\r");
- break;
- default:
- if (c < ' ' || (c >= '\u0080' && c < '\u00a0') ||
- (c >= '\u2000' && c < '\u2100')) {
- t = "000" + Integer.toHexString(c);
- sb.append("\\u" + t.substring(t.length() - 4));
- } else {
- sb.append(c);
- }
- }
- }
- sb.append('"');
- return sb.toString();
+ sb.append('"');
+ for (i = 0; i < len; i += 1)
+ {
+ b = c;
+ c = string.charAt(i);
+ switch (c)
+ {
+ case'\\':
+ case'"':
+ sb.append('\\');
+ sb.append(c);
+ break;
+ case'/':
+ if (b == '<')
+ {
+ sb.append('\\');
+ }
+ sb.append(c);
+ break;
+ case'\b':
+ sb.append("\\b");
+ break;
+ case'\t':
+ sb.append("\\t");
+ break;
+ case'\n':
+ sb.append("\\n");
+ break;
+ case'\f':
+ sb.append("\\f");
+ break;
+ case'\r':
+ sb.append("\\r");
+ break;
+ default:
+ if (c < ' ' || (c >= '\u0080' && c < '\u00a0') ||
+ (c >= '\u2000' && c < '\u2100'))
+ {
+ t = "000" + Integer.toHexString(c);
+ sb.append("\\u" + t.substring(t.length() - 4));
+ }
+ else
+ {
+ sb.append(c);
+ }
+ }
}
+ sb.append('"');
+ return sb.toString();
+ }
- /**
- * Remove a name and its value, if present.
- * @param key The name to be removed.
- * @return The value that was associated with the name,
- * or null if there was no value.
- */
- public Object remove(String key) {
- return this.map.remove(key);
+ /**
+ * Remove a name and its value, if present.
+ *
+ * @param key The name to be removed.
+ * @return The value that was associated with the name,
+ * or null if there was no value.
+ */
+ public Object remove(String key)
+ {
+ return this.map.remove(key);
+ }
+
+ /**
+ * Get an enumeration of the keys of the JSONObject.
+ * The keys will be sorted alphabetically.
+ *
+ * @return An iterator of the keys.
+ */
+ public Iterator sortedKeys()
+ {
+ return new TreeSet(this.map.keySet()).iterator();
+ }
+
+ /**
+ * Try to convert a string into a number, boolean, or null. If the string
+ * can't be converted, return the string.
+ *
+ * @param s A String.
+ * @return A simple JSON value.
+ */
+ static public Object stringToValue(String s)
+ {
+ if (s.equals(""))
+ {
+ return s;
}
-
- /**
- * Get an enumeration of the keys of the JSONObject.
- * The keys will be sorted alphabetically.
- *
- * @return An iterator of the keys.
- */
- public Iterator sortedKeys() {
- return new TreeSet(this.map.keySet()).iterator();
+ if (s.equalsIgnoreCase("true"))
+ {
+ return Boolean.TRUE;
}
+ if (s.equalsIgnoreCase("false"))
+ {
+ return Boolean.FALSE;
+ }
+ if (s.equalsIgnoreCase("null"))
+ {
+ return JSONObject.NULL;
+ }
- /**
- * Try to convert a string into a number, boolean, or null. If the string
- * can't be converted, return the string.
- * @param s A String.
- * @return A simple JSON value.
- */
- static public Object stringToValue(String s) {
- if (s.equals("")) {
- return s;
+ /*
+ * If it might be a number, try converting it. We support the 0- and 0x-
+ * conventions. If a number cannot be produced, then the value will just
+ * be a string. Note that the 0-, 0x-, plus, and implied string
+ * conventions are non-standard. A JSON parser is free to accept
+ * non-JSON forms as long as it accepts all correct JSON forms.
+ */
+
+ char b = s.charAt(0);
+ if ((b >= '0' && b <= '9') || b == '.' || b == '-' || b == '+')
+ {
+ if (b == '0')
+ {
+ if (s.length() > 2 &&
+ (s.charAt(1) == 'x' || s.charAt(1) == 'X'))
+ {
+ try
+ {
+ return new Integer(Integer.parseInt(s.substring(2),
+ 16));
+ }
+ catch (Exception e)
+ {
+ /* Ignore the error */
+ }
}
- if (s.equalsIgnoreCase("true")) {
- return Boolean.TRUE;
+ else
+ {
+ try
+ {
+ return new Integer(Integer.parseInt(s, 8));
+ }
+ catch (Exception e)
+ {
+ /* Ignore the error */
+ }
}
- if (s.equalsIgnoreCase("false")) {
- return Boolean.FALSE;
+ }
+ try
+ {
+ return new Integer(s);
+ }
+ catch (Exception e)
+ {
+ try
+ {
+ return new Long(s);
}
- if (s.equalsIgnoreCase("null")) {
- return JSONObject.NULL;
+ catch (Exception f)
+ {
+ try
+ {
+ return new Double(s);
+ }
+ catch (Exception g)
+ {
+ /* Ignore the error */
+ }
}
+ }
+ }
+ return s;
+ }
- /*
- * If it might be a number, try converting it. We support the 0- and 0x-
- * conventions. If a number cannot be produced, then the value will just
- * be a string. Note that the 0-, 0x-, plus, and implied string
- * conventions are non-standard. A JSON parser is free to accept
- * non-JSON forms as long as it accepts all correct JSON forms.
- */
- char b = s.charAt(0);
- if ((b >= '0' && b <= '9') || b == '.' || b == '-' || b == '+') {
- if (b == '0') {
- if (s.length() > 2 &&
- (s.charAt(1) == 'x' || s.charAt(1) == 'X')) {
- try {
- return new Integer(Integer.parseInt(s.substring(2),
- 16));
- } catch (Exception e) {
- /* Ignore the error */
- }
- } else {
- try {
- return new Integer(Integer.parseInt(s, 8));
- } catch (Exception e) {
- /* Ignore the error */
- }
- }
- }
- try {
- return new Integer(s);
- } catch (Exception e) {
- try {
- return new Long(s);
- } catch (Exception f) {
- try {
- return new Double(s);
- } catch (Exception g) {
- /* Ignore the error */
- }
- }
- }
+ /**
+ * Throw an exception if the object is an NaN or infinite number.
+ *
+ * @param o The object to test.
+ * @throws JSONException If o is a non-finite number.
+ */
+ static void testValidity(Object o) throws JSONException
+ {
+ if (o != null)
+ {
+ if (o instanceof Double)
+ {
+ if (((Double) o).isInfinite() || ((Double) o).isNaN())
+ {
+ throw new JSONException(
+ "JSON does not allow non-finite numbers.");
}
- return s;
- }
-
-
- /**
- * Throw an exception if the object is an NaN or infinite number.
- * @param o The object to test.
- * @throws JSONException If o is a non-finite number.
- */
- static void testValidity(Object o) throws JSONException {
- if (o != null) {
- if (o instanceof Double) {
- if (((Double)o).isInfinite() || ((Double)o).isNaN()) {
- throw new JSONException(
- "JSON does not allow non-finite numbers.");
- }
- } else if (o instanceof Float) {
- if (((Float)o).isInfinite() || ((Float)o).isNaN()) {
- throw new JSONException(
- "JSON does not allow non-finite numbers.");
- }
- }
+ }
+ else if (o instanceof Float)
+ {
+ if (((Float) o).isInfinite() || ((Float) o).isNaN())
+ {
+ throw new JSONException(
+ "JSON does not allow non-finite numbers.");
}
+ }
}
+ }
- /**
- * Produce a JSONArray containing the values of the members of this
- * JSONObject.
- * @param names A JSONArray containing a list of key strings. This
- * determines the sequence of the values in the result.
- * @return A JSONArray of values.
- * @throws JSONException If any of the values are non-finite numbers.
- */
- public JSONArray toJSONArray(JSONArray names) throws JSONException {
- if (names == null || names.length() == 0) {
- return null;
- }
- JSONArray ja = new JSONArray();
- for (int i = 0; i < names.length(); i += 1) {
- ja.put(this.opt(names.getString(i)));
- }
- return ja;
+ /**
+ * Produce a JSONArray containing the values of the members of this
+ * JSONObject.
+ *
+ * @param names A JSONArray containing a list of key strings. This
+ * determines the sequence of the values in the result.
+ * @return A JSONArray of values.
+ * @throws JSONException If any of the values are non-finite numbers.
+ */
+ public JSONArray toJSONArray(JSONArray names) throws JSONException
+ {
+ if (names == null || names.length() == 0)
+ {
+ return null;
}
+ JSONArray ja = new JSONArray();
+ for (int i = 0; i < names.length(); i += 1)
+ {
+ ja.put(this.opt(names.getString(i)));
+ }
+ return ja;
+ }
- /**
- * Make a JSON text of this JSONObject. For compactness, no whitespace
- * is added. If this would not result in a syntactically correct JSON text,
- * then null will be returned instead.
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- *
- * @return a printable, displayable, portable, transmittable
- * representation of the object, beginning
- * with <code>{</code> <small>(left brace)</small> and ending
- * with <code>}</code> <small>(right brace)</small>.
- */
- public String toString() {
- try {
- Iterator keys = keys();
- StringBuffer sb = new StringBuffer("{");
+ /**
+ * Make a JSON text of this JSONObject. For compactness, no whitespace
+ * is added. If this would not result in a syntactically correct JSON text,
+ * then null will be returned instead.
+ * <p/>
+ * Warning: This method assumes that the data structure is acyclical.
+ *
+ * @return a printable, displayable, portable, transmittable
+ * representation of the object, beginning
+ * with <code>{</code> <small>(left brace)</small> and ending
+ * with <code>}</code> <small>(right brace)</small>.
+ */
+ public String toString()
+ {
+ try
+ {
+ Iterator keys = keys();
+ StringBuffer sb = new StringBuffer("{");
- while (keys.hasNext()) {
- if (sb.length() > 1) {
- sb.append(',');
- }
- Object o = keys.next();
- sb.append(quote(o.toString()));
- sb.append(':');
- sb.append(valueToString(this.map.get(o)));
- }
- sb.append('}');
- return sb.toString();
- } catch (Exception e) {
- return null;
+ while (keys.hasNext())
+ {
+ if (sb.length() > 1)
+ {
+ sb.append(',');
}
+ Object o = keys.next();
+ sb.append(quote(o.toString()));
+ sb.append(':');
+ sb.append(valueToString(this.map.get(o)));
+ }
+ sb.append('}');
+ return sb.toString();
}
+ catch (Exception e)
+ {
+ return null;
+ }
+ }
- /**
- * Make a prettyprinted JSON text of this JSONObject.
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- * @param indentFactor The number of spaces to add to each level of
- * indentation.
- * @return a printable, displayable, portable, transmittable
- * representation of the object, beginning
- * with <code>{</code> <small>(left brace)</small> and ending
- * with <code>}</code> <small>(right brace)</small>.
- * @throws JSONException If the object contains an invalid number.
- */
- public String toString(int indentFactor) throws JSONException {
- return toString(indentFactor, 0);
- }
+ /**
+ * Make a prettyprinted JSON text of this JSONObject.
+ * <p/>
+ * Warning: This method assumes that the data structure is acyclical.
+ *
+ * @param indentFactor The number of spaces to add to each level of
+ * indentation.
+ * @return a printable, displayable, portable, transmittable
+ * representation of the object, beginning
+ * with <code>{</code> <small>(left brace)</small> and ending
+ * with <code>}</code> <small>(right brace)</small>.
+ * @throws JSONException If the object contains an invalid number.
+ */
+ public String toString(int indentFactor) throws JSONException
+ {
+ return toString(indentFactor, 0);
+ }
- /**
- * Make a prettyprinted JSON text of this JSONObject.
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- * @param indentFactor The number of spaces to add to each level of
- * indentation.
- * @param indent The indentation of the top level.
- * @return a printable, displayable, transmittable
- * representation of the object, beginning
- * with <code>{</code> <small>(left brace)</small> and ending
- * with <code>}</code> <small>(right brace)</small>.
- * @throws JSONException If the object contains an invalid number.
- */
- String toString(int indentFactor, int indent) throws JSONException {
- int j;
- int n = length();
- if (n == 0) {
- return "{}";
+ /**
+ * Make a prettyprinted JSON text of this JSONObject.
+ * <p/>
+ * Warning: This method assumes that the data structure is acyclical.
+ *
+ * @param indentFactor The number of spaces to add to each level of
+ * indentation.
+ * @param indent The indentation of the top level.
+ * @return a printable, displayable, transmittable
+ * representation of the object, beginning
+ * with <code>{</code> <small>(left brace)</small> and ending
+ * with <code>}</code> <small>(right brace)</small>.
+ * @throws JSONException If the object contains an invalid number.
+ */
+ String toString(int indentFactor, int indent) throws JSONException
+ {
+ int j;
+ int n = length();
+ if (n == 0)
+ {
+ return "{}";
+ }
+ Iterator keys = sortedKeys();
+ StringBuffer sb = new StringBuffer("{");
+ int newindent = indent + indentFactor;
+ Object o;
+ if (n == 1)
+ {
+ o = keys.next();
+ sb.append(quote(o.toString()));
+ sb.append(": ");
+ sb.append(valueToString(this.map.get(o), indentFactor,
+ indent));
+ }
+ else
+ {
+ while (keys.hasNext())
+ {
+ o = keys.next();
+ if (sb.length() > 1)
+ {
+ sb.append(",\n");
}
- Iterator keys = sortedKeys();
- StringBuffer sb = new StringBuffer("{");
- int newindent = indent + indentFactor;
- Object o;
- if (n == 1) {
- o = keys.next();
- sb.append(quote(o.toString()));
- sb.append(": ");
- sb.append(valueToString(this.map.get(o), indentFactor,
- indent));
- } else {
- while (keys.hasNext()) {
- o = keys.next();
- if (sb.length() > 1) {
- sb.append(",\n");
- } else {
- sb.append('\n');
- }
- for (j = 0; j < newindent; j += 1) {
- sb.append(' ');
- }
- sb.append(quote(o.toString()));
- sb.append(": ");
- sb.append(valueToString(this.map.get(o), indentFactor,
- newindent));
- }
- if (sb.length() > 1) {
- sb.append('\n');
- for (j = 0; j < indent; j += 1) {
- sb.append(' ');
- }
- }
+ else
+ {
+ sb.append('\n');
}
- sb.append('}');
- return sb.toString();
+ for (j = 0; j < newindent; j += 1)
+ {
+ sb.append(' ');
+ }
+ sb.append(quote(o.toString()));
+ sb.append(": ");
+ sb.append(valueToString(this.map.get(o), indentFactor,
+ newindent));
+ }
+ if (sb.length() > 1)
+ {
+ sb.append('\n');
+ for (j = 0; j < indent; j += 1)
+ {
+ sb.append(' ');
+ }
+ }
}
+ sb.append('}');
+ return sb.toString();
+ }
- /**
- * Make a JSON text of an Object value. If the object has an
- * value.toJSONString() method, then that method will be used to produce
- * the JSON text. The method is required to produce a strictly
- * conforming text. If the object does not contain a toJSONString
- * method (which is the most common case), then a text will be
- * produced by other means. If the value is an array or Collection,
- * then a JSONArray will be made from it and its toJSONString method
- * will be called. If the value is a MAP, then a JSONObject will be made
- * from it and its toJSONString method will be called. Otherwise, the
- * value's toString method will be called, and the result will be quoted.
- *
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- * @param value The value to be serialized.
- * @return a printable, displayable, transmittable
- * representation of the object, beginning
- * with <code>{</code> <small>(left brace)</small> and ending
- * with <code>}</code> <small>(right brace)</small>.
- * @throws JSONException If the value is or contains an invalid number.
- */
- static String valueToString(Object value) throws JSONException {
- if (value == null || value.equals(null)) {
- return "null";
+ /**
+ * Make a JSON text of an Object value. If the object has an
+ * value.toJSONString() method, then that method will be used to produce
+ * the JSON text. The method is required to produce a strictly
+ * conforming text. If the object does not contain a toJSONString
+ * method (which is the most common case), then a text will be
+ * produced by other means. If the value is an array or Collection,
+ * then a JSONArray will be made from it and its toJSONString method
+ * will be called. If the value is a MAP, then a JSONObject will be made
+ * from it and its toJSONString method will be called. Otherwise, the
+ * value's toString method will be called, and the result will be quoted.
+ * <p/>
+ * <p/>
+ * Warning: This method assumes that the data structure is acyclical.
+ *
+ * @param value The value to be serialized.
+ * @return a printable, displayable, transmittable
+ * representation of the object, beginning
+ * with <code>{</code> <small>(left brace)</small> and ending
+ * with <code>}</code> <small>(right brace)</small>.
+ * @throws JSONException If the value is or contains an invalid number.
+ */
+ static String valueToString(Object value) throws JSONException
+ {
+ if (value == null || value.equals(null))
+ {
+ return "null";
+ }
+ if (value instanceof JSONString)
+ {
+ Object o;
+ try
+ {
+ o = ((JSONString) value).toJSONString();
+ }
+ catch (Exception e)
+ {
+ throw new JSONException(e);
+ }
+ if (o instanceof String)
+ {
+ return (String) o;
+ }
+ throw new JSONException("Bad value from toJSONString: " + o);
+ }
+ if (value instanceof Number)
+ {
+ return numberToString((Number) value);
+ }
+ if (value instanceof Boolean || value instanceof JSONObject ||
+ value instanceof JSONArray)
+ {
+ return value.toString();
+ }
+ if (value instanceof Map)
+ {
+ return new JSONObject((Map) value).toString();
+ }
+ if (value instanceof Collection)
+ {
+ return new JSONArray((Collection) value).toString();
+ }
+ if (value.getClass().isArray())
+ {
+ return new JSONArray(value).toString();
+ }
+ return quote(value.toString());
+ }
+
+
+ /**
+ * Make a prettyprinted JSON text of an object value.
+ * <p/>
+ * Warning: This method assumes that the data structure is acyclical.
+ *
+ * @param value The value to be serialized.
+ * @param indentFactor The number of spaces to add to each level of
+ * indentation.
+ * @param indent The indentation of the top level.
+ * @return a printable, displayable, transmittable
+ * representation of the object, beginning
+ * with <code>{</code> <small>(left brace)</small> and ending
+ * with <code>}</code> <small>(right brace)</small>.
+ * @throws JSONException If the object contains an invalid number.
+ */
+ static String valueToString(Object value, int indentFactor, int indent)
+ throws JSONException
+ {
+ if (value == null || value.equals(null))
+ {
+ return "null";
+ }
+ try
+ {
+ if (value instanceof JSONString)
+ {
+ Object o = ((JSONString) value).toJSONString();
+ if (o instanceof String)
+ {
+ return (String) o;
}
- if (value instanceof JSONString) {
- Object o;
- try {
- o = ((JSONString)value).toJSONString();
- } catch (Exception e) {
- throw new JSONException(e);
- }
- if (o instanceof String) {
- return (String)o;
- }
- throw new JSONException("Bad value from toJSONString: " + o);
- }
- if (value instanceof Number) {
- return numberToString((Number) value);
- }
- if (value instanceof Boolean || value instanceof JSONObject ||
- value instanceof JSONArray) {
- return value.toString();
- }
- if (value instanceof Map) {
- return new JSONObject((Map)value).toString();
- }
- if (value instanceof Collection) {
- return new JSONArray((Collection)value).toString();
- }
- if (value.getClass().isArray()) {
- return new JSONArray(value).toString();
- }
- return quote(value.toString());
+ }
}
+ catch (Exception e)
+ {
+ /* forget about it */
+ }
+ if (value instanceof Number)
+ {
+ return numberToString((Number) value);
+ }
+ if (value instanceof Boolean)
+ {
+ return value.toString();
+ }
+ if (value instanceof JSONObject)
+ {
+ return ((JSONObject) value).toString(indentFactor, indent);
+ }
+ if (value instanceof JSONArray)
+ {
+ return ((JSONArray) value).toString(indentFactor, indent);
+ }
+ if (value instanceof Map)
+ {
+ return new JSONObject((Map) value).toString(indentFactor, indent);
+ }
+ if (value instanceof Collection)
+ {
+ return new JSONArray((Collection) value).toString(indentFactor, indent);
+ }
+ if (value.getClass().isArray())
+ {
+ return new JSONArray(value).toString(indentFactor, indent);
+ }
+ return quote(value.toString());
+ }
- /**
- * Make a prettyprinted JSON text of an object value.
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- * @param value The value to be serialized.
- * @param indentFactor The number of spaces to add to each level of
- * indentation.
- * @param indent The indentation of the top level.
- * @return a printable, displayable, transmittable
- * representation of the object, beginning
- * with <code>{</code> <small>(left brace)</small> and ending
- * with <code>}</code> <small>(right brace)</small>.
- * @throws JSONException If the object contains an invalid number.
- */
- static String valueToString(Object value, int indentFactor, int indent)
- throws JSONException {
- if (value == null || value.equals(null)) {
- return "null";
+ /**
+ * Write the contents of the JSONObject as JSON text to a writer.
+ * For compactness, no whitespace is added.
+ * <p/>
+ * Warning: This method assumes that the data structure is acyclical.
+ *
+ * @return The writer.
+ * @throws JSONException
+ */
+ public Writer write(Writer writer) throws JSONException
+ {
+ try
+ {
+ boolean b = false;
+ Iterator keys = keys();
+ writer.write('{');
+
+ while (keys.hasNext())
+ {
+ if (b)
+ {
+ writer.write(',');
}
- try {
- if (value instanceof JSONString) {
- Object o = ((JSONString)value).toJSONString();
- if (o instanceof String) {
- return (String)o;
- }
- }
- } catch (Exception e) {
- /* forget about it */
+ Object k = keys.next();
+ writer.write(quote(k.toString()));
+ writer.write(':');
+ Object v = this.map.get(k);
+ if (v instanceof JSONObject)
+ {
+ ((JSONObject) v).write(writer);
}
- if (value instanceof Number) {
- return numberToString((Number) value);
+ else if (v instanceof JSONArray)
+ {
+ ((JSONArray) v).write(writer);
}
- if (value instanceof Boolean) {
- return value.toString();
+ else
+ {
+ writer.write(valueToString(v));
}
- if (value instanceof JSONObject) {
- return ((JSONObject)value).toString(indentFactor, indent);
- }
- if (value instanceof JSONArray) {
- return ((JSONArray)value).toString(indentFactor, indent);
- }
- if (value instanceof Map) {
- return new JSONObject((Map)value).toString(indentFactor, indent);
- }
- if (value instanceof Collection) {
- return new JSONArray((Collection)value).toString(indentFactor, indent);
- }
- if (value.getClass().isArray()) {
- return new JSONArray(value).toString(indentFactor, indent);
- }
- return quote(value.toString());
+ b = true;
+ }
+ writer.write('}');
+ return writer;
}
-
-
- /**
- * Write the contents of the JSONObject as JSON text to a writer.
- * For compactness, no whitespace is added.
- * <p>
- * Warning: This method assumes that the data structure is acyclical.
- *
- * @return The writer.
- * @throws JSONException
- */
- public Writer write(Writer writer) throws JSONException {
- try {
- boolean b = false;
- Iterator keys = keys();
- writer.write('{');
-
- while (keys.hasNext()) {
- if (b) {
- writer.write(',');
- }
- Object k = keys.next();
- writer.write(quote(k.toString()));
- writer.write(':');
- Object v = this.map.get(k);
- if (v instanceof JSONObject) {
- ((JSONObject)v).write(writer);
- } else if (v instanceof JSONArray) {
- ((JSONArray)v).write(writer);
- } else {
- writer.write(valueToString(v));
- }
- b = true;
- }
- writer.write('}');
- return writer;
- } catch (IOException e) {
- throw new JSONException(e);
- }
- }
+ catch (IOException e)
+ {
+ throw new JSONException(e);
+ }
+ }
}
\ No newline at end of file
Modified: projects/gwt-console/trunk/war/src/main/java/org/json/JSONString.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/json/JSONString.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/json/JSONString.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -1,18 +1,20 @@
package org.json;
+
/**
- * The <code>JSONString</code> interface allows a <code>toJSONString()</code>
- * method so that a class can change the behavior of
+ * The <code>JSONString</code> interface allows a <code>toJSONString()</code>
+ * method so that a class can change the behavior of
* <code>JSONObject.toString()</code>, <code>JSONArray.toString()</code>,
- * and <code>JSONWriter.value(</code>Object<code>)</code>. The
- * <code>toJSONString</code> method will be used instead of the default behavior
+ * and <code>JSONWriter.value(</code>Object<code>)</code>. The
+ * <code>toJSONString</code> method will be used instead of the default behavior
* of using the Object's <code>toString()</code> method and quoting the result.
*/
-public interface JSONString {
- /**
- * The <code>toJSONString</code> method allows a class to produce its own JSON
- * serialization.
- *
- * @return A strictly syntactically correct JSON text.
- */
- public String toJSONString();
+public interface JSONString
+{
+ /**
+ * The <code>toJSONString</code> method allows a class to produce its own JSON
+ * serialization.
+ *
+ * @return A strictly syntactically correct JSON text.
+ */
+ public String toJSONString();
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/json/JSONStringer.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/json/JSONStringer.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/json/JSONStringer.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -31,7 +31,7 @@
* The texts produced strictly conform to JSON syntax rules. No whitespace is
* added, so the results are ready for transmission or storage. Each instance of
* JSONStringer can produce one JSON text.
- * <p>
+ * <p/>
* A JSONStringer instance provides a <code>value</code> method for appending
* values to the
* text, and a <code>key</code>
@@ -47,32 +47,37 @@
* .endObject()
* .toString();</pre> which produces the string <pre>
* {"JSON":"Hello, World!"}</pre>
- * <p>
+ * <p/>
* The first method called must be <code>array</code> or <code>object</code>.
* There are no methods for adding commas or colons. JSONStringer adds them for
* you. Objects and arrays can be nested up to 20 levels deep.
- * <p>
+ * <p/>
* This can sometimes be easier than using a JSONObject to build a string.
+ *
* @author JSON.org
* @version 2008-09-18
*/
-public class JSONStringer extends JSONWriter {
- /**
- * Make a fresh JSONStringer. It can be used to build one JSON text.
- */
- public JSONStringer() {
- super(new StringWriter());
- }
+public class JSONStringer extends JSONWriter
+{
+ /**
+ * Make a fresh JSONStringer. It can be used to build one JSON text.
+ */
+ public JSONStringer()
+ {
+ super(new StringWriter());
+ }
- /**
- * Return the JSON text. This method is used to obtain the product of the
- * JSONStringer instance. It will return <code>null</code> if there was a
- * problem in the construction of the JSON text (such as the calls to
- * <code>array</code> were not properly balanced with calls to
- * <code>endArray</code>).
- * @return The JSON text.
- */
- public String toString() {
- return this.mode == 'd' ? this.writer.toString() : null;
- }
+ /**
+ * Return the JSON text. This method is used to obtain the product of the
+ * JSONStringer instance. It will return <code>null</code> if there was a
+ * problem in the construction of the JSON text (such as the calls to
+ * <code>array</code> were not properly balanced with calls to
+ * <code>endArray</code>).
+ *
+ * @return The JSON text.
+ */
+ public String toString()
+ {
+ return this.mode == 'd' ? this.writer.toString() : null;
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/json/JSONTokener.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/json/JSONTokener.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/json/JSONTokener.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -33,390 +33,454 @@
* A JSONTokener takes a source string and extracts characters and tokens from
* it. It is used by the JSONObject and JSONArray constructors to parse
* JSON source strings.
+ *
* @author JSON.org
* @version 2008-09-18
*/
-public class JSONTokener {
+public class JSONTokener
+{
- private int index;
- private Reader reader;
- private char lastChar;
- private boolean useLastChar;
+ private int index;
+ private Reader reader;
+ private char lastChar;
+ private boolean useLastChar;
- /**
- * Construct a JSONTokener from a string.
- *
- * @param reader A reader.
- */
- public JSONTokener(Reader reader) {
- this.reader = reader.markSupported() ?
- reader : new BufferedReader(reader);
- this.useLastChar = false;
- this.index = 0;
- }
+ /**
+ * Construct a JSONTokener from a string.
+ *
+ * @param reader A reader.
+ */
+ public JSONTokener(Reader reader)
+ {
+ this.reader = reader.markSupported() ?
+ reader : new BufferedReader(reader);
+ this.useLastChar = false;
+ this.index = 0;
+ }
- /**
- * Construct a JSONTokener from a string.
- *
- * @param s A source string.
- */
- public JSONTokener(String s) {
- this(new StringReader(s));
- }
+ /**
+ * Construct a JSONTokener from a string.
+ *
+ * @param s A source string.
+ */
+ public JSONTokener(String s)
+ {
+ this(new StringReader(s));
+ }
- /**
- * Back up one character. This provides a sort of lookahead capability,
- * so that you can test for a digit or letter before attempting to parse
- * the next number or identifier.
- */
- public void back() throws JSONException {
- if (useLastChar || index <= 0) {
- throw new JSONException("Stepping back two steps is not supported");
- }
- index -= 1;
- useLastChar = true;
+ /**
+ * Back up one character. This provides a sort of lookahead capability,
+ * so that you can test for a digit or letter before attempting to parse
+ * the next number or identifier.
+ */
+ public void back() throws JSONException
+ {
+ if (useLastChar || index <= 0)
+ {
+ throw new JSONException("Stepping back two steps is not supported");
}
+ index -= 1;
+ useLastChar = true;
+ }
-
- /**
- * Get the hex value of a character (base16).
- * @param c A character between '0' and '9' or between 'A' and 'F' or
- * between 'a' and 'f'.
- * @return An int between 0 and 15, or -1 if c was not a hex digit.
- */
- public static int dehexchar(char c) {
- if (c >= '0' && c <= '9') {
- return c - '0';
- }
- if (c >= 'A' && c <= 'F') {
- return c - ('A' - 10);
- }
- if (c >= 'a' && c <= 'f') {
- return c - ('a' - 10);
- }
- return -1;
+ /**
+ * Get the hex value of a character (base16).
+ *
+ * @param c A character between '0' and '9' or between 'A' and 'F' or
+ * between 'a' and 'f'.
+ * @return An int between 0 and 15, or -1 if c was not a hex digit.
+ */
+ public static int dehexchar(char c)
+ {
+ if (c >= '0' && c <= '9')
+ {
+ return c - '0';
}
+ if (c >= 'A' && c <= 'F')
+ {
+ return c - ('A' - 10);
+ }
+ if (c >= 'a' && c <= 'f')
+ {
+ return c - ('a' - 10);
+ }
+ return -1;
+ }
- /**
- * Determine if the source string still contains characters that next()
- * can consume.
- * @return true if not yet at the end of the source.
- */
- public boolean more() throws JSONException {
- char nextChar = next();
- if (nextChar == 0) {
- return false;
- }
- back();
- return true;
+ /**
+ * Determine if the source string still contains characters that next()
+ * can consume.
+ *
+ * @return true if not yet at the end of the source.
+ */
+ public boolean more() throws JSONException
+ {
+ char nextChar = next();
+ if (nextChar == 0)
+ {
+ return false;
}
+ back();
+ return true;
+ }
- /**
- * Get the next character in the source string.
- *
- * @return The next character, or 0 if past the end of the source string.
- */
- public char next() throws JSONException {
- if (this.useLastChar) {
- this.useLastChar = false;
- if (this.lastChar != 0) {
- this.index += 1;
- }
- return this.lastChar;
- }
- int c;
- try {
- c = this.reader.read();
- } catch (IOException exc) {
- throw new JSONException(exc);
- }
+ /**
+ * Get the next character in the source string.
+ *
+ * @return The next character, or 0 if past the end of the source string.
+ */
+ public char next() throws JSONException
+ {
+ if (this.useLastChar)
+ {
+ this.useLastChar = false;
+ if (this.lastChar != 0)
+ {
+ this.index += 1;
+ }
+ return this.lastChar;
+ }
+ int c;
+ try
+ {
+ c = this.reader.read();
+ }
+ catch (IOException exc)
+ {
+ throw new JSONException(exc);
+ }
- if (c <= 0) { // End of stream
- this.lastChar = 0;
- return 0;
- }
- this.index += 1;
- this.lastChar = (char) c;
- return this.lastChar;
+ if (c <= 0)
+ { // End of stream
+ this.lastChar = 0;
+ return 0;
}
+ this.index += 1;
+ this.lastChar = (char) c;
+ return this.lastChar;
+ }
- /**
- * Consume the next character, and check that it matches a specified
- * character.
- * @param c The character to match.
- * @return The character.
- * @throws JSONException if the character does not match.
- */
- public char next(char c) throws JSONException {
- char n = next();
- if (n != c) {
- throw syntaxError("Expected '" + c + "' and instead saw '" +
- n + "'");
- }
- return n;
+ /**
+ * Consume the next character, and check that it matches a specified
+ * character.
+ *
+ * @param c The character to match.
+ * @return The character.
+ * @throws JSONException if the character does not match.
+ */
+ public char next(char c) throws JSONException
+ {
+ char n = next();
+ if (n != c)
+ {
+ throw syntaxError("Expected '" + c + "' and instead saw '" +
+ n + "'");
}
+ return n;
+ }
- /**
- * Get the next n characters.
- *
- * @param n The number of characters to take.
- * @return A string of n characters.
- * @throws JSONException
- * Substring bounds error if there are not
- * n characters remaining in the source string.
- */
- public String next(int n) throws JSONException {
- if (n == 0) {
- return "";
- }
+ /**
+ * Get the next n characters.
+ *
+ * @param n The number of characters to take.
+ * @return A string of n characters.
+ * @throws JSONException Substring bounds error if there are not
+ * n characters remaining in the source string.
+ */
+ public String next(int n) throws JSONException
+ {
+ if (n == 0)
+ {
+ return "";
+ }
- char[] buffer = new char[n];
- int pos = 0;
+ char[] buffer = new char[n];
+ int pos = 0;
- if (this.useLastChar) {
- this.useLastChar = false;
- buffer[0] = this.lastChar;
- pos = 1;
- }
+ if (this.useLastChar)
+ {
+ this.useLastChar = false;
+ buffer[0] = this.lastChar;
+ pos = 1;
+ }
- try {
- int len;
- while ((pos < n) && ((len = reader.read(buffer, pos, n - pos)) != -1)) {
- pos += len;
- }
- } catch (IOException exc) {
- throw new JSONException(exc);
- }
- this.index += pos;
+ try
+ {
+ int len;
+ while ((pos < n) && ((len = reader.read(buffer, pos, n - pos)) != -1))
+ {
+ pos += len;
+ }
+ }
+ catch (IOException exc)
+ {
+ throw new JSONException(exc);
+ }
+ this.index += pos;
- if (pos < n) {
- throw syntaxError("Substring bounds error");
- }
+ if (pos < n)
+ {
+ throw syntaxError("Substring bounds error");
+ }
- this.lastChar = buffer[n - 1];
- return new String(buffer);
- }
+ this.lastChar = buffer[n - 1];
+ return new String(buffer);
+ }
- /**
- * Get the next char in the string, skipping whitespace.
- * @throws JSONException
- * @return A character, or 0 if there are no more characters.
- */
- public char nextClean() throws JSONException {
- for (;;) {
- char c = next();
- if (c == 0 || c > ' ') {
- return c;
- }
- }
+ /**
+ * Get the next char in the string, skipping whitespace.
+ *
+ * @return A character, or 0 if there are no more characters.
+ * @throws JSONException
+ */
+ public char nextClean() throws JSONException
+ {
+ for (; ;)
+ {
+ char c = next();
+ if (c == 0 || c > ' ')
+ {
+ return c;
+ }
}
+ }
- /**
- * Return the characters up to the next close quote character.
- * Backslash processing is done. The formal JSON format does not
- * allow strings in single quotes, but an implementation is allowed to
- * accept them.
- * @param quote The quoting character, either
- * <code>"</code> <small>(double quote)</small> or
- * <code>'</code> <small>(single quote)</small>.
- * @return A String.
- * @throws JSONException Unterminated string.
- */
- public String nextString(char quote) throws JSONException {
- char c;
- StringBuffer sb = new StringBuffer();
- for (;;) {
- c = next();
- switch (c) {
- case 0:
- case '\n':
- case '\r':
- throw syntaxError("Unterminated string");
- case '\\':
- c = next();
- switch (c) {
- case 'b':
- sb.append('\b');
- break;
- case 't':
- sb.append('\t');
- break;
- case 'n':
- sb.append('\n');
- break;
- case 'f':
- sb.append('\f');
- break;
- case 'r':
- sb.append('\r');
- break;
- case 'u':
- sb.append((char)Integer.parseInt(next(4), 16));
- break;
- case 'x' :
- sb.append((char) Integer.parseInt(next(2), 16));
- break;
- default:
- sb.append(c);
- }
- break;
+ /**
+ * Return the characters up to the next close quote character.
+ * Backslash processing is done. The formal JSON format does not
+ * allow strings in single quotes, but an implementation is allowed to
+ * accept them.
+ *
+ * @param quote The quoting character, either
+ * <code>"</code> <small>(double quote)</small> or
+ * <code>'</code> <small>(single quote)</small>.
+ * @return A String.
+ * @throws JSONException Unterminated string.
+ */
+ public String nextString(char quote) throws JSONException
+ {
+ char c;
+ StringBuffer sb = new StringBuffer();
+ for (; ;)
+ {
+ c = next();
+ switch (c)
+ {
+ case 0:
+ case'\n':
+ case'\r':
+ throw syntaxError("Unterminated string");
+ case'\\':
+ c = next();
+ switch (c)
+ {
+ case'b':
+ sb.append('\b');
+ break;
+ case't':
+ sb.append('\t');
+ break;
+ case'n':
+ sb.append('\n');
+ break;
+ case'f':
+ sb.append('\f');
+ break;
+ case'r':
+ sb.append('\r');
+ break;
+ case'u':
+ sb.append((char) Integer.parseInt(next(4), 16));
+ break;
+ case'x':
+ sb.append((char) Integer.parseInt(next(2), 16));
+ break;
default:
- if (c == quote) {
- return sb.toString();
- }
- sb.append(c);
- }
- }
+ sb.append(c);
+ }
+ break;
+ default:
+ if (c == quote)
+ {
+ return sb.toString();
+ }
+ sb.append(c);
+ }
}
+ }
- /**
- * Get the text up but not including the specified character or the
- * end of line, whichever comes first.
- * @param d A delimiter character.
- * @return A string.
- */
- public String nextTo(char d) throws JSONException {
- StringBuffer sb = new StringBuffer();
- for (;;) {
- char c = next();
- if (c == d || c == 0 || c == '\n' || c == '\r') {
- if (c != 0) {
- back();
- }
- return sb.toString().trim();
- }
- sb.append(c);
+ /**
+ * Get the text up but not including the specified character or the
+ * end of line, whichever comes first.
+ *
+ * @param d A delimiter character.
+ * @return A string.
+ */
+ public String nextTo(char d) throws JSONException
+ {
+ StringBuffer sb = new StringBuffer();
+ for (; ;)
+ {
+ char c = next();
+ if (c == d || c == 0 || c == '\n' || c == '\r')
+ {
+ if (c != 0)
+ {
+ back();
}
+ return sb.toString().trim();
+ }
+ sb.append(c);
}
+ }
- /**
- * Get the text up but not including one of the specified delimiter
- * characters or the end of line, whichever comes first.
- * @param delimiters A set of delimiter characters.
- * @return A string, trimmed.
- */
- public String nextTo(String delimiters) throws JSONException {
- char c;
- StringBuffer sb = new StringBuffer();
- for (;;) {
- c = next();
- if (delimiters.indexOf(c) >= 0 || c == 0 ||
- c == '\n' || c == '\r') {
- if (c != 0) {
- back();
- }
- return sb.toString().trim();
- }
- sb.append(c);
+ /**
+ * Get the text up but not including one of the specified delimiter
+ * characters or the end of line, whichever comes first.
+ *
+ * @param delimiters A set of delimiter characters.
+ * @return A string, trimmed.
+ */
+ public String nextTo(String delimiters) throws JSONException
+ {
+ char c;
+ StringBuffer sb = new StringBuffer();
+ for (; ;)
+ {
+ c = next();
+ if (delimiters.indexOf(c) >= 0 || c == 0 ||
+ c == '\n' || c == '\r')
+ {
+ if (c != 0)
+ {
+ back();
}
+ return sb.toString().trim();
+ }
+ sb.append(c);
}
+ }
- /**
- * Get the next value. The value can be a Boolean, Double, Integer,
- * JSONArray, JSONObject, Long, or String, or the JSONObject.NULL object.
- * @throws JSONException If syntax error.
- *
- * @return An object.
- */
- public Object nextValue() throws JSONException {
- char c = nextClean();
- String s;
+ /**
+ * Get the next value. The value can be a Boolean, Double, Integer,
+ * JSONArray, JSONObject, Long, or String, or the JSONObject.NULL object.
+ *
+ * @return An object.
+ * @throws JSONException If syntax error.
+ */
+ public Object nextValue() throws JSONException
+ {
+ char c = nextClean();
+ String s;
- switch (c) {
- case '"':
- case '\'':
- return nextString(c);
- case '{':
- back();
- return new JSONObject(this);
- case '[':
- case '(':
- back();
- return new JSONArray(this);
- }
+ switch (c)
+ {
+ case'"':
+ case'\'':
+ return nextString(c);
+ case'{':
+ back();
+ return new JSONObject(this);
+ case'[':
+ case'(':
+ back();
+ return new JSONArray(this);
+ }
- /*
- * Handle unquoted text. This could be the values true, false, or
- * null, or it can be a number. An implementation (such as this one)
- * is allowed to also accept non-standard forms.
- *
- * Accumulate characters until we reach the end of the text or a
- * formatting character.
- */
+ /*
+ * Handle unquoted text. This could be the values true, false, or
+ * null, or it can be a number. An implementation (such as this one)
+ * is allowed to also accept non-standard forms.
+ *
+ * Accumulate characters until we reach the end of the text or a
+ * formatting character.
+ */
- StringBuffer sb = new StringBuffer();
- while (c >= ' ' && ",:]}/\\\"[{;=#".indexOf(c) < 0) {
- sb.append(c);
- c = next();
- }
- back();
+ StringBuffer sb = new StringBuffer();
+ while (c >= ' ' && ",:]}/\\\"[{;=#".indexOf(c) < 0)
+ {
+ sb.append(c);
+ c = next();
+ }
+ back();
- s = sb.toString().trim();
- if (s.equals("")) {
- throw syntaxError("Missing value");
- }
- return JSONObject.stringToValue(s);
+ s = sb.toString().trim();
+ if (s.equals(""))
+ {
+ throw syntaxError("Missing value");
}
+ return JSONObject.stringToValue(s);
+ }
- /**
- * Skip characters until the next character is the requested character.
- * If the requested character is not found, no characters are skipped.
- * @param to A character to skip to.
- * @return The requested character, or zero if the requested character
- * is not found.
- */
- public char skipTo(char to) throws JSONException {
- char c;
- try {
- int startIndex = this.index;
- reader.mark(Integer.MAX_VALUE);
- do {
- c = next();
- if (c == 0) {
- reader.reset();
- this.index = startIndex;
- return c;
- }
- } while (c != to);
- } catch (IOException exc) {
- throw new JSONException(exc);
+ /**
+ * Skip characters until the next character is the requested character.
+ * If the requested character is not found, no characters are skipped.
+ *
+ * @param to A character to skip to.
+ * @return The requested character, or zero if the requested character
+ * is not found.
+ */
+ public char skipTo(char to) throws JSONException
+ {
+ char c;
+ try
+ {
+ int startIndex = this.index;
+ reader.mark(Integer.MAX_VALUE);
+ do
+ {
+ c = next();
+ if (c == 0)
+ {
+ reader.reset();
+ this.index = startIndex;
+ return c;
}
-
- back();
- return c;
+ }
+ while (c != to);
}
-
- /**
- * Make a JSONException to signal a syntax error.
- *
- * @param message The error message.
- * @return A JSONException object, suitable for throwing
- */
- public JSONException syntaxError(String message) {
- return new JSONException(message + toString());
+ catch (IOException exc)
+ {
+ throw new JSONException(exc);
}
+ back();
+ return c;
+ }
- /**
- * Make a printable string of this JSONTokener.
- *
- * @return " at character [this.index]"
- */
- public String toString() {
- return " at character " + index;
- }
+ /**
+ * Make a JSONException to signal a syntax error.
+ *
+ * @param message The error message.
+ * @return A JSONException object, suitable for throwing
+ */
+ public JSONException syntaxError(String message)
+ {
+ return new JSONException(message + toString());
+ }
+
+
+ /**
+ * Make a printable string of this JSONTokener.
+ *
+ * @return " at character [this.index]"
+ */
+ public String toString()
+ {
+ return " at character " + index;
+ }
}
\ No newline at end of file
Modified: projects/gwt-console/trunk/war/src/main/java/org/json/JSONWriter.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/json/JSONWriter.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/json/JSONWriter.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -32,7 +32,7 @@
* The texts produced strictly conform to JSON syntax rules. No whitespace is
* added, so the results are ready for transmission or storage. Each instance of
* JSONWriter can produce one JSON text.
- * <p>
+ * <p/>
* A JSONWriter instance provides a <code>value</code> method for appending
* values to the
* text, and a <code>key</code>
@@ -47,277 +47,329 @@
* .value("Hello, World!")
* .endObject();</pre> which writes <pre>
* {"JSON":"Hello, World!"}</pre>
- * <p>
+ * <p/>
* The first method called must be <code>array</code> or <code>object</code>.
* There are no methods for adding commas or colons. JSONWriter adds them for
* you. Objects and arrays can be nested up to 20 levels deep.
- * <p>
+ * <p/>
* This can sometimes be easier than using a JSONObject to build a string.
+ *
* @author JSON.org
* @version 2008-09-18
*/
-public class JSONWriter {
- private static final int maxdepth = 20;
+public class JSONWriter
+{
+ private static final int maxdepth = 20;
- /**
- * The comma flag determines if a comma should be output before the next
- * value.
- */
- private boolean comma;
+ /**
+ * The comma flag determines if a comma should be output before the next
+ * value.
+ */
+ private boolean comma;
- /**
- * The current mode. Values:
- * 'a' (array),
- * 'd' (done),
- * 'i' (initial),
- * 'k' (key),
- * 'o' (object).
- */
- protected char mode;
+ /**
+ * The current mode. Values:
+ * 'a' (array),
+ * 'd' (done),
+ * 'i' (initial),
+ * 'k' (key),
+ * 'o' (object).
+ */
+ protected char mode;
- /**
- * The object/array stack.
- */
- private JSONObject stack[];
+ /**
+ * The object/array stack.
+ */
+ private JSONObject stack[];
- /**
- * The stack top index. A value of 0 indicates that the stack is empty.
- */
- private int top;
+ /**
+ * The stack top index. A value of 0 indicates that the stack is empty.
+ */
+ private int top;
- /**
- * The writer that will receive the output.
- */
- protected Writer writer;
+ /**
+ * The writer that will receive the output.
+ */
+ protected Writer writer;
- /**
- * Make a fresh JSONWriter. It can be used to build one JSON text.
- */
- public JSONWriter(Writer w) {
- this.comma = false;
- this.mode = 'i';
- this.stack = new JSONObject[maxdepth];
- this.top = 0;
- this.writer = w;
- }
+ /**
+ * Make a fresh JSONWriter. It can be used to build one JSON text.
+ */
+ public JSONWriter(Writer w)
+ {
+ this.comma = false;
+ this.mode = 'i';
+ this.stack = new JSONObject[maxdepth];
+ this.top = 0;
+ this.writer = w;
+ }
- /**
- * Append a value.
- * @param s A string value.
- * @return this
- * @throws JSONException If the value is out of sequence.
- */
- private JSONWriter append(String s) throws JSONException {
- if (s == null) {
- throw new JSONException("Null pointer");
- }
- if (this.mode == 'o' || this.mode == 'a') {
- try {
- if (this.comma && this.mode == 'a') {
- this.writer.write(',');
- }
- this.writer.write(s);
- } catch (IOException e) {
- throw new JSONException(e);
- }
- if (this.mode == 'o') {
- this.mode = 'k';
- }
- this.comma = true;
- return this;
- }
- throw new JSONException("Value out of sequence.");
+ /**
+ * Append a value.
+ *
+ * @param s A string value.
+ * @return this
+ * @throws JSONException If the value is out of sequence.
+ */
+ private JSONWriter append(String s) throws JSONException
+ {
+ if (s == null)
+ {
+ throw new JSONException("Null pointer");
}
-
- /**
- * Begin appending a new array. All values until the balancing
- * <code>endArray</code> will be appended to this array. The
- * <code>endArray</code> method must be called to mark the array's end.
- * @return this
- * @throws JSONException If the nesting is too deep, or if the object is
- * started in the wrong place (for example as a key or after the end of the
- * outermost array or object).
- */
- public JSONWriter array() throws JSONException {
- if (this.mode == 'i' || this.mode == 'o' || this.mode == 'a') {
- this.push(null);
- this.append("[");
- this.comma = false;
- return this;
+ if (this.mode == 'o' || this.mode == 'a')
+ {
+ try
+ {
+ if (this.comma && this.mode == 'a')
+ {
+ this.writer.write(',');
}
- throw new JSONException("Misplaced array.");
+ this.writer.write(s);
+ }
+ catch (IOException e)
+ {
+ throw new JSONException(e);
+ }
+ if (this.mode == 'o')
+ {
+ this.mode = 'k';
+ }
+ this.comma = true;
+ return this;
}
+ throw new JSONException("Value out of sequence.");
+ }
- /**
- * End something.
- * @param m Mode
- * @param c Closing character
- * @return this
- * @throws JSONException If unbalanced.
- */
- private JSONWriter end(char m, char c) throws JSONException {
- if (this.mode != m) {
- throw new JSONException(m == 'o' ? "Misplaced endObject." :
- "Misplaced endArray.");
- }
- this.pop(m);
- try {
- this.writer.write(c);
- } catch (IOException e) {
- throw new JSONException(e);
- }
- this.comma = true;
- return this;
+ /**
+ * Begin appending a new array. All values until the balancing
+ * <code>endArray</code> will be appended to this array. The
+ * <code>endArray</code> method must be called to mark the array's end.
+ *
+ * @return this
+ * @throws JSONException If the nesting is too deep, or if the object is
+ * started in the wrong place (for example as a key or after the end of the
+ * outermost array or object).
+ */
+ public JSONWriter array() throws JSONException
+ {
+ if (this.mode == 'i' || this.mode == 'o' || this.mode == 'a')
+ {
+ this.push(null);
+ this.append("[");
+ this.comma = false;
+ return this;
}
+ throw new JSONException("Misplaced array.");
+ }
- /**
- * End an array. This method most be called to balance calls to
- * <code>array</code>.
- * @return this
- * @throws JSONException If incorrectly nested.
- */
- public JSONWriter endArray() throws JSONException {
- return this.end('a', ']');
+ /**
+ * End something.
+ *
+ * @param m Mode
+ * @param c Closing character
+ * @return this
+ * @throws JSONException If unbalanced.
+ */
+ private JSONWriter end(char m, char c) throws JSONException
+ {
+ if (this.mode != m)
+ {
+ throw new JSONException(m == 'o' ? "Misplaced endObject." :
+ "Misplaced endArray.");
}
-
- /**
- * End an object. This method most be called to balance calls to
- * <code>object</code>.
- * @return this
- * @throws JSONException If incorrectly nested.
- */
- public JSONWriter endObject() throws JSONException {
- return this.end('k', '}');
+ this.pop(m);
+ try
+ {
+ this.writer.write(c);
}
-
- /**
- * Append a key. The key will be associated with the next value. In an
- * object, every value must be preceded by a key.
- * @param s A key string.
- * @return this
- * @throws JSONException If the key is out of place. For example, keys
- * do not belong in arrays or if the key is null.
- */
- public JSONWriter key(String s) throws JSONException {
- if (s == null) {
- throw new JSONException("Null key.");
- }
- if (this.mode == 'k') {
- try {
- if (this.comma) {
- this.writer.write(',');
- }
- stack[top - 1].putOnce(s, Boolean.TRUE);
- this.writer.write(JSONObject.quote(s));
- this.writer.write(':');
- this.comma = false;
- this.mode = 'o';
- return this;
- } catch (IOException e) {
- throw new JSONException(e);
- }
- }
- throw new JSONException("Misplaced key.");
+ catch (IOException e)
+ {
+ throw new JSONException(e);
}
+ this.comma = true;
+ return this;
+ }
+ /**
+ * End an array. This method most be called to balance calls to
+ * <code>array</code>.
+ *
+ * @return this
+ * @throws JSONException If incorrectly nested.
+ */
+ public JSONWriter endArray() throws JSONException
+ {
+ return this.end('a', ']');
+ }
- /**
- * Begin appending a new object. All keys and values until the balancing
- * <code>endObject</code> will be appended to this object. The
- * <code>endObject</code> method must be called to mark the object's end.
- * @return this
- * @throws JSONException If the nesting is too deep, or if the object is
- * started in the wrong place (for example as a key or after the end of the
- * outermost array or object).
- */
- public JSONWriter object() throws JSONException {
- if (this.mode == 'i') {
- this.mode = 'o';
- }
- if (this.mode == 'o' || this.mode == 'a') {
- this.append("{");
- this.push(new JSONObject());
- this.comma = false;
- return this;
- }
- throw new JSONException("Misplaced object.");
+ /**
+ * End an object. This method most be called to balance calls to
+ * <code>object</code>.
+ *
+ * @return this
+ * @throws JSONException If incorrectly nested.
+ */
+ public JSONWriter endObject() throws JSONException
+ {
+ return this.end('k', '}');
+ }
+ /**
+ * Append a key. The key will be associated with the next value. In an
+ * object, every value must be preceded by a key.
+ *
+ * @param s A key string.
+ * @return this
+ * @throws JSONException If the key is out of place. For example, keys
+ * do not belong in arrays or if the key is null.
+ */
+ public JSONWriter key(String s) throws JSONException
+ {
+ if (s == null)
+ {
+ throw new JSONException("Null key.");
}
-
-
- /**
- * Pop an array or object scope.
- * @param c The scope to close.
- * @throws JSONException If nesting is wrong.
- */
- private void pop(char c) throws JSONException {
- if (this.top <= 0) {
- throw new JSONException("Nesting error.");
+ if (this.mode == 'k')
+ {
+ try
+ {
+ if (this.comma)
+ {
+ this.writer.write(',');
}
- char m = this.stack[this.top - 1] == null ? 'a' : 'k';
- if (m != c) {
- throw new JSONException("Nesting error.");
- }
- this.top -= 1;
- this.mode = this.top == 0 ? 'd' : this.stack[this.top - 1] == null ? 'a' : 'k';
+ stack[top - 1].putOnce(s, Boolean.TRUE);
+ this.writer.write(JSONObject.quote(s));
+ this.writer.write(':');
+ this.comma = false;
+ this.mode = 'o';
+ return this;
+ }
+ catch (IOException e)
+ {
+ throw new JSONException(e);
+ }
}
+ throw new JSONException("Misplaced key.");
+ }
- /**
- * Push an array or object scope.
- * @param c The scope to open.
- * @throws JSONException If nesting is too deep.
- */
- private void push(JSONObject jo) throws JSONException {
- if (this.top >= maxdepth) {
- throw new JSONException("Nesting too deep.");
- }
- this.stack[this.top] = jo;
- this.mode = jo == null ? 'a' : 'k';
- this.top += 1;
+
+ /**
+ * Begin appending a new object. All keys and values until the balancing
+ * <code>endObject</code> will be appended to this object. The
+ * <code>endObject</code> method must be called to mark the object's end.
+ *
+ * @return this
+ * @throws JSONException If the nesting is too deep, or if the object is
+ * started in the wrong place (for example as a key or after the end of the
+ * outermost array or object).
+ */
+ public JSONWriter object() throws JSONException
+ {
+ if (this.mode == 'i')
+ {
+ this.mode = 'o';
}
+ if (this.mode == 'o' || this.mode == 'a')
+ {
+ this.append("{");
+ this.push(new JSONObject());
+ this.comma = false;
+ return this;
+ }
+ throw new JSONException("Misplaced object.");
+ }
- /**
- * Append either the value <code>true</code> or the value
- * <code>false</code>.
- * @param b A boolean.
- * @return this
- * @throws JSONException
- */
- public JSONWriter value(boolean b) throws JSONException {
- return this.append(b ? "true" : "false");
- }
- /**
- * Append a double value.
- * @param d A double.
- * @return this
- * @throws JSONException If the number is not finite.
- */
- public JSONWriter value(double d) throws JSONException {
- return this.value(new Double(d));
+ /**
+ * Pop an array or object scope.
+ *
+ * @param c The scope to close.
+ * @throws JSONException If nesting is wrong.
+ */
+ private void pop(char c) throws JSONException
+ {
+ if (this.top <= 0)
+ {
+ throw new JSONException("Nesting error.");
}
+ char m = this.stack[this.top - 1] == null ? 'a' : 'k';
+ if (m != c)
+ {
+ throw new JSONException("Nesting error.");
+ }
+ this.top -= 1;
+ this.mode = this.top == 0 ? 'd' : this.stack[this.top - 1] == null ? 'a' : 'k';
+ }
- /**
- * Append a long value.
- * @param l A long.
- * @return this
- * @throws JSONException
- */
- public JSONWriter value(long l) throws JSONException {
- return this.append(Long.toString(l));
+ /**
+ * Push an array or object scope.
+ *
+ * @param c The scope to open.
+ * @throws JSONException If nesting is too deep.
+ */
+ private void push(JSONObject jo) throws JSONException
+ {
+ if (this.top >= maxdepth)
+ {
+ throw new JSONException("Nesting too deep.");
}
+ this.stack[this.top] = jo;
+ this.mode = jo == null ? 'a' : 'k';
+ this.top += 1;
+ }
- /**
- * Append an object value.
- * @param o The object to append. It can be null, or a Boolean, Number,
- * String, JSONObject, or JSONArray, or an object with a toJSONString()
- * method.
- * @return this
- * @throws JSONException If the value is out of sequence.
- */
- public JSONWriter value(Object o) throws JSONException {
- return this.append(JSONObject.valueToString(o));
- }
+ /**
+ * Append either the value <code>true</code> or the value
+ * <code>false</code>.
+ *
+ * @param b A boolean.
+ * @return this
+ * @throws JSONException
+ */
+ public JSONWriter value(boolean b) throws JSONException
+ {
+ return this.append(b ? "true" : "false");
+ }
+
+ /**
+ * Append a double value.
+ *
+ * @param d A double.
+ * @return this
+ * @throws JSONException If the number is not finite.
+ */
+ public JSONWriter value(double d) throws JSONException
+ {
+ return this.value(new Double(d));
+ }
+
+ /**
+ * Append a long value.
+ *
+ * @param l A long.
+ * @return this
+ * @throws JSONException
+ */
+ public JSONWriter value(long l) throws JSONException
+ {
+ return this.append(Long.toString(l));
+ }
+
+
+ /**
+ * Append an object value.
+ *
+ * @param o The object to append. It can be null, or a Boolean, Number,
+ * String, JSONObject, or JSONArray, or an object with a toJSONString()
+ * method.
+ * @return this
+ * @throws JSONException If the value is out of sequence.
+ */
+ public JSONWriter value(Object o) throws JSONException
+ {
+ return this.append(JSONObject.valueToString(o));
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/json/Test.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/json/Test.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/json/Test.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -9,611 +9,677 @@
* Test class. This file is not formally a member of the org.json library.
* It is just a casual test tool.
*/
-public class Test {
+public class Test
+{
- /**
- * Entry point.
- * @param args
- */
- public static void main(String args[]) {
- Iterator it;
- JSONArray a;
- JSONObject j;
- JSONStringer jj;
- String s;
-
-/**
+ /**
+ * Entry point.
+ *
+ * @param args
+ */
+ public static void main(String args[])
+ {
+ Iterator it;
+ JSONArray a;
+ JSONObject j;
+ JSONStringer jj;
+ String s;
+
+/**
* Obj is a typical class that implements JSONString. It also
* provides some beanie methods that can be used to
* construct a JSONObject. It also demonstrates constructing
* a JSONObject with an array of names.
*/
- class Obj implements JSONString {
- public String aString;
- public double aNumber;
- public boolean aBoolean;
-
- public Obj(String string, double n, boolean b) {
- this.aString = string;
- this.aNumber = n;
- this.aBoolean = b;
- }
-
- public double getNumber() {
- return this.aNumber;
- }
-
- public String getString() {
- return this.aString;
- }
-
- public boolean isBoolean() {
- return this.aBoolean;
- }
-
- public String getBENT() {
- return "All uppercase key";
- }
-
- public String getX() {
- return "x";
- }
-
- public String toJSONString() {
- return "{" + JSONObject.quote(this.aString) + ":" +
- JSONObject.doubleToString(this.aNumber) + "}";
- }
- public String toString() {
- return this.getString() + " " + this.getNumber() + " " +
- this.isBoolean() + "." + this.getBENT() + " " + this.getX();
- }
- }
-
- Obj obj = new Obj("A beany object", 42, true);
-
- try {
- j = XML.toJSONObject("<![CDATA[This is a collection of test patterns and examples for org.json.]]> Ignore the stuff past the end. ");
- System.out.println(j.toString());
+ class Obj implements JSONString
+ {
+ public String aString;
+ public double aNumber;
+ public boolean aBoolean;
- s = "<recipe name=\"bread\" prep_time=\"5 mins\" cook_time=\"3 hours\"> <title>Basic bread</title> <ingredient amount=\"8\" unit=\"dL\">Flour</ingredient> <ingredient amount=\"10\" unit=\"grams\">Yeast</ingredient> <ingredient amount=\"4\" unit=\"dL\" state=\"warm\">Water</ingredient> <ingredient amount=\"1\" unit=\"teaspoon\">Salt</ingredient> <instructions> <step>Mix all ingredients together.</step> <step>Knead thoroughly.</step> <step>Cover with a cloth, and leave for one hour in warm room.</step> <step>Knead again.</step> <step>Place in a bread baking tin.</step> <step>Cover with a cloth, and leave for one hour in warm room.</step> <step>Bake in the oven at 180(degrees)C for 30 minutes.</step> </instructions> </recipe> ";
- j = XML.toJSONObject(s);
- System.out.println(j.toString(4));
- System.out.println();
-
- j = JSONML.toJSONObject(s);
- System.out.println(j.toString());
- System.out.println(JSONML.toString(j));
- System.out.println();
-
- a = JSONML.toJSONArray(s);
- System.out.println(a.toString(4));
- System.out.println(JSONML.toString(a));
- System.out.println();
-
- s = "<div id=\"demo\" class=\"JSONML\"><p>JSONML is a transformation between <b>JSON</b> and <b>XML</b> that preserves ordering of document features.</p><p>JSONML can work with JSON arrays or JSON objects.</p><p>Three<br/>little<br/>words</p></div>";
- j = JSONML.toJSONObject(s);
- System.out.println(j.toString(4));
- System.out.println(JSONML.toString(j));
- System.out.println();
-
- a = JSONML.toJSONArray(s);
- System.out.println(a.toString(4));
- System.out.println(JSONML.toString(a));
- System.out.println();
-
- s = "<person created=\"2006-11-11T19:23\" modified=\"2006-12-31T23:59\">\n <firstName>Robert</firstName>\n <lastName>Smith</lastName>\n <address type=\"home\">\n <street>12345 Sixth Ave</street>\n <city>Anytown</city>\n <state>CA</state>\n <postalCode>98765-4321</postalCode>\n </address>\n </person>";
- j = XML.toJSONObject(s);
- System.out.println(j.toString(4));
-
- j = new JSONObject(obj);
- System.out.println(j.toString());
-
- s = "{ \"entity\": { \"imageURL\": \"\", \"name\": \"IXXXXXXXXXXXXX\", \"id\": 12336, \"ratingCount\": null, \"averageRating\": null } }";
- j = new JSONObject(s);
- System.out.println(j.toString(2));
+ public Obj(String string, double n, boolean b)
+ {
+ this.aString = string;
+ this.aNumber = n;
+ this.aBoolean = b;
+ }
- jj = new JSONStringer();
- s = jj
- .object()
- .key("single")
- .value("MARIE HAA'S")
- .key("Johnny")
- .value("MARIE HAA\\'S")
- .key("foo")
- .value("bar")
- .key("baz")
- .array()
- .object()
- .key("quux")
- .value("Thanks, Josh!")
- .endObject()
- .endArray()
- .key("obj keys")
- .value(JSONObject.getNames(obj))
- .endObject()
- .toString();
- System.out.println(s);
+ public double getNumber()
+ {
+ return this.aNumber;
+ }
- System.out.println(new JSONStringer()
- .object()
- .key("a")
- .array()
- .array()
- .array()
- .value("b")
- .endArray()
- .endArray()
- .endArray()
- .endObject()
- .toString());
+ public String getString()
+ {
+ return this.aString;
+ }
- jj = new JSONStringer();
- jj.array();
- jj.value(1);
- jj.array();
- jj.value(null);
- jj.array();
- jj.object();
- jj.key("empty-array").array().endArray();
- jj.key("answer").value(42);
- jj.key("null").value(null);
- jj.key("false").value(false);
- jj.key("true").value(true);
- jj.key("big").value(123456789e+88);
- jj.key("small").value(123456789e-88);
- jj.key("empty-object").object().endObject();
- jj.key("long");
- jj.value(9223372036854775807L);
- jj.endObject();
- jj.value("two");
- jj.endArray();
- jj.value(true);
- jj.endArray();
- jj.value(98.6);
- jj.value(-100.0);
- jj.object();
- jj.endObject();
- jj.object();
- jj.key("one");
- jj.value(1.00);
- jj.endObject();
- jj.value(obj);
- jj.endArray();
- System.out.println(jj.toString());
+ public boolean isBoolean()
+ {
+ return this.aBoolean;
+ }
- System.out.println(new JSONArray(jj.toString()).toString(4));
+ public String getBENT()
+ {
+ return "All uppercase key";
+ }
- int ar[] = {1, 2, 3};
- JSONArray ja = new JSONArray(ar);
- System.out.println(ja.toString());
-
- String sa[] = {"aString", "aNumber", "aBoolean"};
- j = new JSONObject(obj, sa);
- j.put("Testing JSONString interface", obj);
- System.out.println(j.toString(4));
-
- j = new JSONObject("{slashes: '///', closetag: '</script>', backslash:'\\\\', ei: {quotes: '\"\\''},eo: {a: '\"quoted\"', b:\"don't\"}, quotes: [\"'\", '\"']}");
- System.out.println(j.toString(2));
- System.out.println(XML.toString(j));
- System.out.println("");
+ public String getX()
+ {
+ return "x";
+ }
- j = new JSONObject(
- "{foo: [true, false,9876543210, 0.0, 1.00000001, 1.000000000001, 1.00000000000000001," +
- " .00000000000000001, 2.00, 0.1, 2e100, -32,[],{}, \"string\"], " +
- " to : null, op : 'Good'," +
- "ten:10} postfix comment");
- j.put("String", "98.6");
- j.put("JSONObject", new JSONObject());
- j.put("JSONArray", new JSONArray());
- j.put("int", 57);
- j.put("double", 123456789012345678901234567890.);
- j.put("true", true);
- j.put("false", false);
- j.put("null", JSONObject.NULL);
- j.put("bool", "true");
- j.put("zero", -0.0);
- j.put("\\u2028", "\u2028");
- j.put("\\u2029", "\u2029");
- a = j.getJSONArray("foo");
- a.put(666);
- a.put(2001.99);
- a.put("so \"fine\".");
- a.put("so <fine>.");
- a.put(true);
- a.put(false);
- a.put(new JSONArray());
- a.put(new JSONObject());
- j.put("keys", JSONObject.getNames(j));
- System.out.println(j.toString(4));
- System.out.println(XML.toString(j));
+ public String toJSONString()
+ {
+ return "{" + JSONObject.quote(this.aString) + ":" +
+ JSONObject.doubleToString(this.aNumber) + "}";
+ }
- System.out.println("String: " + j.getDouble("String"));
- System.out.println(" bool: " + j.getBoolean("bool"));
- System.out.println(" to: " + j.getString("to"));
- System.out.println(" true: " + j.getString("true"));
- System.out.println(" foo: " + j.getJSONArray("foo"));
- System.out.println(" op: " + j.getString("op"));
- System.out.println(" ten: " + j.getInt("ten"));
- System.out.println(" oops: " + j.optBoolean("oops"));
+ public String toString()
+ {
+ return this.getString() + " " + this.getNumber() + " " +
+ this.isBoolean() + "." + this.getBENT() + " " + this.getX();
+ }
+ }
- s = "<xml one = 1 two=' \"2\" '><five></five>First \u0009<content><five></five> This is \"content\". <three> 3 </three>JSON does not preserve the sequencing of elements and contents.<three> III </three> <three> T H R E E</three><four/>Content text is an implied structure in XML. <six content=\"6\"/>JSON does not have implied structure:<seven>7</seven>everything is explicit.<![CDATA[CDATA blocks<are><supported>!]]></xml>";
- j = XML.toJSONObject(s);
- System.out.println(j.toString(2));
- System.out.println(XML.toString(j));
- System.out.println("");
-
- ja = JSONML.toJSONArray(s);
- System.out.println(ja.toString(4));
- System.out.println(JSONML.toString(ja));
- System.out.println("");
-
- s = "<xml do='0'>uno<a re='1' mi='2'>dos<b fa='3'/>tres<c>true</c>quatro</a>cinqo<d>seis<e/></d></xml>";
- ja = JSONML.toJSONArray(s);
- System.out.println(ja.toString(4));
- System.out.println(JSONML.toString(ja));
- System.out.println("");
+ Obj obj = new Obj("A beany object", 42, true);
- s = "<mapping><empty/> <class name = \"Customer\"> <field name = \"ID\" type = \"string\"> <bind-xml name=\"ID\" node=\"attribute\"/> </field> <field name = \"FirstName\" type = \"FirstName\"/> <field name = \"MI\" type = \"MI\"/> <field name = \"LastName\" type = \"LastName\"/> </class> <class name = \"FirstName\"> <field name = \"text\"> <bind-xml name = \"text\" node = \"text\"/> </field> </class> <class name = \"MI\"> <field name = \"text\"> <bind-xml name = \"text\" node = \"text\"/> </field> </class> <class name = \"LastName\"> <field name = \"text\"> <bind-xml name = \"text\" node = \"text\"/> </field> </class></mapping>";
- j = XML.toJSONObject(s);
+ try
+ {
+ j = XML.toJSONObject("<![CDATA[This is a collection of test patterns and examples for org.json.]]> Ignore the stuff past the end. ");
+ System.out.println(j.toString());
- System.out.println(j.toString(2));
- System.out.println(XML.toString(j));
- System.out.println("");
- ja = JSONML.toJSONArray(s);
- System.out.println(ja.toString(4));
- System.out.println(JSONML.toString(ja));
- System.out.println("");
+ s = "<recipe name=\"bread\" prep_time=\"5 mins\" cook_time=\"3 hours\"> <title>Basic bread</title> <ingredient amount=\"8\" unit=\"dL\">Flour</ingredient> <ingredient amount=\"10\" unit=\"grams\">Yeast</ingredient> <ingredient amount=\"4\" unit=\"dL\" state=\"warm\">Water</ingredient> <ingredient amount=\"1\" unit=\"teaspoon\">Salt</ingredient> <instructions> <step>Mix all ingredients together.</step> <step>Knead thoroughly.</step> <step>Cover with a cloth, and leave for one hour in warm room.</step> <step>Knead again.</step> <step>Place in a bread baking tin.</step> <step>Cover with a cloth, and leave for one hour in warm room.</step> <step>Bake in the oven at 180(degrees)C for 30 minutes.</step> </instructions> </recipe> ";
+ j = XML.toJSONObject(s);
+ System.out.println(j.toString(4));
+ System.out.println();
- j = XML.toJSONObject("<?xml version=\"1.0\" ?><Book Author=\"Anonymous\"><Title>Sample Book</Title><Chapter id=\"1\">This is chapter 1. It is not very long or interesting.</Chapter><Chapter id=\"2\">This is chapter 2. Although it is longer than chapter 1, it is not any more interesting.</Chapter></Book>");
- System.out.println(j.toString(2));
- System.out.println(XML.toString(j));
- System.out.println("");
+ j = JSONML.toJSONObject(s);
+ System.out.println(j.toString());
+ System.out.println(JSONML.toString(j));
+ System.out.println();
- j = XML.toJSONObject("<!DOCTYPE bCard 'http://www.cs.caltech.edu/~adam/schemas/bCard'><bCard><?xml default bCard firstname = '' lastname = '' company = '' email = '' homepage = ''?><bCard firstname = 'Rohit' lastname = 'Khare' company = 'MCI' email = 'khare at mci.net' homepage = 'http://pest.w3.org/'/><bCard firstname = 'Adam' lastname = 'Rifkin' company = 'Caltech Infospheres Project' email = 'adam at cs.caltech.edu' homepage = 'http://www.cs.caltech.edu/~adam/'/></bCard>");
- System.out.println(j.toString(2));
- System.out.println(XML.toString(j));
- System.out.println("");
+ a = JSONML.toJSONArray(s);
+ System.out.println(a.toString(4));
+ System.out.println(JSONML.toString(a));
+ System.out.println();
- j = XML.toJSONObject("<?xml version=\"1.0\"?><customer> <firstName> <text>Fred</text> </firstName> <ID>fbs0001</ID> <lastName> <text>Scerbo</text> </lastName> <MI> <text>B</text> </MI></customer>");
- System.out.println(j.toString(2));
- System.out.println(XML.toString(j));
- System.out.println("");
+ s = "<div id=\"demo\" class=\"JSONML\"><p>JSONML is a transformation between <b>JSON</b> and <b>XML</b> that preserves ordering of document features.</p><p>JSONML can work with JSON arrays or JSON objects.</p><p>Three<br/>little<br/>words</p></div>";
+ j = JSONML.toJSONObject(s);
+ System.out.println(j.toString(4));
+ System.out.println(JSONML.toString(j));
+ System.out.println();
- j = XML.toJSONObject("<!ENTITY tp-address PUBLIC '-//ABC University::Special Collections Library//TEXT (titlepage: name and address)//EN' 'tpspcoll.sgm'><list type='simple'><head>Repository Address </head><item>Special Collections Library</item><item>ABC University</item><item>Main Library, 40 Circle Drive</item><item>Ourtown, Pennsylvania</item><item>17654 USA</item></list>");
- System.out.println(j.toString());
- System.out.println(XML.toString(j));
- System.out.println("");
+ a = JSONML.toJSONArray(s);
+ System.out.println(a.toString(4));
+ System.out.println(JSONML.toString(a));
+ System.out.println();
- j = XML.toJSONObject("<test intertag status=ok><empty/>deluxe<blip sweet=true>&"toot"&toot;A</blip><x>eks</x><w>bonus</w><w>bonus2</w></test>");
- System.out.println(j.toString(2));
- System.out.println(XML.toString(j));
- System.out.println("");
+ s = "<person created=\"2006-11-11T19:23\" modified=\"2006-12-31T23:59\">\n <firstName>Robert</firstName>\n <lastName>Smith</lastName>\n <address type=\"home\">\n <street>12345 Sixth Ave</street>\n <city>Anytown</city>\n <state>CA</state>\n <postalCode>98765-4321</postalCode>\n </address>\n </person>";
+ j = XML.toJSONObject(s);
+ System.out.println(j.toString(4));
- j = HTTP.toJSONObject("GET / HTTP/1.0\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*\nAccept-Language: en-us\nUser-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90; T312461; Q312461)\nHost: www.nokko.com\nConnection: keep-alive\nAccept-encoding: gzip, deflate\n");
- System.out.println(j.toString(2));
- System.out.println(HTTP.toString(j));
- System.out.println("");
+ j = new JSONObject(obj);
+ System.out.println(j.toString());
- j = HTTP.toJSONObject("HTTP/1.1 200 Oki Doki\nDate: Sun, 26 May 2002 17:38:52 GMT\nServer: Apache/1.3.23 (Unix) mod_perl/1.26\nKeep-Alive: timeout=15, max=100\nConnection: Keep-Alive\nTransfer-Encoding: chunked\nContent-Type: text/html\n");
- System.out.println(j.toString(2));
- System.out.println(HTTP.toString(j));
- System.out.println("");
+ s = "{ \"entity\": { \"imageURL\": \"\", \"name\": \"IXXXXXXXXXXXXX\", \"id\": 12336, \"ratingCount\": null, \"averageRating\": null } }";
+ j = new JSONObject(s);
+ System.out.println(j.toString(2));
- j = new JSONObject("{nix: null, nux: false, null: 'null', 'Request-URI': '/', Method: 'GET', 'HTTP-Version': 'HTTP/1.0'}");
- System.out.println(j.toString(2));
- System.out.println("isNull: " + j.isNull("nix"));
- System.out.println(" has: " + j.has("nix"));
- System.out.println(XML.toString(j));
- System.out.println(HTTP.toString(j));
- System.out.println("");
+ jj = new JSONStringer();
+ s = jj
+ .object()
+ .key("single")
+ .value("MARIE HAA'S")
+ .key("Johnny")
+ .value("MARIE HAA\\'S")
+ .key("foo")
+ .value("bar")
+ .key("baz")
+ .array()
+ .object()
+ .key("quux")
+ .value("Thanks, Josh!")
+ .endObject()
+ .endArray()
+ .key("obj keys")
+ .value(JSONObject.getNames(obj))
+ .endObject()
+ .toString();
+ System.out.println(s);
- j = XML.toJSONObject("<?xml version='1.0' encoding='UTF-8'?>"+"\n\n"+"<SOAP-ENV:Envelope"+
- " xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\""+
- " xmlns:xsi=\"http://www.w3.org/1999/XMLSchema-instance\""+
- " xmlns:xsd=\"http://www.w3.org/1999/XMLSchema\">"+
- "<SOAP-ENV:Body><ns1:doGoogleSearch"+
- " xmlns:ns1=\"urn:GoogleSearch\""+
- " SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">"+
- "<key xsi:type=\"xsd:string\">GOOGLEKEY</key> <q"+
- " xsi:type=\"xsd:string\">'+search+'</q> <start"+
- " xsi:type=\"xsd:int\">0</start> <maxResults"+
- " xsi:type=\"xsd:int\">10</maxResults> <filter"+
- " xsi:type=\"xsd:boolean\">true</filter> <restrict"+
- " xsi:type=\"xsd:string\"></restrict> <safeSearch"+
- " xsi:type=\"xsd:boolean\">false</safeSearch> <lr"+
- " xsi:type=\"xsd:string\"></lr> <ie"+
- " xsi:type=\"xsd:string\">latin1</ie> <oe"+
- " xsi:type=\"xsd:string\">latin1</oe>"+
- "</ns1:doGoogleSearch>"+
- "</SOAP-ENV:Body></SOAP-ENV:Envelope>");
- System.out.println(j.toString(2));
- System.out.println(XML.toString(j));
- System.out.println("");
+ System.out.println(new JSONStringer()
+ .object()
+ .key("a")
+ .array()
+ .array()
+ .array()
+ .value("b")
+ .endArray()
+ .endArray()
+ .endArray()
+ .endObject()
+ .toString());
- j = new JSONObject("{Envelope: {Body: {\"ns1:doGoogleSearch\": {oe: \"latin1\", filter: true, q: \"'+search+'\", key: \"GOOGLEKEY\", maxResults: 10, \"SOAP-ENV:encodingStyle\": \"http://schemas.xmlsoap.org/soap/encoding/\", start: 0, ie: \"latin1\", safeSearch:false, \"xmlns:ns1\": \"urn:GoogleSearch\"}}}}");
- System.out.println(j.toString(2));
- System.out.println(XML.toString(j));
- System.out.println("");
+ jj = new JSONStringer();
+ jj.array();
+ jj.value(1);
+ jj.array();
+ jj.value(null);
+ jj.array();
+ jj.object();
+ jj.key("empty-array").array().endArray();
+ jj.key("answer").value(42);
+ jj.key("null").value(null);
+ jj.key("false").value(false);
+ jj.key("true").value(true);
+ jj.key("big").value(123456789e+88);
+ jj.key("small").value(123456789e-88);
+ jj.key("empty-object").object().endObject();
+ jj.key("long");
+ jj.value(9223372036854775807L);
+ jj.endObject();
+ jj.value("two");
+ jj.endArray();
+ jj.value(true);
+ jj.endArray();
+ jj.value(98.6);
+ jj.value(-100.0);
+ jj.object();
+ jj.endObject();
+ jj.object();
+ jj.key("one");
+ jj.value(1.00);
+ jj.endObject();
+ jj.value(obj);
+ jj.endArray();
+ System.out.println(jj.toString());
- j = CookieList.toJSONObject(" f%oo = b+l=ah ; o;n%40e = t.wo ");
- System.out.println(j.toString(2));
- System.out.println(CookieList.toString(j));
- System.out.println("");
+ System.out.println(new JSONArray(jj.toString()).toString(4));
- j = Cookie.toJSONObject("f%oo=blah; secure ;expires = April 24, 2002");
- System.out.println(j.toString(2));
- System.out.println(Cookie.toString(j));
- System.out.println("");
+ int ar[] = {1, 2, 3};
+ JSONArray ja = new JSONArray(ar);
+ System.out.println(ja.toString());
- j = new JSONObject("{script: 'It is not allowed in HTML to send a close script tag in a string<script>because it confuses browsers</script>so we insert a backslash before the /'}");
- System.out.println(j.toString());
- System.out.println("");
+ String sa[] = {"aString", "aNumber", "aBoolean"};
+ j = new JSONObject(obj, sa);
+ j.put("Testing JSONString interface", obj);
+ System.out.println(j.toString(4));
- JSONTokener jt = new JSONTokener("{op:'test', to:'session', pre:1}{op:'test', to:'session', pre:2}");
- j = new JSONObject(jt);
- System.out.println(j.toString());
- System.out.println("pre: " + j.optInt("pre"));
- int i = jt.skipTo('{');
- System.out.println(i);
- j = new JSONObject(jt);
- System.out.println(j.toString());
- System.out.println("");
+ j = new JSONObject("{slashes: '///', closetag: '</script>', backslash:'\\\\', ei: {quotes: '\"\\''},eo: {a: '\"quoted\"', b:\"don't\"}, quotes: [\"'\", '\"']}");
+ System.out.println(j.toString(2));
+ System.out.println(XML.toString(j));
+ System.out.println("");
- a = CDL.toJSONArray("No quotes, 'Single Quotes', \"Double Quotes\"\n1,'2',\"3\"\n,'It is \"good,\"', \"It works.\"\n\n");
+ j = new JSONObject(
+ "{foo: [true, false,9876543210, 0.0, 1.00000001, 1.000000000001, 1.00000000000000001," +
+ " .00000000000000001, 2.00, 0.1, 2e100, -32,[],{}, \"string\"], " +
+ " to : null, op : 'Good'," +
+ "ten:10} postfix comment");
+ j.put("String", "98.6");
+ j.put("JSONObject", new JSONObject());
+ j.put("JSONArray", new JSONArray());
+ j.put("int", 57);
+ j.put("double", 123456789012345678901234567890.);
+ j.put("true", true);
+ j.put("false", false);
+ j.put("null", JSONObject.NULL);
+ j.put("bool", "true");
+ j.put("zero", -0.0);
+ j.put("\\u2028", "\u2028");
+ j.put("\\u2029", "\u2029");
+ a = j.getJSONArray("foo");
+ a.put(666);
+ a.put(2001.99);
+ a.put("so \"fine\".");
+ a.put("so <fine>.");
+ a.put(true);
+ a.put(false);
+ a.put(new JSONArray());
+ a.put(new JSONObject());
+ j.put("keys", JSONObject.getNames(j));
+ System.out.println(j.toString(4));
+ System.out.println(XML.toString(j));
- System.out.println(CDL.toString(a));
- System.out.println("");
- System.out.println(a.toString(4));
- System.out.println("");
+ System.out.println("String: " + j.getDouble("String"));
+ System.out.println(" bool: " + j.getBoolean("bool"));
+ System.out.println(" to: " + j.getString("to"));
+ System.out.println(" true: " + j.getString("true"));
+ System.out.println(" foo: " + j.getJSONArray("foo"));
+ System.out.println(" op: " + j.getString("op"));
+ System.out.println(" ten: " + j.getInt("ten"));
+ System.out.println(" oops: " + j.optBoolean("oops"));
- a = new JSONArray(" [\"<escape>\", next is an implied null , , ok,] ");
- System.out.println(a.toString());
- System.out.println("");
- System.out.println(XML.toString(a));
- System.out.println("");
+ s = "<xml one = 1 two=' \"2\" '><five></five>First \u0009<content><five></five> This is \"content\". <three> 3 </three>JSON does not preserve the sequencing of elements and contents.<three> III </three> <three> T H R E E</three><four/>Content text is an implied structure in XML. <six content=\"6\"/>JSON does not have implied structure:<seven>7</seven>everything is explicit.<![CDATA[CDATA blocks<are><supported>!]]></xml>";
+ j = XML.toJSONObject(s);
+ System.out.println(j.toString(2));
+ System.out.println(XML.toString(j));
+ System.out.println("");
- j = new JSONObject("{ fun => with non-standard forms ; forgiving => This package can be used to parse formats that are similar to but not stricting conforming to JSON; why=To make it easier to migrate existing data to JSON,one = [[1.00]]; uno=[[{1=>1}]];'+':+6e66 ;pluses=+++;empty = '' , 'double':0.666,true: TRUE, false: FALSE, null=NULL;[true] = [[!,@;*]]; string=> o. k. ; \r oct=0666; hex=0x666; dec=666; o=0999; noh=0x0x}");
- System.out.println(j.toString(4));
- System.out.println("");
- if (j.getBoolean("true") && !j.getBoolean("false")) {
- System.out.println("It's all good");
- }
+ ja = JSONML.toJSONArray(s);
+ System.out.println(ja.toString(4));
+ System.out.println(JSONML.toString(ja));
+ System.out.println("");
- System.out.println("");
- j = new JSONObject(j, new String[]{"dec", "oct", "hex", "missing"});
- System.out.println(j.toString(4));
+ s = "<xml do='0'>uno<a re='1' mi='2'>dos<b fa='3'/>tres<c>true</c>quatro</a>cinqo<d>seis<e/></d></xml>";
+ ja = JSONML.toJSONArray(s);
+ System.out.println(ja.toString(4));
+ System.out.println(JSONML.toString(ja));
+ System.out.println("");
- System.out.println("");
- System.out.println(new JSONStringer().array().value(a).value(j).endArray());
+ s = "<mapping><empty/> <class name = \"Customer\"> <field name = \"ID\" type = \"string\"> <bind-xml name=\"ID\" node=\"attribute\"/> </field> <field name = \"FirstName\" type = \"FirstName\"/> <field name = \"MI\" type = \"MI\"/> <field name = \"LastName\" type = \"LastName\"/> </class> <class name = \"FirstName\"> <field name = \"text\"> <bind-xml name = \"text\" node = \"text\"/> </field> </class> <class name = \"MI\"> <field name = \"text\"> <bind-xml name = \"text\" node = \"text\"/> </field> </class> <class name = \"LastName\"> <field name = \"text\"> <bind-xml name = \"text\" node = \"text\"/> </field> </class></mapping>";
+ j = XML.toJSONObject(s);
- j = new JSONObject("{string: \"98.6\", long: 2147483648, int: 2147483647, longer: 9223372036854775807, double: 9223372036854775808}");
- System.out.println(j.toString(4));
+ System.out.println(j.toString(2));
+ System.out.println(XML.toString(j));
+ System.out.println("");
+ ja = JSONML.toJSONArray(s);
+ System.out.println(ja.toString(4));
+ System.out.println(JSONML.toString(ja));
+ System.out.println("");
- System.out.println("\ngetInt");
- System.out.println("int " + j.getInt("int"));
- System.out.println("long " + j.getInt("long"));
- System.out.println("longer " + j.getInt("longer"));
- System.out.println("double " + j.getInt("double"));
- System.out.println("string " + j.getInt("string"));
+ j = XML.toJSONObject("<?xml version=\"1.0\" ?><Book Author=\"Anonymous\"><Title>Sample Book</Title><Chapter id=\"1\">This is chapter 1. It is not very long or interesting.</Chapter><Chapter id=\"2\">This is chapter 2. Although it is longer than chapter 1, it is not any more interesting.</Chapter></Book>");
+ System.out.println(j.toString(2));
+ System.out.println(XML.toString(j));
+ System.out.println("");
- System.out.println("\ngetLong");
- System.out.println("int " + j.getLong("int"));
- System.out.println("long " + j.getLong("long"));
- System.out.println("longer " + j.getLong("longer"));
- System.out.println("double " + j.getLong("double"));
- System.out.println("string " + j.getLong("string"));
+ j = XML.toJSONObject("<!DOCTYPE bCard 'http://www.cs.caltech.edu/~adam/schemas/bCard'><bCard><?xml default bCard firstname = '' lastname = '' company = '' email = '' homepage = ''?><bCard firstname = 'Rohit' lastname = 'Khare' company = 'MCI' email = 'khare at mci.net' homepage = 'http://pest.w3.org/'/><bCard firstname = 'Adam' lastname = 'Rifkin' company = 'Caltech Infospheres Project' email = 'adam at cs.caltech.edu' homepage = 'http://www.cs.caltech.edu/~adam/'/></bCard>");
+ System.out.println(j.toString(2));
+ System.out.println(XML.toString(j));
+ System.out.println("");
- System.out.println("\ngetDouble");
- System.out.println("int " + j.getDouble("int"));
- System.out.println("long " + j.getDouble("long"));
- System.out.println("longer " + j.getDouble("longer"));
- System.out.println("double " + j.getDouble("double"));
- System.out.println("string " + j.getDouble("string"));
+ j = XML.toJSONObject("<?xml version=\"1.0\"?><customer> <firstName> <text>Fred</text> </firstName> <ID>fbs0001</ID> <lastName> <text>Scerbo</text> </lastName> <MI> <text>B</text> </MI></customer>");
+ System.out.println(j.toString(2));
+ System.out.println(XML.toString(j));
+ System.out.println("");
- j.put("good sized", 9223372036854775807L);
- System.out.println(j.toString(4));
+ j = XML.toJSONObject("<!ENTITY tp-address PUBLIC '-//ABC University::Special Collections Library//TEXT (titlepage: name and address)//EN' 'tpspcoll.sgm'><list type='simple'><head>Repository Address </head><item>Special Collections Library</item><item>ABC University</item><item>Main Library, 40 Circle Drive</item><item>Ourtown, Pennsylvania</item><item>17654 USA</item></list>");
+ System.out.println(j.toString());
+ System.out.println(XML.toString(j));
+ System.out.println("");
- a = new JSONArray("[2147483647, 2147483648, 9223372036854775807, 9223372036854775808]");
- System.out.println(a.toString(4));
+ j = XML.toJSONObject("<test intertag status=ok><empty/>deluxe<blip sweet=true>&"toot"&toot;A</blip><x>eks</x><w>bonus</w><w>bonus2</w></test>");
+ System.out.println(j.toString(2));
+ System.out.println(XML.toString(j));
+ System.out.println("");
- System.out.println("\nKeys: ");
- it = j.keys();
- while (it.hasNext()) {
- s = (String)it.next();
- System.out.println(s + ": " + j.getString(s));
- }
+ j = HTTP.toJSONObject("GET / HTTP/1.0\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*\nAccept-Language: en-us\nUser-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90; T312461; Q312461)\nHost: www.nokko.com\nConnection: keep-alive\nAccept-encoding: gzip, deflate\n");
+ System.out.println(j.toString(2));
+ System.out.println(HTTP.toString(j));
+ System.out.println("");
+ j = HTTP.toJSONObject("HTTP/1.1 200 Oki Doki\nDate: Sun, 26 May 2002 17:38:52 GMT\nServer: Apache/1.3.23 (Unix) mod_perl/1.26\nKeep-Alive: timeout=15, max=100\nConnection: Keep-Alive\nTransfer-Encoding: chunked\nContent-Type: text/html\n");
+ System.out.println(j.toString(2));
+ System.out.println(HTTP.toString(j));
+ System.out.println("");
- System.out.println("\naccumulate: ");
- j = new JSONObject();
- j.accumulate("stooge", "Curly");
- j.accumulate("stooge", "Larry");
- j.accumulate("stooge", "Moe");
- a = j.getJSONArray("stooge");
- a.put(5, "Shemp");
- System.out.println(j.toString(4));
+ j = new JSONObject("{nix: null, nux: false, null: 'null', 'Request-URI': '/', Method: 'GET', 'HTTP-Version': 'HTTP/1.0'}");
+ System.out.println(j.toString(2));
+ System.out.println("isNull: " + j.isNull("nix"));
+ System.out.println(" has: " + j.has("nix"));
+ System.out.println(XML.toString(j));
+ System.out.println(HTTP.toString(j));
+ System.out.println("");
- System.out.println("\nwrite:");
- System.out.println(j.write(new StringWriter()));
+ j = XML.toJSONObject("<?xml version='1.0' encoding='UTF-8'?>" + "\n\n" + "<SOAP-ENV:Envelope" +
+ " xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"" +
+ " xmlns:xsi=\"http://www.w3.org/1999/XMLSchema-instance\"" +
+ " xmlns:xsd=\"http://www.w3.org/1999/XMLSchema\">" +
+ "<SOAP-ENV:Body><ns1:doGoogleSearch" +
+ " xmlns:ns1=\"urn:GoogleSearch\"" +
+ " SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">" +
+ "<key xsi:type=\"xsd:string\">GOOGLEKEY</key> <q" +
+ " xsi:type=\"xsd:string\">'+search+'</q> <start" +
+ " xsi:type=\"xsd:int\">0</start> <maxResults" +
+ " xsi:type=\"xsd:int\">10</maxResults> <filter" +
+ " xsi:type=\"xsd:boolean\">true</filter> <restrict" +
+ " xsi:type=\"xsd:string\"></restrict> <safeSearch" +
+ " xsi:type=\"xsd:boolean\">false</safeSearch> <lr" +
+ " xsi:type=\"xsd:string\"></lr> <ie" +
+ " xsi:type=\"xsd:string\">latin1</ie> <oe" +
+ " xsi:type=\"xsd:string\">latin1</oe>" +
+ "</ns1:doGoogleSearch>" +
+ "</SOAP-ENV:Body></SOAP-ENV:Envelope>");
+ System.out.println(j.toString(2));
+ System.out.println(XML.toString(j));
+ System.out.println("");
- s = "<xml empty><a></a><a>1</a><a>22</a><a>333</a></xml>";
- j = XML.toJSONObject(s);
- System.out.println(j.toString(4));
- System.out.println(XML.toString(j));
-
- s = "<book><chapter>Content of the first chapter</chapter><chapter>Content of the second chapter <chapter>Content of the first subchapter</chapter> <chapter>Content of the second subchapter</chapter></chapter><chapter>Third Chapter</chapter></book>";
- j = XML.toJSONObject(s);
- System.out.println(j.toString(4));
- System.out.println(XML.toString(j));
-
- a = JSONML.toJSONArray(s);
- System.out.println(a.toString(4));
- System.out.println(JSONML.toString(a));
-
- Collection c = null;
- Map m = null;
-
- j = new JSONObject(m);
- a = new JSONArray(c);
- j.append("stooge", "Joe DeRita");
- j.append("stooge", "Shemp");
- j.accumulate("stooges", "Curly");
- j.accumulate("stooges", "Larry");
- j.accumulate("stooges", "Moe");
- j.accumulate("stoogearray", j.get("stooges"));
- j.put("map", m);
- j.put("collection", c);
- j.put("array", a);
- a.put(m);
- a.put(c);
- System.out.println(j.toString(4));
-
- s = "{plist=Apple; AnimalSmells = { pig = piggish; lamb = lambish; worm = wormy; }; AnimalSounds = { pig = oink; lamb = baa; worm = baa; Lisa = \"Why is the worm talking like a lamb?\" } ; AnimalColors = { pig = pink; lamb = black; worm = pink; } } ";
- j = new JSONObject(s);
- System.out.println(j.toString(4));
-
- s = " (\"San Francisco\", \"New York\", \"Seoul\", \"London\", \"Seattle\", \"Shanghai\")";
- a = new JSONArray(s);
- System.out.println(a.toString());
-
- s = "<a ichi='1' ni='2'><b>The content of b</b> and <c san='3'>The content of c</c><d>do</d><e></e><d>re</d><f/><d>mi</d></a>";
- j = XML.toJSONObject(s);
+ j = new JSONObject("{Envelope: {Body: {\"ns1:doGoogleSearch\": {oe: \"latin1\", filter: true, q: \"'+search+'\", key: \"GOOGLEKEY\", maxResults: 10, \"SOAP-ENV:encodingStyle\": \"http://schemas.xmlsoap.org/soap/encoding/\", start: 0, ie: \"latin1\", safeSearch:false, \"xmlns:ns1\": \"urn:GoogleSearch\"}}}}");
+ System.out.println(j.toString(2));
+ System.out.println(XML.toString(j));
+ System.out.println("");
- System.out.println(j.toString(2));
- System.out.println(XML.toString(j));
- System.out.println("");
- ja = JSONML.toJSONArray(s);
- System.out.println(ja.toString(4));
- System.out.println(JSONML.toString(ja));
- System.out.println("");
-
-
- System.out.println("\nTesting Exceptions: ");
+ j = CookieList.toJSONObject(" f%oo = b+l=ah ; o;n%40e = t.wo ");
+ System.out.println(j.toString(2));
+ System.out.println(CookieList.toString(j));
+ System.out.println("");
- System.out.print("Exception: ");
- try {
- a = new JSONArray();
- a.put(Double.NEGATIVE_INFINITY);
- a.put(Double.NaN);
- System.out.println(a.toString());
- } catch (Exception e) {
- System.out.println(e);
- }
- System.out.print("Exception: ");
- try {
- System.out.println(j.getDouble("stooge"));
- } catch (Exception e) {
- System.out.println(e);
- }
- System.out.print("Exception: ");
- try {
- System.out.println(j.getDouble("howard"));
- } catch (Exception e) {
- System.out.println(e);
- }
- System.out.print("Exception: ");
- try {
- System.out.println(j.put(null, "howard"));
- } catch (Exception e) {
- System.out.println(e);
- }
- System.out.print("Exception: ");
- try {
- System.out.println(a.getDouble(0));
- } catch (Exception e) {
- System.out.println(e);
- }
- System.out.print("Exception: ");
- try {
- System.out.println(a.get(-1));
- } catch (Exception e) {
- System.out.println(e);
- }
- System.out.print("Exception: ");
- try {
- System.out.println(a.put(Double.NaN));
- } catch (Exception e) {
- System.out.println(e);
- }
- System.out.print("Exception: ");
- try {
- j = XML.toJSONObject("<a><b> ");
- } catch (Exception e) {
- System.out.println(e);
- }
- System.out.print("Exception: ");
- try {
- j = XML.toJSONObject("<a></b> ");
- } catch (Exception e) {
- System.out.println(e);
- }
- System.out.print("Exception: ");
- try {
- j = XML.toJSONObject("<a></a ");
- } catch (Exception e) {
- System.out.println(e);
- }
- System.out.print("Exception: ");
- try {
- ja = new JSONArray(new Object());
- System.out.println(ja.toString());
- } catch (Exception e) {
- System.out.println(e);
- }
+ j = Cookie.toJSONObject("f%oo=blah; secure ;expires = April 24, 2002");
+ System.out.println(j.toString(2));
+ System.out.println(Cookie.toString(j));
+ System.out.println("");
- System.out.print("Exception: ");
- try {
- s = "[)";
- a = new JSONArray(s);
- System.out.println(a.toString());
- } catch (Exception e) {
- System.out.println(e);
- }
+ j = new JSONObject("{script: 'It is not allowed in HTML to send a close script tag in a string<script>because it confuses browsers</script>so we insert a backslash before the /'}");
+ System.out.println(j.toString());
+ System.out.println("");
- System.out.print("Exception: ");
- try {
- s = "<xml";
- ja = JSONML.toJSONArray(s);
- System.out.println(ja.toString(4));
- } catch (Exception e) {
- System.out.println(e);
- }
+ JSONTokener jt = new JSONTokener("{op:'test', to:'session', pre:1}{op:'test', to:'session', pre:2}");
+ j = new JSONObject(jt);
+ System.out.println(j.toString());
+ System.out.println("pre: " + j.optInt("pre"));
+ int i = jt.skipTo('{');
+ System.out.println(i);
+ j = new JSONObject(jt);
+ System.out.println(j.toString());
+ System.out.println("");
- System.out.print("Exception: ");
- try {
- s = "<right></wrong>";
- ja = JSONML.toJSONArray(s);
- System.out.println(ja.toString(4));
- } catch (Exception e) {
- System.out.println(e);
- }
+ a = CDL.toJSONArray("No quotes, 'Single Quotes', \"Double Quotes\"\n1,'2',\"3\"\n,'It is \"good,\"', \"It works.\"\n\n");
- System.out.print("Exception: ");
- try {
- s = "{\"koda\": true, \"koda\": true}";
- j = new JSONObject(s);
- System.out.println(j.toString(4));
- } catch (Exception e) {
- System.out.println(e);
- }
+ System.out.println(CDL.toString(a));
+ System.out.println("");
+ System.out.println(a.toString(4));
+ System.out.println("");
- System.out.print("Exception: ");
- try {
- jj = new JSONStringer();
- s = jj
- .object()
- .key("bosanda")
- .value("MARIE HAA'S")
- .key("bosanda")
- .value("MARIE HAA\\'S")
- .endObject()
- .toString();
- System.out.println(j.toString(4));
- } catch (Exception e) {
- System.out.println(e);
- }
- } catch (Exception e) {
- System.out.println(e.toString());
- }
+ a = new JSONArray(" [\"<escape>\", next is an implied null , , ok,] ");
+ System.out.println(a.toString());
+ System.out.println("");
+ System.out.println(XML.toString(a));
+ System.out.println("");
+
+ j = new JSONObject("{ fun => with non-standard forms ; forgiving => This package can be used to parse formats that are similar to but not stricting conforming to JSON; why=To make it easier to migrate existing data to JSON,one = [[1.00]]; uno=[[{1=>1}]];'+':+6e66 ;pluses=+++;empty = '' , 'double':0.666,true: TRUE, false: FALSE, null=NULL;[true] = [[!,@;*]]; string=> o. k. ; \r oct=0666; hex=0x666; dec=666; o=0999; noh=0x0x}");
+ System.out.println(j.toString(4));
+ System.out.println("");
+ if (j.getBoolean("true") && !j.getBoolean("false"))
+ {
+ System.out.println("It's all good");
+ }
+
+ System.out.println("");
+ j = new JSONObject(j, new String[]{"dec", "oct", "hex", "missing"});
+ System.out.println(j.toString(4));
+
+ System.out.println("");
+ System.out.println(new JSONStringer().array().value(a).value(j).endArray());
+
+ j = new JSONObject("{string: \"98.6\", long: 2147483648, int: 2147483647, longer: 9223372036854775807, double: 9223372036854775808}");
+ System.out.println(j.toString(4));
+
+ System.out.println("\ngetInt");
+ System.out.println("int " + j.getInt("int"));
+ System.out.println("long " + j.getInt("long"));
+ System.out.println("longer " + j.getInt("longer"));
+ System.out.println("double " + j.getInt("double"));
+ System.out.println("string " + j.getInt("string"));
+
+ System.out.println("\ngetLong");
+ System.out.println("int " + j.getLong("int"));
+ System.out.println("long " + j.getLong("long"));
+ System.out.println("longer " + j.getLong("longer"));
+ System.out.println("double " + j.getLong("double"));
+ System.out.println("string " + j.getLong("string"));
+
+ System.out.println("\ngetDouble");
+ System.out.println("int " + j.getDouble("int"));
+ System.out.println("long " + j.getDouble("long"));
+ System.out.println("longer " + j.getDouble("longer"));
+ System.out.println("double " + j.getDouble("double"));
+ System.out.println("string " + j.getDouble("string"));
+
+ j.put("good sized", 9223372036854775807L);
+ System.out.println(j.toString(4));
+
+ a = new JSONArray("[2147483647, 2147483648, 9223372036854775807, 9223372036854775808]");
+ System.out.println(a.toString(4));
+
+ System.out.println("\nKeys: ");
+ it = j.keys();
+ while (it.hasNext())
+ {
+ s = (String) it.next();
+ System.out.println(s + ": " + j.getString(s));
+ }
+
+
+ System.out.println("\naccumulate: ");
+ j = new JSONObject();
+ j.accumulate("stooge", "Curly");
+ j.accumulate("stooge", "Larry");
+ j.accumulate("stooge", "Moe");
+ a = j.getJSONArray("stooge");
+ a.put(5, "Shemp");
+ System.out.println(j.toString(4));
+
+ System.out.println("\nwrite:");
+ System.out.println(j.write(new StringWriter()));
+
+ s = "<xml empty><a></a><a>1</a><a>22</a><a>333</a></xml>";
+ j = XML.toJSONObject(s);
+ System.out.println(j.toString(4));
+ System.out.println(XML.toString(j));
+
+ s = "<book><chapter>Content of the first chapter</chapter><chapter>Content of the second chapter <chapter>Content of the first subchapter</chapter> <chapter>Content of the second subchapter</chapter></chapter><chapter>Third Chapter</chapter></book>";
+ j = XML.toJSONObject(s);
+ System.out.println(j.toString(4));
+ System.out.println(XML.toString(j));
+
+ a = JSONML.toJSONArray(s);
+ System.out.println(a.toString(4));
+ System.out.println(JSONML.toString(a));
+
+ Collection c = null;
+ Map m = null;
+
+ j = new JSONObject(m);
+ a = new JSONArray(c);
+ j.append("stooge", "Joe DeRita");
+ j.append("stooge", "Shemp");
+ j.accumulate("stooges", "Curly");
+ j.accumulate("stooges", "Larry");
+ j.accumulate("stooges", "Moe");
+ j.accumulate("stoogearray", j.get("stooges"));
+ j.put("map", m);
+ j.put("collection", c);
+ j.put("array", a);
+ a.put(m);
+ a.put(c);
+ System.out.println(j.toString(4));
+
+ s = "{plist=Apple; AnimalSmells = { pig = piggish; lamb = lambish; worm = wormy; }; AnimalSounds = { pig = oink; lamb = baa; worm = baa; Lisa = \"Why is the worm talking like a lamb?\" } ; AnimalColors = { pig = pink; lamb = black; worm = pink; } } ";
+ j = new JSONObject(s);
+ System.out.println(j.toString(4));
+
+ s = " (\"San Francisco\", \"New York\", \"Seoul\", \"London\", \"Seattle\", \"Shanghai\")";
+ a = new JSONArray(s);
+ System.out.println(a.toString());
+
+ s = "<a ichi='1' ni='2'><b>The content of b</b> and <c san='3'>The content of c</c><d>do</d><e></e><d>re</d><f/><d>mi</d></a>";
+ j = XML.toJSONObject(s);
+
+ System.out.println(j.toString(2));
+ System.out.println(XML.toString(j));
+ System.out.println("");
+ ja = JSONML.toJSONArray(s);
+ System.out.println(ja.toString(4));
+ System.out.println(JSONML.toString(ja));
+ System.out.println("");
+
+
+ System.out.println("\nTesting Exceptions: ");
+
+ System.out.print("Exception: ");
+ try
+ {
+ a = new JSONArray();
+ a.put(Double.NEGATIVE_INFINITY);
+ a.put(Double.NaN);
+ System.out.println(a.toString());
+ }
+ catch (Exception e)
+ {
+ System.out.println(e);
+ }
+ System.out.print("Exception: ");
+ try
+ {
+ System.out.println(j.getDouble("stooge"));
+ }
+ catch (Exception e)
+ {
+ System.out.println(e);
+ }
+ System.out.print("Exception: ");
+ try
+ {
+ System.out.println(j.getDouble("howard"));
+ }
+ catch (Exception e)
+ {
+ System.out.println(e);
+ }
+ System.out.print("Exception: ");
+ try
+ {
+ System.out.println(j.put(null, "howard"));
+ }
+ catch (Exception e)
+ {
+ System.out.println(e);
+ }
+ System.out.print("Exception: ");
+ try
+ {
+ System.out.println(a.getDouble(0));
+ }
+ catch (Exception e)
+ {
+ System.out.println(e);
+ }
+ System.out.print("Exception: ");
+ try
+ {
+ System.out.println(a.get(-1));
+ }
+ catch (Exception e)
+ {
+ System.out.println(e);
+ }
+ System.out.print("Exception: ");
+ try
+ {
+ System.out.println(a.put(Double.NaN));
+ }
+ catch (Exception e)
+ {
+ System.out.println(e);
+ }
+ System.out.print("Exception: ");
+ try
+ {
+ j = XML.toJSONObject("<a><b> ");
+ }
+ catch (Exception e)
+ {
+ System.out.println(e);
+ }
+ System.out.print("Exception: ");
+ try
+ {
+ j = XML.toJSONObject("<a></b> ");
+ }
+ catch (Exception e)
+ {
+ System.out.println(e);
+ }
+ System.out.print("Exception: ");
+ try
+ {
+ j = XML.toJSONObject("<a></a ");
+ }
+ catch (Exception e)
+ {
+ System.out.println(e);
+ }
+ System.out.print("Exception: ");
+ try
+ {
+ ja = new JSONArray(new Object());
+ System.out.println(ja.toString());
+ }
+ catch (Exception e)
+ {
+ System.out.println(e);
+ }
+
+ System.out.print("Exception: ");
+ try
+ {
+ s = "[)";
+ a = new JSONArray(s);
+ System.out.println(a.toString());
+ }
+ catch (Exception e)
+ {
+ System.out.println(e);
+ }
+
+ System.out.print("Exception: ");
+ try
+ {
+ s = "<xml";
+ ja = JSONML.toJSONArray(s);
+ System.out.println(ja.toString(4));
+ }
+ catch (Exception e)
+ {
+ System.out.println(e);
+ }
+
+ System.out.print("Exception: ");
+ try
+ {
+ s = "<right></wrong>";
+ ja = JSONML.toJSONArray(s);
+ System.out.println(ja.toString(4));
+ }
+ catch (Exception e)
+ {
+ System.out.println(e);
+ }
+
+ System.out.print("Exception: ");
+ try
+ {
+ s = "{\"koda\": true, \"koda\": true}";
+ j = new JSONObject(s);
+ System.out.println(j.toString(4));
+ }
+ catch (Exception e)
+ {
+ System.out.println(e);
+ }
+
+ System.out.print("Exception: ");
+ try
+ {
+ jj = new JSONStringer();
+ s = jj
+ .object()
+ .key("bosanda")
+ .value("MARIE HAA'S")
+ .key("bosanda")
+ .value("MARIE HAA\\'S")
+ .endObject()
+ .toString();
+ System.out.println(j.toString(4));
+ }
+ catch (Exception e)
+ {
+ System.out.println(e);
+ }
}
+ catch (Exception e)
+ {
+ System.out.println(e.toString());
+ }
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/json/XML.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/json/XML.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/json/XML.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -30,108 +30,139 @@
/**
* This provides static methods to convert an XML text into a JSONObject,
* and to covert a JSONObject into an XML text.
+ *
* @author JSON.org
* @version 2008-09-18
*/
-public class XML {
+public class XML
+{
- /** The Character '&'. */
- public static final Character AMP = new Character('&');
+ /**
+ * The Character '&'.
+ */
+ public static final Character AMP = new Character('&');
- /** The Character '''. */
- public static final Character APOS = new Character('\'');
+ /**
+ * The Character '''.
+ */
+ public static final Character APOS = new Character('\'');
- /** The Character '!'. */
- public static final Character BANG = new Character('!');
+ /**
+ * The Character '!'.
+ */
+ public static final Character BANG = new Character('!');
- /** The Character '='. */
- public static final Character EQ = new Character('=');
+ /**
+ * The Character '='.
+ */
+ public static final Character EQ = new Character('=');
- /** The Character '>'. */
- public static final Character GT = new Character('>');
+ /**
+ * The Character '>'.
+ */
+ public static final Character GT = new Character('>');
- /** The Character '<'. */
- public static final Character LT = new Character('<');
+ /**
+ * The Character '<'.
+ */
+ public static final Character LT = new Character('<');
- /** The Character '?'. */
- public static final Character QUEST = new Character('?');
+ /**
+ * The Character '?'.
+ */
+ public static final Character QUEST = new Character('?');
- /** The Character '"'. */
- public static final Character QUOT = new Character('"');
+ /**
+ * The Character '"'.
+ */
+ public static final Character QUOT = new Character('"');
- /** The Character '/'. */
- public static final Character SLASH = new Character('/');
+ /**
+ * The Character '/'.
+ */
+ public static final Character SLASH = new Character('/');
- /**
- * Replace special characters with XML escapes:
- * <pre>
- * & <small>(ampersand)</small> is replaced by &amp;
- * < <small>(less than)</small> is replaced by &lt;
- * > <small>(greater than)</small> is replaced by &gt;
- * " <small>(double quote)</small> is replaced by &quot;
- * </pre>
- * @param string The string to be escaped.
- * @return The escaped string.
- */
- public static String escape(String string) {
- StringBuffer sb = new StringBuffer();
- for (int i = 0, len = string.length(); i < len; i++) {
- char c = string.charAt(i);
- switch (c) {
- case '&':
- sb.append("&");
- break;
- case '<':
- sb.append("<");
- break;
- case '>':
- sb.append(">");
- break;
- case '"':
- sb.append(""");
- break;
- default:
- sb.append(c);
- }
- }
- return sb.toString();
+ /**
+ * Replace special characters with XML escapes:
+ * <pre>
+ * & <small>(ampersand)</small> is replaced by &amp;
+ * < <small>(less than)</small> is replaced by &lt;
+ * > <small>(greater than)</small> is replaced by &gt;
+ * " <small>(double quote)</small> is replaced by &quot;
+ * </pre>
+ *
+ * @param string The string to be escaped.
+ * @return The escaped string.
+ */
+ public static String escape(String string)
+ {
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0, len = string.length(); i < len; i++)
+ {
+ char c = string.charAt(i);
+ switch (c)
+ {
+ case'&':
+ sb.append("&");
+ break;
+ case'<':
+ sb.append("<");
+ break;
+ case'>':
+ sb.append(">");
+ break;
+ case'"':
+ sb.append(""");
+ break;
+ default:
+ sb.append(c);
+ }
}
-
- /**
- * Throw an exception if the string contains whitespace.
- * Whitespace is not allowed in tagNames and attributes.
- * @param string
- * @throws JSONException
- */
- public static void noSpace(String string) throws JSONException {
- int i, length = string.length();
- if (length == 0) {
- throw new JSONException("Empty string.");
- }
- for (i = 0; i < length; i += 1) {
- if (Character.isWhitespace(string.charAt(i))) {
- throw new JSONException("'" + string +
- "' contains a space character.");
- }
- }
+ return sb.toString();
+ }
+
+ /**
+ * Throw an exception if the string contains whitespace.
+ * Whitespace is not allowed in tagNames and attributes.
+ *
+ * @param string
+ * @throws JSONException
+ */
+ public static void noSpace(String string) throws JSONException
+ {
+ int i, length = string.length();
+ if (length == 0)
+ {
+ throw new JSONException("Empty string.");
}
+ for (i = 0; i < length; i += 1)
+ {
+ if (Character.isWhitespace(string.charAt(i)))
+ {
+ throw new JSONException("'" + string +
+ "' contains a space character.");
+ }
+ }
+ }
- /**
- * Scan the content following the named tag, attaching it to the context.
- * @param x The XMLTokener containing the source string.
- * @param context The JSONObject that will include the new material.
- * @param name The tag name.
- * @return true if the close tag is processed.
- * @throws JSONException
- */
- private static boolean parse(XMLTokener x, JSONObject context,
- String name) throws JSONException {
- char c;
- int i;
- String n;
- JSONObject o = null;
- String s;
- Object t;
+ /**
+ * Scan the content following the named tag, attaching it to the context.
+ *
+ * @param x The XMLTokener containing the source string.
+ * @param context The JSONObject that will include the new material.
+ * @param name The tag name.
+ * @return true if the close tag is processed.
+ * @throws JSONException
+ */
+ private static boolean parse(XMLTokener x, JSONObject context,
+ String name) throws JSONException
+ {
+ char c;
+ int i;
+ String n;
+ JSONObject o = null;
+ String s;
+ Object t;
// Test for and skip past these forms:
// <!-- ... -->
@@ -143,284 +174,371 @@
// <=
// <<
- t = x.nextToken();
+ t = x.nextToken();
// <!
- if (t == BANG) {
- c = x.next();
- if (c == '-') {
- if (x.next() == '-') {
- x.skipPast("-->");
- return false;
- }
- x.back();
- } else if (c == '[') {
- t = x.nextToken();
- if (t.equals("CDATA")) {
- if (x.next() == '[') {
- s = x.nextCDATA();
- if (s.length() > 0) {
- context.accumulate("content", s);
- }
- return false;
- }
- }
- throw x.syntaxError("Expected 'CDATA['");
+ if (t == BANG)
+ {
+ c = x.next();
+ if (c == '-')
+ {
+ if (x.next() == '-')
+ {
+ x.skipPast("-->");
+ return false;
+ }
+ x.back();
+ }
+ else if (c == '[')
+ {
+ t = x.nextToken();
+ if (t.equals("CDATA"))
+ {
+ if (x.next() == '[')
+ {
+ s = x.nextCDATA();
+ if (s.length() > 0)
+ {
+ context.accumulate("content", s);
}
- i = 1;
- do {
- t = x.nextMeta();
- if (t == null) {
- throw x.syntaxError("Missing '>' after '<!'.");
- } else if (t == LT) {
- i += 1;
- } else if (t == GT) {
- i -= 1;
- }
- } while (i > 0);
return false;
- } else if (t == QUEST) {
+ }
+ }
+ throw x.syntaxError("Expected 'CDATA['");
+ }
+ i = 1;
+ do
+ {
+ t = x.nextMeta();
+ if (t == null)
+ {
+ throw x.syntaxError("Missing '>' after '<!'.");
+ }
+ else if (t == LT)
+ {
+ i += 1;
+ }
+ else if (t == GT)
+ {
+ i -= 1;
+ }
+ }
+ while (i > 0);
+ return false;
+ }
+ else if (t == QUEST)
+ {
// <?
- x.skipPast("?>");
- return false;
- } else if (t == SLASH) {
+ x.skipPast("?>");
+ return false;
+ }
+ else if (t == SLASH)
+ {
// Close tag </
- t = x.nextToken();
- if (name == null) {
- throw x.syntaxError("Mismatched close tag" + t);
- }
- if (!t.equals(name)) {
- throw x.syntaxError("Mismatched " + name + " and " + t);
- }
- if (x.nextToken() != GT) {
- throw x.syntaxError("Misshaped close tag");
- }
- return true;
+ t = x.nextToken();
+ if (name == null)
+ {
+ throw x.syntaxError("Mismatched close tag" + t);
+ }
+ if (!t.equals(name))
+ {
+ throw x.syntaxError("Mismatched " + name + " and " + t);
+ }
+ if (x.nextToken() != GT)
+ {
+ throw x.syntaxError("Misshaped close tag");
+ }
+ return true;
- } else if (t instanceof Character) {
- throw x.syntaxError("Misshaped tag");
+ }
+ else if (t instanceof Character)
+ {
+ throw x.syntaxError("Misshaped tag");
// Open tag <
- } else {
- n = (String)t;
- t = null;
- o = new JSONObject();
- for (;;) {
- if (t == null) {
- t = x.nextToken();
- }
+ }
+ else
+ {
+ n = (String) t;
+ t = null;
+ o = new JSONObject();
+ for (; ;)
+ {
+ if (t == null)
+ {
+ t = x.nextToken();
+ }
// attribute = value
- if (t instanceof String) {
- s = (String)t;
- t = x.nextToken();
- if (t == EQ) {
- t = x.nextToken();
- if (!(t instanceof String)) {
- throw x.syntaxError("Missing value");
- }
- o.accumulate(s, JSONObject.stringToValue((String)t));
- t = null;
- } else {
- o.accumulate(s, "");
- }
+ if (t instanceof String)
+ {
+ s = (String) t;
+ t = x.nextToken();
+ if (t == EQ)
+ {
+ t = x.nextToken();
+ if (!(t instanceof String))
+ {
+ throw x.syntaxError("Missing value");
+ }
+ o.accumulate(s, JSONObject.stringToValue((String) t));
+ t = null;
+ }
+ else
+ {
+ o.accumulate(s, "");
+ }
// Empty tag <.../>
- } else if (t == SLASH) {
- if (x.nextToken() != GT) {
- throw x.syntaxError("Misshaped tag");
- }
- context.accumulate(n, o);
- return false;
+ }
+ else if (t == SLASH)
+ {
+ if (x.nextToken() != GT)
+ {
+ throw x.syntaxError("Misshaped tag");
+ }
+ context.accumulate(n, o);
+ return false;
// Content, between <...> and </...>
- } else if (t == GT) {
- for (;;) {
- t = x.nextContent();
- if (t == null) {
- if (n != null) {
- throw x.syntaxError("Unclosed tag " + n);
- }
- return false;
- } else if (t instanceof String) {
- s = (String)t;
- if (s.length() > 0) {
- o.accumulate("content", JSONObject.stringToValue(s));
- }
+ }
+ else if (t == GT)
+ {
+ for (; ;)
+ {
+ t = x.nextContent();
+ if (t == null)
+ {
+ if (n != null)
+ {
+ throw x.syntaxError("Unclosed tag " + n);
+ }
+ return false;
+ }
+ else if (t instanceof String)
+ {
+ s = (String) t;
+ if (s.length() > 0)
+ {
+ o.accumulate("content", JSONObject.stringToValue(s));
+ }
// Nested element
- } else if (t == LT) {
- if (parse(x, o, n)) {
- if (o.length() == 0) {
- context.accumulate(n, "");
- } else if (o.length() == 1 &&
- o.opt("content") != null) {
- context.accumulate(n, o.opt("content"));
- } else {
- context.accumulate(n, o);
- }
- return false;
- }
- }
- }
- } else {
- throw x.syntaxError("Misshaped tag");
+ }
+ else if (t == LT)
+ {
+ if (parse(x, o, n))
+ {
+ if (o.length() == 0)
+ {
+ context.accumulate(n, "");
}
+ else if (o.length() == 1 &&
+ o.opt("content") != null)
+ {
+ context.accumulate(n, o.opt("content"));
+ }
+ else
+ {
+ context.accumulate(n, o);
+ }
+ return false;
+ }
}
+ }
}
+ else
+ {
+ throw x.syntaxError("Misshaped tag");
+ }
+ }
}
+ }
- /**
- * Convert a well-formed (but not necessarily valid) XML string into a
- * JSONObject. Some information may be lost in this transformation
- * because JSON is a data format and XML is a document format. XML uses
- * elements, attributes, and content text, while JSON uses unordered
- * collections of name/value pairs and arrays of values. JSON does not
- * does not like to distinguish between elements and attributes.
- * Sequences of similar elements are represented as JSONArrays. Content
- * text may be placed in a "content" member. Comments, prologs, DTDs, and
- * <code><[ [ ]]></code> are ignored.
- * @param string The source string.
- * @return A JSONObject containing the structured data from the XML string.
- * @throws JSONException
- */
- public static JSONObject toJSONObject(String string) throws JSONException {
- JSONObject o = new JSONObject();
- XMLTokener x = new XMLTokener(string);
- while (x.more() && x.skipPast("<")) {
- parse(x, o, null);
- }
- return o;
+ /**
+ * Convert a well-formed (but not necessarily valid) XML string into a
+ * JSONObject. Some information may be lost in this transformation
+ * because JSON is a data format and XML is a document format. XML uses
+ * elements, attributes, and content text, while JSON uses unordered
+ * collections of name/value pairs and arrays of values. JSON does not
+ * does not like to distinguish between elements and attributes.
+ * Sequences of similar elements are represented as JSONArrays. Content
+ * text may be placed in a "content" member. Comments, prologs, DTDs, and
+ * <code><[ [ ]]></code> are ignored.
+ *
+ * @param string The source string.
+ * @return A JSONObject containing the structured data from the XML string.
+ * @throws JSONException
+ */
+ public static JSONObject toJSONObject(String string) throws JSONException
+ {
+ JSONObject o = new JSONObject();
+ XMLTokener x = new XMLTokener(string);
+ while (x.more() && x.skipPast("<"))
+ {
+ parse(x, o, null);
}
+ return o;
+ }
- /**
- * Convert a JSONObject into a well-formed, element-normal XML string.
- * @param o A JSONObject.
- * @return A string.
- * @throws JSONException
- */
- public static String toString(Object o) throws JSONException {
- return toString(o, null);
- }
+ /**
+ * Convert a JSONObject into a well-formed, element-normal XML string.
+ *
+ * @param o A JSONObject.
+ * @return A string.
+ * @throws JSONException
+ */
+ public static String toString(Object o) throws JSONException
+ {
+ return toString(o, null);
+ }
- /**
- * Convert a JSONObject into a well-formed, element-normal XML string.
- * @param o A JSONObject.
- * @param tagName The optional name of the enclosing tag.
- * @return A string.
- * @throws JSONException
- */
- public static String toString(Object o, String tagName)
- throws JSONException {
- StringBuffer b = new StringBuffer();
- int i;
- JSONArray ja;
- JSONObject jo;
- String k;
- Iterator keys;
- int len;
- String s;
- Object v;
- if (o instanceof JSONObject) {
+ /**
+ * Convert a JSONObject into a well-formed, element-normal XML string.
+ *
+ * @param o A JSONObject.
+ * @param tagName The optional name of the enclosing tag.
+ * @return A string.
+ * @throws JSONException
+ */
+ public static String toString(Object o, String tagName)
+ throws JSONException
+ {
+ StringBuffer b = new StringBuffer();
+ int i;
+ JSONArray ja;
+ JSONObject jo;
+ String k;
+ Iterator keys;
+ int len;
+ String s;
+ Object v;
+ if (o instanceof JSONObject)
+ {
// Emit <tagName>
- if (tagName != null) {
- b.append('<');
- b.append(tagName);
- b.append('>');
- }
+ if (tagName != null)
+ {
+ b.append('<');
+ b.append(tagName);
+ b.append('>');
+ }
// Loop thru the keys.
- jo = (JSONObject)o;
- keys = jo.keys();
- while (keys.hasNext()) {
- k = keys.next().toString();
- v = jo.opt(k);
- if (v == null) {
- v = "";
- }
- if (v instanceof String) {
- s = (String)v;
- } else {
- s = null;
- }
+ jo = (JSONObject) o;
+ keys = jo.keys();
+ while (keys.hasNext())
+ {
+ k = keys.next().toString();
+ v = jo.opt(k);
+ if (v == null)
+ {
+ v = "";
+ }
+ if (v instanceof String)
+ {
+ s = (String) v;
+ }
+ else
+ {
+ s = null;
+ }
// Emit content in body
- if (k.equals("content")) {
- if (v instanceof JSONArray) {
- ja = (JSONArray)v;
- len = ja.length();
- for (i = 0; i < len; i += 1) {
- if (i > 0) {
- b.append('\n');
- }
- b.append(escape(ja.get(i).toString()));
- }
- } else {
- b.append(escape(v.toString()));
- }
+ if (k.equals("content"))
+ {
+ if (v instanceof JSONArray)
+ {
+ ja = (JSONArray) v;
+ len = ja.length();
+ for (i = 0; i < len; i += 1)
+ {
+ if (i > 0)
+ {
+ b.append('\n');
+ }
+ b.append(escape(ja.get(i).toString()));
+ }
+ }
+ else
+ {
+ b.append(escape(v.toString()));
+ }
// Emit an array of similar keys
- } else if (v instanceof JSONArray) {
- ja = (JSONArray)v;
- len = ja.length();
- for (i = 0; i < len; i += 1) {
- b.append(toString(ja.get(i), k));
- }
- } else if (v.equals("")) {
- b.append('<');
- b.append(k);
- b.append("/>");
+ }
+ else if (v instanceof JSONArray)
+ {
+ ja = (JSONArray) v;
+ len = ja.length();
+ for (i = 0; i < len; i += 1)
+ {
+ b.append(toString(ja.get(i), k));
+ }
+ }
+ else if (v.equals(""))
+ {
+ b.append('<');
+ b.append(k);
+ b.append("/>");
// Emit a new tag <k>
- } else {
- b.append(toString(v, k));
- }
- }
- if (tagName != null) {
+ }
+ else
+ {
+ b.append(toString(v, k));
+ }
+ }
+ if (tagName != null)
+ {
// Emit the </tagname> close tag
- b.append("</");
- b.append(tagName);
- b.append('>');
- }
- return b.toString();
+ b.append("</");
+ b.append(tagName);
+ b.append('>');
+ }
+ return b.toString();
// XML does not have good support for arrays. If an array appears in a place
// where XML is lacking, synthesize an <array> element.
- } else if (o instanceof JSONArray) {
- ja = (JSONArray)o;
- len = ja.length();
- for (i = 0; i < len; ++i) {
- b.append(toString(
- ja.opt(i), (tagName == null) ? "array" : tagName));
- }
- return b.toString();
- } else {
- s = (o == null) ? "null" : escape(o.toString());
- return (tagName == null) ? "\"" + s + "\"" :
- (s.length() == 0) ? "<" + tagName + "/>" :
- "<" + tagName + ">" + s + "</" + tagName + ">";
- }
}
+ else if (o instanceof JSONArray)
+ {
+ ja = (JSONArray) o;
+ len = ja.length();
+ for (i = 0; i < len; ++i)
+ {
+ b.append(toString(
+ ja.opt(i), (tagName == null) ? "array" : tagName));
+ }
+ return b.toString();
+ }
+ else
+ {
+ s = (o == null) ? "null" : escape(o.toString());
+ return (tagName == null) ? "\"" + s + "\"" :
+ (s.length() == 0) ? "<" + tagName + "/>" :
+ "<" + tagName + ">" + s + "</" + tagName + ">";
+ }
+ }
}
\ No newline at end of file
Modified: projects/gwt-console/trunk/war/src/main/java/org/json/XMLTokener.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/json/XMLTokener.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/java/org/json/XMLTokener.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -27,339 +27,404 @@
/**
* The XMLTokener extends the JSONTokener to provide additional methods
* for the parsing of XML texts.
+ *
* @author JSON.org
* @version 2008-09-18
*/
-public class XMLTokener extends JSONTokener {
+public class XMLTokener extends JSONTokener
+{
- /** The table of entity values. It initially contains Character values for
- * amp, apos, gt, lt, quot.
- */
- public static final java.util.HashMap entity;
+ /**
+ * The table of entity values. It initially contains Character values for
+ * amp, apos, gt, lt, quot.
+ */
+ public static final java.util.HashMap entity;
- static {
- entity = new java.util.HashMap(8);
- entity.put("amp", XML.AMP);
- entity.put("apos", XML.APOS);
- entity.put("gt", XML.GT);
- entity.put("lt", XML.LT);
- entity.put("quot", XML.QUOT);
- }
+ static
+ {
+ entity = new java.util.HashMap(8);
+ entity.put("amp", XML.AMP);
+ entity.put("apos", XML.APOS);
+ entity.put("gt", XML.GT);
+ entity.put("lt", XML.LT);
+ entity.put("quot", XML.QUOT);
+ }
- /**
- * Construct an XMLTokener from a string.
- * @param s A source string.
- */
- public XMLTokener(String s) {
- super(s);
- }
+ /**
+ * Construct an XMLTokener from a string.
+ *
+ * @param s A source string.
+ */
+ public XMLTokener(String s)
+ {
+ super(s);
+ }
- /**
- * Get the text in the CDATA block.
- * @return The string up to the <code>]]></code>.
- * @throws JSONException If the <code>]]></code> is not found.
- */
- public String nextCDATA() throws JSONException {
- char c;
- int i;
- StringBuffer sb = new StringBuffer();
- for (;;) {
- c = next();
- if (c == 0) {
- throw syntaxError("Unclosed CDATA");
- }
- sb.append(c);
- i = sb.length() - 3;
- if (i >= 0 && sb.charAt(i) == ']' &&
- sb.charAt(i + 1) == ']' && sb.charAt(i + 2) == '>') {
- sb.setLength(i);
- return sb.toString();
- }
- }
+ /**
+ * Get the text in the CDATA block.
+ *
+ * @return The string up to the <code>]]></code>.
+ * @throws JSONException If the <code>]]></code> is not found.
+ */
+ public String nextCDATA() throws JSONException
+ {
+ char c;
+ int i;
+ StringBuffer sb = new StringBuffer();
+ for (; ;)
+ {
+ c = next();
+ if (c == 0)
+ {
+ throw syntaxError("Unclosed CDATA");
+ }
+ sb.append(c);
+ i = sb.length() - 3;
+ if (i >= 0 && sb.charAt(i) == ']' &&
+ sb.charAt(i + 1) == ']' && sb.charAt(i + 2) == '>')
+ {
+ sb.setLength(i);
+ return sb.toString();
+ }
}
+ }
- /**
- * Get the next XML outer token, trimming whitespace. There are two kinds
- * of tokens: the '<' character which begins a markup tag, and the content
- * text between markup tags.
- *
- * @return A string, or a '<' Character, or null if there is no more
- * source text.
- * @throws JSONException
- */
- public Object nextContent() throws JSONException {
- char c;
- StringBuffer sb;
- do {
- c = next();
- } while (Character.isWhitespace(c));
- if (c == 0) {
- return null;
- }
- if (c == '<') {
- return XML.LT;
- }
- sb = new StringBuffer();
- for (;;) {
- if (c == '<' || c == 0) {
- back();
- return sb.toString().trim();
- }
- if (c == '&') {
- sb.append(nextEntity(c));
- } else {
- sb.append(c);
- }
- c = next();
- }
+ /**
+ * Get the next XML outer token, trimming whitespace. There are two kinds
+ * of tokens: the '<' character which begins a markup tag, and the content
+ * text between markup tags.
+ *
+ * @return A string, or a '<' Character, or null if there is no more
+ * source text.
+ * @throws JSONException
+ */
+ public Object nextContent() throws JSONException
+ {
+ char c;
+ StringBuffer sb;
+ do
+ {
+ c = next();
}
+ while (Character.isWhitespace(c));
+ if (c == 0)
+ {
+ return null;
+ }
+ if (c == '<')
+ {
+ return XML.LT;
+ }
+ sb = new StringBuffer();
+ for (; ;)
+ {
+ if (c == '<' || c == 0)
+ {
+ back();
+ return sb.toString().trim();
+ }
+ if (c == '&')
+ {
+ sb.append(nextEntity(c));
+ }
+ else
+ {
+ sb.append(c);
+ }
+ c = next();
+ }
+ }
- /**
- * Return the next entity. These entities are translated to Characters:
- * <code>& ' > < "</code>.
- * @param a An ampersand character.
- * @return A Character or an entity String if the entity is not recognized.
- * @throws JSONException If missing ';' in XML entity.
- */
- public Object nextEntity(char a) throws JSONException {
- StringBuffer sb = new StringBuffer();
- for (;;) {
- char c = next();
- if (Character.isLetterOrDigit(c) || c == '#') {
- sb.append(Character.toLowerCase(c));
- } else if (c == ';') {
- break;
- } else {
- throw syntaxError("Missing ';' in XML entity: &" + sb);
- }
- }
- String s = sb.toString();
- Object e = entity.get(s);
- return e != null ? e : a + s + ";";
+ /**
+ * Return the next entity. These entities are translated to Characters:
+ * <code>& ' > < "</code>.
+ *
+ * @param a An ampersand character.
+ * @return A Character or an entity String if the entity is not recognized.
+ * @throws JSONException If missing ';' in XML entity.
+ */
+ public Object nextEntity(char a) throws JSONException
+ {
+ StringBuffer sb = new StringBuffer();
+ for (; ;)
+ {
+ char c = next();
+ if (Character.isLetterOrDigit(c) || c == '#')
+ {
+ sb.append(Character.toLowerCase(c));
+ }
+ else if (c == ';')
+ {
+ break;
+ }
+ else
+ {
+ throw syntaxError("Missing ';' in XML entity: &" + sb);
+ }
}
+ String s = sb.toString();
+ Object e = entity.get(s);
+ return e != null ? e : a + s + ";";
+ }
- /**
- * Returns the next XML meta token. This is used for skipping over <!...>
- * and <?...?> structures.
- * @return Syntax characters (<code>< > / = ! ?</code>) are returned as
- * Character, and strings and names are returned as Boolean. We don't care
- * what the values actually are.
- * @throws JSONException If a string is not properly closed or if the XML
- * is badly structured.
- */
- public Object nextMeta() throws JSONException {
- char c;
- char q;
- do {
- c = next();
- } while (Character.isWhitespace(c));
- switch (c) {
- case 0:
- throw syntaxError("Misshaped meta tag");
- case '<':
- return XML.LT;
- case '>':
- return XML.GT;
- case '/':
- return XML.SLASH;
- case '=':
- return XML.EQ;
- case '!':
- return XML.BANG;
- case '?':
- return XML.QUEST;
- case '"':
- case '\'':
- q = c;
- for (;;) {
- c = next();
- if (c == 0) {
- throw syntaxError("Unterminated string");
- }
- if (c == q) {
- return Boolean.TRUE;
- }
- }
- default:
- for (;;) {
- c = next();
- if (Character.isWhitespace(c)) {
- return Boolean.TRUE;
- }
- switch (c) {
- case 0:
- case '<':
- case '>':
- case '/':
- case '=':
- case '!':
- case '?':
- case '"':
- case '\'':
- back();
- return Boolean.TRUE;
- }
- }
+ /**
+ * Returns the next XML meta token. This is used for skipping over <!...>
+ * and <?...?> structures.
+ *
+ * @return Syntax characters (<code>< > / = ! ?</code>) are returned as
+ * Character, and strings and names are returned as Boolean. We don't care
+ * what the values actually are.
+ * @throws JSONException If a string is not properly closed or if the XML
+ * is badly structured.
+ */
+ public Object nextMeta() throws JSONException
+ {
+ char c;
+ char q;
+ do
+ {
+ c = next();
+ }
+ while (Character.isWhitespace(c));
+ switch (c)
+ {
+ case 0:
+ throw syntaxError("Misshaped meta tag");
+ case'<':
+ return XML.LT;
+ case'>':
+ return XML.GT;
+ case'/':
+ return XML.SLASH;
+ case'=':
+ return XML.EQ;
+ case'!':
+ return XML.BANG;
+ case'?':
+ return XML.QUEST;
+ case'"':
+ case'\'':
+ q = c;
+ for (; ;)
+ {
+ c = next();
+ if (c == 0)
+ {
+ throw syntaxError("Unterminated string");
+ }
+ if (c == q)
+ {
+ return Boolean.TRUE;
+ }
}
+ default:
+ for (; ;)
+ {
+ c = next();
+ if (Character.isWhitespace(c))
+ {
+ return Boolean.TRUE;
+ }
+ switch (c)
+ {
+ case 0:
+ case'<':
+ case'>':
+ case'/':
+ case'=':
+ case'!':
+ case'?':
+ case'"':
+ case'\'':
+ back();
+ return Boolean.TRUE;
+ }
+ }
}
+ }
- /**
- * Get the next XML Token. These tokens are found inside of angle
- * brackets. It may be one of these characters: <code>/ > = ! ?</code> or it
- * may be a string wrapped in single quotes or double quotes, or it may be a
- * name.
- * @return a String or a Character.
- * @throws JSONException If the XML is not well formed.
- */
- public Object nextToken() throws JSONException {
- char c;
- char q;
- StringBuffer sb;
- do {
- c = next();
- } while (Character.isWhitespace(c));
- switch (c) {
- case 0:
- throw syntaxError("Misshaped element");
- case '<':
- throw syntaxError("Misplaced '<'");
- case '>':
- return XML.GT;
- case '/':
- return XML.SLASH;
- case '=':
- return XML.EQ;
- case '!':
- return XML.BANG;
- case '?':
- return XML.QUEST;
+ /**
+ * Get the next XML Token. These tokens are found inside of angle
+ * brackets. It may be one of these characters: <code>/ > = ! ?</code> or it
+ * may be a string wrapped in single quotes or double quotes, or it may be a
+ * name.
+ *
+ * @return a String or a Character.
+ * @throws JSONException If the XML is not well formed.
+ */
+ public Object nextToken() throws JSONException
+ {
+ char c;
+ char q;
+ StringBuffer sb;
+ do
+ {
+ c = next();
+ }
+ while (Character.isWhitespace(c));
+ switch (c)
+ {
+ case 0:
+ throw syntaxError("Misshaped element");
+ case'<':
+ throw syntaxError("Misplaced '<'");
+ case'>':
+ return XML.GT;
+ case'/':
+ return XML.SLASH;
+ case'=':
+ return XML.EQ;
+ case'!':
+ return XML.BANG;
+ case'?':
+ return XML.QUEST;
// Quoted string
- case '"':
- case '\'':
- q = c;
- sb = new StringBuffer();
- for (;;) {
- c = next();
- if (c == 0) {
- throw syntaxError("Unterminated string");
- }
- if (c == q) {
- return sb.toString();
- }
- if (c == '&') {
- sb.append(nextEntity(c));
- } else {
- sb.append(c);
- }
- }
- default:
+ case'"':
+ case'\'':
+ q = c;
+ sb = new StringBuffer();
+ for (; ;)
+ {
+ c = next();
+ if (c == 0)
+ {
+ throw syntaxError("Unterminated string");
+ }
+ if (c == q)
+ {
+ return sb.toString();
+ }
+ if (c == '&')
+ {
+ sb.append(nextEntity(c));
+ }
+ else
+ {
+ sb.append(c);
+ }
+ }
+ default:
// Name
- sb = new StringBuffer();
- for (;;) {
- sb.append(c);
- c = next();
- if (Character.isWhitespace(c)) {
- return sb.toString();
- }
- switch (c) {
- case 0:
- return sb.toString();
- case '>':
- case '/':
- case '=':
- case '!':
- case '?':
- case '[':
- case ']':
- back();
- return sb.toString();
- case '<':
- case '"':
- case '\'':
- throw syntaxError("Bad character in a name");
- }
- }
+ sb = new StringBuffer();
+ for (; ;)
+ {
+ sb.append(c);
+ c = next();
+ if (Character.isWhitespace(c))
+ {
+ return sb.toString();
+ }
+ switch (c)
+ {
+ case 0:
+ return sb.toString();
+ case'>':
+ case'/':
+ case'=':
+ case'!':
+ case'?':
+ case'[':
+ case']':
+ back();
+ return sb.toString();
+ case'<':
+ case'"':
+ case'\'':
+ throw syntaxError("Bad character in a name");
+ }
}
}
-
-
- /**
- * Skip characters until past the requested string.
- * If it is not found, we are left at the end of the source with a result of false.
- * @param to A string to skip past.
- * @throws JSONException
- */
- public boolean skipPast(String to) throws JSONException {
- boolean b;
- char c;
- int i;
- int j;
- int offset = 0;
- int n = to.length();
- char[] circle = new char[n];
-
- /*
- * First fill the circle buffer with as many characters as are in the
- * to string. If we reach an early end, bail.
+ }
+
+
+ /**
+ * Skip characters until past the requested string.
+ * If it is not found, we are left at the end of the source with a result of false.
+ *
+ * @param to A string to skip past.
+ * @throws JSONException
+ */
+ public boolean skipPast(String to) throws JSONException
+ {
+ boolean b;
+ char c;
+ int i;
+ int j;
+ int offset = 0;
+ int n = to.length();
+ char[] circle = new char[n];
+
+ /*
+ * First fill the circle buffer with as many characters as are in the
+ * to string. If we reach an early end, bail.
+ */
+
+ for (i = 0; i < n; i += 1)
+ {
+ c = next();
+ if (c == 0)
+ {
+ return false;
+ }
+ circle[i] = c;
+ }
+ /*
+ * We will loop, possibly for all of the remaining characters.
*/
-
- for (i = 0; i < n; i += 1) {
- c = next();
- if (c == 0) {
- return false;
- }
- circle[i] = c;
- }
- /*
- * We will loop, possibly for all of the remaining characters.
- */
- for (;;) {
- j = offset;
- b = true;
- /*
- * Compare the circle buffer with the to string.
- */
- for (i = 0; i < n; i += 1) {
- if (circle[j] != to.charAt(i)) {
- b = false;
- break;
- }
- j += 1;
- if (j >= n) {
- j -= n;
- }
- }
- /*
- * If we exit the loop with b intact, then victory is ours.
- */
- if (b) {
- return true;
- }
- /*
- * Get the next character. If there isn't one, then defeat is ours.
- */
- c = next();
- if (c == 0) {
- return false;
- }
- /*
- * Shove the character in the circle buffer and advance the
- * circle offset. The offset is mod n.
- */
- circle[offset] = c;
- offset += 1;
- if (offset >= n) {
- offset -= n;
- }
- }
+ for (; ;)
+ {
+ j = offset;
+ b = true;
+ /*
+ * Compare the circle buffer with the to string.
+ */
+ for (i = 0; i < n; i += 1)
+ {
+ if (circle[j] != to.charAt(i))
+ {
+ b = false;
+ break;
+ }
+ j += 1;
+ if (j >= n)
+ {
+ j -= n;
+ }
+ }
+ /*
+ * If we exit the loop with b intact, then victory is ours.
+ */
+ if (b)
+ {
+ return true;
+ }
+ /*
+ * Get the next character. If there isn't one, then defeat is ours.
+ */
+ c = next();
+ if (c == 0)
+ {
+ return false;
+ }
+ /*
+ * Shove the character in the circle buffer and advance the
+ * circle offset. The offset is mod n.
+ */
+ circle[offset] = c;
+ offset += 1;
+ if (offset >= n)
+ {
+ offset -= n;
+ }
}
+ }
}
Modified: projects/gwt-console/trunk/war/src/main/resources/org/jboss/bpm/console/workspace.txt
===================================================================
--- projects/gwt-console/trunk/war/src/main/resources/org/jboss/bpm/console/workspace.txt 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/main/resources/org/jboss/bpm/console/workspace.txt 2009-01-15 11:05:35 UTC (rev 3644)
@@ -1,3 +1,3 @@
-org.jboss.bpm.console.client.process.ProcessDefinitionListEditor
-org.jboss.bpm.console.client.task.TaskListEditor
-org.jboss.bpm.console.client.report.OverviewReportEditor
\ No newline at end of file
+org.jboss.bpm.console.client.process.ProcessEditor
+org.jboss.bpm.console.client.task.TaskEditor
+org.jboss.bpm.console.client.report.ReportEditor
\ No newline at end of file
Modified: projects/gwt-console/trunk/war/src/test/java/org/jboss/bpm/console/client/GwtTestProcessManagement.java
===================================================================
--- projects/gwt-console/trunk/war/src/test/java/org/jboss/bpm/console/client/GwtTestProcessManagement.java 2009-01-15 10:51:26 UTC (rev 3643)
+++ projects/gwt-console/trunk/war/src/test/java/org/jboss/bpm/console/client/GwtTestProcessManagement.java 2009-01-15 11:05:35 UTC (rev 3644)
@@ -28,8 +28,8 @@
import com.gwtext.client.widgets.ComponentMgr;
import org.jboss.bpm.console.client.model.ProcessDefinitionRef;
import org.jboss.bpm.console.client.process.ProcessDefinitionList;
-import org.jboss.bpm.console.client.process.ProcessDefinitionListEditor;
-import org.jboss.bpm.console.client.process.ProcessInstanceListEditor;
+import org.jboss.bpm.console.client.process.ProcessEditor;
+import org.jboss.bpm.console.client.process.ProcessInstanceListView;
import java.util.HashMap;
import java.util.List;
@@ -44,8 +44,8 @@
{
System.out.println("=== testProcessInstanceEditor ===");
- final ProcessDefinitionListEditor editor = (ProcessDefinitionListEditor)
- ComponentMgr.getComponent(ProcessDefinitionListEditor.ID);
+ final ProcessEditor editor = (ProcessEditor)
+ ComponentMgr.getComponent(ProcessEditor.ID);
Map<String, Object> context = new HashMap<String, Object>();
context.put("editor", editor);
@@ -126,7 +126,7 @@
public void run()
{
- ProcessDefinitionListEditor editor = (ProcessDefinitionListEditor) context.get("editor");
+ ProcessEditor editor = (ProcessEditor) context.get("editor");
editor.resetEditor();
ProcessDefinitionList list = editor.getProcessDefinitionList();
proceedOrFinish();
@@ -148,20 +148,20 @@
public void run()
{
- ProcessDefinitionListEditor editor = (ProcessDefinitionListEditor)context.get("editor");
+ ProcessEditor editor = (ProcessEditor)context.get("editor");
ProcessDefinitionList list = editor.getProcessDefinitionList();
List<ProcessDefinitionRef> processDefinitions = list.getAvailableProcessDefinitions();
ProcessDefinitionRef testPd = getTestProcessDefinition(processDefinitions);
assertNotNull("No test definition given: " +processDefinitions, testPd);
- list.launchEditor(testPd); // will create an instance editor
+ list.launchView(testPd); // will create an instance editor
// lookup instance editor
- String editorId = ProcessInstanceListEditor.createWidgetID(testPd);
- ProcessInstanceListEditor instanceEditor = (ProcessInstanceListEditor)
+ String editorId = ProcessInstanceListView.createWidgetID(testPd);
+ ProcessInstanceListView instanceView = (ProcessInstanceListView)
ComponentMgr.getComponent(editorId);
- assertNotNull("Failed to create instance editor for process", instanceEditor);
+ assertNotNull("Failed to create instance editor for process", instanceView);
// todo: start new instance
System.out.println("FIXME: Implement instance creation test");
More information about the jbpm-commits
mailing list