Changeset 213
- Timestamp:
- 03/03/10 20:21:17 (14 years ago)
- Location:
- VirtualCollectionRegistry/trunk/VirtualCollectionRegistry
- Files:
-
- 3 added
- 1 deleted
- 10 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/pom.xml
r199 r213 13 13 <plugin> 14 14 <groupId>org.apache.maven.plugins</groupId> 15 <artifactId>maven-compiler-plugin</artifactId> 16 <version>2.1</version> 17 <configuration> 18 <source>${maven.compiler.source}</source> 19 <target>${maven.compiler.target}</target> 20 </configuration> 15 <artifactId>maven-antrun-plugin</artifactId> 16 <version>1.3</version> 17 <executions> 18 <execution> 19 <id>process-jpa-annotations</id> 20 <phase>generate-sources</phase> 21 <configuration> 22 <tasks> 23 <echo>processing JPA annotations</echo> 24 <property name="target.dir" value="${project.build.directory}/generated-sources/jpamodelgen"/> 25 <mkdir dir="${target.dir}"/> 26 <javac srcdir="${basedir}/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/model" 27 destdir="${target.dir}" 28 failonerror="false" 29 fork="true" 30 target="${maven.compiler.target}"> 31 <compilerarg value="-proc:only"/> 32 <classpath> 33 <path refid="maven.compile.classpath"/> 34 </classpath> 35 </javac> 36 </tasks> 37 <sourceRoot>${project.build.directory}/generated-sources/jpamodelgen</sourceRoot> 38 </configuration> 39 <goals> 40 <goal>run</goal> 41 </goals> 42 </execution> 43 </executions> 21 44 </plugin> 22 45 … … 33 56 </executions> 34 57 </plugin> 58 59 <plugin> 60 <groupId>org.apache.maven.plugins</groupId> 61 <artifactId>maven-compiler-plugin</artifactId> 62 <version>2.1</version> 63 <configuration> 64 <source>${maven.compiler.source}</source> 65 <target>${maven.compiler.target}</target> 66 </configuration> 67 </plugin> 35 68 </plugins> 36 69 </build> … … 92 125 93 126 <dependency> 127 <groupId>org.hibernate</groupId> 128 <artifactId>hibernate-jpamodelgen</artifactId> 129 <version>${hibernate.jpaVersion}</version> 130 <scope>compile</scope> 131 <exclusions> 132 <exclusion> 133 <!-- Use the jpa-api defined here, crossing fingers they match up signature-wise --> 134 <groupId>org.hibernate.javax.persistence</groupId> 135 <artifactId>hibernate-jpa-2.0-api</artifactId> 136 </exclusion> 137 <exclusion> 138 <groupId>org.slf4j</groupId> 139 <artifactId>slf4j-api</artifactId> 140 </exclusion> 141 </exclusions> 142 </dependency> 143 144 <dependency> 94 145 <groupId>commons-lang</groupId> 95 146 <artifactId>commons-lang</artifactId> -
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/antlr3/eu/clarin/cmdi/virtualcollectionregistry/query/VCRQL.g
r190 r213 8 8 tokens { 9 9 EQ = '='; 10 LT = '<'; 11 GT = '>'; 10 NE = '!='; 12 11 OR = 'or'; 13 12 AND = 'and'; … … 28 27 29 28 query 30 : expression EOF-> ^(QUERY<QueryNode> expression)29 : expression -> ^(QUERY<QueryNode> expression) 31 30 ; 32 31 … … 49 48 50 49 atom 51 : component EQ<RelationNode>^ STRING<StringNode> 52 | component LT<RelationNode>^ STRING<StringNode> 53 | component GT<RelationNode>^ STRING<StringNode> 50 : component EQ<RelationNode>^ STRING<ValueNode> 51 | component NE<RelationNode>^ STRING<ValueNode> 54 52 ; 55 53 … … 68 66 69 67 STRING 70 : '"' ( ESCAPE_SEQUENCE | ~( '\u0000'..'\u001f' | '\\' | '\"' ) )* '"'68 : '"' ( ESCAPE_SEQUENCE | ~( '\u0000'..'\u001f' | '\\' | '\"' ) )* '"' 71 69 ; 72 70 -
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/VirtualCollectionRegistry.java
r191 r213 20 20 import eu.clarin.cmdi.virtualcollectionregistry.model.VirtualCollectionList; 21 21 import eu.clarin.cmdi.virtualcollectionregistry.model.VirtualCollectionValidator; 22 import eu.clarin.cmdi.virtualcollectionregistry.query.ParsedQuery; 22 23 23 24 public class VirtualCollectionRegistry { … … 261 262 } 262 263 263 public VirtualCollectionList getVirtualCollections( int offset, int count)264 throws VirtualCollectionRegistryException {264 public VirtualCollectionList getVirtualCollections(String query, 265 int offset, int count) throws VirtualCollectionRegistryException { 265 266 EntityManager em = DataStore.instance().getEntityManager(); 266 267 try { 267 268 em.getTransaction().begin(); 268 269 270 // setup queries 271 TypedQuery<Long> cq = null; 272 TypedQuery<VirtualCollection> q = null; 273 if (query != null) { 274 ParsedQuery parsedQuery = ParsedQuery.parseQuery(em, query); 275 cq = parsedQuery.getCountQuery(null); 276 q = parsedQuery.getQuery(null); 277 } else { 278 cq = em.createNamedQuery("VirtualCollection.countAll", 279 Long.class); 280 q = em.createNamedQuery("VirtualCollection.findAll", 281 VirtualCollection.class); 282 } 283 284 // commence query ... 269 285 List<VirtualCollection> results = null; 270 TypedQuery<Long> cq =271 em.createNamedQuery("VirtualCollection.countAll", Long.class);272 286 long totalCount = cq.getSingleResult(); 273 287 274 288 // optimization; don't query, if we won't get any results 275 289 if ( totalCount > 0) { 276 TypedQuery<VirtualCollection> q =277 em.createNamedQuery("VirtualCollection.findAll",278 VirtualCollection.class);279 290 if (offset > 0) { 280 291 q.setFirstResult(offset); … … 295 306 296 307 public VirtualCollectionList getVirtualCollections(Principal principal, 297 int offset, int count) throws VirtualCollectionRegistryException { 308 String query, int offset, int count) 309 throws VirtualCollectionRegistryException { 298 310 if (principal == null) { 299 311 throw new IllegalArgumentException("principal == null"); … … 303 315 em.getTransaction().begin(); 304 316 317 // fetch user 305 318 User user = fetchUser(em, principal); 306 319 if (user == null) { … … 308 321 } 309 322 323 // setup queries 324 TypedQuery<Long> cq = null; 325 TypedQuery<VirtualCollection> q = null; 326 if (query != null) { 327 ParsedQuery parsedQuery = ParsedQuery.parseQuery(em, query); 328 cq = parsedQuery.getCountQuery(user); 329 q = parsedQuery.getQuery(user); 330 } else { 331 cq = em.createNamedQuery("VirtualCollection.countByOwner", Long.class); 332 cq.setParameter("owner", user); 333 q = em.createNamedQuery("VirtualCollection.findByOwner", 334 VirtualCollection.class); 335 q.setParameter("owner", user); 336 } 337 338 // commence query ... 310 339 List<VirtualCollection> results = null; 311 TypedQuery<Long> cq =312 em.createNamedQuery("VirtualCollection.countByOwner",313 Long.class);314 cq.setParameter("owner", user);315 340 long totalCount = cq.getSingleResult(); 316 341 317 342 // optimization; don't query, if we won't get any results 318 343 if (totalCount > 0) { 319 TypedQuery<VirtualCollection> q =320 em.createNamedQuery("VirtualCollection.findByOwner",321 VirtualCollection.class);322 q.setParameter("owner", user);323 344 if (offset > 0) { 324 345 q.setFirstResult(offset); -
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/query/BooleanNode.java
r190 r213 30 30 return Operator.OR; 31 31 default: 32 throw new IllegalArgumentException(" invalid type");32 throw new IllegalArgumentException("bad type: " + type); 33 33 } 34 34 } -
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/query/EntityNode.java
r190 r213 6 6 7 7 class EntityNode extends CommonTree implements ParseTreeNode { 8 private String entity; 8 public static enum Entity { VC, CREATOR }; 9 private Entity entity; 9 10 private String property; 10 11 11 12 public EntityNode(int type, Token entity, Token property) { 12 13 super(new CommonToken(type, "ENTITY")); 13 // check values for sanity! 14 this.entity = entity.getText(); 15 this.property = property.getText(); 14 this.entity = entityFromString(entity.getText()); 15 this.property = propertyFromString(property.getText()); 16 16 } 17 17 18 public StringgetEntity() {18 public Entity getEntity() { 19 19 return entity; 20 20 } … … 28 28 } 29 29 30 private static Entity entityFromString(String s) { 31 if (s == null) { 32 throw new NullPointerException("s == null"); 33 } 34 s = s.trim(); 35 if (s.equalsIgnoreCase("vc")) { 36 return Entity.VC; 37 } else if (s.equalsIgnoreCase("creator")) { 38 return Entity.CREATOR; 39 } else { 40 throw new IllegalArgumentException("unknown entity: " + s); 41 } 42 } 43 44 private static String propertyFromString(String s) { 45 if (s != null) { 46 s = s.trim(); 47 } 48 if ((s == null) || (s.length() < 1)) { 49 throw new IllegalArgumentException("property is null or empty"); 50 } 51 return s.toLowerCase(); 52 } 53 30 54 } // class EntityNode -
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/query/ParseTreeNodeVisitor.java
r190 r213 5 5 public void visit(QueryNode node); 6 6 7 public void visit(BooleanNode node); 8 7 9 public void visit(RelationNode node); 8 9 public void visit(BooleanNode node);10 10 11 11 public void visit(EntityNode node); 12 12 13 public void visit( StringNode node);13 public void visit(ValueNode node); 14 14 15 15 } // interface ParseTreeNodeVisitor -
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/query/PrettyPrinter.java
r190 r213 24 24 } 25 25 26 public void visit(BooleanNode node) { 27 doIndent(node); 28 out.print("["); 29 out.print(node.getOperator()); 30 out.println("]"); 31 parents.push(node); 32 for (int i = 0; i < node.getChildCount(); i++) { 33 ParseTreeNode child = (ParseTreeNode) node.getChild(i); 34 child.accept(this); 35 } 36 parents.pop(); 37 } 38 26 39 public void visit(RelationNode node) { 27 40 doIndent(node); … … 37 50 } 38 51 39 public void visit(BooleanNode node) {40 doIndent(node);41 out.print("[");42 out.print(node.getOperator());43 out.println("]");44 parents.push(node);45 for (int i = 0; i < node.getChildCount(); i++) {46 ParseTreeNode child = (ParseTreeNode) node.getChild(i);47 child.accept(this);48 }49 parents.pop();50 }51 52 52 public void visit(EntityNode node) { 53 53 doIndent(node); 54 out.print(node.getEntity()); 54 switch (node.getEntity()) { 55 case VC: 56 out.print("virtualcollection"); 57 break; 58 case CREATOR: 59 out.print("creator"); 60 break; 61 } 55 62 out.print("."); 56 63 out.println(node.getProperty()); 57 64 } 58 65 59 public void visit( StringNode node) {66 public void visit(ValueNode node) { 60 67 doIndent(node); 61 68 out.println(node.getValue()); -
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/query/QueryNode.java
r190 r213 2 2 3 3 import org.antlr.runtime.CommonToken; 4 import org.antlr.runtime.Token; 4 5 import org.antlr.runtime.tree.CommonTree; 5 6 … … 10 11 } 11 12 13 public QueryNode(Token token) { 14 super(token); 15 } 16 12 17 public void accept(ParseTreeNodeVisitor visitor) { 13 18 visitor.visit(this); -
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/query/RelationNode.java
r190 r213 4 4 import org.antlr.runtime.tree.CommonTree; 5 5 6 import eu.clarin.cmdi.virtualcollectionregistry.query.VCRQLLexer;7 8 6 class RelationNode extends CommonTree implements ParseTreeNode { 9 public static enum Relation { EQ, LT, GT};7 public static enum Relation { EQ, NE }; 10 8 private Relation relation; 11 9 … … 27 25 case VCRQLLexer.EQ: 28 26 return Relation.EQ; 29 case VCRQLLexer.LT: 30 return Relation.LT; 31 case VCRQLLexer.GT: 32 return Relation.GT; 27 case VCRQLLexer.NE: 28 return Relation.NE; 33 29 default: 34 throw new IllegalArgumentException(" inavlid relation type");30 throw new IllegalArgumentException("bad relation type: " + type); 35 31 } 36 32 } -
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/query/ValueNode.java
r198 r213 4 4 import org.antlr.runtime.tree.CommonTree; 5 5 6 class StringNode extends CommonTree implements ParseTreeNode {6 class ValueNode extends CommonTree implements ParseTreeNode { 7 7 private String value; 8 8 9 StringNode(Token token) {9 ValueNode(Token token) { 10 10 super(token); 11 11 String s = token.getText(); … … 13 13 int epos = s.lastIndexOf('"'); 14 14 if ((spos != -1) && (epos != -1)) { 15 value = s.substring(spos + 1, epos); 16 } else { 17 value = s; 15 s = s.substring(spos + 1, epos); 18 16 } 19 // TODO: check escaping17 value = s; 20 18 } 21 19 -
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/rest/VirtualCollectionRegistryRestService.java
r190 r213 37 37 import eu.clarin.cmdi.virtualcollectionregistry.model.VirtualCollection; 38 38 import eu.clarin.cmdi.virtualcollectionregistry.model.VirtualCollectionList; 39 import eu.clarin.cmdi.virtualcollectionregistry.query.Search;40 39 41 40 @Path("/") 42 41 public class VirtualCollectionRegistryRestService { 43 private VirtualCollectionRegistry registry =42 private final VirtualCollectionRegistry registry = 44 43 VirtualCollectionRegistry.instance(); 45 44 @Context … … 140 139 @DefaultValue("-1") @QueryParam("count") int count) 141 140 throws VirtualCollectionRegistryException { 142 if ( query != null ) {143 Search.doSearch(query);144 }145 141 final VirtualCollectionList vcs = 146 registry.getVirtualCollections((offset > 0) ? offset : 0, count); 142 registry.getVirtualCollections(query, 143 (offset > 0) ? offset : 0, count); 147 144 StreamingOutput writer = new StreamingOutput() { 148 145 public void write(OutputStream stream) throws IOException, … … 160 157 MediaType.APPLICATION_XML, 161 158 MediaType.APPLICATION_JSON }) 162 public Response getMyVirtualCollections( 159 public Response getMyVirtualCollections(@QueryParam("q") String query, 163 160 @DefaultValue("0") @QueryParam("offset") int offset, 164 161 @DefaultValue("-1") @QueryParam("count") int count) … … 169 166 } 170 167 final VirtualCollectionList vcs = 171 registry.getVirtualCollections(principal,172 (offset > 0) ? offset : 0, count);168 registry.getVirtualCollections(principal, query, 169 (offset > 0) ? offset : 0, count); 173 170 StreamingOutput writer = new StreamingOutput() { 174 171 public void write(OutputStream stream) throws IOException,
Note: See TracChangeset
for help on using the changeset viewer.