annotate gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractPairRecommendationPanel.java @ 9580:839b2aa84dd0

minuend/subtrahend-UI-switch
author gernotbelger
date Tue, 08 Jan 2019 17:01:09 +0100
parents 84397da33d17
children
rev   line source
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
2 * Software engineering by Intevation GmbH
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
3 *
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
6 * documentation coming with Dive4Elements River for details.
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
7 */
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
8
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
9 package org.dive4elements.river.client.client.ui;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
10
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
11 import java.util.ArrayList;
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
12 import java.util.List;
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
13 import java.util.Map;
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
14 import java.util.Set;
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
15
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
16 import org.dive4elements.river.client.client.Config;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
17 import org.dive4elements.river.client.client.FLYSConstants;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
18 import org.dive4elements.river.client.client.event.StepForwardEvent;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
19 import org.dive4elements.river.client.client.services.LoadArtifactServiceAsync;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
20 import org.dive4elements.river.client.client.services.RemoveArtifactServiceAsync;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
21 import org.dive4elements.river.client.shared.model.Artifact;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
22 import org.dive4elements.river.client.shared.model.Collection;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
23 import org.dive4elements.river.client.shared.model.Data;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
24 import org.dive4elements.river.client.shared.model.DataItem;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
25 import org.dive4elements.river.client.shared.model.DataList;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
26 import org.dive4elements.river.client.shared.model.DefaultData;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
27 import org.dive4elements.river.client.shared.model.DefaultDataItem;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
28 import org.dive4elements.river.client.shared.model.Recommendation;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
29 import org.dive4elements.river.client.shared.model.Recommendation.Facet;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
30 import org.dive4elements.river.client.shared.model.Recommendation.Filter;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
31 import org.dive4elements.river.client.shared.model.User;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
32
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
33 import com.google.gwt.core.client.GWT;
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
34 import com.google.gwt.user.client.rpc.AsyncCallback;
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
35 import com.smartgwt.client.data.Record;
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
36 import com.smartgwt.client.types.ListGridFieldType;
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
37 import com.smartgwt.client.widgets.Canvas;
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
38 import com.smartgwt.client.widgets.events.ClickEvent;
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
39 import com.smartgwt.client.widgets.grid.ListGrid;
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
40 import com.smartgwt.client.widgets.grid.ListGridField;
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
41 import com.smartgwt.client.widgets.grid.ListGridRecord;
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
42 import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
43 import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
44 import com.smartgwt.client.widgets.layout.VLayout;
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
45
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
46 // TODO Probably better to branch off AbstractUIProvider.
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
47 // TODO Merge with other datacage-widget impls.
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
48 /**
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
49 * Panel containing a Grid and a "next" button. The Grid is fed by a
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
50 * DatacagePairWidget which is put in the input-helper area.
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
51 */
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
52 public abstract class AbstractPairRecommendationPanel extends TextProvider {
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
53
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
54 /**
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
55 * Allows for abstraction on how to handle/serialize the recommendation and the used factories.
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
56 * Basically this allows to tweak the factory that is delivered from the datacage to be replaced by a specific one...
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
57 *
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
58 * @author Gernot Belger
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
59 */
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
60 public static interface IRecommendationInfo {
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
61
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
62 String getFactory(String originalFactory);
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
63
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
64 /**
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
65 * Separate factory for the 'createDataString' method, because in the case of waterlevels. See HOTFIX/FIXME there.
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
66 *
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
67 * @param recommendation
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
68 */
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
69 String getDataStringFactory(Recommendation recommendation);
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
70
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
71 /**
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
72 * Set factory of recommendation such that the correct artifacts will
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
73 * be cloned for difference calculations.
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
74 */
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
75 void adjustRecommendation(Recommendation recommendation);
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
76 }
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
77
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
78 public static interface IValidator {
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
79 List<String> validate(ListGrid differencesList, FLYSConstants msgProvider);
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
80 }
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
81
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
82 private static final long serialVersionUID = 8906629596491827857L;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
83
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
84 private String dataName;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
85
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
86 private final User user;
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
87
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
88 /** ListGrid that displays user-selected pairs to build differences with. */
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
89 private ListGrid differencesList;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
90
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
91 /**
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
92 * List to track previously selected but now removed pairs. (Needed to
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
93 * be able to identify artifacts that can be removed from the collection.
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
94 */
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
95 private final List<RecommendationPairRecord> removedPairs = new ArrayList<RecommendationPairRecord>();
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
96
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
97 /** Service handle to clone and add artifacts to collection. */
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
98 private final LoadArtifactServiceAsync loadArtifactService = GWT.create(org.dive4elements.river.client.client.services.LoadArtifactService.class);
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
99
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
100 /** Service to remove artifacts from collection. */
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
101 private final RemoveArtifactServiceAsync removeArtifactService = GWT.create(org.dive4elements.river.client.client.services.RemoveArtifactService.class);
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
102
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
103 private final IRecommendationInfo leftInfo;
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
104
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
105 private final IRecommendationInfo rightInfo;
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
106
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
107 private final IValidator validator;
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
108
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
109 protected final boolean minuendSubtrahendUiReversed;
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
110
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
111 /**
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
112 * @param Validates
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
113 * the content of this form when the user clicks 'apply'
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
114 * @param leftInfo
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
115 * Delegate for handling the left part of the recommendation-pair
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
116 * @param rightInfo
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
117 * Delegate for handling the right part of the recommendation-pair
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
118 */
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
119 public AbstractPairRecommendationPanel(final User user, final IValidator validator, final IRecommendationInfo leftInfo, final IRecommendationInfo rightInfo,
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
120 final boolean minuendSubtrahendUiReversed) {
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
121 this.minuendSubtrahendUiReversed = minuendSubtrahendUiReversed;
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
122 this.user = user;
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
123 this.validator = validator;
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
124 this.leftInfo = leftInfo;
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
125 this.rightInfo = rightInfo;
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
126 }
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
127
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
128 // FIXME: better than copy/pasting the MSG field into every sub-class but not really nice yet.
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
129 protected final static FLYSConstants msg() {
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
130 return MSG;
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
131 }
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
132
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
133 /**
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
134 * Remove first occurrence of "[" and "]" (if both do occur).
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
135 *
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
136 * @param value
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
137 * String to be stripped of [] (might be null).
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
138 * @return input string but with [ and ] removed, or input string if no
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
139 * brackets were found.
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
140 * @see StringUtil.unbracket
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
141 */
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
142 // FIXME: check if this is the same as STringUItils#unbracket
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
143 private static final String unbracket(final String value) {
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
144 // null- guard.
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
145 if (value == null)
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
146 return value;
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
147
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
148 final int start = value.indexOf("[");
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
149 final int end = value.indexOf("]");
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
150
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
151 if (start < 0 || end < 0) {
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
152 return value;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
153 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
154
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
155 return value.substring(start + 1, end);
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
156 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
157
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
158 /**
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
159 * Create a recommendation from a string representation of it.
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
160 *
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
161 * @param from
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
162 * string in format as shown above.
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
163 * @param leftInfo2
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
164 * @return recommendation from input string.
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
165 */
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
166 private Recommendation createRecommendationFromString(final String from, final IRecommendationInfo info) {
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
167 // TODO Construct "real" filter.
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
168 final String[] parts = unbracket(from).split(";");
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
169 final Recommendation.Filter filter = new Recommendation.Filter();
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
170 final Recommendation.Facet facet = new Recommendation.Facet(parts[1], parts[2]);
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
171
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
172 final List<Recommendation.Facet> facets = new ArrayList<Recommendation.Facet>();
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
173 facets.add(facet);
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
174 filter.add("longitudinal_section", facets);
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
175
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
176 final String factory = info.getFactory(parts[1]);
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
177
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
178 final Recommendation r = new Recommendation(factory, parts[0], this.artifact.getUuid(), filter);
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
179 r.setDisplayName(parts[3]);
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
180 return r;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
181 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
182
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
183 /**
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
184 * Add RecomendationPairRecords from input String to the ListGrid.
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
185 */
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
186 private void populateGridFromString(final String from) {
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
187 // Split this string.
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
188 // Create according recommendations and display strings.
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
189 final String[] recs = from.split("#");
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
190 if (recs.length % 2 != 0)
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
191 return;
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
192 for (int i = 0; i < recs.length; i += 2) {
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
193 final Recommendation minuend = createRecommendationFromString(recs[i + 0], this.leftInfo);
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
194 final Recommendation subtrahend = createRecommendationFromString(recs[i + 1], this.rightInfo);
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
195
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
196 final RecommendationPairRecord pr = new RecommendationPairRecord(minuend, subtrahend);
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
197 // This Recommendation Pair comes from the data string and was thus
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
198 // already cloned.
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
199 pr.setIsAlreadyLoaded(true);
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
200 this.differencesList.addData(pr);
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
201 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
202 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
203
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
204 /**
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
205 * Creates the graphical representation and interaction widgets for the data.
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
206 *
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
207 * @param dataList
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
208 * the data.
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
209 * @return graphical representation and interaction widgets for data.
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
210 */
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
211 @Override
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
212 public final Canvas create(final DataList dataList) {
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
213
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
214 final Canvas widget = createWidget();
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
215
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
216 final Canvas canvas = createChooserWidgets(widget, dataList, this.user, this.differencesList);
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
217
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
218 populateGrid(dataList);
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
219
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
220 return canvas;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
221 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
222
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
223 /**
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
224 * Creates the individual parts of the input-helper area ('Eingabeunterstützung') for choosing the content of this
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
225 * widget.
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
226 */
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
227 protected abstract Canvas createChooserWidgets(final Canvas widget, final DataList dataList, final User auser, final ListGrid diffList);
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
228
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
229 private void populateGrid(final DataList dataList) {
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
230 final Data data = dataList.get(0);
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
231 this.dataName = data.getLabel();
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
232 for (int i = 0; i < dataList.size(); i++) {
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
233 if (dataList.get(i) != null && dataList.get(i).getItems() != null) {
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
234 if (dataList.get(i).getItems() != null) {
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
235 populateGridFromString(dataList.get(i).getItems()[0].getStringValue());
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
236 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
237 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
238 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
239 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
240
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
241 @Override
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
242 public final List<String> validate() {
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
243 return this.validator.validate(this.differencesList, msg());
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
244 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
245
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
246 /**
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
247 * Creates layout with grid that displays selection inside.
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
248 */
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
249 protected final Canvas createWidget() {
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
250 final VLayout layout = new VLayout();
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
251 this.differencesList = new ListGrid();
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
252
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
253 this.differencesList.setCanEdit(false);
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
254 this.differencesList.setCanSort(false);
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
255 this.differencesList.setShowHeaderContextMenu(false);
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
256 this.differencesList.setHeight(150);
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
257 this.differencesList.setShowAllRecords(true);
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
258
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
259 final ListGridField nameField = new ListGridField(this.minuendSubtrahendUiReversed ? "second" : "first", "Minuend");
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
260 final ListGridField capitalField = new ListGridField(this.minuendSubtrahendUiReversed ? "first" : "second", "Subtrahend");
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
261 // Track removed rows, therefore more or less reimplement
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
262 // setCanRecomeRecords.
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
263 final ListGridField removeField = new ListGridField("_removeRecord", "Remove Record") {
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
264 {
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
265 setType(ListGridFieldType.ICON);
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
266 setIcon(GWT.getHostPageBaseURL() + msg().removeFeature());
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
267 setCanEdit(false);
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
268 setCanFilter(false);
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
269 setCanSort(false);
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
270 setCanGroupBy(false);
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
271 setCanFreeze(false);
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
272 setWidth(25);
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
273 }
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
274 };
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
275 this.differencesList.setFields(new ListGridField[] { nameField, capitalField, removeField });
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
276
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
277 this.differencesList.addRecordClickHandler(new RecordClickHandler() {
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
278 @Override
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
279 public void onRecordClick(final RecordClickEvent event) {
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
280 // Just handle remove-clicks
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
281 if (!event.getField().getName().equals(removeField.getName())) {
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
282 return;
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
283 }
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
284 trackRemoved(event.getRecord());
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
285 event.getViewer().removeData(event.getRecord());
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
286 }
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
287 });
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
288 layout.addMember(this.differencesList);
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
289
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
290 return layout;
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
291 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
292
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
293 /**
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
294 * Add record to list of removed records.
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
295 */
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
296 protected final void trackRemoved(final Record r) {
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
297 final RecommendationPairRecord pr = (RecommendationPairRecord) r;
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
298 this.removedPairs.add(pr);
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
299 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
300
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
301 /**
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
302 * Validates data, does nothing if invalid, otherwise clones new selected
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
303 * waterlevels and add them to collection, forward the artifact.
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
304 */
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
305 @Override
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
306 public void onClick(final ClickEvent e) {
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
307 GWT.log("AbstractPairRecommendationPanel.onClick");
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
308
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
309 final List<String> errors = validate();
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
310 if (errors != null && !errors.isEmpty()) {
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
311 showErrors(errors);
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
312 return;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
313 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
314
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
315 final Config config = Config.getInstance();
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
316 final String locale = config.getLocale();
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
317
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
318 final ListGridRecord[] records = this.differencesList.getRecords();
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
319
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
320 final List<Recommendation> ar = new ArrayList<Recommendation>();
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
321 final List<Recommendation> all = new ArrayList<Recommendation>();
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
322
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
323 for (final ListGridRecord record : records) {
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
324 final RecommendationPairRecord r = (RecommendationPairRecord) record;
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
325 // Do not add "old" recommendations.
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
326 if (!r.isAlreadyLoaded()) {
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
327 // Check whether one of those is a dike or similar.
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
328 // TODO differentiate and merge: new clones, new, old.
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
329 final Recommendation firstR = r.getFirst();
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
330 this.leftInfo.adjustRecommendation(firstR);
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
331 final Recommendation secondR = r.getSecond();
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
332 this.rightInfo.adjustRecommendation(secondR);
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
333
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
334 ar.add(firstR);
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
335 ar.add(secondR);
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
336 } else {
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
337 all.add(r.getFirst());
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
338 all.add(r.getSecond());
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
339 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
340 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
341
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
342 final Recommendation[] toClone = ar.toArray(new Recommendation[ar.size()]);
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
343 final Recommendation[] toUse = all.toArray(new Recommendation[all.size()]);
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
344
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
345 // Find out whether "old" artifacts have to be removed.
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
346 final List<String> artifactIdsToRemove = new ArrayList<String>();
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
347 for (final RecommendationPairRecord rp : this.removedPairs) {
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
348 Recommendation first = rp.getFirst();
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
349 Recommendation second = rp.getSecond();
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
350
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
351 for (final Recommendation recommendation : toUse) {
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
352 if (first != null && first.getIDs().equals(recommendation.getIDs())) {
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
353 first = null;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
354 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
355 if (second != null && second.getIDs().equals(recommendation.getIDs())) {
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
356 second = null;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
357 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
358
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
359 if (first == null && second == null) {
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
360 break;
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
361 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
362 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
363 if (first != null) {
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
364 artifactIdsToRemove.add(first.getIDs());
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
365 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
366 if (second != null) {
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
367 artifactIdsToRemove.add(second.getIDs());
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
368 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
369 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
370
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
371 // Remove old artifacts, if any. Do this asychronously without much
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
372 // feedback.
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
373 for (final String uuid : artifactIdsToRemove) {
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
374 this.removeArtifactService.remove(this.collection, uuid, locale, new AsyncCallback<Collection>() {
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
375 @Override
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
376 public void onFailure(final Throwable caught) {
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
377 GWT.log("RemoveArtifact (" + uuid + ") failed.");
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
378 }
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
379
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
380 @Override
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
381 public void onSuccess(final Collection coll) {
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
382 GWT.log("RemoveArtifact succeeded");
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
383 }
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
384 });
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
385 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
386
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
387 // Clone new ones (and spawn statics), go forward.
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
388 this.parameterList.lockUI();
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
389 this.loadArtifactService.loadMany(this.collection, toClone,
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
390 // "staticwkms" and "waterlevel"
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
391 null, locale, new AsyncCallback<Artifact[]>() {
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
392
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
393 @Override
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
394 public void onFailure(final Throwable caught) {
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
395 caught.printStackTrace();
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
396 GWT.log("Failure of cloning with factories!");
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
397 AbstractPairRecommendationPanel.this.parameterList.unlockUI();
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
398 }
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
399
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
400 @Override
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
401 public void onSuccess(final Artifact[] artifacts) {
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
402 GWT.log("Successfully cloned " + toClone.length + " with factories.");
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
403
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
404 fireStepForwardEvent(new StepForwardEvent(getData(toClone, artifacts, toUse)));
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
405 AbstractPairRecommendationPanel.this.parameterList.unlockUI();
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
406 }
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
407
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
408 });
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
409 }
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
410
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
411 /**
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
412 * Create Data and DataItem from selection (a long string with identifiers
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
413 * to construct diff-pairs).
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
414 *
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
415 * @param newRecommendations
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
416 * "new" recommendations (did not survive a
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
417 * backjump).
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
418 * @param newArtifacts
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
419 * artifacts cloned from newRecommendations.
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
420 * @param oldRecommendations
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
421 * old recommendations that survived a backjump.
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
422 *
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
423 * @return dataitem with a long string with identifiers to construct
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
424 * diff-pairs.
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
425 */
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
426 protected final Data[] getData(final Recommendation[] newRecommendations, final Artifact[] newArtifacts, final Recommendation[] oldRecommendations) {
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
427 // Construct string with info about selections.
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
428 String dataItemString = "";
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
429 for (int i = 0; i < newRecommendations.length; i++) {
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
430 final Recommendation r = newRecommendations[i];
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
431 final Artifact newArtifact = newArtifacts[i];
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
432 final String uuid = newArtifact.getUuid();
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
433 r.setMasterArtifact(uuid);
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
434
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
435 if (i > 0)
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
436 dataItemString += "#";
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
437
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
438 // REMARK: ugly, but we know that the recommandations comes in left/right pairs.
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
439 final IRecommendationInfo info = i % 2 == 0 ? this.leftInfo : this.rightInfo;
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
440
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
441 dataItemString += createDataString(uuid, r, info);
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
442 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
443
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
444 for (int i = 0; i < oldRecommendations.length; i++) {
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
445 final Recommendation r = oldRecommendations[i];
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
446 final String uuid = r.getIDs();
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
447
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
448 if (dataItemString.length() > 0)
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
449 dataItemString += "#";
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
450
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
451 // REMARK: ugly, but we know that the recommandations comes in left/right pairs.
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
452 final IRecommendationInfo info = i % 2 == 0 ? this.leftInfo : this.rightInfo;
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
453
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
454 dataItemString += createDataString(uuid, r, info);
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
455 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
456
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
457 // TODO some hassle could be resolved by using multiple DataItems
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
458 // (e.g. one per pair).
8875
8d1df8639563 Fixed: strange tweak in w-diferences panel always returned staticwkms factory instead of the original one. In sinfo we need the original one though.
gernotbelger
parents: 8852
diff changeset
459 final DataItem item = new DefaultDataItem(this.dataName, this.dataName, dataItemString);
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
460 return new Data[] { new DefaultData(this.dataName, null, null, new DataItem[] { item }) };
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
461 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
462
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
463 /**
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
464 * Creates part of the String that encodes minuend or subtrahend.
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
465 *
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
466 * @param recommendation
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
467 * Recommendation to wrap in string.
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
468 * @param info
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
469 * Provides the factory to encode.
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
470 */
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
471 protected static final String createDataString(final String artifactUuid, final Recommendation recommendation, final IRecommendationInfo info) {
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
472 final String factory = info.getDataStringFactory(recommendation);
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
473
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
474 final Filter filter = recommendation.getFilter();
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
475 Facet f = null;
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
476
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
477 if (filter != null) {
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
478 final Map<String, List<Facet>> outs = filter.getOuts();
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
479 final Set<Map.Entry<String, List<Facet>>> entries = outs.entrySet();
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
480
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
481 for (final Map.Entry<String, List<Facet>> entry : entries) {
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
482 final List<Facet> fs = entry.getValue();
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
483
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
484 f = fs.get(0);
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
485 if (f != null) {
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
486 break;
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
487 }
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
488 }
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
489
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
490 return "[" + artifactUuid + ";" + f.getName() + ";" + f.getIndex() + ";" + recommendation.getDisplayName() + "]";
9227
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
491 }
84397da33d17 Allow to control specific behaviour in TwinDatacagePanel
gernotbelger
parents: 8875
diff changeset
492
9580
839b2aa84dd0 minuend/subtrahend-UI-switch
gernotbelger
parents: 9227
diff changeset
493 return "[" + artifactUuid + ";" + factory + ";0;" + recommendation.getDisplayName() + "]";
8852
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
494 }
8f6d6d26e96f Refaktored the DatacageTwinPanel so it is reusable.
gernotbelger
parents:
diff changeset
495 }

http://dive4elements.wald.intevation.org