annotate gwt-client/src/main/java/org/dive4elements/river/client/test/SuperProof.java @ 9028:7f3818ec6eb6

work on proof 2
author gernotbelger
date Thu, 26 Apr 2018 13:12:33 +0200
parents
children
rev   line source
9028
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
2 * Software engineering by
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
5 *
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
9 */
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
10 package org.dive4elements.river.client.test;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
11
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
12 import java.io.File;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
13 import java.io.FileOutputStream;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
14 import java.io.IOException;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
15 import java.io.InputStreamReader;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
16 import java.io.OutputStream;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
17 import java.io.OutputStreamWriter;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
18 import java.util.ArrayList;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
19 import java.util.HashMap;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
20
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
21 import org.dive4elements.artifacts.common.ArtifactNamespaceContext;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
22 import org.dive4elements.artifacts.common.utils.ClientProtocolUtils;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
23 import org.dive4elements.artifacts.httpclient.exceptions.ConnectionException;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
24 import org.dive4elements.artifacts.httpclient.http.HttpClient;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
25 import org.dive4elements.artifacts.httpclient.http.HttpClientImpl;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
26 import org.dive4elements.artifacts.httpclient.http.response.DocumentResponseHandler;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
27 import org.dive4elements.artifacts.httpclient.utils.XMLUtils;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
28 import org.dive4elements.river.client.server.AdvanceServiceImpl;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
29 import org.dive4elements.river.client.server.ArtifactHelper;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
30 import org.dive4elements.river.client.server.CollectionHelper;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
31 import org.dive4elements.river.client.server.CreateCollectionServiceImpl;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
32 import org.dive4elements.river.client.server.FLYSArtifactCreator;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
33 import org.dive4elements.river.client.server.FeedServiceImpl;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
34 import org.dive4elements.river.client.server.LoadArtifactServiceImpl;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
35 import org.dive4elements.river.client.server.auth.DefaultUser;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
36 import org.dive4elements.river.client.server.auth.User;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
37 import org.dive4elements.river.client.server.auth.UserClient;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
38 import org.dive4elements.river.client.shared.exceptions.ServerException;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
39 import org.dive4elements.river.client.shared.model.Artifact;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
40 import org.dive4elements.river.client.shared.model.Collection;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
41 import org.dive4elements.river.client.shared.model.Data;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
42 import org.dive4elements.river.client.shared.model.DefaultCollection;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
43 import org.dive4elements.river.client.shared.model.Recommendation;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
44 import org.w3c.dom.Document;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
45 import org.w3c.dom.Element;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
46
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
47 /**
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
48 * @author Domenico Nardi Tironi
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
49 *
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
50 */
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
51 public abstract class SuperProof {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
52
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
53 private final String serverUrl = "http://localhost:8181";
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
54 private final String locale = "de";
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
55 private final HttpClient client;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
56
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
57 private final String username;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
58 private final String password;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
59 private final String infotype;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
60 private final String userUuid;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
61 private Collection collection;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
62 private Artifact artifact;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
63
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
64 public SuperProof(final String username, final String password, final String infotype) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
65 this.username = username;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
66 this.password = password;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
67 this.infotype = infotype;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
68
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
69 // init
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
70 this.client = new HttpClientImpl(this.serverUrl, this.locale);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
71 this.userUuid = makeUserUuid();
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
72 this.collection = getCollection();
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
73 this.artifact = getArtifact();
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
74 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
75
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
76 private String makeUserUuid() {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
77 final User user = new DefaultUser(this.username, this.password, null, false, new ArrayList<String>(), new ArrayList<String>());
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
78 final UserClient userClient = new UserClient(this.serverUrl);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
79 Element userElement;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
80 try {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
81 userElement = userClient.findUser(user);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
82 return userElement.getAttributeNS(ArtifactNamespaceContext.NAMESPACE_URI, "uuid");
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
83 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
84 catch (final ConnectionException e) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
85 e.printStackTrace();
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
86 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
87 return "";
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
88 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
89
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
90 protected final Artifact getArtifact() {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
91
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
92 /* Init Collection */
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
93 if (this.artifact == null)
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
94 try {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
95
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
96 this.artifact = ArtifactHelper.createArtifact(this.serverUrl, this.locale, this.infotype, null);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
97 setCollection(CollectionHelper.addArtifact(getCollection(), this.artifact, this.serverUrl, this.locale)); // wichtig; sorgt für Persistenz
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
98 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
99 catch (final ServerException e) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
100 // TODO Auto-generated catch block
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
101 e.printStackTrace();
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
102 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
103 return this.artifact;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
104 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
105
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
106 private Collection getCollection() {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
107
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
108 if (this.collection == null) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
109 try {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
110 // lazy-Loading
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
111 final Document create = ClientProtocolUtils.newCreateCollectionDocument(null);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
112 final Document doc = (Document) this.client.createCollection(create, this.userUuid, new DocumentResponseHandler());
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
113 final String uuid = XMLUtils.xpathString(doc, CreateCollectionServiceImpl.XPATH_COLLECTION_UUID, ArtifactNamespaceContext.INSTANCE);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
114 final String ttlStr = XMLUtils.xpathString(doc, CreateCollectionServiceImpl.XPATH_COLLECTION_TTL, ArtifactNamespaceContext.INSTANCE);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
115 this.collection = new DefaultCollection(uuid, Long.valueOf(ttlStr), uuid);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
116 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
117 catch (final ConnectionException e) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
118 // TODO Auto-generated catch block
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
119 e.printStackTrace();
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
120 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
121 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
122 return this.collection;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
123 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
124
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
125 private void setCollection(final Collection collection) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
126 this.collection = collection;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
127 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
128
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
129 private void setArtifact(final Artifact artifact) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
130 this.artifact = artifact;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
131 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
132
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
133 // TODO: MAKE THIS CLASS ABSTRACT AND OVERRIDE runTest in children
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
134 public abstract void runTest();
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
135
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
136 protected final void describeCollection() {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
137 try {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
138 final String uuid = getCollection().identifier();
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
139 final Document describe = ClientProtocolUtils.newDescribeCollectionDocument(uuid);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
140 final Document response = (Document) this.client.doCollectionAction(describe, uuid, new DocumentResponseHandler());
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
141 final Collection c = CollectionHelper.parseCollection(response);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
142 setCollection(c);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
143 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
144 catch (final ConnectionException e) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
145 e.printStackTrace();
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
146 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
147 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
148
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
149 protected final void feedAndGo(final Data[] data, final int reachableStateIndex) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
150 try {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
151 feed(data);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
152 advance(getReachableStateByIndex(getArtifact(), reachableStateIndex)); // reachablestate könnte auch String sein... TODO: feedAndgo(data,string)
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
153 // bauen
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
154 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
155 catch (final ConnectionException e) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
156 e.printStackTrace();
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
157 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
158 catch (final ServerException e) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
159 e.printStackTrace();
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
160 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
161 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
162
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
163 private String getReachableStateByIndex(final Artifact artifact, final int index) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
164
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
165 final String[] states = artifact.getArtifactDescription().getReachableStates();
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
166 if (states != null) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
167 if (states.length > index) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
168 return states[index];
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
169 } else {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
170 return states[0];
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
171 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
172 } else {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
173 return "";
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
174 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
175 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
176
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
177 private void feed(final Data[] data) throws ServerException, ConnectionException {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
178 final Document feed = ClientProtocolUtils.newFeedDocument(getArtifact().getUuid(), getArtifact().getHash(), createKVP(data));
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
179
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
180 final Document description = (Document) this.client.feed(
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
181 new org.dive4elements.artifacts.httpclient.objects.Artifact(getArtifact().getUuid(), getArtifact().getHash()), feed,
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
182 new DocumentResponseHandler());
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
183
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
184 final String result = XMLUtils.xpathString(description, FeedServiceImpl.XPATH_RESULT, ArtifactNamespaceContext.INSTANCE);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
185
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
186 if (result == null || !result.equals(FeedServiceImpl.OPERATION_FAILURE)) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
187 setArtifact((Artifact) new FLYSArtifactCreator().create(description));
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
188 } else if (result != null && result.equals(FeedServiceImpl.OPERATION_FAILURE)) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
189 final String msg = XMLUtils.xpathString(description, FeedServiceImpl.XPATH_RESULT_MSG, ArtifactNamespaceContext.INSTANCE);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
190 throw new ServerException(msg);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
191 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
192
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
193 // throw new ServerException(FeedServiceImpl.ERROR_FEED_DATA);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
194 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
195
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
196 private String[][] createKVP(final Data[] data) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
197 if (data != null) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
198 final String[][] kvp = new String[data.length][];
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
199
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
200 int i = 0;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
201
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
202 for (final Data d : data) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
203 // final DataItem[] items = d.getItems();
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
204 final String key = d.getLabel();
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
205 final String value = d.getStringValue();
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
206
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
207 kvp[i++] = new String[] { key, value };
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
208 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
209
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
210 return kvp;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
211 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
212 return null;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
213 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
214
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
215 private void advance(final String target) throws ConnectionException, ServerException {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
216 final Document advance = ClientProtocolUtils.newAdvanceDocument(getArtifact().getUuid(), getArtifact().getHash(), target);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
217 // final HttpClient client = new HttpClientImpl(url, locale);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
218
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
219 final Document description = (Document) this.client.advance(
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
220 new org.dive4elements.artifacts.httpclient.objects.Artifact(getArtifact().getUuid(), getArtifact().getHash()), advance,
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
221 new DocumentResponseHandler());
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
222
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
223 if (description == null) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
224 throw new ServerException(AdvanceServiceImpl.ERROR_ADVANCE_ARTIFACT);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
225 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
226
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
227 final String result = XMLUtils.xpathString(description, AdvanceServiceImpl.XPATH_RESULT, ArtifactNamespaceContext.INSTANCE);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
228
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
229 if (result == null || !result.equals(AdvanceServiceImpl.OPERATION_FAILURE)) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
230 setArtifact((Artifact) new FLYSArtifactCreator().create(description));
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
231 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
232
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
233 // throw new ServerException(AdvanceServiceImpl.ERROR_ADVANCE_ARTIFACT);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
234 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
235
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
236 protected final Artifact[] loadMany(final Recommendation[] recoms, final String factory) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
237 try {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
238 final ArrayList<Artifact> artifacts = new ArrayList<Artifact>();
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
239 final HashMap<Recommendation, Artifact> cloneMap = new HashMap<Recommendation, Artifact>();
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
240
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
241 for (final Recommendation recom : recoms) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
242
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
243 final Artifact prevClone = cloneMap.get(recom);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
244 if (prevClone != null) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
245
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
246 artifacts.add(prevClone);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
247 } else {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
248 // Not already cloned.
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
249 final String realFactory = factory != null ? factory : recom.getFactory();
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
250
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
251 final Artifact clone = ArtifactHelper.createArtifact(this.serverUrl, this.locale, realFactory, recom);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
252
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
253 if (clone != null) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
254 final Collection c = CollectionHelper.addArtifact(getCollection(), clone, this.serverUrl, this.locale);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
255
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
256 if (c != null) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
257 artifacts.add(clone);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
258 // Remember we cloned a recommendation like this.
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
259 cloneMap.put(recom, clone);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
260 } else {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
261 throw new ServerException(LoadArtifactServiceImpl.ERROR_LOAD_ARTIFACT);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
262 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
263 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
264 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
265 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
266 return artifacts.toArray(new Artifact[artifacts.size()]);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
267 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
268 catch (final ServerException e) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
269 e.printStackTrace();
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
270 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
271 return null;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
272 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
273
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
274 /// ExportServiceImpl
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
275 public void doGet(final String mode) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
276 try {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
277
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
278 final String name = mode;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
279 final String type = "csv";
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
280
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
281 final String fn = name + "." + type; // TODO: make filename unique
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
282 final String enc = "windows-1252";// req.getParameter("encoding");
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
283
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
284 final OutputStream out = new FileOutputStream(new File("D:" + File.separator + fn));
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
285 final Document attr = null;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
286 final Document request = ClientProtocolUtils.newOutCollectionDocument(getCollection().identifier(), mode, type, attr);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
287 // final HttpClient client = new HttpClientImpl(serverUrl, locale);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
288
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
289 if (enc != null) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
290 final InputStreamReader in = new InputStreamReader(this.client.collectionOut(request, getCollection().identifier(), mode), "UTF-8");
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
291 try {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
292 final OutputStreamWriter encOut = new OutputStreamWriter(out, enc);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
293 final char buf[] = new char[4096];
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
294 int c;
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
295 while ((c = in.read(buf, 0, buf.length)) >= 0) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
296 encOut.write(buf, 0, c);
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
297 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
298 encOut.flush();
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
299 encOut.close();
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
300 } finally {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
301 in.close();
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
302 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
303 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
304 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
305 catch (final IOException ioe) {
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
306 ioe.printStackTrace();
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
307 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
308 }
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
309
7f3818ec6eb6 work on proof 2
gernotbelger
parents:
diff changeset
310 }

http://dive4elements.wald.intevation.org