# HG changeset patch # User Andre Heinecke # Date 1430139038 -7200 # Node ID 36f52c80b7acc0b696f698ff6f3bacebec1ac2ae # Parent e689be2a4dd1c2e888907f1c77c73004fd3a86c5 Deduplicate W / BedHeight Difference selection panel code diff -r e689be2a4dd1 -r 36f52c80b7ac gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacageTwinPanel.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacageTwinPanel.java Mon Apr 27 12:48:41 2015 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacageTwinPanel.java Mon Apr 27 14:50:38 2015 +0200 @@ -113,11 +113,10 @@ /** * Create a recommendation from a string representation of it. - * @TODO describe format of input string * @param from string in format as shown above. * @return recommendation from input string. */ - public Recommendation createRecommendationFromString(String from) { + public Recommendation createRecommendationFromString(String from, String factory) { // TODO Construct "real" filter. String[] parts = unbracket(from).split(";"); Recommendation.Filter filter = new Recommendation.Filter(); @@ -129,7 +128,7 @@ (); facets.add(facet); filter.add("longitudinal_section", facets); - Recommendation r = new Recommendation("waterlevel", parts[0], + Recommendation r = new Recommendation(factory, parts[0], this.artifact.getUuid(), filter); r.setDisplayName(parts[3]); return r; @@ -139,16 +138,16 @@ /** * Add RecomendationPairRecords from input String to the ListGrid. */ - public void populateGridFromString(String from){ + public void populateGridFromString(String from, String factory){ // Split this string. // Create according recommendations and display strings. String[] recs = from.split("#"); if (recs.length % 2 != 0) return; for (int i = 0; i < recs.length; i+=2) { Recommendation minuend = - createRecommendationFromString(recs[i+0]); + createRecommendationFromString(recs[i+0], factory); Recommendation subtrahend = - createRecommendationFromString(recs[i+1]); + createRecommendationFromString(recs[i+1], factory); RecommendationPairRecord pr = new RecommendationPairRecord( minuend, subtrahend); @@ -182,19 +181,22 @@ layout.setMembersMargin(10); this.helperContainer.addMember(helperLayout); - // Find old data, if any, handle "diffids". + populateGrid(dataList, "waterlevel"); + return layout; + } + + protected void populateGrid(DataList dataList, String factory) { Data data = dataList.get(0); this.dataName = data.getLabel(); for (int i = 0; i < dataList.size(); i++) { if (dataList.get(i) != null && dataList.get(i).getItems() != null) { if (dataList.get(i).getItems() != null) { populateGridFromString( - dataList.get(i).getItems()[0].getStringValue()); + dataList.get(i).getItems()[0].getStringValue(), + factory); } } } - - return layout; } @@ -339,7 +341,6 @@ Recommendation secondR = r.getSecond(); adjustRecommendation(secondR); - ar.add(firstR); ar.add(secondR); } @@ -468,14 +469,20 @@ } + protected String createDataString(String artifact, Recommendation recommendation) { + return createDataString(artifact, recommendation, "staticwkms"); + } + /** * Creates part of the String that encodes minuend or subtrahend. * @param artifact Artifacts UUID. * @param recommendation Recommendation to wrap in string. + * @param factory The factory to encode. */ protected String createDataString( String artifact, - Recommendation recommendation) + Recommendation recommendation, + String factory) { Filter filter = recommendation.getFilter(); Facet f = null; @@ -503,7 +510,7 @@ else { return "[" + artifact - + ";staticwkms;0;" + + ";" + factory + ";0;" + recommendation.getDisplayName() + "]"; } } diff -r e689be2a4dd1 -r 36f52c80b7ac gwt-client/src/main/java/org/dive4elements/river/client/client/ui/minfo/BedHeightsDatacagePanel.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/minfo/BedHeightsDatacagePanel.java Mon Apr 27 12:48:41 2015 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/minfo/BedHeightsDatacagePanel.java Mon Apr 27 14:50:38 2015 +0200 @@ -56,7 +56,6 @@ import java.util.Set; // TODO Probably better to branch off AbstractUIProvider. -// TODO Merge with other datacage-widget impls. public class BedHeightsDatacagePanel extends DatacageTwinPanel { @@ -83,32 +82,6 @@ super(user); } - - /** - * Create a recommendation from a string representation of it. - * @TODO describe format of input string - * @param from string in format as shown above. - * @return recommendation from input string. - */ - public Recommendation createRecommendationFromString(String from) { - // TODO Construct "real" filter. - String[] parts = unbracket(from).split(";"); - Recommendation.Filter filter = new Recommendation.Filter(); - Recommendation.Facet facet = new Recommendation.Facet( - parts[1], - parts[2]); - - List facets = new ArrayList - (); - facets.add(facet); - filter.add("longitudinal_section", facets); - Recommendation r = new Recommendation("bedheight", parts[0], - this.artifact.getUuid(), filter); - r.setDisplayName(parts[3]); - return r; - } - - /** * Creates the graphical representation and interaction widgets for the data. * @param dataList the data. @@ -142,177 +115,18 @@ layout.setMembersMargin(10); this.helperContainer.addMember(helperLayout); - this.dataName = "diffids"; + populateGrid(dataList, "bedheight"); return layout; } - - /** - * Add record to list of removed records. - */ - public void trackRemoved(Record r) { - RecommendationPairRecord pr = (RecommendationPairRecord) r; - this.removedPairs.add(pr); + public void adjustRecommendation(Recommendation recommendation) { + recommendation.setFactory("bedheight"); } - - /** - * Validates data, does nothing if invalid, otherwise clones new selected - * waterlevels and add them to collection, forward the artifact. - */ @Override - public void onClick(ClickEvent e) { - GWT.log("DatacageTwinPanel.onClick"); - - List errors = validate(); - if (errors != null && !errors.isEmpty()) { - showErrors(errors); - return; - } - - Config config = Config.getInstance(); - String locale = config.getLocale(); - - ListGridRecord[] records = differencesList.getRecords(); - - List ar = new ArrayList(); - List all = new ArrayList(); - - for (ListGridRecord record : records) { - RecommendationPairRecord r = - (RecommendationPairRecord) record; - // Do not add "old" recommendations. - if (!r.isAlreadyLoaded()) { - // Check whether one of those is a dike or similar. - // TODO differentiate and merge: new clones, new, old. - Recommendation firstR = r.getFirst(); - if(firstR.getIDs() != null) { - GWT.log("First IDs: " + firstR.getIDs() + " factory: " - + firstR.getFactory()); - } - firstR.setFactory("bedheight"); - Recommendation secondR = r.getSecond(); - if(secondR.getIDs() != null) { - GWT.log("Second IDs: " + secondR.getIDs() + " factory: " - + secondR.getFactory()); - } - secondR.setFactory("bedheight"); - - ar.add(firstR); - ar.add(secondR); - } - else { - all.add(r.getFirst()); - all.add(r.getSecond()); - } - } - - final Recommendation[] toClone = ar.toArray(new Recommendation[ar.size()]); - final Recommendation[] toUse = all.toArray(new Recommendation[all.size()]); - - // Find out whether "old" artifacts have to be removed. - List artifactIdsToRemove = new ArrayList(); - for (RecommendationPairRecord rp: this.removedPairs) { - Recommendation first = rp.getFirst(); - Recommendation second = rp.getSecond(); - - for (Recommendation recommendation: toUse) { - if (first != null && first.getIDs().equals(recommendation.getIDs())) { - first = null; - } - if (second != null && second.getIDs().equals(recommendation.getIDs())) { - second = null; - } - - if (first == null && second == null) { - break; - } - } - if (first != null) { - artifactIdsToRemove.add(first.getIDs()); - } - if (second != null) { - artifactIdsToRemove.add(second.getIDs()); - } - } - - // Remove old artifacts, if any. Do this asychronously without much - // feedback. - for(final String uuid: artifactIdsToRemove) { - removeArtifactService.remove(this.collection, - uuid, - locale, - new AsyncCallback() { - public void onFailure(Throwable caught) { - GWT.log("RemoveArtifact (" + uuid + ") failed."); - } - public void onSuccess(Collection collection) { - GWT.log("RemoveArtifact succeeded"); - } - }); - } - - // Clone new ones (and spawn statics), go forward. - loadArtifactService.loadMany( - this.collection, - toClone, - //"staticwkms" and "waterlevel" - null, - locale, - new AsyncCallback() { - public void onFailure(Throwable caught) { - GWT.log("Failure of cloning with factories!"); - } - public void onSuccess(Artifact[] artifacts) { - GWT.log("Successfully cloned " + toClone.length + - " with factories."); - - fireStepForwardEvent(new StepForwardEvent( - getData(toClone, artifacts, toUse))); - } - }); - } - - - /** - * Creates part of the String that encodes minuend or subtrahend. - * @param artifact Artifacts UUID. - * @param recommendation Recommendation to wrap in string. - */ - protected String createDataString( - String artifact, - Recommendation recommendation) - { - Filter filter = recommendation.getFilter(); - Facet f = null; - - if(filter != null) { - Map> outs = filter.getOuts(); - Set>> entries = outs.entrySet(); - - for (Map.Entry> entry: entries) { - List fs = entry.getValue(); - - f = fs.get(0); - if (f != null) { - break; - } - } - - return "[" + artifact + ";" - + f.getName() - + ";" - + f.getIndex() - + ";" - + recommendation.getDisplayName() + "]"; - } - else { - return "[" - + artifact - + ";bedheight;0;" - + recommendation.getDisplayName() + "]"; - } + protected String createDataString(String artifact, Recommendation recommendation) { + return createDataString(artifact, recommendation, "bedheight"); } /**