Blame view

src/nlp/whu/utils/DataContext.java 4.37 KB
ca4e3e24   tu   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/**@author Sherlock_yb
 * Created time:2014-2-26
 */
package nlp.whu.utils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;

import nlp.whu.model.CRegion;
import nlp.whu.model.Region;
import nlp.whu.utils.DB.C3P0Util;

public class DataContext{
	private static Logger log = Log4jUtil.getInstance().getLogger(DataContext.class);
	private static List<CRegion> regions = new ArrayList<CRegion>();;
	/**
	 * 所有的地区的map,主要是为了方便查找
	 */
	private static Map<Integer, CRegion> regionMap = new HashMap<Integer, CRegion>();;
	private static boolean regionLoad = false;
	private static synchronized void loadRegions(){
		if(!regionLoad){
			getRootRegions(regions, regionMap);
			regionLoad = true;
		}
	}
	public static CRegion getRegion(int regionId){
		if(!regionLoad){
			loadRegions();
		}
		//如果regionId不存在,则返回null
		return regionMap.get(regionId);
	}
	public static List<CRegion> getRegions(){
		if(!regionLoad){
			loadRegions();
		}
		return regions;
	}
	//获取顶级地域(没有父级地域)
	public static List<CRegion> getRootRegions(List<CRegion> regions, Map<Integer, CRegion> crMap) {
		List<Region> rgs = new ArrayList<Region>();
		String sql = "select * from wdyq_region order by ordinal";
		Connection conn = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			conn = C3P0Util.getConn(C3P0Util.DATA_SOURCE_APP);
			stmt = conn.prepareStatement(sql);
			rs = stmt.executeQuery();
			while(rs.next()){
				Region r = new Region();
				CRegion cr = new CRegion();
				//c的字段,从数据库中取int型时,要注意为null的情况,此时getInt会自动返回0
				if(rs.getString("regionID") == null){
	    			r.setRegionID(null);
	    		}else{
	    			r.setRegionID(rs.getInt("regionID"));
	    		}
				if(rs.getString("provinceID") == null){
					r.setProvinceID(null);
				}else{
					r.setProvinceID(rs.getInt("provinceID"));
				}
				r.setRegionName(rs.getString("regionName"));
				if(rs.getString("regionLevel") == null){
					r.setRegionLevel(null);
				}else{
					r.setRegionLevel(rs.getInt("regionLevel"));
				}
				if(rs.getString("parentID") == null){
					r.setParentID(null);
				}else{
					r.setParentID(rs.getInt("parentID"));
				}
	    		r.setRegionAbbr(rs.getString("regionAbbr"));
	    		if(rs.getString("ordinal") == null){
	    			r.setOrdinal(null);
	    		}else{
	    			r.setOrdinal(rs.getInt("ordinal"));
	    		}
	    		//cr字段
	    		cr.setRegionID(r.getRegionID());
	    		cr.setRegionName(r.getRegionName());
	    		cr.setRegionLevel(r.getRegionLevel());
	    		cr.setRegionAbbr(r.getRegionAbbr());
	    		rgs.add(r);
	    		crMap.put(r.getRegionID(), cr);
			}
		} catch (SQLException e) {
			log.error("query wdyq_region failed, sql = " + sql, e);
			e.printStackTrace();
		}finally{
			C3P0Util.closeRs(rs);
			C3P0Util.closeStmt(stmt);
			C3P0Util.closeConn(conn);
		}
		//组装父子关系,省份关系
		for(Region r : rgs){
			CRegion cr = crMap.get(r.getRegionID());
			cr.childRegions = new ArrayList<CRegion>();
    		//如果对应的 r 存在父节点ID,则设置cr的父节点,并把cr添加到父节点的孩子列表中
    		if (r.getParentID() != null && r.getParentID() >= 0){
    			CRegion parentRegion = crMap.get(r.getParentID());
    			if (null != parentRegion){
	    			cr.parentRegion = parentRegion;
	    			//设置子关系
	    			if (parentRegion.childRegions == null)
	    				parentRegion.childRegions = new ArrayList<CRegion>();
	    			parentRegion.childRegions.add(cr);
    			} else{
    				System.out.println(String.format("错误:区域[%d][%s]的上级区域[%d]不存在,请检查.", r.getRegionID(), r.getRegionName(), r.getParentID()));
    				// 没有父节点,则是一个根节点,直接添加到 regions
        			regions.add(cr);
    			}
    		} else{
    			// 没有父节点,则是一个根节点,直接添加到 regions
    			regions.add(cr);
    		}
    		//设置省份节点
    		if (r.getProvinceID() != null && r.getProvinceID() >= 0){
    			cr.provinceRegion = crMap.get(r.getProvinceID());
    		}
		}
		return regions;
	}
}