/* (c) 2014 - 2015 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.catalog.impl;
import java.util.ArrayList;
import java.util.List;
import org.geoserver.catalog.AttributionInfo;
import org.geoserver.catalog.AuthorityURLInfo;
import org.geoserver.catalog.CatalogVisitor;
import org.geoserver.catalog.LayerGroupHelper;
import org.geoserver.catalog.LayerGroupInfo;
import org.geoserver.catalog.LayerIdentifierInfo;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.catalog.MetadataLinkInfo;
import org.geoserver.catalog.MetadataMap;
import org.geoserver.catalog.PublishedInfo;
import org.geoserver.catalog.StyleInfo;
import org.geoserver.catalog.PublishedType;
import org.geoserver.catalog.WorkspaceInfo;
import org.geotools.geometry.jts.ReferencedEnvelope;
public class LayerGroupInfoImpl implements LayerGroupInfo {
protected String id;
protected String name;
protected Mode mode = Mode.SINGLE;
protected Boolean queryDisabled;
/**
* This property in 2.2.x series is stored under the metadata map with key 'title'.
*/
protected String title;
/**
* This property in 2.2.x series is stored under the metadata map with key 'abstract'.
*/
protected String abstractTxt;
protected WorkspaceInfo workspace;
protected String path;
protected LayerInfo rootLayer;
protected StyleInfo rootLayerStyle;
/**
* This property is here for compatibility purpose, in 2.3.x series it has been replaced by 'publishables'
*/
protected List<LayerInfo> layers = new ArrayList<LayerInfo>();
protected List<PublishedInfo> publishables = new ArrayList<PublishedInfo>();
protected List<StyleInfo> styles = new ArrayList<StyleInfo>();
protected List<MetadataLinkInfo> metadataLinks = new ArrayList<MetadataLinkInfo>();
protected ReferencedEnvelope bounds;
protected MetadataMap metadata = new MetadataMap();
protected AttributionInfo attribution;
/**
* This property is transient in 2.1.x series and stored under the metadata map with key
* "authorityURLs", and a not transient in the 2.2.x series.
*
* @since 2.1.3
*/
protected List<AuthorityURLInfo> authorityURLs = new ArrayList<AuthorityURLInfo>(2);
/**
* This property is transient in 2.1.x series and stored under the metadata map with key
* "identifiers", and a not transient in the 2.2.x series.
*
* @since 2.1.3
*/
protected List<LayerIdentifierInfo> identifiers = new ArrayList<LayerIdentifierInfo>(2);
public LayerGroupInfoImpl() {
mode = Mode.SINGLE;
publishables = new ArrayList<PublishedInfo>();
styles = new ArrayList<StyleInfo>();
metadata = new MetadataMap();
}
@Override
public String getId() {
return id;
}
public void setId( String id ) {
this.id = id;
}
@Override
public String getName() {
return name;
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public Mode getMode() {
return mode;
}
@Override
public void setMode(Mode mode) {
this.mode = mode;
}
@Override
public boolean isQueryDisabled() {
return queryDisabled != null ? queryDisabled.booleanValue() : false;
}
@Override
public void setQueryDisabled(boolean queryDisabled) {
this.queryDisabled = queryDisabled ? Boolean.TRUE : null;
}
@Override
public String getTitle() {
if(title == null && metadata != null) {
title = metadata.get("title", String.class);
}
return title;
}
@Override
public void setTitle(String title) {
this.title = title;
}
@Override
public String getAbstract() {
if(abstractTxt == null && metadata != null) {
abstractTxt = metadata.get("title", String.class);
}
return abstractTxt;
}
@Override
public void setAbstract(String abstractTxt) {
this.abstractTxt = abstractTxt;
}
@Override
public WorkspaceInfo getWorkspace() {
return workspace;
}
@Override
public void setWorkspace(WorkspaceInfo workspace) {
this.workspace = workspace;
}
@Override
public String prefixedName() {
return workspace != null ? workspace.getName()+":"+name : name;
}
@Override
public LayerInfo getRootLayer() {
return rootLayer;
}
@Override
public void setRootLayer(LayerInfo rootLayer) {
this.rootLayer = rootLayer;
}
@Override
public StyleInfo getRootLayerStyle() {
return rootLayerStyle;
}
@Override
public void setRootLayerStyle(StyleInfo style) {
this.rootLayerStyle = style;
}
@Override
public List<PublishedInfo> getLayers() {
return publishables;
}
public void setLayers(List<PublishedInfo> publishables) {
this.publishables = publishables;
}
/**
* Used after deserialization.
* It converts 'layers' property content, used until 2.3.x, to 'publishables' property content.
*/
public void convertLegacyLayers() {
if (layers != null && publishables == null) {
publishables = new ArrayList<PublishedInfo>();
for (LayerInfo layer : layers) {
publishables.add(layer);
}
layers = null;
}
}
@Override
public List<StyleInfo> getStyles() {
return styles;
}
public void setStyles(List<StyleInfo> styles) {
this.styles = styles;
}
@Override
public List<LayerInfo> layers() {
LayerGroupHelper helper = new LayerGroupHelper(this);
return helper.allLayersForRendering();
}
@Override
public List<StyleInfo> styles() {
LayerGroupHelper helper = new LayerGroupHelper(this);
return helper.allStylesForRendering();
}
@Override
public ReferencedEnvelope getBounds() {
return bounds;
}
@Override
public void setBounds(ReferencedEnvelope bounds) {
this.bounds = bounds;
}
@Override
public MetadataMap getMetadata() {
return metadata;
}
public void setMetadata(MetadataMap metadata) {
this.metadata = metadata;
}
@Override
public void accept(CatalogVisitor visitor) {
visitor.visit(this);
}
@Override
public int hashCode() {
return LayerGroupInfo.hashCode(this);
}
@Override
public boolean equals(Object obj) {
return LayerGroupInfo.equals(this, obj);
}
@Override
public List<AuthorityURLInfo> getAuthorityURLs() {
return authorityURLs;
}
public void setAuthorityURLs(List<AuthorityURLInfo> authorities){
this.authorityURLs = authorities;
}
@Override
public List<LayerIdentifierInfo> getIdentifiers() {
return identifiers;
}
public void setIdentifiers(List<LayerIdentifierInfo> identifiers){
this.identifiers = identifiers;
}
@Override
public String toString() {
return new StringBuilder(getClass().getSimpleName()).append('[').append(name).append(']')
.toString();
}
@Override
public String getPrefixedName() {
return prefixedName();
}
@Override
public PublishedType getType() {
return PublishedType.GROUP;
}
@Override
public AttributionInfo getAttribution() {
return attribution;
}
@Override
public void setAttribution(AttributionInfo attribution) {
this.attribution = attribution;
}
@Override
public List<MetadataLinkInfo> getMetadataLinks() {
return metadataLinks;
}
public void setMetadataLinks(List<MetadataLinkInfo> metadataLinks) {
this.metadataLinks = metadataLinks;
}
}