From cab707f0e329e5ff25cd2850a19c607933a5f336 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 8 Mar 2008 14:23:24 +0000 Subject: [PATCH] moved JoinExpression and JoinType out of QueryBase moved Order and OrderSpecifier out of Types --- querydsl-hibernate/pom.xml | 35 +- .../mysema/query/grammar/HqlSerializer.java | 16 +- .../com/mysema/query/hibernate/HqlQuery.java | 4 + .../src/test/includes/instances.txt | 6 +- .../query/grammar/hql/ComplexQueriesTest.java | 38 +- .../query/grammar/hql/FeaturesTest.java | 20 +- .../query/grammar/hql/SimpleQueriesTest.java | 14 +- .../grammar/hql/ThingLinkQueriesTest.java | 50 ++ .../query/grammar/hql/domain/EvilType.java | 2 +- .../grammar/hql/domain2/Association.java | 83 +++ .../query/grammar/hql/domain2/BaseEntity.java | 26 + .../query/grammar/hql/domain2/Comment.java | 99 ++++ .../query/grammar/hql/domain2/Content.java | 61 +++ .../query/grammar/hql/domain2/Country.java | 47 ++ .../query/grammar/hql/domain2/Exhibition.java | 141 +++++ .../grammar/hql/domain2/FeaturedItem.java | 101 ++++ .../grammar/hql/domain2/GroupOfInterest.java | 106 ++++ .../grammar/hql/domain2/IDisplayObject.java | 10 + .../query/grammar/hql/domain2/Location.java | 163 ++++++ .../query/grammar/hql/domain2/Maker.java | 48 ++ .../hql/domain2/MetaDataContainer.java | 52 ++ .../mysema/query/grammar/hql/domain2/Tag.java | 44 ++ .../query/grammar/hql/domain2/Thing.java | 494 +++++++++++++++++ .../grammar/hql/domain2/TimeStamped.java | 34 ++ .../query/grammar/hql/domain2/User.java | 504 ++++++++++++++++++ .../query/grammar/hql/domain2/Year.java | 46 ++ 26 files changed, 2215 insertions(+), 29 deletions(-) create mode 100644 querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/ThingLinkQueriesTest.java create mode 100644 querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Association.java create mode 100644 querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/BaseEntity.java create mode 100644 querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Comment.java create mode 100644 querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Content.java create mode 100644 querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Country.java create mode 100644 querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Exhibition.java create mode 100644 querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/FeaturedItem.java create mode 100644 querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/GroupOfInterest.java create mode 100644 querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/IDisplayObject.java create mode 100644 querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Location.java create mode 100644 querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Maker.java create mode 100644 querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/MetaDataContainer.java create mode 100644 querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Tag.java create mode 100644 querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Thing.java create mode 100644 querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/TimeStamped.java create mode 100644 querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/User.java create mode 100644 querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Year.java diff --git a/querydsl-hibernate/pom.xml b/querydsl-hibernate/pom.xml index 4f992d41f..1e32473bd 100644 --- a/querydsl-hibernate/pom.xml +++ b/querydsl-hibernate/pom.xml @@ -75,6 +75,7 @@ 1.0.15 + dummy-domain generate-test-sources testExecute @@ -90,16 +91,38 @@ true -Ainclude=src/test/includes/instances.txt, - -AdestClass=com.mysema.query.grammar.hql.domain.Domain, + -AdestClass=com.mysema.query.Domain1, -AnamePrefix= - - - com/mysema/query/grammar/hql/domain/*.java - - + + com/mysema/query/grammar/hql/domain/*.java + + + thinglink-domain + generate-test-sources + + testExecute + + + + src/test/java + + true + true + com.mysema.query.apt.APTFactory + target/generated-test-sources/java + true + + -AdestClass=com.mysema.query.Domain2, + -AnamePrefix= + + + com/mysema/query/grammar/hql/domain2/*.java + + + diff --git a/querydsl-hibernate/src/main/java/com/mysema/query/grammar/HqlSerializer.java b/querydsl-hibernate/src/main/java/com/mysema/query/grammar/HqlSerializer.java index 051d71787..61ceca764 100644 --- a/querydsl-hibernate/src/main/java/com/mysema/query/grammar/HqlSerializer.java +++ b/querydsl-hibernate/src/main/java/com/mysema/query/grammar/HqlSerializer.java @@ -9,7 +9,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import com.mysema.query.QueryBase.JoinExpression; +import com.mysema.query.JoinExpression; import com.mysema.query.grammar.HqlGrammar.Constructor; import com.mysema.query.grammar.HqlGrammar.CountExpr; import com.mysema.query.grammar.Types.*; @@ -75,7 +75,7 @@ public class HqlSerializer extends VisitorAdapter{ } // type specifier if (je.target instanceof PathEntity && !je.target.toString().contains(".")){ - _append(((PathEntity)je.target)._type().getSimpleName())._append(" "); + _append(((PathEntity)je.target).getType().getSimpleName())._append(" "); } handle(je.target); if (je.conditions != null){ @@ -126,7 +126,7 @@ public class HqlSerializer extends VisitorAdapter{ } protected void visit(Constructor expr){ - _append("new ")._append(expr._type().getName())._append("("); + _append("new ")._append(expr.getType().getName())._append("("); _append(", ",Arrays.asList(expr.args))._append(")"); } @@ -153,4 +153,14 @@ public class HqlSerializer extends VisitorAdapter{ _append(expr.toString()); } + @Override + protected void visit(SubQuery subQuery) { + _append("("); + _append("\n select ").handle(subQuery._select()); + _append("\n from ")._append(", ", subQuery._from()); + _append("\n where ")._append(" and ", subQuery._where()); + _append(")"); + + } + } diff --git a/querydsl-hibernate/src/main/java/com/mysema/query/hibernate/HqlQuery.java b/querydsl-hibernate/src/main/java/com/mysema/query/hibernate/HqlQuery.java index 952836edd..e7f418390 100644 --- a/querydsl-hibernate/src/main/java/com/mysema/query/hibernate/HqlQuery.java +++ b/querydsl-hibernate/src/main/java/com/mysema/query/hibernate/HqlQuery.java @@ -58,6 +58,10 @@ public class HqlQuery extends HqlQueryBase{ return query; } + /** + * TODO : replace this with Hibernate Criteria based usage + */ + @Deprecated public HqlQuery forExample(PathEntity entity, Map map) { select(entity).from(entity); try { diff --git a/querydsl-hibernate/src/test/includes/instances.txt b/querydsl-hibernate/src/test/includes/instances.txt index 9be9e2ad5..d19d614e4 100644 --- a/querydsl-hibernate/src/test/includes/instances.txt +++ b/querydsl-hibernate/src/test/includes/instances.txt @@ -1,4 +1,5 @@ - // AuditLog + + // AuditLog public static final AuditLog log = new AuditLog("log"); // Cat @@ -55,4 +56,5 @@ public static final User user2 = new User("user2"); public static final User user3 = new User("user3"); public static final User user4 = new User("user4"); - public static final User user5 = new User("user5"); \ No newline at end of file + public static final User user5 = new User("user5"); + \ No newline at end of file diff --git a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/ComplexQueriesTest.java b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/ComplexQueriesTest.java index f9211d60f..0d222147e 100644 --- a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/ComplexQueriesTest.java +++ b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/ComplexQueriesTest.java @@ -1,10 +1,19 @@ package com.mysema.query.grammar.hql; -import static com.mysema.query.grammar.HqlGrammar.*; -import static com.mysema.query.grammar.hql.domain.Domain.*; +import static com.mysema.query.Domain1.catalog; +import static com.mysema.query.Domain1.item; +import static com.mysema.query.Domain1.order; +import static com.mysema.query.Domain1.price; +import static com.mysema.query.Domain1.product; +import static com.mysema.query.grammar.Grammar.not; +import static com.mysema.query.grammar.HqlGrammar.count; +import static com.mysema.query.grammar.HqlGrammar.sum; +import static com.mysema.query.grammar.HqlGrammar.sysdate; + import org.junit.Test; import com.mysema.query.grammar.HqlQueryBase; +import com.mysema.query.grammar.hql.domain.Catalog; import com.mysema.query.grammar.hql.domain.Customer; import com.mysema.query.grammar.hql.domain.Product; @@ -52,7 +61,7 @@ public class ComplexQueriesTest extends HqlQueryBase{ catalog.effectiveDate.lt(sysdate()), // lt as static method catalog.effectiveDate.goe(sysdate())) // goe as static method .groupBy(order) - .having(gt(sum(price.amount), minAmount)) + .having(sum(price.amount).gt(minAmount)) .orderBy(sum(price.amount).desc()); } @@ -70,7 +79,25 @@ public class ComplexQueriesTest extends HqlQueryBase{ // and catalog = :currentCatalog // group by order // having sum(price.amount) > :minAmount -// order by sum(price.amount) desc +// order by sum(price.amount) desc + Customer c = new Customer(); + Product p = new Product(); + Catalog currentCatalog = new Catalog(); + long minAmount = 0l; + + select(order.id, sum(price.amount), count(item)) + .from(order) + .innerJoin(order.lineItems.as(item)) + .innerJoin(item.product.as(product)) + .join(catalog) + .innerJoin(catalog.prices.as(price)) + .where(not(order.paid), + order.customer.eq(c), + price.product.eq(p), + catalog.eq(currentCatalog)) + .groupBy(order) + .having(sum(price.amount).gt(minAmount)) + .orderBy(sum(price.amount).desc()); } @Test @@ -89,7 +116,7 @@ public class ComplexQueriesTest extends HqlQueryBase{ // and statusChange.user <> :currentUser // ) // group by status.name, status.sortOrder -// order by status.sortOrder +// order by status.sortOrder } @Test @@ -115,6 +142,7 @@ public class ComplexQueriesTest extends HqlQueryBase{ @Test public void testExample6(){ + // select account, payment // from Account as account // join account.holder.users as user diff --git a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/FeaturesTest.java b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/FeaturesTest.java index c7483e8e7..41bff208b 100644 --- a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/FeaturesTest.java +++ b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/FeaturesTest.java @@ -2,17 +2,17 @@ package com.mysema.query.grammar.hql; import static com.mysema.query.grammar.Grammar.*; import static com.mysema.query.grammar.HqlGrammar.*; -import static com.mysema.query.grammar.hql.domain.Domain.*; +import static com.mysema.query.Domain1.*; import static org.junit.Assert.assertEquals; import org.junit.Test; +import com.mysema.query.grammar.HqlGrammar; import com.mysema.query.grammar.HqlQueryBase; import com.mysema.query.grammar.HqlSerializer; import com.mysema.query.grammar.HqlGrammar.Constructor; import com.mysema.query.grammar.Types.Expr; -import com.mysema.query.grammar.Types.PathEntityCollection; -import com.mysema.query.grammar.hql.domain.Cat; + /** * FeaturesTest provides @@ -236,7 +236,7 @@ public class FeaturesTest extends HqlQueryBase{ @Test public void testStringConcatenations(){ // string concatenation ...||... or concat(...,...) - toString("cat.name || kitten.name", concat(cat.name, kitten.name)); + toString("cat.name || kitten.name", cat.name.concat(kitten.name)); } // coalesce() and nullif() @@ -248,11 +248,21 @@ public class FeaturesTest extends HqlQueryBase{ @Test public void testStringOperationsInFunctionalWay(){ - toString("cat.name || cust.name.firstName", concat(cat.name,cust.name().firstName)); + toString("cat.name || cust.name.firstName", cat.name.concat(cust.name().firstName)); toString("cat.name like :a1",cat.name.like("A%")); toString("lower(cat.name)",cat.name.lower()); } + @Test + public void testSubQuery(){ + StringBuilder b = new StringBuilder(); + b.append("("); + b.append("\n select cust.name"); + b.append("\n from cust"); + b.append("\n where cust.name is not null)"); + toString(b.toString(), HqlGrammar.select(cust.name).from(cust).where(cust.name.isnotnull())); + } + @Test public void testToString(){ toString("cat", cat); diff --git a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/SimpleQueriesTest.java b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/SimpleQueriesTest.java index e9762debb..5a24267b9 100644 --- a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/SimpleQueriesTest.java +++ b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/SimpleQueriesTest.java @@ -1,7 +1,7 @@ package com.mysema.query.grammar.hql; import static com.mysema.query.grammar.HqlGrammar.*; -import static com.mysema.query.grammar.hql.domain.Domain.*; +import static com.mysema.query.Domain1.*; import static org.junit.Assert.assertEquals; import java.util.Date; @@ -41,10 +41,10 @@ public class SimpleQueriesTest extends HqlQueryBase{ where(be); with(be); // select(cat.name.as("cat_name")); // not allowed - from(cat,cust).where(gt(cat.name,cust.name().firstName)); + from(cat,cust).where(cat.name.gt(cust.name().firstName)); select(cat.name.lower()).from(cat).where(cat.name.substring(0,2).eq("Mi")); select(cat.name.upper()).from(cat); - select(concat(cat.name.lower(),cat.mate().name)).from(cat); + select(cat.name.lower().concat(cat.mate().name)).from(cat); // cat.as(company); // not allowed // asc(cust.name()); // not allowed cust.name().firstName.asc(); @@ -57,12 +57,12 @@ public class SimpleQueriesTest extends HqlQueryBase{ @Test public void testOperations(){ - gt(kitten.bodyWeight, 10); + kitten.bodyWeight.gt(10); kitten.bodyWeight.lt(10); - goe(kitten.bodyWeight, 10); + kitten.bodyWeight.goe(10); kitten.bodyWeight.loe(10); - gt(cat.name, "ABC"); + cat.name.gt("ABC"); cust.name().firstName.lt("Albert"); cust.name().firstName.lower(); cust.name().firstName.upper(); @@ -76,7 +76,7 @@ public class SimpleQueriesTest extends HqlQueryBase{ // from Cat as cat left join cat.kittens as kitten // with kitten.bodyWeight > 10.0 from(cat).leftJoin(cat.kittens.as(kitten)) - .with(gt(kitten.bodyWeight,10)); + .with(kitten.bodyWeight.gt(10)); expect("from Cat cat\nleft join cat.kittens as kitten\n"+ "with kitten.bodyWeight > :a1"); } diff --git a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/ThingLinkQueriesTest.java b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/ThingLinkQueriesTest.java new file mode 100644 index 000000000..e227ccc2b --- /dev/null +++ b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/ThingLinkQueriesTest.java @@ -0,0 +1,50 @@ +package com.mysema.query.grammar.hql; + +import org.junit.Test; + +import com.mysema.query.grammar.HqlQueryBase; +import com.mysema.query.Domain2; +import static com.mysema.query.grammar.HqlGrammar.*; + +/** + * ThingLinkQueriesTest provides + * + * @author tiwe + * @version $Id$ + */ +public class ThingLinkQueriesTest extends HqlQueryBase{ + + private Domain2.Association a = new Domain2.Association("a"); + private Domain2.Tag g = new Domain2.Tag("g"); + private Domain2.Thing h = new Domain2.Thing("h"); + private Domain2.Thing t = new Domain2.Thing("t"); + + @Test + public void testQuery1(){ +// "select g._keyword, count(g._keyword) from " + Thing.class.getName() +// + " h inner join h._tags as g where h._code in" + "(select t._code from " +// + Association.class.getName() + " a " + "inner join a._thing as t " +// + "where a._association = :association " +// + "and t._isHidden = :hidden) group by g._keyword order by count(g._keyword) desc"); + +// select(g._keyword, count(g._keyword)) +// .from(h).innerJoin(h._tags.as(g)) +// .where(h._code.in( +// select(t._code).from(a + + } + + public void testQuery2(){ +// "select g._keyword, count(g._keyword) from " +// + Thing.class.getName() +// + " h inner join h._tags as g where h._code in" +// + "(select t._code from " +// + Association.class.getName() +// + " a " +// + "inner join a._thing as t " +// + "where a._association = :association " +// + "and t._isHidden = :hidden and t._timeStamp > :lastweek) +// group by g._keyword order by count(g._keyword) desc"); + } + +} diff --git a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain/EvilType.java b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain/EvilType.java index 5ee725232..da5b71073 100644 --- a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain/EvilType.java +++ b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain/EvilType.java @@ -10,6 +10,6 @@ import javax.persistence.Entity; */ @Entity public class EvilType { - protected EvilType isnull, isnotnull, asc, desc, get, _type, path, _parent; + protected EvilType isnull, isnotnull, asc, desc, get, getType, getMetadata; protected EvilType toString, hashCode, getClass, notify, notifyAll, wait; } diff --git a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Association.java b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Association.java new file mode 100644 index 000000000..56e84beca --- /dev/null +++ b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Association.java @@ -0,0 +1,83 @@ +/** + * + */ +package com.mysema.query.grammar.hql.domain2; + +import javax.persistence.Entity; +import javax.persistence.OneToOne; + +/** + * An Association represents a relationship between a Thing an a User. For + * example a User can like, hate or sell a Thing. (see thinglink-2.0 datamodel) + * + * + */ +@Entity +// @Table(uniqueConstraints={@UniqueConstraint(columnNames={ "user", "thing", +// "association" })}) +public class Association extends TimeStamped { + + @OneToOne + private User _user; + + @OneToOne + private Thing _thing; + + private AssociationType _association; + + public enum AssociationType { + LIKE, COLLECT, MAKE, OWN, SWAP, GIVE, HATE, SELL, WANT, LOVE, LINKED; + } + + public Association() { + } + + /** + * @param user + * The User the Association is related to. + * @param thing + * The Thing the Association is related to. + * @param association + * The type of the Association. + */ + public Association(User user, Thing thing, AssociationType association) { + _user = user; + _thing = thing; + _association = association; + } + + /** + * @return The User the Association is related to. + */ + public User getUser() { + return _user; + } + + /** + * @return The Thing the Association is related to. + */ + public Thing getThing() { + return _thing; + } + + /** + * @return The type of the Association. + */ + public AssociationType getAssociation() { + return _association; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object association) { + boolean sameUser = ((Association) association).getUser().equals(_user); + boolean sameThing = ((Association) association).getThing().equals(_thing); + boolean sameType = ((Association) association).getAssociation().equals(_association); + return (sameUser && sameThing && sameType); + } + +} diff --git a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/BaseEntity.java b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/BaseEntity.java new file mode 100644 index 000000000..4c74cc8a6 --- /dev/null +++ b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/BaseEntity.java @@ -0,0 +1,26 @@ +package com.mysema.query.grammar.hql.domain2; + +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; + + +/** + * BaseEntity is the top of entity hierarchy. (see thinglink-2.0 datamodel) + * + */ +@MappedSuperclass +public class BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + protected Long _id; + + /** + * @return The id of the entity. + */ + public Long getId() { + return _id; + } +} diff --git a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Comment.java b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Comment.java new file mode 100644 index 000000000..e5eb88214 --- /dev/null +++ b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Comment.java @@ -0,0 +1,99 @@ +/** + * + */ +package com.mysema.query.grammar.hql.domain2; + +import javax.persistence.Column; +import javax.persistence.Entity; + +/** + * A comment is Created by a User and belongs to a Thing. A Thing has a List + * with its comments. (see thinglink-2.0 datamodel) + * + * + */ +@Entity +public class Comment extends TimeStamped { + + @Column(length = 500) + private String _userName; + + @Column(length = 500) + private String _userEmail; + + @Column(length = 15000) + private String _text; + + private Boolean _isNew; + + public Comment() { + } + + /** + * Calls super() to create timeStamp. _isNew is initialized with true. + * + * @param userName + * Name of the user who created the Comment. + * @param text + * The comment. + */ + public Comment(String userName, String text) { + super(); + _userName = userName; + _text = text; + _isNew = new Boolean(true); + } + + /** + * @return Name of the user who created the Comment. + */ + public String getUserName() { + return _userName; + } + + public void setUserEmail(String userEmail) { + _userEmail = userEmail; + } + + /** + * @return EMail of the user who created the Comment. + */ + public String getUserEmail() { + return _userEmail; + } + + /** + * @return Text of the Comment. + */ + public String getText() { + return _text; + } + + /** + * @param text + * Text of the Comment. + */ + public void setText(String text) { + _text = text; + } + + /** + * Call this method, when the User has read the Comment. + */ + public void setOld() { + _isNew = new Boolean(false); + } + + /** + * @return False, when the User has read the Comment. + */ + public Boolean isNew() { + return _isNew; + } + + @Override + public boolean equals(Object comment) { + return ((((Comment) comment).getUserName().equals(_userName)) && (((Comment) comment).getText().equals(_text)) && (((Comment) comment) + .getTimeStamp().equals(getTimeStamp()))); + } +} diff --git a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Content.java b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Content.java new file mode 100644 index 000000000..0d9681195 --- /dev/null +++ b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Content.java @@ -0,0 +1,61 @@ +package com.mysema.query.grammar.hql.domain2; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; + +/** + * To set and get Content of html-pages with admin-gui. + * + */ +@Entity +public class Content { + + @Id + private String _title; + + @Column(length = 100000) + private String _content; + + public Content() { + // + } + + /** + * @param title + * @param content + */ + public Content(String title, String content) { + _title = title; + _content = content; + } + + /** + * @return + */ + public String getContent() { + return _content; + } + + /** + * @param content + */ + public void setContent(String content) { + _content = content; + } + + /** + * @return + */ + public String getTitle() { + return _title; + } + + /** + * @param title + */ + public void setTitle(String title) { + _title = title; + } + +} diff --git a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Country.java b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Country.java new file mode 100644 index 000000000..642a22111 --- /dev/null +++ b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Country.java @@ -0,0 +1,47 @@ +/** + * + */ +package com.mysema.query.grammar.hql.domain2; + +import javax.persistence.Entity; +import javax.persistence.Id; + +/** + * A Thing can belong to multiple Countries. The Countries specify where a Thing + * comes from, whereas the {@link Location} specifies, where the Thing currently + * is located. + */ +@Entity +public class Country { + + @Id + private String _name; + + public Country() { + } + + /** + * @param name + * Name of the country. + */ + public Country(String name) { + _name = name; + } + + /** + * @return Name of the country. + */ + public String getName() { + return _name; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object country) { + return ((Country) country).getName().equals(_name); + } +} diff --git a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Exhibition.java b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Exhibition.java new file mode 100644 index 000000000..1c71e4598 --- /dev/null +++ b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Exhibition.java @@ -0,0 +1,141 @@ +package com.mysema.query.grammar.hql.domain2; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.ManyToMany; +import javax.persistence.OneToOne; + +@Entity +public class Exhibition extends FeaturedItem { + + @Column(unique = true) + private String _name; + + @OneToOne + private User _user; + + @ManyToMany + private List _things; + + private String _location; + + private String _host; + + private Date _startDate; + + private Date _endDate; + + public Exhibition() { + } + + /** + * @param name + * The name of the Exhibition. + * @param user + * The User responsible for the Exhibition. + */ + public Exhibition(String name, User user) { + _name = name; + _user = user; + } + + /** + * @return The name of the Exhibition. + */ + public String getName() { + return _name; + } + + /** + * @return The User responsible for the Exhibition. + */ + public User getUser() { + return _user; + } + + /** + * @param thing + * The Thing to add to the Exhibition. + */ + public void addThing(Thing thing) { + if (_things == null) + _things = new ArrayList(); + _things.add(thing); + } + + /** + * @return All Things of the Exhibition. + */ + public List getThings() { + return _things; + } + + /** + * @param location + * The location of the Exhibition. + */ + public void setLocation(String location) { + _location = location; + } + + /** + * @return The location of the Exhibition. + */ + public String getLocation() { + return _location; + } + + /** + * @param location + * The host of the Exhibition. + */ + public void setHost(String host) { + _host = host; + } + + /** + * @return The host of the Exhibition. + */ + public String getHost() { + return _host; + } + + /** + * @param startDate + * Date when the Exhibition begins. + */ + public void setStartDate(Date startDate) { + _startDate = startDate; + } + + /** + * @return Date when the Exhibition begins. + */ + public Date getStartDate() { + return _startDate; + } + + /** + * @param endDate + * Date when the Exhibition ends. + */ + public void setEndDate(Date endDate) { + _endDate = endDate; + } + + /** + * @return Date when the Exhibition ends. + */ + public Date getEndDate() { + return _endDate; + } + + @Override + public boolean equals(Object exhibition){ + return ((Exhibition)exhibition).getName().equals(_name); + } +} diff --git a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/FeaturedItem.java b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/FeaturedItem.java new file mode 100644 index 000000000..4d22892f3 --- /dev/null +++ b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/FeaturedItem.java @@ -0,0 +1,101 @@ +package com.mysema.query.grammar.hql.domain2; + +import javax.persistence.MappedSuperclass; + +/** + * An item can be featured. If an item is featured, it has a weight and a + * featuredTimeStamp. (see thinglink-2.0 datamodel) + * + */ +@MappedSuperclass +public class FeaturedItem extends MetaDataContainer { + + private Boolean _isFeatured; + + private Long _featuredTimeStamp; + + private Integer _weight; + + /** + * Calls super() to create timeStamp. Initially isFeatured is set false. + * featuredTimeStamp and weight is initialized 0. + */ + public FeaturedItem() { + super(); + _isFeatured = new Boolean(false); + _featuredTimeStamp = new Long(-1); + _weight = new Integer(0); + } + + /** + * @return True if the item is featured, false otherwise. + */ + public Boolean isFeatured() { + return _isFeatured; + } + + /** + * @return The featuredTimeStamp is equivalent to the time, when the Item + * has been featured. + */ + public Long getFeaturedTimeStamp() { + return _featuredTimeStamp; + } + + /** + * @return The weight of the featuredItem. If the item is not featured, + * weight is -1. + */ + public Integer getWeight() { + return _weight; + } + + /** + * @param weight + * If the item is featured, the weight is set. Otherwise the + * weight remains -1. + */ + public void setWeight(int weight) { + if (_isFeatured.booleanValue()) { + _weight = Integer.valueOf(weight); + } + } + + /** + * Sets isFeatured=true and creates a featuredTimeStamp and adds the given + * weight to the current weight. + * + * @param weight + * The weight to add to the featuredItem. + */ + public void setFeatured(int weight) { + _isFeatured = Boolean.valueOf(true); + _featuredTimeStamp = Long.valueOf(System.currentTimeMillis()); + int currentWeight; + if (_weight != null) { + currentWeight = _weight.intValue(); + } else { + currentWeight = 0; + } + final int newWeight = currentWeight + weight; + _weight = Integer.valueOf(newWeight); + } + + /** + * Sets isFeatured=false, and featuredTimeStamp and weight -1. + */ + public void unfeature() { + _isFeatured = Boolean.valueOf(false); + _featuredTimeStamp = Long.valueOf(-1); + _weight = Integer.valueOf(0); + } + + public void unfeature(int weight) { + _weight = _weight - weight; + if (_weight <= 0) { + _isFeatured = Boolean.valueOf(false); + _featuredTimeStamp = Long.valueOf(-1); + _weight = Integer.valueOf(0); + } + } +} diff --git a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/GroupOfInterest.java b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/GroupOfInterest.java new file mode 100644 index 000000000..ea79c334d --- /dev/null +++ b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/GroupOfInterest.java @@ -0,0 +1,106 @@ +package com.mysema.query.grammar.hql.domain2; + +import java.util.ArrayList; +import java.util.List; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.OneToMany; + +@Entity +public class GroupOfInterest { + + @Id + private String _name; + + @OneToMany + private List _users; + + @OneToMany + private List _things; + + private GroupOfInterestPrivacy _privacyLevel; + + public enum GroupOfInterestPrivacy { + PRIVATE, PUBLIC; + } + + public GroupOfInterest() { + } + + /** + * @param name + * The name of the GroupOfInterest. + */ + public GroupOfInterest(String name) { + _name = name; + } + + /** + * @param user + * The User to add to the GroupOfInterest. + */ + public void addUser(User user) { + if (_users == null) { + _users = new ArrayList(); + } + _users.add(user); + } + + /** + * @param thing + * The Thing to add to the GroupOfInterest. + */ + public void addThing(Thing thing) { + if (_things == null) { + _things = new ArrayList(); + } + _things.add(thing); + } + + /** + * @return The name of the GroupOfInterest. + */ + public String getName() { + return _name; + } + + /** + * @return The privacy level of the GroupOfInterest. + */ + public GroupOfInterestPrivacy getPrivacyLevel() { + return _privacyLevel; + } + + /** + * @param privacyLevel + * Privacy-level of the GroupOfInterest. + */ + public void setPrivacyLevel(GroupOfInterestPrivacy privacyLevel) { + _privacyLevel = privacyLevel; + } + + /** + * @return All Users that belong to the GroupOfInterest. + */ + public List getUsers() { + return _users; + } + + /** + * @return All Things that belong to the GroupOfInterest. + */ + public List getThings() { + return _things; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object group) { + return ((GroupOfInterest) group).getName().equals(_name); + } +} diff --git a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/IDisplayObject.java b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/IDisplayObject.java new file mode 100644 index 000000000..4ed3e82fd --- /dev/null +++ b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/IDisplayObject.java @@ -0,0 +1,10 @@ +package com.mysema.query.grammar.hql.domain2; + +public interface IDisplayObject { + + public String getDisplayObjectType(); + + public enum DisplayObjectType{ + USER, THING; + } +} diff --git a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Location.java b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Location.java new file mode 100644 index 000000000..7848828d9 --- /dev/null +++ b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Location.java @@ -0,0 +1,163 @@ +package com.mysema.query.grammar.hql.domain2; + +import javax.persistence.Column; +import javax.persistence.Entity; + +/** + * The Location specifies where a Thing is currently located, whereas a + * {@link Country} specifies where a Thing comes from. + */ +@Entity +public class Location extends TimeStamped { + + @Column(length = 500) + private String _country; + + @Column(length = 500) + private String _city; + + @Column(length = 500) + private String _zipCode; + + private Double _longitude; + + private Double _latitude; + + @Column(length = 500) + private String _street; + + @Column(length = 500) + private String _url; + + public Location() {// + } + + /** + * @param country + * @param url + * @param zipCode + */ + public Location(String country, String url, String zipCode) { + super(); + _country = country; + _url = url; + _zipCode = zipCode; + } + + /** + * @param country + */ + public void setCountry(String country) { + _country = country; + } + + /** + * @return The country where the Thing is currently located. + */ + public String getCountry() { + return _country; + } + + /** + * @param city + */ + public void setCity(String city) { + _city = city; + } + + /** + * @return The city where the Thing is currently located. + */ + public String getCity() { + return _city; + } + + /** + * @param zipCode + */ + public void setZipCode(String zipCode) { + _zipCode = zipCode; + } + + /** + * @return The zip code where the Thing is currently located. + */ + public String getZipCode() { + return _zipCode; + } + + /** + * @param longitude + */ + public void setLongitude(Double longitude) { + _longitude = longitude; + } + + /** + * @return + */ + public Double getLongitude() { + return _longitude; + } + + /** + * @param latitude + */ + public void setLatitude(Double latitude) { + _latitude = latitude; + } + + /** + * @param latitude + * @return + */ + public Double getLatitude(Double latitude) { + return _latitude; + } + + /** + * @param street + */ + public void setStreet(String street) { + _street = street; + } + + /** + * @return + */ + public String getStreet() { + return _street; + } + + /** + * @param url + * This could be a URL like + * http://beta.plazes.com/plaze/f93d8d1a909b6f80341e5b4f9178b218 + */ + public void setUrl(String url) { + _url = url; + } + + /** + * @return A URL like + * http://beta.plazes.com/plaze/f93d8d1a909b6f80341e5b4f9178b218 if + * previously set. + */ + public String getUrl() { + return _url; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object location) { + if (location == null) + return false; + + return (((Location) location).getUrl().equals(_url) && ((Location) location).getZipCode().equals(_zipCode) && ((Location) location) + .getCountry().equals(_country)); + } +} diff --git a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Maker.java b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Maker.java new file mode 100644 index 000000000..fa93b0954 --- /dev/null +++ b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Maker.java @@ -0,0 +1,48 @@ +/** + * + */ +package com.mysema.query.grammar.hql.domain2; + +import javax.persistence.Column; +import javax.persistence.Entity; + +/** + * A Thing has one or more Makers. A Maker can be featured. (see thinglink-2.0 + * datamodel) + * + * + */ +@Entity +public class Maker extends FeaturedItem { + + @Column(unique = true) + private String _name; + + public Maker() { + } + + /** + * Calls super() to create timeStamp. + */ + public Maker(String name) { + super(); + _name = name; + } + + /** + * @return Name of the Maker. + */ + public String getName() { + return _name; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object maker) { + return ((Maker) maker).getName().equals(_name); + } +} diff --git a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/MetaDataContainer.java b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/MetaDataContainer.java new file mode 100644 index 000000000..a0d418692 --- /dev/null +++ b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/MetaDataContainer.java @@ -0,0 +1,52 @@ +package com.mysema.query.grammar.hql.domain2; + +import java.util.HashMap; + +import javax.persistence.MappedSuperclass; + +/** + * Objects can have metadata as key/value pairs. Internally those pairs are + * stored in a HashMap. (see thinglink-2.0 datamodel) + * + * + */ +@MappedSuperclass +public class MetaDataContainer extends TimeStamped { + + private HashMap _metaDataEntries; + + /** + * Calls super() to create timeStamp. + */ + public MetaDataContainer() { + super(); + } + + /** + * Add a metadata entry to this container. + * + * @param key + * Metadata key. + * @param value + * Metadata value. + */ + public void addMetaDataEntry(String key, String value) { + if (_metaDataEntries == null) + _metaDataEntries = new HashMap(10); + _metaDataEntries.put(key, value); + } + + /** + * Retrieve a metadata entry by key. + * + * @param key + * The key of the metadata entry to retrieve. + * @return The value of the metadata entry. + */ + public String getMetaDataEntry(String key) { + if (_metaDataEntries != null) + return _metaDataEntries.get(key); + return null; + } + +} diff --git a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Tag.java b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Tag.java new file mode 100644 index 000000000..09b395323 --- /dev/null +++ b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Tag.java @@ -0,0 +1,44 @@ +package com.mysema.query.grammar.hql.domain2; + +import javax.persistence.Entity; +import javax.persistence.Id; + +/** + * A Thing can have multiple Tags. + * + * + */ +@Entity +public class Tag { + + @Id + private String _keyword; + + public Tag() { + } + + /** + * @param keyword + * Keyword of the Tag. + */ + public Tag(String keyword) { + _keyword = keyword; + } + + /** + * @return Keyword of the Tag. + */ + public String getKeyword() { + return _keyword; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object tag) { + return ((Tag) tag).getKeyword().equals(_keyword); + } +} diff --git a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Thing.java b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Thing.java new file mode 100644 index 000000000..0eda2829f --- /dev/null +++ b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Thing.java @@ -0,0 +1,494 @@ +/** + * + */ +package com.mysema.query.grammar.hql.domain2; + +import java.util.ArrayList; +import java.util.List; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; + +import org.hibernate.annotations.CollectionOfElements; +import org.hibernate.search.annotations.DocumentId; +import org.hibernate.search.annotations.Field; +import org.hibernate.search.annotations.FieldBridge; +import org.hibernate.search.annotations.Index; +import org.hibernate.search.annotations.Indexed; + +/** + * A thinglink Thing is represented. This is the core of the data model. (see + * thinglink-2.0 datamodel) + * + */ +@Entity +@Indexed +public class Thing extends FeaturedItem implements IDisplayObject { + + @Column(unique = true) + private String _code; + + @CollectionOfElements + private List _imageFileNames = new ArrayList(); + + @CollectionOfElements + private List _soundFileNames = new ArrayList(); + + @OneToMany(cascade = { CascadeType.ALL }) + private List _comments = new ArrayList(); + + @ManyToMany(cascade = { CascadeType.ALL }) + private List _makers = new ArrayList(); + + @ManyToMany(cascade = { CascadeType.ALL }) +// @Field(index = Index.TOKENIZED) +// @FieldBridge(impl = TagsListBridge.class) + private List _tags = new ArrayList(); + + @ManyToMany(cascade = { CascadeType.ALL }) +// @Field(index = Index.TOKENIZED) +// @FieldBridge(impl = CountriesListBridge.class) + private List _countries = new ArrayList(); + + @ManyToMany(cascade = { CascadeType.ALL }) + private List _years = new ArrayList(); + + @ManyToOne + private User _linker; + + @ManyToMany(cascade = { CascadeType.ALL }) + private List _locations = new ArrayList(); + + @ManyToOne(cascade = { CascadeType.ALL }) +// @Field(index = Index.TOKENIZED) +// @FieldBridge(impl = LocationBridge.class) + private Location _currentLocation; + + @Override + @DocumentId + public Long getId() { + return _id; + } + + private ThingPrivacy _privacyLevel; + + @Field(index = Index.TOKENIZED) + private String _name; + + @Column(length = 500) + private String _password; + + private Boolean _isHidden; + + @Column(length = 40000) + @Field(index = Index.TOKENIZED) + private String _description; + + private Integer _viewCount; + + private Boolean _isVersion1; + + @Column(length = 500) + private String _imageFileName; + + private Integer _createYear; + + private Integer _createMonth; + + private Integer _createDay; + + public enum ThingPrivacy { + PRIVATE, FRIENDS, PUBLIC; + } + + public Thing() {// + } + + /** + * Initially the Thing is not hidden. + * + * @param code + * The unique code of the Thing. Something like "ABC123". + */ + public Thing(String code) { + _code = code; + _isHidden = new Boolean(false); + _isVersion1 = new Boolean(false); + } + + /** + * @param code + * The unique code of the Thing. + */ + public void setCode(String code) { + _code = code; + } + + /** + * @return The unique code of the Thing. + */ + public String getCode() { + return _code; + } + + /** + * Set true if this Thing has been created with thinglink-1.0 + * + * @param version1 + */ + public void setVersion1(boolean version1) { + _isVersion1 = new Boolean(version1); + } + + /** + * @return True if this Thing has been created with thinglink-1.0 + */ + public Boolean isVersion1() { + return _isVersion1; + } + + /** + * @param linker + * The User who created the Thing. + */ + public void setLinker(User linker) { + _linker = linker; + } + + /** + * @return The User who created the Thing. + */ + public User getLinker() { + return _linker; + } + + /** + * Should be called each time the Thing is viewed. + */ + public void view() { + if (_viewCount == null) + _viewCount = new Integer(0); + _viewCount = Integer.valueOf(_viewCount.intValue() + 1); + } + + public void setViewCount(int count) { + _viewCount = new Integer(count); + } + + /** + * @return Viewcount for the Thing. + */ + public Integer getViewCount() { + return _viewCount; + } + + /** + * @param comment + * The Comment to add to the Thing. + */ + public void addComment(Comment comment) { + _comments.add(comment); + } + + /** + * @return All Comments that belong to this Thing. + */ + public List getComments() { + return _comments; + } + + /** + * @param imageFileName + */ + public void addImageFileName(String imageFileName) { + if (_imageFileNames == null) + _imageFileNames = new ArrayList(); + _imageFileNames.add(imageFileName); + } + + public void addSoundFileName(String soundFileName) { + if (_soundFileNames == null) + _soundFileNames = new ArrayList(); + _soundFileNames.add(soundFileName); + } + + /** + * @return + */ + public List getImageFileNames() { + return _imageFileNames; + } + + public List getSoundFileNames() { + return _soundFileNames; + } + + /** + * Adds a Location to the Thing. The last Location added represents the + * current Location of the Thing. + * + * @param location + * The current Location of the Thing. + */ + public void addLocation(Location location) { + _locations.add(location); + _currentLocation = location; + } + + /** + * @return All Locations where the Thing has been located during the past. + */ + public List getLocations() { + return _locations; + } + + /** + * @return The Location where the Thing is currently located. + */ + public Location getCurrentLocation() { + // return _locations.get(_locations.size()-1); + return _currentLocation; + } + + /** + * @param name + * Name of the Maker of this Thing. + */ + public void addMaker(Maker maker) { + if (_makers == null) + _makers = new ArrayList(); + if (_makers.contains(maker)) + _makers.remove(maker); + _makers.add(0, maker); + } + + /** + * @return All Makers of this Thing. + */ + public List getMakers() { + return _makers; + } + + /** + * @param keyword + * Keyword of the Tag. + */ + public void addTag(Tag tag) { + if (_tags == null) + _tags = new ArrayList(); + if (!_tags.contains(tag)) + _tags.add(tag); + } + + /** + * @return All Tags of this Thing. + */ + public List getTags() { + return _tags; + } + + /** + * @param name + * Name of the Country. + */ + public void addCountry(Country country) { + if (_countries == null) + _countries = new ArrayList(); + if (_countries.contains(country)) + _countries.remove(country); + _countries.add(0, country); + } + + /** + * @return All Countries this Thing belongs to. + */ + public List getCountries() { + return _countries; + } + + /** + * @param year + */ + public void addYear(Year year) { + if (_years == null) + _years = new ArrayList(); + if (!_years.contains(year)) + _years.add(year); + } + + /** + * @return + */ + public List getYears() { + return _years; + } + + /** + * @param privacyLevel + * The privacy level of the Thing. + */ + public void setPrivacyLevel(ThingPrivacy privacy) { + _privacyLevel = privacy; + } + + /** + * @return Privacy level of the Thing. + */ + public ThingPrivacy getPrivacyLevel() { + return _privacyLevel; + } + + /** + * @param name + * Name of the Thing. + */ + public void setName(String name) { + _name = name; + } + + /** + * @return Name of the Thing. + */ + public String getName() { + if (_name == null) + return "unknown name"; + return _name; + } + + /** + * Encrypts the given password. + * + * @param password + * Things password. + */ + public void setPassword(String password) { +// _password = PasswordUtil.encryptPassword(password); + _password = password; + } + + /** + * Tests whether the given password is equal to Things password. + * + * @param password + * The non-encrypted password to test. + * @return True if passwords are equal. + */ + public boolean equalsEncryptedPassword(String password) { +// return _password.equals(PasswordUtil.encryptPassword(password)); + return _password.equals(password); + } + + /** + * @param hidden + */ + public void setHidden(boolean hidden) { + _isHidden = Boolean.valueOf(hidden); + } + + /** + * @return + */ + public Boolean isHidden() { + return _isHidden; + } + + /** + * @return The description of the Thing. + */ + public String getDescription() { + if (_description == null) + return ""; + return _description; + } + + /** + * @param description + * The description of the Thing. + */ + public void setDescription(String description) { + _description = description; + } + + /** + * @param imageFileName + */ + public void setImageFileName(String imageFileName) { + _imageFileName = imageFileName; + } + + /** + * @return + */ + public String getImageFileName() { + return _imageFileName; + } + + public Integer getCreateDay() { + return _createDay; + } + + public void setCreateDay(Integer createDay) { + _createDay = createDay; + } + + public Integer getCreateMonth() { + return _createMonth; + } + + public void setCreateMonth(Integer createMonth) { + _createMonth = createMonth; + } + + public Integer getCreateYear() { + return _createYear; + } + + public void setCreateYear(Integer createYear) { + _createYear = createYear; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object thing) { + return ((Thing) thing).getCode().equals(_code); + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return _code; + } + + public void removeTags() { + _tags = new ArrayList(); + } + + public void deleteImages(int[] toDeleteImageIndices) { + for (int i = toDeleteImageIndices.length - 1; i > -1; i--) { + _imageFileNames.remove(toDeleteImageIndices[i]); + } + } + + public void deleteSounds(int[] toDeleteSoundIndices) { + for (int i = toDeleteSoundIndices.length - 1; i > -1; i--) { + _soundFileNames.remove(toDeleteSoundIndices[i]); + } + } + + public String getDisplayObjectType() { + return DisplayObjectType.THING.name(); + } + +} diff --git a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/TimeStamped.java b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/TimeStamped.java new file mode 100644 index 000000000..5c2d6f392 --- /dev/null +++ b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/TimeStamped.java @@ -0,0 +1,34 @@ +package com.mysema.query.grammar.hql.domain2; + +import javax.persistence.MappedSuperclass; + +/** + * Each object has a timeStamp that is equivalent to the time the object has + * been created. (see thinglink-2.0 datamodel) + * + */ +@MappedSuperclass +public class TimeStamped extends BaseEntity { + + private Long _timeStamp; + + /** + * When the constructor is called, the timeStamp is created. + */ + public TimeStamped() { + _timeStamp = new Long(System.currentTimeMillis()); + } + + /** + * @return timeStamp that is equivalent to the time the object has been + * created. + */ + public Long getTimeStamp() { + return _timeStamp; + } + + public void setTimeStamp(long timeStamp) { + _timeStamp = new Long(timeStamp); + } + +} diff --git a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/User.java b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/User.java new file mode 100644 index 000000000..fef54eb59 --- /dev/null +++ b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/User.java @@ -0,0 +1,504 @@ +package com.mysema.query.grammar.hql.domain2; + +import java.util.ArrayList; +import java.util.List; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.ManyToMany; + +import org.hibernate.annotations.CollectionOfElements; +import org.hibernate.search.annotations.DocumentId; +import org.hibernate.search.annotations.Field; +import org.hibernate.search.annotations.Index; +import org.hibernate.search.annotations.Indexed; + +/** + * A thinglink User is represented. (see thinglink-2.0 datamodel) + * + */ +@Entity +@Indexed +public class User extends FeaturedItem implements IDisplayObject { + + @Column(unique = true) + @Field(index = Index.TOKENIZED) + private String _name; + + @Field(index = Index.TOKENIZED) + private String _fullName; + + private UserType _type; + + @Column(length = 500) + private String _password; + + private String _bio; + + @Column(length = 500) + @Field(index = Index.TOKENIZED) + private String _homepage; + + @Column(length = 500) + private String _email; + + @Column(length = 500) + private String _phone; + + @Column(length = 500) + private String _flickrUsername; + + @Column(length = 500) + private String _flickrId; + + @Column(length = 500) + private String _facebookId; + + @Column(length = 500) + private String _description; + + @Column(length = 500) + private String _imageFileName; + + private Integer _yearOfBirthday; + + private Integer _monthOfBirthday; + + private Integer _dayOfBirthday; + + @Column(length = 500) + @Field(index = Index.TOKENIZED) + private String _originalLocationCountry; + + private Boolean _doChat; + + @Column(length = 500) + @Field(index = Index.TOKENIZED) + private String _chatName; + + private ChatType _chatType; + + @Column(length = 500) + @Field(index = Index.TOKENIZED) + private String _location; + + @ManyToMany + private List _friends = new ArrayList(); + + @CollectionOfElements + private List _urls = new ArrayList(); + + @Override + @DocumentId + public Long getId() { + return _id; + } + + public enum UserType { + ARTIST, COLLECTOR, CRAFTER, CURATOR, DESIGNER, DEVELOPER, ENTREPRENEUR, HOBBYIST, MAGAZINE, MISCELLANEOUS, MUSEUM, RETAILER, STUDENT, TRENDSPOTTER, OTHER, BUSINESS, MANUFACTURER, SCHOOL, TEACHER; + } + + public enum ChatType { + NONE, AIM, GOOGLE, ICQ, MSN, YAHOO; + } + + private boolean _admin = false; + + private String _deactivationId; + + public User() {// + } + + /** + * @param name + */ + public User(String name) { + super(); + _name = name; + } + + /** + * Calls super() to create timeStamp. + * + * @param name + * Users name. + * @param eMail + * Users E-Mail. + */ + public User(String name, String eMail) { + super(); + _name = name; + _email = eMail; + } + + /** + * Where is the User currently located? + * + * @param location + */ + public void setLocation(String location) { + _location = location; + } + + /** + * @return Where is the User currently located? + */ + public String getLocation() { + return _location; + } + + /** + * @param chatType + */ + public void setChatType(ChatType chatType) { + _chatType = chatType; + } + + /** + * @return + */ + public ChatType getChatType() { + return _chatType; + } + + /** + * @param chatName + * @return + */ + public void setChatName(String chatName) { + _chatName = chatName; + } + + /** + * @return + */ + public String getChatName() { + return _chatName; + } + + /** + * @param doChat + */ + public void doChat(Boolean doChat) { + _doChat = doChat; + } + + /** + * @return + */ + public Boolean doChat() { + return _doChat; + } + + /** + * Where is the User born? + * + * @param country + */ + public void setOriginalLocationCountry(String country) { + _originalLocationCountry = country; + } + + /** + * @return Where is the User born? + */ + public String getOriginalLocationCountry() { + return _originalLocationCountry; + } + + /** + * @param fullName + */ + public void setFullName(String fullName) { + _fullName = fullName; + } + + /** + * @return + */ + public String getFullName() { + return _fullName; + } + + /** + * @param year + * @param month + * @param day + */ + public void setBirthday(Integer year, Integer month, Integer day) { + _yearOfBirthday = year; + _monthOfBirthday = month; + _dayOfBirthday = day; + } + + /** + * @return + */ + public Integer getYearOfBirthday() { + return _yearOfBirthday; + } + + /** + * @return + */ + public Integer getMonthOfBirthday() { + return _monthOfBirthday; + } + + /** + * @return + */ + public Integer getDayOfBirthday() { + return _dayOfBirthday; + } + + /** + * Encrypts the given password. + * + * @param password + * Users password. + */ + public void setPassword(String password) { + // _password = PasswordUtil.encryptPassword(password); + _password = password; + } + + /** + * @param friend + * Another user can be a friend. + */ + public void addFriend(User friend) { + _friends.add(friend); + } + + public boolean removeFriend(User friend) { + boolean success = _friends.remove(friend); + return success; + } + + /** + * @return All users that are friends of this user. Null if there are no + * friends. + */ + public List getFriends() { + return _friends; + } + + /** + * @param url + */ + public void addUrl(String url) { + _urls.add(url); + } + + /** + * @return + */ + public List getUrls() { + return _urls; + } + + /** + * @param name + * Name of the user. + */ + public void setName(String name) { + _name = name; + } + + /** + * @param type + */ + public void setType(UserType type) { + _type = type; + } + + /** + * @param email + * E-Mail address of the user. + */ + public void setEmail(String email) { + _email = email; + } + + public void setPhone(String phone) { + _phone = phone; + } + + /** + * @param bio + * Users bio. + */ + public void setBio(String bio) { + _bio = bio; + } + + /** + * @param homepage + * Users homepage. + */ + public void setHomepage(String homepage) { + _homepage = homepage; + } + + /** + * @param flickrUsername + * Users flickr username. + */ + public void setFlickrUsername(String flickrUsername) { + _flickrUsername = flickrUsername; + } + + /** + * @return Users E-Mail. + */ + public String getEmail() { + return _email; + } + + public String getPhone() { + return _phone; + } + + /** + * @return Users bio. + */ + public String getBio() { + return _bio; + } + + /** + * @return Users homepage. + */ + public String getHomepage() { + return _homepage; + } + + /** + * @return Users name. + */ + public String getName() { + return _name; + } + + /** + * @return Users type. + */ + public UserType getType() { + return _type; + } + + /** + * @return Users flickr username. + */ + public String getFlickrUsername() { + return _flickrUsername; + } + + /** + * @param imageFileName + */ + public void setImageFileName(String imageFileName) { + _imageFileName = imageFileName; + } + + /** + * @return + */ + public String getImageFileName() { + return _imageFileName; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object user) { + return (((User) user).getName().equals(_name)); + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return _name + " " + _email; + } + +// public GrantedAuthority[] getAuthorities() { +// return new GrantedAuthority[] { new GrantedAuthorityImpl("ROLE_USER") }; +// } + + public String getPassword() { + return _password; + } + + public String getUsername() { + return _name; + } + + public boolean isAccountNonExpired() { + return true; + } + + public boolean isAccountNonLocked() { + return true; + } + + public boolean isCredentialsNonExpired() { + return true; + } + + public boolean isEnabled() { + return true; + } + + public boolean isAdmin() { + return _admin; + } + + public void setAdmin(boolean admin) { + _admin = admin; + } + + public void setDeactivationId(String activationId) { + _deactivationId = activationId; + } + + public String getDeactivationId() { + return _deactivationId; + } + + public String getFlickrId() { + return _flickrId; + } + + public void setFlickrId(String id) { + _flickrId = id; + } + + public String getFacebookId() { + return _facebookId; + } + + public void setFacebookId(String facebookId) { + _facebookId = facebookId; + } + + public String getDescription() { + return _description; + } + + public void setDescription(String description) { + _description = description; + } + + public String getDisplayObjectType() { + return DisplayObjectType.USER.name(); + } + +} diff --git a/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Year.java b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Year.java new file mode 100644 index 000000000..9d54f4a68 --- /dev/null +++ b/querydsl-hibernate/src/test/java/com/mysema/query/grammar/hql/domain2/Year.java @@ -0,0 +1,46 @@ +/** + * + */ +package com.mysema.query.grammar.hql.domain2; + +import javax.persistence.Entity; +import javax.persistence.Id; + +/** + * + * + */ +@Entity +public class Year { + + @Id + private Integer _year; + + public Year() { + } + + /** + * @param year + */ + public Year(int year) { + _year = new Integer(year); + } + + /** + * @return + */ + public Integer getYear() { + return _year; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object year) { + return ((Year) year).getYear().equals(_year); + } + +}