Mercurial > dive4elements > gnv-client
diff gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/context/GNVArtifactContextFactory.java @ 444:85f48e287fb3
Added configuration for vertical cross sections ("Profilschnitte")
gnv-artifacts/trunk@492 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 30 Dec 2009 10:35:19 +0000 |
parents | da21c256a0ba |
children | 07672838fa5f |
line wrap: on
line diff
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/context/GNVArtifactContextFactory.java Tue Dec 29 14:54:17 2009 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/context/GNVArtifactContextFactory.java Wed Dec 30 10:35:19 2009 +0000 @@ -12,6 +12,9 @@ import java.util.Properties; import java.util.HashMap; import java.util.ArrayList; +import java.util.Collections; + +import java.awt.Dimension; import org.apache.log4j.Logger; @@ -29,6 +32,7 @@ import de.intevation.gnv.artifacts.cache.CacheFactory; import de.intevation.gnv.raster.Palette; +import de.intevation.gnv.raster.Filter; import de.intevation.gnv.raster.PaletteManager; import de.intevation.artifacts.ArtifactContextFactory; @@ -68,6 +72,12 @@ public final static String HORIZONTAL_CROSS_SECTION_PROFILE_SAMPLES = "/artifact-database/gnv/horizontal-cross-section-profile/samples/@number"; + public final static String VERTICAL_CROSS_SECTION_SAMPLES = + "/artifact-database/gnv/vertical-cross-section/samples"; + + public final static String VERTICAL_CROSS_SECTION_FILTERS = + "/artifact-database/gnv/vertical-cross-section/filters/filter"; + /** * Constructor */ @@ -120,6 +130,8 @@ configureHorizontalCrossSectionProfile(config, returnValue); + configureVerticalCrossSection(config, returnValue); + } catch (FileNotFoundException e) { log.error(e, e); } catch (IOException e) { @@ -130,6 +142,111 @@ return returnValue; } + protected void configureVerticalCrossSection( + Document config, + GNVArtifactContext context + ) { + log.info("configuration of vertical cross section"); + configureVerticalCrossSectionSamples(config, context); + configureVerticalCrossSectionFilters(config, context); + } + + protected void configureVerticalCrossSectionFilters( + Document config, + GNVArtifactContext context + ) { + log.info("configuration of vertical cross section filters"); + + NodeList filters = Config.getNodeSetXPath( + VERTICAL_CROSS_SECTION_FILTERS); + + ArrayList<Filter.Factory> filterFactories = + new ArrayList<Filter.Factory>(); + + if (filters == null) { + log.warn("no filters found"); + } + else { + for (int i = 0, N = filters.getLength(); i < N; ++i) { + Element filterElement = (Element)filters.item(i); + String factoryName = filterElement.getAttribute("factory"); + if ((factoryName = factoryName.trim()).length() > 0) { + try { + Class clazz = Class.forName(factoryName); + Filter.Factory filterFactory = + (Filter.Factory)clazz.newInstance(); + filterFactories.add(filterFactory); + } + catch (ClassNotFoundException cnfe) { + log.error("filter class not found", cnfe); + } + catch (InstantiationException ie) { + log.error("cannot instantiate filter factory", ie); + } + catch (IllegalAccessException iae) { + log.error("cannot access filter factory", iae); + } + catch (ClassCastException cce) { + log.error("not a filter factory class", cce); + } + } + else { + log.error("No factory name given"); + } + } + } + + log.info("number of filters: " + filterFactories.size()); + + context.put( + GNVArtifactContext.VERTICAL_CROSS_SECTION_FILTER_FACTORIES_KEY, + Collections.unmodifiableList(filterFactories)); + } + + protected void configureVerticalCrossSectionSamples( + Document config, + GNVArtifactContext context + ) { + log.info("configuration of vertical cross section samples"); + + Element samples = (Element)Config.getNodeXPath( + VERTICAL_CROSS_SECTION_SAMPLES); + + Dimension sampleSize = new Dimension( + GNVArtifactContext.DEFAULT_VERTICAL_CROSS_SECTION_SAMPLES); + + if (samples == null) { + log.warn("no samples found"); + } + else { + String widthString = samples.getAttribute("width"); + if ((widthString = widthString.trim()).length() > 0) { + try { + sampleSize.width = Math.max(1, Integer.parseInt(widthString)); + } + catch (NumberFormatException nfe) { + log.error("invalid value for width: '" + widthString + "'"); + } + } + String heightString = samples.getAttribute("height"); + if ((heightString = heightString.trim()).length() > 0) { + try { + sampleSize.height = Math.max(1, Integer.parseInt(heightString)); + } + catch (NumberFormatException nfe) { + log.error("invalid value for height: '" + heightString + "'"); + } + } + } + log.info("samples (width x height): " + + sampleSize.width + " x " + sampleSize.height); + + context.put( + GNVArtifactContext.VERTICAL_CROSS_SECTION_SAMPLES_KEY, + sampleSize); + + } + protected void configureHorizontalCrossSectionProfile( Document config, GNVArtifactContext context