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

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

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

    編程生活

       :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      113 隨筆 :: 0 文章 :: 18 評論 :: 0 Trackbacks
    由于項(xiàng)目需要做了一個(gè)從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;

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

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

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

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

        
    // 上一次路徑,元素之間用/進(jìn)行分隔,屬性則采用@來標(biāo)識,這是借用了XPath的規(guī)范
        private String lastPath = "";

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

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


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

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


        
    /**
         * 啟動(dòng)元素解析
         * 
         * 
    @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;

            
    // 設(shè)置路徑
            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)) {
                    
    // 新建一個(gè)表
                    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;
        }


        
    /**
         * 結(jié)束元素解析
         * 
         * 
    @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 {
            
    // 管理是否結(jié)束schema的解析
            if (!doing)
                
    return;

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

            
    // 恢復(fù)路徑狀態(tài)
            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;
        }


        
    /**
         * 根據(jù)標(biāo)識找符合標(biāo)識的東西
         * 
         * 
    @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),
            
    /**
             * 列強(qiáng)制
             
    */

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

            
    // 操作碼標(biāo)識
            private String id;

            
    private String ob;

            
    private Group og;

            
    /**
             * 只根據(jù)標(biāo)識,無組和操作構(gòu)造
             * 
             * 
    @param id
             
    */

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


            
    /**
             * 根據(jù)標(biāo)識和操作做內(nèi)部構(gòu)造
             * 
             * 
    @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)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲日本一区二区三区在线 | 亚洲午夜在线播放| 91亚洲国产成人久久精品| 亚洲avav天堂av在线网爱情| 亚洲AV第一成肉网| 久久www免费人成看国产片| 免费福利电影在线观看| 日韩版码免费福利视频| 国产精品四虎在线观看免费| 中文字幕亚洲电影| 老司机亚洲精品影院| 亚洲熟女www一区二区三区| 青青草97国产精品免费观看| 日韩视频在线观看免费| 日本片免费观看一区二区| 国产在线98福利播放视频免费| 自拍偷自拍亚洲精品第1页| 亚洲精品免费在线视频| 久久久久亚洲精品无码网址色欲 | 亚洲一二成人精品区| 亚洲中文字幕无码爆乳app| 深夜a级毛片免费无码| 免费高清国产视频| 成人毛片免费视频| 亚洲人成人一区二区三区| 亚洲日韩中文字幕| 免费很黄无遮挡的视频毛片| **一级一级毛片免费观看| 免费一级毛片在线播放| 久久国产亚洲高清观看| 精品一区二区三区无码免费直播| 久久青草免费91观看| 国产精品视频免费一区二区三区 | 2048亚洲精品国产| 亚洲国产理论片在线播放| 日韩少妇内射免费播放| 免费观看激色视频网站bd| 国产精品亚洲美女久久久| 亚洲高清有码中文字| 热99RE久久精品这里都是精品免费| 四虎成人免费网址在线|