package net.eusashead.bjugquerydsl.hateoas;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import org.springframework.web.util.UriTemplate;
public class ResourceMetadataBuilder {
private UriTemplate uriTemplate;
private final List<IdentityProperty> identityProperties = new ArrayList<IdentityProperty>();
private final List<SimpleProperty> simpleProperties = new ArrayList<SimpleProperty>();
private final List<EmbeddedResource> embeddedResources = new ArrayList<EmbeddedResource>();
public ResourceMetadataBuilder uriTemplate(String uriTemplate) {
this.uriTemplate = new UriTemplate(uriTemplate);
return this;
}
public ResourceMetadataBuilder uriTemplate(UriTemplate uriTemplate) {
this.uriTemplate = uriTemplate;
return this;
}
public ResourceMetadataBuilder identityProperty(String name, Method accessor) {
this.identityProperties.add(new IdentityProperty(name, accessor));
return this;
}
public ResourceMetadataBuilder simpleProperty(String name, Method accessor) {
this.simpleProperties.add(new SimpleProperty(name, accessor));
return this;
}
public ResourceMetadataBuilder embeddedResource(String name, Method accessor) {
this.embeddedResources.add(new EmbeddedResource(name, null, accessor));
return this;
}
public ResourceMetadataBuilder embeddedResource(String name, UriTemplate uriTemplate, Method accessor) {
this.embeddedResources.add(new EmbeddedResource(name, uriTemplate, accessor));
return this;
}
public ResourceMetadataBuilder embeddedResource(String name, String uriTemplate, Method accessor) {
this.embeddedResources.add(new EmbeddedResource(name, new UriTemplate(uriTemplate), accessor));
return this;
}
public ResourceMetadata build() {
return new ResourceMetadataImpl(uriTemplate, identityProperties, simpleProperties, embeddedResources);
}
}