You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fm...@apache.org on 2011/07/30 22:46:56 UTC
svn commit: r1152515 - in /chemistry/opencmis/trunk:
chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/
chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencm...
Author: fmui
Date: Sat Jul 30 20:46:54 2011
New Revision: 1152515
URL: http://svn.apache.org/viewvc?rev=1152515&view=rev
Log:
CMIS Workbench: added "check specification compliance" button to object panel
Added:
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/ObjectComplianceCheck.java (with props)
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/ObjectComplianceTestGroup.java (with props)
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/SwingReport.java (with props)
Modified:
chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractCmisTest.java
chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTest.java
chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/FatalTestException.java
chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/CoreHtmlReport.java
chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/TextReport.java
chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/XmlReport.java
chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/RootFolderTest.java
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TckDialog.java
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ObjectPanel.java
Modified: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractCmisTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractCmisTest.java?rev=1152515&r1=1152514&r2=1152515&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractCmisTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractCmisTest.java Sat Jul 30 20:46:54 2011
@@ -117,7 +117,7 @@ public abstract class AbstractCmisTest i
results.add(result);
if (result.isFatal()) {
- throw new FatalTestException();
+ throw new FatalTestException(result.getMessage());
}
}
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTest.java?rev=1152515&r1=1152514&r2=1152515&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTest.java Sat Jul 30 20:46:54 2011
@@ -144,6 +144,19 @@ public abstract class AbstractSessionTes
return ri;
}
+ // --- helpers ---
+
+ protected String[] getAllProperties(CmisObject object) {
+ String[] propertiesk = new String[object.getType().getPropertyDefinitions().size()];
+
+ int i = 0;
+ for (String propId : object.getType().getPropertyDefinitions().keySet()) {
+ propertiesk[i++] = propId;
+ }
+
+ return propertiesk;
+ }
+
// --- handy create and delete methods ---
/**
@@ -635,23 +648,25 @@ public abstract class AbstractSessionTes
}
private void checkRelationships(Session session, List<CmisTestResult> results, CmisObject object) {
+ if (object instanceof Relationship) {
+ if (object.getRelationships() != null && !object.getRelationships().isEmpty()) {
+ addResult(results, createResult(FAILURE, "A relationship has relationships!"));
+ return;
+ }
+ }
+
if (object.getRelationships() != null) {
for (Relationship relationship : object.getRelationships()) {
if (relationship == null) {
addResult(results, createResult(FAILURE, "A relationship in the relationship list is null!"));
+ continue;
}
- String[] relPropertiesToCheck = new String[relationship.getType().getPropertyDefinitions().size()];
-
- int i = 0;
- for (String propId : relationship.getType().getPropertyDefinitions().keySet()) {
- relPropertiesToCheck[i++] = propId;
- }
-
+ CmisObject fullRelationshipObject = session.getObject(relationship, SELECT_ALL_NO_CACHE_OC);
addResult(
results,
- checkObject(session, session.getObject(relationship, SELECT_ALL_NO_CACHE_OC),
- relPropertiesToCheck, "Relationship check: " + relationship.getId()));
+ checkObject(session, fullRelationshipObject, getAllProperties(fullRelationshipObject),
+ "Relationship check: " + fullRelationshipObject.getId()));
}
}
}
@@ -742,6 +757,13 @@ public abstract class AbstractSessionTes
addResult(results, checkObject(session, version, properties, "Version check: " + version.getId()));
+ // check first entry
+ if (i == 0) {
+ f = createResult(FAILURE,
+ "First version history entry is not the latest version! Id: " + version.getId());
+ addResult(results, assertIsTrue(version.isLatestVersion(), null, f));
+ }
+
// check version id
f = createResult(FAILURE, "Version series id does not match! Id: " + version.getId());
addResult(results, assertEquals(versionSeriesId, version.getVersionSeriesId(), null, f));
@@ -787,6 +809,18 @@ public abstract class AbstractSessionTes
addResult(results, assertIsFalse(version.isLatestMajorVersion(), null, f));
}
+ // check checked out
+ boolean checkedOut = Boolean.TRUE.equals(doc.isVersionSeriesCheckedOut());
+ if (checkedOut) {
+ f = createResult(FAILURE, "Version series is marked as checked out but the PWC id is not set! Id: "
+ + version.getId());
+ addResult(results, assertStringNotEmpty(doc.getVersionSeriesCheckedOutId(), null, f));
+ } else {
+ f = createResult(FAILURE, "Version series is not marked as checked out but the PWC id is set! Id: "
+ + version.getId());
+ addResult(results, assertNull(doc.getVersionSeriesCheckedOutId(), null, f));
+ }
+
// found origin object?
if (version.getId().equals(object.getId())) {
found = true;
@@ -1672,7 +1706,7 @@ public abstract class AbstractSessionTes
results.add(result);
if (result.isFatal()) {
- throw new FatalTestException();
+ throw new FatalTestException(result.getMessage());
}
}
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/FatalTestException.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/FatalTestException.java?rev=1152515&r1=1152514&r2=1152515&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/FatalTestException.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/FatalTestException.java Sat Jul 30 20:46:54 2011
@@ -19,7 +19,7 @@
package org.apache.chemistry.opencmis.tck.impl;
/**
- * This exception will be thrown if a result is fatal and the test has to
+ * This exception will be thrown if a result is fatal and the test has to be
* stopped.
*/
public class FatalTestException extends RuntimeException {
@@ -28,4 +28,8 @@ public class FatalTestException extends
public FatalTestException() {
super();
}
+
+ public FatalTestException(String msg) {
+ super(msg);
+ }
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/CoreHtmlReport.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/CoreHtmlReport.java?rev=1152515&r1=1152514&r2=1152515&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/CoreHtmlReport.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/CoreHtmlReport.java Sat Jul 30 20:46:54 2011
@@ -19,6 +19,8 @@
package org.apache.chemistry.opencmis.tck.report;
import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
import java.io.Writer;
import java.util.Date;
import java.util.List;
@@ -26,6 +28,7 @@ import java.util.Map;
import java.util.TreeMap;
import org.apache.chemistry.opencmis.commons.SessionParameter;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
import org.apache.chemistry.opencmis.tck.CmisTest;
import org.apache.chemistry.opencmis.tck.CmisTestGroup;
import org.apache.chemistry.opencmis.tck.CmisTestResult;
@@ -54,7 +57,7 @@ public class CoreHtmlReport extends Abst
value = "*****";
}
- writer.write("<tr><td>" + p.getKey() + "</td><td>" + value + "</td></tr>\n");
+ writer.write("<tr><td>" + escape(p.getKey()) + "</td><td>" + escape(value) + "</td></tr>\n");
}
writer.write("</table>\n");
}
@@ -82,7 +85,7 @@ public class CoreHtmlReport extends Abst
}
private void printGroupResults(CmisTestGroup group, Writer writer) throws IOException {
- writer.write("\n<h3>" + group.getName() + "</h3>\n");
+ writer.write("\n<h3>" + escape(group.getName()) + "</h3>\n");
if (group.getTests() != null) {
for (CmisTest test : group.getTests()) {
@@ -92,7 +95,7 @@ public class CoreHtmlReport extends Abst
}
private void printTestResults(CmisTest test, Writer writer) throws IOException {
- writer.write("\n<h4>" + test.getName() + " (" + test.getTime() + " ms)</h4>\n");
+ writer.write("\n<h4>" + escape(test.getName()) + " (" + test.getTime() + " ms)</h4>\n");
if (test.getResults() != null) {
for (CmisTestResult result : test.getResults()) {
@@ -106,28 +109,64 @@ public class CoreHtmlReport extends Abst
private void printResult(CmisTestResult result, Writer writer) throws IOException {
writer.write("<div class=\"tckResult" + result.getStatus().name() + "\">\n");
- writer.write("<b>" + result.getStatus() + "</b>: " + result.getMessage());
+ writer.write("<b>" + result.getStatus() + "</b>: " + escape(result.getMessage()));
if ((result.getStackTrace() != null) && (result.getStackTrace().length > 0)) {
- writer.write(" (" + result.getStackTrace()[0].getFileName() + ":"
+ writer.write(" (" + escape(result.getStackTrace()[0].getFileName()) + ":"
+ result.getStackTrace()[0].getLineNumber() + ")");
+ }
+
+ writer.write("<br/>\n");
- if (result.getStatus() == CmisTestResultStatus.UNEXPECTED_EXCEPTION) {
- writer.write("\n<!--\n");
- for (StackTraceElement ste : result.getStackTrace()) {
- writer.write(ste.getFileName() + ":" + ste.getLineNumber() + " (");
- writer.write(ste.getClassName() + "." + ste.getMethodName() + "())\n");
+ if (result.getStatus() == CmisTestResultStatus.UNEXPECTED_EXCEPTION && result.getException() != null) {
+ final Writer sw = new StringWriter();
+ final PrintWriter pw = new PrintWriter(sw);
+ result.getException().printStackTrace(pw);
+
+ writer.write("\n<!--\nStacktrace:\n\n" + escape(sw.toString()) + "-->\n");
+
+ if (result.getException() instanceof CmisBaseException) {
+ CmisBaseException cbe = (CmisBaseException) result.getException();
+ if (cbe.getErrorContent() != null) {
+ writer.write("\n<!--\nError Content:\n\n" + escape(cbe.getErrorContent()) + "-->\n");
}
- writer.write("-->\n");
}
}
- writer.write("<br/>\n");
-
for (CmisTestResult child : result.getChildren()) {
printResult(child, writer);
}
writer.write("</div>\n");
}
+
+ protected String escape(String s) {
+ if (s == null) {
+ return "";
+ }
+
+ StringBuilder sb = new StringBuilder();
+
+ for (int i = 0; i < s.length(); i++) {
+ char c = s.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();
+ }
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/TextReport.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/TextReport.java?rev=1152515&r1=1152514&r2=1152515&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/TextReport.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/TextReport.java Sat Jul 30 20:46:54 2011
@@ -19,15 +19,18 @@
package org.apache.chemistry.opencmis.tck.report;
import java.io.IOException;
+import java.io.PrintWriter;
import java.io.Writer;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
import org.apache.chemistry.opencmis.tck.CmisTest;
import org.apache.chemistry.opencmis.tck.CmisTestGroup;
import org.apache.chemistry.opencmis.tck.CmisTestResult;
+import org.apache.chemistry.opencmis.tck.CmisTestResultStatus;
/**
* Text Report.
@@ -97,6 +100,19 @@ public class TextReport extends Abstract
writer.write("\n");
+ if (result.getStatus() == CmisTestResultStatus.UNEXPECTED_EXCEPTION && result.getException() != null) {
+ writer.write("\nStacktrace:\n\n");
+ result.getException().printStackTrace(new PrintWriter(writer));
+
+ if (result.getException() instanceof CmisBaseException) {
+ CmisBaseException cbe = (CmisBaseException) result.getException();
+ if (cbe.getErrorContent() != null) {
+ writer.write("\nError Content:\n\n");
+ writer.write(cbe.getErrorContent());
+ }
+ }
+ }
+
if (result.getException() != null) {
printIntend(level, writer);
writer.write("Exception: " + result.getException().getMessage() + "\n");
Modified: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/XmlReport.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/XmlReport.java?rev=1152515&r1=1152514&r2=1152515&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/XmlReport.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/report/XmlReport.java Sat Jul 30 20:46:54 2011
@@ -68,7 +68,9 @@ public class XmlReport extends AbstractC
for (Map.Entry<String, String> p : (new TreeMap<String, String>(parameters)).entrySet()) {
xml.writeStartElement(TAG_PARAMETER);
xml.writeAttribute(ATTR_KEY, p.getKey());
- xml.writeAttribute(ATTR_VALUE, p.getValue());
+ if (p.getValue() != null) {
+ xml.writeAttribute(ATTR_VALUE, p.getValue());
+ }
xml.writeEndElement();
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/RootFolderTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/RootFolderTest.java?rev=1152515&r1=1152514&r2=1152515&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/RootFolderTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/RootFolderTest.java Sat Jul 30 20:46:54 2011
@@ -63,14 +63,7 @@ public class RootFolderTest extends Abst
return;
}
- String[] propertiesToCheck = new String[rootFolder.getType().getPropertyDefinitions().size()];
-
- int i = 0;
- for (String propId : rootFolder.getType().getPropertyDefinitions().keySet()) {
- propertiesToCheck[i++] = propId;
- }
-
- addResult(checkObject(session, rootFolder, propertiesToCheck, "Root folder object spec compliance"));
+ addResult(checkObject(session, rootFolder, getAllProperties(rootFolder), "Root folder object spec compliance"));
// folder and path
failure = createResult(FAILURE,
Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TckDialog.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TckDialog.java?rev=1152515&r1=1152514&r2=1152515&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TckDialog.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TckDialog.java Sat Jul 30 20:46:54 2011
@@ -20,12 +20,11 @@ package org.apache.chemistry.opencmis.wo
import java.awt.BorderLayout;
import java.awt.Component;
-import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
-import java.io.File;
+import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
@@ -47,8 +46,8 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.tck.CmisTest;
import org.apache.chemistry.opencmis.tck.CmisTestGroup;
import org.apache.chemistry.opencmis.tck.CmisTestProgressMonitor;
-import org.apache.chemistry.opencmis.tck.report.HtmlReport;
import org.apache.chemistry.opencmis.tck.runner.AbstractRunner;
+import org.apache.chemistry.opencmis.workbench.checks.SwingReport;
import org.apache.chemistry.opencmis.workbench.model.ClientModel;
/**
@@ -291,21 +290,8 @@ public class TckDialog {
@Override
public void done() {
try {
- // create report
- File tempReportFile = File.createTempFile("cmistck", ".html");
- tempReportFile.deleteOnExit();
-
- HtmlReport report = new HtmlReport();
- report.createReport(runner.getParameters(), runner.getGroups(), tempReportFile);
-
- // show report
- Desktop desktop = Desktop.getDesktop();
- if (!desktop.isSupported(Desktop.Action.OPEN)) {
- JOptionPane.showMessageDialog(owner, "Report: " + tempReportFile.getAbsolutePath(), "Report",
- JOptionPane.INFORMATION_MESSAGE);
- } else {
- desktop.open(tempReportFile);
- }
+ SwingReport report = new SwingReport(null, 700, 500);
+ report.createReport(runner.getParameters(), runner.getGroups(), (Writer) null);
} catch (Exception e) {
JOptionPane.showMessageDialog(owner, "Error: " + e.getMessage(), "Report Error",
JOptionPane.ERROR_MESSAGE);
Added: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/ObjectComplianceCheck.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/ObjectComplianceCheck.java?rev=1152515&view=auto
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/ObjectComplianceCheck.java (added)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/ObjectComplianceCheck.java Sat Jul 30 20:46:54 2011
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.chemistry.opencmis.workbench.checks;
+
+import java.util.Map;
+
+import org.apache.chemistry.opencmis.client.api.CmisObject;
+import org.apache.chemistry.opencmis.client.api.Document;
+import org.apache.chemistry.opencmis.client.api.Folder;
+import org.apache.chemistry.opencmis.client.api.Session;
+import org.apache.chemistry.opencmis.tck.CmisTestResultStatus;
+import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
+
+/**
+ * This class checks an object for CMIS specification compliance.
+ */
+public class ObjectComplianceCheck extends AbstractSessionTest {
+
+ private String objectId;
+
+ public ObjectComplianceCheck(String objectId) throws Exception {
+ this.objectId = objectId;
+ }
+
+ @Override
+ public void init(Map<String, String> parameters) {
+ super.init(parameters);
+ setName("Object Compliance Check");
+ }
+
+ @Override
+ public void run(Session session) throws Exception {
+ CmisObject object = session.getObject(objectId);
+ String[] propertiesToCheck = getAllProperties(object);
+
+ addResult(checkObject(session, object, propertiesToCheck, "Object check: " + object.getId()));
+
+ if (object instanceof Document) {
+ addResult(checkVersionHistory(session, object, propertiesToCheck,
+ "Version history check: " + object.getId()));
+ } else if (object instanceof Folder) {
+ addResult(checkChildren(session, (Folder) object, "Folder children check: " + object.getId()));
+ }
+
+ if (getResults().isEmpty()) {
+ addResult(createResult(CmisTestResultStatus.OK, "Object seems to be compliant! Id: " + object.getId()));
+ }
+ }
+}
Propchange: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/ObjectComplianceCheck.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/ObjectComplianceTestGroup.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/ObjectComplianceTestGroup.java?rev=1152515&view=auto
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/ObjectComplianceTestGroup.java (added)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/ObjectComplianceTestGroup.java Sat Jul 30 20:46:54 2011
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.chemistry.opencmis.workbench.checks;
+
+import java.util.Map;
+
+import org.apache.chemistry.opencmis.tck.impl.AbstractCmisTestGroup;
+
+public class ObjectComplianceTestGroup extends AbstractCmisTestGroup {
+
+ private String objectId;
+
+ public ObjectComplianceTestGroup(Map<String, String> parameters, String objectId) throws Exception {
+ this.objectId = objectId;
+ init(parameters);
+ }
+
+ @Override
+ public void init(Map<String, String> parameters) throws Exception {
+ super.init(parameters);
+
+ setName("Object Compliance Test Group");
+
+ addTest(new ObjectComplianceCheck(objectId));
+ }
+}
Propchange: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/ObjectComplianceTestGroup.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/SwingReport.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/SwingReport.java?rev=1152515&view=auto
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/SwingReport.java (added)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/SwingReport.java Sat Jul 30 20:46:54 2011
@@ -0,0 +1,273 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.chemistry.opencmis.workbench.checks;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Desktop;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.Graphics;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.Writer;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.Icon;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTree;
+import javax.swing.SwingConstants;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeCellRenderer;
+
+import org.apache.chemistry.opencmis.tck.CmisTest;
+import org.apache.chemistry.opencmis.tck.CmisTestGroup;
+import org.apache.chemistry.opencmis.tck.CmisTestReport;
+import org.apache.chemistry.opencmis.tck.CmisTestResult;
+import org.apache.chemistry.opencmis.tck.report.AbstractCmisTestReport;
+import org.apache.chemistry.opencmis.tck.report.HtmlReport;
+import org.apache.chemistry.opencmis.tck.report.TextReport;
+import org.apache.chemistry.opencmis.tck.report.XmlReport;
+
+/**
+ * Swing Report.
+ */
+public class SwingReport extends AbstractCmisTestReport {
+
+ private static final Icon GROUP_ICON = new ColorIcon(Color.GRAY);
+ private static final Icon TEST_ICON = new ColorIcon(Color.BLUE);
+ private static final Icon STATUS_OK_ICON = new ColorIcon(Color.GREEN);
+ private static final Icon STATUS_WARNING_ICON = new ColorIcon(Color.YELLOW);
+ private static final Icon STATUS_FAILURE_ICON = new ColorIcon(Color.RED);
+ private static final Icon OTHER_ICON = new ColorIcon(Color.LIGHT_GRAY);
+
+ private final Frame owner;
+ private final int width;
+ private final int height;
+ private Map<String, String> parameters;
+ private List<CmisTestGroup> groups;
+
+ public SwingReport(Frame owner, int width, int height) {
+ this.owner = owner;
+ this.width = width;
+ this.height = height;
+ }
+
+ @Override
+ public void createReport(Map<String, String> parameters, List<CmisTestGroup> groups, Writer writer)
+ throws Exception {
+ this.parameters = parameters;
+ this.groups = groups;
+ new SwingReportDialog();
+ }
+
+ /**
+ * Report dialog.
+ */
+ private class SwingReportDialog extends JDialog {
+
+ private static final long serialVersionUID = 1L;
+
+ public SwingReportDialog() {
+ super(owner, "Test Report");
+ createGUI();
+ }
+
+ private void createGUI() {
+ setPreferredSize(new Dimension(width, height));
+ setMinimumSize(new Dimension(width, height));
+
+ setLayout(new BorderLayout());
+
+ DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Groups");
+
+ for (CmisTestGroup group : groups) {
+ DefaultMutableTreeNode groupNode = new DefaultMutableTreeNode(group);
+ rootNode.add(groupNode);
+ for (CmisTest test : group.getTests()) {
+ DefaultMutableTreeNode testNode = new DefaultMutableTreeNode(test);
+ groupNode.add(testNode);
+ populateResultBranch(testNode, test.getResults());
+ }
+ }
+
+ JTree groupTree = new JTree(rootNode);
+ groupTree.setRootVisible(false);
+ groupTree.setCellRenderer(new ReportTreeCellRenderer());
+
+ for (int i = 0; i < groupTree.getRowCount(); i++) {
+ groupTree.expandRow(i);
+ }
+
+ add(new JScrollPane(groupTree), BorderLayout.CENTER);
+
+ final JPanel reportPanel = new JPanel();
+ reportPanel.add(new JLabel("Open report as "));
+ final JComboBox reportType = new JComboBox(new Object[] { "HTML", "Text", "XML" });
+ reportPanel.add(reportType);
+ final JButton reportButton = new JButton("go");
+ reportPanel.add(reportButton);
+
+ reportButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent event) {
+ try {
+ // create report
+ File tempReportFile = null;
+ CmisTestReport report = null;
+
+ switch (reportType.getSelectedIndex()) {
+ case 0:
+ tempReportFile = File.createTempFile("cmistck", ".html");
+ report = new HtmlReport();
+ break;
+ case 1:
+ tempReportFile = File.createTempFile("cmistck", ".txt");
+ report = new TextReport();
+ break;
+ case 2:
+ tempReportFile = File.createTempFile("cmistck", ".xml");
+ report = new XmlReport();
+ break;
+ }
+
+ tempReportFile.deleteOnExit();
+ report.createReport(parameters, groups, tempReportFile);
+
+ // show report
+ Desktop desktop = Desktop.getDesktop();
+ if (!desktop.isSupported(Desktop.Action.OPEN)) {
+ JOptionPane.showMessageDialog(owner, "Report: " + tempReportFile.getAbsolutePath(),
+ "Report", JOptionPane.INFORMATION_MESSAGE);
+ } else {
+ desktop.open(tempReportFile);
+ }
+ } catch (Exception e) {
+ JOptionPane.showMessageDialog(owner, "Error: " + e.getMessage(), "Report Error",
+ JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ });
+
+ add(reportPanel, BorderLayout.PAGE_END);
+
+ setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+ pack();
+ setLocationRelativeTo(null);
+ setVisible(true);
+ }
+
+ private void populateResultBranch(DefaultMutableTreeNode parent, List<CmisTestResult> results) {
+ if (results == null) {
+ return;
+ }
+
+ for (CmisTestResult result : results) {
+ DefaultMutableTreeNode resultNode = new DefaultMutableTreeNode(result);
+ parent.add(resultNode);
+ populateResultBranch(resultNode, result.getChildren());
+ }
+ }
+
+ private class ReportTreeCellRenderer extends DefaultTreeCellRenderer {
+
+ private static final long serialVersionUID = 1L;
+
+ public ReportTreeCellRenderer() {
+ }
+
+ public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded,
+ boolean leaf, int row, boolean hasFocus) {
+ super.getTreeCellRendererComponent(tree, "", sel, expanded, leaf, row, hasFocus);
+
+ DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
+
+ if (node.getUserObject() instanceof CmisTestGroup) {
+ setText(((CmisTestGroup) node.getUserObject()).getName());
+ setIcon(GROUP_ICON);
+ } else if (node.getUserObject() instanceof CmisTest) {
+ setText(((CmisTest) node.getUserObject()).getName());
+ setIcon(TEST_ICON);
+ } else if (node.getUserObject() instanceof CmisTestResult) {
+ CmisTestResult result = (CmisTestResult) node.getUserObject();
+
+ String text = "<html><b>" + result.getStatus() + ": " + result.getMessage() + "</b>";
+ if ((result.getStackTrace() != null) && (result.getStackTrace().length > 0)) {
+ text += " (" + result.getStackTrace()[0].getFileName() + ":"
+ + result.getStackTrace()[0].getLineNumber() + ")";
+ }
+ setText(text);
+
+ switch (result.getStatus()) {
+ case OK:
+ setIcon(STATUS_OK_ICON);
+ break;
+ case WARNING:
+ setIcon(STATUS_WARNING_ICON);
+ break;
+ case FAILURE:
+ case UNEXPECTED_EXCEPTION:
+ setIcon(STATUS_FAILURE_ICON);
+ break;
+ default:
+ setIcon(OTHER_ICON);
+ }
+ } else {
+ setText(value.toString());
+ setIcon(OTHER_ICON);
+ }
+
+ setVerticalTextPosition(SwingConstants.TOP);
+
+ return this;
+ }
+ }
+ }
+
+ private static class ColorIcon implements Icon {
+
+ private final Color color;
+
+ public ColorIcon(Color color) {
+ this.color = color;
+ }
+
+ public void paintIcon(Component c, Graphics g, int x, int y) {
+ g.setColor(color);
+ g.fillRect(0, 0, getIconWidth(), getIconHeight());
+ }
+
+ public int getIconWidth() {
+ return 8;
+ }
+
+ public int getIconHeight() {
+ return 18;
+ }
+ }
+}
Propchange: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/checks/SwingReport.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ObjectPanel.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ObjectPanel.java?rev=1152515&r1=1152514&r2=1152515&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ObjectPanel.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ObjectPanel.java Sat Jul 30 20:46:54 2011
@@ -28,9 +28,12 @@ import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.io.Writer;
+import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import javax.script.ScriptEngineFactory;
@@ -49,7 +52,10 @@ import org.apache.chemistry.opencmis.cli
import org.apache.chemistry.opencmis.client.api.Folder;
import org.apache.chemistry.opencmis.client.api.Session;
import org.apache.chemistry.opencmis.client.bindings.spi.atompub.LinkAccess;
+import org.apache.chemistry.opencmis.tck.CmisTestGroup;
import org.apache.chemistry.opencmis.workbench.ClientHelper;
+import org.apache.chemistry.opencmis.workbench.checks.ObjectComplianceTestGroup;
+import org.apache.chemistry.opencmis.workbench.checks.SwingReport;
import org.apache.chemistry.opencmis.workbench.model.ClientModel;
import org.apache.chemistry.opencmis.workbench.model.ClientModelEvent;
import org.apache.chemistry.opencmis.workbench.model.ObjectListener;
@@ -70,7 +76,9 @@ public class ObjectPanel extends InfoPan
private JTextField contentUrlField;
private InfoList paths;
private InfoList allowableActionsList;
+ private JPanel buttonPanel;
private JButton refreshButton;
+ private JButton checkButton;
private JPanel scriptPanel;
private JButton scriptOpenButton;
private JButton scriptRunButton;
@@ -106,6 +114,7 @@ public class ObjectPanel extends InfoPan
contentUrlField.setText("");
allowableActionsList.removeAll();
refreshButton.setEnabled(false);
+ checkButton.setEnabled(false);
scriptPanel.setVisible(false);
} else {
try {
@@ -176,6 +185,7 @@ public class ObjectPanel extends InfoPan
}
refreshButton.setEnabled(true);
+ checkButton.setEnabled(true);
if (object instanceof Document) {
String name = object.getName().toLowerCase();
@@ -207,21 +217,30 @@ public class ObjectPanel extends InfoPan
pwcField = addId("PWC:");
contentUrlField = addLink("Content URL:");
allowableActionsList = addComponent("Allowable Actions:", new InfoList());
- refreshButton = addComponent("", new JButton("Refresh"));
+
+ buttonPanel = addComponent("", new JPanel(new BorderLayout()));
+ buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS));
+ buttonPanel.setOpaque(false);
+
+ refreshButton = new JButton("Refresh");
refreshButton.setEnabled(false);
+ buttonPanel.add(refreshButton);
+ checkButton = new JButton("Check specification compliance");
+ checkButton.setEnabled(false);
+ buttonPanel.add(checkButton);
scriptPanel = addComponent("", new JPanel(new BorderLayout()));
scriptPanel.setOpaque(false);
scriptPanel.setVisible(false);
- JPanel buttonPanel = new JPanel();
- buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS));
- buttonPanel.setOpaque(false);
- scriptPanel.add(buttonPanel, BorderLayout.PAGE_START);
+ JPanel scriptButtonPanel = new JPanel();
+ scriptButtonPanel.setLayout(new BoxLayout(scriptButtonPanel, BoxLayout.LINE_AXIS));
+ scriptButtonPanel.setOpaque(false);
+ scriptPanel.add(scriptButtonPanel, BorderLayout.PAGE_START);
scriptOpenButton = new JButton("Open Script");
- buttonPanel.add(scriptOpenButton);
+ scriptButtonPanel.add(scriptOpenButton);
scriptRunButton = new JButton("Run Script");
- buttonPanel.add(scriptRunButton);
+ scriptButtonPanel.add(scriptRunButton);
scriptOutput = new JTextArea(null, 1, 80);
scriptOutput.setEditable(false);
@@ -243,6 +262,30 @@ public class ObjectPanel extends InfoPan
}
});
+ checkButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ try {
+ setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+
+ Map<String, String> parameters = new HashMap<String, String>(getClientModel().getClientSession()
+ .getSessionParameters());
+ String objectId = getClientModel().getCurrentObject().getId();
+
+ ObjectComplianceTestGroup octg = new ObjectComplianceTestGroup(parameters, objectId);
+ octg.run();
+
+ List<CmisTestGroup> groups = new ArrayList<CmisTestGroup>();
+ groups.add(octg);
+ SwingReport report = new SwingReport(null, 700, 500);
+ report.createReport(parameters, groups, (Writer) null);
+ } catch (Exception ex) {
+ ClientHelper.showError(null, ex);
+ } finally {
+ setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+ }
+ }
+ });
+
scriptOpenButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {