<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    編程生活

       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      113 隨筆 :: 0 文章 :: 18 評論 :: 0 Trackbacks
    由于項目需要做了一個從pdm中讀取表/字段的代碼,為以后使用方便記在此處
    public class PDMHandler extends DefaultHandler2 {
        
    private static final String DBMS = "/" + Target.dbms.id;

        
    private static final String DBMS_NAME = DBMS + "/" + Target.dbmsName.id;

        
    private static final String DBMS_CODE = DBMS + "/" + Target.dbmsCode.id;

        
    private static final String TABLES = "/" + Target.tables.id;

        
    private static final String TABLES_TABLE = TABLES + "/" + Target.table.id;

        
    private static final String TABLES_TABLE_NAME = TABLES_TABLE + "/" + Target.tableName.id;

        
    private static final String TABLES_TABLE_CODE = TABLES_TABLE + "/" + Target.tableCode.id;

        
    private static final String TABLES_TABLE_COLUMNS = TABLES_TABLE + "/" + Target.columns.id;

        
    private static final String TABLES_TABLE_COLUMNS_COLUMN = TABLES_TABLE_COLUMNS + "/" + Target.column.id;

        
    private static Log log = LogFactory.getLog(PDMHandler.class);

        
    // 是否正在處理
        private boolean doing;

        
    // 結果對象
        private Tables tables = new Tables();

        
    // 上一次的表對象
        private Table lastTable;

        
    // 上一次的列對象
        private Column lastColumn;

        
    // 上一次處理的對象
        private Target lastObject;

        
    // 上一次路徑,元素之間用/進行分隔,屬性則采用@來標識,這是借用了XPath的規范
        private String lastPath = "";

        
    /**
         * 開始文檔解析
         * 
         * 
    @see org.xml.sax.helpers.DefaultHandler#startDocument()
         
    */

        @Override
        
    public void startDocument() throws SAXException {
            log.debug(
    "powerdesigner pdm document parse start.");
        }


        
    /**
         * 結束文檔解析
         * 
         * 
    @see org.xml.sax.helpers.DefaultHandler#endDocument()
         
    */

        @Override
        
    public void endDocument() throws SAXException {
            log.debug(
    "powerdesigner pdm document parse finish.");
        }


        
    /**
         * 啟動元素解析
         * 
         * 
    @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String,
         *      java.lang.String, java.lang.String, org.xml.sax.Attributes)
         
    */

        @Override
        
    public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException {
            
    // 首先處理dbms的解釋
            if (Target.dbms.id.equals(name) || Target.tables.id.equals(name))
                doing 
    = true;

            
    // 如果沒有開始,則直接退出
            if (!doing)
                
    return;

            
    // 設置路徑
            String tempPath = lastPath + "/" + name;

            log.debug(
    "開始解析:" + name);
            
    // DBMS
            if (lastPath.equals(DBMS)) {
                
    if (tempPath.equals(DBMS_NAME)) {
                    lastObject 
    = Target.dbmsName;
                }
     else if (tempPath.equals(DBMS_CODE)) {
                    lastObject 
    = Target.dbmsCode;
                }

                
    // TABLE
            }
     else if (lastPath.equals(TABLES)) {
                
    if (tempPath.equals(TABLES_TABLE)) {
                    
    // 新建一個表
                    lastTable = new Table();
                    tables.add(lastTable);
                }

                
    // TABLE的屬性
            }
     else if (lastPath.equals(TABLES_TABLE)) {
                
    if (tempPath.equals(TABLES_TABLE_NAME)) {
                    lastObject 
    = Target.tableName;
                }
     else if (tempPath.equals(TABLES_TABLE_CODE)) {
                    lastObject 
    = Target.tableCode;
                }

                
    // 列
            }
     else if (lastPath.equals(TABLES_TABLE_COLUMNS)) {
                
    if (tempPath.equals(TABLES_TABLE_COLUMNS_COLUMN)) {
                    
    // 新建列
                    lastColumn = new Column();
                    lastTable.add(lastColumn);
                }

            }
     else if (lastPath.equals(TABLES_TABLE_COLUMNS_COLUMN)) {
                
    // 只處理列的屬性
                lastObject = findTarget(Group.column, name);
            }

            lastPath 
    = tempPath;
        }


        
    /**
         * 結束元素解析
         * 
         * 
    @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String,
         *      java.lang.String, java.lang.String)
         
    */

        @Override
        
    public void endElement(String uri, String localName, String name) throws SAXException {
            
    // 管理是否結束schema的解析
            if (!doing)
                
    return;

            log.debug(
    "完成解析:" + name);
            
    if (Target.dbms.id.equals(name) || Target.tables.id.equals(name))
                doing 
    = false;

            
    // 恢復路徑狀態
            lastPath = StringUtils.substringBeforeLast(lastPath, "/" + name);
        }


        @Override
        
    public void characters(char[] ch, int start, int length) throws SAXException {
            
    if (lastObject != null && lastObject.ob != null{
                Object dest 
    = Group.table.equals(lastObject.og) ? lastTable : Group.column.equals(lastObject.og) ? lastColumn : tables;
                
    try {
                    BeanUtils.setProperty(dest, lastObject.ob, 
    new String(ch, start, length));
                    lastObject 
    = null;
                }
     catch (Exception e) {
                    
    throw new SAXException(e);
                }

            }

        }


        
    /**
         * 取得解析成功的Table定義信息
         * 
         * 
    @return
         
    */

        
    public Tables getTables() {
            
    return tables;
        }


        
    /**
         * 根據標識找符合標識的東西
         * 
         * 
    @param group
         * 
    @param id
         * 
    @return
         
    */

        
    private static Target findTarget(Group group, String id) {
            
    for (Target item : Target.class.getEnumConstants()) {
                
    if (group == item.og && item.id.equals(id))
                    
    return item;
            }

            
    return null;
        }


        
    /**
         * 操作的組分類
         * 
         * 
    @author wilesun
         * @create 2007-11-3
         
    */

        
    private enum Group {
            dbms, table, column
        }


        
    /**
         * 解析操作碼
         * 
         * 
    @author wilesun
         * @create 2007-11-3
         
    */

        
    private enum Target {
            
    /**
             * dbms
             
    */

            dbms(
    "o:DBMS"),
            
    /**
             * dbms名稱
             
    */

            dbmsName(
    "a:Name""dbmsName", Group.dbms),
            
    /**
             * dbms編碼
             
    */

            dbmsCode(
    "a:Code""dbmsCode", Group.dbms),
            
    /**
             * 表集合
             
    */

            tables(
    "c:Tables"),
            
    /**
             * 表
             
    */

            table(
    "o:Table"),
            
    /**
             * 表名稱
             
    */

            tableName(
    "a:Name""name", Group.table),
            
    /**
             * 表編碼
             
    */

            tableCode(
    "a:Code""code", Group.table),
            
    /**
             * 列集合
             
    */

            columns(
    "c:Columns"),
            
    /**
             * 列
             
    */

            column(
    "o:Column"),
            
    /**
             * 列名稱
             
    */

            columnName(
    "a:Name""name", Group.column),
            
    /**
             * 列編號
             
    */

            columnCode(
    "a:Code""code", Group.column),
            
    /**
             * 列格式
             
    */

            columnFormat(
    "a:Format""format", Group.column),
            
    /**
             * 列下拉
             
    */

            columnList(
    "a:ListOfValues""list", Group.column),
            
    /**
             * 列類型
             
    */

            columnDataType(
    "a:DataType""dataType", Group.column),
            
    /**
             * 列長度
             
    */

            columnLength(
    "a:Length""length", Group.column),
            
    /**
             * 列強制
             
    */

            columnMandatory(
    "a:Mandatory""mandatory", Group.column);

            
    // 操作碼標識
            private String id;

            
    private String ob;

            
    private Group og;

            
    /**
             * 只根據標識,無組和操作構造
             * 
             * 
    @param id
             
    */

            Target(String id) 
    {
                
    this.id = id;
            }


            
    /**
             * 根據標識和操作做內部構造
             * 
             * 
    @param id
             
    */

            Target(String id, String ob, Group og) 
    {
                
    this.id = id;
                
    this.ob = ob;
                
    this.og = og;
            }

        }

    }
    posted on 2007-11-14 23:09 wilesun 閱讀(1829) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲国产午夜精品理论片在线播放| 亚洲欧美国产日韩av野草社区| 亚洲精品视频在线观看免费| 亚洲精品中文字幕无乱码麻豆| 国内大片在线免费看| 亚洲高清无码在线观看| 国产精品美女久久久免费| 亚洲国产成人久久综合碰碰动漫3d | 亚洲春色在线视频| 91高清免费国产自产| 国产精品亚洲专一区二区三区| 亚洲精品自产拍在线观看| 国产1000部成人免费视频| 黄页免费视频播放在线播放| 久久精品国产亚洲AV麻豆王友容| 最近中文字幕无吗高清免费视频| 国产A∨免费精品视频| 亚洲乱码在线观看| 亚洲一区爱区精品无码| 嫩草影院在线免费观看| 国产午夜无码精品免费看动漫| 亚洲码欧美码一区二区三区| 亚洲精品无码久久一线| 日本一道一区二区免费看| 毛片无码免费无码播放| 人妻无码中文字幕免费视频蜜桃| 91亚洲精品自在在线观看| 中文字幕中韩乱码亚洲大片| 四虎国产精品免费永久在线| 亚洲欧洲专线一区| 亚洲尹人九九大色香蕉网站| 亚洲国产精品丝袜在线观看| 黄页免费的网站勿入免费直接进入| 美女网站在线观看视频免费的| 亚洲av无码专区首页| 亚洲日韩中文字幕天堂不卡 | 国产成人精品日本亚洲专一区| 亚洲精品中文字幕乱码三区| 国产jizzjizz免费视频| 91香蕉视频免费| 99久久久国产精品免费牛牛|