1   package org.kuali.ole.serviceimpl;
2   
3   import org.kuali.ole.OleSRUConstants;
4   import org.kuali.ole.bo.explain.*;
5   import org.kuali.ole.handler.OleSRUExplainOperationHandler;
6   import org.kuali.ole.service.OleDiagnosticsService;
7   import org.kuali.ole.service.OleExplainOperationService;
8   import org.kuali.rice.core.api.config.property.Config;
9   import org.kuali.rice.core.api.config.property.ConfigContext;
10  
11  import java.util.Map;
12  
13  
14  
15  
16  
17  
18  
19  
20  public class OleExplainOperationServiceImpl implements OleExplainOperationService {
21  
22  
23      public OleSRUExplainOperationHandler oleSRUExplainOperationHandler;
24      public OleDiagnosticsService oleDiagnosticsService;
25      private Config currentContextConfig;
26  
27      public OleExplainOperationServiceImpl() {
28          oleSRUExplainOperationHandler = new OleSRUExplainOperationHandler();
29          oleDiagnosticsService = new OleDiagnosticsServiceImpl();
30      }
31  
32      
33  
34  
35  
36  
37  
38      public String getExplainResponse(Map reqParamMap) {
39          OleSRUExplainResponse oleSRUExplainResponse = new OleSRUExplainResponse();
40          oleSRUExplainResponse.setVersion((String) reqParamMap.get(OleSRUConstants.VERSION));
41          OleSRUExplainRecord oleSRUExplainRecord = getExplainRecord(reqParamMap);
42          oleSRUExplainResponse.setRecord(oleSRUExplainRecord);
43          if (OleSRUConstants.RECORD_PACK_XML.equalsIgnoreCase((String) reqParamMap.get(OleSRUConstants.RECORD_PACKING))) {
44              String explainXML = oleSRUExplainOperationHandler.toXML(oleSRUExplainResponse);
45              String styleSheet = (String) reqParamMap.get(OleSRUConstants.STYLE_SHEET);
46              if (styleSheet != null) {
47                  explainXML = explainXML.replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n <?xml-stylesheet type=\"text/xsl\" href=\"" + styleSheet + "\"?>");
48              }
49              return explainXML;
50          } else if (OleSRUConstants.RECORD_PACK_STRING.equalsIgnoreCase((String) reqParamMap.get(OleSRUConstants.RECORD_PACKING))) {
51              return oleSRUExplainResponse.toString();
52          }
53          return null;
54      }
55  
56      
57  
58  
59  
60  
61      public OleSRUExplainRecord getExplainRecord(Map reqParamMap) {
62          OleSRUExplainRecord oleSRUExplainRecord = new OleSRUExplainRecord();
63          oleSRUExplainRecord.setRecordPacking(OleSRUConstants.RECORD_PACK_XML);
64          oleSRUExplainRecord.setRecordSchema(getCurrentContextConfig().getProperty(OleSRUConstants.EXPLAIN_RECORD_SCHEMA));
65          OleSRUExplainRecordData oleSRUExplainRecordData = getExplainRecordData(reqParamMap);
66          oleSRUExplainRecord.setRecordData(oleSRUExplainRecordData);
67          return oleSRUExplainRecord;
68      }
69  
70      private Config getCurrentContextConfig() {
71          if (null == currentContextConfig) {
72              currentContextConfig = ConfigContext.getCurrentContextConfig();
73          }
74          return currentContextConfig;
75      }
76  
77      public void setCurrentContextConfig(Config currentContextConfig) {
78          this.currentContextConfig = currentContextConfig;
79      }
80  
81      
82  
83  
84  
85  
86      public OleSRUExplainRecordData getExplainRecordData(Map reqParamMap) {
87          OleSRUExplainRecordData oleSRUExplainRecordData = new OleSRUExplainRecordData();
88          OleSRUExplainOperation oleSRUExplainOperation = new OleSRUExplainOperation();
89          OleSRUExplainServerInfo oleSRUExplainServerInfo = getExplainServerInfo();
90          OleSRUExplainDatabaseInfo oleSRUExplainDatabaseInfo = getExplainDatabaseInfo();
91          OleSRUExplainConfigurationInfo oleSRUExplainConfigurationInfo = getExplainConfigInfo();
92          OleSRUExplainIndexInfo oleSRUExplainIndexInfo = getExplainIndexInfo();
93          OleSRUExplainSchemaInfo oleSRUExplainSchemaInfo = getExplainSchemaInfo();
94          oleSRUExplainOperation.setServerInfo(oleSRUExplainServerInfo);
95          oleSRUExplainOperation.setDatabaseInfo(oleSRUExplainDatabaseInfo);
96          oleSRUExplainOperation.setIndexInfo(oleSRUExplainIndexInfo);
97          oleSRUExplainOperation.setSchemaInfo(oleSRUExplainSchemaInfo);
98          oleSRUExplainOperation.setConfigInfo(oleSRUExplainConfigurationInfo);
99          if (reqParamMap.containsKey(OleSRUConstants.EXTRA_REQ_DATA_KEY))
100             oleSRUExplainOperation.setExtraRequestData(getExtraReqDataInfo(reqParamMap));
101         oleSRUExplainRecordData.setExplain(oleSRUExplainOperation);
102         return oleSRUExplainRecordData;
103     }
104 
105     
106 
107 
108 
109 
110     public OleSRUExplainServerInfo getExplainServerInfo() {
111         OleSRUExplainServerInfo oleSRUExplainServerInfo = new OleSRUExplainServerInfo();
112         oleSRUExplainServerInfo.setDatabase(getCurrentContextConfig().getProperty(OleSRUConstants.EXPLAIN_SERVER_DATABASE_INFO));
113         oleSRUExplainServerInfo.setHost(getCurrentContextConfig().getProperty(OleSRUConstants.EXPLAIN_SERVER_HOST));
114         oleSRUExplainServerInfo.setMethod(getCurrentContextConfig().getProperty(OleSRUConstants.EXPLAIN_SERVER_METHOD));
115         oleSRUExplainServerInfo.setPort(getCurrentContextConfig().getProperty(OleSRUConstants.EXPLAIN_SERVER_PORT));
116         oleSRUExplainServerInfo.setProtocol(getCurrentContextConfig().getProperty(OleSRUConstants.EXPLAIN_SERVER_PROTOCOL));
117         oleSRUExplainServerInfo.setTransport(getCurrentContextConfig().getProperty(OleSRUConstants.EXPLAIN_SERVER_TRANSPORT));
118         oleSRUExplainServerInfo.setVersion(getCurrentContextConfig().getProperty(OleSRUConstants.EXPLAIN_SERVER_VERSION));
119         oleSRUExplainServerInfo.setValue("");
120         return oleSRUExplainServerInfo;
121     }
122 
123     
124 
125 
126 
127 
128     public OleSRUExplainDatabaseInfo getExplainDatabaseInfo() {
129         OleSRUExplainDatabaseInfo oleSRUExplainDatabaseInfo = new OleSRUExplainDatabaseInfo();
130         OleSRUExplainDatabaseTitle oleSRUExplainDatabaseTitle = new OleSRUExplainDatabaseTitle();
131         oleSRUExplainDatabaseTitle.setLang(getCurrentContextConfig().getProperty(OleSRUConstants.EXPLAIN_DATABASE_LANG));
132         oleSRUExplainDatabaseTitle.setPrimary(getCurrentContextConfig().getProperty(OleSRUConstants.EXPLAIN_DATABASE_PRIMARY));
133         oleSRUExplainDatabaseTitle.setValue("");
134         oleSRUExplainDatabaseInfo.setTitle(oleSRUExplainDatabaseTitle);
135         return oleSRUExplainDatabaseInfo;
136     }
137 
138     
139 
140 
141 
142 
143     public OleSRUExplainIndexInfo getExplainIndexInfo() {
144         OleSRUExplainIndexInfo oleSRUExplainIndexInfo = new OleSRUExplainIndexInfo();
145         OleSRUExplainIndex oleSRUExplainIndex = new OleSRUExplainIndex();
146         OleSRUExplainIndexSet oleSRUExplainIndexSet = new OleSRUExplainIndexSet();
147         oleSRUExplainIndexSet.setName(getCurrentContextConfig().getProperty(OleSRUConstants.EXPLAIN_INDEX_SET_NAME));
148         oleSRUExplainIndexSet.setIdentifier(getCurrentContextConfig().getProperty(OleSRUConstants.EXPLAIN_INDEX_SET_IDENTIFIER));
149         OleSRUExplainIndexMapName oleSRUExplainIndexMapName = new OleSRUExplainIndexMapName();
150         oleSRUExplainIndexMapName.setSet(getCurrentContextConfig().getProperty(OleSRUConstants.EXPLAIN_INDEX_MAP_NAME_SET));
151         oleSRUExplainIndexMapName.setValue(getCurrentContextConfig().getProperty(OleSRUConstants.EXPLAIN_INDEX_MAP_NAME_VALUE));
152         OleSRUExplainIndexMap oleSRUExplainIndexMap = new OleSRUExplainIndexMap();
153         oleSRUExplainIndexMap.setName(oleSRUExplainIndexMapName);
154         oleSRUExplainIndex.setIndexMap(oleSRUExplainIndexMap);
155         oleSRUExplainIndexInfo.setIndex(oleSRUExplainIndex);
156         oleSRUExplainIndexInfo.setSet(oleSRUExplainIndexSet);
157 
158 
159         oleSRUExplainIndexSet.setValue("");
160         return oleSRUExplainIndexInfo;
161     }
162 
163     
164 
165 
166 
167 
168     public OleSRUExplainSchemaInfo getExplainSchemaInfo() {
169         OleSRUExplainSchemaInfo oleSRUExplainSchemaInfo = new OleSRUExplainSchemaInfo();
170         OleSRUExplainSchema oleSRUExplainSchema = new OleSRUExplainSchema();
171         oleSRUExplainSchema.setTitle(getCurrentContextConfig().getProperty(OleSRUConstants.EXPLAIN_SCHEMA_TITLE));
172         oleSRUExplainSchema.setName(getCurrentContextConfig().getProperty(OleSRUConstants.EXPLAIN_SCHEMA_NAME));
173         oleSRUExplainSchema.setIdentifier(getCurrentContextConfig().getProperty(OleSRUConstants.EXPLAIN_SCHEMA_IDENTIFIER));
174         oleSRUExplainSchema.setValue("");
175         oleSRUExplainSchemaInfo.setSchema(oleSRUExplainSchema);
176         return oleSRUExplainSchemaInfo;
177     }
178 
179     
180 
181 
182 
183 
184     public OleSRUExplainConfigurationInfo getExplainConfigInfo() {
185         OleSRUExplainConfigurationInfo oleSRUExplainConfigurationInfo = new OleSRUExplainConfigurationInfo();
186         OleSRUExplainConfigDefaultTagField oleSRUExplainConfigDefaultTagField = new OleSRUExplainConfigDefaultTagField();
187         OleSRUExplainConfigSettingTagField oleSRUExplainConfigSettingTagField = new OleSRUExplainConfigSettingTagField();
188         OleSRUExplainConfigSupportTagField oleSRUExplainConfigSupportTagField = new OleSRUExplainConfigSupportTagField();
189         oleSRUExplainConfigDefaultTagField.setType("numberOfRecords");
190         oleSRUExplainConfigDefaultTagField.setValue(Integer.parseInt(getCurrentContextConfig().getProperty(OleSRUConstants.STARTRECORD)));
191         oleSRUExplainConfigurationInfo.setDefaultValue(oleSRUExplainConfigDefaultTagField);
192         oleSRUExplainConfigSettingTagField.setType("maximumRecords");
193         oleSRUExplainConfigSettingTagField.setValue(Integer.parseInt(getCurrentContextConfig().getProperty(OleSRUConstants.MAXRECORD)));
194         oleSRUExplainConfigurationInfo.setSetting(oleSRUExplainConfigSettingTagField);
195         oleSRUExplainConfigSupportTagField.setType("proximity");
196         oleSRUExplainConfigSupportTagField.setValue("");
197         oleSRUExplainConfigurationInfo.setSupports(oleSRUExplainConfigSupportTagField);
198         return oleSRUExplainConfigurationInfo;
199     }
200 
201     public String getExtraReqDataInfo(Map reqParamMap) {
202 
203         return "<theo:" + reqParamMap.get(OleSRUConstants.EXTRA_REQ_DATA_KEY) + " xmlns:theo=\"" + getCurrentContextConfig().getProperty(OleSRUConstants.EXTRA_REQ_DATA_XML_NAMESPACE) + "\">\n" +
204                 reqParamMap.get(OleSRUConstants.EXTRA_REQ_DATA_VALUE) + "\n" +
205                 "</theo:" + reqParamMap.get(OleSRUConstants.EXTRA_REQ_DATA_KEY) + ">";
206     }
207 
208 }