777

来源:互联网 发布:win10软件字体模糊 编辑:程序博客网 时间:2024/06/03 09:59
1.
package test.impl.util.flashUtil;

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;


public class ChartXML {
    
    private Document doc; //xml文档对象
    private Element chart; //chart对象,根节点
    private Element categories;
    
    /**
     * 无参构造方法
     */
    public ChartXML()
    {
        DocumentBuilderFactory dtbf = DocumentBuilderFactory.newInstance();
        try
        {
            doc = dtbf.newDocumentBuilder().newDocument();
        }
        catch (ParserConfigurationException e)
        {
            e.printStackTrace();
        }
        chart = doc.createElement("chart");
        doc.appendChild(chart);
    }
    
    /**
     * 批量设置chart样式
     * @param attributeMap
     */
    public void setStyles(Map<String, String> attributeMap)
    {
        this.addAttributesToElement(chart, attributeMap);
    }
    
    /**
     * 设置chart单个样式
     * 值为字符串的样式
     * @param key
     * @param value
     */
    public void setStyle(String styleName, String value)
    {
        chart.setAttribute(styleName,value);
    }
    
    /**
     * 设置chart单个样式
     * 值为int型样式
     * @param key
     * @param value
     */
    public void setStyle(String styleName, int value)
    {
        chart.setAttribute(styleName, value+"");
    }

    
/*********************单型图表数据加载方法   start***********************/

    /**
     *
     */
    public void setMapData(Map<String,Integer> chartMap)
    {
         Iterator<String> it = chartMap.keySet().iterator();
         while(it.hasNext())
         {
             String key = it.next();
             Element child = createChild(chart, "set");
             child.setAttribute("label", key);
             child.setAttribute("value", chartMap.get(key)+"");
             child.setAttribute("displayValue", chartMap.get(key)+"");
         }
    }
    
    /**
     * 加载简单型图表数据
     * @param labelList
     * @param valueList
     */
//    public void setSimpleChartData(List<String> labelList, List<String> valueList)
    public void setSimpleChartData(List<String> labelList, List valueList)
    {
       int len = labelList.size()<valueList.size()?labelList.size():valueList.size();
        for(int i=0; i<len; i++)
        {
            Element child = createChild(chart, "set");
            child.setAttribute("label", labelList.get(i));
            child.setAttribute("value", valueList.get(i).toString());
        }
    }
    
    /**
     * 加载线图数据
     * @param labelList
     * @param valueList
     */
//    public void setLineData(List<String> labelList, List<String> valueList)
    public void setLineData(List<String> labelList, List valueList)
    {
        int len = labelList.size()<valueList.size()?labelList.size():valueList.size();
        for(int i=0; i<len; i++)
        {
            Element child = createChild(chart, "set");
            child.setAttribute("label", labelList.get(i));
            child.setAttribute("value", valueList.get(i).toString());
        }
    }
    
    /**
     * 饼图的数据加载
     * @param lableList
     * @param valueList
     */
//    public void setDataPie(List<String> labelList, List<String> valueList)
    public void setDataPie(List<String> labelList, List valueList)
    {
        int len = labelList.size()<valueList.size()?labelList.size():valueList.size();
        for(int i=0; i<len; i++)
        {
            Element child = createChild(chart, "set");
            child.setAttribute("label", labelList.get(i));
            child.setAttribute("value", valueList.get(i).toString());
            child = null;
        }
        Element styles = createChild(chart, "styles");
        Element definition = createChild(styles, "definition");
        Element style = createChild(definition, "style");
        style.setAttribute("name", "myLegendFont");
        style.setAttribute("type", "font");
        style.setAttribute("size", "12");
        style.setAttribute("color", "1C6700");
        style.setAttribute("bold", "0");
        
        Element application = createChild(styles, "application");
        Element apply = createChild(application, "apply");
        apply.setAttribute("toObject", "Legend");
        apply.setAttribute("styles", "myLegendFont");
    }
//    <styles>
//      <definition>           
//        <style name='myLegendFont' type='font' size='12' color='1C6700' bold='0' />
//      </definition>       
//      <application>           
//        <apply toObject='Legend' styles='myLegendFont' />       
//    </application>
//  </styles>
    /**
     * 饼图数据加载 (重载)
     * @param dataMap
     */
    public void setDataPie(Map<String, String> dataMap)
    {
        Set<String> set = dataMap.keySet();
        Iterator<String> it = set.iterator();
        while(it.hasNext())
        {
            Element child = createChild(chart, "set");
            String key = it.next();
            child.setAttribute(key, dataMap.get(key));
            child = null;
        }
    }
    
    public void setDataColumn(Map<String, String> dataMap)
    {
        Set<String> set = dataMap.keySet();
        Iterator<String> it = set.iterator();
        while(it.hasNext())
        {
            Element child = createChild(chart, "set");
            String key = it.next();
            child.setAttribute(key, dataMap.get(key));
            child = null;
        }
    }
    
//    public void setDataColumn(List<String> lableList, List<String> valueList)
    public void setDataColumn(List<String> lableList, List valueList)
    {
        for(int i=0; i<valueList.size(); i++)
        {
            Element child = createChild(chart, "set");
            child.setAttribute("label", lableList.get(i));
            child.setAttribute("value", valueList.get(i).toString());
            child = null;
        }
    }
    
/*********************单型图表数据加载方法   start***********************/
    
    
/*********************复合型图表数据加载方法   start***********************/
    /**
     * 利用JDK6的可变参数
     */
//    public void setDataMultiChart(List<String> categoryList, List<String> seriesNameList, List<String>...dataLists)
    public void setDataMultiChart(List<String> categoryList, List<String> seriesNameList, List...dataLists)
    {
        Element categories = createChild(chart, "categories");
        Element category = null;
        for(int i=0; i<categoryList.size(); i++)
        {
            category = createChild(categories, "category");
            category.setAttribute("label", categoryList.get(i));  
        }
        
        //获取最小索引,以免发生访问越界
        int len = seriesNameList.size()<dataLists.length?seriesNameList.size():dataLists.length;
        Element dataset = null;
        Element set = null;
        String seriesName = null;
        for(int i=0; i<len; i++)   
        {
            dataset = createChild(chart, "dataset");
            seriesName = seriesNameList.get(i);
            //若以c:开头,则表示为颜色
            if(seriesName.startsWith("color:"))
            {
                String[] strs = seriesName.split(":");
                dataset.setAttribute("color", strs[1]);
            }
            else
            {
                //否则表示数据集名称
                dataset.setAttribute("seriesName", seriesNameList.get(i));
            }
            List dataList = dataLists[i];
            for(int j=0; j<categoryList.size(); j++)
            {
                set = createChild(dataset, "set");
                set.setAttribute("value", dataList.get(j).toString());
            }
        }
    }
    
    
    /**
     * 添加category列表
     * @param categoryList
     */
    public void setChartCategory(List categoryList)
    {
        Element categories = createChild(chart, "categories");
        Element category = null;
        for(int i=0; i<categoryList.size(); i++)
        {
            category = createChild(categories, "category");
            category.setAttribute("label", categoryList.get(i).toString());  
        }
    }
    
    /**
     * 增加Category
     * @param categoryName
     */
    public void addChartCategory(String categoryName)
    {
        if(null == categories)
        {
            categories = createChild(chart, "categories");
        }
        
        Element category = createChild(categories, "category");
        category.setAttribute("label", categoryName);  
    }
    
    
       /**
     * 增加Category
     * 自动生成1~MaxCategory的categories
     * @param categoryName
     */
    public void addChartCategory(int MaxCategory, int step)
    {
        if(null==categories && MaxCategory>0)
        {
            categories = createChild(chart, "categories");
        }
        
        int min = 1;
        if(step%2==0)
        {
            min = 2;
        }
        
        for(int i=1; i<=MaxCategory; i+=step)
        {
            Element category = createChild(categories, "category");
            category.setAttribute("label", i+"");  
        }
    }
    
    
    public void addChartCategory(int minCategory, int MaxCategory, int step)
    {
        if(null==categories && MaxCategory>0)
        {
            categories = createChild(chart, "categories");
        }
        
        for(int i=minCategory; i<=MaxCategory; i+=step)
        {
            Element category = createChild(categories, "category");
            category.setAttribute("label", i+"");  
        }
    }
    
     /**
     * 增加Category
     * @param categoryName
     */
    public void addChartCategory(Object categoryName)
    {
        if(null == categories)
        {
            categories = createChild(chart, "categories");
        }
        
        Element category = createChild(categories, "category");
        category.setAttribute("label", categoryName.toString());  
    }
    
    /**
     * 增加dataset
     * @param categoryName
     */
    public Element addChartDataset(String seriesName)
    {
        Element dataset = createChild(chart, "dataset");
        dataset.setAttribute("seriesName", seriesName);
        return dataset;
    }
    
    /**
     * 添加数据组列表 datasets
     * @param seriesNameList
     * @param dataLists
     */
    public void addMultiChart(List<String> seriesNameList, List...dataLists)
    {
        Element dataset = null;
        Element set = null;
        for(int i=0; i<seriesNameList.size(); i++)   
        {
            dataset = createChild(chart, "dataset");
            dataset.setAttribute("seriesName", seriesNameList.get(i));
            List dataList = dataLists[i];
            for(int j=0; j<dataList.size(); j++)
            {
                set = createChild(dataset, "set");
                set.setAttribute("value", dataList.get(j).toString());
            }
        }
    }
    
    /**
     * 在chartXML中添加一组数据 dataset
     * @param seriesName
     * @param dataList
     */
    public void addMultiChart(String seriesName, List dataList)
    {
        Element dataset = createChild(chart, "dataset");
        dataset.setAttribute("seriesName", seriesName);
        Element set = null;
        for(int j=0; j<dataList.size(); j++)
        {
            set = createChild(dataset, "set");
            set.setAttribute("value", dataList.get(j).toString());
        }
    }
    
    /**
     * 重载
     * @param categoryList
     * @param dataMap
     */
    public void setDataMultiChart(List<String> categoryList, Map<String, List<String>> dataMap)
    {
//+++++++++++++++++++++++++++++++++++++++++++++++++++++//
        Set<String> keyset = dataMap.keySet();
        Iterator<String> it = keyset.iterator();
        List<String> data1 = null;
        while(it.hasNext())
        {
            data1 = dataMap.get(it.next());
            break;
        }
        //获取最小值,以防止集合访问越界,更为健壮
        int len = data1.size()>categoryList.size()?categoryList.size():data1.size();
        
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
        
        Element categories = null;
        Element category = null;
        //生成父category标签
        categories = createChild(chart, "categories");
        //categories
        //批量生成categories标签
        for(int i=0; i<len; i++)
        {
            category = createChild(categories, "category");
            category.setAttribute("label", categoryList.get(i));
        }
        //dataset标签和set标签生成
        Element dataset = null;
        Element set = null;
        it = keyset.iterator();
        List<String> dataList = null;
        String seriesName = null;
        while(it.hasNext())
        {
            seriesName = it.next();
            dataList = dataMap.get(seriesName);
            dataset = createChild(chart, "dataset");
            dataset.setAttribute("seriesName", seriesName);
            for(int i=0; i<len; i++)
            {
                set = createChild(dataset, "set");
                set.setAttribute("value", dataList.get(i));
            }
        }
    }
    
    /**
     * 设置线图的通用样式
     */
    public void setLineUniversalStyle(String caption, String xName, String yName, int xStep, int yStep, int HlineNum, int VlineNum)
    {
        //根据valueList值的个数来确定水平线的条数
        //根据valueList中的最大值来确定竖直线的条数
        //根据valueList中的最大值来确定y轴值的步调
    }
    
    
    public void setSmartStyle(List<String> valueList)
    {
        
    }
    
    public void setNPVchartData(List<String> categoryList, List<String> pillarDataList, List<String> lineDataList)
    {
        //生成categories
        Element categories = null;
        categories = createChild(chart, "categories");
        Element category = null;
        for(String str : categoryList)
        {
            category = createChild(categories, "category");
            category.setAttribute("label", str);
        }
        
        //生成柱状图数据
        Element dataset = createChild(chart, "dataset");
        dataset.setAttribute("seriesName", "Years");
        Element set = null;
        for(String str : pillarDataList)
        {
            set = createChild(dataset, "set");
            set.setAttribute("value", str);
        }
        
        //生成线图数据
        dataset = null;
        dataset = createChild(chart, "dataset");
        dataset.setAttribute("seriesName", "USD");
        dataset.setAttribute("color", "97B854");
        dataset.setAttribute("renderAs", "Line");
        dataset.setAttribute("parentYAxis", "S");
        for(String str : lineDataList)
        {
            set = createChild(dataset, "set");
            set.setAttribute("value", str);
        }
    }
    
    
    public void setBusinessRoiLineData(List<String> categoryList, List<String> lineDataList1, List<String> lineDataList2, List<String> lineDataList3)
    {
        //生成categories
        Element categories = null;
        categories = createChild(chart, "categories");
        Element category = null;
        for(String str : categoryList)
        {
            category = createChild(categories, "category");
            category.setAttribute("label", str);
        }
        
        //生成线图1数据
        Element dataset = createChild(chart, "dataset");
        dataset.setAttribute("seriesName", "PV of cash out");
        dataset.setAttribute("color", "FF0000");
        dataset.setAttribute("renderAs", "Line");
        Element set = null;
        for(String str : lineDataList1)
        {
            set = createChild(dataset, "set");
            set.setAttribute("value", str);
        }
        
        //生成线图2数据
        dataset = null;
        dataset = createChild(chart, "dataset");
        dataset.setAttribute("seriesName", "PV of cash in");
        dataset.setAttribute("color", "33A9E0");
        dataset.setAttribute("renderAs", "Line");
        for(String str : lineDataList2)
        {
            set = createChild(dataset, "set");
            set.setAttribute("value", str);
        }
        
        //生成线图3数据
        dataset = null;
        dataset = createChild(chart, "dataset");
        dataset.setAttribute("seriesName", "PV of net cash");
        dataset.setAttribute("color", "99BA56");
        dataset.setAttribute("renderAs", "Line");
        dataset.setAttribute("parentYAxis", "S");
        for(String str : lineDataList3)
        {
            set = createChild(dataset, "set");
            set.setAttribute("value", str);
        }
    }
    
//    <category label='831' />
//    <category label='832' />
//
//    </categories>
//    <dataset seriesName="A.C.off">
//    <set value='32.7' />
//    <set value='14.980165361182678' />
//    <set value='33.33602555575811' />
//    <set value='23.572602753844826' />
//    <set value='34.13603623082115' />
//    
///*********************复合型图表数据加载方法   start***********************/
//    
//    
//    /**
//     * 创建元素的私有方法
//     * @param tagName
//     * @return
//     */
    public Element createElement(String tagName)
    {
        return doc.createElement(tagName);
    }
    
    /**
     * 创建元素的子元素
     * @param parentTag
     * @param childTagName
     * @return
     */
    public Element createChild(Element parentTag, String childTagName)
    {
        Element child = doc.createElement(childTagName);
        parentTag.appendChild(child);
        return child;
    }
    
    /**
     * 为元素批量添加属性
     * @param element
     * @param attributesMap
     * @return
     */
    public Element addAttributesToElement(Element element, Map<String,String> attributesMap)
    {
        Set<String> set = attributesMap.keySet();
        Iterator<String> it = set.iterator();
        if(set.size()<=0)
        {
            return element;
        }
        String key = null;
        while(it.hasNext())
        {
            key = it.next();
            element.setAttribute(key,attributesMap.get(key));
        }
        return element;
    }
    
    /**
     * 获取整个xml文档的字符串表示
     * @return
     */
    public String getXMLString()
    {
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer transformer = null;
        try {
            transformer = tf.newTransformer();
        } catch (TransformerConfigurationException e1) {
            e1.printStackTrace();
        }
        DOMSource doms = new DOMSource(doc);
        StringWriter sw = new StringWriter();
        StreamResult sr = new StreamResult(sw);
        try {
            transformer.transform(doms, sr);
        } catch (TransformerException e) {
            e.printStackTrace();
        }
        String xmlString = sw.toString();
        return xmlString;
    }
    
    public void writeToFile(String filePath) throws Exception
    {
        OutputStream os = new FileOutputStream(filePath);
        os.write(this.getXMLString().getBytes());
    }
    
    public static void main(String[] args) throws Exception {
        
        Map<String, String> attributesMap = new HashMap<String, String>();
        attributesMap.put("caption", "深圳气温统计");
        attributesMap.put("xx", "深圳气温统计");
        attributesMap.put("yy", "深圳气温统计");
        attributesMap.put("zz", "深圳气温统计");
        
        List<String> categoryList = new ArrayList<String>();
        categoryList.add("一月");
        categoryList.add("二月");
        categoryList.add("三月");
        categoryList.add("四月");
        categoryList.add("五月");
        categoryList.add("六月");
        categoryList.add("七月");
        categoryList.add("八月");
        categoryList.add("九月");
        categoryList.add("十月");
        categoryList.add("十一月");
        categoryList.add("十二月");
        
        List<String> list1 = new ArrayList<String>();
        List<String> list2 = new ArrayList<String>();

        Map<String, List<String>> dataMap = new HashMap<String, List<String>>();
        dataMap.put("李四", list1);
        dataMap.put("王五", list2);
        
        list1.add("1");
        list1.add("2");
        list1.add("3");
        list1.add("4");
        list1.add("5");
        list1.add("6");
        list1.add("7");
        list1.add("8");
        list1.add("9");
        list1.add("10");
        list1.add("11");
        list1.add("12");
        
        list2.add("x1");
        list2.add("x2");
        list2.add("x3");
        list2.add("x4");
        list2.add("x5");
        list2.add("x6");
        list2.add("x7");
        list2.add("x8");
        list2.add("x9");
        list2.add("x10");
        list2.add("x11");
        list2.add("x12");

        
        ChartXML chart = new ChartXML();
        chart.setStyles(attributesMap);
//        chart.setDataMultiChart(categoryList, dataMap);
        chart.setDataColumn(list1, list2);
        System.out.println(chart.getXMLString());
        chart.writeToFile("d:/xmlFile3.txt");
    }
}

原创粉丝点击