private void init(BuildSession session, ViewContext view_context) throws Exception { CompositeMap context = ServiceThreadLocal.getCurrentThreadContext(); if (context == null) throw new IllegalStateException("No service context set in ThreadLocal yet"); CompositeMap view = view_context.getView(); CompositeMap base_model = view_context.getModel(); HTMLIncludeConfig hic = HTMLIncludeConfig.getInstance(view); String path = TextParser.parse(hic.getPath(), base_model); version = TextParser.parse(hic.getVersion(), base_model); if (null != path && !path.isEmpty()) { int begin = path.indexOf("/release"); if (begin < 0) return; path = path.substring(begin, path.length()); articlePath = "../.." + path; sourcePath = session.getContextPath() + path.replaceAll("\\\\", "/").replaceAll("(.*/)[^/]*$", "$1"); return; } String pathField = hic.getPathField(); String model = hic.getModel(); CompositeMap params = hic.getParams(); Map map = new HashMap(); if (null != params) { Iterator pit = params.getChildIterator(); while (pit.hasNext()) { CompositeMap param = (CompositeMap) pit.next(); map.put( param.get("name"), TextParser.parse((String) param.get("value"), view_context.getModel())); } } BusinessModelService service = factory.getModelService(model, context); CompositeMap resultMap = service.queryAsMap(map); if (null == resultMap || null == resultMap.getChilds()) { throw new ClassNotFoundException("文章未找到,输入的路径不正确。"); } Iterator it = resultMap.getChildIterator(); while (it.hasNext()) { path = ((CompositeMap) it.next()).getString(pathField); if (null != path) { articlePath = "../.." + path; sourcePath = session.getContextPath() + path.replaceAll("\\\\", "/").replaceAll("(.*/)[^/]*$", "$1"); break; } } }
@Override public CompositeMap getCustomizationData( BusinessModel model, String function_code, CompositeMap context) { if (custDimensionsRecords == null || custDimensionsRecords.getChilds() == null) return null; String bm_name = model.getName(); SqlServiceContext ssc = null; ResultSet rs_exists = null; ResultSet rs_details = null; CompositeMap result = new CompositeMap("result"); try { ssc = databaseServiceFactory.createContextWithConnection(); String exits_sql = "select 1 from dual where exists (select 1 from sys_bm_config_customization t " + " where t.bm_code='" + bm_name + "' and t.function_code = '" + function_code + "' and t.enable_flag='Y')"; ParsedSql exits_stmt = createStatement(exits_sql); SqlRunner exits_runner = new SqlRunner(ssc, exits_stmt); rs_exists = exits_runner.query(null); if (!rs_exists.next()) { return null; } String bm_tag = model.getTag(); if (bm_tag != null) { executeDimensionProc(bm_tag, custDimensionsRecords, context); } String dimenson_sql_template = "select d.order_num,record_id,head_id,function_id,function_code,bm_code,dimension_type,dimension_value," + " bm_select_value,bm_data_source,bm_where_clause,bm_order_by,bm_query_condition" + " from sys_bm_config_customization t,sys_bm_config_dimension d " + " where t.dimension_type=d.dimension_code and t.enable_flag = 'Y'" + " and t.bm_code='" + bm_name + "' and t.function_code = '" + function_code + "' and t.dimension_type="; StringBuffer sb = new StringBuffer(""); boolean firstRecord = true; for (Iterator it = custDimensionsRecords.getChildIterator(); it.hasNext(); ) { CompositeMap record = (CompositeMap) it.next(); String dimensionCode = record.getString("dimension_code"); String data_query_sql = record.getString("data_query_sql"); String dimension_tag = record.getString("dimension_tag"); if (dimension_tag != null) { if (bm_tag == null) continue; boolean is_tag_match = bm_tag.contains(dimension_tag); if (!is_tag_match) continue; } if (firstRecord) firstRecord = false; else sb.append(" union all "); sb.append(dimenson_sql_template).append("'").append(dimensionCode).append("'"); if (data_query_sql != null) sb.append(" and ").append(data_query_sql); } if (!firstRecord) sb.append(" order by 1 "); if ("".equals(sb.toString())) return null; String custDetailRecordsSql = sb.toString(); LoggingContext.getLogger(context, this.getClass().getCanonicalName()) .config("custDetailRecordsSql:" + custDetailRecordsSql); ParsedSql stmt = createStatement(custDetailRecordsSql); SqlRunner runner = new SqlRunner(ssc, stmt); rs_details = runner.query(context); ResultSetLoader mRsLoader = new ResultSetLoader(); mRsLoader.setFieldNameCase(Character.LOWERCASE_LETTER); FetchDescriptor desc = FetchDescriptor.fetchAll(); CompositeMapCreator compositeCreator = new CompositeMapCreator(result); mRsLoader.loadByResultSet(rs_details, desc, compositeCreator); if (result.getChilds() == null) return null; } catch (Exception e) { throw new RuntimeException(e); } finally { DBUtil.closeResultSet(rs_exists); DBUtil.closeResultSet(rs_details); if (ssc != null) try { ssc.freeConnection(); } catch (SQLException e) { throw new RuntimeException(e); } } context.putObject(DEFAULT_CUSTOM_DATA, result); return result; }