/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.isis.viewer.restfulobjects.rendering;
import javax.ws.rs.core.MediaType;
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
import org.apache.isis.viewer.restfulobjects.applib.RestfulHttpMethod;
public final class LinkBuilder {
public static LinkBuilder newBuilder(final RendererContext resourceContext, final String rel, final RepresentationType representationType, final String hrefFormat, final Object... hrefArgs) {
return newBuilder(resourceContext, rel, representationType.getMediaType(), hrefFormat, hrefArgs);
}
public static LinkBuilder newBuilder(final RendererContext resourceContext, final String rel, final MediaType mediaType, final String hrefFormat, final Object... hrefArgs) {
return new LinkBuilder(resourceContext, rel, String.format(hrefFormat, hrefArgs), mediaType);
}
private final RendererContext resourceContext;
private final JsonRepresentation representation = JsonRepresentation.newMap();
private final String rel;
private final String href;
private final MediaType mediaType;
private RestfulHttpMethod method = RestfulHttpMethod.GET;
private String title;
private JsonRepresentation arguments;
private JsonRepresentation value;
protected LinkBuilder(final RendererContext resourceContext, final String rel, final String href, final MediaType mediaType) {
this.resourceContext = resourceContext;
this.rel = rel;
this.href = href;
this.mediaType = mediaType;
}
public LinkBuilder withHttpMethod(final RestfulHttpMethod method) {
this.method = method;
return this;
}
public LinkBuilder withTitle(final String title) {
this.title = title;
return this;
}
public LinkBuilder withArguments(final JsonRepresentation arguments) {
this.arguments = arguments;
return this;
}
public LinkBuilder withValue(final JsonRepresentation value) {
this.value = value;
return this;
}
public JsonRepresentation build() {
representation.mapPut("rel", rel);
representation.mapPut("href", resourceContext.urlFor(href));
representation.mapPut("method", method);
representation.mapPut("type", mediaType.toString());
representation.mapPut("title", title);
representation.mapPut("arguments", arguments);
representation.mapPut("value", value);
return representation;
}
}