/* 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.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.esri.gpt.framework.geometry.Envelope;
import com.esri.gpt.framework.util.Val;
/**
* The Class SearchFilterSpatial.
* Filter specializing in spatial information.
*/
@SuppressWarnings("serial")
public class SearchFilterSpatial
implements ISearchFilter, ISearchFilterSpatialObj {
// class variables =============================================================
/** Class logger *. */
private final static Logger LOG =
Logger.getLogger(SearchFilterSpatial.class.getCanonicalName());
/**
* The Enum SaveParams.
*/
public static enum SaveParams {
/** The data inside envelope. */
selectedBoundOption,
/** The max x bound. */
maxX,
/** The max y bound. */
maxY,
/** The min x bound. */
minX,
/** The min y bound. */
minY
}
// instance variables ==========================================================
/** The envelope. */
transient private Envelope _selectedEnvelope = new Envelope();
/** The bound type selected. */
private String _selectedBounds = OptionsBounds.anywhere.name();
/** The envelope. */
transient private Envelope _visibleEnvelope = new Envelope();
// constructor =================================================================
/**
* Instantiates a new search filter spatial.
*/
public SearchFilterSpatial() {
super();
reset();
}
// properties ==================================================================
/**
* Gets the user selected envelope.
* @return the envelope (never null)
*/
public Envelope getSelectedEnvelope() {
if(this._selectedEnvelope == null) {
this.setSelectedEnvelope(new Envelope());
}
return _selectedEnvelope;
}
/**
* Sets the user selected envelope.
* @param envelope the new envelope
*/
public void setSelectedEnvelope(Envelope envelope) {
_selectedEnvelope = envelope;
if (_selectedEnvelope == null) _selectedEnvelope = new Envelope();
}
/**
* Sets the selected bounds options i.e. whether data envelopes are contained, anywhere
* or intersecting.
*
* @param selectedBounds the new selected bounds
*/
public void setSelectedBoundsAsEnum(OptionsBounds selectedBounds) {
setSelectedBounds(selectedBounds.name());
}
/**
* Gets the selected bounds options.
*
* @return the selected bounds
*/
public OptionsBounds getSelectedBoundsAsEnum() {
return OptionsBounds.checkValueOf(getSelectedBounds());
}
/**
* Gets the selected bounds.
* @return the selected bounds (trimmed, never null, default = "anywhere")
*/
public String getSelectedBounds() {
if(_selectedBounds == null || "".equals(_selectedBounds)) {
_selectedBounds = OptionsBounds.anywhere.name();
}
return Val.chkStr(this._selectedBounds);
}
/**
* Sets the selected bounds.
*
* @param selectedBounds the new selected bounds
*
* @throws IllegalArgumentException if selectedBounds not in OptionsBounds
*/
public void setSelectedBounds(String selectedBounds) {
try {
OptionsBounds.valueOf(selectedBounds);
this._selectedBounds = selectedBounds;
} catch(Exception e) {
this._selectedBounds = OptionsBounds.anywhere.toString();
}
}
/**
* Gets the visible envelope (can be projected).
* @return the visible envelope (never null)
*/
public Envelope getVisibleEnvelope() {
if(_visibleEnvelope == null) {
this.setVisibleEnvelope(new Envelope());
}
return _visibleEnvelope;
}
/**
* Sets the visible envelope (can be projected).
* @param envelope the visible envelope
*/
public void setVisibleEnvelope(Envelope envelope) {
_visibleEnvelope = envelope;
if (_visibleEnvelope == null) _visibleEnvelope = new Envelope();
}
// methods =====================================================================
/**
* Reset <b>this</b> object to default.
*/
public void reset() {
this.setSelectedEnvelope(new Envelope());
this.setSelectedBounds(OptionsBounds.anywhere.name());
this.setVisibleEnvelope(new Envelope());
}
/**
* Validate.
*
* @throws SearchException the search exception
*
* @see com.esri.gpt.catalog.search.ISearchFilter#validate()
*/
public void validate() throws SearchException {
String selectedBounds = this.getSelectedBounds();
if (selectedBounds == null || "".equals(selectedBounds)) {
this.setSelectedBounds(OptionsBounds.anywhere.toString());
}
}
/**
* Gets the params.
* @return the params
* @see com.esri.gpt.catalog.search.ISearchFilter#getParams()
*/
public SearchParameterMap getParams() {
SearchParameterMap map = new SearchParameterMap();
map.put(SaveParams.selectedBoundOption.name(),
map.new Value(this.getSelectedBounds()));
Envelope envelope = this.getSelectedEnvelope();
map.put(SaveParams.maxX.name(), map.new Value(String.valueOf(envelope.getMaxX())));
map.put(SaveParams.maxY.name(), map.new Value(String.valueOf(envelope.getMaxY())));
map.put(SaveParams.minX.name(), map.new Value(String.valueOf(envelope.getMinX())));
map.put(SaveParams.minY.name(), map.new Value(String.valueOf(envelope.getMinY())));
envelope = this.getVisibleEnvelope();
map.put("visible.minx", map.new Value(String.valueOf(envelope.getMinX())));
map.put("visible.miny", map.new Value(String.valueOf(envelope.getMinY())));
map.put("visible.maxx", map.new Value(String.valueOf(envelope.getMaxX())));
map.put("visible.maxy", map.new Value(String.valueOf(envelope.getMaxY())));
map.put("visible.wkid", map.new Value(String.valueOf(envelope.getWkid())));
return map;
}
/**
* Sets the params.
*
* @param parameterMap the parameter map
*
* @see com.esri.gpt.catalog.search.ISearchFilter#setParams(com.esri.gpt.catalog.search.SearchParameterMap)
*/
public void setParams(SearchParameterMap parameterMap) {
String tmp = parameterMap.get(SaveParams.selectedBoundOption.name()).getParamValue();
this.setSelectedBounds(tmp);
Envelope envelope = new Envelope();
try {
tmp = parameterMap.get(SaveParams.maxX.name()).getParamValue();
envelope.setMaxX(tmp);
tmp = parameterMap.get(SaveParams.maxY.name()).getParamValue();
envelope.setMaxY(tmp);
tmp = parameterMap.get(SaveParams.minX.name()).getParamValue();
envelope.setMinX(tmp);
tmp = parameterMap.get(SaveParams.minY.name()).getParamValue();
envelope.setMinY(tmp);
} catch (NullPointerException e) {
envelope = new Envelope();
LOG.log(Level.WARNING, "Could not get envelope parameters " +
"in Spatial Search Filter defaulting to" + envelope.toString(),e);
}
if (envelope.isEmpty()) envelope = new Envelope();
this.setSelectedEnvelope(envelope);
envelope = new Envelope();
try {
envelope.setMinX(parameterMap.get("visible.minx").getParamValue());
envelope.setMinY(parameterMap.get("visible.miny").getParamValue());
envelope.setMaxX(parameterMap.get("visible.maxx").getParamValue());
envelope.setMaxY(parameterMap.get("visible.maxy").getParamValue());
envelope.setWkid(parameterMap.get("visible.wkid").getParamValue());
} catch (NullPointerException e) {
envelope = this.getSelectedEnvelope().clone();
}
if (envelope.isEmpty()) envelope = this.getSelectedEnvelope().clone();
this.setVisibleEnvelope(envelope);
}
/**
* Compares two objects.
* @param obj
* @return <code>true</code> if two objects are equal
*
*/
@Override
public boolean equals(Object obj) {
return isEquals(obj);
}
/**
* Checks if object in argument is equal to <b>this</b>
* @param obj
* @return true if equal, false otherwise
*/
public boolean isEquals(Object obj) {
if(!(obj instanceof SearchFilterSpatial)) {
return false;
}
SearchFilterSpatial tmp = (SearchFilterSpatial) obj;
return this.getParams().equalsSubset(tmp.getParams());
}
/**
*
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "\n{=======================\n" + this.getClass().getCanonicalName() +
this.getParams().toString()
+ "\n===========================}";
}
/**
* Gets the mvs url. If empty, there was an error getting the MVS url.
*
* @return the mvs url
*/
public String getMvsUrl() {
URL url;
try {
url = SearchConfig.getConfiguredInstance().getMapviewerUrl2();
if(url != null)
return url.toString();
} catch (SearchException e) {
LOG.log(Level.FINE, "" ,e);
}
return "";
}
/**
* Gets the envelope associated with the class
* @return the envelope
*/
public Envelope getEnvelope() {
return this.getSelectedEnvelope();
}
/**
* Sets the envelope associated with the class
* @param envelope
*/
public void setEnvelope(Envelope envelope) {
this.setSelectedEnvelope(envelope);
}
}