/** * Alipay.com Inc. * Copyright (c) 2004-2012 All Rights Reserved. */ package com.alipay.zdal.rule.bean; import java.util.ArrayList; import java.util.List; import java.util.Map; import com.alipay.zdal.rule.ruleengine.entities.abstractentities.SharedElement; import com.alipay.zdal.rule.ruleengine.entities.convientobjectmaker.TableMapProvider; import com.alipay.zdal.rule.ruleengine.util.RuleUtils; /** * �ṩͨ��ƴװ�ķ�ʽ������SimpleTableMap�ķ�ʽ * * * * */ public class SimpleTableMapProvider implements TableMapProvider { public enum TYPE { NORMAL, CUSTOM } public static final String NORMAL_TAOBAO_TYPE = "NORMAL"; public static final String DEFAULT_PADDING = "_"; protected static final int DEFAULT_INT = -1; public static final int DEFAULT_TABLES_NUM_FOR_EACH_DB = -1; private String type = NORMAL_TAOBAO_TYPE; /** * table[padding]suffix * Ĭ�ϵ�padding��_ */ private String padding = DEFAULT_PADDING; /** * width ��� */ private int width = DEFAULT_INT; /** * �ֱ��ʶ���ӡ�����˵�ʼ��ͷ����ʲô�������ָ����Ĭ�����߼����� */ private String tableFactor; /** * �߼����� */ private String logicTable; /** * ÿ�������� */ private int step = 1; /** * ÿ�����ݿ�ı�ĸ��������ָ����������ÿ�����ڵĸ�����Ϊָ����� */ private int tablesNumberForEachDatabases = DEFAULT_TABLES_NUM_FOR_EACH_DB; /** * database id */ private String parentID; /** * ÿ�����ݿ�ı�ĸ����ж��ٸ� * >= ? */ private int from = DEFAULT_INT; /** * <= ? */ private int to = DEFAULT_INT; protected boolean doesNotSetTablesNumberForEachDatabases() { return tablesNumberForEachDatabases == -1; } public int getFrom() { return from; } public String getPadding() { return padding; } public String getParentID() { return parentID; } public int getStep() { return step; } static public String getSuffixInit(int w, int i) { String suffix = null; if (w != DEFAULT_INT) { suffix = RuleUtils.placeHolder(w, i); } else { //�������ʽָ��width����ָ��Ϊ-1���򲻲��㣬ֱ������ֵΪ��׺ suffix = String.valueOf(i); } return suffix; } protected List<String> getSuffixList(int from, int to, int width, int step, String tableFactor, String padding) { if (from == DEFAULT_INT || to == DEFAULT_INT) { throw new IllegalArgumentException("from,to must be spec!"); } int length = to - from + 1; List<String> tableList = new ArrayList<String>(length); StringBuilder sb = new StringBuilder(); sb.append(tableFactor); sb.append(padding); for (int i = from; i <= to; i = i + step) { StringBuilder singleTableBuilder = new StringBuilder(sb.toString()); String suffix = getSuffixInit(width, i); singleTableBuilder.append(suffix); tableList.add(singleTableBuilder.toString()); } return tableList; } public String getTableFactor() { return tableFactor; } /** * @see com.alipay.zdal.rule.ruleengine.entities.convientobjectmaker.TableMapProvider#getTablesMap() */ public Map<String, SharedElement> getTablesMap() { TYPE typeEnum = TYPE.valueOf(type); // switch (typeEnum) { // case NORMAL: // // ���������������£���ôӦ���DZ�������+"_"+�����λ����������β׺ // // ���� tab_001~tab_100 // // break; // //custom�ķ�ʽ�£�����Ҫ���Ĭ�ϵ�padding��width,ֱ���˳�case // default: // break; // } makeRealTableNameTaobaoLike(typeEnum); List<String> tableNames; if (tableFactor == null && logicTable != null) { tableFactor = logicTable; } if (tableFactor == null) { throw new IllegalArgumentException("û�б�����������"); } // ���û������ÿ�����ݿ��ĸ�������ô��ʾ���б���ͳһ�ı���������(tab_0~tab_3)*16�����ݿ�=64�ű� if (doesNotSetTablesNumberForEachDatabases()) { tableNames = getSuffixList(from, to, width, step, tableFactor, padding); } else { // ���������ÿ�����ݿ��ĸ�������ô��ʾ���б��ò�ͬ�ı���������(tab_0~tab63),�ֲ���16�����ݿ��� int multiple = 0; try { multiple = Integer.valueOf(parentID); } catch (NumberFormatException e) { throw new IllegalArgumentException( "ʹ��simpleTableMapProvider����ָ����tablesNumberForEachDatabase������database��indexֵ�����Ǹ�integer����" + "��ǰdatabase��index��:" + parentID); } int start = tablesNumberForEachDatabases * multiple; // ��Ϊβ׺�ķ�Χ�ǵ�<=�����֣�����Ҫ-1. int end = start + tablesNumberForEachDatabases - 1; //���õ�ǰdatabase����ı��� tableNames = getSuffixList(start, end, width, step, tableFactor, padding); } List<Table> tables = null; tables = new ArrayList<Table>(tableNames.size()); for (String tableName : tableNames) { Table tab = new Table(); tab.setTableName(tableName); tables.add(tab); } Map<String, SharedElement> returnMap = RuleUtils .getSharedElemenetMapBySharedElementList(tables); return returnMap; } public int getTablesNumberForEachDatabases() { return tablesNumberForEachDatabases; } public int getTo() { return to; } public String getType() { return type; } public int getWidth() { return width; } /** * ���������������£���ôӦ���DZ�������+"_"+�����λ����������β׺������ tab_001~tab_100 */ protected void makeRealTableNameTaobaoLike(TYPE typeEnum) { if (typeEnum == TYPE.CUSTOM) { //do nothing } else { if (padding == null) padding = DEFAULT_PADDING; if (to != DEFAULT_INT && width == DEFAULT_INT) { width = String.valueOf(to).length(); } } } public void setFrom(int from) { this.from = from; } public void setLogicTable(String logicTable) { this.logicTable = logicTable; } public void setPadding(String padding) { this.padding = padding; } public void setParentID(String parentID) { this.parentID = parentID; } public void setStep(int step) { this.step = step; } public void setTableFactor(String tableFactor) { this.tableFactor = tableFactor; } public void setTablesNumberForEachDatabases(int tablesNumberForEachDatabases) { this.tablesNumberForEachDatabases = tablesNumberForEachDatabases; } public void setTo(int to) { this.to = to; } public void setType(String type) { this.type = type; } public void setWidth(int width) { if (width > 8) { throw new IllegalArgumentException("ռλ�����ܳ���8λ"); } //���׺ռλ������Ϊ0, ��ʱ������ if (width < 0) { throw new IllegalArgumentException("ռλ������Ϊ��ֵ"); } this.width = width; } }