foo servlet
Change-Id: I27019564dbfffc963a63a0160c8e5b51bf31e23f
Showing
6 changed files
with
118 additions
and
1 deletions
... | @@ -79,6 +79,7 @@ | ... | @@ -79,6 +79,7 @@ |
79 | WEB-INF/classes/onos.js=src/main/webapp/onos.js, | 79 | WEB-INF/classes/onos.js=src/main/webapp/onos.js, |
80 | WEB-INF/classes/nav.html=src/main/webapp/nav.html, | 80 | WEB-INF/classes/nav.html=src/main/webapp/nav.html, |
81 | WEB-INF/classes/app/view=src/main/webapp/app/view, | 81 | WEB-INF/classes/app/view=src/main/webapp/app/view, |
82 | + WEB-INF/classes/raw=src/main/webapp/raw, | ||
82 | {maven-resources} | 83 | {maven-resources} |
83 | </Include-Resource> | 84 | </Include-Resource> |
84 | <Bundle-SymbolicName> | 85 | <Bundle-SymbolicName> |
... | @@ -87,6 +88,7 @@ | ... | @@ -87,6 +88,7 @@ |
87 | <Import-Package> | 88 | <Import-Package> |
88 | org.slf4j, | 89 | org.slf4j, |
89 | org.osgi.framework, | 90 | org.osgi.framework, |
91 | + javax.imageio.*, | ||
90 | javax.ws.rs,javax.ws.rs.core,javax.ws.rs.ext, | 92 | javax.ws.rs,javax.ws.rs.core,javax.ws.rs.ext, |
91 | javax.servlet.*, | 93 | javax.servlet.*, |
92 | com.sun.jersey.api, | 94 | com.sun.jersey.api, | ... | ... |
1 | +/* | ||
2 | + * Copyright 2016 Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.onosproject.ui.impl; | ||
17 | + | ||
18 | +import com.google.common.io.ByteStreams; | ||
19 | +import org.onosproject.rest.AbstractInjectionResource; | ||
20 | +import org.slf4j.Logger; | ||
21 | +import org.slf4j.LoggerFactory; | ||
22 | + | ||
23 | +import javax.imageio.ImageIO; | ||
24 | +import javax.ws.rs.GET; | ||
25 | +import javax.ws.rs.Path; | ||
26 | +import javax.ws.rs.PathParam; | ||
27 | +import javax.ws.rs.Produces; | ||
28 | +import javax.ws.rs.core.Response; | ||
29 | +import java.awt.image.BufferedImage; | ||
30 | +import java.io.ByteArrayInputStream; | ||
31 | +import java.io.ByteArrayOutputStream; | ||
32 | +import java.io.IOException; | ||
33 | +import java.io.InputStream; | ||
34 | +import java.nio.ByteBuffer; | ||
35 | + | ||
36 | +/** | ||
37 | + * Resource for serving up post-processed raw data files. | ||
38 | + */ | ||
39 | +@Path("/") | ||
40 | +public class FooResource extends AbstractInjectionResource { | ||
41 | + | ||
42 | + private static final String ROOT = "/raw/"; | ||
43 | + private static final String PNG = "png"; | ||
44 | + private static final byte UMASK = -16; | ||
45 | + private static final byte LMASK = 15; | ||
46 | + | ||
47 | + private final Logger log = LoggerFactory.getLogger(getClass()); | ||
48 | + | ||
49 | + private static void clean(ByteBuffer bb, byte b1, byte b2) { | ||
50 | + bb.put((byte) ((b1 & UMASK) | (b2 & LMASK))); | ||
51 | + } | ||
52 | + | ||
53 | + private static ByteBuffer decodeBin(byte[] bytes) { | ||
54 | + int size = bytes.length; | ||
55 | + ByteBuffer bb = ByteBuffer.allocate(size / 2); | ||
56 | + for (int i = 0; i < size; i += 2) { | ||
57 | + clean(bb, bytes[i], bytes[i + 1]); | ||
58 | + } | ||
59 | + return bb; | ||
60 | + } | ||
61 | + | ||
62 | + private static void watermark(BufferedImage bi) { | ||
63 | + // to be implemented... | ||
64 | + } | ||
65 | + | ||
66 | + private static byte[] decodeAndMark(byte[] bytes) throws IOException { | ||
67 | + ByteBuffer bb = decodeBin(bytes); | ||
68 | + BufferedImage bi = ImageIO.read(new ByteArrayInputStream(bb.array())); | ||
69 | + watermark(bi); | ||
70 | + ByteArrayOutputStream baos = new ByteArrayOutputStream(); | ||
71 | + ImageIO.write(bi, PNG, baos); | ||
72 | + return baos.toByteArray(); | ||
73 | + } | ||
74 | + | ||
75 | + @Path("{resource}") | ||
76 | + @GET | ||
77 | + @Produces("image/png") | ||
78 | + public Response getBinResource(@PathParam("resource") String resource) | ||
79 | + throws IOException { | ||
80 | + | ||
81 | + String path = ROOT + resource; | ||
82 | + InputStream is = getClass().getClassLoader().getResourceAsStream(path); | ||
83 | + | ||
84 | + if (is == null) { | ||
85 | + log.warn("Didn't find resource {}", path); | ||
86 | + return Response.status(Response.Status.NOT_FOUND).build(); | ||
87 | + } | ||
88 | + | ||
89 | + byte[] bytes = ByteStreams.toByteArray(is); | ||
90 | + log.info("Processing resource {} ({} bytes)", path, bytes.length); | ||
91 | + return Response.ok(decodeAndMark(bytes)).build(); | ||
92 | + } | ||
93 | +} |
... | @@ -145,6 +145,28 @@ | ... | @@ -145,6 +145,28 @@ |
145 | </servlet-mapping> | 145 | </servlet-mapping> |
146 | 146 | ||
147 | <servlet> | 147 | <servlet> |
148 | + <servlet-name>Foo Module</servlet-name> | ||
149 | + <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer | ||
150 | + </servlet-class> | ||
151 | + <init-param> | ||
152 | + <param-name>com.sun.jersey.config.property.resourceConfigClass | ||
153 | + </param-name> | ||
154 | + <param-value>com.sun.jersey.api.core.ClassNamesResourceConfig | ||
155 | + </param-value> | ||
156 | + </init-param> | ||
157 | + <init-param> | ||
158 | + <param-name>com.sun.jersey.config.property.classnames</param-name> | ||
159 | + <param-value>org.onosproject.ui.impl.FooResource</param-value> | ||
160 | + </init-param> | ||
161 | + <load-on-startup>1</load-on-startup> | ||
162 | + </servlet> | ||
163 | + | ||
164 | + <servlet-mapping> | ||
165 | + <servlet-name>Foo Module</servlet-name> | ||
166 | + <url-pattern>/raw/*</url-pattern> | ||
167 | + </servlet-mapping> | ||
168 | + | ||
169 | + <servlet> | ||
148 | <servlet-name>JAX-RS Service</servlet-name> | 170 | <servlet-name>JAX-RS Service</servlet-name> |
149 | <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer | 171 | <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer |
150 | </servlet-class> | 172 | </servlet-class> | ... | ... |
... | @@ -44,7 +44,7 @@ | ... | @@ -44,7 +44,7 @@ |
44 | if (eeggMax.indexOf(eegg) === 0) { | 44 | if (eeggMax.indexOf(eegg) === 0) { |
45 | if (eegg === eeggMax) { | 45 | if (eegg === eeggMax) { |
46 | d3.select('body').append('div').attr('id', 'eegg') | 46 | d3.select('body').append('div').attr('id', 'eegg') |
47 | - .append('img').attr('src', 'data/img/eegg.png'); | 47 | + .append('img').attr('src', 'raw/ewo.foo'); |
48 | $timeout(function () { d3.select('#eegg').remove(); }, 3000); | 48 | $timeout(function () { d3.select('#eegg').remove(); }, 3000); |
49 | eegg = ''; | 49 | eegg = ''; |
50 | } | 50 | } | ... | ... |
615 KB
No preview for this file type
-
Please register or login to post a comment