01: package org.geotools.data.sql;
02:
03: import java.io.IOException;
04: import java.util.ArrayList;
05: import java.util.Arrays;
06: import java.util.HashMap;
07: import java.util.Iterator;
08: import java.util.List;
09: import java.util.Map;
10: import java.util.NoSuchElementException;
11:
12: import org.geotools.data.jdbc.FeatureTypeHandler;
13: import org.geotools.data.jdbc.FeatureTypeInfo;
14: import org.geotools.data.jdbc.JDBC1DataStore;
15: import org.geotools.data.jdbc.fidmapper.FIDMapper;
16: import org.geotools.data.jdbc.fidmapper.FIDMapperFactory;
17: import org.geotools.feature.AttributeType;
18: import org.geotools.feature.FeatureType;
19:
20: public class BypassSqlFeatureTypeHandler extends FeatureTypeHandler {
21:
22: private Map bypassSqlViews = new HashMap();
23:
24: private Map bypassSqlTypes = new HashMap();
25:
26: public BypassSqlFeatureTypeHandler(JDBC1DataStore store,
27: FIDMapperFactory fmFactory, long cacheTimeOut) {
28: super (store, fmFactory, cacheTimeOut);
29: this .bypassSqlViews = new HashMap();
30: this .bypassSqlTypes = new HashMap();
31: }
32:
33: public void registerView(FeatureType viewType, String sqlQuery,
34: FIDMapper fidMapper) {
35: String typeName = viewType.getTypeName();
36: sqlQuery = sqlQuery.replaceAll("\n|\r", "");
37: sqlQuery = sqlQuery.replaceAll("\t", " ");
38: this .bypassSqlViews.put(typeName, sqlQuery);
39:
40: FeatureTypeInfo info = new FeatureTypeInfo(typeName, viewType,
41: fidMapper);
42:
43: this .bypassSqlTypes.put(typeName, info);
44: }
45:
46: public boolean isView(String typeName) {
47: return this .bypassSqlTypes.containsKey(typeName);
48: }
49:
50: public String getQuery(String typeName) {
51: if (!isView(typeName)) {
52: throw new NoSuchElementException(
53: "There are no SQL query definition for FeatureType "
54: + typeName);
55: }
56: return (String) this .bypassSqlViews.get(typeName);
57: }
58:
59: public String[] getTypeNames() throws IOException {
60: String[] typeNames = super .getTypeNames();
61: List namesList = new ArrayList(Arrays.asList(typeNames));
62: for (Iterator it = this .bypassSqlTypes.keySet().iterator(); it
63: .hasNext();) {
64: namesList.add(it.next());
65: }
66: typeNames = (String[]) namesList.toArray(new String[namesList
67: .size()]);
68: return typeNames;
69: }
70:
71: public FeatureTypeInfo getFeatureTypeInfo(String featureTypeName)
72: throws IOException {
73: if (this .bypassSqlTypes.containsKey(featureTypeName)) {
74: FeatureTypeInfo info = (FeatureTypeInfo) this .bypassSqlTypes
75: .get(featureTypeName);
76: return info;
77: }
78: return super .getFeatureTypeInfo(featureTypeName);
79: }
80:
81: public FIDMapper getFIDMapper(String typeName) throws IOException {
82: if (this .bypassSqlTypes.containsKey(typeName)) {
83: FeatureTypeInfo info = getFeatureTypeInfo(typeName);
84: return info.getFIDMapper();
85: }
86: return super.getFIDMapper(typeName);
87: }
88:
89: }
|