annotate gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractPairRecommendationPanel.java @ 8852:8f6d6d26e96f

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

http://dive4elements.wald.intevation.org