/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2004-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library 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 * Lesser General Public License for more details. */ package org.geotools.data.wfs.v1_0_0; import java.util.Iterator; import java.util.List; import org.geotools.data.wfs.v1_0_0.Action.UpdateAction; import org.geotools.factory.CommonFactoryFinder; import org.geotools.filter.visitor.ClientTransactionAccessor; import org.opengis.filter.Filter; import org.opengis.filter.FilterFactory; public class WFSTransactionAccessor implements ClientTransactionAccessor { private List actions; private static FilterFactory ff = CommonFactoryFinder.getFilterFactory( null ); WFSTransactionAccessor(List actions){ this.actions=actions; } /** * Returns all the filters indicating deleted feature anded together. This is used to tell the server what features * to NOT return. * * @return all the filters indicating deleted feature anded together. */ public Filter getDeleteFilter() { List l = actions; Iterator i = l.iterator(); Filter deleteFilter=null; while(i.hasNext()){ Action a = (Action)i.next(); if(a.getType() == Action.DELETE){ if( deleteFilter==null ) deleteFilter=a.getFilter(); else deleteFilter= ff.and( deleteFilter, a.getFilter()); } } return deleteFilter; } /** * Returns all the filters of updates that affect the attribute in the expression ored together. * * @param attributePath the xpath identifier of the attribute. * @return all the filters of updates that affect the attribute in the expression ORed together. */ public Filter getUpdateFilter(String attributePath) { Iterator i = actions.iterator(); Filter updateFilter=null; while(i.hasNext()){ Action a = (Action)i.next(); if(a.getType() == Action.UPDATE){ UpdateAction ua = (UpdateAction)a; if(ua.getProperty(attributePath)!=null){ if( updateFilter==null ) updateFilter=a.getFilter(); else updateFilter=ff.and( updateFilter, a.getFilter()); } } } return updateFilter; } }