Changeset 3607
- Timestamp:
- 11/02/08 14:11:08 (4 years ago)
- Files:
-
- trunk/src/main/java/org/sarugo/restlet/jpa/EntityFinder.java (modified) (3 diffs)
- trunk/src/main/java/org/sarugo/restlet/jpa/EntityInstanceFinder.java (modified) (1 diff)
- trunk/src/main/java/org/sarugo/restlet/jpa/EntityRouter.java (modified) (9 diffs)
- trunk/src/main/java/org/sarugo/restlet/jpa/converter/json/JSONConverter.java (modified) (2 diffs)
- trunk/src/main/java/org/sarugo/restlet/jpa/converter/text/ReferenceListConverter.java (modified) (1 diff)
- trunk/src/main/java/org/sarugo/restlet/jpa/resource/EntityCollection.java (modified) (3 diffs)
- trunk/src/main/java/org/sarugo/restlet/jpa/resource/EntityInstance.java (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/main/java/org/sarugo/restlet/jpa/EntityFinder.java
r3606 r3607 21 21 protected final EntityRouter router; 22 22 23 protected final EntityRouter rootRouter; 24 23 25 protected final List<InputConverter<E>> inputConverters; 24 26 … … 34 36 this.resource = resource; 35 37 this.router = router; 38 if (router.isChild()) { 39 this.rootRouter = router.getParent().getRootRouter(); 40 } else { 41 this.rootRouter = router; 42 } 36 43 this.entityClass = entityClass; 37 44 this.inputConverters = new ArrayList<InputConverter<E>>(); … … 40 47 } 41 48 42 /** Get the {@link EntityRouter} this finder is attached to. */43 public EntityRouter getRo uter() {44 return ro uter;49 /** Get the root {@link EntityRouter} this finder is attached to. */ 50 public EntityRouter getRootRouter() { 51 return rootRouter; 45 52 } 46 53 trunk/src/main/java/org/sarugo/restlet/jpa/EntityInstanceFinder.java
r3606 r3607 194 194 childClass, resource); 195 195 children.attachInstance(uriPattern, child); 196 getRo uter().addChildFinder(child);196 getRootRouter().addChildFinder(child); 197 197 return child; 198 198 } trunk/src/main/java/org/sarugo/restlet/jpa/EntityRouter.java
r3606 r3607 30 30 import org.restlet.Router; 31 31 import org.restlet.data.Method; 32 import org.restlet.data.Reference; 32 33 import org.restlet.data.Request; 33 34 import org.restlet.data.Response; … … 59 60 private final EntityInstanceFinder<? extends Object> parent; 60 61 62 private Reference baseRef; 63 61 64 /** 62 65 * Create a router associated with an {@link EntityManagerFactory}. The … … 78 81 this.childEntities = new HashMap<Class, Set<EntityInstanceFinder>>(); 79 82 this.parent = null; 83 this.baseRef = null; 80 84 } 81 85 … … 83 87 super(parent.getContext()); 84 88 this.parent = parent; 85 this.entityManagerFactory = parent.getRo uter().entityManagerFactory;86 this.entityManager = parent.getRo uter().entityManager;89 this.entityManagerFactory = parent.getRootRouter().entityManagerFactory; 90 this.entityManager = parent.getRootRouter().entityManager; 87 91 this.entities = new HashMap<Class, EntityInstanceFinder>(); 88 92 this.childEntities = null; 93 this.baseRef = null; 89 94 } 90 95 … … 136 141 // this router holds the entity instance finder 137 142 url = finder.getEntityURL(entity); 138 } else if (isChild()) { 139 // check if the parent router can find it 140 getParent().getRouter().getEntityURL(entity); 141 } else { 142 // else - we must be the top ancestor, so see if there's a child 143 } else if (!isChild()) { 144 // else - as the top ancestor, see if there's a child 143 145 // finder that maps 144 146 Set<EntityInstanceFinder> parents = childEntities.get(entity … … 153 155 } 154 156 } 157 if (url != null && !isChild() && baseRef != null) { 158 url = baseRef + url; 159 } 155 160 return url; 156 161 } … … 301 306 throw new IllegalStateException("Entity class is already mapped."); 302 307 } 303 if (finder.getRoute r() != this) {308 if (finder.getRoute() != null) { 304 309 throw new IllegalStateException( 305 310 "Finder is already attached to another router"); … … 383 388 public <E extends Object> EntityCollectionFinder<E> attachCollection( 384 389 String uriPattern, EntityCollectionFinder<E> finder) { 385 if (finder.getRoute r() != this) {390 if (finder.getRoute() != null) { 386 391 throw new IllegalStateException( 387 392 "Finder is already attached to another router"); … … 424 429 public void addChildFinder(EntityInstanceFinder child) { 425 430 if (isChild()) { 426 // add to top ancestor 427 getParent().getRouter().addChildFinder(child); 428 } else { 429 Set<EntityInstanceFinder> parents = childEntities.get(child 430 .getEntityClass()); 431 if (parents == null) { 432 parents = new CopyOnWriteArraySet<EntityInstanceFinder>(); 433 childEntities.put(child.getEntityClass(), parents); 434 } 435 parents.add(child); 436 } 437 } 431 throw new IllegalStateException("Child routers can't add finders."); 432 } 433 Set<EntityInstanceFinder> parents = childEntities.get(child 434 .getEntityClass()); 435 if (parents == null) { 436 parents = new CopyOnWriteArraySet<EntityInstanceFinder>(); 437 childEntities.put(child.getEntityClass(), parents); 438 } 439 parents.add(child); 440 } 441 442 public Reference getBaseRef() { 443 return baseRef; 444 } 445 446 public EntityRouter setBaseRef(String baseRef) { 447 return setBaseRef(new Reference(baseRef)); 448 } 449 450 public EntityRouter setBaseRef(Reference baseRef) { 451 this.baseRef = baseRef; 452 return this; 453 } 454 438 455 } trunk/src/main/java/org/sarugo/restlet/jpa/converter/json/JSONConverter.java
r3606 r3607 64 64 Object value = p.getReadMethod().invoke( 65 65 entityInstance.getEntity()); 66 String url = entityInstance.getFinder().getRo uter()66 String url = entityInstance.getFinder().getRootRouter() 67 67 .getEntityURL(value); 68 68 if (url != null) { … … 101 101 .getEntityList().size()); 102 102 for (E entity : entityCollection.getEntityList()) { 103 urlList.add(entityCollection.getFinder().getRo uter()103 urlList.add(entityCollection.getFinder().getRootRouter() 104 104 .getEntityURL(entity)); 105 105 } trunk/src/main/java/org/sarugo/restlet/jpa/converter/text/ReferenceListConverter.java
r3606 r3607 50 50 list.setIdentifier(entityCollection.getRequest().getResourceRef()); 51 51 for (E o : entityCollection.getEntityList()) { 52 list.add(entityCollection.getFinder().getRo uter().getEntityURL(52 list.add(entityCollection.getFinder().getRootRouter().getEntityURL( 53 53 o)); 54 54 } trunk/src/main/java/org/sarugo/restlet/jpa/resource/EntityCollection.java
r3606 r3607 159 159 /** Get a named query. */ 160 160 protected Query getEntityListQuery(String queryName) { 161 return getFinder().getRo uter().getEntityManager().createNamedQuery(161 return getFinder().getRootRouter().getEntityManager().createNamedQuery( 162 162 queryName); 163 163 } … … 165 165 /** Get the default query. */ 166 166 protected Query getEntityListQuery() { 167 return getFinder().getRo uter().getEntityManager().createQuery(167 return getFinder().getRootRouter().getEntityManager().createQuery( 168 168 ((EntityCollectionFinder<E>)getFinder()).getDefaultQuery()); 169 169 } … … 203 203 E entity = converter.acceptRepresentation(representation); 204 204 if (entity != null) { 205 getFinder().getRo uter().getEntityManager().persist(entity);205 getFinder().getRootRouter().getEntityManager().persist(entity); 206 206 accepted = true; 207 207 break; trunk/src/main/java/org/sarugo/restlet/jpa/resource/EntityInstance.java
r3606 r3607 92 92 Object id = getId(request.getAttributes()); 93 93 if (id != null) { 94 entity = getFinder().getRo uter().getEntityManager().find(94 entity = getFinder().getRootRouter().getEntityManager().find( 95 95 getFinder().getEntityClass(), id); 96 96 } … … 237 237 @Override 238 238 public void removeRepresentations() throws ResourceException { 239 getFinder().getRo uter().getEntityManager().remove(entity);239 getFinder().getRootRouter().getEntityManager().remove(entity); 240 240 } 241 241
