Esempio n. 1
0
  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;
  }