samples/trycatchredo/src/org/apidesign/exceptions/trycatchredo/usage/MemoryURL.java
2 package org.apidesign.exceptions.trycatchredo.usage;
4 import java.io.ByteArrayInputStream;
5 import java.io.ByteArrayOutputStream;
6 import java.io.IOException;
7 import java.io.InputStream;
8 import java.io.OutputStream;
9 import java.net.MalformedURLException;
11 import java.net.URLConnection;
12 import java.net.URLStreamHandler;
13 import java.net.URLStreamHandlerFactory;
14 import java.util.HashMap;
17 /** Support for special "memory://" URLs. Useful when testing network communication.
19 * @author Jaroslav Tulach
21 public final class MemoryURL extends URLStreamHandler {
25 public static void initialize() {
28 class F implements URLStreamHandlerFactory {
29 public URLStreamHandler createURLStreamHandler(String protocol) {
30 if (protocol.startsWith("memory")) {
31 return new MemoryURL();
37 URL.setURLStreamHandlerFactory(f);
40 private static Map<String,InputStream> contents = new HashMap<String,InputStream>();
41 private static Map<String,OutputStream> outputs = new HashMap<String,OutputStream>();
43 public static void registerURL(String u, String content, OutputStream out) throws MalformedURLException {
44 contents.put(u, new ByteArrayInputStream(content.getBytes()));
48 public static String getOutputForURL(String u) {
49 OutputStream out = outputs.get(u);
50 return out.toString();
53 protected URLConnection openConnection(URL u) throws IOException {
57 private static final class MC extends URLConnection {
58 private InputStream values;
59 private OutputStream out;
63 out = outputs.get(u.toExternalForm());
65 out = new ByteArrayOutputStream();
66 outputs.put(u.toExternalForm(), out);
70 public void connect() throws IOException {
74 values = contents.remove(url.toExternalForm());
76 throw new IOException("No such content: " + url);
81 public InputStream getInputStream() throws IOException {
87 public OutputStream getOutputStream() throws IOException {
89 out = new ByteArrayOutputStream();