Changeset 3577

Show
Ignore:
Timestamp:
04/02/08 14:17:18 (4 years ago)
Author:
michael
Message:

Tidy up resource structure and move entity/list initialisation into an overridable method rather than the constructor to facilitate non-query based entities/lists.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/build.properties

    r2863 r3577  
    11project.name=restlet-jpa 
    2 project.rev=0.1 
     2project.rev=0.2 
    33project.status=integration 
  • trunk/src/main/java/org/sarugo/restlet/jpa/EntityFinder.java

    r3563 r3577  
    3535import org.restlet.data.Request; 
    3636import org.restlet.data.Response; 
    37 import org.restlet.resource.Resource; 
    3837import org.sarugo.restlet.jpa.converter.ConverterHelper; 
    3938import org.sarugo.restlet.jpa.converter.InputConverter; 
    4039import org.sarugo.restlet.jpa.converter.OutputConverter; 
     40import org.sarugo.restlet.jpa.resource.EntityCollection; 
     41import org.sarugo.restlet.jpa.resource.EntityResource; 
    4142 
    4243/** 
     
    5253 */ 
    5354public class EntityFinder<E> extends Finder { 
     55     
     56    private final Class<? extends EntityResource> resource; 
    5457 
    5558    private final Class<E> entityClass; 
     
    5760    private final Class<? extends Object> entityIdClass; 
    5861 
    59     private final PersistenceRouter router; 
     62    private final EntityRouter router; 
    6063 
    6164    private final List<InputConverter<E>> inputConverters; 
     
    7376     *  
    7477     * @param router 
    75      *            The {@link PersistenceRouter} this finder will be be attached 
     78     *            The {@link EntityRouter} this finder will be be attached 
    7679     *            to. 
    7780     * @param entityClass 
     
    8285     *            {@link EntityFinder}, {@link Request}, {@link Response}. 
    8386     */ 
    84     public EntityFinder(PersistenceRouter router, Class<E> entityClass, 
    85             Class<? extends Resource> resource) { 
    86         super(router.getContext(), resource); 
     87    public EntityFinder(EntityRouter router, Class<E> entityClass, 
     88            Class<? extends EntityResource> resource) { 
     89        super(router.getContext()); 
     90        this.resource = resource; 
    8791        this.router = router; 
    8892        this.entityClass = entityClass; 
     
    9397    } 
    9498 
    95     /** Get the {@link PersistenceRouter} this finder is attached to. */ 
    96     public PersistenceRouter getRouter() { 
     99    /** Get the {@link EntityRouter} this finder is attached to. */ 
     100    public EntityRouter getRouter() { 
    97101        return router; 
    98102    } 
     
    105109    /** 
    106110     * Attach this finder to a router. Should only be called by 
    107      * {@link PersistenceRouter}. 
    108      *  
    109      * @see PersistenceRouter#attach(String, EntityFinder) 
    110      * @see PersistenceRouter#attachCollection(String, EntityFinder) 
     111     * {@link EntityRouter}. 
     112     *  
     113     * @see EntityRouter#attach(String, EntityFinder) 
     114     * @see EntityRouter#attachCollection(String, EntityFinder) 
    111115     */ 
    112116    void setRoute(Route route) { 
     
    156160    protected Handler findTarget(Request request, Response response) { 
    157161        try { 
    158             Constructor<? extends Handler> c = getTargetClass().getConstructor( 
    159                     EntityFinder.class, Request.class, Response.class); 
    160             return c.newInstance(this, request, response); 
     162            Constructor<? extends EntityResource> c = resource.getConstructor( 
     163                    EntityFinder.class); 
     164            EntityResource resource = c.newInstance(this); 
     165            resource.init(request, response); 
     166            return resource; 
    161167        } catch (SecurityException e) { 
    162168            getLogger().log(Level.WARNING, "Error constructing resource.", e); 
     
    242248     * @param entity 
    243249     *            The entity. 
    244      * @return The URL relative to the attached {@link PersistenceRouter}. 
     250     * @return The URL relative to the attached {@link EntityRouter}. 
    245251     */ 
    246252    public String getEntityURL(E entity) { 
  • trunk/src/main/java/org/sarugo/restlet/jpa/EntityRouter.java

    r3563 r3577  
    3333import org.restlet.data.Response; 
    3434import org.restlet.data.Status; 
     35import org.sarugo.restlet.jpa.resource.EntityCollection; 
     36import org.sarugo.restlet.jpa.resource.EntityResource; 
    3537 
    3638/** 
     
    5052 * @author Michael Terrington 
    5153 */ 
    52 public class PersistenceRouter extends Restlet { 
     54public class EntityRouter extends Restlet { 
    5355 
    5456    private final Router router; 
     
    7274     *            The entity manager factory. 
    7375     */ 
    74     public PersistenceRouter(Context context, 
     76    public EntityRouter(Context context, 
    7577            EntityManagerFactory entityManagerFactory) { 
    7678        super(context); 
  • trunk/src/main/java/org/sarugo/restlet/jpa/converter/ConverterHelper.java

    r3563 r3577  
    2121import java.lang.reflect.Constructor; 
    2222 
    23 import org.sarugo.restlet.jpa.PersistenceRouter; 
     23import org.sarugo.restlet.jpa.EntityRouter; 
    2424 
    2525/** 
     
    3434 
    3535    public static <T extends Object> T convertToType(Class<T> type, 
    36             String value, PersistenceRouter router) { 
     36            String value, EntityRouter router) { 
    3737        // Short cut for String types 
    3838        if (type.isAssignableFrom(String.class)) { 
  • trunk/src/main/java/org/sarugo/restlet/jpa/converter/OutputConverter.java

    r3563 r3577  
    2121import org.restlet.resource.Representation; 
    2222import org.restlet.resource.Variant; 
    23 import org.sarugo.restlet.jpa.EntityCollection; 
    24 import org.sarugo.restlet.jpa.EntityResource; 
     23import org.sarugo.restlet.jpa.resource.EntityResource; 
    2524 
    2625public interface OutputConverter<E> { 
     
    3130 
    3231    /** 
    33      * Produce a representation for the provided entity
     32     * Produce a representation for the provided resource
    3433     *  
    3534     * @param entityResource 
     
    3837     */ 
    3938    Representation represent(EntityResource<E> entityResource, Variant variant); 
    40  
    41     /** 
    42      * Produce a representation for the provided entity collection. 
    43      *  
    44      * @param entityCollection 
    45      *            the entity collection to represent. 
    46      * @return 
    47      */ 
    48     Representation represent(EntityCollection<E> entityCollection, 
    49             Variant variant); 
    5039} 
  • trunk/src/main/java/org/sarugo/restlet/jpa/converter/form/FormEntityUpdateConverter.java

    r3563 r3577  
    3030import org.restlet.data.MediaType; 
    3131import org.restlet.resource.Representation; 
    32 import org.sarugo.restlet.jpa.PersistenceRouter; 
     32import org.sarugo.restlet.jpa.EntityRouter; 
    3333import org.sarugo.restlet.jpa.converter.ConverterHelper; 
    3434import org.sarugo.restlet.jpa.converter.InputConverter; 
     
    3636public class FormEntityUpdateConverter<E> implements InputConverter<E> { 
    3737 
    38     private final PersistenceRouter router; 
     38    private final EntityRouter router; 
    3939 
    4040    private final Class<E> entityClass; 
    4141 
    42     public FormEntityUpdateConverter(PersistenceRouter router, 
     42    public FormEntityUpdateConverter(EntityRouter router, 
    4343            Class<E> entityClass) { 
    4444        this.router = router; 
  • trunk/src/main/java/org/sarugo/restlet/jpa/converter/json/JSONConverter.java

    r3563 r3577  
    3333import org.restlet.resource.StringRepresentation; 
    3434import org.restlet.resource.Variant; 
    35 import org.sarugo.restlet.jpa.EntityCollection; 
    36 import org.sarugo.restlet.jpa.EntityResource; 
    3735import org.sarugo.restlet.jpa.converter.OutputConverter; 
     36import org.sarugo.restlet.jpa.resource.EntityCollection; 
     37import org.sarugo.restlet.jpa.resource.EntityInstance; 
     38import org.sarugo.restlet.jpa.resource.EntityResource; 
    3839 
    3940import com.sdicons.json.mapper.JSONMapper; 
     
    4950    } 
    5051 
    51     public Representation represent(EntityResource<E> entityResource, 
     52    public Representation represent(EntityInstance<E> entityInstance, 
    5253            Variant variant) { 
    5354        if (MediaType.APPLICATION_JSON.equals(variant.getMediaType())) { 
     
    5859                Map<String, Object> entityValues = new HashMap<String, Object>(); 
    5960                for (PropertyDescriptor p : Introspector.getBeanInfo( 
    60                         entityResource.getFinder().getEntityClass()) 
     61                        entityInstance.getFinder().getEntityClass()) 
    6162                        .getPropertyDescriptors()) { 
    6263                    if (p.getWriteMethod() != null && p.getReadMethod() != null) { 
    6364                        Object value = p.getReadMethod().invoke( 
    64                                 entityResource.getEntity()); 
    65                         String url = entityResource.getFinder().getRouter() 
     65                                entityInstance.getEntity()); 
     66                        String url = entityInstance.getFinder().getRouter() 
    6667                                .getEntityURL(value); 
    6768                        if (url != null) { 
     
    7475                        .render(true), variant.getMediaType()); 
    7576            } catch (MapperException e) { 
    76                 entityResource.getLogger().log(Level.WARNING, 
     77                entityInstance.getLogger().log(Level.WARNING, 
    7778                        "Unable to map entity to JSON", e); 
    7879            } catch (IntrospectionException e) { 
    79                 entityResource.getLogger().log(Level.WARNING, 
     80                entityInstance.getLogger().log(Level.WARNING, 
    8081                        "Unable to map entity to JSON", e); 
    8182            } catch (IllegalArgumentException e) { 
    82                 entityResource.getLogger().log(Level.WARNING, 
     83                entityInstance.getLogger().log(Level.WARNING, 
    8384                        "Unable to map entity to JSON", e); 
    8485            } catch (IllegalAccessException e) { 
    85                 entityResource.getLogger().log(Level.WARNING, 
     86                entityInstance.getLogger().log(Level.WARNING, 
    8687                        "Unable to map entity to JSON", e); 
    8788            } catch (InvocationTargetException e) { 
    88                 entityResource.getLogger().log(Level.WARNING, 
     89                entityInstance.getLogger().log(Level.WARNING, 
    8990                        "Unable to map entity to JSON", e); 
    9091            } 
     
    119120    } 
    120121 
     122    public Representation represent(EntityResource<E> entityResource, 
     123            Variant variant) { 
     124        if (entityResource instanceof EntityCollection) { 
     125            return represent((EntityCollection<E>) entityResource, variant); 
     126        } else if (entityResource instanceof EntityInstance) { 
     127            return represent((EntityInstance<E>) entityResource, variant); 
     128        } else { 
     129            return null; 
     130        } 
     131    } 
     132 
    121133} 
  • trunk/src/main/java/org/sarugo/restlet/jpa/converter/text/ReferenceListConverter.java

    r3563 r3577  
    2424import org.restlet.resource.Representation; 
    2525import org.restlet.resource.Variant; 
    26 import org.sarugo.restlet.jpa.EntityCollection; 
    27 import org.sarugo.restlet.jpa.EntityResource; 
    2826import org.sarugo.restlet.jpa.converter.OutputConverter; 
     27import org.sarugo.restlet.jpa.resource.EntityCollection; 
     28import org.sarugo.restlet.jpa.resource.EntityResource; 
    2929 
    3030public class ReferenceListConverter<E> implements OutputConverter<E> { 
     
    4343    public Representation represent(EntityResource<E> entityResource, 
    4444            Variant variant) { 
    45         return null; 
    46     } 
    47  
    48     public Representation represent(EntityCollection<E> entityCollection, 
    49             Variant variant) { 
    50         if (VARIANTS.contains(variant.getMediaType())) { 
     45        if (VARIANTS.contains(variant.getMediaType()) && entityResource instanceof EntityCollection) { 
     46            EntityCollection<E> entityCollection = (EntityCollection<E>) entityResource; 
    5147            ReferenceList list = new ReferenceList(entityCollection 
    5248                    .getEntityList().size()); 
  • trunk/src/main/java/org/sarugo/restlet/jpa/converter/text/StringEntityConverter.java

    r3563 r3577  
    2424import org.restlet.resource.StringRepresentation; 
    2525import org.restlet.resource.Variant; 
    26 import org.sarugo.restlet.jpa.EntityCollection; 
    27 import org.sarugo.restlet.jpa.EntityResource; 
    2826import org.sarugo.restlet.jpa.converter.OutputConverter; 
     27import org.sarugo.restlet.jpa.resource.EntityInstance; 
     28import org.sarugo.restlet.jpa.resource.EntityResource; 
    2929 
     30/** 
     31 * Simple converter for {@link EntityInstance}s. Calls 
     32 * {@link Object#toString()} on the entity instance to return 
     33 * {@link MediaType#TEXT_PLAIN} representation. 
     34 */ 
    3035public class StringEntityConverter<E> implements OutputConverter<E> { 
    3136 
     
    3944    public Representation represent(EntityResource<E> entityResource, 
    4045            Variant variant) { 
    41         if (variant.getMediaType().equals(MediaType.TEXT_PLAIN)) { 
    42             return new StringRepresentation(entityResource.getEntity() 
    43                     .toString()); 
     46        if (variant.getMediaType().equals(MediaType.TEXT_PLAIN) 
     47                && entityResource instanceof EntityInstance) { 
     48            EntityInstance<E> instance = (EntityInstance<E>) entityResource; 
     49            return new StringRepresentation(instance.getEntity().toString()); 
    4450        } 
    4551        return null; 
    4652    } 
    4753 
    48     public Representation represent(EntityCollection<E> entityCollection, 
    49             Variant variant) { 
    50         return null; 
    51     } 
    52  
    5354} 
  • trunk/src/main/java/org/sarugo/restlet/jpa/resource/EntityCollection.java

    r3563 r3577  
    1515 */ 
    1616 
    17 package org.sarugo.restlet.jpa
     17package org.sarugo.restlet.jpa.resource
    1818 
    1919import java.util.ArrayList; 
     
    2222import javax.persistence.Query; 
    2323 
     24import org.restlet.Context; 
    2425import org.restlet.data.Parameter; 
    2526import org.restlet.data.Request; 
     
    2930import org.restlet.resource.Resource; 
    3031import org.restlet.resource.ResourceException; 
    31 import org.restlet.resource.Variant
     32import org.sarugo.restlet.jpa.EntityFinder
    3233import org.sarugo.restlet.jpa.converter.InputConverter; 
    33 import org.sarugo.restlet.jpa.converter.OutputConverter; 
    3434 
    3535/** 
     
    3939 * @author Michael Terrington 
    4040 */ 
    41 public class EntityCollection<E> extends Resource
     41public class EntityCollection<E> extends EntityResource<E>
    4242 
    43     private final EntityFinder<E> finder; 
     43    /** The first result to retrieve. Defaults to 1. */ 
     44    protected int start; 
    4445 
    45     protected final List<E> entityList; 
     46    /** 
     47     * The number of results to retrieve. Defaults to 
     48     * {@link EntityFinder#getMaxResults()}. 
     49     */ 
     50    protected int maxResults; 
    4651 
    47     protected final int start; 
     52    /** The list of entities for this resource. */ 
     53    protected List<E> entityList; 
    4854 
    49     protected final int maxResults; 
     55    /** 
     56     * Whether the list of entities is complete or further entities may be 
     57     * retrieved at <code>start+maxResults</code>. 
     58     */ 
     59    protected boolean listComplete; 
    5060 
    51     protected final boolean listComplete; 
     61    /** 
     62     * Initialise this entity collection, linking it to the given finder. 
     63     *  
     64     * @param finder 
     65     *            The finder this collection will use to get its entity list. 
     66     */ 
     67    public EntityCollection(EntityFinder<E> finder) { 
     68        super(finder); 
     69        start = 1; 
     70        maxResults = finder.getMaxResults(); 
     71    } 
    5272 
    53     public EntityCollection(EntityFinder<E> finder, Request request, 
    54             Response response) { 
    55         super(finder.getContext(), request, response); 
    56         this.finder = finder; 
    57         int start = 1; 
    58         int maxResults = finder.getMaxResults(); 
    59         for (Parameter param : getRequest().getResourceRef().getQueryAsForm()) { 
    60             if (param.getName().equals("max")) { 
    61                 // Set max to minimum of the finder's limit or request value 
    62                 // This prevents DoS consumption of resources 
    63                 maxResults = Math.min(Integer.parseInt(param.getValue()), 
    64                         maxResults); 
    65             } else if (param.getName().equals("start")) { 
    66                 start = Integer.parseInt(param.getValue()); 
    67             } 
    68         } 
    69         this.start = start; 
    70         this.maxResults = maxResults; 
    71         Query q = finder.getEntityListQuery(request, response); 
     73    /** 
     74     * Initialises this resource. By default this: 
     75     * <ol> 
     76     * <li>Calls {@link Resource#init(Context, Request, Response)} to 
     77     * initialise the base class.</li> 
     78     * <li>Calls {@link #initMaxAndStart()}.</li> 
     79     * <li>Gets the JPA query from 
     80     * {@link EntityFinder#getEntityListQuery(Request, Response)}.</li> 
     81     * <li>Sets {@link Query#setFirstResult(int)} to <code>start - 1</code>).</li> 
     82     * <li>Sets {@link Query#setMaxResults(int)} to <code>maxResults + 1</code>.</li> 
     83     * <li>Gets the result list from {@link Query#getResultList()}.</li> 
     84     * <li>Sets {@link #listComplete} to <tt>true</tt> if the result list is 
     85     * &lt;= {@link #maxResults}.<br> 
     86     * Otherwise, truncates the list to {@link #maxResults} (to remove the +1).</li> 
     87     * </ol> 
     88     *  
     89     * Override {@link EntityFinder#getEntityListQuery(Request, Response)} if 
     90     * you want to change the query. 
     91     *  
     92     * Override {@link #initMaxAndStart()} if you want to change how 
     93     * {@link #start} and {@link #maxResults} are initialised. 
     94     *  
     95     * Override this method if you want to retrieve the entity list from a 
     96     * non-query source (e.g. from a containing entity). Do not call this 
     97     * implementation (<tt>super.init</tt>) if you override it, instead 
     98     * ensure you call {@link Resource#init(Context, Request, Response)} first 
     99     * and {@link #initMaxAndStart()} if required. 
     100     */ 
     101    public void init(Request request, Response response) { 
     102        init(getFinder().getContext(), request, response); 
     103        initMaxAndStart(); 
     104        Query q = getFinder().getEntityListQuery(request, response); 
    72105        q.setFirstResult(start - 1); 
    73106        q.setMaxResults(maxResults + 1); 
     
    83116    } 
    84117 
     118    /** 
     119     * Initialises {@link #maxResults} and {@link #start} based on query 
     120     * parameters <tt>max</tt> and <tt>start</tt>. {@link #maxResults} will 
     121     * not be changed if the query parameter is greater than the value returned 
     122     * by {@link EntityFinder#getMaxResults()} to prevent DoS attacks. 
     123     */ 
     124    protected void initMaxAndStart() { 
     125        for (Parameter param : getRequest().getResourceRef().getQueryAsForm()) { 
     126            if (param.getName().equals("max")) { 
     127                // This prevents DoS consumption of resources 
     128                maxResults = Math.min(Integer.parseInt(param.getValue()), 
     129                        maxResults); 
     130            } else if (param.getName().equals("start")) { 
     131                start = Integer.parseInt(param.getValue()); 
     132            } 
     133        } 
     134    } 
     135 
     136    /** Gets the entity list for this resource. */ 
    85137    public List<E> getEntityList() { 
    86138        return entityList; 
    87139    } 
    88140 
     141    /** 
     142     * If the list is not complete, more entities can be retrieved at 
     143     * <code>start + maxResults</code>. 
     144     */ 
    89145    public boolean isListComplete() { 
    90146        return listComplete; 
    91147    } 
    92148 
     149    /** Maximum results the entity list will contain. */ 
    93150    public int getMaxResults() { 
    94151        return maxResults; 
    95152    } 
    96153 
     154    /** The 1-based index of the first result. */ 
    97155    public int getStart() { 
    98156        return start; 
    99157    } 
    100158 
    101     public EntityFinder<E> getFinder() { 
    102         return finder; 
    103     } 
    104  
    105     @Override 
    106     public boolean allowPost() { 
    107         return !getFinder().getInputConverters().isEmpty(); 
    108     } 
    109  
    110     @Override 
    111     public boolean isReadable() { 
    112         return !getFinder().getOutputConverters().isEmpty(); 
    113     } 
    114  
    115     @Override 
    116     public Representation represent(Variant variant) throws ResourceException { 
    117         Representation representation = null; 
    118         for (OutputConverter<E> converter : getFinder().getOutputConverters()) { 
    119             representation = converter.represent(this, variant); 
    120             if (representation != null) { 
    121                 break; 
    122             } 
    123         } 
    124         return representation; 
    125     } 
    126  
     159    /** 
     160     * Accept a new entity for insertion into this collection using the first 
     161     * accepting input converter from the finder. 
     162     */ 
    127163    @Override 
    128164    public void acceptRepresentation(Representation representation) 
     
    142178    } 
    143179 
     180    /** Put of a collection is not supported. */ 
     181    @Override 
     182    public boolean allowPut() { 
     183        return false; 
     184    } 
     185 
     186    /** Delete of a collection is not supported. */ 
     187    @Override 
     188    public boolean allowDelete() { 
     189        return false; 
     190    } 
     191 
    144192} 
  • trunk/src/main/java/org/sarugo/restlet/jpa/resource/EntityResource.java

    r3563 r3577  
    1515 */ 
    1616 
    17 package org.sarugo.restlet.jpa
     17package org.sarugo.restlet.jpa.resource
    1818 
    1919import org.restlet.data.Request; 
    2020import org.restlet.data.Response; 
    21 import org.restlet.data.Status; 
    2221import org.restlet.resource.Representation; 
    2322import org.restlet.resource.Resource; 
    2423import org.restlet.resource.ResourceException; 
    2524import org.restlet.resource.Variant; 
    26 import org.sarugo.restlet.jpa.converter.InputConverter; 
     25import org.sarugo.restlet.jpa.EntityFinder; 
    2726import org.sarugo.restlet.jpa.converter.OutputConverter; 
    2827 
     
    3332 * @author Michael Terrington 
    3433 */ 
    35 public class EntityResource<E> extends Resource { 
     34public abstract class EntityResource<E> extends Resource { 
    3635 
    3736    private final EntityFinder<E> finder; 
    3837 
    39     private final E entity; 
    40  
    41     public EntityResource(EntityFinder<E> finder, Request request, 
    42             Response response) { 
    43         super(finder.getContext(), request, response); 
     38    /** 
     39     * Initialise this entity resource, linking it to the given finder. The set 
     40     * of variants this resource produces is initialised to the variants 
     41     * returned from the output converters in the finder. 
     42     *  
     43     * @param finder 
     44     *            The finder associated with this resource. 
     45     */ 
     46    public EntityResource(EntityFinder<E> finder) { 
    4447        this.finder = finder; 
    45         this.entity = finder.getEntity(request, response); 
    4648        for (OutputConverter<E> converter : finder.getOutputConverters()) { 
    4749            getVariants().addAll(converter.getVariants()); 
     
    4951    } 
    5052 
    51     public E getEntity() { 
    52         return entity; 
    53     } 
     53    /** Lookup the entity/entity list for the given request. */ 
     54    public abstract void init(Request request, Response response); 
    5455 
    55     public EntityFinder<E> getFinder() { 
     56    /** The finder this resource is initialised from. */ 
     57    public final EntityFinder<E> getFinder() { 
    5658        return finder; 
    5759    } 
    5860 
     61    /** True if the finder provides input converters. */ 
    5962    @Override 
    6063    public boolean isModifiable() { 
     
    6265    } 
    6366 
     67    /** True if the finder provides output converters. */ 
    6468    @Override 
    6569    public boolean isReadable() { 
     
    6771    } 
    6872 
    69     @Override 
    70     public boolean isAvailable() { 
    71         return entity != null; 
    72     } 
    73  
     73    /** 
     74     * Represent this resource using the first matching output converter from 
     75     * the finder. 
     76     */ 
    7477    @Override 
    7578    public Representation represent(Variant variant) throws ResourceException { 
     
    8487    } 
    8588 
    86     @Override 
    87     public boolean allowPost() { 
    88         return false; 
    89     } 
    90  
    91     @Override 
    92     public void storeRepresentation(Representation representation) 
    93             throws ResourceException { 
    94         boolean accepted = false; 
    95         for (InputConverter<E> converter : getFinder().getInputConverters()) { 
    96             if (converter.storeRepresentation(getEntity(), representation)) { 
    97                 accepted = true; 
    98                 break; 
    99             } 
    100         } 
    101         if (!accepted) { 
    102             getResponse().setStatus(Status.CLIENT_ERROR_UNSUPPORTED_MEDIA_TYPE); 
    103         } 
    104     } 
    105  
    106     @Override 
    107     public void removeRepresentations() throws ResourceException { 
    108         if (!getFinder().removeEntity(entity)) { 
    109             getResponse().setStatus(Status.CLIENT_ERROR_METHOD_NOT_ALLOWED); 
    110         } 
    111     } 
    112  
    11389} 
  • trunk/src/test/java/org/sarugo/restlet/jpa/PersistenceResourceTests.java

    r3563 r3577  
    3131import org.sarugo.restlet.jpa.converter.json.JSONConverter; 
    3232import org.sarugo.restlet.jpa.converter.text.StringEntityConverter; 
     33import org.sarugo.restlet.jpa.resource.EntityResource; 
    3334 
    3435public class PersistenceResourceTests extends TestCase { 
     
    8889        private final E testEntity; 
    8990 
    90         public TestFinder(PersistenceRouter router, Class<E> entityClass) 
     91        public TestFinder(EntityRouter router, Class<E> entityClass) 
    9192                throws InstantiationException, IllegalAccessException { 
    9293            super(router, entityClass, EntityResource.class); 
     
    100101    } 
    101102 
    102     private PersistenceRouter router; 
     103    private EntityRouter router; 
    103104 
    104105    @Override 
    105106    protected void setUp() throws Exception { 
    106107        super.setUp(); 
    107         router = new PersistenceRouter(null, Persistence 
     108        router = new EntityRouter(null, Persistence 
    108109                .createEntityManagerFactory("test")); 
    109110        router.getLogger().setLevel(Level.OFF); 
  • trunk/src/test/java/org/sarugo/restlet/jpa/PersistenceRouterTest.java

    r3563 r3577  
    1414        component.getServers().add(Protocol.HTTP, 8080); 
    1515        component.getClients().add(Protocol.CLAP); 
    16         PersistenceRouter router = new PersistenceRouter( 
     16        EntityRouter router = new EntityRouter( 
    1717                component.getContext(), Persistence 
    1818                        .createEntityManagerFactory("test"));