/* (c) 2014 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.feature.retype; import org.geotools.data.Join; import org.geotools.data.Query; import org.geotools.feature.simple.SimpleFeatureTypeBuilder; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; /** * A support class containing the old feature type name, the new one, the old * feature type, and the new one * * @author Andrea Aime */ class FeatureTypeMap { String originalName; String name; SimpleFeatureType originalFeatureType; SimpleFeatureType featureType; public FeatureTypeMap(String originalName, String name) { this.originalName = originalName; this.name = name; } public FeatureTypeMap(SimpleFeatureType originalFeatureType, SimpleFeatureType featureType) { this.originalFeatureType = originalFeatureType; this.featureType = featureType; this.originalName = originalFeatureType.getTypeName(); this.name = featureType.getTypeName(); } public String getOriginalName() { return originalName; } public String getName() { return name; } public SimpleFeatureType getOriginalFeatureType() { return originalFeatureType; } public SimpleFeatureType getFeatureType() { return featureType; } /*** * Takes into account eventual joins * * @param query * @return */ public SimpleFeatureType getFeatureType(Query query) { SimpleFeatureType result; if ( query.getPropertyNames() != Query.ALL_NAMES ) { result = SimpleFeatureTypeBuilder.retype(featureType, query.getPropertyNames()); } else { result = featureType; } // add back the joined features in case of join if(!query.getJoins().isEmpty()) { SimpleFeatureTypeBuilder tb = new SimpleFeatureTypeBuilder(); tb.init(result); for (Join join : query.getJoins()) { String joinedFeatureAttribute = join.getAlias(); if(joinedFeatureAttribute == null) { joinedFeatureAttribute = join.getTypeName(); } tb.add(joinedFeatureAttribute, SimpleFeature.class); } result = tb.buildFeatureType(); } return result; } public boolean isUnchanged() { return originalName.equals(name); } public void setFeatureTypes(SimpleFeatureType original, SimpleFeatureType transformed) { this.originalFeatureType = original; this.featureType = transformed; } }