package com.ycsoft.report.query.cube.showclass.cellwarn;
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.report.query.cube.CellType;
import com.ycsoft.report.query.cube.CubeCell;
import com.ycsoft.report.query.cube.CubeHeadCell;
import com.ycsoft.report.query.cube.impl.AbstractDataSet;
public class CellColour implements MeaWarnApplyTo {
private List<MeaWarnCheck> meawarncheck=null;
private Map<CellType,String> applytoMap =null;
public static List<MeaWarnApplyTo> createCellColour(AbstractDataSet dataset) throws ReportException{
List<MeaWarn> warnlist=dataset.getMeawarns();
if(warnlist==null||warnlist.size()==0)
return null;
List<MeaWarnApplyTo> checks=new ArrayList<MeaWarnApplyTo>();
for(MeaWarn warn:warnlist){
CellColour colour=new CellColour(warn,dataset.getBaseHeadCells());
checks.add(colour);
}
dataset.clearMeawarn();
return checks;
}
public static List<MeaWarnCheck> getMeaWarnCheck(List<MeaWarnApplyTo> warns,CellType celltype){
if(warns==null||warns.size()==0)
return null;
List<MeaWarnCheck> checks=new ArrayList<MeaWarnCheck>();
for(MeaWarnApplyTo o:warns){
if(o.applyTo(celltype))
checks.add(o);
}
return checks;
}
public CellColour(MeaWarn warn,CubeHeadCell[] headcells) throws ReportException{
List<MeaWarnCheck> rolsignlist=new ArrayList<MeaWarnCheck>();
List<MeaWarnCheck> colheadlist=new ArrayList<MeaWarnCheck>();
for(MeaWarnRow row: warn.getRowlist()){
if(WarnRowType.rolsign.equals(row.getWarnrowtype())){
rolsignlist.add(new RolsignWarn(row,headcells));
}else if(WarnRowType.colhead.equals(row.getWarnrowtype())){
colheadlist.add(new ColheadWarn(row,warn.getMea(),headcells));
}else if(WarnRowType.datatype.equals(row.getWarnrowtype())){
if(row.getWarnvaluelist()!=null&&row.getWarnvaluelist().size()>0){
applytoMap=new HashMap<CellType,String>();
for(String o:row.getWarnvaluelist()){
CellType celltype = CellType.valueOf(o);
if(celltype==null)
throw new ReportException(o+" is not a CellType");
applytoMap.put(CellType.valueOf(o), null);
}
}
}
}
rolsignlist.addAll(colheadlist);
meawarncheck=rolsignlist;
}
public boolean applyTo(CellType celltype){
if(applytoMap==null||applytoMap.containsKey(celltype))
return true;
else
return false;
}
public boolean check(CubeCell[] cells) throws ReportException {
if(this.meawarncheck!=null){
for(MeaWarnCheck check:this.meawarncheck){
if(!check.check(cells))
return false;
}
}
return true;
}
}