`

用xml建立仓库的逻辑层的操作

    博客分类:
  • XML
 
阅读更多
package com.repositoryclient.xml;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.StringBufferInputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
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 javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import com.repositoryclient.treeview.FileNode;

public class RepositoryConstructionOption {
    //-------------------------------------------------------------------------------------

    private DocumentBuilderFactory factory;
    private Element node;
    private Element model;
    private DocumentBuilder documentBuilder;
    private Document document;
    private String filePath="./xml/Test1.xml";
    private String nodeType="Node";
    private String modelType="Model";
    private List wishList=new ArrayList<>();
    private StringBufferInputStream inputStream;
    private String xmlFileContent;
    //-------------------------------------------------------------------------------------

    public RepositoryConstructionOption(String xmlFileContent){
        this.xmlFileContent=xmlFileContent;
        setUpDomFactory();
    }
    
    private void setUpDomFactory(){
    factory=DocumentBuilderFactory.newInstance();
    try{
        inputStream=new StringBufferInputStream(xmlFileContent);
        factory.setIgnoringElementContentWhitespace(true);
        documentBuilder=factory.newDocumentBuilder();
        document=documentBuilder.parse(inputStream);    
        
    }catch(Exception e){
        e.printStackTrace();
    }
    }
    //-----------------------------------------------------------------------------------
    public void addNode(String targetNodePath,String newNodeName){
        Element newChild=document.createElement(newNodeName);
        newChild.setTextContent("\n");
        newChild.setAttribute("type", "Node");
        newChild.setAttribute("NodeName", newNodeName);
        newChild.setAttribute("NodePath", targetNodePath);
        newChild.setAttribute("NodeAuther", "Administrator");
        newChild.setAttribute("NodeSize", String.valueOf(0));
        SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");
        newChild.setAttribute("CreateData", date.format(new Date()));
        Element targetElement=(Element) selectSingleNode(targetNodePath, document);
        targetElement.appendChild(newChild);
        saveXml("./xml/Test1.xml", document);
    }
    public void deleteNode(String targetNodePath){
        Element targetElement=(Element) selectSingleNode(targetNodePath, document);
        targetElement.getParentNode().removeChild(targetElement);
        
        saveXml("./xml/Test1.xml", document);
    }
    public void renameNode(String targetNodePath,String newNodeName){
        Node targetNode=selectSingleNode(targetNodePath, document);
        document.renameNode(targetNode, null, newNodeName);
        saveXml("./xml/Test1.xml", document);
    }
    //-------------------------------------------------------------------------------------
    
    public void addModel(String targetNodePath,FileNode newModel,String[] Tags){
        Element newChild=document.createElement(newModel.getFileName());
        
        //设置Model的属性信息
        newChild.setAttribute("type", "Model");
        newChild.setAttribute("NodeName", newModel.getFileName());
        newChild.setAttribute("NodePath", newModel.getPath());
        newChild.setAttribute("NodeAuther", newModel.getAuthor());
        newChild.setAttribute("NodeSize", String.valueOf(newModel.getSize()));
        SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");
        newChild.setAttribute("CreateData", date.format(newModel.getDate()));

        //设置Model的Tag(标签),以后可能会添加通过Tag搜索的功能时会用到
        newChild.setAttribute("Tag0", Tags[0]);
        newChild.setAttribute("Tag1", Tags[1]);
        newChild.setAttribute("Tag2", Tags[2]);
        
        newChild.setNodeValue("Model");
        Element targetElement=(Element) selectSingleNode(targetNodePath, document);
        //添加Model到xml
        targetElement.appendChild(newChild);
        saveXml("./xml/Test1.xml", document);
    }
    public void deleteModel(String modelName){
        Element targetElement=(Element) selectSingleNode(modelName, document);
        targetElement.getParentNode().removeChild(targetElement);
        
        saveXml("./xml/Test1.xml", document);
    }
    //-------------------------------------------------------------------------------------
    public List getTheTree(String rootNodeName){
        List resultList=new ArrayList();
        Element targetNode=(Element) document.getElementsByTagName(rootNodeName).item(0);
        FileNode fatherNode=new FileNode("root", "Repository", 0, "Administrator", 0, new Date(), null, "Node");
        searchTheTree(targetNode,fatherNode);
        resultList.add(fatherNode);
        
        return resultList;
        
    }
    public void searchTheTree(Node rootNode,FileNode fatherNode){
        try {
        List childList=new ArrayList();
        Node node;
        NodeList childNodesList=rootNode.getChildNodes();
        for(int i=0;i<childNodesList.getLength();i++){
            node=childNodesList.item(i);
            if(node.getNodeName()!="#text"){
            //System.out.println("here:    "+node.getAttributes().item(0));
                NamedNodeMap nodeMap=node.getAttributes();
                if(nodeMap.getNamedItem("type").getNodeValue().equals(nodeType)){
                    //String property[]=new String[8];
                    String property[]=handleModelProperty(node);
                    SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");
                    FileNode subNode;
                    
                        subNode = new FileNode(property[0], property[1], 0, property[2], Long.valueOf(property[3]),date.parse(property[4]) , null, "Node");
                    
                    searchTheTree(node, subNode);
                    childList.add(subNode);
                }else{
                    //String property[]=new String[8];
                    String property[]=handleModelProperty(node);
                    SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");
                    FileNode subNode=new FileNode(property[0], property[1], 0, property[2], Long.valueOf(property[3]),date.parse(property[4]) , null, "Model");
                    childList.add(subNode);
                }
            }
        }
        fatherNode.setChildren(childList);
    }
        catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NumberFormatException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
    }
    public String[] handleModelProperty(Node node){
        String modelProperty[] = new String[8];;
        NamedNodeMap nodeMap=node.getAttributes();
        //System.out.println(nodeMap.getNamedItem("NodeName").getNodeValue());
        modelProperty[0]=nodeMap.getNamedItem("NodeName").getNodeValue();
        modelProperty[1]=nodeMap.getNamedItem("NodePath").getNodeValue();
        modelProperty[2]=nodeMap.getNamedItem("NodeAuther").getNodeValue();
        modelProperty[3]=nodeMap.getNamedItem("NodeSize").getNodeValue();
        modelProperty[4]=nodeMap.getNamedItem("CreateData").getNodeValue();
    if(nodeMap.getNamedItem("type").getNodeValue().equals(modelType))
    {
        modelProperty[5]=nodeMap.getNamedItem("Tag0").getNodeValue();
        modelProperty[6]=nodeMap.getNamedItem("Tag1").getNodeValue();
        modelProperty[7]=nodeMap.getNamedItem("Tag2").getNodeValue();
    }
        return modelProperty;
        
    }
    public List searchModelByKeyWords(String rootNodeName,String keywords){
        Element targetNode=(Element) document.getElementsByTagName(rootNodeName).item(0);
        wishList.clear();
        getTheList(targetNode,0,keywords);
        
        return wishList;
    }
    
    public List getUsersOwnedFiles(String rootNodeName,String author){
        Element targetNode=(Element) document.getElementsByTagName(rootNodeName).item(0);
        wishList.clear();
        getTheList(targetNode,-1,author);
        
        return wishList;
        
    }
    /**
     * 
     * @param rootNode
     * @param key  (-1:getUsersOwnedFiles 0:searchModelByKeyWords)
     */
    public void getTheList(Node rootNode,int key,String requirement){
        try{
        Node node;
        NodeList childNodesList=rootNode.getChildNodes();
        for(int i=0;i<childNodesList.getLength();i++){
            node=childNodesList.item(i);
            if(node.getNodeName()!="#text"){
                NamedNodeMap nodeMap=node.getAttributes();
                if(nodeMap.getNamedItem("type").getNodeValue().equals(nodeType)){
                    getTheList(node, key,requirement);
                }else{
                    String property[]=handleModelProperty(node);
                    SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");
                    FileNode subNode=new FileNode(property[0], property[1], 0, property[2], Long.valueOf(property[3]),date.parse(property[4]) , null, "Model");
                    switch (key) {
                    case -1://getUsersOwnedFiles
                        if(requirement.equals(subNode.getAuthor())){
                            wishList.add(subNode);
                        }
                        break;

                    default://searchModelByKeyWords
                        if(requirement.contains(property[5]) || requirement.contains(property[6]) || requirement.contains(property[7]) || property[5].contains(requirement) || property[6].contains(requirement) || property[7].contains(requirement)){
                            wishList.add(subNode);
                        }
                        break;
                    }
                }
            }
        }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    //-------------------------------------------------------------------------------------
    public void saveXml(String fileName, Document doc) {//将Document输出到文件
        TransformerFactory transFactory=TransformerFactory.newInstance();
        try {
            Transformer transformer = transFactory.newTransformer();
            transformer.setOutputProperty("indent", "yes");

            DOMSource source=new DOMSource();
            source.setNode(doc);
            StreamResult result=new StreamResult();
            result.setOutputStream(new FileOutputStream(fileName));
            
            transformer.transform(source, result);
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        } catch (TransformerException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }   
    }
    public Node selectSingleNode(String express, Object source) {//查找节点,并返回第一个符合条件节点
        Node result=null;
        XPathFactory xpathFactory=XPathFactory.newInstance();
        XPath xpath=xpathFactory.newXPath();
        try {
            result=(Node) xpath.evaluate(express, source, XPathConstants.NODE);
        } catch (XPathExpressionException e) {
            e.printStackTrace();
        }
        
        return result;
    }
    //-------------------------------------------------------------------------------------

}

 

分享到:
评论

相关推荐

    会计数据仓库建立探讨【会计实务操作教程】.pptx

    数据模型分为概念模型、逻辑模型和物理模型,它们分别对应于对现实世界的抽象描述、数据仓库逻辑结构的定义以及实际存储在硬件上的数据布局。确定主题域是数据仓库设计的首要任务,例如,可以按照资产负债表、利润表...

    数据仓库-数据挖掘-XML.docx

    - **物理数据模型构建**:基于逻辑模型建立物理模型。 - **ETL流程开发**:编写具体的ETL脚本或使用工具。 - **性能优化**:测试和调整系统性能。 4. **部署和维护**: - **数据加载**:将数据加载到数据仓库中...

    会计数据仓库建立探讨.docx

    会计数据仓库建立探讨 随着会计信息化的发展,我国的会计软件种类也越来越多,但是往往都自成体系,采用的数据库平台和数据结构也就大不相同。由此使得不同的会计软件之间,以及会计软件与会计数据相关的业务软件...

    仓库管理系统 java

    6. **MyBatis框架**:MyBatis是一个持久层框架,它将SQL与Java代码分离,通过XML或注解配置映射SQL语句,简化了数据库操作。在仓库系统中,MyBatis可以便捷地执行CRUD操作。 7. **前端技术**:可能采用了HTML、CSS...

    java仓库管理系统

    JDBC提供了连接、查询、更新和删除数据库数据的能力,使得在仓库管理系统中实现库存的增删改查操作变得简单而高效。 首先,了解Java仓库管理系统的基本架构至关重要。通常,此类系统会包含以下几个关键模块: 1. ...

    JavaWeb基于SSM框架的仓库管理系统_SS2374_ssm_管理系统javawed_javawebwms仓库_barcoh

    JavaWeb基于SSM框架的仓库管理系统是一个典型的后端开发项目,使用了Spring、SpringMVC和MyBatis三个核心组件,构建了一个高效、灵活的业务处理平台。下面将详细介绍SSM框架及其在仓库管理中的应用。 **Spring框架*...

    JAVA仓库管理系统,好理解的自定义框架!初学框架的人注意啦!!

    自定义框架可能包含了一些基本功能模块,如数据访问层(DAO)、业务逻辑层(Service)以及视图展示层(如JSP)。这种框架的创建,旨在简化开发流程,提高代码复用性,并使项目更易于维护。 在"JAVA仓库管理系统"中...

    JDBC.zip_仓库管理_仓库管理系统

    【标题解析】: "JDBC.zip_仓库管理_仓库管理系统" 这个标题表明这是一个关于仓库管理系统相关的项目,其中可能包含使用JDBC(Java Database Connectivity)技术实现的数据库交互部分。JDBC是Java中用于与各种数据库...

    Delphi--仓库管理系统代码

    例如,使用TDBGrid显示库存数据,TButton进行操作,TEdit输入信息,通过事件处理实现业务逻辑。 3. 业务逻辑处理:在Delphi中,业务逻辑主要通过编写Pascal代码实现。例如,入库操作可能涉及验证商品信息、更新库存...

    数据仓库建设方案.doc.pdf

    联邦技术将不同来源的数据整合为逻辑数据库,允许用户无缝操作;复制技术通过捕获源数据库日志,实时复制增量数据,进行数据转换和加载,确保数据的完整性和及时性。 3. 数据清洗与转换 在数据仓库建设中,数据清洗...

    springboot+mybatis+sqlserver 仓库管理系统

    5. 实现Service:编写业务逻辑层代码,处理增删改查等操作。 6. 前端界面:使用MiniUI组件设计交互界面,通过Ajax调用后端API实现功能。 7. 测试与优化:进行单元测试和集成测试,确保系统功能正常,然后根据性能...

    数据仓库建设方案.pdf

    这涉及到从各种异构或同构数据源(如关系型数据库、XML、Excel文件等)中提取数据,经过整合、清洗、转换后存储在数据仓库中,确保数据的一致性、完整性、准确性和及时性。通过这种方式,企业可以为决策支持系统提供...

    基于Android的仓库管理系统的设计与实现.pdf

    4. **技术选型**:选择Android SDK作为开发工具,结合SQLite数据库存储数据,可能还会使用到网络技术如HTTP或HTTPS进行远程数据同步,以及JSON或XML格式进行数据交换。 5. **安全性与性能优化**:考虑到数据安全,...

    XX商业银行数据仓库建设方案.docx

    联邦技术允许银行将多个数据源组合成一个逻辑数据库,简化数据操作;复制技术则通过捕获源数据库日志,实现实时增量数据复制,以处理大数据量和高并发访问需求。 数据清洗、转换和加载是信息服务总线的重要任务,...

    IBATIS建立的数据库连接

    在三层架构(表现层、业务逻辑层、数据访问层)中,IBATIS通常被用作数据访问层的工具,使得业务逻辑和数据操作更加清晰。 在三层架构中,表现层负责用户交互,业务逻辑层处理业务规则和流程,而数据访问层则负责与...

    数据仓库建设方案.doc

    数据源层包含各种类型的数据源,如关系型数据库、半结构化数据(XML、Excel)以及来自不同业务单位的数据。交换服务体系,由信息服务总线和服务总线构成,负责数据整合、转换和应用层信息交换。 信息服务总线采用...

    数据仓库技术在企业信息系统建设中的应用.docx

    文中特别强调了异种数据源集成、操作数据存储(ODS)层设计、ETL过程设计、仓库模型设计、元数据管理和专题数据挖掘等关键环节。 #### 引言 随着信息技术的快速发展,企业内部积累了大量的数据资源。然而,如何有效...

    物资仓库的JSP源码

    4. **数据库连接**:物资仓库系统必然涉及到数据库操作,如MySQL、Oracle或SQL Server。JDBC(Java Database Connectivity)是Java与数据库交互的标准API,用于建立连接、执行SQL语句和处理结果集。在JSP源码中,...

    JSP+Servlet+数据库的方式完成一个简易的库存商品管理系统

    4. 连接数据库:使用JDBC建立数据库连接,编写SQL语句执行数据操作。 5. 部署应用:将项目打包成WAR文件,部署到Tomcat或其他应用服务器上。 6. 测试:进行功能测试和性能测试,确保系统稳定运行。 在实际开发过程...

Global site tag (gtag.js) - Google Analytics