vayacondios-server 0.2.4 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/vayacondios/client/legacy_switch.rb +2 -1
- data/lib/vayacondios/legacy_switch.rb +2 -1
- data/lib/vayacondios/server/legacy_switch.rb +2 -1
- data/lib/vayacondios/version.rb +1 -1
- data/pom.xml +6 -5
- data/src/main/java/com/infochimps/util/HttpHelper.java +80 -20
- data/src/main/java/com/infochimps/vayacondios/ItemSets.java +1 -1
- data/src/main/java/com/infochimps/vayacondios/StandardVCDLink.java +72 -6
- data/src/main/java/com/infochimps/vayacondios/VCDIntegrationTest.java +7 -0
- metadata +4 -4
@@ -25,8 +25,8 @@ class Vayacondios
|
|
25
25
|
@@legacy_switch = nil
|
26
26
|
|
27
27
|
def self.legacy_switch
|
28
|
-
legacy_mode_on = Settings[:vayacondios][:legacy]
|
29
28
|
if @@legacy_switch.nil?
|
29
|
+
legacy_mode_on = Settings[:vayacondios][:legacy]
|
30
30
|
@@legacy_switch = get_legacy_switch(legacy_mode_on)
|
31
31
|
Log.info("using #{legacy_mode_on ? 'legacy' : 'standard'} mode")
|
32
32
|
end
|
@@ -34,6 +34,7 @@ class Vayacondios
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def self.force_legacy_mode on
|
37
|
+
Log.info("forcing #{on ? 'legacy' : 'standard'} mode")
|
37
38
|
@@legacy_switch = get_legacy_switch on
|
38
39
|
end
|
39
40
|
|
@@ -25,8 +25,8 @@ class Vayacondios
|
|
25
25
|
@@legacy_switch = nil
|
26
26
|
|
27
27
|
def self.legacy_switch
|
28
|
-
legacy_mode_on = Settings[:vayacondios][:legacy]
|
29
28
|
if @@legacy_switch.nil?
|
29
|
+
legacy_mode_on = Settings[:vayacondios][:legacy]
|
30
30
|
@@legacy_switch = get_legacy_switch(legacy_mode_on)
|
31
31
|
Log.info("using #{legacy_mode_on ? 'legacy' : 'standard'} mode")
|
32
32
|
end
|
@@ -34,6 +34,7 @@ class Vayacondios
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def self.force_legacy_mode on
|
37
|
+
Log.info("forcing #{on ? 'legacy' : 'standard'} mode")
|
37
38
|
@@legacy_switch = get_legacy_switch on
|
38
39
|
end
|
39
40
|
|
@@ -25,8 +25,8 @@ class Vayacondios
|
|
25
25
|
@@legacy_switch = nil
|
26
26
|
|
27
27
|
def self.legacy_switch
|
28
|
-
legacy_mode_on = Settings[:vayacondios][:legacy]
|
29
28
|
if @@legacy_switch.nil?
|
29
|
+
legacy_mode_on = Settings[:vayacondios][:legacy]
|
30
30
|
@@legacy_switch = get_legacy_switch(legacy_mode_on)
|
31
31
|
Log.info("using #{legacy_mode_on ? 'legacy' : 'standard'} mode")
|
32
32
|
end
|
@@ -34,6 +34,7 @@ class Vayacondios
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def self.force_legacy_mode on
|
37
|
+
Log.info("forcing #{on ? 'legacy' : 'standard'} mode")
|
37
38
|
@@legacy_switch = get_legacy_switch on
|
38
39
|
end
|
39
40
|
|
data/lib/vayacondios/version.rb
CHANGED
data/pom.xml
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
<groupId>com.infochimps</groupId>
|
5
5
|
<artifactId>vayacondios</artifactId>
|
6
6
|
<packaging>jar</packaging>
|
7
|
-
<version>1.0.
|
7
|
+
<version>1.0.3-SNAPSHOT</version>
|
8
8
|
<name>java-common</name>
|
9
9
|
<url>http://maven.apache.org</url>
|
10
10
|
|
@@ -62,6 +62,8 @@
|
|
62
62
|
<arguments>
|
63
63
|
<argument>-cp</argument>
|
64
64
|
<classpath/>
|
65
|
+
<argument>-Dlog4j.debug</argument>
|
66
|
+
<argument>-Dlog4j.configuration=file://${project.basedir}/config/log4j.properties</argument>
|
65
67
|
<argument>-jar</argument>
|
66
68
|
<argument>target/${project.artifactId}-${project.version}.jar</argument>
|
67
69
|
</arguments>
|
@@ -112,13 +114,12 @@
|
|
112
114
|
<dependency>
|
113
115
|
<groupId>org.slf4j</groupId>
|
114
116
|
<artifactId>slf4j-api</artifactId>
|
115
|
-
<version>1.7.
|
117
|
+
<version>1.7.5</version>
|
116
118
|
</dependency>
|
117
119
|
<dependency>
|
118
120
|
<groupId>org.slf4j</groupId>
|
119
|
-
<artifactId>slf4j-
|
120
|
-
<version>1.7.
|
121
|
-
<scope>test</scope>
|
121
|
+
<artifactId>slf4j-log4j12</artifactId>
|
122
|
+
<version>1.7.5</version>
|
122
123
|
</dependency>
|
123
124
|
<dependency>
|
124
125
|
<groupId>junit</groupId>
|
@@ -24,44 +24,97 @@ public class HttpHelper {
|
|
24
24
|
private static final boolean USE_CHARLES = false;
|
25
25
|
|
26
26
|
// opens or returns a null reader
|
27
|
-
|
28
|
-
|
27
|
+
public static BufferedReader openOrNull(Logger log,
|
28
|
+
String urlString,
|
29
|
+
Charset inputCharset) {
|
30
|
+
return openOrNull(log, urlString, inputCharset, 0);
|
31
|
+
}
|
32
|
+
|
33
|
+
// opens or returns a null reader
|
34
|
+
public static BufferedReader openOrNull(Logger log,
|
35
|
+
String urlString,
|
36
|
+
Charset inputCharset,
|
37
|
+
int timeout) {
|
38
|
+
try { return open(log, urlString, inputCharset, timeout); }
|
29
39
|
catch (IOException e) {
|
30
40
|
log.warn("Got an exception trying to open {}: {}", urlString, e);
|
31
41
|
return null;
|
32
42
|
}
|
33
43
|
}
|
34
44
|
|
45
|
+
//----------------------------------------------------------------------------
|
46
|
+
|
35
47
|
public static BufferedReader open(Logger log,
|
36
48
|
String urlString,
|
37
49
|
Charset inputCharset) throws IOException {
|
38
|
-
return
|
50
|
+
return open(log, urlString, inputCharset, 0);
|
39
51
|
}
|
40
52
|
|
41
53
|
public static BufferedReader open(Logger log,
|
42
54
|
String urlString,
|
43
55
|
HashMap<String,String> extraHeaders,
|
44
56
|
Charset inputCharset) throws IOException {
|
45
|
-
return
|
57
|
+
return open(log, urlString, extraHeaders, inputCharset, 0);
|
58
|
+
}
|
59
|
+
|
60
|
+
public static BufferedReader open(Logger log,
|
61
|
+
String urlString,
|
62
|
+
Charset inputCharset,
|
63
|
+
int timeout) throws IOException {
|
64
|
+
HttpURLConnection con = getConnection(urlString, log, timeout);
|
65
|
+
return getReader(con, log, inputCharset);
|
66
|
+
}
|
46
67
|
|
68
|
+
public static BufferedReader open(Logger log,
|
69
|
+
String urlString,
|
70
|
+
HashMap<String,String> extraHeaders,
|
71
|
+
Charset inputCharset,
|
72
|
+
int timeout) throws IOException {
|
73
|
+
|
74
|
+
HttpURLConnection con = getConnection(urlString, log, timeout);
|
75
|
+
for (Entry<String,String> header : extraHeaders.entrySet())
|
76
|
+
con.setRequestProperty(header.getKey(), header.getValue());
|
77
|
+
return getReader(con, log, inputCharset);
|
47
78
|
}
|
48
79
|
|
80
|
+
//----------------------------------------------------------------------------
|
81
|
+
|
49
82
|
public static InputStream openStream(Logger log,
|
50
83
|
String urlString) throws IOException {
|
51
|
-
|
84
|
+
return openStream(log, urlString, 0);
|
85
|
+
}
|
86
|
+
|
87
|
+
public static InputStream openStream(Logger log,
|
88
|
+
String urlString,
|
89
|
+
HashMap<String,String> extraHeaders)
|
90
|
+
throws IOException {
|
91
|
+
return openStream(log, urlString, extraHeaders, 0);
|
92
|
+
}
|
93
|
+
|
94
|
+
public static InputStream openStream(Logger log,
|
95
|
+
String urlString,
|
96
|
+
int timeout) throws IOException {
|
97
|
+
HttpURLConnection con = getConnection(urlString, log, timeout);
|
52
98
|
return getStream(con, log);
|
53
99
|
}
|
54
100
|
|
55
101
|
public static InputStream openStream(Logger log,
|
56
102
|
String urlString,
|
57
|
-
HashMap<String,String> extraHeaders
|
58
|
-
|
103
|
+
HashMap<String,String> extraHeaders,
|
104
|
+
int timeout) throws IOException {
|
105
|
+
|
106
|
+
HttpURLConnection con = getConnection(urlString, log, timeout);
|
59
107
|
for (Entry<String,String> header : extraHeaders.entrySet())
|
60
108
|
con.setRequestProperty(header.getKey(), header.getValue());
|
61
109
|
return getStream(con, log);
|
62
110
|
}
|
63
111
|
|
64
|
-
|
112
|
+
//----------------------------------------------------------------------------
|
113
|
+
|
114
|
+
private static HttpURLConnection getConnection(String urlString,
|
115
|
+
Logger log,
|
116
|
+
int timeout)
|
117
|
+
throws IOException {
|
65
118
|
URL url = null;
|
66
119
|
try { url = new URL(urlString); }
|
67
120
|
catch (MalformedURLException e) {
|
@@ -79,13 +132,27 @@ public class HttpHelper {
|
|
79
132
|
con.setRequestProperty("Authorization", "Basic " + new String(BASE64.encodeBase64(userInfo.getBytes())));
|
80
133
|
}
|
81
134
|
con.setRequestProperty("Accept-Encoding", "gzip,deflate");
|
135
|
+
if (timeout != 0) con.setReadTimeout(timeout);
|
82
136
|
return con;
|
83
137
|
}
|
84
138
|
|
139
|
+
private static BufferedReader getReader(HttpURLConnection con,
|
140
|
+
Logger log,
|
141
|
+
Charset inputCharset) throws IOException {
|
142
|
+
BufferedReader reader =
|
143
|
+
new BufferedReader(
|
144
|
+
new InputStreamReader(getStream(con, log), inputCharset));
|
145
|
+
|
146
|
+
log.info("successfully opened connection to {} with character encoding {}",
|
147
|
+
con.getURL().toString(),
|
148
|
+
inputCharset);
|
149
|
+
|
150
|
+
return reader;
|
151
|
+
}
|
152
|
+
|
85
153
|
private static InputStream getStream(HttpURLConnection con,
|
86
154
|
Logger log) throws IOException {
|
87
|
-
InputStream in
|
88
|
-
|
155
|
+
InputStream in;
|
89
156
|
try { in = con.getInputStream(); }
|
90
157
|
catch (IOException e) {
|
91
158
|
// Some HTTP responses will raise an exception, but the
|
@@ -96,7 +163,7 @@ public class HttpHelper {
|
|
96
163
|
InputStream errorStream = con.getErrorStream();
|
97
164
|
if (errorStream != null) {
|
98
165
|
BufferedReader r = new BufferedReader(new InputStreamReader(errorStream));
|
99
|
-
try { for (String line; (line = r.readLine()) != null; log.
|
166
|
+
try { for (String line; (line = r.readLine()) != null; log.error(line)); }
|
100
167
|
catch (IOException nested_exc) {
|
101
168
|
log.error("Got an exception in the exception handler: {}", nested_exc);
|
102
169
|
throw e;
|
@@ -105,17 +172,10 @@ public class HttpHelper {
|
|
105
172
|
throw e;
|
106
173
|
}
|
107
174
|
|
108
|
-
log.debug("successfully opened connection to " + con.getURL().toString());
|
109
175
|
String encoding = con.getContentEncoding();
|
110
176
|
log.debug("Got HTTP stream with content encoding type '" + encoding + "'");
|
111
177
|
|
112
|
-
return (encoding != null && encoding.equals("gzip")) ?
|
113
|
-
|
114
|
-
|
115
|
-
private static BufferedReader getReader(InputStream in, Charset inputCharset) {
|
116
|
-
InputStreamReader istream_reader = new InputStreamReader(in, inputCharset);
|
117
|
-
BufferedReader reader = new BufferedReader(istream_reader);
|
118
|
-
|
119
|
-
return reader;
|
178
|
+
return (encoding != null && encoding.equals("gzip")) ?
|
179
|
+
new GZIPInputStream(in) : in;
|
120
180
|
}
|
121
181
|
}
|
@@ -301,7 +301,7 @@ public class ItemSets<LinkType extends LinkToVCD> extends Organization {
|
|
301
301
|
* A Vayacondios item can be a boolean, a number, or a string.
|
302
302
|
*/
|
303
303
|
public static class Item {
|
304
|
-
static class Serializer implements JsonSerializer {
|
304
|
+
public static class Serializer implements JsonSerializer {
|
305
305
|
public JsonElement serialize(Object item,
|
306
306
|
Type typeOfId,
|
307
307
|
JsonSerializationContext context) {
|
@@ -1,7 +1,7 @@
|
|
1
1
|
package com.infochimps.vayacondios;
|
2
|
-
|
3
2
|
import com.google.gson.Gson;
|
4
3
|
import com.google.gson.GsonBuilder;
|
4
|
+
import com.google.gson.JsonArray;
|
5
5
|
import com.google.gson.JsonElement;
|
6
6
|
import com.google.gson.JsonIOException;
|
7
7
|
import com.google.gson.JsonObject;
|
@@ -23,6 +23,7 @@ import java.nio.charset.Charset;
|
|
23
23
|
import java.util.ArrayList;
|
24
24
|
import java.util.HashMap;
|
25
25
|
import java.util.List;
|
26
|
+
import java.util.Map;
|
26
27
|
|
27
28
|
import java.net.URL;
|
28
29
|
|
@@ -50,8 +51,7 @@ public class StandardVCDLink extends LinkToVCD {
|
|
50
51
|
|
51
52
|
// assume Vayacondios response comes in a single line
|
52
53
|
if (line != null &&
|
53
|
-
(
|
54
|
-
(itemSet = (response.getAsJsonObject().get("contents"))).isJsonArray()) {
|
54
|
+
(itemSet = VCD_HANDLER.extractContents(PARSER.parse(line))) != null) {
|
55
55
|
for (JsonElement elem : itemSet.getAsJsonArray()) {
|
56
56
|
if (!elem.isJsonPrimitive()) {
|
57
57
|
LOG.warn("ignoring non-primitive in itemset: " + elem);
|
@@ -81,9 +81,7 @@ public class StandardVCDLink extends LinkToVCD {
|
|
81
81
|
List<Item> items) throws IOException {
|
82
82
|
|
83
83
|
// serialize the items
|
84
|
-
|
85
|
-
content.put("contents", items);
|
86
|
-
String body = GSON.toJson(content);
|
84
|
+
String body = VCD_HANDLER.wrapContents(items);
|
87
85
|
// connect to our standard path
|
88
86
|
URL url = new URL(getParent().urlString(PATH_COMPONENT, topic, id));
|
89
87
|
HttpURLConnection connection = (HttpURLConnection)
|
@@ -137,6 +135,17 @@ public class StandardVCDLink extends LinkToVCD {
|
|
137
135
|
connection.disconnect();
|
138
136
|
}
|
139
137
|
|
138
|
+
//----------------------------------------------------------------------------
|
139
|
+
|
140
|
+
public static void forceLegacy(boolean vcdLegacy) {
|
141
|
+
LOG.info("forcing vayacondios {} mode", vcdLegacy ? "legacy" : "standard");
|
142
|
+
|
143
|
+
VCD_HANDLER = vcdLegacy ?
|
144
|
+
new LegacyContentsHandler() : new StandardContentsHandler();
|
145
|
+
}
|
146
|
+
|
147
|
+
//----------------------------------------------------------------------------
|
148
|
+
|
140
149
|
private BufferedReader openUrl(String urlString) throws IOException {
|
141
150
|
HashMap headers = new HashMap();
|
142
151
|
headers.put("Accept", "*/*");
|
@@ -149,4 +158,61 @@ public class StandardVCDLink extends LinkToVCD {
|
|
149
158
|
private static final JsonParser PARSER = new JsonParser();
|
150
159
|
private static final Logger LOG = getLogger();
|
151
160
|
private static final String PATH_COMPONENT = "itemset";
|
161
|
+
|
162
|
+
private static LegacySwitch VCD_HANDLER = new StandardContentsHandler();
|
163
|
+
|
164
|
+
//----------------------------------------------------------------------------
|
165
|
+
|
166
|
+
private static interface LegacySwitch {
|
167
|
+
String wrapContents(List<Item> items);
|
168
|
+
JsonArray extractContents(JsonElement response);
|
169
|
+
}
|
170
|
+
|
171
|
+
private static class LegacyContentsHandler implements LegacySwitch {
|
172
|
+
@Override
|
173
|
+
public String wrapContents(List<Item> items) {
|
174
|
+
String json = GSON.toJson(items);
|
175
|
+
LOG.trace("results of wrapping with legacy handler: {}", json);
|
176
|
+
return json;
|
177
|
+
}
|
178
|
+
@Override
|
179
|
+
public JsonArray extractContents(JsonElement response) {
|
180
|
+
if (response.isJsonArray()) {
|
181
|
+
return response.getAsJsonArray();
|
182
|
+
} else { return null; }
|
183
|
+
}
|
184
|
+
}
|
185
|
+
|
186
|
+
private static class StandardContentsHandler implements LegacySwitch {
|
187
|
+
@Override
|
188
|
+
public String wrapContents(final List<Item> items) {
|
189
|
+
// not at all sure why GSON is returning null given a
|
190
|
+
// Map<String,List<Item>> all of the sudden, but it seems to
|
191
|
+
// work on a Map<String,List<String>>, so here we go.
|
192
|
+
Map<String,List<String>> contents =
|
193
|
+
new HashMap<String,List<String>>();
|
194
|
+
List<String> strItems = new ArrayList<String>();
|
195
|
+
for (Item item : items) {
|
196
|
+
strItems.add(item.getObject().toString());
|
197
|
+
}
|
198
|
+
contents.put("contents", strItems);
|
199
|
+
LOG.trace("contents: {}", contents);
|
200
|
+
String json = GSON.toJson(contents);
|
201
|
+
LOG.trace("results of wrapping with standard handler: {}", json);
|
202
|
+
return json;
|
203
|
+
}
|
204
|
+
@Override
|
205
|
+
public JsonArray extractContents(JsonElement response) {
|
206
|
+
JsonElement itemSet;
|
207
|
+
|
208
|
+
if (response.isJsonObject()) {
|
209
|
+
if ((itemSet = response.getAsJsonObject().get("contents"))
|
210
|
+
.isJsonArray()) {
|
211
|
+
return itemSet.getAsJsonArray();
|
212
|
+
}
|
213
|
+
}
|
214
|
+
|
215
|
+
return null;
|
216
|
+
}
|
217
|
+
}
|
152
218
|
}
|
@@ -1,6 +1,7 @@
|
|
1
1
|
package com.infochimps.vayacondios;
|
2
2
|
|
3
3
|
import com.infochimps.vayacondios.VayacondiosClient;
|
4
|
+
import com.infochimps.vayacondios.StandardVCDLink;
|
4
5
|
|
5
6
|
import static com.infochimps.util.CurrentClass.getLogger;
|
6
7
|
|
@@ -20,6 +21,10 @@ public class VCDIntegrationTest {
|
|
20
21
|
private static final int VCD_PORT = 8000;
|
21
22
|
private static final Logger LOG = getLogger();
|
22
23
|
|
24
|
+
public static void setUp() {
|
25
|
+
StandardVCDLink.forceLegacy(false);
|
26
|
+
}
|
27
|
+
|
23
28
|
private static ItemSets itemSets() {
|
24
29
|
return new VayacondiosClient("localhost", VCD_PORT).
|
25
30
|
organization("org").
|
@@ -79,6 +84,8 @@ public class VCDIntegrationTest {
|
|
79
84
|
"this will fail. ***");
|
80
85
|
System.out.println("Running Vayacondios integration test...");
|
81
86
|
|
87
|
+
setUp();
|
88
|
+
|
82
89
|
try {
|
83
90
|
create("foo", "baz", "bar", "bing");
|
84
91
|
assertEquals("foo", "baz", "bar", "bing");
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vayacondios-server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2013-06-
|
15
|
+
date: 2013-06-06 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: configliere
|
@@ -279,7 +279,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
279
279
|
version: '0'
|
280
280
|
segments:
|
281
281
|
- 0
|
282
|
-
hash:
|
282
|
+
hash: 530761123720877382
|
283
283
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
284
284
|
none: false
|
285
285
|
requirements:
|
@@ -288,7 +288,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
288
288
|
version: '0'
|
289
289
|
segments:
|
290
290
|
- 0
|
291
|
-
hash:
|
291
|
+
hash: 530761123720877382
|
292
292
|
requirements: []
|
293
293
|
rubyforge_project:
|
294
294
|
rubygems_version: 1.8.25
|