Collection<LinkBuilder> templates = relationshipDefinition.getCollectionLinkBuilders(componentType); for (Link link : _resolveUrlTokens(templates, null, _acquireTokenResolver())) _assignResourceLinks(childResource, component, componentType); childResource = _createResource(component, contentType);
/** * Bind a TokenBinder to the elements in a collection resource. * When a collection resource is created via createCollectionResource(), * the TokenBinder is called for each element in the collection to bind * URL tokens to individual properties within the element, if necessary. * <p/> * The TokenBinder is specific to the current thread. * * @param callback a TokenBinder */ public static <T> void tokenBinder(TokenBinder<T> callback) { INSTANCE._addTokenBinder(callback); }
private Collection<Resource> _createResources(Collection<?> components, Class<?> componentType, String contentType) { if (components == null || components.isEmpty()) return Collections.emptyList(); List<Resource> resources = new ArrayList<Resource>(components.size()); Resource childResource = null; for (Object component : components) { if (Resource.class.isAssignableFrom(component.getClass())) { childResource = (Resource) component; _assignResourceLinks(childResource, component, componentType); } else { childResource = _createResource(component, contentType); } } return resources; }
private void _assignResourceLinks(Resource r, Object object, Class<?> objectType) { if (object != null) { Collection<LinkBuilder> linkBuilders = relationshipDefinition.getLinkBuilders(objectType); for (Link link : _resolveUrlTokens(linkBuilders, object, _acquireTokenResolver())) { r.addLink(link, relationshipDefinition.isArrayRel(objectType, link.getRel())); } } r.addNamespaces(relationshipDefinition.getNamespaces().values()); } }
/** * * @param request * @param response * @return */ public Client read(Request request, Response response) { String id = request.getHeader(Constants.Url.CLIENT_ID, "No resource ID supplied"); Client entity = service.read(Identifiers.MONGOID.parse(id)); // enrich the resource with links, etc. here... HyperExpress.bind(Constants.Url.CLIENT_ID, Identifiers.MONGOID.format( entity.getId())); return entity; }
public static void define(RestExpress server) { Map<String, String> routes = server.getRouteUrlsByName(); HyperExpress.relationships() .forCollectionOf(Record.class) .rel(RelTypes.SELF, routes.get(Constants.Routes.RECORD_COLLECTION)) .withQuery("limit={limit}") .withQuery("offset={offset}") .rel(RelTypes.NEXT, routes.get(Constants.Routes.RECORD_COLLECTION) + "?offset={nextOffset}") .withQuery("limit={limit}") .optional() .rel(RelTypes.PREV, routes.get(Constants.Routes.RECORD_COLLECTION) + "?offset={prevOffset}") .withQuery("limit={limit}") .optional() .forClass(Record.class) .rel(RelTypes.SELF, routes.get(Constants.Routes.SINGLE_RECORD)) .rel(RelTypes.UP, routes.get(Constants.Routes.RECORD_COLLECTION)); } }
/** * * @param request * @param response * @return */ public List<Client> readAll(Request request, Response response) { QueryFilter filter = QueryFilters.parseFrom(request); QueryOrder order = QueryOrders.parseFrom(request); QueryRange range = QueryRanges.parseFrom(request, 20); boolean countOnly = Boolean.parseBoolean( request.getQueryStringMap().getOrDefault("countOnly", "false")); List<Client> entities = service.readAll(filter, range, order); long count = service.count(filter); response.setCollectionResponse(range, entities.size(), count); // Bind the resources in the collection with link URL tokens, etc. here... HyperExpress.tokenBinder(new TokenBinder<Client>() { @Override public void bind(Client entity, TokenResolver resolver) { resolver.bind(Constants.Url.CLIENT_ID, Identifiers.MONGOID.format(entity.getId())); } }); if (countOnly) { // only return count in Content-Range header entities.clear(); return entities; } return entities; }
private TokenResolver _bindToken(String token, String value) { return _acquireTokenResolver().bind(token, value); }
/** * @param object * @param contentType * @return */ private Resource _createResource(Object object, String contentType) { Resource r = resourceFactory.createResource(object, contentType); _assignResourceLinks(r, object, (object == null ? null : object.getClass())); return r; }
public Record read(Request request, Response response) { if (AuthenticateJwt.authenticateJwt(request, baseUrl) != true) { response.setResponseStatus(HttpResponseStatus.UNAUTHORIZED); return null; } String id = request.getHeader(Constants.Url.RECORD_ID, "No resource ID supplied"); Record entity = service.read(Identifiers.MONGOID.parse(id)); // enrich the resource with links, etc. here... HyperExpress.bind(Constants.Url.RECORD_ID, Identifiers.MONGOID.format(entity.getId())); return entity; }
/** * * @param server */ public static void define(RestExpress server) { Map<String, String> routes = server.getRouteUrlsByName(); HyperExpress.relationships() .forCollectionOf(Transaction.class) .rel(RelTypes.SELF, routes.get(Constants.Routes.TRANSACTION_COLLECTION)) .withQuery("limit={limit}") .withQuery("offset={offset}") .rel(RelTypes.NEXT, routes.get(Constants.Routes.TRANSACTION_COLLECTION) + "?offset={nextOffset}") .withQuery("limit={limit}") .optional() .rel(RelTypes.PREV, routes.get(Constants.Routes.TRANSACTION_COLLECTION) + "?offset={prevOffset}") .withQuery("limit={limit}") .optional() .forClass(Transaction.class) .rel(RelTypes.SELF, routes.get(Constants.Routes.SINGLE_TRANSACTION)) .rel(RelTypes.UP, routes.get(Constants.Routes.TRANSACTION_COLLECTION)); } }
public List<Record> readAll(Request request, Response response) { if (AuthenticateJwt.authenticateJwt(request, baseUrl) != true) { response.setResponseStatus(HttpResponseStatus.UNAUTHORIZED); return null; } QueryFilter filter = QueryFilters.parseFrom(request); QueryOrder order = QueryOrders.parseFrom(request); QueryRange range = QueryRanges.parseFrom(request, 20); boolean countOnly = Boolean.parseBoolean( request.getQueryStringMap().getOrDefault("countOnly", "false")); List<Record> entities = service.readAll(filter, range, order); long count = service.count(filter); response.setCollectionResponse(range, entities.size(), count); // Bind the resources in the collection with link URL tokens, etc. here... HyperExpress.tokenBinder(new TokenBinder<Record>() { @Override public void bind(Record entity, TokenResolver resolver) { resolver.bind(Constants.Url.RECORD_ID, Identifiers.MONGOID.format(entity.getId())); } }); if (countOnly) { // only return count in Content-Range header entities.clear(); return entities; } return entities; }
private <T> TokenResolver _addTokenBinder(TokenBinder<T> callback) { return _acquireTokenResolver().binder(callback); }
/** * * @param request * @param response * @return */ public Vehicle read(Request request, Response response) { if (jwtImpl.authenticateJwt(request, baseUrl) != true) { response.setResponseStatus(HttpResponseStatus.UNAUTHORIZED); return null; } String id = request.getHeader(Constants.Url.VEHICLE_ID, "No resource ID supplied"); Vehicle entity = service.read(Identifiers.MONGOID.parse(id)); // enrich the resource with links, etc. here... HyperExpress.bind(Constants.Url.VEHICLE_ID, Identifiers.MONGOID.format(entity.getId())); return entity; }
/** * * @param server */ public static void define(RestExpress server) { Map<String, String> routes = server.getRouteUrlsByName(); HyperExpress.relationships() .forCollectionOf(Vehicle.class) .rel(RelTypes.SELF, routes.get(Constants.Routes.VEHICLE_COLLECTION)) .withQuery("limit={limit}") .withQuery("offset={offset}") .rel(RelTypes.NEXT, routes.get(Constants.Routes.VEHICLE_COLLECTION) + "?offset={nextOffset}") .withQuery("limit={limit}") .optional() .rel(RelTypes.PREV, routes.get(Constants.Routes.VEHICLE_COLLECTION) + "?offset={prevOffset}") .withQuery("limit={limit}") .optional() .forClass(Vehicle.class) .rel(RelTypes.SELF, routes.get(Constants.Routes.SINGLE_VEHICLE)) .rel(RelTypes.UP, routes.get(Constants.Routes.VEHICLE_COLLECTION)); } }
HyperExpress.tokenBinder(new TokenBinder<Vehicle>() { @Override public void bind(Vehicle entity, TokenResolver resolver) {
/** * * @param request * @param response * @return */ public Transaction read(Request request, Response response) { if (AuthenticateJwt.authenticateJwt(request, baseUrl) != true) { response.setResponseStatus(HttpResponseStatus.UNAUTHORIZED); return null; } String id = request.getHeader(Constants.Url.TRANSACTION_ID, "No resource ID supplied"); Transaction entity = service.read(Identifiers.MONGOID.parse(id)); // enrich the resource with links, etc. here... HyperExpress.bind(Constants.Url.TRANSACTION_ID, Identifiers.MONGOID.format(entity.getId())); return entity; }
/** * * @param server */ public static void define(RestExpress server) { Map<String, String> routes = server.getRouteUrlsByName(); HyperExpress.relationships() .forClass(Client.class) .forCollectionOf(Client.class) .rel(RelTypes.SELF, routes.get(Constants.Routes.CLIENT_COLLECTION)) .withQuery("limit={limit}") .withQuery("offset={offset}") .rel(RelTypes.NEXT, routes.get(Constants.Routes.CLIENT_COLLECTION) + "?offset={nextOffset}") .withQuery("limit={limit}") .optional() .rel(RelTypes.PREV, routes.get(Constants.Routes.CLIENT_COLLECTION) + "?offset={prevOffset}") .withQuery("limit={limit}") .optional() .forClass(Client.class) .rel(RelTypes.SELF, routes.get(Constants.Routes.SINGLE_CLIENT)) .rel(RelTypes.UP, routes.get(Constants.Routes.CLIENT_COLLECTION)); } }
HyperExpress.tokenBinder(new TokenBinder<Transaction>() { @Override public void bind(Transaction entity, TokenResolver resolver) {
public Record create(Request request, Response response) { if (AuthenticateJwt.authenticateJwt(request, baseUrl) != true) { response.setResponseStatus(HttpResponseStatus.UNAUTHORIZED); return null; } Record entity = request.getBodyAs(Record.class, "Resource details not provided"); Record saved = service.create(entity); // Construct the response for create... response.setResponseCreated(); // Bind the resource with link URL tokens, etc. here... TokenResolver resolver = HyperExpress.bind(Constants.Url.RECORD_ID, Identifiers.MONGOID.format(saved.getId())); // Include the Location header... String locationPattern = request.getNamedUrl(HttpMethod.GET, Constants.Routes.SINGLE_RECORD); response.addLocationHeader(LOCATION_BUILDER.build(locationPattern, resolver)); LOG.info("maintenance record created: " + Identifiers.MONGOID.format(saved.getId())); // Return the newly-created resource... return saved; }