01: /**
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: */package org.apache.openejb.server.httpd;
17:
18: import java.util.HashMap;
19: import java.util.LinkedHashMap;
20: import java.util.Map;
21:
22: /**
23: * @version $Revision: 605765 $ $Date: 2007-12-19 16:53:19 -0800 $
24: */
25: public class HttpListenerRegistry implements HttpListener {
26: private final Map<String, HttpListener> registry = new LinkedHashMap<String, HttpListener>();
27:
28: public HttpListenerRegistry() {
29: }
30:
31: public void onMessage(HttpRequest request, HttpResponse response)
32: throws Exception {
33: Map<String, HttpListener> listeners;
34: synchronized (registry) {
35: listeners = new HashMap<String, HttpListener>(registry);
36: }
37:
38: String path = request.getURI().getPath();
39: for (Map.Entry<String, HttpListener> entry : listeners
40: .entrySet()) {
41: String pattern = entry.getKey();
42: HttpListener listener = entry.getValue();
43: if (path.matches(pattern)) {
44: listener.onMessage(request, response);
45: break;
46: }
47: }
48: }
49:
50: public void addHttpListener(HttpListener listener, String regex) {
51: synchronized (registry) {
52: registry.put(regex, listener);
53: }
54: }
55:
56: public void removeHttpListener(String regex) {
57: synchronized (registry) {
58: registry.remove(regex);
59: }
60: }
61: }
|