# HG changeset patch # User gernotbelger # Date 1530710768 -7200 # Node ID c3994657c15da11e5b7c615822a6d6f61af728d2 # Parent bfe97ad35df57c1ef71536a27fcd81829114af43 salix workflow little improvments diff -r bfe97ad35df5 -r c3994657c15d artifacts/doc/conf/artifacts/uinfo.xml --- a/artifacts/doc/conf/artifacts/uinfo.xml Wed Jul 04 14:00:13 2018 +0200 +++ b/artifacts/doc/conf/artifacts/uinfo.xml Wed Jul 04 15:26:08 2018 +0200 @@ -89,7 +89,7 @@ - + @@ -99,12 +99,12 @@ - - + + - - + + @@ -113,7 +113,7 @@ - + diff -r bfe97ad35df5 -r c3994657c15d artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/LoadEpochSelect.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/LoadEpochSelect.java Wed Jul 04 14:00:13 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,74 +0,0 @@ -/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde - * Software engineering by Intevation GmbH - * - * This file is Free Software under the GNU AGPL (>=v3) - * and comes with ABSOLUTELY NO WARRANTY! Check out the - * documentation coming with Dive4Elements River for details. - */ - -package org.dive4elements.river.artifacts.uinfo.inundationduration; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.apache.log4j.Logger; -import org.dive4elements.artifacts.Artifact; -import org.dive4elements.artifacts.CallContext; -import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator; -import org.dive4elements.river.artifacts.D4EArtifact; -import org.dive4elements.river.artifacts.access.RiverAccess; -import org.dive4elements.river.artifacts.model.CollisionHibernateFactory; -import org.dive4elements.river.artifacts.states.AddTableDataHelper; -import org.dive4elements.river.artifacts.states.DefaultState; -import org.dive4elements.river.model.sinfo.Collision; -import org.w3c.dom.Element; - -public class LoadEpochSelect extends DefaultState { - /** The log used in this class. */ - private static Logger log = Logger.getLogger(LoadEpochSelect.class); - - /** - * The default constructor that initializes an empty State object. - */ - public LoadEpochSelect() { - } - - @Override - protected String getUIProvider() { - return "uinfo.inundationduration.load_totalepoch_select"; - } - - @Override - protected void appendItems(final Artifact artifact, final ElementCreator creator, final String name, final CallContext context, final Element select) { - final String dataKey = "totalepoch"; - try { - if (dataKey.equals(name)) { - - final AddTableDataHelper helper = new AddTableDataHelper(creator, select, "year", context.getMeta()); // pinKeycolum; nicht zu verweschseln mit - // datakey..artifact. - - // helper.addColumn(0, "pinfrom", "60", "common.client.ui.selection", "ICON", "CENTER", "from"); - helper.addColumn(0, "year", "60", "year", "INTEGER", "LEFT", null); // Keine Pins - - final RiverAccess access = new RiverAccess((D4EArtifact) artifact); - final List collisions = CollisionHibernateFactory.getCollisionsByRiver(access.getRiver());// TODO: DATASOURCE?! Has to be - // uinfo.inundation_duration - // (Überflutungsdauern Aue) irgendwas... - - for (final Collision coll : collisions) { - final Integer year = coll.getYear(); - final Map row = new HashMap<>(); - row.put("year", year.toString()); // Nullpointer? - helper.addRow(row); - - } - helper.submitMapToXml(); - } - } - catch (final IllegalArgumentException iae) { - iae.printStackTrace(); - } - } - -} diff -r bfe97ad35df5 -r c3994657c15d artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/LoadMultipleEpochSelectState.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/LoadMultipleEpochSelectState.java Wed Jul 04 14:00:13 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,76 +0,0 @@ -/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde - * Software engineering by Intevation GmbH - * - * This file is Free Software under the GNU AGPL (>=v3) - * and comes with ABSOLUTELY NO WARRANTY! Check out the - * documentation coming with Dive4Elements River for details. - */ - -package org.dive4elements.river.artifacts.uinfo.salix; - -import java.util.HashMap; -import java.util.Map; - -import org.apache.log4j.Logger; -import org.dive4elements.artifacts.Artifact; -import org.dive4elements.artifacts.CallContext; -import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator; -import org.dive4elements.river.artifacts.states.AddTableDataHelper; -import org.dive4elements.river.artifacts.states.DefaultState; -import org.w3c.dom.Element; - -public class LoadMultipleEpochSelectState extends DefaultState { - /** The log used in this class. */ - private static Logger log = Logger.getLogger(LoadMultipleEpochSelectState.class); - - /** - * The default constructor that initializes an empty State object. - */ - public LoadMultipleEpochSelectState() { - } - - @Override - protected String getUIProvider() { - return "sinfo.collision.load_epoch_select"; - } - - @Override - protected void appendItems(final Artifact artifact, final ElementCreator creator, final String name, final CallContext context, final Element select) { - final String datakey = "epochs"; - // TODO: MAKE DATASOURCE - try { - if (datakey.equals(name)) { - - final AddTableDataHelper helper = new AddTableDataHelper(creator, select, "year", context.getMeta()); - - helper.addColumn(0, "pinfrom", "40", "common.client.ui.from", "ICON", "CENTER", "from"); - helper.addColumn(1, "pinto", "40", "common.client.ui.to", "ICON", "CENTER", "to"); - helper.addColumn(2, "year", "60", "year", "INTEGER", "LEFT", null); - - // final CollisionAccess access = new CollisionAccess((SINFOArtifact) artifact); // Der River wurde im vorigen State - // bereits gesetzt - - // final List collisions = CollisionHibernateFactory.getCollisionsByRiver(access.getRiver()); - // for (final Collision coll : collisions) { // TODO: Filter on Range (?) - // final Integer year = coll.getYear(); - final Map row = new HashMap<>(); - row.put("year", "1995");// year.toString()); // Nullpointer? - helper.addRow(row); - final Map row2 = new HashMap<>(); - row2.put("year", "1996"); - helper.addRow(row2); - final Map row3 = new HashMap<>(); - row3.put("year", "1998"); - helper.addRow(row3); - - // } - helper.submitMapToXml(); - } - } - catch ( - - final IllegalArgumentException iae) { - iae.printStackTrace(); - } - } -} diff -r bfe97ad35df5 -r c3994657c15d artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/LoadMultipleYearSelectState.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/LoadMultipleYearSelectState.java Wed Jul 04 14:00:13 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,88 +0,0 @@ -/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde - * Software engineering by Intevation GmbH - * - * This file is Free Software under the GNU AGPL (>=v3) - * and comes with ABSOLUTELY NO WARRANTY! Check out the - * documentation coming with Dive4Elements River for details. - */ - -package org.dive4elements.river.artifacts.uinfo.salix; - -import java.util.HashMap; -import java.util.Map; - -import org.apache.log4j.Logger; -import org.dive4elements.artifacts.Artifact; -import org.dive4elements.artifacts.CallContext; -import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator; -import org.dive4elements.river.artifacts.sinfo.SINFOArtifact; -import org.dive4elements.river.artifacts.sinfo.collision.CollisionAccess; -import org.dive4elements.river.artifacts.states.AddTableDataHelper; -import org.dive4elements.river.artifacts.states.DefaultState; -import org.dive4elements.river.model.sinfo.Collision; -import org.w3c.dom.Element; - -/** State in which to fetch years for sedminent load calculation. */ -public class LoadMultipleYearSelectState extends DefaultState { - private static final long serialVersionUID = 1L; - /** The log used in this class. */ - private static Logger log = Logger.getLogger(LoadMultipleYearSelectState.class); - - /** - * The default constructor that initializes an empty State object. - */ - public LoadMultipleYearSelectState() { - } - - /** Year Select Widget. */ - @Override - protected String getUIProvider() { - return "sinfo.collision.load_year_select"; - } - - @Override - protected void appendItems(final Artifact artifact, final ElementCreator creator, final String name, final CallContext context, final Element select) { - // TODO: MAKE DATASOURCE - try { - final String dataKeyofState = "years";// siehe sinfo.xml - if (dataKeyofState.equals(name)) { - - final AddTableDataHelper helper = new AddTableDataHelper(creator, select, "year", context.getMeta()); // "year" not to be confused with datakey - - helper.addColumn(0, "pinfrom", "60", "common.client.ui.selection", "ICON", "CENTER", "from"); - helper.addColumn(1, "year", "60", "year", "INTEGER", "LEFT", null); - - final CollisionAccess access = new CollisionAccess((SINFOArtifact) artifact); // Der River wurde im vorigen State bereits gesetzt - - // final List collisions = CollisionHibernateFactory.getCollisionsByRiver(access.getRiver()); - // for (final Collision coll : collisions) { - for (final Integer year : Collision.getYearsOfRiver(access.getRiver())) { - // final Integer year = coll.getYear(); - final Map row = new HashMap<>(); - row.put("year", year.toString()); // Nullpointer? - helper.addRow(row); - } - helper.submitMapToXml(); - } - } - catch (final IllegalArgumentException iae) { - iae.printStackTrace(); - } - } - - @Override - public void validate(final Artifact artifact, final CallContext cc) throws IllegalArgumentException { - // TODO: check verstehen - - final CollisionAccess access = new CollisionAccess((SINFOArtifact) artifact); - - // Second year should be later than first. - - // if (access.getYears() == null || access.getYears().length == 0) - // return true; - // throw new IllegalArgumentException("error_years_wrong"); - - // return true; - } -} -// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : diff -r bfe97ad35df5 -r c3994657c15d artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/LoadSingleEpochSelectState.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/LoadSingleEpochSelectState.java Wed Jul 04 15:26:08 2018 +0200 @@ -0,0 +1,75 @@ +/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde + * Software engineering by Intevation GmbH + * + * This file is Free Software under the GNU AGPL (>=v3) + * and comes with ABSOLUTELY NO WARRANTY! Check out the + * documentation coming with Dive4Elements River for details. + */ + +package org.dive4elements.river.artifacts.uinfo.salix; + +import java.util.HashMap; +import java.util.Map; + +import org.apache.log4j.Logger; +import org.dive4elements.artifacts.Artifact; +import org.dive4elements.artifacts.CallContext; +import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator; +import org.dive4elements.river.artifacts.states.AddTableDataHelper; +import org.dive4elements.river.artifacts.states.DefaultState; +import org.w3c.dom.Element; + +public class LoadSingleEpochSelectState extends DefaultState { + private static final long serialVersionUID = 1L; + /** The log used in this class. */ + private static Logger log = Logger.getLogger(LoadSingleEpochSelectState.class); + + /** + * The default constructor that initializes an empty State object. + */ + public LoadSingleEpochSelectState() { + } + + @Override + protected String getUIProvider() { + return "common.load_single_epoch_select"; + } + + @Override + protected void appendItems(final Artifact artifact, final ElementCreator creator, final String name, final CallContext context, final Element select) { + final String datakey = "singleepoch"; + // TODO: MAKE DATASOURCE + try { + if (datakey.equals(name)) { + + final AddTableDataHelper helper = new AddTableDataHelper(creator, select, "year", context.getMeta()); + + helper.addColumn(0, "pinfrom", "40", "common.client.ui.from", "ICON", "CENTER", "from"); + helper.addColumn(1, "pinto", "40", "common.client.ui.to", "ICON", "CENTER", "to"); + helper.addColumn(2, "year", "60", "year", "INTEGER", "LEFT", null); + helper.addColumn(3, "sounding", "200", "uinfo.salix.soundings", "STRING", "LEFT", null); + // final CollisionAccess access = new CollisionAccess((SINFOArtifact) artifact); // Der River wurde im vorigen State + // bereits gesetzt + + // final List collisions = CollisionHibernateFactory.getCollisionsByRiver(access.getRiver()); + // for (final Collision coll : collisions) { // TODO: Filter on Range (?) + // final Integer year = coll.getYear(); + // for (final Collision coll : collisions) { + for (int i = 0; i < 3; i++) {// : Collision.getYearsOfRiver(access.getRiver())) { + // final Integer year = coll.getYear(); + final Map row = new HashMap<>(); + row.put("year", String.valueOf(1995 + i)); // Nullpointer? + row.put("sounding", "TODO: Peilungen für das Jahr in dieser Zelle auflisten."); + helper.addRow(row); + } + // } + helper.submitMapToXml(); + } + } + catch ( + + final IllegalArgumentException iae) { + iae.printStackTrace(); + } + } +} diff -r bfe97ad35df5 -r c3994657c15d artifacts/src/main/resources/messages.properties --- a/artifacts/src/main/resources/messages.properties Wed Jul 04 14:00:13 2018 +0200 +++ b/artifacts/src/main/resources/messages.properties Wed Jul 04 15:26:08 2018 +0200 @@ -79,6 +79,7 @@ state.uinfo.year_totalepoch = Year/Gesamter Zeitraum state.uinfo.year_epoch = Year/Epoch +state.uinfo.load.year_with_soundings = Year state.uinfo.load.year= Year state.uinfo.load.epoch=Epoch state.uinfo.year=Year @@ -1084,6 +1085,7 @@ mainvalue.w.description = Wasserstand/Wasserspiegel-lage ({0}) mainvalue.duration = \u00dcberflutungsdauer mainvalue.duration.description = \u00dcberflutungsdauer ({0}) +uinfo.salix.soundings= Soundings uinfo.export.salix_line.csv.header.salix_line = Salix-Linie [m] uinfo.export.salix_line.csv.header.delta_mw = (MW-MNW)x(-1) [m] uinfo.export.salix_line.csv.header.scen = Salix-Linie [m] Szenario dMW={0} cm diff -r bfe97ad35df5 -r c3994657c15d artifacts/src/main/resources/messages_de.properties --- a/artifacts/src/main/resources/messages_de.properties Wed Jul 04 14:00:13 2018 +0200 +++ b/artifacts/src/main/resources/messages_de.properties Wed Jul 04 15:26:08 2018 +0200 @@ -79,6 +79,7 @@ state.uinfo.year_totalepoch = Jahr/Gesamter Zeitraum state.uinfo.year_epoch = Jahr/Epoche +state.uinfo.load.year_with_soundings = Jahr state.uinfo.load.year= Jahr state.uinfo.load.epoch=Epoche state.uinfo.year=Einzeljahr @@ -1084,6 +1085,7 @@ mainvalue.w.description = Wasserstand/Wasserspiegel-lage ({0}) mainvalue.duration = \u00dcberflutungsdauer mainvalue.duration.description = \u00dcberflutungsdauer ({0}) +uinfo.salix.soundings= Peilungen uinfo.export.salix_line.csv.header.salix_line = Salix-Linie [m] uinfo.export.salix_line.csv.header.delta_mw = (MW-MNW)x(-1) [m] uinfo.export.salix_line.csv.header.scen = Salix-Linie [m] Szenario dMW={0} cm diff -r bfe97ad35df5 -r c3994657c15d gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractEpochPanel.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractEpochPanel.java Wed Jul 04 14:00:13 2018 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractEpochPanel.java Wed Jul 04 15:26:08 2018 +0200 @@ -11,7 +11,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.TreeSet; import org.dive4elements.river.client.client.ui.FromToTableHelperPanel.IColumnClickHandler; import org.dive4elements.river.client.shared.model.Data; @@ -37,8 +36,8 @@ private static final long serialVersionUID = 1L; protected enum Type { - singleMinMax, multi - // Type singleMinMax: nur eine Epoche kann gesetzt werden; minMax vorbelegt aus Datenquelle + single, multi + // Type single: nur eine Epoche kann gesetzt werden; minMax vorbelegt aus Datenquelle // Type multi: mehrere epochs können eingegeben werden } @@ -60,25 +59,6 @@ protected abstract Canvas createWidget(final DataList data); - private final void postCreate() { - switch (this.type) { - case singleMinMax: - final TreeSet minMax = new TreeSet(this.validInputs); - if (minMax.size() > 1) { - this.start.setValue(minMax.first()); - this.end.setValue(minMax.last()); - } else { - // TODO: THIS STATE IS INVALID; RETURN - es gibt keinen Mechanismus, der das verhindert; müsste - // im State davor passieren) - } - break; - case multi: - break; // do nothing - default: - throw new IllegalStateException(); - } - } - protected final TextItem createStartInputItem(final String title) { this.start = PanelHelper.createItem(title); return this.start; @@ -144,7 +124,6 @@ this.helperContainer.addMember(table); - postCreate(); return layout; } @@ -230,7 +209,7 @@ final List data = new ArrayList(); switch (this.type) { - case singleMinMax: + case single: data.add(buildResult(this.start.getValueAsString(), this.end.getValueAsString())); break; diff -r bfe97ad35df5 -r c3994657c15d gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractSingleItemPanel.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractSingleItemPanel.java Wed Jul 04 14:00:13 2018 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractSingleItemPanel.java Wed Jul 04 15:26:08 2018 +0200 @@ -157,12 +157,7 @@ errors.add(tmp); // continue; } - // goodValues++; - // if (goodValues > 1) { - // filtered += " " + Integer.toString(value); - // } else { - // filtered = Integer.toString(value); - // } + return errors; } diff -r bfe97ad35df5 -r c3994657c15d gwt-client/src/main/java/org/dive4elements/river/client/client/ui/UIProviderFactory.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/UIProviderFactory.java Wed Jul 04 14:00:13 2018 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/UIProviderFactory.java Wed Jul 04 15:26:08 2018 +0200 @@ -30,7 +30,7 @@ import org.dive4elements.river.client.client.ui.sinfo.FlowDepthTwinPanel; import org.dive4elements.river.client.client.ui.sq.SQPeriodPanel; import org.dive4elements.river.client.client.ui.uinfo.LoadSedimentHeightPanel; -import org.dive4elements.river.client.client.ui.uinfo.LoadSingleEpochMinMaxPanel; +import org.dive4elements.river.client.client.ui.uinfo.LoadSingleEpochSelect; import org.dive4elements.river.client.client.ui.uinfo.LoadSingleYearPanel; import org.dive4elements.river.client.client.ui.uinfo.VegetationzonesTableEditPanel; import org.dive4elements.river.client.client.ui.uinfo.VegetationzonesTablePanel; @@ -165,8 +165,8 @@ return new CollisionLoadEpochPanel(); } else if (uiProvider.equals("common.state.load_single_year_select")) { return new LoadSingleYearPanel(); - } else if (uiProvider.equals("uinfo.inundationduration.load_totalepoch_select")) { - return new LoadSingleEpochMinMaxPanel(); + } else if (uiProvider.equals("common.load_single_epoch_select")) { + return new LoadSingleEpochSelect(); } else if (uiProvider.equals("minfo.sedimentload_sqti_select")) { return new SedLoadSQTiPanel(); } else if (uiProvider.equals("uinfo.sedimentheight_select")) { diff -r bfe97ad35df5 -r c3994657c15d gwt-client/src/main/java/org/dive4elements/river/client/client/ui/uinfo/LoadSingleEpochMinMaxPanel.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/uinfo/LoadSingleEpochMinMaxPanel.java Wed Jul 04 14:00:13 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde - * Software engineering by Intevation GmbH - * - * This file is Free Software under the GNU AGPL (>=v3) - * and comes with ABSOLUTELY NO WARRANTY! Check out the - * documentation coming with Dive4Elements River for details. - */ - -package org.dive4elements.river.client.client.ui.uinfo; - -import org.dive4elements.river.client.client.ui.AbstractEpochPanel; -import org.dive4elements.river.client.client.ui.PanelHelper; -import org.dive4elements.river.client.shared.model.DataList; - -import com.smartgwt.client.widgets.Canvas; -import com.smartgwt.client.widgets.Label; -import com.smartgwt.client.widgets.form.DynamicForm; -import com.smartgwt.client.widgets.form.fields.TextItem; -import com.smartgwt.client.widgets.layout.VLayout; - -public class LoadSingleEpochMinMaxPanel extends AbstractEpochPanel { - - private static final long serialVersionUID = 1L; - - public LoadSingleEpochMinMaxPanel() { - super(Type.singleMinMax); - } - - @Override - protected String getDatakey() { - return "totalepoch"; - } - - @Override - protected Canvas createWidget(final DataList data) { - final VLayout root = new VLayout(); - - final Label title = new Label(data.get(0).getDescription()); - title.setHeight("25px"); - - final DynamicForm form = new DynamicForm(); - form.setNumCols(4); - final TextItem start = createStartInputItem(this.MSG.from()); - start.setCanEdit(false); - - final TextItem end = createEndInputItem(this.MSG.to()); - end.setCanEdit(false); - - form.setFields(start, end); - - root.addMember(title); - root.addMember(PanelHelper.getSpacer(10)); - root.addMember(form); - - return root; - } - -} diff -r bfe97ad35df5 -r c3994657c15d gwt-client/src/main/java/org/dive4elements/river/client/client/ui/uinfo/LoadSingleEpochSelect.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/uinfo/LoadSingleEpochSelect.java Wed Jul 04 15:26:08 2018 +0200 @@ -0,0 +1,58 @@ +/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde + * Software engineering by Intevation GmbH + * + * This file is Free Software under the GNU AGPL (>=v3) + * and comes with ABSOLUTELY NO WARRANTY! Check out the + * documentation coming with Dive4Elements River for details. + */ + +package org.dive4elements.river.client.client.ui.uinfo; + +import org.dive4elements.river.client.client.ui.AbstractEpochPanel; +import org.dive4elements.river.client.client.ui.PanelHelper; +import org.dive4elements.river.client.shared.model.DataList; + +import com.smartgwt.client.widgets.Canvas; +import com.smartgwt.client.widgets.Label; +import com.smartgwt.client.widgets.form.DynamicForm; +import com.smartgwt.client.widgets.form.fields.TextItem; +import com.smartgwt.client.widgets.layout.VLayout; + +public class LoadSingleEpochSelect extends AbstractEpochPanel { + + private static final long serialVersionUID = 1L; + + public LoadSingleEpochSelect() { + super(Type.single); + } + + @Override + protected String getDatakey() { + return "singleepoch"; + } + + @Override + protected Canvas createWidget(final DataList data) { + final VLayout root = new VLayout(); + + final Label title = new Label(data.get(0).getDescription()); + title.setHeight("25px"); + + final DynamicForm form = new DynamicForm(); + form.setNumCols(4); + final TextItem start = createStartInputItem(this.MSG.from()); + start.setCanEdit(false); + + final TextItem end = createEndInputItem(this.MSG.to()); + end.setCanEdit(false); + + form.setFields(start, end); + + root.addMember(title); + root.addMember(PanelHelper.getSpacer(10)); + root.addMember(form); + + return root; + } + +}