ingo@3230: package de.intevation.flys.artifacts.access;
ingo@3230: 
bjoern@4655: import java.util.List;
bjoern@4655: 
christian@4150: import de.intevation.flys.artifacts.FLYSArtifact;
bjoern@4655: import de.intevation.flys.artifacts.model.minfo.BedHeight;
bjoern@4655: import de.intevation.flys.artifacts.model.minfo.BedHeightFactory;
christian@4150: import de.intevation.flys.artifacts.states.SoundingsSelect;
bjoern@4655: import de.intevation.flys.model.BedHeightSingle;
bjoern@4655: import de.intevation.flys.model.BedHeightSingleValue;
christian@4150: 
ingo@3230: import gnu.trove.TIntArrayList;
ingo@3230: 
ingo@3230: import org.apache.log4j.Logger;
ingo@3230: 
ingo@3230: 
ingo@3230: public class BedHeightAccess extends Access {
ingo@3230: 
sascha@3258:     private static final Logger logger = Logger.getLogger(BedHeightAccess.class);
sascha@3232: 
sascha@3258:     private int[] singleIDs;
sascha@3258:     private int[] epochIDs;
sascha@3232: 
sascha@3258:     private Double lowerKM;
sascha@3258:     private Double upperKM;
sascha@3232: 
raimund@3614:     private String time;
sascha@3232: 
sascha@3258:     public BedHeightAccess(FLYSArtifact artifact) {
sascha@3258:         super(artifact);
sascha@3258:     }
sascha@3232: 
sascha@3232: 
sascha@3258:     public Double getLowerKM() {
sascha@3258:         if (lowerKM == null) {
sascha@3258:             lowerKM = getDouble("ld_from");
sascha@3258:         }
sascha@3232: 
sascha@3258:         return lowerKM;
ingo@3230:     }
sascha@3232: 
sascha@3232: 
ingo@3230:     public Double getUpperKM() {
sascha@3258:         if (upperKM == null) {
sascha@3258:             upperKM = getDouble("ld_to");
sascha@3258:         }
sascha@3232: 
sascha@3258:         return upperKM;
ingo@3230:     }
sascha@3232: 
sascha@3232: 
ingo@3230:     public int[] getBedHeightSingleIDs() {
sascha@3258:         if (singleIDs == null) {
sascha@3258:             String data = getString("soundings");
sascha@3232: 
sascha@3258:             if (data == null) {
sascha@3258:                 logger.warn("No 'soundings' parameter specified!");
sascha@3258:                 return null;
sascha@3258:             }
christian@4150:             else {
christian@4150:                 logger.debug("getBedHeightSingleIDs(): data=" + data);
christian@4150:             }
sascha@3232: 
sascha@3258:             String[] parts = data.split(";");
sascha@3232: 
sascha@3258:             TIntArrayList ids = new TIntArrayList();
ingo@3230: 
sascha@3258:             for (String part: parts) {
sascha@3258:                 if (part.indexOf(SoundingsSelect.PREFIX_SINGLE) >= 0) {
sascha@3258:                     String tmp = part.replace(SoundingsSelect.PREFIX_SINGLE, "");
sascha@3258: 
sascha@3258:                     try {
christian@4150:                         int i = Integer.parseInt(tmp);
christian@4150:                         if (!ids.contains(i)) {
christian@4150:                             ids.add(i);
christian@4150:                         }
sascha@3258:                     }
sascha@3258:                     catch (NumberFormatException nfe) {
sascha@3258:                         logger.warn("Cannot parse int from string: '" + tmp + "'");
sascha@3258:                     }
sascha@3258:                 }
sascha@3258:             }
sascha@3258: 
sascha@3258:             singleIDs = ids.toNativeArray();
sascha@3258:         }
sascha@3258: 
sascha@3258:         return singleIDs;
ingo@3230:     }
ingo@3230: 
ingo@3230: 
raimund@3614:     public String getYearEpoch() {
raimund@3614:         if (time == null) {
raimund@3614:             time =  getString("ye_select");
raimund@3614:         }
raimund@3614:         return time;
raimund@3614:     }
raimund@3614: 
raimund@3614: 
ingo@3230:     public int[] getBedHeightEpochIDs() {
sascha@3258:         if (epochIDs == null) {
sascha@3258:             String data = getString("soundings");
sascha@3232: 
sascha@3258:             if (data == null) {
sascha@3258:                 logger.warn("No 'soundings' parameter specified!");
sascha@3258:                 return null;
sascha@3258:             }
sascha@3232: 
sascha@3258:             String[] parts = data.split(";");
sascha@3232: 
sascha@3258:             TIntArrayList ids = new TIntArrayList();
sascha@3232: 
sascha@3258:             for (String part: parts) {
sascha@3258:                 if (part.indexOf(SoundingsSelect.PREFIX_EPOCH) >= 0) {
sascha@3258:                     String tmp = part.replace(SoundingsSelect.PREFIX_EPOCH, "");
sascha@3258: 
sascha@3258:                     try {
sascha@3258:                         ids.add(Integer.parseInt(tmp));
sascha@3258:                     }
sascha@3258:                     catch (NumberFormatException nfe) {
sascha@3258:                         logger.warn("Cannot parse int from string: '" + tmp + "'");
sascha@3258:                     }
sascha@3258:                 }
sascha@3258:             }
sascha@3258: 
sascha@3258:             epochIDs = ids.toNativeArray();
sascha@3258:         }
sascha@3258: 
sascha@3258:         return epochIDs;
ingo@3230:     }
bjoern@4655: 
bjoern@4655:     /**
bjoern@4655:      * Return the {@link BedHeight} at the height_id and time of the artifact
bjoern@4655:      * @return {@link BedHeight}
bjoern@4655:      */
bjoern@4655:     public BedHeight getHeight() {
bjoern@4655:         logger.debug("getHeight");
bjoern@4655:         return BedHeightFactory.getHeight(
bjoern@4655:             artifact.getDataAsString("type"),
bjoern@4655:             Integer.parseInt(artifact.getDataAsString("height_id")),
bjoern@4655:             Integer.parseInt(artifact.getDataAsString("time")));
bjoern@4655:     }
bjoern@4655: 
bjoern@4655:     /**
bjoern@4655:      * Return a {@link List} of {@link BedHeightSingleValue}s
bjoern@4655:      * at the range of the artifact
bjoern@4655:      * @return List of {@link BedHeightSingleValue}s
bjoern@4655:      */
bjoern@4655:     public List<BedHeightSingleValue> getSingleValues() {
bjoern@4655:         logger.debug("getSingleValues");
bjoern@4655:         BedHeightSingle single = BedHeightSingle.getBedHeightSingleById(
bjoern@4655:                 artifact.getDataAsInteger("height_id"));
bjoern@4655:         return BedHeightSingleValue.getBedHeightSingleValues(single,
bjoern@4655:                 artifact.getDataAsDouble("ld_from"),
bjoern@4655:                 artifact.getDataAsDouble("ld_to"));
bjoern@4655:     }
ingo@3230: }
sascha@3259: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :