package com.revolsys.ui.model;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.springframework.http.MediaType;
import com.revolsys.ui.html.view.Element;
public class PageInfo extends AbstractDocumentedObject {
private Map<String, Object> attributes = new LinkedHashMap<>();
private List<MediaType> inputContentTypes = new ArrayList<>();
private List<MediaType> mediaTypes = new ArrayList<>();
private final List<String> methods = new ArrayList<>();
private Map<String, PageInfo> pages = new LinkedHashMap<>();
private Element pagesElement;
private Map<String, ParameterInfo> parameters = new LinkedHashMap<>();
private String url;
public PageInfo() {
}
public PageInfo(final PageInfo pageInfo) {
super(pageInfo);
this.methods.addAll(pageInfo.getMethods());
this.pages.putAll(pageInfo.getPages());
this.parameters.putAll(pageInfo.getParametersMap());
this.mediaTypes.addAll(pageInfo.getMediaTypes());
this.inputContentTypes.addAll(pageInfo.getInputContentTypes());
this.attributes = new LinkedHashMap<>(pageInfo.getFields());
}
public PageInfo(final String title) {
setTitle(title);
}
public PageInfo(final String title, final String description) {
this(title, description, "get");
}
public PageInfo(final String title, final String description, final String... methods) {
setTitle(title);
setDescription(description);
this.methods.addAll(Arrays.asList(methods));
}
public void addInputContentType(final MediaType mediaType) {
this.inputContentTypes.add(mediaType);
}
public void addPage(final Object path, final PageInfo page) {
addPage(path.toString(), page);
}
public void addPage(final String path, final PageInfo page) {
this.pages.put(path, page);
}
public PageInfo addPage(final String path, final String title) {
final PageInfo page = new PageInfo(title);
addPage(path, page);
return page;
}
public PageInfo addPage(final String url, final String title, final String... methods) {
final PageInfo page = new PageInfo(title, null, methods);
addPage(url, page);
return page;
}
public void addParameter(final ParameterInfo parameter) {
this.parameters.put(parameter.getName(), parameter);
}
@Override
public PageInfo clone() {
return new PageInfo(this);
}
public Map<String, Object> getFields() {
return this.attributes;
}
public List<MediaType> getInputContentTypes() {
return this.inputContentTypes;
}
public List<MediaType> getMediaTypes() {
return this.mediaTypes;
}
public List<String> getMethods() {
return this.methods;
}
public Map<String, PageInfo> getPages() {
return this.pages;
}
public Element getPagesElement() {
return this.pagesElement;
}
public Collection<ParameterInfo> getParameters() {
return this.parameters.values();
}
public Map<String, ParameterInfo> getParametersMap() {
return this.parameters;
}
public String getUrl() {
return this.url;
}
public void setAttribute(final String name, final Object value) {
this.attributes.put(name, value);
}
public void setAttributes(final Map<String, Object> attributes) {
this.attributes = new LinkedHashMap<>(attributes);
}
public void setInputContentTypes(final List<MediaType> inputContentTypes) {
this.inputContentTypes = inputContentTypes;
}
public void setInputContentTypes(final MediaType... inputContentTypes) {
final ArrayList<MediaType> mediaTypes = new ArrayList<>();
for (final MediaType mediaType : inputContentTypes) {
mediaTypes.add(mediaType);
}
setInputContentTypes(mediaTypes);
}
public void setMediaTypes(final List<MediaType> mediaTypes) {
this.mediaTypes = mediaTypes;
}
public void setPages(final Map<String, PageInfo> pages) {
this.pages = pages;
}
public void setPagesElement(final Element pagesElement) {
this.pagesElement = pagesElement;
}
public void setParameters(final Map<String, ParameterInfo> parameters) {
this.parameters = parameters;
}
@Override
public void setTitle(final String title) {
super.setTitle(title);
}
public void setUrl(final String url) {
if (url == null) {
this.url = null;
} else {
this.url = url.replaceAll("/+", "/");
}
}
}