01: /*
02: * Copyright 2001 Sun Microsystems, Inc. All rights reserved.
03: * PROPRIETARY/CONFIDENTIAL. Use of this product is subject to license terms.
04: */
05: package com.sun.portal.providers.urlscraper;
06:
07: import java.util.HashMap;
08: import java.util.Map;
09: import java.util.Collections;
10:
11: /** This class will filter content based on the
12: 1) ContenType
13: 2) ....
14: */
15: class ContentFilterImpl implements ContentFilter {
16:
17: private static final String defaultFilterClassName = "com.sun.portal.providers.urlscraper.ContentFilterImpl";
18: private static HashMap filterClassNames = new HashMap();
19: static {
20: filterClassNames.put("text/vnd.wap.wml",
21: "com.sun.portal.providers.urlscraper.WMLContentFilter");
22: }
23:
24: private static Map filterClassCache = Collections
25: .synchronizedMap(new HashMap());
26: private static ContentFilter defaultFilterInstance = null;
27:
28: public StringBuffer filter(StringBuffer contentBuf) {
29: return contentBuf;
30: }
31:
32: public static ContentFilter getInstance(String contentType)
33: throws ContentFilterException {
34:
35: ContentFilter filter = (ContentFilter) filterClassCache
36: .get(contentType);
37: if (filter == null) {
38: String filterClassName = (String) filterClassNames
39: .get(contentType);
40: if (filterClassName == null) {
41: if (defaultFilterInstance == null) {
42: defaultFilterInstance = createInstance(defaultFilterClassName);
43: }
44: filter = defaultFilterInstance;
45: } else {
46: filter = createInstance(filterClassName);
47: }
48: addToCache(contentType, filter);
49: }
50: return filter;
51: }
52:
53: private static ContentFilter createInstance(String filterClassName)
54: throws ContentFilterException {
55: ContentFilter filterInst = null;
56: Exception ex = null;
57: try {
58: filterInst = (ContentFilter) Class.forName(filterClassName)
59: .newInstance();
60: } catch (ClassNotFoundException ex1) {
61: ex = ex1;
62: } catch (InstantiationException ex2) {
63: ex = ex2;
64: } catch (IllegalAccessException ex3) {
65: ex = ex3;
66: }
67: if (ex != null) {
68: throw new ContentFilterException(
69: "ContentFilterImpl.getInstance failed ", ex);
70: }
71: return filterInst;
72: }
73:
74: private static void addToCache(String contentType,
75: ContentFilter filter) {
76: synchronized (filterClassCache) {
77: filterClassCache.put(contentType, filter);
78: }
79: }
80:
81: }
|