You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fg...@apache.org on 2010/03/08 12:18:22 UTC
svn commit: r920275 - in /incubator/chemistry/trunk/chemistry:
chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/
chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/
chemistry-commons/src/main/antlr3/org/apache/chem...
Author: fguillaume
Date: Mon Mar 8 11:18:21 2010
New Revision: 920275
URL: http://svn.apache.org/viewvc?rev=920275&view=rev
Log:
CMIS-147: Implement datetime and boolean literals in CMISQL parser
Removed:
incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/ContentManagerException.java
Modified:
incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPObject.java
incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPRepositoryService.java
incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/Connector.java
incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlLexer.g
incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlParser.g
incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/impl/simple/CmisSqlSimpleWalker.g
incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/gunit/org/apache/chemistry/cmissql/CmisSql.testsuite
incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/java/org/apache/chemistry/impl/simple/TestSimpleRepository.java
Modified: incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPObject.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPObject.java?rev=920275&r1=920274&r2=920275&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPObject.java (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPObject.java Mon Mar 8 11:18:21 2010
@@ -223,18 +223,14 @@
}
public void save() {
- try {
- if (entry.isCreation()) {
- create();
- } else {
- update();
- }
- } catch (ContentManagerException e) { // TODO
- throw new RuntimeException(e);
+ if (entry.isCreation()) {
+ create();
+ } else {
+ update();
}
}
- protected void create() throws ContentManagerException {
+ protected void create() {
// this link value is local, set by APPConnection#newDocument
String href = entry.getLink(AtomPub.LINK_UP);
if (href == null) {
@@ -246,7 +242,7 @@
entry = entry.connection.connector.postEntry(href, null, entry);
}
- protected void update() throws ContentManagerException {
+ protected void update() {
String href = entry.getEditLink();
if (href == null) {
throw new CMISRuntimeException("Missing edit link");
Modified: incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPRepositoryService.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPRepositoryService.java?rev=920275&r1=920274&r2=920275&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPRepositoryService.java (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/APPRepositoryService.java Mon Mar 8 11:18:21 2010
@@ -82,12 +82,12 @@
repos = connector.getServiceDocument(url);
}
- public Repository getDefaultRepository() throws ContentManagerException {
+ public Repository getDefaultRepository() {
loadRepositories();
return repos.size() == 0 ? null : repos.get(0);
}
- public Repository getRepository(String id) throws ContentManagerException {
+ public Repository getRepository(String id) {
loadRepositories();
for (Repository repository : repos) {
if (repository.getId().equals(id)) {
Modified: incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/Connector.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/Connector.java?rev=920275&r1=920274&r2=920275&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/Connector.java (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/Connector.java Mon Mar 8 11:18:21 2010
@@ -27,6 +27,7 @@
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamException;
+import org.apache.chemistry.CMISRuntimeException;
import org.apache.chemistry.ConstraintViolationException;
import org.apache.chemistry.ContentStream;
import org.apache.chemistry.Inclusion;
@@ -77,13 +78,13 @@
client.executeMethod(method);
int status = method.getStatusCode();
if (status >= HttpStatus.SC_BAD_REQUEST) {
- throw new ContentManagerException(
+ throw new CMISRuntimeException(
"Remote server returned error code: " + status);
}
return new APPServiceDocumentReader().read(ctx,
method.getResponseBodyAsStream());
} catch (IOException e) {
- throw new ContentManagerException(e);
+ throw new CMISRuntimeException(e);
} finally {
method.releaseConnection();
}
@@ -109,14 +110,14 @@
client.executeMethod(method);
int status = method.getStatusCode();
if (status >= HttpStatus.SC_BAD_REQUEST) {
- throw new ContentManagerException(
+ throw new CMISRuntimeException(
"Remote server returned error code: " + status);
}
return reader.read(ctx, method.getResponseBodyAsStream());
} catch (IOException e) {
- throw new ContentManagerException(e);
+ throw new CMISRuntimeException(e);
} catch (XMLStreamException e) {
- throw new ContentManagerException(e);
+ throw new CMISRuntimeException(e);
} finally {
method.releaseConnection();
}
@@ -150,14 +151,14 @@
throw new ConstraintViolationException(msg);
}
if (status >= HttpStatus.SC_BAD_REQUEST) {
- throw new ContentManagerException(
+ throw new CMISRuntimeException(
"Remote server returned error code: " + status);
}
return reader.read(ctx, method.getResponseBodyAsStream());
} catch (IOException e) {
- throw new ContentManagerException(e);
+ throw new CMISRuntimeException(e);
} catch (XMLStreamException e) {
- throw new ContentManagerException(e);
+ throw new CMISRuntimeException(e);
} finally {
method.releaseConnection();
}
@@ -174,7 +175,7 @@
throw new ConstraintViolationException("No content stream");
}
if (status >= HttpStatus.SC_BAD_REQUEST) {
- throw new ContentManagerException(
+ throw new CMISRuntimeException(
"Remote server returned error code: " + status);
}
InputStream is = method.getResponseBodyAsStream();
@@ -191,7 +192,6 @@
return getObject(href, "", new AllowableActionsReader());
}
-
public APPObjectEntry putEntry(String href, Header header,
APPObjectEntry entry) {
RequestEntity requestEntity = new XmlObjectWriterRequestEntity<ObjectEntry>(
@@ -222,7 +222,7 @@
client.executeMethod(method);
int status = method.getStatusCode();
if (status >= HttpStatus.SC_BAD_REQUEST) {
- throw new ContentManagerException(
+ throw new CMISRuntimeException(
"Remote server returned error code: " + status);
}
if (requestEntity instanceof InputStreamRequestEntity) {
@@ -233,9 +233,9 @@
method.getResponseBodyAsStream());
}
} catch (IOException e) {
- throw new ContentManagerException(e);
+ throw new CMISRuntimeException(e);
} catch (XMLStreamException e) {
- throw new ContentManagerException(e);
+ throw new CMISRuntimeException(e);
} finally {
method.releaseConnection();
}
@@ -256,7 +256,7 @@
client.executeMethod(method);
int status = method.getStatusCode();
if (status != HttpStatus.SC_CREATED) {
- throw new ContentManagerException(
+ throw new CMISRuntimeException(
"Remote server returned error code: " + status);
}
APPObjectEntry newEntry = new APPObjectEntryReader().read(ctx,
@@ -265,7 +265,7 @@
Header loc = method.getResponseHeader("Location");
Header cloc = method.getResponseHeader("Content-Location");
if (loc == null) {
- throw new ContentManagerException(
+ throw new CMISRuntimeException(
"Remote server failed to return a Location header");
}
if (newEntry == null || !loc.equals(cloc)) {
@@ -275,16 +275,16 @@
// ok
newEntry = getEntry(loc.getValue(), loc.getValue());
if (newEntry == null) {
- throw new ContentManagerException(
+ throw new CMISRuntimeException(
"Remote server failed to return an entry for Location: "
+ loc);
}
}
return newEntry;
} catch (IOException e) {
- throw new ContentManagerException(e);
+ throw new CMISRuntimeException(e);
} catch (XMLStreamException e) {
- throw new ContentManagerException(e);
+ throw new CMISRuntimeException(e);
} finally {
method.releaseConnection();
}
@@ -301,15 +301,15 @@
client.executeMethod(method);
int status = method.getStatusCode();
if (status >= HttpStatus.SC_BAD_REQUEST) {
- throw new ContentManagerException(
+ throw new CMISRuntimeException(
"Remote server returned error code: " + status);
}
return new APPObjectFeedReader().read(ctx,
method.getResponseBodyAsStream());
} catch (IOException e) {
- throw new ContentManagerException(e);
+ throw new CMISRuntimeException(e);
} catch (XMLStreamException e) {
- throw new ContentManagerException(e);
+ throw new CMISRuntimeException(e);
} finally {
method.releaseConnection();
}
@@ -331,11 +331,11 @@
method.getStatusLine().getReasonPhrase());
}
if (status >= HttpStatus.SC_BAD_REQUEST) {
- throw new ContentManagerException(
+ throw new CMISRuntimeException(
"Remote server returned error code: " + status);
}
} catch (IOException e) {
- throw new ContentManagerException(e);
+ throw new CMISRuntimeException(e);
} finally {
method.releaseConnection();
}
Modified: incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlLexer.g
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlLexer.g?rev=920275&r1=920274&r2=920275&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlLexer.g (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlLexer.g Mon Mar 8 11:18:21 2010
@@ -90,6 +90,7 @@
SCORE : ('S'|'s')('C'|'c')('O'|'o')('R'|'r')('E'|'e');
IN_FOLDER : ('I'|'i')('N'|'n')'_'('F'|'f')('O'|'o')('L'|'l')('D'|'d')('E'|'e')('R'|'r');
IN_TREE : ('I'|'i')('N'|'n')'_'('T'|'t')('R'|'r')('E'|'e')('E'|'e');
+TIMESTAMP : 'TIMESTAMP'|'timestamp';
STAR : '*';
LPAR : '(';
@@ -103,13 +104,17 @@
LTEQ : '<=';
GTEQ : '>=';
-ID :
- ('a'..'z'|'A'..'Z'|'_')
- ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|':')*
- ;
+BOOL_LIT : 'TRUE' | 'true' | 'FALSE' | 'false';
NUM_LIT : '0' | '-'? ('1'..'9')('0'..'9')*;
STRING_LIT : '\'' (~'\''|'\'\'')* '\'';
WS : ( ' ' | '\t' | '\r'? '\n' )+ { $channel=HIDDEN; };
+
+TIME_LIT : TIMESTAMP WS STRING_LIT;
+
+ID :
+ ('a'..'z'|'A'..'Z'|'_')
+ ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|':')*
+ ;
Modified: incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlParser.g
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlParser.g?rev=920275&r1=920274&r2=920275&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlParser.g (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlParser.g Mon Mar 8 11:18:21 2010
@@ -179,6 +179,8 @@
literal:
NUM_LIT
| STRING_LIT
+ | TIME_LIT
+ | BOOL_LIT
;
in_predicate:
Modified: incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/impl/simple/CmisSqlSimpleWalker.g
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/impl/simple/CmisSqlSimpleWalker.g?rev=920275&r1=920274&r2=920275&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/impl/simple/CmisSqlSimpleWalker.g (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/impl/simple/CmisSqlSimpleWalker.g Mon Mar 8 11:18:21 2010
@@ -49,6 +49,7 @@
package org.apache.chemistry.impl.simple;
import org.apache.chemistry.impl.simple.SimpleData;
+import org.apache.chemistry.util.GregorianCalendar;
}
@members {
@@ -261,6 +262,20 @@
String s = $STRING_LIT.text;
$value = s.substring(1, s.length() - 1);
}
+ | TIME_LIT
+ {
+ String s = $TIME_LIT.text;
+ s = s.substring(s.indexOf('\'') + 1, s.length() - 1);
+ try {
+ $value = GregorianCalendar.fromAtomPub(s);
+ } catch (IllegalArgumentException e) {
+ throw new UnwantedTokenException(Token.INVALID_TOKEN_TYPE, input);
+ }
+ }
+ | BOOL_LIT
+ {
+ $value = Boolean.valueOf($BOOL_LIT.text);
+ }
;
order_by_clause:
Modified: incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/gunit/org/apache/chemistry/cmissql/CmisSql.testsuite
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/gunit/org/apache/chemistry/cmissql/CmisSql.testsuite?rev=920275&r1=920274&r2=920275&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/gunit/org/apache/chemistry/cmissql/CmisSql.testsuite (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/gunit/org/apache/chemistry/cmissql/CmisSql.testsuite Mon Mar 8 11:18:21 2010
@@ -52,6 +52,17 @@
"abc'" FAIL
"'ab'c'" FAIL
+BOOL_LIT:
+"TRUE" OK
+"true" OK
+"FALSE" OK
+"false" OK
+
+TIME_LIT:
+"TIMESTAMP '2010-01-01Z01:01:01.000Z'" OK
+"timestamp '123'" OK
+"TIMESTAMP 123" FAIL
+
// ----- Parser tests -----
literal:
Modified: incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/java/org/apache/chemistry/impl/simple/TestSimpleRepository.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/java/org/apache/chemistry/impl/simple/TestSimpleRepository.java?rev=920275&r1=920274&r2=920275&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/java/org/apache/chemistry/impl/simple/TestSimpleRepository.java (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/java/org/apache/chemistry/impl/simple/TestSimpleRepository.java Mon Mar 8 11:18:21 2010
@@ -26,6 +26,7 @@
import org.apache.chemistry.BaseType;
import org.apache.chemistry.CMISObject;
+import org.apache.chemistry.CMISRuntimeException;
import org.apache.chemistry.CapabilityJoin;
import org.apache.chemistry.CapabilityQuery;
import org.apache.chemistry.Connection;
@@ -41,6 +42,7 @@
import org.apache.chemistry.Type;
import org.apache.chemistry.Unfiling;
import org.apache.chemistry.Updatability;
+import org.apache.chemistry.util.GregorianCalendar;
public class TestSimpleRepository extends TestCase {
@@ -61,11 +63,15 @@
"def:date", null, "date", "Date", "", false,
PropertyType.DATETIME, false, null, false, false, null,
Updatability.READ_WRITE, true, true, 0, null, null, -1, null);
+ PropertyDefinition d4 = new SimplePropertyDefinition("bool",
+ "def:bool", null, "bool", "Bool", "", false,
+ PropertyType.BOOLEAN, false, null, false, false, null,
+ Updatability.READ_WRITE, true, true, 0, null, null, -1, null);
SimpleType mt1 = new SimpleType("doc", BaseType.DOCUMENT.getId(),
"doc", null, "Doc", "My Doc Type", BaseType.DOCUMENT, "", true,
true, true, true, true, true, true, true,
ContentStreamPresence.ALLOWED, null, null, Arrays.asList(d1,
- d2, d3));
+ d2, d3, d4));
SimpleType mt2 = new SimpleType("fold", BaseType.FOLDER.getId(),
"fold", null, "Fold", "My Folder Type", BaseType.FOLDER, "",
true, true, true, true, true, true, false, false,
@@ -185,7 +191,7 @@
Connection conn = repo.getConnection(null);
Folder root = conn.getRootFolder();
Document d1 = root.newDocument("doc");
- assertEquals(SimpleType.PROPS_DOCUMENT_BASE.size() + 3,
+ assertEquals(SimpleType.PROPS_DOCUMENT_BASE.size() + 4,
d1.getType().getPropertyDefinitions().size());
d1.save();
@@ -265,6 +271,9 @@
Connection conn = repo.getConnection(null);
Folder root = conn.getRootFolder();
Document d1 = root.newDocument("doc");
+ d1.setValue("date",
+ GregorianCalendar.fromAtomPub("2010-01-01T01:01:01.000Z"));
+ d1.setValue("bool", Boolean.TRUE);
d1.save();
Collection<CMISObject> res = conn.query("SELECT * FROM cmis:folder",
@@ -286,6 +295,23 @@
res = conn.query("SELECT * FROM doc WHERE cmis:objectId <> '123'",
false);
assertEquals(1, res.size());
+
+ res = conn.query("SELECT * FROM doc WHERE bool = true", false);
+ assertEquals(1, res.size());
+ res = conn.query("SELECT * FROM doc WHERE bool <> FALSE", false);
+ assertEquals(1, res.size());
+
+ res = conn.query(
+ "SELECT * FROM doc WHERE date <> TIMESTAMP '1999-09-09T01:01:01Z'",
+ false);
+ assertEquals(1, res.size());
+ try {
+ res = conn.query(
+ "SELECT * FROM doc WHERE date <> TIMESTAMP 'foobar'", false);
+ fail();
+ } catch (CMISRuntimeException e) {
+ // ok
+ }
}
}