/* See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * Esri Inc. 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 com.esri.gpt.catalog.search; import java.util.Date; import java.util.HashMap; import java.util.Map; import com.esri.gpt.control.georss.IFeedRecord; import com.esri.gpt.framework.geometry.Envelope; import com.esri.gpt.framework.request.Record; import com.esri.gpt.framework.util.Val; /** * The Class SearchResultRecord. Contains attributes describing a metadata * record . Not thread safe. */ public class SearchResultRecord extends Record { /** class variables ========================================================= */ /** The maximum length of the abstract * */ public final static int ABSTRACT_MAXLENGTH = 512; /** * Prefix where content type is appended to to come up with the readable content type title */ public final static String CONTENTTYPE_PROPERTY_PREFIX = "catalog.mdParam.contentType.content."; /** instance variables ====================================================== */ private String _abstract = ""; private String _additional = ""; private String _contentType = ""; private Envelope _envelope = new Envelope(); private boolean _external = false; private String _externalId = ""; private String _fileIdentifier = ""; private Date _modifiedDate = null; private ResourceLinks _resourceLinks = new ResourceLinks(); private String _resourceUrl = ""; private String _service = ""; private String _serviceType = ""; private String _title = ""; private String _uuid = ""; private boolean _supportsViewMetadata = true; private boolean _defaultGeometry = false; private final Map<String,Object> _objectMap = new HashMap<String,Object>(); public SearchResultRecord() { } public SearchResultRecord(IFeedRecord record) { _abstract = record.getAbstract(); _contentType = record.getContentType(); _envelope = record.getEnvelope(); // _external = false; // _externalId = ""; // _fileIdentifier = ""; _modifiedDate = record.getModfiedDate(); _resourceLinks = record.getResourceLinks(); _resourceUrl = record.getResourceUrl(); // _service = ""; _serviceType = record.getServiceType(); _title = record.getTitle(); _uuid = record.getUuid(); // _supportsViewMetadata = true; // _defaultGeometry = false; _objectMap.putAll(getResourceLinksAsMap(record.getResourceLinks())); _additional = record.getAdditional(); } private Map<String,String> getResourceLinksAsMap(ResourceLinks rLinks) { return rLinks!=null && rLinks.getUrlsByTag()!=null? rLinks.getUrlsByTag(): new HashMap<String, String>(); } /** properties ============================================================== */ /** * Gets the abstract. * @return the abstract (trimmed, never null) */ public String getAbstract() { return Val.chkStr(_abstract); } /** * Sets the abstract. * @param abs the abstract */ public void setAbstract(String abs) { _abstract = Val.chkStr(abs); // Strip out xml/html characters _abstract = _abstract.replaceAll("\\<.*?\\>", ""); if (this._abstract.length() > ABSTRACT_MAXLENGTH) { this._abstract = Val.chkStr((this._abstract.substring(0, ABSTRACT_MAXLENGTH)+"...")); } } public String getAdditional() { return _additional; } public void setAdditional(String add) { this._additional = add; } /** * Gets the content type. * @return the content type (trimmed, never null) */ public String getContentType() { return _contentType; } /** * Sets the content type. * @param contentType the new content type */ public void setContentType(String contentType) { _contentType = Val.chkStr(contentType); } /** * Gets the content type link associated with the record. * <br/>Convienence method for: * <br/>SearchResultRecord.getResourceLinks().getIcon(); * @return content type link */ public ResourceLink getContentTypeLink() { return this.getResourceLinks().getIcon(); } /** * Gets the bounding envelope. * @return the bounding envelope */ public Envelope getEnvelope() { return _envelope; } /** * Sets the bounding envelope. * @param envelope the bounding envelope */ public void setEnvelope(Envelope envelope) { _envelope = envelope; if (_envelope == null) { _envelope = new Envelope(); } } /** * Determines if the record is from an external repository. * @return true if external */ public boolean isExternal() { return _external; } /** * Sets the flag indicating if the record is from an external repository. * @param external true if external */ public void setExternal(boolean external) { this._external = external; } /** * Gets the external repository id. * @return the external id (trimmed, never-null) */ public String getExternalId() { return _externalId; } /** * Sets the external repository id. * @param externalId the new external id */ public void setExternalId(String externalId) { this._externalId = Val.chkStr(externalId); } /** * Gets the file identifier. * <br/>The file identifier is typically associated * with ISO-19139 documents. * @return the file identifier (trimmed, never null) */ public String getFileIdentifier() { return _fileIdentifier; } /** * Sets the file identifier. * <br/>The file identifier is typically associated with ISO-19139 documents. * @param id the file identifier */ public void setFileIdentifier(String id) { _fileIdentifier = Val.chkStr(id); } /** * Gets the modified date. * @return the modfied date (possibly null) */ public Date getModfiedDate() { return this._modifiedDate; } /** * Sets the modified date. * @param date the new modified date */ public void setModifiedDate(Date date) { this._modifiedDate = date; } /** * Gets the free form object map associated with this request. * <br/>This map can be used in a manner similar to the attributes * of a ServletRequest. * @return the free form object map */ public Map<String,Object> getObjectMap() { return _objectMap; } /** * Gets the resource links as map. * ** <br/Example:<br/> * Rendered="#{record.resourceLinksAsMap['metadata']}". For the map * string, look at ResourceLink static strings with prefix TAG * * @return the resource links as map */ public Map<String, String> getResourceLinksAsMap() { Map<String, String> m = new HashMap<String, String>(); ResourceLinks rLinks = this.getResourceLinks(); if(rLinks == null) { return m; } if(rLinks.getUrlsByTag() != null) { m = this.getResourceLinks().getUrlsByTag(); } return m; } /** * Gets the resource links as map. * * Short cut for #{record.resourceLinksAsMap['ResourceLink.TAG_DETAILS']} * in searchResults.jsp * * @return the resource links as map */ public String getViewMetadataUrl() { String url = ""; Map<String, String> m = new HashMap<String, String>(); ResourceLinks rLinks = this.getResourceLinks(); if(rLinks == null) { return ""; } if(rLinks.getUrlsByTag() != null) { m = this.getResourceLinks().getUrlsByTag(); url = m.get(ResourceLink.TAG_DETAILS); } return Val.chkStr(url); } /** * Gets the resource links. * @return the links */ public ResourceLinks getResourceLinks() { return _resourceLinks; } /** * Sets the resource links. * @param links the resource links */ protected void setResourceLinks(ResourceLinks links) { this._resourceLinks = links; } /** * Gets primary resource URL. * <br/>The primary resource URL is associated with the resource that the * metadata record describes. * @return the URL */ public String getResourceUrl() { return this._resourceUrl; } /** * Sets primary resource URL. * <br/>The primary resource URL is associated with the resource that the * metadata record describes. * @param url the URL */ public void setResourceUrl(String url) { this._resourceUrl = Val.chkStr(url); } /** * Gets the service name. * <br/>This is rarely used, mostly applicable to ArcIMS service names. * @return the service name (never null, trimmed) */ public String getService() { return _service; } /** * Sets the service. * <br/>This is rarely used, mostly applicable to ArcIMS service names. * @param service the new service name */ public void setService(String service) { this._service = Val.chkStr(service); } /** * Gets the service type. * Currently service type values in ags, wms, wcs,wfs, aims, kml, csw, sos, * ArcGIS:nmf, ArcGIS:lyr,ArcGIS:mxd * ags - ArcGIS Server Service * aims - ArcIMS Image Service * wms - Web Map Service * wcs - Web Coverage Service * wfs - Web Feature Service * kml - Keyhole Markup Language * csw - Catalogue Web Service * sos - Sensor Observation Service * ArcGIS:nmf - ArcGIS Explorer Document * ArcGIS:lyr - ArcMap Layer File * ArcGIS:mxd - ArcMap Map Document * @return the service type (never null, trimmed) */ public String getServiceType() { return _serviceType; } /** * Sets the service type. * @param serviceType the new service type */ public void setServiceType(String serviceType) { _serviceType = Val.chkStr(serviceType); } /** * Gets the thumbnail link associated with the record. * <br/>Convienence method for: * <br/>SearchResultRecord.getResourceLinks().getThumbnail(); * @return thumbnail link */ public ResourceLink getThumbnailLink() { return this.getResourceLinks().getThumbnail(); } /** * Gets the title. * @return the title (trimmed, never null) */ public String getTitle() { return _title; } /** * Sets the title. * @param title the title */ public void setTitle(String title) { _title = Val.chkStr(title); } /** * Gets the UUID. * @return the UUID (trimmed, never null) */ public String getUuid() { return _uuid; } /** * Sets the UUID. * @param uuid the UUID */ public void setUuid(String uuid) { _uuid = Val.chkStr(uuid); } //** below methods added in GPT 10 /** * Checks if is supports view metadata. * * @return true, if is supports view metadata */ public boolean isSupportsViewMetadata() { return _supportsViewMetadata; } /** * Sets the supports view metadata. * * @param supportsViewMetadata the new supports view metadata */ public void setSupportsViewMetadata(boolean supportsViewMetadata) { this._supportsViewMetadata = supportsViewMetadata; } /** * Checks if is default geometry. * * @return true, if is default geometry */ public boolean isDefaultGeometry() { return _defaultGeometry; } /** * Sets the default geometry. * * @param defaultGeometry the new default geometry */ public void setDefaultGeometry(boolean defaultGeometry) { this._defaultGeometry = defaultGeometry; } }