package com.ycsoft.report.query.cube.impl; /*********************************************************************** * Module: DimensionManage.java * Author: new * Purpose: Defines the Class DimensionManage ***********************************************************************/ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.ycsoft.commons.exception.ReportException; import com.ycsoft.commons.helper.CollectionHelper; import com.ycsoft.commons.helper.LoggerHelper; import com.ycsoft.daos.core.JDBCException; import com.ycsoft.report.bean.RepDimension; import com.ycsoft.report.bean.RepDimensionLevel; import com.ycsoft.report.dao.config.RepDimensionDao; import com.ycsoft.report.dao.config.RepDimensionLevelDao; import com.ycsoft.report.dao.keycon.QueryKeyValueDao; import com.ycsoft.report.query.cube.Dimension; import com.ycsoft.report.query.cube.DimensionLevel; import com.ycsoft.report.query.cube.DimensionRolap; import com.ycsoft.report.query.datarole.DataControl; import com.ycsoft.report.query.key.Impl.ConKeyCheck; import com.ycsoft.report.query.key.Impl.QueryKeyValue; import com.ycsoft.report.query.menory.MemoryCacheInit; /** 维管理 * 维初始化,维获取 * * @pdOid 0d4a36bd-bdf4-4ef1-ac9f-e16df2b0e0a6 */ public class DimensionManage implements MemoryCacheInit { /** @pdOid 25eff1be-1250-4eda-b8c0-937a2437def3 */ private static Map<String,Dimension> dimensionMap=new HashMap<String,Dimension>(); private RepDimensionDao repDimensionDao; private RepDimensionLevelDao repDimensionLevelDao; private QueryKeyValueDao queryKeyValueDao; private DataControl dataControl; public void setDataControl(DataControl dataControl) { this.dataControl = dataControl; } /** 根据ID获得一个维 * * @param id * @pdOid 13c6f940-514a-40b2-99bd-7de3db0d6f9e */ public static Dimension getDimension(String id) { return dimensionMap.get(id); } public static List<Dimension> getDimList(){ List<Dimension> list=new ArrayList<Dimension>(); list.addAll(dimensionMap.values()); return list; } /** * 获得一个维顺序排序的层清单 * @param dim * @return */ public List<DimensionLevel> getDimLevelsOrder(String dim){ List<DimensionLevel> dimlevels=new ArrayList<DimensionLevel>(); Dimension dimension=dimensionMap.get(dim); if(dim!=null){ for(int i=1;i<=dimension.getLevelNum();i++) dimlevels.add(dimension.getLevel(i)); } return dimlevels; } public String initAll() throws ReportException{ try { List<RepDimension> dimlist=repDimensionDao.findAll(); List<RepDimensionLevel> levellist=repDimensionLevelDao.findAll(); Map<String,List<RepDimensionLevel>> levelMap=CollectionHelper.converToMap(levellist, "id"); Map<String,Dimension> dimMap=new HashMap<String,Dimension>(); StringBuilder bf=new StringBuilder(); for(RepDimension repdim:dimlist){ if(levelMap.containsKey(repdim.getId())){ Map<Integer,DimensionLevel> dimlevelMap=new HashMap<Integer,DimensionLevel>(); for(RepDimensionLevel o:levelMap.get(repdim.getId())) dimlevelMap.put(o.getDim_level(), new DimensionLevelImpl(o)); dimMap.put(repdim.getId(), new DimensionImpl(queryKeyValueDao,dataControl,dimlevelMap,repdim)); }else{ bf.append(repdim.getId()).append("_dimension_init_error:level is not exits.;"); LoggerHelper.error(this.getClass(), repdim.getId()+"_dimension_init_error:level is not exits.;"); } } dimensionMap=dimMap; return bf.toString(); } catch (ReportException e) { throw e; } catch (JDBCException e) { throw new ReportException("Dimension内存初始化错误",e); } catch (Exception e) { throw new ReportException("Dimension内存初始化错误",e); } } public void setRepDimensionDao(RepDimensionDao repDimensionDao) { this.repDimensionDao = repDimensionDao; } public void setRepDimensionLevelDao(RepDimensionLevelDao repDimensionLevelDao) { this.repDimensionLevelDao = repDimensionLevelDao; } public void setQueryKeyValueDao(QueryKeyValueDao queryKeyValueDao) { this.queryKeyValueDao = queryKeyValueDao; } }