Java 类javax.ws.rs.core.Link 实例源码
项目:trellis
文件:MultipartUploader.java
@Override
public void filter(final ContainerRequestContext req, final ContainerResponseContext res) throws IOException {
if (READ_METHODS.contains(req.getMethod())) {
if (res.getLinks().stream().filter(l -> l.getRel().equals(TYPE)).map(Link::getUri).map(URI::toString)
.anyMatch(uri -> uri.equals(Container.getIRIString()) || uri.equals(NonRDFSource.getIRIString()))) {
final String urlBase = nonNull(baseUrl) ? baseUrl : req.getUriInfo().getBaseUri().toString();
final String identifier = urlBase + req.getUriInfo().getPath();
res.getHeaders().add("Link", fromUri(identifier + "?ext=" + UPLOADS)
.rel(multipartUploadService.getIRIString()).build());
}
final List<String> exts = req.getUriInfo().getQueryParameters().getOrDefault("ext", emptyList());
if (exts.contains(UPLOADS)) {
res.getHeaders().putSingle(ALLOW, join(",", POST, OPTIONS));
}
}
}
项目:lra-service
文件:LRARecord.java
static String extractCompensator(String linkStr) {
for (String lnk : linkStr.split(",")) {
Link link;
try {
link = Link.valueOf(lnk);
} catch (Exception e) {
LRALogger.logger.infof(e, "Cannot extract compensator from link'%s'", linkStr);
return linkStr;
}
if ("compensate".equals(link.getRel()))
return link.getUri().toString();
}
return linkStr;
}
项目:trellis
文件:MultipartUploader.java
@Override
public void filter(final ContainerRequestContext req, final ContainerResponseContext res) throws IOException {
if (READ_METHODS.contains(req.getMethod())) {
if (res.getLinks().stream().filter(l -> l.getRel().equals(TYPE)).map(Link::getUri).map(URI::toString)
.anyMatch(uri -> uri.equals(Container.getIRIString()) || uri.equals(NonRDFSource.getIRIString()))) {
final String urlBase = nonNull(baseUrl) ? baseUrl : req.getUriInfo().getBaseUri().toString();
final String identifier = urlBase + req.getUriInfo().getPath();
res.getHeaders().add("Link", fromUri(identifier + "?ext=" + UPLOADS)
.rel(multipartUploadService.getIRIString()).build());
}
final List<String> exts = req.getUriInfo().getQueryParameters().getOrDefault("ext", emptyList());
if (exts.contains(UPLOADS)) {
res.getHeaders().putSingle(ALLOW, join(",", POST, OPTIONS));
}
}
}
项目:sam
文件:ServerIntegrationTest.java
private ServerResponse patchServer(Server serverPatch, Link serverLink, Optional<Integer> mergeDepth) {
final Response response = RestHelper.queryParam(client.target(serverLink), mergeDepth, "mergedepth")
.request(MediaType.APPLICATION_JSON)
.build("PATCH", Entity.json(serverPatch))
.invoke();
TestHelper.assertSuccessful(response);
final ServerLink link = response.readEntity(ServerLink.class);
final Document db = servers.find(
Filters.and(
Filters.eq("hostname", link.hostname),
Filters.eq("environment", link.environment)
)).first();
return new ServerResponse(link, db);
}
项目:sam
文件:ServerSearchResult.java
@JsonCreator
public ServerSearchResult(
@JsonProperty("hostname") String hostname,
@JsonProperty("environment") String environment,
@JsonProperty("fqdn") String fqdn,
@JsonProperty("description") String description,
@JsonProperty("score") Double score,
@JsonProperty("link") Link link
) {
this.hostname = hostname;
this.environment = environment;
this.fqdn = fqdn;
this.description = description;
this.score = score;
this.link = link;
}
项目:resteasy-examples
文件:OrderResourceBean.java
public Response getOrder(int id, UriInfo uriInfo)
{
OrderEntity entity = em.getReference(OrderEntity.class, id);
Order order = entity2domain(entity);
URI self = uriInfo.getAbsolutePathBuilder().build();
Link selfLink = Link.fromUri(self).rel("self").type("application/xml").build();
order.addLink(selfLink);
if (!order.isCancelled())
{
URI cancel = uriInfo.getAbsolutePathBuilder().path("cancel").build();
Link cancelLink = Link.fromUri(cancel).rel("cancel").type("application/xml").build();
order.addLink(cancelLink);
}
Response.ResponseBuilder builder = Response.ok(order);
if (!order.isCancelled()) addCancelHeader(uriInfo, builder);
return builder.build();
}
项目:trellis
文件:MementoResource.java
/**
* Create a response builder for a TimeMap response.
*
* @param baseUrl the base URL
* @param req the LDP request
* @param serializer the serializer to use
* @return a response builder object
*/
public Response.ResponseBuilder getTimeMapBuilder(final LdpRequest req,
final IOService serializer, final String baseUrl) {
final List<MediaType> acceptableTypes = req.getHeaders().getAcceptableMediaTypes();
final String identifier = getBaseUrl(baseUrl, req) + req.getPath();
final List<Link> links = getMementoLinks(identifier, resource.getMementos()).collect(toList());
final Response.ResponseBuilder builder = Response.ok().link(identifier, ORIGINAL + " " + TIMEGATE);
builder.links(links.toArray(new Link[0])).link(Resource.getIRIString(), "type")
.link(RDFSource.getIRIString(), "type").header(ALLOW, join(",", GET, HEAD, OPTIONS));
final RDFSyntax syntax = getSyntax(acceptableTypes, of(APPLICATION_LINK_FORMAT)).orElse(null);
if (nonNull(syntax)) {
final IRI profile = ofNullable(getProfile(acceptableTypes, syntax)).orElse(expanded);
final List<Triple> extraData = getExtraTriples(identifier);
for (final Link l : links) {
if (l.getRels().contains(MEMENTO)) {
extraData.add(rdf.createTriple(rdf.createIRI(identifier), Memento.memento,
rdf.createIRI(l.getUri().toString())));
}
}
final StreamingOutput stream = new StreamingOutput() {
@Override
public void write(final OutputStream out) throws IOException {
serializer.write(concat(links.stream().flatMap(linkToTriples), extraData.stream()), out, syntax,
profile);
}
};
return builder.type(syntax.mediaType()).entity(stream);
}
return builder.type(APPLICATION_LINK_FORMAT)
.entity(links.stream().map(Link::toString).collect(joining(",\n")) + "\n");
}
项目:trellis
文件:MementoResource.java
/**
* Create a response builder for a TimeGate response.
*
* @param req the LDP request
* @param baseUrl the base URL
* @return a response builder object
*/
public Response.ResponseBuilder getTimeGateBuilder(final LdpRequest req, final String baseUrl) {
final String identifier = getBaseUrl(baseUrl, req) + req.getPath();
return Response.status(FOUND)
.location(fromUri(identifier + "?version=" + req.getDatetime().getInstant().toEpochMilli()).build())
.link(identifier, ORIGINAL + " " + TIMEGATE)
.links(getMementoLinks(identifier, resource.getMementos()).toArray(Link[]::new))
.header(VARY, ACCEPT_DATETIME);
}
项目:trellis
文件:MementoResource.java
private static Stream<Link> getTimeMap(final String identifier, final Stream<Range<Instant>> mementos) {
return mementos.reduce((acc, x) -> between(acc.getMinimum(), x.getMaximum()))
.map(x -> Link.fromUri(identifier + TIMEMAP_PARAM).rel(TIMEMAP).type(APPLICATION_LINK_FORMAT)
.param(FROM, ofInstant(x.getMinimum().minusNanos(1L).plusSeconds(1L), UTC).format(RFC_1123_DATE_TIME))
.param(UNTIL, ofInstant(x.getMaximum(), UTC).format(RFC_1123_DATE_TIME)).build())
// TODO use Optional::stream with JDK9
.map(Stream::of).orElseGet(Stream::empty);
}
项目:trellis
文件:BaseLdpHandler.java
/**
* Check if this is a deleted resource, and if so return an appropriate response.
*
* @param res the resource
* @param identifier the identifier
* @throws WebApplicationException a 410 Gone exception
*/
protected static void checkDeleted(final Resource res, final String identifier) {
if (res.isDeleted()) {
throw new WebApplicationException(status(GONE)
.links(MementoResource.getMementoLinks(identifier, res.getMementos())
.toArray(Link[]::new)).build());
}
}
项目:trellis
文件:AbstractLdpResourceTest.java
@Test
public void testGetDatetime() {
final Response res = target(RESOURCE_PATH).request()
.header(ACCEPT_DATETIME, RFC_1123_DATE_TIME.withZone(UTC).format(time)).get();
assertEquals(OK, res.getStatusInfo());
assertNotNull(res.getHeaderString(MEMENTO_DATETIME));
assertEquals(time, parse(res.getHeaderString(MEMENTO_DATETIME), RFC_1123_DATE_TIME).toInstant());
// Jersey's client doesn't parse complex link headers correctly
final List<Link> links = res.getStringHeaders().get(LINK).stream().map(Link::valueOf).collect(toList());
assertTrue(links.stream().anyMatch(l -> l.getRels().contains("memento") &&
RFC_1123_DATE_TIME.withZone(UTC).format(ofEpochSecond(timestamp - 2000))
.equals(l.getParams().get("datetime")) &&
l.getUri().toString().equals(BASE_URL + RESOURCE_PATH + "?version=1496260729000")));
assertTrue(links.stream().anyMatch(l -> l.getRels().contains("memento") &&
RFC_1123_DATE_TIME.withZone(UTC).format(ofEpochSecond(timestamp - 1000))
.equals(l.getParams().get("datetime")) &&
l.getUri().toString().equals(BASE_URL + RESOURCE_PATH + "?version=1496261729000")));
assertTrue(links.stream().anyMatch(l -> l.getRels().contains("memento") &&
RFC_1123_DATE_TIME.withZone(UTC).format(time).equals(l.getParams().get("datetime")) &&
l.getUri().toString().equals(BASE_URL + RESOURCE_PATH + "?version=1496262729000")));
assertTrue(links.stream().anyMatch(l -> l.getRels().contains("timemap") &&
RFC_1123_DATE_TIME.withZone(UTC).format(ofEpochSecond(timestamp - 2000))
.equals(l.getParams().get("from")) &&
RFC_1123_DATE_TIME.withZone(UTC).format(ofEpochSecond(timestamp + 1000))
.equals(l.getParams().get("until")) &&
APPLICATION_LINK_FORMAT.equals(l.getType()) &&
l.getUri().toString().equals(BASE_URL + RESOURCE_PATH + "?ext=timemap")));
assertTrue(links.stream().anyMatch(l -> l.getRels().contains("timegate") &&
l.getUri().toString().equals(BASE_URL + RESOURCE_PATH)));
assertTrue(links.stream().anyMatch(l -> l.getRels().contains("original") &&
l.getUri().toString().equals(BASE_URL + RESOURCE_PATH)));
assertFalse(links.stream().anyMatch(hasLink(rdf.createIRI(BASE_URL + RESOURCE_PATH + "?ext=upload"),
Trellis.multipartUploadService.getIRIString())));
assertTrue(links.stream().anyMatch(hasType(LDP.Resource)));
assertTrue(links.stream().anyMatch(hasType(LDP.RDFSource)));
assertFalse(links.stream().anyMatch(hasType(LDP.Container)));
}
项目:connect-java-sdk
文件:CompleteResponse.java
public String getBatchToken() {
Link link = this.response.getLink("'next'");
if (link != null) {
MultivaluedMap<String, String> parameters = UriComponent.decodeQuery(link.getUri(), true);
return parameters.getFirst("batch_token");
}
return null;
}
项目:newrelic-alerts-configurator
文件:ApiBase.java
private <T, LT extends ObjectList<T, LT>> LT followPageable(Link next, LT responseBody, Class<LT> responseType) {
while (next != null) {
Response nextResponse = client.target(next).request(APPLICATION_JSON_TYPE).get();
LT nextResponseBody = nextResponse.readEntity(responseType);
responseBody = responseBody.merge(nextResponseBody);
next = nextResponse.getLink("next");
}
return responseBody;
}
项目:lra-service
文件:Coordinator.java
private boolean isLink(String linkString) {
try {
Link.valueOf(linkString);
return true;
} catch (IllegalArgumentException e) {
return false;
}
}
项目:lra-service
文件:LRARecord.java
private static String cannonicalForm(String linkStr) {
if (linkStr.indexOf(',') == -1)
return linkStr;
SortedMap<String, String> lm = new TreeMap<>();
Arrays.stream(linkStr.split(",")).forEach(link -> lm.put(Link.valueOf(link).getRel(), link));
StringBuilder sb = new StringBuilder();
lm.forEach((k, v) -> appendLink(sb, v));
return sb.toString();
}
项目:dropwizard-pagination
文件:CustomJaxbAdapter.java
public Link unmarshal(CustomJaxbLink p1) {
Link.Builder builder = Link.fromUri(p1.getUri());
for (Map.Entry<QName, Object> entry : p1.getParams().entrySet()) {
builder.param(entry.getKey().getLocalPart(), entry.getValue().toString());
}
return builder.build();
}
项目:dropwizard-pagination
文件:CustomJaxbAdapter.java
public CustomJaxbLink marshal(Link p1) {
Map<QName, Object> params = new HashMap<>();
for (Map.Entry<String, String> entry : p1.getParams().entrySet()) {
params.put(new QName("", entry.getKey()), entry.getValue());
}
return new CustomJaxbLink(p1.getUri(), params);
}
项目:comms-router
文件:PaginationHelper.java
public Link[] getLinks(PaginatedList pagedList) {
List<Link> result = Lists.newArrayList();
int pageNum = pagedList.getPage();
int perPage = pagedList.getPerPage();
long totalCount = pagedList.getTotalCount();
int maxPages = Math.toIntExact((totalCount + perPage - 1) / perPage);
// Check first
if (pageNum > 1) {
result.add(createLink("first", 1, perPage));
}
// Check prev
if (pageNum - 1 > 0) {
result.add(createLink("prev", pageNum - 1, perPage));
}
// Check next
if (pageNum + 1 <= maxPages) {
result.add(createLink("next", pageNum + 1, perPage));
}
// Check last
if (maxPages > 1 && pageNum < maxPages) {
result.add(createLink("last", maxPages, perPage));
}
return result.toArray(new Link[result.size()]);
}
项目:comms-router
文件:PaginationHelper.java
private Link createLink(String rel, int pageNum, int perPage) {
UriBuilder uriBuilder = uriBuilderSupplier.get().clone()
.queryParam(RouterObjectService.PAGE_NUMBER_PARAM, String.valueOf(pageNum));
if (perPage != 10) {
uriBuilder.queryParam(RouterObjectService.ITEMS_PER_PAGE_PARAM, String.valueOf(perPage));
}
return linkCreator.apply(Link.fromUriBuilder(uriBuilder).rel(rel));
}
项目:rest-jersey-utils
文件:AbstractListingResource.java
@SuppressWarnings("boxing")
@GET
@Produces(MediaType.APPLICATION_JSON)
public PaginatedResponse<SummaryJsonType> getListing(@BeanParam @NotNull @Valid SearchQueryBean searchQueryBean) {
final ListingResult<SummaryJsonType> summaries = getSummaryListing(searchQueryBean);
final LinkFactory<ImplementationType> lf = getImplementationLinkFactory();
final List<ObjectWithSchema<SummaryJsonType>> listForResponse = summaries.getResultList().stream()
.map(r -> getResponse(r, lf)).collect(Collectors.toList());
List<Link> links = Lists.newArrayList();
lf.forCall(REL_INSTANCE, r -> r.get(IdParameterBean.of(null))).ifPresent(links::add);
int offset = searchQueryBean.getOffset();
int limit = searchQueryBean.getLimit();
PaginationLinkBuilder paginationLinkBuilder = PaginationLinkBuilder.of(summaries.getTotalNumberOfHits(),
searchQueryBean.getOffset(), searchQueryBean.getLimit());
links.addAll(paginationLinkBuilder.generateLinks((rel, off, lim) -> {
searchQueryBean.setLimit(lim);
searchQueryBean.setOffset(off);
return lf.forCall(rel, r -> r.getListing(searchQueryBean));
}));
links.addAll(createAdditionalLinksForListing(searchQueryBean));
return PaginatedResponse.create(listForResponse, summaries.getTotalNumberOfHits(), offset, limit,
JsonHyperSchema.from(links));
}
项目:rest-jersey-utils
文件:AbstractListingResource.java
private List<Optional<Link>> createSchemaForSummary(SummaryJsonType summaryJson,
LinkFactory<ImplementationType> factoryForImplementation) {
final Optional<Link> selfLink = factoryForImplementation.forCall(Rel.SELF,
r -> r.getSummary(IdParameterBean.of(summaryJson.getId())));
final Optional<Link> canonicalLink = factoryForImplementation.forCall(Rel.CANONICAL,
r -> r.get(IdParameterBean.of(summaryJson.getId())));
final ArrayList<Optional<Link>> result = Lists.newArrayList(selfLink, canonicalLink);
final List<Optional<Link>> additionalLinks = createAdditionalLinksForSummaryType(summaryJson,
factoryForImplementation);
result.addAll(additionalLinks);
return result;
}
项目:rest-jersey-utils
文件:AbstractListingResource.java
protected ObjectWithSchema<FullJsonType> getResponse(FullJsonType json) {
final LinkFactory<ImplementationType> factoryForImplementation = getImplementationLinkFactory();
final Optional<Link> selfLink = factoryForImplementation.forCall(Rel.SELF,
r -> r.get(IdParameterBean.of(json.getId())));
final ArrayList<Optional<Link>> result = Lists.newArrayList(selfLink);
final List<Optional<Link>> additionalLinks = createAdditionalLinksForFullType(json, factoryForImplementation);
result.addAll(additionalLinks);
final JsonHyperSchema hyperSchema = JsonHyperSchema.fromOptional(result);
return ObjectWithSchema.create(json, hyperSchema);
}
项目:nifi-registry
文件:LinkAdapter.java
/**
* Convert a {@link Link.JaxbLink} into a {@link Link}.
*
* @param v instance of type {@link Link.JaxbLink}.
* @return mapped instance of type {@link Link.JaxbLink}
*/
@Override
public Link unmarshal(Link.JaxbLink v) {
if (v == null) {
return null;
}
Link.Builder lb = Link.fromUri(v.getUri());
for (Map.Entry<QName, Object> e : v.getParams().entrySet()) {
lb.param(e.getKey().getLocalPart(), e.getValue().toString());
}
return lb.build();
}
项目:nifi-registry
文件:LinkAdapter.java
/**
* Convert a {@link Link} into a {@link Link.JaxbLink}.
*
* @param v instance of type {@link Link}.
* @return mapped instance of type {@link Link.JaxbLink}.
*/
@Override
public Link.JaxbLink marshal(Link v) {
if (v == null) {
return null;
}
Link.JaxbLink jl = new Link.JaxbLink(v.getUri());
for (Map.Entry<String, String> e : v.getParams().entrySet()) {
final String name = e.getKey();
jl.getParams().put(new QName("", name), e.getValue());
}
return jl;
}
项目:nifi-registry
文件:VersionedFlowSnapshotLinkBuilder.java
@Override
public Link createLink(final VersionedFlowSnapshotMetadata snapshotMetadata) {
if (snapshotMetadata == null) {
return null;
}
final URI uri = UriBuilder.fromPath(PATH)
.resolveTemplate("bucketId", snapshotMetadata.getBucketIdentifier())
.resolveTemplate("flowId", snapshotMetadata.getFlowIdentifier())
.resolveTemplate("versionNumber", snapshotMetadata.getVersion())
.build();
return Link.fromUri(uri).rel("content").build();
}
项目:nifi-registry
文件:BucketLinkBuilder.java
@Override
public Link createLink(final Bucket bucket) {
if (bucket == null) {
return null;
}
final URI uri = UriBuilder.fromPath(PATH)
.resolveTemplate("id", bucket.getIdentifier())
.build();
return Link.fromUri(uri).rel("self").build();
}
项目:nifi-registry
文件:VersionedFlowLinkBuilder.java
@Override
public Link createLink(final VersionedFlow versionedFlow) {
if (versionedFlow == null) {
return null;
}
final URI uri = UriBuilder.fromPath(PATH)
.resolveTemplate("bucketId", versionedFlow.getBucketIdentifier())
.resolveTemplate("flowId", versionedFlow.getIdentifier())
.build();
return Link.fromUri(uri).rel("self").build();
}
项目:rmap
文件:QueryParamHandler.java
/**
* Creates pagination links for linkRef in response header. Note that duplicate parameters or irrelevant parameters will be ignored.
*
* @param pageUrlTemplate the page URL template
* @param pageNum the page number to create links with
* @param includeNext true if you should include the next link
* @return pagination links
* @throws RMapApiException the RMap API exception
*/
public Link[] generatePageLinks(String pageUrlTemplate, Integer pageNum, boolean includeNext) throws RMapApiException{
try {
//now build the pagination links
HttpLinkBuilder paginationLinks = new HttpLinkBuilder();
if (pageNum>1){
String firstUrl = pageUrlTemplate.toString();
firstUrl = firstUrl.replace(Constants.PAGENUM_PLACEHOLDER, Constants.FIRST_PAGE);
paginationLinks.addLink(firstUrl,LinkRels.FIRST);
Integer previousPage = pageNum-1;
String previousUrl = pageUrlTemplate.replace(Constants.PAGENUM_PLACEHOLDER, previousPage.toString());
paginationLinks.addLink(previousUrl,LinkRels.PREVIOUS);
}
if (includeNext){
String nextUrl = pageUrlTemplate.toString();
Integer nextPage = pageNum+1;
nextUrl = nextUrl.replace(Constants.PAGENUM_PLACEHOLDER, nextPage.toString());
paginationLinks.addLink(nextUrl,LinkRels.NEXT);
}
return paginationLinks.getLinkArray();
} catch (Exception ex) {
throw RMapApiException.wrap(ex, ErrorCode.ER_BAD_PARAMETER_IN_REQUEST);
}
}
项目:resteasy-examples
文件:Customers.java
@XmlTransient
public URI getPrevious()
{
if (links == null) return null;
for (Link link : links)
{
if ("previous".equals(link.getRel())) return link.getUri();
}
return null;
}
项目:rmap
文件:HttpLinkBuilder.java
/**
* Create Link using the URI as a String, the relationship (rel) and a datetime,
* then add it to the links list
* @param discoUri a Link URI as a String
* @param rel a Link relationship
* @param date a Link datetime
*/
public void addLinkWithDate(String url, String rel, Date date) {
Link link = Link.fromUri(url)
.rel(rel)
.param(LinkRels.DATETIME, HttpHeaderDateUtils.convertDateToString(date))
.build();
links.add(link);
}
项目:rmap
文件:HttpLinkBuilder.java
/**
* Convert current Link list into a Link array (Link[])
* @return Array of Links
*/
public Link[] getLinkArray() {
int listSize = this.links.size();
if (listSize == 0){
return null;
}
Link[] arrayLinks = new Link[listSize];
int count = 0;
for (Link link : this.links){
arrayLinks[count] = link;
count = count + 1;
}
return arrayLinks;
}
项目:trellis
文件:MementoResource.java
/**
* Create a response builder for a TimeMap response.
*
* @param baseUrl the base URL
* @param req the LDP request
* @param serializer the serializer to use
* @return a response builder object
*/
public Response.ResponseBuilder getTimeMapBuilder(final LdpRequest req,
final IOService serializer, final String baseUrl) {
final List<MediaType> acceptableTypes = req.getHeaders().getAcceptableMediaTypes();
final String identifier = getBaseUrl(baseUrl, req) + req.getPath();
final List<Link> links = getMementoLinks(identifier, resource.getMementos()).collect(toList());
final Response.ResponseBuilder builder = Response.ok().link(identifier, ORIGINAL + " " + TIMEGATE);
builder.links(links.toArray(new Link[0])).link(Resource.getIRIString(), "type")
.link(RDFSource.getIRIString(), "type").header(ALLOW, join(",", GET, HEAD, OPTIONS));
final RDFSyntax syntax = getSyntax(acceptableTypes, of(APPLICATION_LINK_FORMAT)).orElse(null);
if (nonNull(syntax)) {
final IRI profile = ofNullable(getProfile(acceptableTypes, syntax)).orElse(expanded);
final List<Triple> extraData = getExtraTriples(identifier);
for (final Link l : links) {
if (l.getRels().contains(MEMENTO)) {
extraData.add(rdf.createTriple(rdf.createIRI(identifier), Memento.memento,
rdf.createIRI(l.getUri().toString())));
}
}
final StreamingOutput stream = new StreamingOutput() {
@Override
public void write(final OutputStream out) throws IOException {
serializer.write(concat(links.stream().flatMap(linkToTriples), extraData.stream()), out, syntax,
profile);
}
};
return builder.type(syntax.mediaType()).entity(stream);
}
return builder.type(APPLICATION_LINK_FORMAT)
.entity(links.stream().map(Link::toString).collect(joining(",\n")) + "\n");
}
项目:trellis
文件:MementoResource.java
/**
* Create a response builder for a TimeGate response.
*
* @param req the LDP request
* @param baseUrl the base URL
* @return a response builder object
*/
public Response.ResponseBuilder getTimeGateBuilder(final LdpRequest req, final String baseUrl) {
final String identifier = getBaseUrl(baseUrl, req) + req.getPath();
return Response.status(FOUND)
.location(fromUri(identifier + "?version=" + req.getDatetime().getInstant().toEpochMilli()).build())
.link(identifier, ORIGINAL + " " + TIMEGATE)
.links(getMementoLinks(identifier, resource.getMementos()).toArray(Link[]::new))
.header(VARY, ACCEPT_DATETIME);
}
项目:resteasy-examples
文件:Customers.java
@XmlTransient
public URI getNext()
{
if (links == null) return null;
for (Link link : links)
{
if ("next".equals(link.getRel())) return link.getUri();
}
return null;
}
项目:trellis
文件:MementoResource.java
private static Stream<Link> getTimeMap(final String identifier, final Stream<Range<Instant>> mementos) {
return mementos.reduce((acc, x) -> between(acc.getMinimum(), x.getMaximum()))
.map(x -> Link.fromUri(identifier + TIMEMAP_PARAM).rel(TIMEMAP).type(APPLICATION_LINK_FORMAT)
.param(FROM, ofInstant(x.getMinimum().minusNanos(1L).plusSeconds(1L), UTC).format(RFC_1123_DATE_TIME))
.param(UNTIL, ofInstant(x.getMaximum(), UTC).format(RFC_1123_DATE_TIME)).build())
// TODO use Optional::stream with JDK9
.map(Stream::of).orElseGet(Stream::empty);
}
项目:resteasy-examples
文件:CustomerChat.java
protected void send(UriBuilder base, AsyncResponse async, Message message)
{
URI nextUri = base.clone().path(CustomerChat.class)
.queryParam("current", message.id).build();
Link next = Link.fromUri(nextUri).rel("next").build();
Response response = Response.ok(message.message, MediaType.TEXT_PLAIN_TYPE).links(next).build();
async.resume(response);
}
项目:trellis
文件:AbstractLdpResourceTest.java
@Test
public void testGetDatetime() {
final Response res = target(RESOURCE_PATH).request()
.header(ACCEPT_DATETIME, RFC_1123_DATE_TIME.withZone(UTC).format(time)).get();
assertEquals(OK, res.getStatusInfo());
assertNotNull(res.getHeaderString(MEMENTO_DATETIME));
assertEquals(time, parse(res.getHeaderString(MEMENTO_DATETIME), RFC_1123_DATE_TIME).toInstant());
// Jersey's client doesn't parse complex link headers correctly
final List<Link> links = res.getStringHeaders().get(LINK).stream().map(Link::valueOf).collect(toList());
assertTrue(links.stream().anyMatch(l -> l.getRels().contains("memento") &&
RFC_1123_DATE_TIME.withZone(UTC).format(ofEpochSecond(timestamp - 2000))
.equals(l.getParams().get("datetime")) &&
l.getUri().toString().equals(BASE_URL + RESOURCE_PATH + "?version=1496260729000")));
assertTrue(links.stream().anyMatch(l -> l.getRels().contains("memento") &&
RFC_1123_DATE_TIME.withZone(UTC).format(ofEpochSecond(timestamp - 1000))
.equals(l.getParams().get("datetime")) &&
l.getUri().toString().equals(BASE_URL + RESOURCE_PATH + "?version=1496261729000")));
assertTrue(links.stream().anyMatch(l -> l.getRels().contains("memento") &&
RFC_1123_DATE_TIME.withZone(UTC).format(time).equals(l.getParams().get("datetime")) &&
l.getUri().toString().equals(BASE_URL + RESOURCE_PATH + "?version=1496262729000")));
assertTrue(links.stream().anyMatch(l -> l.getRels().contains("timemap") &&
RFC_1123_DATE_TIME.withZone(UTC).format(ofEpochSecond(timestamp - 2000))
.equals(l.getParams().get("from")) &&
RFC_1123_DATE_TIME.withZone(UTC).format(ofEpochSecond(timestamp + 1000))
.equals(l.getParams().get("until")) &&
APPLICATION_LINK_FORMAT.equals(l.getType()) &&
l.getUri().toString().equals(BASE_URL + RESOURCE_PATH + "?ext=timemap")));
assertTrue(links.stream().anyMatch(l -> l.getRels().contains("timegate") &&
l.getUri().toString().equals(BASE_URL + RESOURCE_PATH)));
assertTrue(links.stream().anyMatch(l -> l.getRels().contains("original") &&
l.getUri().toString().equals(BASE_URL + RESOURCE_PATH)));
assertFalse(links.stream().anyMatch(hasLink(rdf.createIRI(BASE_URL + RESOURCE_PATH + "?ext=upload"),
Trellis.multipartUploadService.getIRIString())));
assertTrue(links.stream().anyMatch(hasType(LDP.Resource)));
assertTrue(links.stream().anyMatch(hasType(LDP.RDFSource)));
assertFalse(links.stream().anyMatch(hasType(LDP.Container)));
}
项目:siren4javaee
文件:EntityBuilderTest.java
@Test
public void testJAXRSTypes() {
// MediaType#toString and Link.Builder call RuntimeDelegate
final RuntimeDelegate delegateMock = mock(RuntimeDelegate.class);
final RuntimeDelegate.HeaderDelegate<MediaType> headerDelegateMock = mock(RuntimeDelegate.HeaderDelegate.class);
when(delegateMock.createHeaderDelegate(MediaType.class)).thenReturn(headerDelegateMock);
final Link.Builder linkBuilderMock = mock(Link.Builder.class);
when(delegateMock.createLinkBuilder()).thenReturn(linkBuilderMock);
when(headerDelegateMock.toString(any())).thenReturn("application/json");
when(linkBuilderMock.uri(anyString())).thenReturn(linkBuilderMock);
when(linkBuilderMock.rel(anyString())).thenReturn(linkBuilderMock);
when(linkBuilderMock.build()).thenReturn(new DummyLink("https://api.example.com/books/1", "self"),
new DummyLink("https://api.example.com/books/123", "one", "two"));
injectRuntimeDelegate(delegateMock);
final String actual = Siren.createEntityBuilder()
.setSubEntityType(MediaType.APPLICATION_JSON_TYPE)
.setSubEntityHref(URI.create("https://api.example.com/books/1"))
.addLink(Link.fromUri("https://api.example.com/books/1").rel("self").build())
.addLink(Link.fromUri("https://api.example.com/books/123").rel("one two").build())
.build().toString();
final String expected = "{" +
"\"type\":\"application/json\"," +
"\"href\":\"https://api.example.com/books/1\"," +
"\"links\":[{" +
"\"rel\":[\"self\"]," +
"\"href\":\"https://api.example.com/books/1\"" +
"},{" +
"\"rel\":[\"one\",\"two\"]," +
"\"href\":\"https://api.example.com/books/123\"}]" +
"}";
assertThat(actual, is(expected));
}
项目:resteasy-examples
文件:Customers.java
@XmlTransient
public URI getNext()
{
if (links == null) return null;
for (Link link : links)
{
if ("next".equals(link.getRel())) return link.getUri();
}
return null;
}
项目:resteasy-examples
文件:Products.java
@XmlTransient
public URI getPrevious()
{
if (links == null) return null;
for (Link link : links)
{
if ("previous".equals(link.getRel())) return link.getUri();
}
return null;
}