teichmann@5831: package org.dive4elements.river.artifacts.access; ingo@3230: bjoern@4655: import java.util.List; bjoern@4655: teichmann@5831: import org.dive4elements.artifacts.CallContext; felix@4826: teichmann@5831: import org.dive4elements.river.artifacts.FLYSArtifact; teichmann@5831: import org.dive4elements.river.artifacts.model.minfo.BedHeight; teichmann@5831: import org.dive4elements.river.artifacts.model.minfo.BedHeightFactory; teichmann@5831: import org.dive4elements.river.artifacts.states.SoundingsSelect; teichmann@5831: import org.dive4elements.river.model.BedHeightSingle; teichmann@5831: import org.dive4elements.river.model.BedHeightSingleValue; christian@4150: ingo@3230: import gnu.trove.TIntArrayList; ingo@3230: ingo@3230: import org.apache.log4j.Logger; ingo@3230: ingo@3230: felix@4826: public class BedHeightAccess felix@4826: extends RangeAccess felix@4826: { 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: raimund@3614: private String time; sascha@3232: felix@4826: public BedHeightAccess(FLYSArtifact artifact, CallContext context) { felix@4826: super(artifact, context); sascha@3258: } sascha@3232: sascha@3232: sascha@3258: public Double getLowerKM() { felix@4826: // TODO update callers felix@4826: return getFrom(); ingo@3230: } sascha@3232: sascha@3232: ingo@3230: public Double getUpperKM() { felix@4826: // TODO update callers felix@4826: return getTo(); 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 getSingleValues() { bjoern@4655: logger.debug("getSingleValues"); bjoern@4655: BedHeightSingle single = BedHeightSingle.getBedHeightSingleById( bjoern@4655: artifact.getDataAsInteger("height_id")); bjoern@4655: return BedHeightSingleValue.getBedHeightSingleValues(single, felix@4828: getFrom(), felix@4828: getTo()); bjoern@4655: } ingo@3230: } sascha@3259: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :