Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/AreaFacet.java @ 4128:11c589d68f13
Fix for NPE in FLYSWorkspace.bringUp() #933
author | Christian Lins <christian.lins@intevation.de> |
---|---|
date | Sun, 14 Oct 2012 10:15:50 +0200 |
parents | a66df8e8d3df |
children |
line wrap: on
line source
package de.intevation.flys.artifacts.model; import java.util.List; import org.apache.log4j.Logger; import de.intevation.artifacts.Artifact; import de.intevation.artifacts.CallContext; import de.intevation.artifactdatabase.state.DefaultFacet; import de.intevation.artifactdatabase.state.Facet; import de.intevation.artifacts.DataProvider; import de.intevation.flys.artifacts.AreaArtifact; /** * Trival Facet for areas. * Note that this Facet comes in two "types" (names): * <ul> * <li>CROSS_SECTION_AREA (cross_section.area) and</li> * <li>LONGITUDINAL_SECTION_AREA (longitudinal.area</li> * </ul> * This is to support different diagram types without being painted in both * at the same time. The name has to be given when constructing. */ public class AreaFacet extends DefaultFacet { private static Logger logger = Logger.getLogger(AreaFacet.class); /** * Constructor, set (maybe localized) description and name. * @param idx Index given when querying artifact for data. * @param name important to discern areas in different diagram types. */ public AreaFacet(int idx, String name, String description) { super(idx, name, description); } /** * Gets Cross Section (profile). * @param art artifact to get data from. * @param context ignored */ public Object getData(Artifact art, CallContext context) { logger.debug("Get data for area."); // Get information from artifact about which // info to grab from blackboard. // // All compatible facets should provide their data // under the key (Artifact-UUID + Facet-Index). AreaArtifact artifact = (AreaArtifact) art; Object lowerData = null; Object upperData = null; String stemFacetName = null; List<DataProvider> providers = context. getDataProvider(artifact.getLowerDPKey()); if (providers.size() < 1) { logger.warn("No 'lower' provider given for area [" + artifact.getLowerDPKey() + "]"); } else { lowerData = providers.get(0).provideData( artifact.getLowerDPKey(), null, context); logger.debug("'Lower' data provider key for area [" + artifact.getLowerDPKey() + "]"); stemFacetName = artifact.getLowerDPKey().split(":")[1]; } providers = context.getDataProvider(artifact.getUpperDPKey()); if (providers.size() < 1) { logger.warn("No 'upper' provider given for area [" + artifact.getUpperDPKey() + "]"); } else { upperData = providers.get(0).provideData( artifact.getUpperDPKey(), null, context); logger.debug("'Upper' data provider key for area [" + artifact.getUpperDPKey() + "]"); if (stemFacetName == null) { stemFacetName = artifact.getUpperDPKey().split(":")[1]; } } if (upperData == null && lowerData == null) { logger.warn("Not given 'upper' and 'lower' for area"); } return new Data(stemFacetName, lowerData, upperData, Boolean.valueOf(artifact.getPaintBetween())); } /** Do a deep copy. */ @Override public Facet deepCopy() { AreaFacet copy = new AreaFacet(this.index, this.name, this.description); copy.set(this); return copy; } /** Result data bundle. */ public class Data { protected String rootFacetName; protected Object upperData; protected Object lowerData; protected boolean doPaintBetween; /** Create a new result data bundle. */ public Data(String rootName, Object low, Object up, boolean between) { this.rootFacetName = rootName; this.lowerData = low; this.upperData = up; this.doPaintBetween = between; } /** Get name of a facet that is involved in area generation * to induce type (e.g. longitudinal_section.w -> "W over km"). */ public String getRootFacetName() { return this.rootFacetName; } /** Get data for 'upper' curve of area. */ public Object getUpperData() { return this.upperData; } /** Get data for 'lower' curve of area. */ public Object getLowerData() { return this.lowerData; } /** Whether to fill whole area between (in contrast to 'under' * or 'over'). */ public boolean doPaintBetween() { return this.doPaintBetween; } } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :