www.pudn.com > gvSIG-1_1-rc1-src.zip > CSWFilter.java
/* gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
*
* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,USA.
*
* For more information, contact:
*
* Generalitat Valenciana
* Conselleria d'Infraestructures i Transport
* Av. Blasco Ibáñez, 50
* 46010 VALENCIA
* SPAIN
*
* +34 963862235
* gvsig@gva.es
* www.gvsig.gva.es
*
* or
*
* IVER T.I. S.A
* Salamanca 50
* 46005 Valencia
* Spain
*
* +34 963163400
* dac@iver.es
*/
package es.gva.cit.catalogClient.csw.filters;
import org.gvsig.i18n.Messages;
import es.gva.cit.catalogClient.csw.drivers.CSWMessages;
import es.gva.cit.catalogClient.filters.AbstractFilter;
import es.gva.cit.catalogClient.filters.AdditionalClauses;
import es.gva.cit.catalogClient.languages.FilterEncoding;
import es.gva.cit.catalogClient.querys.Query;
import es.gva.cit.catalogClient.schemas.DublinCoreSchema;
import es.gva.cit.catalogClient.schemas.EbRIMSchema;
import es.gva.cit.catalogClient.schemas.ISO19115Schema;
import es.gva.cit.catalogClient.schemas.ISchemas;
import es.gva.cit.catalogClient.schemas.Schemas;
import es.gva.cit.catalogClient.utils.Strings;
/**
* This class creates a CSW query. It can create querys using the Filter Encoding Language with ebXML or ISO19115/19119 profiles
*
*
* @author Jorge Piera Llodra (piera_jor@gva.es)
*/
public class CSWFilter extends AbstractFilter {
/**
*
*
*/
private ISchemas equiv = null;
/**
*
*
*/
public CSWFilter() {
super();
}
/**
* Return a CQL-Text query
*
*
* @param query
* @return String
* @param profile
*/
public String getQuery(Query query, String profile) {
String pregunta = null;
setProfile(profile);
FilterEncoding filter = new FilterEncoding("ogc:", "*", "?", "\\",
"xmlns:ogc=\"http://www.opengis.net/ogc\"");
addAdditionalClauses(filter);
if (query.getTitle() != null) {
if (CSWMessages.getUrl().getHost().equals("laits.gmu.edu")){
if (query.getSearchType() == Query.SEARCH_DATA){
StringBuffer buffer = new StringBuffer();
buffer.append("");
buffer.append("");
buffer.append("/DataGranule/name ");
buffer.append("*" + query.getTitle() + "* ");
buffer.append(" ");
buffer.append(" ");
return buffer.toString();
}else{
StringBuffer buffer = new StringBuffer();
buffer.append("");
buffer.append("");
buffer.append("");
buffer.append("/Service/@id ");
buffer.append("/Classification/@classifiedObject ");
buffer.append(" ");
buffer.append("");
buffer.append("/Classification/@classificationNode ");
buffer.append("/ClassificationNode/@id ");
buffer.append(" ");
buffer.append("");
buffer.append("/ClassificationNode/@code ");
buffer.append("" + query.getTitle() + " ");
buffer.append(" ");
buffer.append(" ");
buffer.append(" ");
return buffer.toString();
}
}else{
filter.addClauses(equiv.getTitle(), equiv.getTitleValue(query.getTitle(),query.getTitleFilter()), query.getTitleFilter(),
"PropertyIsLike", "L", "And");
}
}
if (query.isMinimized()){
if (query.getAbstract() != null) {
filter.addClauses(equiv.getAbstract(), Strings.addAsteriscsFromAnArray(query.getAbstract()),
"Y", "PropertyIsLike", "L", "Or");
}
}else{
if (query.getAbstract() != null) {
filter.addClauses(equiv.getAbstract(), Strings.addAsteriscsFromAnArray(query.getAbstract()),
"Y", "PropertyIsLike", "L", "And");
}
if (query.getThemeKey() != null) {
filter.addClauses(equiv.getThemeKey(), query.getThemeKey(), "Y",
"PropertyIsLike", "L", "And");
}
if ((query.getTopic() != null) && (!query.getTopic().equals(Messages.getText("cathegoryAny")))) {
filter.addClauses(equiv.getTopic(), equiv.getTopicValue(query.getTopic()),
"E", "PropertyIsEqualTo", "L", "And");
}
/*
if (this.getScale() != null) {
query.addClauses(equiv.getScale(), this.getScale(), "E");
}
*/
if (query.getProvider() != null) {
filter.addClauses(equiv.getProvider(), equiv.getProviderValue(query.getProvider()),
"E", "PropertyIsEqualTo" , "L", "And");
}
if (query.getDateFrom() != null) {
filter.addClauses(equiv.getDateFrom(), query.getDateFrom(), "E", "PropertyIsGeaterThan" ,"L", "And");
}
if (query.getDateTo() != null) {
filter.addClauses(equiv.getDateTo(), query.getDateTo(), "E", "PropertyIsLessThan", "L", "And");
}
}
if ((query.getCoordenates() != null) && (query.isCoordinatesClicked())){
filter.addBoundingBox(query.getCoordenates(), equiv.getCoordinates(), getCoordinatesOption(query.getCoordenatesFilter()));
}
pregunta = filter.toString();
return pregunta;
}
/**
* This function returns true only when the user has choosen the
* "Fully Outside Of" of the coordinates option.
*
*
* @return
* @param translator
* @param coordinatesOption
*/
public boolean getCoordinatesOption(String coordinatesOption) {
if ((coordinatesOption.equals(Messages.getText("coordinatesEqual"))) ||
(coordinatesOption.equals(Messages.getText("coordinatesContains"))) ||
(coordinatesOption.equals(Messages.getText("coordinatesEnclose"))))
return false;
return true;
}
/**
* It sets the CSW profile
*
*
* @param profile
*/
public void setProfile(String profile) {
if (profile.equals(Schemas.ISO19115)) {
setEquiv(new ISO19115Schema());
} else if (profile.equals(Schemas.DUBLINCORE))
setEquiv(new DublinCoreSchema());
else{
setEquiv(new EbRIMSchema());
}
}
/**
* It adds the aditional clauses (for each profile)
*
*
* @param filter
*/
public void addAdditionalClauses(FilterEncoding filter) {
AdditionalClauses[] ac = equiv.getAdditionalClauses(null);
for (int i = 0; i < ac.length; i++)
filter.addClauses(ac[i].getProperty(), ac[i].getValue(),
ac[i].getConcorancia(), ac[i].getRelationship(), ac[i].getType(),"And");
}
/**
*
*
*
* @return Returns the equiv.
*/
public ISchemas getEquiv() {
return equiv;
}
/**
*
*
*
* @param equiv The equiv to set.
*/
public void setEquiv(ISchemas equiv) {
this.equiv = equiv;
}
}