ingo@3230: package de.intevation.flys.artifacts.access;
ingo@3230: 
ingo@3230: import gnu.trove.TIntArrayList;
ingo@3230: 
ingo@3230: import org.apache.log4j.Logger;
ingo@3230: 
ingo@3230: import de.intevation.flys.artifacts.FLYSArtifact;
ingo@3230: import de.intevation.flys.artifacts.states.SoundingsSelect;
ingo@3230: 
ingo@3230: 
ingo@3230: public class BedHeightAccess extends Access {
ingo@3230: 
ingo@3230: 	private static final Logger logger = Logger.getLogger(BedHeightAccess.class);
sascha@3232: 
sascha@3232: 
ingo@3230: 	private int[] singleIDs;
ingo@3230: 	private int[] epochIDs;
sascha@3232: 
ingo@3230: 	private Double lowerKM;
ingo@3230: 	private Double upperKM;
sascha@3232: 
sascha@3232: 
ingo@3230: 	public BedHeightAccess(FLYSArtifact artifact) {
ingo@3230: 		super(artifact);
ingo@3230: 	}
sascha@3232: 
sascha@3232: 
ingo@3230: 	public Double getLowerKM() {
ingo@3230:     	if (lowerKM == null) {
ingo@3230:     		lowerKM = getDouble("ld_from");
ingo@3230:     	}
sascha@3232: 
ingo@3230:     	return lowerKM;
ingo@3230:     }
sascha@3232: 
sascha@3232: 
ingo@3230:     public Double getUpperKM() {
ingo@3230:     	if (upperKM == null) {
ingo@3230:     		upperKM = getDouble("ld_to");
ingo@3230:     	}
sascha@3232: 
ingo@3230:     	return upperKM;
ingo@3230:     }
sascha@3232: 
sascha@3232: 
ingo@3230:     public int[] getBedHeightSingleIDs() {
ingo@3230:     	if (singleIDs == null) {
ingo@3230: 	        String data = getString("soundings");
sascha@3232: 
ingo@3230: 	        if (data == null) {
ingo@3230: 	            logger.warn("No 'soundings' parameter specified!");
ingo@3230: 	            return null;
ingo@3230: 	        }
sascha@3232: 
ingo@3230: 	        String[] parts = data.split(";");
sascha@3232: 
ingo@3230: 	        TIntArrayList ids = new TIntArrayList();
sascha@3232: 
ingo@3230: 	        for (String part: parts) {
ingo@3230: 	            if (part.indexOf(SoundingsSelect.PREFIX_SINGLE) >= 0) {
ingo@3230: 	                String tmp = part.replace(SoundingsSelect.PREFIX_SINGLE, "");
sascha@3232: 
ingo@3230: 	                try {
ingo@3230: 	                    ids.add(Integer.parseInt(tmp));
ingo@3230: 	                }
ingo@3230: 	                catch (NumberFormatException nfe) {
ingo@3230: 	                    logger.warn("Cannot parse int from string: '" + tmp + "'");
ingo@3230: 	                }
ingo@3230: 	            }
ingo@3230: 	        }
sascha@3232: 
ingo@3230: 	        singleIDs = ids.toNativeArray();
ingo@3230:     	}
ingo@3230: 
ingo@3230:     	return singleIDs;
ingo@3230:     }
ingo@3230: 
ingo@3230: 
ingo@3230:     public int[] getBedHeightEpochIDs() {
ingo@3230:     	if (epochIDs == null) {
ingo@3230: 	        String data = getString("soundings");
sascha@3232: 
ingo@3230: 	        if (data == null) {
ingo@3230: 	            logger.warn("No 'soundings' parameter specified!");
ingo@3230: 	            return null;
ingo@3230: 	        }
sascha@3232: 
ingo@3230: 	        String[] parts = data.split(";");
sascha@3232: 
ingo@3230: 	        TIntArrayList ids = new TIntArrayList();
sascha@3232: 
ingo@3230: 	        for (String part: parts) {
ingo@3230: 	            if (part.indexOf(SoundingsSelect.PREFIX_EPOCH) >= 0) {
ingo@3230: 	                String tmp = part.replace(SoundingsSelect.PREFIX_EPOCH, "");
sascha@3232: 
ingo@3230: 	                try {
ingo@3230: 	                    ids.add(Integer.parseInt(tmp));
ingo@3230: 	                }
ingo@3230: 	                catch (NumberFormatException nfe) {
ingo@3230: 	                    logger.warn("Cannot parse int from string: '" + tmp + "'");
ingo@3230: 	                }
ingo@3230: 	            }
ingo@3230: 	        }
sascha@3232: 
ingo@3230: 	        epochIDs = ids.toNativeArray();
ingo@3230:     	}
sascha@3232: 
ingo@3230:     	return epochIDs;
ingo@3230:     }
ingo@3230: }