Package de.FeatureModellingTool.PatternBase.store

Source Code of de.FeatureModellingTool.PatternBase.store.PatternBaseStoreImplementation

package de.FeatureModellingTool.PatternBase.store;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;

import component.FComponent;

import de.FeatureModellingTool.FeatureModel.store.FmdlParser;
import de.FeatureModellingTool.FeatureModel.store.FmdlParserPrototype;
import de.FeatureModellingTool.PatternBase.Pattern;
import de.FeatureModellingTool.PatternBase.PatternBase;
import de.FeatureModellingTool.PatternBase.PatternBaseImplementation;
import de.FeatureModellingTool.PatternBase.Templete;

/**
*   author:chenting
*  date:2007-12-4
*   time:����07:48:43
*/
public class PatternBaseStoreImplementation implements PatternBaseStore {

    FmdlParser fmParser;

    public PatternBaseStoreImplementation() {
        fmParser = new FmdlParserPrototype();
    }

    public void savePl(OutputStream outStream, PatternBase patternBase)
            throws IOException, JDOMException {
        Namespace xsi = Namespace.getNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
        Namespace pbd = Namespace.getNamespace("pbd", "http://sei.pku.edu.cn/DomainEngineering/PatternBase");

        Document doc = new Document(new Element("patternBase", pbd));

        Element root = doc.getRootElement();

        root.setAttribute("schemaLocation", "http://sei.pku.edu.cn/DomainEngineering/patternBase  patternBase.xsd", xsi).setAttribute("name", patternBase.getName());

        Element patternList = new Element("patternList", pbd);
        root.addContent(patternList);

        Element templeteList = new Element("templeteList", pbd);
        root.addContent(templeteList);

        Map<String, Pattern> allPatterns = patternBase.getAllPatterns();
        Iterator patternIterator = allPatterns.values().iterator();
        //�洢����ģʽ
        while (patternIterator.hasNext()) {
            Pattern pattern = (Pattern) patternIterator.next();
            String patternName = pattern.getName();
            String description = pattern.getDescription();

            description = _encode(description);

            Element patternElement = new Element("pattern", pbd);
            patternElement.setAttribute("name", patternName);
            patternElement.addContent(new Element("description", pbd).addContent(description));

            //���и�����洢��������
            if (pattern.getParentPattern() != null) {
                Element parent = new Element("parent", pbd);
                String parentName = pattern.getParentPattern().getName();
                parent.setAttribute("name", parentName);
                patternElement.addContent(parent);
            }
            Element childrenElement = new Element("childrenList", pbd);

            //�洢��ģʽ��������ģʽ����
            List<Pattern> childrenPattern = pattern.getChildrenPatterns();
            if (!childrenPattern.isEmpty()) {
                Element childPatternElement = new Element("childPatternList", pbd);
                Iterator childPatternIterator = childrenPattern.iterator();
                while (childPatternIterator.hasNext()) {
                    Pattern childPattern = (Pattern) childPatternIterator.next();
                    String childPatternName = childPattern.getName();
                    childPatternElement.addContent(new Element("pattern", pbd).setAttribute("name", childPatternName));
                }
                childrenElement.addContent(childPatternElement);
            }
            //�洢��ģʽ��������ģ������
            List<Templete> childrenTemplete = pattern.getChildrenTempletes();
            if (!childrenTemplete.isEmpty()) {
                Element childTempleteElement = new Element("childTempleteList", pbd);
                Iterator childTempleteIterator = childrenTemplete.iterator();
                while (childTempleteIterator.hasNext()) {
                    Templete childTemplete = (Templete) childTempleteIterator.next();
                    String childTempleteName = childTemplete.getName();
                    childTempleteElement.addContent(new Element("templete", pbd).setAttribute("name", childTempleteName));
                }
                childrenElement.addContent(childTempleteElement);
            }
            patternElement.addContent(childrenElement);
            //�Ѹ�ģʽ����ģʽ�б�
            patternList.addContent(patternElement);
        }
        //�洢����ģ��
        Map<String, Templete> allTempletes = patternBase.getAllTempletes();
        Iterator templeteIterator = allTempletes.values().iterator();
        while (templeteIterator.hasNext()) {
            Templete templete = (Templete) templeteIterator.next();
            String templeteName = templete.getName();
            Element templeteElement = new Element("templete", pbd);
            templeteElement.setAttribute("name", templeteName);
            String parentType;
            String parentName;
            //���ø���������ģʽ��Ҳ������ģ��
            if (templete.getParentType() == "templete") {
                parentType = "templete";
                parentName = ((Templete) templete.getParent()).getName();
            } else {
                parentType = "pattern";
                parentName = ((Pattern) templete.getParent()).getName();
            }
            Element parentElement = new Element("parent", pbd);
            parentElement.setAttribute("type", parentType).setAttribute("name", parentName);
            templeteElement.addContent(parentElement);

            List<Templete> tChildTempletes = templete.getChildrenTempletes();
            if (!tChildTempletes.isEmpty()) {
                Element tChildTempleteElement = new Element("childTempleteList", pbd);
                Iterator tChildTempleteIterator = tChildTempletes.iterator();
                while (tChildTempleteIterator.hasNext()) {
                    Templete tChildTemplete = (Templete) tChildTempleteIterator.next();
                    String tChildTempleteName = tChildTemplete.getName();
                    Element childElement = new Element("Templete", pbd);
                    childElement.setAttribute("name", tChildTempleteName);
                    tChildTempleteElement.addContent(childElement);
                }
                templeteElement.addContent(tChildTempleteElement);
            }
            templeteList.addContent(templeteElement);
        }
        XMLOutputter fmt = new XMLOutputter("  ", true, "GB2312");
        fmt.output(doc, outStream);
    }

    public void saveFm(OutputStream outStream, Templete templete)
            throws IOException, JDOMException {
        fmParser.saveFmdl(outStream, templete.getFeatureModel());
    }

    public void saveCm(OutputStream outStream, Templete templete)
            throws IOException, JDOMException {
        fmParser.saveCmdl(outStream, templete.getConstraintModel(), templete.getFeatureModel());
    }

    public void savePa(OutputStream outStream, Templete templete)
            throws IOException, JDOMException {
        Namespace xsi = Namespace.getNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
        Namespace pad = Namespace.getNamespace("pad", "http://sei.pku.edu.cn/DomainEngineering/parameters");

        Document doc = new Document(new Element("Parameters", pad));

        Element root = doc.getRootElement();
        root.setAttribute("schemaLocation", "http://sei.pku.edu.cn/DomainEngineering/Parameter  Parameter.xsd", xsi).setAttribute("name", templete.getName());

        Map featureParameter = templete.getParameters().getFeatureNumMap();
        Iterator featureParameterIterator = featureParameter.keySet().iterator();

        while (featureParameterIterator.hasNext()) {
            String featureId = (String) featureParameterIterator.next();
            String instanceNum = featureParameter.get(featureId).toString();
            Element featureElement = new Element("feature", pad);
            featureElement.setAttribute("ID", featureId).addContent(instanceNum);
            root.addContent(featureElement);
        }

        XMLOutputter fmt = new XMLOutputter("  ", true, "GB2312");
        fmt.output(doc, outStream);
    }

    public PatternBase openPl(InputStream inputStream, String baseType)
            throws IOException, JDOMException {
        PatternBase patternBase = new PatternBaseImplementation();
        patternBase.setBaseType(baseType);
        Namespace pbd = Namespace.getNamespace("pbd", "http://sei.pku.edu.cn/DomainEngineering/PatternBase");

        SAXBuilder saxBuilder = new SAXBuilder(false);
        Document doc = saxBuilder.build(inputStream);

        Element root = doc.getRootElement();
        patternBase.setName(root.getAttributeValue("name"));
        //�������patternʵ��
        Element patternList = root.getChild("patternList", pbd);
        Iterator patternIterator = patternList.getChildren().iterator();
        while (patternIterator.hasNext()) {
            Element patternElement = (Element) patternIterator.next();
            patternBase.addPattern(patternElement.getAttributeValue("name"));
        }
        //�������templeteʵ��
        Element templeteList = root.getChild("templeteList", pbd);
        Iterator templeteIterator = templeteList.getChildren().iterator();
        while (templeteIterator.hasNext()) {
            Element templeteElement = (Element) templeteIterator.next();
            patternBase.addTemplete(templeteElement.getAttributeValue("name"));
        }
        //Ϊ���е�ÿһ��ģʽ����������ԣ�����ģʽ��������������
        Iterator patternIteratorAgain = patternList.getChildren().iterator();

        while (patternIteratorAgain.hasNext()) {
            Element patternElement = (Element) patternIteratorAgain.next();
            Pattern pattern = patternBase.getPattern(patternElement.getAttributeValue("name"));
            String description = patternElement.getChild("description", pbd).getTextNormalize();
            description = _decode(description);
            pattern.setDescription(description);

            Element parent = patternElement.getChild("parent", pbd);
            if (parent != null) {
                Pattern parentPattern = patternBase.getPattern(parent.getAttributeValue("name"));
                pattern.setParentPattern(parentPattern);
            }

            Element childrenList = patternElement.getChild("childrenList", pbd);
            Element childrenPatternList = childrenList.getChild("childPatternList", pbd);
            Element childrenTempleteList = childrenList.getChild("childTempleteList", pbd);

            if (childrenPatternList != null) {
                Iterator childrenPatternIterator = childrenPatternList.getChildren().iterator();
                while (childrenPatternIterator.hasNext()) {
                    Element childPatternElement = (Element) childrenPatternIterator.next();
                    Pattern childPattern = patternBase.getPattern(childPatternElement.getAttributeValue("name"));
                    pattern.addChildPattern(childPattern);
                }
            }

            if (childrenTempleteList != null) {
                Iterator childrenTempleteIterator = childrenTempleteList.getChildren().iterator();
                while (childrenTempleteIterator.hasNext()) {
                    Element childTempleteElement = (Element) childrenTempleteIterator.next();
                    Templete childTemplete = patternBase.getTemplete(childTempleteElement.getAttributeValue("name"));
                    pattern.addChildTemplete(childTemplete);
                }
            }
        }

        Iterator templeteIteratorAgain = templeteList.getChildren().iterator();
        while (templeteIteratorAgain.hasNext()) {
            Element templeteElement = (Element) templeteIteratorAgain.next();
            Templete templete = patternBase.getTemplete(templeteElement.getAttributeValue("name"));

            Element parent = templeteElement.getChild("parent", pbd);
            if (parent.getAttributeValue("type") == "templete") {
                Templete parentTemplete = patternBase.getTemplete(parent.getAttributeValue("name"));
                templete.setParentTemplete(parentTemplete);
            } else {
                Pattern parentPattern = patternBase.getPattern(parent.getAttributeValue("name"));
                templete.setParentPattern(parentPattern);
            }

            Element childList = templeteElement.getChild("childTempleteList", pbd);
            if (childList != null) {
                Iterator childTempleteIterator = childList.getChildren().iterator();
                while (childTempleteIterator.hasNext()) {
                    Element childTempleteElement = (Element) childTempleteIterator.next();
                    Templete childTemplete = patternBase.getTemplete(childTempleteElement.getAttributeValue("name"));
                    templete.addChildTemplete(childTemplete);
                }
            }
        }
        return patternBase;
    }

    public FComponent openFm(InputStream inputstream)
            throws IOException, JDOMException {
        return fmParser.openFmdl(inputstream);
    }

    public void openCm(InputStream inputstream, Templete templete)
            throws IOException, JDOMException {
        fmParser.openCmdl(inputstream, templete.getFComponent());
    }

    public void openPa(InputStream inputstream, Templete templete)
            throws IOException, JDOMException {
        SAXBuilder saxBuilder = new SAXBuilder(false);
        Document doc = saxBuilder.build(inputstream);

        Element root = doc.getRootElement();
        Iterator featureParameterIterator = root.getChildren().iterator();
        while (featureParameterIterator.hasNext()) {
            Element featureParameterElement = (Element) featureParameterIterator.next();
            String featureId = featureParameterElement.getAttributeValue("ID");
            Integer featureNum = new Integer(featureParameterElement.getTextNormalize());
            templete.getParameters().getFeatureNumMap().put(featureId, featureNum);
        }
    }

    protected static String _encode(String in) {
        String out = in;
        out = out.replaceAll("\u0020", "#x20");
        out = out.replaceAll("\u0009", "#x09");
        out = out.replaceAll("\n", "#x0a");
        out = out.replaceAll("\r", "#x0d");
        return out;
    }

//  decode:��ԭXML����
    protected static String _decode(String in) {
        String out = in;
        out = out.replaceAll("#x20", "\u0020");
        out = out.replaceAll("#x09", "\u0009");
        out = out.replaceAll("#x0a", "\n");
        out = out.replaceAll("#x0d", "\r");
        return out;
    }
}
TOP

Related Classes of de.FeatureModellingTool.PatternBase.store.PatternBaseStoreImplementation

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.