From e9148ddcf7ad01b12e5581fd269ed817cb9a9f0b Mon Sep 17 00:00:00 2001 From: "gyeongmin.ju" Date: Mon, 3 Feb 2014 20:33:56 +0900 Subject: [PATCH] UIB: remove dom4j library Signed-off-by: gyeongmin.ju Change-Id: I64078ac19bd23567d44a639c7434f1c37304fa0a --- org.tizen.webuibuilder/.classpath | 1 - org.tizen.webuibuilder/META-INF/MANIFEST.MF | 1 - .../lib/._dom4j-1.6.1.jar8983304010697422749.tmp | Bin 313898 -> 0 bytes org.tizen.webuibuilder/lib/dom4j-1.6.1.jar | Bin 313898 -> 0 bytes .../TransformedFigureResizeHandleLocator.java | 6 +- .../model/descriptor/AnimatorDescriptorReader.java | 81 +- .../webuibuilder/builder/WebUIBuilderBuilder.java | 2 +- .../webuibuilder/model/app/AppManagerForHTML.java | 65 +- .../webuibuilder/model/app/io/AppMetaReader.java | 59 +- .../model/app/io/AppMetaReader_ver_1.java | 156 ++- .../model/app/io/AppMetaReader_ver_2.java | 209 +-- .../webuibuilder/model/app/io/AppMetaWriter.java | 40 +- .../model/app/io/AppMetaWriter_ver_1.java | 172 +-- .../model/app/io/AppMetaWriter_ver_2.java | 216 +-- .../webuibuilder/model/app/io/HtmlMetaReader.java | 111 +- .../model/app/io/HtmlMetaReader_ver_1.java | 230 ++-- .../webuibuilder/model/app/io/HtmlMetaWriter.java | 48 +- .../model/app/io/HtmlMetaWriter_ver_1.java | 234 ++-- .../model/css/io/CssDescriptorReader.java | 106 +- .../model/descriptors/DescriptorManager.java | 3 +- .../tizen/webuibuilder/model/html/HtmlReader.java | 23 +- .../tizen/webuibuilder/model/html/HtmlWriter.java | 2 +- .../tizen/webuibuilder/model/io/CodeGenerator.java | 700 +++++----- .../webuibuilder/model/io/DescriptorReader.java | 1392 ++++++++++---------- .../model/io/DescriptorReader_ver_1.java | 710 ---------- .../model/io/DescriptorReader_ver_2.java | 710 ---------- .../tizen/webuibuilder/model/io/FileReader.java | 30 +- .../tizen/webuibuilder/model/io/HTMLWriter2.java | 85 -- .../tizen/webuibuilder/model/io/PageReader.java | 23 +- .../webuibuilder/model/io/PageReader_ver_1.java | 250 ++-- .../webuibuilder/model/io/PageReader_ver_2.java | 190 +-- .../tizen/webuibuilder/model/io/PageWriter.java | 215 +-- .../webuibuilder/model/io/PageWriter_ver_1.java | 205 +-- .../webuibuilder/model/io/PageWriter_ver_2.java | 152 +-- .../webuibuilder/model/io/SAXContentHandler2.java | 235 ---- .../webuibuilder/model/io/TizenFileFormatter.java | 49 +- .../webuibuilder/model/page/PageDataForHTML.java | 5 +- .../webuibuilder/model/project/ProjectManager.java | 63 +- .../model/project/io/ProjectReader.java | 41 +- .../model/project/io/ProjectReader_ver_1.java | 156 ++- .../model/project/io/ProjectReader_ver_2.java | 131 +- .../model/project/io/ProjectWriter.java | 72 +- .../model/project/io/ProjectWriter_ver_1.java | 186 +-- .../model/project/io/ProjectWriter_ver_2.java | 120 +- .../webuibuilder/snippet/converter/Converter.java | 159 ++- .../ui/views/properties/style/CssStyleTab.java | 22 +- 46 files changed, 3216 insertions(+), 4450 deletions(-) delete mode 100644 org.tizen.webuibuilder/lib/._dom4j-1.6.1.jar8983304010697422749.tmp delete mode 100644 org.tizen.webuibuilder/lib/dom4j-1.6.1.jar delete mode 100644 org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/DescriptorReader_ver_1.java delete mode 100644 org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/DescriptorReader_ver_2.java delete mode 100644 org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/HTMLWriter2.java delete mode 100644 org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/SAXContentHandler2.java diff --git a/org.tizen.webuibuilder/.classpath b/org.tizen.webuibuilder/.classpath index a6ac688..a4e4a3a 100644 --- a/org.tizen.webuibuilder/.classpath +++ b/org.tizen.webuibuilder/.classpath @@ -7,7 +7,6 @@ - diff --git a/org.tizen.webuibuilder/META-INF/MANIFEST.MF b/org.tizen.webuibuilder/META-INF/MANIFEST.MF index a45bbd5..eb0d65d 100644 --- a/org.tizen.webuibuilder/META-INF/MANIFEST.MF +++ b/org.tizen.webuibuilder/META-INF/MANIFEST.MF @@ -43,7 +43,6 @@ Import-Package: org.eclipse.core.filesystem, Export-Package: org.tizen.webuibuilder.extintrf, org.tizen.webuibuilder.ui.editor Bundle-ClassPath: ., - lib/dom4j-1.6.1.jar, lib/opal-0.9.5.jar, lib/org.eclipse.nebula.widgets.gallery_0.6.0.201307092147.jar, lib/org.eclipse.nebula.widgets.gallery.source_0.6.0.201307092147.jar, diff --git a/org.tizen.webuibuilder/lib/._dom4j-1.6.1.jar8983304010697422749.tmp b/org.tizen.webuibuilder/lib/._dom4j-1.6.1.jar8983304010697422749.tmp deleted file mode 100644 index c8c4dbb92d6c23a7fbb2813eb721eb4cce91750c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 313898 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

^<7W@(9yr9mUm2tK?C|&v@%Rm35X`o{%fo+w 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%0A?GZzYp7)bLPx}z&<;hZaX^DZ#RA|ACLXD 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%0Aok&dtGbv;D|BgjT@f(sv0`S4#(FudZ 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 diff --git a/org.tizen.webuibuilder/lib/dom4j-1.6.1.jar b/org.tizen.webuibuilder/lib/dom4j-1.6.1.jar deleted file mode 100644 index c8c4dbb92d6c23a7fbb2813eb721eb4cce91750c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 313898 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

^<7W@(9yr9mUm2tK?C|&v@%Rm35X`o{%fo+w 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%0A?GZzYp7)bLPx}z&<;hZaX^DZ#RA|ACLXD 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%0Aok&dtGbv;D|BgjT@f(sv0`S4#(FudZ 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 diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/handles/TransformedFigureResizeHandleLocator.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/handles/TransformedFigureResizeHandleLocator.java index 8250c0d..8926675 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/handles/TransformedFigureResizeHandleLocator.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/handles/TransformedFigureResizeHandleLocator.java @@ -89,8 +89,10 @@ public class TransformedFigureResizeHandleLocator extends RelativeLocator { if (owner.getModel() instanceof Part) { Part part = (Part) owner.getModel(); // Rectangle bounds = part.getPosition().getCopy(); - Rectangle bounds = part.getAniPosition().getCopy(); - return bounds; + if(part.getAniPosition() != null){ + Rectangle bounds = part.getAniPosition().getCopy(); + return bounds; + } } return super.getReferenceBox(); } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/model/descriptor/AnimatorDescriptorReader.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/model/descriptor/AnimatorDescriptorReader.java index e85bc56..ce2e584 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/model/descriptor/AnimatorDescriptorReader.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/model/descriptor/AnimatorDescriptorReader.java @@ -23,12 +23,18 @@ package org.tizen.webuibuilder.animator.model.descriptor; +import java.io.IOException; +import java.net.URISyntaxException; import java.net.URL; -import org.dom4j.Document; -import org.dom4j.DocumentException; -import org.dom4j.Element; -import org.dom4j.io.SAXReader; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; /** @@ -71,67 +77,78 @@ public class AnimatorDescriptorReader { * @param descriptorPath */ public void parse(URL descriptorPath) { - SAXReader reader = new SAXReader(); + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = null; Document doc = null; - + try { - doc = reader.read(descriptorPath); - } catch (DocumentException e) { + builder = factory.newDocumentBuilder(); + doc = builder.parse(descriptorPath.toURI().toString()); + } catch (URISyntaxException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (ParserConfigurationException e) { + e.printStackTrace(); + } catch (SAXException e) { e.printStackTrace(); } - if (doc != null && doc.getRootElement() != null) { - parseRoot(doc.getRootElement()); + if (doc != null && doc.getDocumentElement() != null) { + parseRoot(doc.getDocumentElement()); } } private void parseRoot(Element root) { - for (Object childObj : root.elements(ELEM_ANIMATION)) { - parseAnimation((Element) childObj, new CssAnimationDescriptor()); + NodeList elemList = root.getElementsByTagName(ELEM_ANIMATION); + for (int i = 0; i < elemList.getLength(); i++) { + parseAnimation((Element) elemList.item(i), new CssAnimationDescriptor()); } } private void parseAnimation(Element elem, CssAnimationDescriptor cssAnimation) { - String id = elem.attributeValue(ATTR_ID); - String displayName = elem.attributeValue(ATTR_DISPLAYNAME); - String iconPathSmall = elem.attributeValue(ATTR_SMALLICON); - String iconPath16 = elem.attributeValue(ATTR_ICON_16); - String description = elem.attributeValue(ATTR_DESCRIPTION); - String category = elem.attributeValue(ATTR_CATEGORY); + String id = elem.getAttribute(ATTR_ID); + String displayName = elem.getAttribute(ATTR_DISPLAYNAME); + String iconPathSmall = elem.getAttribute(ATTR_SMALLICON); + String iconPath16 = elem.getAttribute(ATTR_ICON_16); + String description = elem.getAttribute(ATTR_DESCRIPTION); + String category = elem.getAttribute(ATTR_CATEGORY); cssAnimation.init(id, displayName, iconPath16, iconPathSmall, category, description); - for (Object propertyObj : elem.elements(ELEM_PROPERTY)) { - parseProperty((Element) propertyObj, cssAnimation); + NodeList elemList = elem.getElementsByTagName(ELEM_PROPERTY); + for (int i = 0; i < elemList.getLength(); i++) { + parseProperty((Element) elemList.item(i), cssAnimation); } manager.addCssAnimationDescriptor(cssAnimation); } private void parseProperty(Element elem, CssAnimationDescriptor animationDescriptor) { - String name = elem.attributeValue(ATTR_NAME); - String type = elem.attributeValue(ATTR_TYPE); - String displayName = elem.attributeValue(ATTR_DISPLAYNAME); - String defaultValue = elem.attributeValue(ATTR_DEFAULT); - String initValue = elem.attributeValue(ATTR_INITVALUE); + String name = elem.getAttribute(ATTR_NAME); + String type = elem.getAttribute(ATTR_TYPE); + String displayName = elem.getAttribute(ATTR_DISPLAYNAME); + String defaultValue = elem.getAttribute(ATTR_DEFAULT); + String initValue = elem.getAttribute(ATTR_INITVALUE); CssAnimationPropertyDescriptor property = new CssAnimationPropertyDescriptor(); property.init(name, type, displayName, defaultValue, initValue); animationDescriptor.addProperties(property); - for (Object childObj : elem.elements(ELEM_PROPERTY)) { - parseChildProperty((Element) childObj, property); + NodeList elemList = elem.getElementsByTagName(ELEM_PROPERTY); + for (int i = 0; i < elemList.getLength(); i++) { + parseChildProperty((Element) elemList.item(i), property); } } private void parseChildProperty(Element elem, CssAnimationPropertyDescriptor animationPropertyDescriptor) { - String name = elem.attributeValue(ATTR_NAME); - String type = elem.attributeValue(ATTR_TYPE); - String displayName = elem.attributeValue(ATTR_DISPLAYNAME); - String defaultValue = elem.attributeValue(ATTR_DEFAULT); - String initValue = elem.attributeValue(ATTR_INITVALUE); + String name = elem.getAttribute(ATTR_NAME); + String type = elem.getAttribute(ATTR_TYPE); + String displayName = elem.getAttribute(ATTR_DISPLAYNAME); + String defaultValue = elem.getAttribute(ATTR_DEFAULT); + String initValue = elem.getAttribute(ATTR_INITVALUE); CssAnimationPropertyDescriptor childProperty = new CssAnimationPropertyDescriptor(); childProperty.init(name, type, displayName, defaultValue, initValue); diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/builder/WebUIBuilderBuilder.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/builder/WebUIBuilderBuilder.java index fbe29d2..6063137 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/builder/WebUIBuilderBuilder.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/builder/WebUIBuilderBuilder.java @@ -198,7 +198,7 @@ public class WebUIBuilderBuilder extends IncrementalProjectBuilder { String dstFile = htmlFile.getLocation().toString(); DescriptorManager descriptorManager = getDescriptorManager(project); PartFactory partFactory = new PartFactory(descriptorManager); - CodeGenerator.generateCode(srcFile, dstFile, descriptorManager, partFactory, project); + CodeGenerator.generateCode(srcFile, dstFile, descriptorManager, partFactory); // page.managed.js // InputStream xsltStream = diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/AppManagerForHTML.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/AppManagerForHTML.java index bf04e96..783f096 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/AppManagerForHTML.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/AppManagerForHTML.java @@ -450,19 +450,20 @@ public class AppManagerForHTML extends AppManager { newElmBase.setAttribute("href", rootPathUri + "/"); elm.insertBefore(newElmBase, elm.getFirstChild()); - NodeList scripts = elm.getElementsByTagName("script"); - if (scripts != null) { - int len = scripts.getLength(); - for (int i = 0; i < len; i++) { - Element script = (Element) scripts.item(i); - String src = script.getAttribute("src"); - int fileidx = src.lastIndexOf("/"); - String filename = src.substring(fileidx + 1); - if (!filename.equals("jquery.js") && !filename.equals("tizen-web-ui-fw-libs.js") - && !filename.equals("tizen-web-ui-fw.js")) { - script.removeAttribute("src"); - script.setTextContent(""); - } + NodeList elemList = elm.getChildNodes(); + for(int i = elemList.getLength(); i >= 0; i--){ + Node childNode = elemList.item(i); + if(childNode instanceof Element){ + if(childNode.getNodeName().equals("script")){ + Element script = (Element) childNode; + String src = script.getAttribute("src"); + int fileidx = src.lastIndexOf("/"); + String filename = src.substring(fileidx + 1); + if (!filename.equals("jquery.js") && !filename.equals("tizen-web-ui-fw-libs.js") + && !filename.equals("tizen-web-ui-fw.js")) { + elm.removeChild(childNode); + } + } } } @@ -507,19 +508,20 @@ public class AppManagerForHTML extends AppManager { newElmBase.setAttribute("href", rootPathUri + "/"); elm.insertBefore(newElmBase, elm.getFirstChild()); - NodeList scripts = elm.getElementsByTagName("script"); - if (scripts != null) { - int len = scripts.getLength(); - for (int i = 0; i < len; i++) { - Element script = (Element) scripts.item(i); - String src = script.getAttribute("src"); - int fileidx = src.lastIndexOf("/"); - String filename = src.substring(fileidx + 1); - if (!filename.equals("jquery.js") && !filename.equals("tizen-web-ui-fw-libs.js") - && !filename.equals("tizen-web-ui-fw.js")) { - script.removeAttribute("src"); - script.setTextContent(""); - } + NodeList elemList = elm.getChildNodes(); + for(int i = elemList.getLength(); i >= 0; i--){ + Node childNode = elemList.item(i); + if(childNode instanceof Element){ + if(childNode.getNodeName().equals("script")){ + Element script = (Element) childNode; + String src = script.getAttribute("src"); + int fileidx = src.lastIndexOf("/"); + String filename = src.substring(fileidx + 1); + if (!filename.equals("jquery.js") && !filename.equals("tizen-web-ui-fw-libs.js") + && !filename.equals("tizen-web-ui-fw.js")) { + elm.removeChild(childNode); + } + } } } @@ -633,17 +635,18 @@ public class AppManagerForHTML extends AppManager { for (int i = 0; i < len; i++) { body.removeChild(body.getFirstChild()); } - body.setTextContent("%html%"); + if (html == null) { + html = ""; + } + body.setTextContent("%html%"); + // String tempHtml = // HtmlWriter.writeToString((Element)editDoc.getFirstChild().getChildNodes().item(index)); String tempHtml = HtmlWriter.writeToString(editDoc); - if (html == null) { - html = ""; - } tempHtml = tempHtml.replace("%html%", html); - + return tempHtml; } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaReader.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaReader.java index 88ac157..4d55833 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaReader.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaReader.java @@ -23,32 +23,43 @@ package org.tizen.webuibuilder.model.app.io; +import java.io.IOException; import java.io.InputStream; import java.net.URL; -import org.dom4j.Document; -import org.dom4j.DocumentException; -import org.dom4j.io.SAXReader; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + import org.tizen.webuibuilder.model.filedata.AppFileData; +import org.w3c.dom.Document; +import org.xml.sax.SAXException; public class AppMetaReader { public static AppFileData read(InputStream stream) { - SAXReader reader = new SAXReader(); + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = null; Document doc = null; - AppFileData descriptor = null; try { - doc = reader.read(stream); - } catch (DocumentException e) { - e.printStackTrace(); - } + builder = factory.newDocumentBuilder(); + doc = builder.parse(stream); + } catch (ParserConfigurationException e) { + e.printStackTrace(); + } catch (SAXException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } - if (doc != null && doc.getRootElement() != null) { - descriptor = AppMetaReader_ver_2.parse(doc.getRootElement()); + AppFileData descriptor = null; + + if (doc != null && doc.getDocumentElement() != null) { + descriptor = AppMetaReader_ver_2.parse(doc.getDocumentElement()); if (descriptor == null) { - descriptor = AppMetaReader_ver_1.parse(doc.getRootElement()); + descriptor = AppMetaReader_ver_1.parse(doc.getDocumentElement()); } } @@ -56,23 +67,15 @@ public class AppMetaReader { } public static AppFileData read(URL descriptorPath) { - SAXReader reader = new SAXReader(); - Document doc = null; - AppFileData descriptor = null; - + AppFileData descriptor = null; + try { - doc = reader.read(descriptorPath); - } catch (DocumentException e) { - e.printStackTrace(); - } - - if (doc != null && doc.getRootElement() != null) { - descriptor = AppMetaReader_ver_2.parse(doc.getRootElement()); - if (descriptor == null) { - descriptor = AppMetaReader_ver_1.parse(doc.getRootElement()); - } - } - + descriptor = read(descriptorPath.openStream()); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return descriptor; } } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaReader_ver_1.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaReader_ver_1.java index 5c2d90e..34ddd08 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaReader_ver_1.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaReader_ver_1.java @@ -23,12 +23,17 @@ package org.tizen.webuibuilder.model.app.io; -import org.dom4j.Element; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; import org.tizen.webuibuilder.BuilderConstants; import org.tizen.webuibuilder.model.app.Framework; import org.tizen.webuibuilder.model.app.Library; import org.tizen.webuibuilder.model.app.Page; import org.tizen.webuibuilder.model.app.Stylesheet; +import org.tizen.webuibuilder.model.descriptors.DocumentPartDescriptor; +import org.tizen.webuibuilder.model.descriptors.PagePartDescriptor; +import org.tizen.webuibuilder.model.descriptors.WidgetPartDescriptor; import org.tizen.webuibuilder.model.filedata.AppFileData; @@ -51,67 +56,80 @@ public class AppMetaReader_ver_1 { descriptor = new AppFileData(); descriptor.setProjectFileVersion("0.0.1"); - for (Object childObj : root.elements(BuilderConstants.ELEMENT_PROJECTINFO)) { - parseProjectInfo((Element) childObj, descriptor); - } - - for (Object childObj : root.elements(BuilderConstants.ELEMENT_PAGESYSTEM)) { - parsePart((Element) childObj, descriptor); - } + NodeList elemList = root.getChildNodes(); + for(int i = 0; i < elemList.getLength(); i++){ + Node childNode = elemList.item(i); + if(childNode instanceof Element){ + if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_PROJECTINFO)) { + parseProjectInfo((Element) childNode, descriptor); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_PAGESYSTEM)) { + parsePart((Element) childNode, descriptor); + } + } + } return descriptor; } private static void parseProjectInfo(Element elem, AppFileData descriptor) { - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_TITLE)) { - Element title = (Element) childObj; - descriptor.setTitle(title.getText()); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_AUTHOR)) { - Element author = (Element) childObj; - descriptor.setAuthor(author.getText()); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_VERSION)) { - Element version = (Element) childObj; - descriptor.setVersion(version.getText()); - } + NodeList elemList = elem.getChildNodes(); + for(int i = 0; i < elemList.getLength(); i++){ + Node childNode = elemList.item(i); + if(childNode instanceof Element){ + if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_TITLE)) { + descriptor.setTitle(childNode.getTextContent()); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_AUTHOR)) { + descriptor.setAuthor(childNode.getTextContent()); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_VERSION)) { + descriptor.setVersion(childNode.getTextContent()); + } + } + } } private static void parsePart(Element elem, AppFileData descriptor) { - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_FRAMEWORKS)) { - parseFrameworks((Element) childObj, descriptor); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_LIBRARIES)) { - parseLibraries((Element) childObj, descriptor); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_PAGES)) { - parsePages((Element) childObj, descriptor); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_ENTRIES)) { - parseEntrys((Element) childObj, descriptor); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_STYLESHEETS)) { - parseStylesheets((Element) childObj, descriptor); - } + NodeList elemList = elem.getChildNodes(); + for(int i = 0; i < elemList.getLength(); i++){ + Node childNode = elemList.item(i); + if(childNode instanceof Element){ + if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_FRAMEWORKS)) { + parseFrameworks((Element) childNode, descriptor); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_LIBRARIES)) { + parseLibraries((Element) childNode, descriptor); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_PAGES)) { + parsePages((Element) childNode, descriptor); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_ENTRIES)) { + parseEntrys((Element) childNode, descriptor); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_STYLESHEETS)) { + parseStylesheets((Element) childNode, descriptor); + } + } + } } private static void parseFrameworks(Element elem, AppFileData descriptor) { - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_FRAMEWORK_THEME)) { - String theme = parseTheme((Element) childObj); - descriptor.addOrReplaceFrameworkVariable("theme", theme); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_SCRIPT)) { - FrameworkEntry frameworkentry = parseFramework((Element) childObj, descriptor); - descriptor.addLibrary(frameworkentry.library); - if (frameworkentry.framework != null) { - descriptor.addFramework(frameworkentry.framework); - } - } + NodeList elemList = elem.getChildNodes(); + for(int i = 0; i < elemList.getLength(); i++){ + Node childNode = elemList.item(i); + if(childNode instanceof Element){ + if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_FRAMEWORK_THEME)) { + String theme = parseTheme((Element) childNode); + descriptor.addOrReplaceFrameworkVariable("theme", theme); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_SCRIPT)) { + FrameworkEntry frameworkentry = parseFramework((Element) childNode, descriptor); + descriptor.addLibrary(frameworkentry.library); + if (frameworkentry.framework != null) { + descriptor.addFramework(frameworkentry.framework); + } + } + } + } } private static void parseLibraries(Element elem, AppFileData descriptor) { - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_SCRIPT)) { - Library script = parseScript((Element) childObj); + NodeList elemList = elem.getElementsByTagName(BuilderConstants.ELEMENT_SCRIPT); + for(int i = 0; i < elemList.getLength(); i++){ + Library script = parseScript((Element) elemList.item(i)); descriptor.addLibrary(script); } @@ -120,17 +138,18 @@ public class AppMetaReader_ver_1 { } private static void parsePages(Element element, AppFileData descriptor) { - for (Object childObj : element.elements(BuilderConstants.ELEMENT_PAGE)) { - Element element2 = (Element) childObj; + NodeList elemList = element.getElementsByTagName(BuilderConstants.ELEMENT_PAGE); + for(int i = 0; i < elemList.getLength(); i++){ + Element element2 = (Element) elemList.item(i); - String name = element2.attributeValue(BuilderConstants.ATTRIBUTE_NAME); - String startup = element2.attributeValue(BuilderConstants.ATTRIBUTE_STARTUP); + String name = element2.getAttribute(BuilderConstants.ATTRIBUTE_NAME); + String startup = element2.getAttribute(BuilderConstants.ATTRIBUTE_STARTUP); boolean boolStartup = Boolean.valueOf(startup).booleanValue(); - String pagePath = element2.attributeValue(BuilderConstants.ATTRIBUTE_PAGEPATH); - String jsPath = element2.attributeValue(BuilderConstants.ATTRIBUTE_JSPATH); + String pagePath = element2.getAttribute(BuilderConstants.ATTRIBUTE_PAGEPATH); + String jsPath = element2.getAttribute(BuilderConstants.ATTRIBUTE_JSPATH); String managedJsPath = - element2.attributeValue(BuilderConstants.ATTRIBUTE_MANAGEDJSPATH); - String htmlPath = element2.attributeValue(BuilderConstants.ATTRIBUTE_HTMLPATH); + element2.getAttribute(BuilderConstants.ATTRIBUTE_MANAGEDJSPATH); + String htmlPath = element2.getAttribute(BuilderConstants.ATTRIBUTE_HTMLPATH); String cssPath = htmlPath.replace(".html", ".css"); String managedCssPath = htmlPath.replace(".html", ".managed.css"); @@ -146,8 +165,9 @@ public class AppMetaReader_ver_1 { } private static void parseEntrys(Element elem, AppFileData descriptor) { - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_SCRIPT)) { - Library entry = parseEntry((Element) childObj); + NodeList elemList = elem.getElementsByTagName(BuilderConstants.ELEMENT_SCRIPT); + for(int i = 0; i < elemList.getLength(); i++){ + Library entry = parseEntry((Element) elemList.item(i)); descriptor.addLibrary(entry); } } @@ -155,14 +175,16 @@ public class AppMetaReader_ver_1 { private static void parseStylesheets(Element elem, AppFileData descriptor) { Stylesheet stylesheet = new Stylesheet("pages", "all", ""); descriptor.addStylesheet(stylesheet); - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_STYLESHEET)) { - stylesheet = parseStylesheet((Element) childObj); + + NodeList elemList = elem.getElementsByTagName(BuilderConstants.ELEMENT_STYLESHEET); + for(int i = 0; i < elemList.getLength(); i++){ + stylesheet = parseStylesheet((Element) elemList.item(i)); descriptor.addStylesheet(stylesheet); } } private static String parseTheme(Element element) { - String theme = element.attributeValue(BuilderConstants.ATTRIBUTE_NAME); + String theme = element.getAttribute(BuilderConstants.ATTRIBUTE_NAME); return theme; } @@ -170,9 +192,9 @@ public class AppMetaReader_ver_1 { private static FrameworkEntry parseFramework(Element element, AppFileData descriptor) { // String type = // element.attributeValue(BuilderConstants.ATTRIBUTE_TYPE); - String path = element.attributeValue(BuilderConstants.ATTRIBUTE_PATH); - String theme = element.attributeValue(BuilderConstants.ATTRIBUTE_THEME); - String viewport = element.attributeValue(BuilderConstants.ATTRIBUTE_SCALE); + String path = element.getAttribute(BuilderConstants.ATTRIBUTE_PATH); + String theme = element.getAttribute(BuilderConstants.ATTRIBUTE_THEME); + String viewport = element.getAttribute(BuilderConstants.ATTRIBUTE_SCALE); String core = ""; if (theme != null && !theme.isEmpty()) { @@ -201,7 +223,7 @@ public class AppMetaReader_ver_1 { // String type = // element.attributeValue(BuilderConstants.ATTRIBUTE_TYPE); String type = "user"; - String path = element.attributeValue(BuilderConstants.ATTRIBUTE_PATH); + String path = element.getAttribute(BuilderConstants.ATTRIBUTE_PATH); Library script = new Library(type, path); // type == "user" @@ -212,7 +234,7 @@ public class AppMetaReader_ver_1 { // String type = // element.attributeValue(BuilderConstants.ATTRIBUTE_TYPE); String type = " entry"; - String path = element.attributeValue(BuilderConstants.ATTRIBUTE_PATH); + String path = element.getAttribute(BuilderConstants.ATTRIBUTE_PATH); Library framework = new Library(type, path); // type == "entry" @@ -220,7 +242,7 @@ public class AppMetaReader_ver_1 { } private static Stylesheet parseStylesheet(Element element) { - String path = element.attributeValue(BuilderConstants.ATTRIBUTE_PATH); + String path = element.getAttribute(BuilderConstants.ATTRIBUTE_PATH); Stylesheet stylesheet = new Stylesheet("user", path, ""); diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaReader_ver_2.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaReader_ver_2.java index f6d4937..ee0c798 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaReader_ver_2.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaReader_ver_2.java @@ -28,7 +28,10 @@ import java.util.ArrayList; import java.util.List; import java.util.Map.Entry; -import org.dom4j.Element; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; import org.tizen.webuibuilder.BuilderConstants; import org.tizen.webuibuilder.model.app.Framework; import org.tizen.webuibuilder.model.app.Library; @@ -59,73 +62,83 @@ public class AppMetaReader_ver_2 { descriptor = new AppFileData(); descriptor.setProjectFileVersion(fileReader.getVersion()); - for (Object childObj : root.elements(BuilderConstants.ELEMENT_TIZENPROJECT)) { - parsePart((Element) childObj, descriptor); + NodeList elemList = root.getElementsByTagName(BuilderConstants.ELEMENT_TIZENPROJECT); + for (int i = 0; i < elemList.getLength(); i++) { + parsePart((Element) elemList.item(i), descriptor); } return descriptor; } private static void parsePart(Element elem, AppFileData descriptor) { - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_METAS)) { - parseMetas((Element) childObj, descriptor); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_LIBRARIES)) { - parseLibrarys((Element) childObj, descriptor); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_FRAMEWORKS)) { - parseFrameworks((Element) childObj, descriptor); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_PAGES)) { - parsePage((Element) childObj, descriptor); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_DATABINDING)) { - parseDataBinding((Element) childObj, descriptor); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_STYLESHEETS)) { - parseStylesheets((Element) childObj, descriptor); - } + NodeList elemList = elem.getChildNodes(); + for(int i = 0; i < elemList.getLength(); i++){ + Node childNode = elemList.item(i); + if(childNode instanceof Element){ + if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_METAS)) { + parseMetas((Element) childNode, descriptor); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_LIBRARIES)) { + parseLibrarys((Element) childNode, descriptor); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_FRAMEWORKS)) { + parseFrameworks((Element) childNode, descriptor); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_PAGES)) { + parsePage((Element) childNode, descriptor); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_DATABINDING)) { + parseDataBinding((Element) childNode, descriptor); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_STYLESHEETS)) { + parseStylesheets((Element) childNode, descriptor); + } + } + } } private static void parseMetas(Element elem, AppFileData descriptor) { - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_META)) { - Meta meta = parseMeta((Element) childObj); + NodeList elemList = elem.getElementsByTagName(BuilderConstants.ELEMENT_META); + for (int i = 0; i < elemList.getLength(); i++) { + Meta meta = parseMeta((Element) elemList.item(i)); descriptor.addMeta(meta); } } private static void parseFrameworks(Element elem, AppFileData descriptor) { - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_VARIABLES)) { - parseFrameworkVariables((Element) childObj, descriptor); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_FRAMEWORK)) { - Framework script = parseFramework((Element) childObj); - descriptor.addFramework(script); - } + NodeList elemList = elem.getChildNodes(); + for(int i = 0; i < elemList.getLength(); i++){ + Node childNode = elemList.item(i); + if(childNode instanceof Element){ + if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_VARIABLES)) { + parseFrameworkVariables((Element) childNode, descriptor); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_FRAMEWORK)) { + Framework script = parseFramework((Element) childNode); + descriptor.addFramework(script); + } + } + } } private static void parseLibrarys(Element elem, AppFileData descriptor) { - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_LIBRARY)) { - Library library = parseLibrary((Element) childObj); + NodeList elemList = elem.getElementsByTagName(BuilderConstants.ELEMENT_LIBRARY); + for (int i = 0; i < elemList.getLength(); i++) { + Library library = parseLibrary((Element) elemList.item(i)); descriptor.addLibrary(library); } } private static void parsePage(Element element, AppFileData descriptor) { - for (Object childObj : element.elements(BuilderConstants.ELEMENT_PAGE)) { - Element element2 = (Element) childObj; + NodeList elemList = element.getElementsByTagName(BuilderConstants.ELEMENT_PAGE); + for (int i = 0; i < elemList.getLength(); i++) { + Element element2 = (Element) elemList.item(i); - String name = element2.attributeValue(BuilderConstants.ATTRIBUTE_NAME); - String startup = element2.attributeValue(BuilderConstants.ATTRIBUTE_STARTUP); + String name = element2.getAttribute(BuilderConstants.ATTRIBUTE_NAME); + String startup = element2.getAttribute(BuilderConstants.ATTRIBUTE_STARTUP); boolean boolStartup = Boolean.valueOf(startup).booleanValue(); - String pagePath = element2.attributeValue(BuilderConstants.ATTRIBUTE_PAGEPATH); - String jsPath = element2.attributeValue(BuilderConstants.ATTRIBUTE_JSPATH); + String pagePath = element2.getAttribute(BuilderConstants.ATTRIBUTE_PAGEPATH); + String jsPath = element2.getAttribute(BuilderConstants.ATTRIBUTE_JSPATH); String managedJsPath = - element2.attributeValue(BuilderConstants.ATTRIBUTE_MANAGEDJSPATH); - String htmlPath = element2.attributeValue(BuilderConstants.ATTRIBUTE_HTMLPATH); - String cssPath = element2.attributeValue(BuilderConstants.ATTRIBUTE_CSSPATH); + element2.getAttribute(BuilderConstants.ATTRIBUTE_MANAGEDJSPATH); + String htmlPath = element2.getAttribute(BuilderConstants.ATTRIBUTE_HTMLPATH); + String cssPath = element2.getAttribute(BuilderConstants.ATTRIBUTE_CSSPATH); String managedCssPath = - element2.attributeValue(BuilderConstants.ATTRIBUTE_MANAGED_CSSPATH); + element2.getAttribute(BuilderConstants.ATTRIBUTE_MANAGED_CSSPATH); Page page = new Page(name, pagePath, jsPath, managedJsPath, htmlPath, cssPath, @@ -146,11 +159,12 @@ public class AppMetaReader_ver_2 { } private static void parseUpdateStartUp(Element element, AppFileData descriptor) { - for (Object childObj : element.elements(BuilderConstants.ELEMENT_UPDATEONSTARTUP)) { - Element element2 = (Element) childObj; + NodeList elemList = element.getElementsByTagName(BuilderConstants.ELEMENT_UPDATEONSTARTUP); + for (int i = 0; i < elemList.getLength(); i++) { + Element element2 = (Element) elemList.item(i); - String name = element2.attributeValue(BuilderConstants.ATTRIBUTE_NAME); - String updateStartUp = element2.attributeValue(BuilderConstants.ATTRIBUTE_ISCHECKED); + String name = element2.getAttribute(BuilderConstants.ATTRIBUTE_NAME); + String updateStartUp = element2.getAttribute(BuilderConstants.ATTRIBUTE_ISCHECKED); boolean isChecked = false; if (updateStartUp.equals("true")) { @@ -165,17 +179,19 @@ public class AppMetaReader_ver_2 { } private static void parseHandlerInfo(Element element, AppFileData descriptor) { - for (Object childObj : element.elements(BuilderConstants.ELEMENT_HANDLERINFO)) { - Element element2 = (Element) childObj; + NodeList elemList = element.getElementsByTagName(BuilderConstants.ELEMENT_HANDLERINFO); + for (int i = 0; i < elemList.getLength(); i++) { + Element element2 = (Element) elemList.item(i); - String name = element2.attributeValue(BuilderConstants.ATTRIBUTE_NAME); + String name = element2.getAttribute(BuilderConstants.ATTRIBUTE_NAME); BindingData dataModel = new BindingData(name); List modelInfo = new ArrayList(); - for (Object subChildObj : element.elements(BuilderConstants.ELEMENT_HANDLERINFO)) { - Element element3 = (Element) subChildObj; - String childName = element3.attributeValue(BuilderConstants.ATTRIBUTE_NAME); + NodeList elemList2 = element.getElementsByTagName(BuilderConstants.ELEMENT_HANDLERINFO); + for (int j = 0; j < elemList2.getLength(); j++) { + Element element3 = (Element) elemList2.item(i); + String childName = element3.getAttribute(BuilderConstants.ATTRIBUTE_NAME); modelInfo.add(childName); } dataModel.addHandlerInfos(name, modelInfo); @@ -185,11 +201,12 @@ public class AppMetaReader_ver_2 { } private static void parseViewModel(Element element, AppFileData descriptor) { - for (Object childObj : element.elements(BuilderConstants.ELEMENT_VIEWMODEL)) { - Element element2 = (Element) childObj; + NodeList elemList = element.getElementsByTagName(BuilderConstants.ELEMENT_VIEWMODEL); + for (int i = 0; i < elemList.getLength(); i++) { + Element element2 = (Element) elemList.item(i); - String name = element2.attributeValue(BuilderConstants.ATTRIBUTE_NAME); - String dataSourceName = element2.attributeValue(BuilderConstants.ATTRIBUTE_DATASOURCE); + String name = element2.getAttribute(BuilderConstants.ATTRIBUTE_NAME); + String dataSourceName = element2.getAttribute(BuilderConstants.ATTRIBUTE_DATASOURCE); BindingData dataModel = new BindingData(name, dataSourceName); parseObservableObject(element2, dataModel, null); @@ -198,28 +215,29 @@ public class AppMetaReader_ver_2 { } private static void parseDataSource(Element element, AppFileData descriptor) { - for (Object childObj : element.elements(BuilderConstants.ELEMENT_DATASOURCE)) { - Element element2 = (Element) childObj; + NodeList elemList = element.getElementsByTagName(BuilderConstants.ELEMENT_DATASOURCE); + for (int i = 0; i < elemList.getLength(); i++) { + Element element2 = (Element) elemList.item(i); - String name = element2.attributeValue(BuilderConstants.ATTRIBUTE_NAME); - String modelType = element2.attributeValue(BuilderConstants.ATTRIBUTE_MODELTYPE); + String name = element2.getAttribute(BuilderConstants.ATTRIBUTE_NAME); + String modelType = element2.getAttribute(BuilderConstants.ATTRIBUTE_MODELTYPE); if ((modelType != null) && (modelType.equals("REMOTECALL"))) { - String url = element2.attributeValue(BuilderConstants.ATTRIBUTE_URL); - String type = element2.attributeValue(BuilderConstants.ATTRIBUTE_TYPE); - String proxy = element2.attributeValue(BuilderConstants.ATTRIBUTE_PROXY); - String query = element2.attributeValue(BuilderConstants.ATTRIBUTE_QUERY); - String sourceType = element2.attributeValue(BuilderConstants.ATTRIBUTE_SOURCETYPE); - String timeout = element2.attributeValue(BuilderConstants.ATTRIBUTE_TIMEOUT); - String jsonData = element2.attributeValue(BuilderConstants.ATTRIBUTE_JSONDATA); + String url = element2.getAttribute(BuilderConstants.ATTRIBUTE_URL); + String type = element2.getAttribute(BuilderConstants.ATTRIBUTE_TYPE); + String proxy = element2.getAttribute(BuilderConstants.ATTRIBUTE_PROXY); + String query = element2.getAttribute(BuilderConstants.ATTRIBUTE_QUERY); + String sourceType = element2.getAttribute(BuilderConstants.ATTRIBUTE_SOURCETYPE); + String timeout = element2.getAttribute(BuilderConstants.ATTRIBUTE_TIMEOUT); + String jsonData = element2.getAttribute(BuilderConstants.ATTRIBUTE_JSONDATA); BindingData dataModel = new BindingData(name, modelType, url, type, proxy, query, sourceType, timeout, jsonData); descriptor.addDataSource(dataModel); } else if ((modelType != null) && (modelType.equals("STATIC"))) { - String jsonData = element2.attributeValue(BuilderConstants.ATTRIBUTE_JSONDATA); - String filePath = element2.attributeValue(BuilderConstants.ATTRIBUTE_FILEPATH); + String jsonData = element2.getAttribute(BuilderConstants.ATTRIBUTE_JSONDATA); + String filePath = element2.getAttribute(BuilderConstants.ATTRIBUTE_FILEPATH); BindingData dataModel = new BindingData(name, modelType, jsonData, filePath); @@ -227,7 +245,7 @@ public class AppMetaReader_ver_2 { descriptor.addDataSource(dataModel); } else if ((modelType != null) && (modelType.equals("RUNTIMEAPI"))) { - String api = element2.attributeValue(BuilderConstants.ATTRIBUTE_API); + String api = element2.getAttribute(BuilderConstants.ATTRIBUTE_API); BindingData dataModel = new BindingData(name, modelType, api); descriptor.addDataSource(dataModel); @@ -241,13 +259,14 @@ public class AppMetaReader_ver_2 { private static void parseObservableObject(Element element, BindingData dataModel, BindingObject parentObject) { - for (Object childObj : element.elements(BuilderConstants.ELEMENT_OBSERVABLEOBJECT)) { - Element element2 = (Element) childObj; - - String name = element2.attributeValue(BuilderConstants.ATTRIBUTE_NAME); - String type = element2.attributeValue(BuilderConstants.ATTRIBUTE_TYPE); - String value = element2.attributeValue(BuilderConstants.ATTRIBUTE_VALUE); - String isMarked = element2.attributeValue(BuilderConstants.ATTRIBUTE_ISMARKED); + NodeList elemList = element.getElementsByTagName(BuilderConstants.ELEMENT_OBSERVABLEOBJECT); + for (int i = 0; i < elemList.getLength(); i++) { + Element element2 = (Element) elemList.item(i); + + String name = element2.getAttribute(BuilderConstants.ATTRIBUTE_NAME); + String type = element2.getAttribute(BuilderConstants.ATTRIBUTE_TYPE); + String value = element2.getAttribute(BuilderConstants.ATTRIBUTE_VALUE); + String isMarked = element2.getAttribute(BuilderConstants.ATTRIBUTE_ISMARKED); boolean boolMarked = Boolean.valueOf(isMarked).booleanValue(); BindingObject dataSource = new BindingObject(name, type, value, boolMarked); @@ -263,23 +282,25 @@ public class AppMetaReader_ver_2 { } private static void parseStylesheets(Element elem, AppFileData descriptor) { - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_STYLESHEET)) { - Stylesheet stylesheet = parseStylesheet((Element) childObj); + NodeList elemList = elem.getElementsByTagName(BuilderConstants.ELEMENT_STYLESHEET); + for (int i = 0; i < elemList.getLength(); i++) { + Stylesheet stylesheet = parseStylesheet((Element) elemList.item(i)); descriptor.addStylesheet(stylesheet); } } private static void parseFrameworkVariables(Element elem, AppFileData descriptor) { - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_VARIABLE)) { - Entry variable = parseFrameworkVariable((Element) childObj); + NodeList elemList = elem.getElementsByTagName(BuilderConstants.ELEMENT_VARIABLE); + for (int i = 0; i < elemList.getLength(); i++) { + Entry variable = parseFrameworkVariable((Element) elemList.item(i)); descriptor.addFrameworkVariable(variable.getKey(), variable.getValue()); } } private static Framework parseFramework(Element elem) { - String param = elem.attributeValue(BuilderConstants.ATTRIBUTE_PARAM); - String path = elem.attributeValue(BuilderConstants.ATTRIBUTE_PATH); - String param2 = elem.attributeValue(BuilderConstants.ATTRIBUTE_PARAM2); + String param = elem.getAttribute(BuilderConstants.ATTRIBUTE_PARAM); + String path = elem.getAttribute(BuilderConstants.ATTRIBUTE_PATH); + String param2 = elem.getAttribute(BuilderConstants.ATTRIBUTE_PARAM2); Framework framework = new Framework(param, path, param2); @@ -287,8 +308,8 @@ public class AppMetaReader_ver_2 { } private static Entry parseFrameworkVariable(Element elem) { - String name = elem.attributeValue(BuilderConstants.ATTRIBUTE_NAME); - String value = elem.attributeValue(BuilderConstants.ATTRIBUTE_VALUE); + String name = elem.getAttribute(BuilderConstants.ATTRIBUTE_NAME); + String value = elem.getAttribute(BuilderConstants.ATTRIBUTE_VALUE); Entry variable = new AbstractMap.SimpleEntry(name, value); @@ -296,9 +317,9 @@ public class AppMetaReader_ver_2 { } private static Meta parseMeta(Element element) { - String type = element.attributeValue(BuilderConstants.ATTRIBUTE_TYPE); - String param = element.attributeValue(BuilderConstants.ATTRIBUTE_PARAM); - String param2 = element.attributeValue(BuilderConstants.ATTRIBUTE_PARAM2); + String type = element.getAttribute(BuilderConstants.ATTRIBUTE_TYPE); + String param = element.getAttribute(BuilderConstants.ATTRIBUTE_PARAM); + String param2 = element.getAttribute(BuilderConstants.ATTRIBUTE_PARAM2); Meta meta = new Meta(type, param, param2); @@ -306,8 +327,8 @@ public class AppMetaReader_ver_2 { } private static Library parseLibrary(Element element) { - String type = element.attributeValue(BuilderConstants.ATTRIBUTE_TYPE); - String param = element.attributeValue(BuilderConstants.ATTRIBUTE_PARAM); + String type = element.getAttribute(BuilderConstants.ATTRIBUTE_TYPE); + String param = element.getAttribute(BuilderConstants.ATTRIBUTE_PARAM); Library library = new Library(type, param); @@ -315,9 +336,9 @@ public class AppMetaReader_ver_2 { } private static Stylesheet parseStylesheet(Element element) { - String type = element.attributeValue(BuilderConstants.ATTRIBUTE_TYPE); - String param = element.attributeValue(BuilderConstants.ATTRIBUTE_PARAM); - String param2 = element.attributeValue(BuilderConstants.ATTRIBUTE_PARAM2); + String type = element.getAttribute(BuilderConstants.ATTRIBUTE_TYPE); + String param = element.getAttribute(BuilderConstants.ATTRIBUTE_PARAM); + String param2 = element.getAttribute(BuilderConstants.ATTRIBUTE_PARAM2); Stylesheet stylesheet = new Stylesheet(type, param, param2); diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaWriter.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaWriter.java index 62ffc8f..32d7c4e 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaWriter.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaWriter.java @@ -28,12 +28,16 @@ import java.io.IOException; import java.io.StringWriter; import java.io.Writer; -import org.dom4j.Document; -import org.dom4j.DocumentHelper; -import org.dom4j.Element; -import org.dom4j.io.OutputFormat; -import org.dom4j.io.XMLWriter; +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 org.tizen.webuibuilder.model.filedata.AppFileData; +import org.w3c.dom.Document; +import org.w3c.dom.Element; public class AppMetaWriter { @@ -41,17 +45,21 @@ public class AppMetaWriter { private static final int INDENT_SIZE = 4; public static void writeTo(AppFileData descriptor, Writer writer) throws IOException { - Element elem = writeElement(descriptor); - - Document doc = DocumentHelper.createDocument(); - doc.add(elem); - - OutputFormat format = OutputFormat.createPrettyPrint(); - format.setIndentSize(INDENT_SIZE); + Document doc = writeElement(descriptor); - XMLWriter xmlwriter = new XMLWriter(writer, format); - xmlwriter.write(doc); - xmlwriter.close(); + DOMSource source = new DOMSource(doc); + StreamResult result = new StreamResult(writer); + + TransformerFactory factory = TransformerFactory.newInstance(); + Transformer transformer; + try { + transformer = factory.newTransformer(); + transformer.transform(source, result); + } catch (TransformerConfigurationException e) { + e.printStackTrace(); + } catch (TransformerException e) { + e.printStackTrace(); + } } public static String writeToString(AppFileData descriptor) { @@ -69,7 +77,7 @@ public class AppMetaWriter { writeTo(descriptor, new FileWriter(filePath)); } - public static Element writeElement(AppFileData descriptor) { + public static Document writeElement(AppFileData descriptor) { // return ProjectWriter_ver0_0_1.writeElement(descriptor); return AppMetaWriter_ver_2.writeElement(descriptor); } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaWriter_ver_1.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaWriter_ver_1.java index d08f823..07b840d 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaWriter_ver_1.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaWriter_ver_1.java @@ -25,67 +25,85 @@ package org.tizen.webuibuilder.model.app.io; import java.util.List; -import org.dom4j.DocumentHelper; -import org.dom4j.Element; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + import org.tizen.webuibuilder.BuilderConstants; import org.tizen.webuibuilder.model.app.Framework; import org.tizen.webuibuilder.model.app.Library; import org.tizen.webuibuilder.model.app.Page; import org.tizen.webuibuilder.model.app.Stylesheet; import org.tizen.webuibuilder.model.filedata.AppFileData; +import org.w3c.dom.Document; +import org.w3c.dom.Element; public class AppMetaWriter_ver_1 { - public static Element writeElement(AppFileData descriptor) { - Element root = DocumentHelper.createElement(BuilderConstants.ELEMENT_TIZENPROJECT); + public static Document writeElement(AppFileData descriptor) { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = null; + + try { + builder = factory.newDocumentBuilder(); + } catch (ParserConfigurationException e) { + e.printStackTrace(); + return null; + } + + Document doc = builder.newDocument(); + + Element root = doc.createElement(BuilderConstants.ELEMENT_TIZENPROJECT); - Element projectInfo = DocumentHelper.createElement(BuilderConstants.ELEMENT_PROJECTINFO); - root.add(projectInfo); - writeProjectInfo(projectInfo, descriptor); + Element projectInfo = doc.createElement(BuilderConstants.ELEMENT_PROJECTINFO); + root.appendChild(projectInfo); + writeProjectInfo(doc, projectInfo, descriptor); - Element pageSystem = DocumentHelper.createElement(BuilderConstants.ELEMENT_PAGESYSTEM); - root.add(pageSystem); + Element pageSystem = doc.createElement(BuilderConstants.ELEMENT_PAGESYSTEM); + root.appendChild(pageSystem); - Element frameworks = DocumentHelper.createElement(BuilderConstants.ELEMENT_FRAMEWORKS); - pageSystem.add(frameworks); - writeFrameworks(frameworks, descriptor); + Element frameworks = doc.createElement(BuilderConstants.ELEMENT_FRAMEWORKS); + pageSystem.appendChild(frameworks); + writeFrameworks(doc, frameworks, descriptor); - Element libraries = DocumentHelper.createElement(BuilderConstants.ELEMENT_LIBRARIES); - pageSystem.add(libraries); - writeLibraries(libraries, descriptor); + Element libraries = doc.createElement(BuilderConstants.ELEMENT_LIBRARIES); + pageSystem.appendChild(libraries); + writeLibraries(doc, libraries, descriptor); - Element pages = DocumentHelper.createElement(BuilderConstants.ELEMENT_PAGES); - pageSystem.add(pages); - writePages(pages, descriptor); + Element pages = doc.createElement(BuilderConstants.ELEMENT_PAGES); + pageSystem.appendChild(pages); + writePages(doc, pages, descriptor); - Element entries = DocumentHelper.createElement(BuilderConstants.ELEMENT_ENTRIES); - pageSystem.add(entries); - writeEntries(entries, descriptor); + Element entries = doc.createElement(BuilderConstants.ELEMENT_ENTRIES); + pageSystem.appendChild(entries); + writeEntries(doc, entries, descriptor); - Element stylesheets = DocumentHelper.createElement(BuilderConstants.ELEMENT_STYLESHEETS); - pageSystem.add(stylesheets); - writeStylesheets(stylesheets, descriptor); + Element stylesheets = doc.createElement(BuilderConstants.ELEMENT_STYLESHEETS); + pageSystem.appendChild(stylesheets); + writeStylesheets(doc, stylesheets, descriptor); - return root; + doc.appendChild(root); + + return doc; } - private static void writeProjectInfo(Element element, AppFileData descriptor) { - Element title = DocumentHelper.createElement(BuilderConstants.ELEMENT_TITLE); - title.addText(descriptor.getTitle()); - element.add(title); + private static void writeProjectInfo(Document doc, Element element, AppFileData descriptor) { + Element title = doc.createElement(BuilderConstants.ELEMENT_TITLE); + title.setTextContent(descriptor.getTitle()); + element.appendChild(title); - Element author = DocumentHelper.createElement(BuilderConstants.ELEMENT_AUTHOR); - author.addText(descriptor.getAuthor()); - element.add(author); + Element author = doc.createElement(BuilderConstants.ELEMENT_AUTHOR); + author.setTextContent(descriptor.getAuthor()); + element.appendChild(author); - Element version = DocumentHelper.createElement(BuilderConstants.ELEMENT_VERSION); - version.addText(descriptor.getVersion()); - element.add(version); + Element version = doc.createElement(BuilderConstants.ELEMENT_VERSION); + version.setTextContent(descriptor.getVersion()); + element.appendChild(version); } - private static void writeFrameworks(Element element, AppFileData descriptor) { - element.add(writeTheme(descriptor.getFrameworkVariable("theme"))); + private static void writeFrameworks(Document doc, Element element, AppFileData descriptor) { + element.appendChild(writeTheme(doc, descriptor.getFrameworkVariable("theme"))); List frameworks = descriptor.getLibraries(); @@ -95,14 +113,14 @@ public class AppMetaWriter_ver_1 { if (!framework.getType().equals("framework") && !framework.getType().equals("system")) { continue; } - Element elm = writeFramework(framework, descriptor); + Element elm = writeFramework(doc, framework, descriptor); if (elm != null) { - element.add(elm); + element.appendChild(elm); } } } - private static void writeLibraries(Element element, AppFileData descriptor) { + private static void writeLibraries(Document doc, Element element, AppFileData descriptor) { List libraries = descriptor.getLibraries(); int size = libraries.size(); @@ -110,20 +128,20 @@ public class AppMetaWriter_ver_1 { if (!libraries.get(i).getType().equals("user")) { continue; } - element.add(writeScript(libraries.get(i))); + element.appendChild(writeScript(doc, libraries.get(i))); } } - private static void writePages(Element element, AppFileData descriptor) { + private static void writePages(Document doc, Element element, AppFileData descriptor) { List pages = descriptor.getPages(); int size = pages.size(); for (int i = 0; i < size; i++) { - element.add(writePage(pages.get(i), i == descriptor.getStartupPage())); + element.appendChild(writePage(doc, pages.get(i), i == descriptor.getStartupPage())); } } - private static void writeEntries(Element element, AppFileData descriptor) { + private static void writeEntries(Document doc, Element element, AppFileData descriptor) { List entries = descriptor.getLibraries(); int size = entries.size(); @@ -131,11 +149,11 @@ public class AppMetaWriter_ver_1 { if (!entries.get(i).getType().equals("entry")) { continue; } - element.add(writeEntry(entries.get(i))); + element.appendChild(writeEntry(doc, entries.get(i))); } } - private static void writeStylesheets(Element element, AppFileData descriptor) { + private static void writeStylesheets(Document doc, Element element, AppFileData descriptor) { List stylesheets = descriptor.getStylesheets(); int size = stylesheets.size(); @@ -143,19 +161,19 @@ public class AppMetaWriter_ver_1 { if (!stylesheets.get(i).getType().equals("user")) { continue; } - element.add(writeStylesheet(stylesheets.get(i))); + element.appendChild(writeStylesheet(doc, stylesheets.get(i))); } } - private static Element writeTheme(String theme) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_FRAMEWORK_THEME); + private static Element writeTheme(Document doc, String theme) { + Element element = doc.createElement(BuilderConstants.ELEMENT_FRAMEWORK_THEME); - element.addAttribute(BuilderConstants.ATTRIBUTE_NAME, theme); + element.setAttribute(BuilderConstants.ATTRIBUTE_NAME, theme); return element; } - private static Element writeFramework(Library framework, AppFileData descriptor) { + private static Element writeFramework(Document doc, Library framework, AppFileData descriptor) { Framework data = null; if (framework.getType().equals("framework")) { data = descriptor.findFramework(framework.getParam()); @@ -164,65 +182,65 @@ public class AppMetaWriter_ver_1 { } } - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_SCRIPT); + Element element = doc.createElement(BuilderConstants.ELEMENT_SCRIPT); - element.addAttribute(BuilderConstants.ATTRIBUTE_TYPE, "system"); + element.setAttribute(BuilderConstants.ATTRIBUTE_TYPE, "system"); if (data != null) { String path = new String(data.getPath()); path = path.replaceAll("%tizen-web-ui-fw-path%", "./tizen-web-ui-fw/latest"); - element.addAttribute(BuilderConstants.ATTRIBUTE_PATH, path); + element.setAttribute(BuilderConstants.ATTRIBUTE_PATH, path); if (data.getParam2() != null && !data.getParam2().isEmpty()) { - element.addAttribute(BuilderConstants.ATTRIBUTE_THEME, + element.setAttribute(BuilderConstants.ATTRIBUTE_THEME, descriptor.getFrameworkVariable("theme")); - element.addAttribute(BuilderConstants.ATTRIBUTE_SCALE, + element.setAttribute(BuilderConstants.ATTRIBUTE_SCALE, descriptor.getFrameworkVariable("viewport-scale")); } } else { String path = new String(framework.getParam()); path = path.replaceAll("%tizen-web-ui-fw-path%", "./tizen-web-ui-fw/latest"); - element.addAttribute(BuilderConstants.ATTRIBUTE_PATH, path); + element.setAttribute(BuilderConstants.ATTRIBUTE_PATH, path); } return element; } - private static Element writeEntry(Library framework) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_SCRIPT); + private static Element writeEntry(Document doc, Library framework) { + Element element = doc.createElement(BuilderConstants.ELEMENT_SCRIPT); - element.addAttribute(BuilderConstants.ATTRIBUTE_TYPE, "system"); - element.addAttribute(BuilderConstants.ATTRIBUTE_PATH, framework.getParam()); + element.setAttribute(BuilderConstants.ATTRIBUTE_TYPE, "system"); + element.setAttribute(BuilderConstants.ATTRIBUTE_PATH, framework.getParam()); return element; } - private static Element writeScript(Library script) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_SCRIPT); + private static Element writeScript(Document doc, Library script) { + Element element = doc.createElement(BuilderConstants.ELEMENT_SCRIPT); - element.addAttribute(BuilderConstants.ATTRIBUTE_TYPE, "user"); - element.addAttribute(BuilderConstants.ATTRIBUTE_PATH, script.getParam()); + element.setAttribute(BuilderConstants.ATTRIBUTE_TYPE, "user"); + element.setAttribute(BuilderConstants.ATTRIBUTE_PATH, script.getParam()); return element; } - private static Element writePage(Page page, boolean isStartup) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_PAGE); + private static Element writePage(Document doc, Page page, boolean isStartup) { + Element element = doc.createElement(BuilderConstants.ELEMENT_PAGE); - element.addAttribute(BuilderConstants.ATTRIBUTE_TYPE, "system"); - element.addAttribute(BuilderConstants.ATTRIBUTE_NAME, page.getName()); - element.addAttribute(BuilderConstants.ATTRIBUTE_STARTUP, Boolean.toString(isStartup)); - element.addAttribute(BuilderConstants.ATTRIBUTE_PAGEPATH, page.getPagePath()); - element.addAttribute(BuilderConstants.ATTRIBUTE_JSPATH, page.getJsPath()); - element.addAttribute(BuilderConstants.ATTRIBUTE_MANAGEDJSPATH, page.getManagedJsPath()); - element.addAttribute(BuilderConstants.ATTRIBUTE_HTMLPATH, page.getHtmlPath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_TYPE, "system"); + element.setAttribute(BuilderConstants.ATTRIBUTE_NAME, page.getName()); + element.setAttribute(BuilderConstants.ATTRIBUTE_STARTUP, Boolean.toString(isStartup)); + element.setAttribute(BuilderConstants.ATTRIBUTE_PAGEPATH, page.getPagePath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_JSPATH, page.getJsPath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_MANAGEDJSPATH, page.getManagedJsPath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_HTMLPATH, page.getHtmlPath()); return element; } - private static Element writeStylesheet(Stylesheet stylesheet) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_STYLESHEET); + private static Element writeStylesheet(Document doc, Stylesheet stylesheet) { + Element element = doc.createElement(BuilderConstants.ELEMENT_STYLESHEET); - element.addAttribute(BuilderConstants.ATTRIBUTE_PATH, stylesheet.getParam()); + element.setAttribute(BuilderConstants.ATTRIBUTE_PATH, stylesheet.getParam()); return element; } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaWriter_ver_2.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaWriter_ver_2.java index 8d4539f..e124385 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaWriter_ver_2.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/AppMetaWriter_ver_2.java @@ -28,8 +28,6 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; -import org.dom4j.DocumentHelper; -import org.dom4j.Element; import org.tizen.webuibuilder.BuilderConstants; import org.tizen.webuibuilder.model.app.Framework; import org.tizen.webuibuilder.model.app.Library; @@ -39,104 +37,106 @@ import org.tizen.webuibuilder.model.filedata.AppFileData; import org.tizen.webuibuilder.model.io.TizenFileFormatter; import org.tizen.webuibuilder.ui.views.databinding.model.BindingData; import org.tizen.webuibuilder.ui.views.databinding.model.BindingObject; +import org.w3c.dom.Document; +import org.w3c.dom.Element; public class AppMetaWriter_ver_2 { - public static Element writeElement(AppFileData descriptor) { + public static Document writeElement(AppFileData descriptor) { TizenFileFormatter fmt = new TizenFileFormatter("tizen-project", "2", "Tizen Web UI Builder Project"); - Element root = fmt.GenerateFileFormat(); + Document doc = fmt.GenerateFileFormat(); - Element pageSystem = DocumentHelper.createElement(BuilderConstants.ELEMENT_TIZENPROJECT); - root.add(pageSystem); + Element pageSystem = doc.createElement(BuilderConstants.ELEMENT_TIZENPROJECT); + doc.appendChild(pageSystem); - Element libraries = DocumentHelper.createElement(BuilderConstants.ELEMENT_LIBRARIES); - pageSystem.add(libraries); - writeLibraries(libraries, descriptor); + Element libraries = doc.createElement(BuilderConstants.ELEMENT_LIBRARIES); + pageSystem.appendChild(libraries); + writeLibraries(doc, libraries, descriptor); - Element frameworks = DocumentHelper.createElement(BuilderConstants.ELEMENT_FRAMEWORKS); - pageSystem.add(frameworks); - writeFrameworks(frameworks, descriptor); + Element frameworks = doc.createElement(BuilderConstants.ELEMENT_FRAMEWORKS); + pageSystem.appendChild(frameworks); + writeFrameworks(doc, frameworks, descriptor); - Element pages = DocumentHelper.createElement(BuilderConstants.ELEMENT_PAGES); - pageSystem.add(pages); - writePages(pages, descriptor); + Element pages = doc.createElement(BuilderConstants.ELEMENT_PAGES); + pageSystem.appendChild(pages); + writePages(doc, pages, descriptor); - Element dataModels = DocumentHelper.createElement(BuilderConstants.ELEMENT_DATABINDING); - pageSystem.add(dataModels); - writeDataModels(dataModels, descriptor); + Element dataModels = doc.createElement(BuilderConstants.ELEMENT_DATABINDING); + pageSystem.appendChild(dataModels); + writeDataModels(doc, dataModels, descriptor); - Element stylesheets = DocumentHelper.createElement(BuilderConstants.ELEMENT_STYLESHEETS); - pageSystem.add(stylesheets); - writeStylesheets(stylesheets, descriptor); + Element stylesheets = doc.createElement(BuilderConstants.ELEMENT_STYLESHEETS); + pageSystem.appendChild(stylesheets); + writeStylesheets(doc, stylesheets, descriptor); - return root; + return doc; } - private static void writeFrameworks(Element element, AppFileData descriptor) { - element.add(writeFrameworkVariables(element, descriptor)); + private static void writeFrameworks(Document doc, Element element, AppFileData descriptor) { + element.appendChild(writeFrameworkVariables(doc, element, descriptor)); List frameworks = descriptor.getFrameworks(); int size = frameworks.size(); for (int i = 0; i < size; i++) { - element.add(writeFramework(frameworks.get(i))); + element.appendChild(writeFramework(doc, frameworks.get(i))); } } - private static Element writeFrameworkVariables(Element element, AppFileData descriptor) { - Element element2 = DocumentHelper.createElement(BuilderConstants.ELEMENT_VARIABLES); + private static Element writeFrameworkVariables(Document doc, Element element, AppFileData descriptor) { + Element element2 = doc.createElement(BuilderConstants.ELEMENT_VARIABLES); Map variables = descriptor.getFrameworkVariables(); for (Entry variable : variables.entrySet()) { - element2.add(writeFrameworkVariable(variable)); + element2.appendChild(writeFrameworkVariable(doc, variable)); } return element2; } - private static void writeLibraries(Element element, AppFileData descriptor) { + private static void writeLibraries(Document doc, Element element, AppFileData descriptor) { List libraries = descriptor.getLibraries(); int size = libraries.size(); for (int i = 0; i < size; i++) { - element.add(writeLibrary(libraries.get(i))); + element.appendChild(writeLibrary(doc, libraries.get(i))); } } - private static void writePages(Element element, AppFileData descriptor) { + private static void writePages(Document doc, Element element, AppFileData descriptor) { List pages = descriptor.getPages(); int size = pages.size(); for (int i = 0; i < size; i++) { - element.add(writePage(pages.get(i), i == descriptor.getStartupPage())); + element.appendChild(writePage(doc, pages.get(i), i == descriptor.getStartupPage())); } } - private static void writeDataModels(Element element, AppFileData descriptor) { + private static void writeDataModels(Document doc, Element element, AppFileData descriptor) { List dataSources = descriptor.getDataSources(); for (BindingData dataSource : dataSources) { - element.add(writeDataSourceInfo(dataSource)); + element.appendChild(writeDataSourceInfo(doc, dataSource)); } List viewModels = descriptor.getViewModels(); for (BindingData viewModel : viewModels) { - element.add(writeViewModelInfo(viewModel)); + element.appendChild(writeViewModelInfo(doc, viewModel)); } - writeHandlerInfoFromViewModels(element, viewModels); + writeHandlerInfoFromViewModels(doc, element, viewModels); for (BindingData dataSource : dataSources) { if (dataSource.getUpdateOnStartup()) { - element.add(writeUpdateOnStartUp(dataSource)); + element.appendChild(writeUpdateOnStartUp(doc, dataSource)); } } } - private static void writeHandlerInfoFromViewModels(Element element, List dataModels) { + private static void writeHandlerInfoFromViewModels(Document doc, Element element, List dataModels) { List handlerModelInfo = new ArrayList(); List handlerSourceInfo = new ArrayList(); @@ -157,170 +157,170 @@ public class AppMetaWriter_ver_2 { if ((handlerSourceInfo.get(i) != null) && (handlerSourceInfo.get(i).equals(""))) { continue; } - Element subElement = DocumentHelper.createElement(BuilderConstants.ELEMENT_HANDLERINFO); - subElement.addAttribute(BuilderConstants.ATTRIBUTE_NAME, handlerSourceInfo.get(i)); + Element subElement = doc.createElement(BuilderConstants.ELEMENT_HANDLERINFO); + subElement.setAttribute(BuilderConstants.ATTRIBUTE_NAME, handlerSourceInfo.get(i)); Element subSubElement = - DocumentHelper.createElement(BuilderConstants.ELEMENT_MODELINFO); - subSubElement.addAttribute(BuilderConstants.ATTRIBUTE_NAME, handlerModelInfo.get(i)); - subElement.add(subSubElement); + doc.createElement(BuilderConstants.ELEMENT_MODELINFO); + subSubElement.setAttribute(BuilderConstants.ATTRIBUTE_NAME, handlerModelInfo.get(i)); + subElement.appendChild(subSubElement); for (int j = i + 1; j < handlerSourceInfo.size(); j++) { if ((handlerSourceInfo.get(i) != null) && (handlerSourceInfo.get(j) != null) && (handlerSourceInfo.get(i).equals(handlerSourceInfo.get(j)))) { Element testElement = - DocumentHelper.createElement(BuilderConstants.ELEMENT_MODELINFO); - testElement.addAttribute(BuilderConstants.ATTRIBUTE_NAME, + doc.createElement(BuilderConstants.ELEMENT_MODELINFO); + testElement.setAttribute(BuilderConstants.ATTRIBUTE_NAME, handlerModelInfo.get(j)); - subElement.add(testElement); + subElement.appendChild(testElement); handlerSourceInfo.set(j, ""); } } - element.add(subElement); + element.appendChild(subElement); } } - private static Element writeUpdateOnStartUp(BindingData dataModel) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_UPDATEONSTARTUP); - element.addAttribute(BuilderConstants.ATTRIBUTE_NAME, dataModel.getSourceName()); - element.addAttribute(BuilderConstants.ATTRIBUTE_ISCHECKED, dataModel.getUpdateOnStartup() + private static Element writeUpdateOnStartUp(Document doc, BindingData dataModel) { + Element element = doc.createElement(BuilderConstants.ELEMENT_UPDATEONSTARTUP); + element.setAttribute(BuilderConstants.ATTRIBUTE_NAME, dataModel.getSourceName()); + element.setAttribute(BuilderConstants.ATTRIBUTE_ISCHECKED, dataModel.getUpdateOnStartup() .toString()); return element; } - private static Element writeDataSourceInfo(BindingData dataModel) { + private static Element writeDataSourceInfo(Document doc, BindingData dataModel) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_DATASOURCE); + Element element = doc.createElement(BuilderConstants.ELEMENT_DATASOURCE); - element.addAttribute(BuilderConstants.ATTRIBUTE_NAME, dataModel.getSourceName()); - element.addAttribute(BuilderConstants.ATTRIBUTE_MODELTYPE, dataModel.getModelType()); + element.setAttribute(BuilderConstants.ATTRIBUTE_NAME, dataModel.getSourceName()); + element.setAttribute(BuilderConstants.ATTRIBUTE_MODELTYPE, dataModel.getModelType()); if ((dataModel.getModelType() != null) && (dataModel.getModelType().equals("REMOTECALL"))) { - element.addAttribute(BuilderConstants.ATTRIBUTE_URL, dataModel.getURL()); - element.addAttribute(BuilderConstants.ATTRIBUTE_TYPE, dataModel.getMethod()); - element.addAttribute(BuilderConstants.ATTRIBUTE_PROXY, dataModel.getProxy()); - element.addAttribute(BuilderConstants.ATTRIBUTE_QUERY, dataModel.getQuery()); - element.addAttribute(BuilderConstants.ATTRIBUTE_SOURCETYPE, dataModel.getSourceType()); - element.addAttribute(BuilderConstants.ATTRIBUTE_TIMEOUT, dataModel.getTimeout()); - element.addAttribute(BuilderConstants.ATTRIBUTE_JSONDATA, dataModel.getJsonData()); + element.setAttribute(BuilderConstants.ATTRIBUTE_URL, dataModel.getURL()); + element.setAttribute(BuilderConstants.ATTRIBUTE_TYPE, dataModel.getMethod()); + element.setAttribute(BuilderConstants.ATTRIBUTE_PROXY, dataModel.getProxy()); + element.setAttribute(BuilderConstants.ATTRIBUTE_QUERY, dataModel.getQuery()); + element.setAttribute(BuilderConstants.ATTRIBUTE_SOURCETYPE, dataModel.getSourceType()); + element.setAttribute(BuilderConstants.ATTRIBUTE_TIMEOUT, dataModel.getTimeout()); + element.setAttribute(BuilderConstants.ATTRIBUTE_JSONDATA, dataModel.getJsonData()); } else if ((dataModel.getModelType() != null) && (dataModel.getModelType().equals("STATIC"))) { List observableObjects = dataModel.getDataSourceObjects(); int size = observableObjects.size(); for (int i = 0; i < size; i++) { - element.add(writeObservableObjects(observableObjects.get(i))); + element.appendChild(writeObservableObjects(doc, observableObjects.get(i))); } String jsonData = dataModel.getJsonData(); if ((jsonData == null) || (jsonData.equals(""))) { jsonData = "{}"; } - element.addAttribute(BuilderConstants.ATTRIBUTE_JSONDATA, jsonData); - element.addAttribute(BuilderConstants.ATTRIBUTE_FILEPATH, dataModel.getStaticFilePath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_JSONDATA, jsonData); + element.setAttribute(BuilderConstants.ATTRIBUTE_FILEPATH, dataModel.getStaticFilePath()); } else if ((dataModel.getModelType() != null) && (dataModel.getModelType().equals("RUNTIMEAPI"))) { - element.addAttribute(BuilderConstants.ATTRIBUTE_API, dataModel.getRuntimeApiName()); + element.setAttribute(BuilderConstants.ATTRIBUTE_API, dataModel.getRuntimeApiName()); } return element; } - private static Element writeViewModelInfo(BindingData dataModel) { + private static Element writeViewModelInfo(Document doc, BindingData dataModel) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_VIEWMODEL); + Element element = doc.createElement(BuilderConstants.ELEMENT_VIEWMODEL); - element.addAttribute(BuilderConstants.ATTRIBUTE_NAME, dataModel.getName()); - element.addAttribute(BuilderConstants.ATTRIBUTE_DATASOURCE, dataModel.getSourceName()); + element.setAttribute(BuilderConstants.ATTRIBUTE_NAME, dataModel.getName()); + element.setAttribute(BuilderConstants.ATTRIBUTE_DATASOURCE, dataModel.getSourceName()); List observableObjects = dataModel.getViewModelObjects(); int size = observableObjects.size(); for (int i = 0; i < size; i++) { - element.add(writeObservableObjects(observableObjects.get(i))); + element.appendChild(writeObservableObjects(doc, observableObjects.get(i))); } return element; } - private static Element writeObservableObjects(BindingObject observableObject) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_OBSERVABLEOBJECT); - // Element element = DocumentHelper.createElement("dataSourceTreeNode"); + private static Element writeObservableObjects(Document doc, BindingObject observableObject) { + Element element = doc.createElement(BuilderConstants.ELEMENT_OBSERVABLEOBJECT); + // Element element = doc.createElement("dataSourceTreeNode"); - element.addAttribute(BuilderConstants.ATTRIBUTE_NAME, observableObject.getName()); + element.setAttribute(BuilderConstants.ATTRIBUTE_NAME, observableObject.getName()); if (observableObject.getMarked() != null) { - element.addAttribute(BuilderConstants.ATTRIBUTE_ISMARKED, observableObject.getMarked() + element.setAttribute(BuilderConstants.ATTRIBUTE_ISMARKED, observableObject.getMarked() .toString()); } - element.addAttribute(BuilderConstants.ATTRIBUTE_TYPE, observableObject.getType()); - element.addAttribute(BuilderConstants.ATTRIBUTE_VALUE, observableObject.getValue()); + element.setAttribute(BuilderConstants.ATTRIBUTE_TYPE, observableObject.getType()); + element.setAttribute(BuilderConstants.ATTRIBUTE_VALUE, observableObject.getValue()); List observableObjects = observableObject.getItems(); int size = observableObjects.size(); for (int i = 0; i < size; i++) { - element.add(writeObservableObjects(observableObjects.get(i))); + element.appendChild(writeObservableObjects(doc, observableObjects.get(i))); } return element; } - private static void writeStylesheets(Element element, AppFileData descriptor) { + private static void writeStylesheets(Document doc, Element element, AppFileData descriptor) { List stylesheets = descriptor.getStylesheets(); int size = stylesheets.size(); for (int i = 0; i < size; i++) { - element.add(writeStylesheet(stylesheets.get(i))); + element.appendChild(writeStylesheet(doc, stylesheets.get(i))); } } - private static Element writeLibrary(Library library) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_LIBRARY); + private static Element writeLibrary(Document doc, Library library) { + Element element = doc.createElement(BuilderConstants.ELEMENT_LIBRARY); - element.addAttribute(BuilderConstants.ATTRIBUTE_TYPE, library.getType()); - element.addAttribute(BuilderConstants.ATTRIBUTE_PARAM, library.getParam()); + element.setAttribute(BuilderConstants.ATTRIBUTE_TYPE, library.getType()); + element.setAttribute(BuilderConstants.ATTRIBUTE_PARAM, library.getParam()); return element; } - private static Element writeFramework(Framework framework) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_FRAMEWORK); + private static Element writeFramework(Document doc, Framework framework) { + Element element = doc.createElement(BuilderConstants.ELEMENT_FRAMEWORK); - element.addAttribute(BuilderConstants.ATTRIBUTE_PARAM, framework.getParam()); - element.addAttribute(BuilderConstants.ATTRIBUTE_PATH, framework.getPath()); - element.addAttribute(BuilderConstants.ATTRIBUTE_PARAM2, framework.getParam2()); + element.setAttribute(BuilderConstants.ATTRIBUTE_PARAM, framework.getParam()); + element.setAttribute(BuilderConstants.ATTRIBUTE_PATH, framework.getPath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_PARAM2, framework.getParam2()); return element; } - private static Element writeFrameworkVariable(Entry variable) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_VARIABLE); + private static Element writeFrameworkVariable(Document doc, Entry variable) { + Element element = doc.createElement(BuilderConstants.ELEMENT_VARIABLE); - element.addAttribute(BuilderConstants.ATTRIBUTE_NAME, variable.getKey()); - element.addAttribute(BuilderConstants.ATTRIBUTE_VALUE, variable.getValue()); + element.setAttribute(BuilderConstants.ATTRIBUTE_NAME, variable.getKey()); + element.setAttribute(BuilderConstants.ATTRIBUTE_VALUE, variable.getValue()); return element; } - private static Element writePage(Page page, boolean isStartup) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_PAGE); + private static Element writePage(Document doc, Page page, boolean isStartup) { + Element element = doc.createElement(BuilderConstants.ELEMENT_PAGE); - element.addAttribute(BuilderConstants.ATTRIBUTE_NAME, page.getName()); - element.addAttribute(BuilderConstants.ATTRIBUTE_STARTUP, Boolean.toString(isStartup)); - element.addAttribute(BuilderConstants.ATTRIBUTE_PAGEPATH, page.getPagePath()); - element.addAttribute(BuilderConstants.ATTRIBUTE_JSPATH, page.getJsPath()); - element.addAttribute(BuilderConstants.ATTRIBUTE_MANAGEDJSPATH, page.getManagedJsPath()); - element.addAttribute(BuilderConstants.ATTRIBUTE_HTMLPATH, page.getHtmlPath()); - element.addAttribute(BuilderConstants.ATTRIBUTE_CSSPATH, page.getCssPath()); - element.addAttribute(BuilderConstants.ATTRIBUTE_MANAGED_CSSPATH, page.getManagedCssPath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_NAME, page.getName()); + element.setAttribute(BuilderConstants.ATTRIBUTE_STARTUP, Boolean.toString(isStartup)); + element.setAttribute(BuilderConstants.ATTRIBUTE_PAGEPATH, page.getPagePath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_JSPATH, page.getJsPath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_MANAGEDJSPATH, page.getManagedJsPath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_HTMLPATH, page.getHtmlPath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_CSSPATH, page.getCssPath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_MANAGED_CSSPATH, page.getManagedCssPath()); return element; } - private static Element writeStylesheet(Stylesheet stylesheet) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_STYLESHEET); + private static Element writeStylesheet(Document doc, Stylesheet stylesheet) { + Element element = doc.createElement(BuilderConstants.ELEMENT_STYLESHEET); - element.addAttribute(BuilderConstants.ATTRIBUTE_TYPE, stylesheet.getType()); - element.addAttribute(BuilderConstants.ATTRIBUTE_PARAM, stylesheet.getParam()); + element.setAttribute(BuilderConstants.ATTRIBUTE_TYPE, stylesheet.getType()); + element.setAttribute(BuilderConstants.ATTRIBUTE_PARAM, stylesheet.getParam()); return element; } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/HtmlMetaReader.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/HtmlMetaReader.java index cfed45a..79c52c0 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/HtmlMetaReader.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/HtmlMetaReader.java @@ -20,65 +20,78 @@ * */ - package org.tizen.webuibuilder.model.app.io; import java.io.File; +import java.io.IOException; import java.net.MalformedURLException; +import java.net.URISyntaxException; import java.net.URL; -import org.dom4j.Document; -import org.dom4j.DocumentException; -import org.dom4j.io.SAXReader; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.w3c.dom.Document; +import org.xml.sax.SAXException; import org.tizen.webuibuilder.model.PartFactory; import org.tizen.webuibuilder.model.app.AppManager; import org.tizen.webuibuilder.model.filedata.HtmlMetaFileData; - public class HtmlMetaReader { - public static HtmlMetaFileData read(AppManager appManager, String filePath, - PartFactory partFactory) { - HtmlMetaFileData fileData = null; - - try { - fileData = read(appManager, new File(filePath).toURI().toURL(), partFactory); - } catch (MalformedURLException e) { - e.printStackTrace(); - } - - return fileData; - } - - public static HtmlMetaFileData read(AppManager appManager, URL url, PartFactory partFactory) { - SAXReader reader = new SAXReader(); - Document doc = null; - - try { - doc = reader.read(url); - } catch (DocumentException e) { - if (doc == null) { - return null; - } - } - - HtmlMetaFileData fileData = parsePage(appManager, doc, partFactory); - if (fileData == null) { - return null; - } - - // if (fileData.getRootPart(0) instanceof DocumentPart) { - return fileData; - // } else { - // TODO log error - // return null; - // } - } - - public static HtmlMetaFileData parsePage(AppManager appManager, Document doc, - PartFactory partFactory) { - HtmlMetaFileData fileData = HtmlMetaReader_ver_1.parsePage(appManager, doc, partFactory); - - return fileData; - } + public static HtmlMetaFileData read(AppManager appManager, String filePath, + PartFactory partFactory) { + HtmlMetaFileData fileData = null; + + File file = new File(filePath); + + if (!file.exists()) { + return null; + } + + try { + fileData = read(appManager, file.toURI().toURL(), partFactory); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + + return fileData; + } + + public static HtmlMetaFileData read(AppManager appManager, URL url, + PartFactory partFactory) { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = null; + Document doc = null; + + try { + builder = factory.newDocumentBuilder(); + doc = builder.parse(url.toURI().toString()); + } catch (ParserConfigurationException e) { + e.printStackTrace(); + } catch (SAXException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + return null; + } catch (URISyntaxException e) { + e.printStackTrace(); + } + + HtmlMetaFileData fileData = parsePage(appManager, doc, partFactory); + if (fileData == null) { + return null; + } + + return fileData; + } + + public static HtmlMetaFileData parsePage(AppManager appManager, + Document doc, PartFactory partFactory) { + HtmlMetaFileData fileData = HtmlMetaReader_ver_1.parsePage(appManager, + doc, partFactory); + + return fileData; + } } \ No newline at end of file diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/HtmlMetaReader_ver_1.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/HtmlMetaReader_ver_1.java index a03709e..13c6b2e 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/HtmlMetaReader_ver_1.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/HtmlMetaReader_ver_1.java @@ -27,9 +27,12 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import org.dom4j.Attribute; -import org.dom4j.Document; -import org.dom4j.Element; +import org.w3c.dom.Attr; +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 org.tizen.webuibuilder.BuilderConstants; import org.tizen.webuibuilder.model.DocumentPart; import org.tizen.webuibuilder.model.PagePart; @@ -53,7 +56,7 @@ public class HtmlMetaReader_ver_1 { return null; } - Element root = doc.getRootElement(); + Element root = doc.getDocumentElement(); FileReader fileReader = new FileReader(root); if (!fileReader.isValidate()) { @@ -68,52 +71,59 @@ public class HtmlMetaReader_ver_1 { HtmlMetaFileData fileData = new HtmlMetaFileData(); - for (Object childObj : root.elements("document")) { - parsePart(fileData, (Element) childObj, partFactory); + NodeList elementList = root.getElementsByTagName("document"); + for (int i = 0; i < elementList.getLength(); i++) { + parsePart(fileData, (Element) elementList.item(i), partFactory); } return fileData; } private static void parsePart(HtmlMetaFileData fileData, Element elem, PartFactory partFactory) { - for (Object childObj : elem.elements("documentInfo")) { - parsePageInfo(fileData, (Element) childObj); + NodeList elementList = elem.getElementsByTagName("documentInfo"); + for (int i = 0; i < elementList.getLength(); i++) { + parsePageInfo(fileData, (Element) elementList.item(i)); } - for (Object childObj : elem.elements("documentData")) { - parsePageData(fileData, (Element) childObj, partFactory); + elementList = elem.getElementsByTagName("documentData"); + for (int i = 0; i < elementList.getLength(); i++) { + parsePageData(fileData, (Element) elementList.item(i), partFactory); } } private static void parsePageInfo(HtmlMetaFileData fileData, Element elem) { - for (Object childObj : elem.elements("documentInfo")) { - parsePageInfo(fileData, (Element) childObj); + NodeList elementList = elem.getElementsByTagName("documentInfo"); + for (int i = 0; i < elementList.getLength(); i++) { + parsePageInfo(fileData, (Element) elementList.item(i)); } } private static void parsePageData(HtmlMetaFileData fileData, Element elem, PartFactory partFactory) { - for (Iterator i_nscreen = elem.elementIterator("tizen.nscreen"); i_nscreen - .hasNext();) { - Element nscreen = i_nscreen.next(); - for (Iterator i_screen = nscreen.elementIterator("screen"); i_screen.hasNext();) { - Element screen = i_screen.next(); + NodeList elementList = elem.getElementsByTagName("tizen.nscreen"); + for (int i = 0; i < elementList.getLength(); i++) { + Element nscreen = (Element) elementList.item(i); + NodeList elementList2 = nscreen.getElementsByTagName("screen"); + for (int j = 0; j < elementList.getLength(); j++) { + Element screen = (Element) elementList.item(j); NScreenModel model = new NScreenModel(); - model.setTitle(screen.attributeValue("title")); - model.setWidth(Integer.parseInt(screen.attributeValue("width"))); - model.setHeight(Integer.parseInt(screen.attributeValue("height"))); - model.setFileName(screen.attributeValue("cssFileName")); + model.setTitle(screen.getAttribute("title")); + model.setWidth(Integer.parseInt(screen.getAttribute("width"))); + model.setHeight(Integer.parseInt(screen.getAttribute("height"))); + model.setFileName(screen.getAttribute("cssFileName")); fileData.getNscreenModelList().add(model); } } - for (Object childObj : elem.elements("pageData")) { - parsePagePart(fileData, (Element) childObj, partFactory); + elementList = elem.getElementsByTagName("pageData"); + for (int i = 0; i < elementList.getLength(); i++) { + parsePagePart(fileData, (Element) elementList.item(i), partFactory); } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_DATABINDING)) { - parseDataBinding(fileData, (Element) childObj); + elementList = elem.getElementsByTagName(BuilderConstants.ELEMENT_DATABINDING); + for (int i = 0; i < elementList.getLength(); i++) { + parseDataBinding(fileData, (Element) elementList.item(i)); } } @@ -125,11 +135,12 @@ public class HtmlMetaReader_ver_1 { } private static void parseUpdateStartUp(HtmlMetaFileData fileData, Element element) { - for (Object childObj : element.elements(BuilderConstants.ELEMENT_UPDATEONSTARTUP)) { - Element element2 = (Element) childObj; + NodeList elementList = element.getElementsByTagName(BuilderConstants.ELEMENT_UPDATEONSTARTUP); + for (int i = 0; i < elementList.getLength(); i++) { + Element element2 = (Element) elementList.item(i); - String name = element2.attributeValue(BuilderConstants.ATTRIBUTE_NAME); - String updateStartUp = element2.attributeValue(BuilderConstants.ATTRIBUTE_ISCHECKED); + String name = element2.getAttribute(BuilderConstants.ATTRIBUTE_NAME); + String updateStartUp = element2.getAttribute(BuilderConstants.ATTRIBUTE_ISCHECKED); boolean isChecked = false; if (updateStartUp.equals("true")) { @@ -144,17 +155,19 @@ public class HtmlMetaReader_ver_1 { } private static void parseHandlerInfo(HtmlMetaFileData fileData, Element element) { - for (Object childObj : element.elements(BuilderConstants.ELEMENT_HANDLERINFO)) { - Element element2 = (Element) childObj; + NodeList elementList = element.getElementsByTagName(BuilderConstants.ELEMENT_HANDLERINFO); + for (int i = 0; i < elementList.getLength(); i++) { + Element element2 = (Element)elementList.item(i); - String name = element2.attributeValue(BuilderConstants.ATTRIBUTE_NAME); + String name = element2.getAttribute(BuilderConstants.ATTRIBUTE_NAME); BindingData dataModel = new BindingData(name); List modelInfo = new ArrayList(); - for (Object subChildObj : element.elements(BuilderConstants.ELEMENT_HANDLERINFO)) { - Element element3 = (Element) subChildObj; - String childName = element3.attributeValue(BuilderConstants.ATTRIBUTE_NAME); + NodeList elementList2 = element.getElementsByTagName(BuilderConstants.ELEMENT_HANDLERINFO); + for (int j = 0; j < elementList2.getLength(); j++) { + Element element3 = (Element)elementList2.item(j); + String childName = element3.getAttribute(BuilderConstants.ATTRIBUTE_NAME); modelInfo.add(childName); } dataModel.addHandlerInfos(name, modelInfo); @@ -164,20 +177,21 @@ public class HtmlMetaReader_ver_1 { } private static void parseDataSource(HtmlMetaFileData fileData, Element element) { - for (Object childObj : element.elements(BuilderConstants.ELEMENT_DATASOURCE)) { - Element element2 = (Element) childObj; + NodeList elementList = element.getElementsByTagName(BuilderConstants.ELEMENT_DATASOURCE); + for (int i = 0; i < elementList.getLength(); i++) { + Element element2 = (Element)elementList.item(i); - String name = element2.attributeValue(BuilderConstants.ATTRIBUTE_NAME); - String modelType = element2.attributeValue(BuilderConstants.ATTRIBUTE_MODELTYPE); + String name = element2.getAttribute(BuilderConstants.ATTRIBUTE_NAME); + String modelType = element2.getAttribute(BuilderConstants.ATTRIBUTE_MODELTYPE); if ((modelType != null) && (modelType.equals("REMOTECALL"))) { - String url = element2.attributeValue(BuilderConstants.ATTRIBUTE_URL); - String type = element2.attributeValue(BuilderConstants.ATTRIBUTE_TYPE); - String proxy = element2.attributeValue(BuilderConstants.ATTRIBUTE_PROXY); - String query = element2.attributeValue(BuilderConstants.ATTRIBUTE_QUERY); - String sourceType = element2.attributeValue(BuilderConstants.ATTRIBUTE_SOURCETYPE); - String timeout = element2.attributeValue(BuilderConstants.ATTRIBUTE_TIMEOUT); - String jsonData = element2.attributeValue(BuilderConstants.ATTRIBUTE_JSONDATA); + String url = element2.getAttribute(BuilderConstants.ATTRIBUTE_URL); + String type = element2.getAttribute(BuilderConstants.ATTRIBUTE_TYPE); + String proxy = element2.getAttribute(BuilderConstants.ATTRIBUTE_PROXY); + String query = element2.getAttribute(BuilderConstants.ATTRIBUTE_QUERY); + String sourceType = element2.getAttribute(BuilderConstants.ATTRIBUTE_SOURCETYPE); + String timeout = element2.getAttribute(BuilderConstants.ATTRIBUTE_TIMEOUT); + String jsonData = element2.getAttribute(BuilderConstants.ATTRIBUTE_JSONDATA); BindingData dataModel = new BindingData(name, modelType, url, type, proxy, query, sourceType, @@ -187,8 +201,8 @@ public class HtmlMetaReader_ver_1 { fileData.addDataSource(dataModel); } else if ((modelType != null) && (modelType.equals("STATIC"))) { - String jsonData = element2.attributeValue(BuilderConstants.ATTRIBUTE_JSONDATA); - String filePath = element2.attributeValue(BuilderConstants.ATTRIBUTE_FILEPATH); + String jsonData = element2.getAttribute(BuilderConstants.ATTRIBUTE_JSONDATA); + String filePath = element2.getAttribute(BuilderConstants.ATTRIBUTE_FILEPATH); BindingData dataModel = new BindingData(name, modelType, jsonData, filePath); @@ -196,7 +210,7 @@ public class HtmlMetaReader_ver_1 { fileData.addDataSource(dataModel); } else if ((modelType != null) && (modelType.equals("RUNTIMEAPI"))) { - String api = element2.attributeValue(BuilderConstants.ATTRIBUTE_API); + String api = element2.getAttribute(BuilderConstants.ATTRIBUTE_API); BindingData dataModel = new BindingData(name, modelType, api); fileData.addDataSource(dataModel); @@ -209,11 +223,12 @@ public class HtmlMetaReader_ver_1 { } private static void parseViewModel(HtmlMetaFileData fileData, Element element) { - for (Object childObj : element.elements(BuilderConstants.ELEMENT_VIEWMODEL)) { - Element element2 = (Element) childObj; + NodeList elementList = element.getElementsByTagName(BuilderConstants.ELEMENT_VIEWMODEL); + for (int i = 0; i < elementList.getLength(); i++) { + Element element2 = (Element) elementList.item(i); - String name = element2.attributeValue(BuilderConstants.ATTRIBUTE_NAME); - String dataSourceName = element2.attributeValue(BuilderConstants.ATTRIBUTE_DATASOURCE); + String name = element2.getAttribute(BuilderConstants.ATTRIBUTE_NAME); + String dataSourceName = element2.getAttribute(BuilderConstants.ATTRIBUTE_DATASOURCE); BindingData dataModel = new BindingData(name, dataSourceName); parseObservableObject(element2, dataModel, null); @@ -223,13 +238,14 @@ public class HtmlMetaReader_ver_1 { private static void parseObservableObject(Element element, BindingData dataModel, BindingObject parentObject) { - for (Object childObj : element.elements(BuilderConstants.ELEMENT_OBSERVABLEOBJECT)) { - Element element2 = (Element) childObj; - - String name = element2.attributeValue(BuilderConstants.ATTRIBUTE_NAME); - String type = element2.attributeValue(BuilderConstants.ATTRIBUTE_TYPE); - String value = element2.attributeValue(BuilderConstants.ATTRIBUTE_VALUE); - String isMarked = element2.attributeValue(BuilderConstants.ATTRIBUTE_ISMARKED); + NodeList elementList = element.getElementsByTagName(BuilderConstants.ELEMENT_OBSERVABLEOBJECT); + for (int i = 0; i < elementList.getLength(); i++) { + Element element2 = (Element) elementList.item(i); + + String name = element2.getAttribute(BuilderConstants.ATTRIBUTE_NAME); + String type = element2.getAttribute(BuilderConstants.ATTRIBUTE_TYPE); + String value = element2.getAttribute(BuilderConstants.ATTRIBUTE_VALUE); + String isMarked = element2.getAttribute(BuilderConstants.ATTRIBUTE_ISMARKED); boolean boolMarked = Boolean.valueOf(isMarked).booleanValue(); BindingObject dataSource = new BindingObject(name, type, value, boolMarked); @@ -248,13 +264,15 @@ public class HtmlMetaReader_ver_1 { PartFactory partFactory) { List selectors = null; - for (Object childObj : elem.elements("tizen.css")) { - Element elem2 = (Element) childObj; + NodeList elementList = elem.getElementsByTagName("tizen.css"); + for (int i = 0; i < elementList.getLength(); i++) { + Element elem2 = (Element) elementList.item(i); selectors = parseStyle(elem2); } - for (Object childObj : elem.elements("tizen.doc")) { - Element elem2 = (Element) childObj; + elementList = elem.getElementsByTagName("tizen.doc"); + for (int i = 0; i < elementList.getLength(); i++) { + Element elem2 = (Element) elementList.item(i); Part part = parseElement(fileData, elem2, partFactory, selectors); if (part instanceof DocumentPart) { fileData.addRootPart("", part); @@ -267,20 +285,22 @@ public class HtmlMetaReader_ver_1 { List selectors = new ArrayList(); // Sets selectors. - for (Object childObj : elem.elements("tizen.selector")) { - Element element = (Element) childObj; - - String selectorName = element.attributeValue(BuilderConstants.ATTRIBUTE_NAME); - String partId = element.attributeValue(BuilderConstants.ATTRIBUTE_PARTID); + NodeList elementList = elem.getElementsByTagName("tizen.selector"); + for (int i = 0; i < elementList.getLength(); i++) { + Element element = (Element) elementList.item(i); + + String selectorName = element.getAttribute(BuilderConstants.ATTRIBUTE_NAME); + String partId = element.getAttribute(BuilderConstants.ATTRIBUTE_PARTID); CssSelector selector = new CssSelector(selectorName, "", partId); selectors.add(selector); // Sets styles. - for (Object childObj2 : element.elements("tizen.style")) { - Element element2 = (Element) childObj2; + elementList = elem.getElementsByTagName("tizen.style"); + for (int j = 0; j < elementList.getLength(); j++) { + Element element2 = (Element) elementList.item(j); - String name = element2.attributeValue(BuilderConstants.ATTRIBUTE_NAME); - String value = element2.attributeValue(BuilderConstants.ATTRIBUTE_VALUE); + String name = element2.getAttribute(BuilderConstants.ATTRIBUTE_NAME); + String value = element2.getAttribute(BuilderConstants.ATTRIBUTE_VALUE); selector.setPropertyValue(name, value); } @@ -291,18 +311,18 @@ public class HtmlMetaReader_ver_1 { private static Part parseElement(HtmlMetaFileData fileData, Element elem, PartFactory partFactory, List selectors) { - Part part = partFactory.createPart(elem.getName()); + Part part = partFactory.createPart(elem.getNodeName()); if (part == null) { } else { if (part instanceof PagePart) { - fileData.setName(0, elem.attribute(BuilderConstants.PROPERTY_ID).getValue()); + fileData.setName(0, elem.getAttribute(BuilderConstants.PROPERTY_ID)); } // Sets events and properties. - Attribute attr = null; - for (Object attrObj : elem.attributes()) { - attr = (Attribute) attrObj; + NamedNodeMap attrList = elem.getAttributes(); + for (int i = 0; i < attrList.getLength(); i++) { + Attr attr = (Attr) attrList.item(i); // if (BuilderConstants.ATTRIBUTE_EVENT_PREFIX.equals((attr // .getName()).substring(0, // BuilderConstants.ATTRIBUTE_EVENT_PREFIX.length()))) { @@ -313,7 +333,7 @@ public class HtmlMetaReader_ver_1 { } if (part instanceof WidgetPart) { - String text = elem.getText(); + String text = elem.getTextContent(); if (!text.isEmpty()) { ((WidgetPart) part).setHtmlString(text); @@ -332,20 +352,20 @@ public class HtmlMetaReader_ver_1 { // Adds children. Element child = null; Part childpart = null; - for (Object childObj : elem.elements()) { - child = (Element) childObj; - if (child.getName().equals("event")) { - Attribute eventAttr = null; - for (Object attrObj : child.attributes()) { - eventAttr = (Attribute) attrObj; + for (int i = 0; i < elem.getChildNodes().getLength(); i++) { + child = (Element) elem.getChildNodes().item(i); + if (child.getNodeName().equals("event")) { + attrList = child.getAttributes(); + for (int j = 0; j < attrList.getLength(); j++) { + Attr eventAttr = (Attr) attrList.item(j); part.setEventValue(eventAttr.getName(), eventAttr.getValue()); } - } else if (child.getName().equals("gotoPage")) { - Attribute eventAttr = null; + } else if (child.getNodeName().equals("gotoPage")) { List strList = new ArrayList(); - for (Object attrObj : child.attributes()) { - eventAttr = (Attribute) attrObj; + attrList = child.getAttributes(); + for (int j = 0; j < attrList.getLength(); j++) { + Attr eventAttr = (Attr) attrList.item(j); strList.add(eventAttr.getValue()); } part.setGotoPageEventValue(strList.get(0), strList.get(1), strList.get(2)); @@ -359,35 +379,5 @@ public class HtmlMetaReader_ver_1 { return part; } - - // private static boolean parseNScreen(HtmlMetaFileData fileData, Element - // elem) { - // int index = fileData.getPageCount() - 1; - // if(index < 0){ - // return false; - // } - // - // for(Iterator i_screen = elem.elementIterator("screen"); - // i_screen.hasNext(); ) { - // Element screen = i_screen.next(); - // NScreenModel model = new NScreenModel(); - // for(Iterator i_child = screen.elementIterator(); - // i_child.hasNext(); ) { - // Element child = i_child.next(); - // String tagName = child.getName(); - // if( "title".equals(tagName) ) { - // model.setTitle(child.getText()); - // } else if( "width".equals(tagName) ) { - // model.setWidth(Integer.parseInt(child.getText())); - // } else if( "height".equals(tagName) ) { - // model.setHeight(Integer.parseInt(child.getText())); - // } else if( "cssFileName".equals(tagName) ) { - // model.setFileName(child.getText()); - // } - // } - // fileData.addNScreenModel(index, model); - // } - // - // return true; - // } + } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/HtmlMetaWriter.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/HtmlMetaWriter.java index 1defb5b..39e1b80 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/HtmlMetaWriter.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/HtmlMetaWriter.java @@ -28,12 +28,20 @@ import java.io.IOException; import java.io.StringWriter; import java.io.Writer; -import org.dom4j.Document; -import org.dom4j.DocumentHelper; -import org.dom4j.Element; -import org.dom4j.io.OutputFormat; -import org.dom4j.io.XMLWriter; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +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 org.w3c.dom.Document; +import org.w3c.dom.Element; import org.tizen.webuibuilder.model.app.AppManager; +import org.tizen.webuibuilder.model.filedata.AppFileData; public class HtmlMetaWriter { @@ -41,19 +49,23 @@ public class HtmlMetaWriter { private static final int INDENT_SIZE = 4; public static void writeTo(AppManager appManager, Writer writer) throws IOException { - Element elem = writeElement(appManager); - - Document doc = DocumentHelper.createDocument(); - doc.add(elem); - - OutputFormat format = OutputFormat.createPrettyPrint(); - format.setIndentSize(INDENT_SIZE); - - XMLWriter xmlwriter = new XMLWriter(writer, format); - xmlwriter.write(doc); - xmlwriter.close(); + Document doc = writeElement(appManager); + + DOMSource source = new DOMSource(doc); + StreamResult result = new StreamResult(writer); + + TransformerFactory factory = TransformerFactory.newInstance(); + Transformer transformer; + try { + transformer = factory.newTransformer(); + transformer.transform(source, result); + } catch (TransformerConfigurationException e) { + e.printStackTrace(); + } catch (TransformerException e) { + e.printStackTrace(); + } } - + public static String writeToString(AppManager appManager) { StringWriter writer = new StringWriter(); try { @@ -69,7 +81,7 @@ public class HtmlMetaWriter { writeTo(appManager, new FileWriter(filePath)); } - public static Element writeElement(AppManager appManager) { + public static Document writeElement(AppManager appManager) { return HtmlMetaWriter_ver_1.writeElement(appManager); } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/HtmlMetaWriter_ver_1.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/HtmlMetaWriter_ver_1.java index 3c767fe..2a9c52d 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/HtmlMetaWriter_ver_1.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/app/io/HtmlMetaWriter_ver_1.java @@ -29,8 +29,8 @@ import java.util.Comparator; import java.util.List; import java.util.Map.Entry; -import org.dom4j.DocumentHelper; -import org.dom4j.Element; +import org.w3c.dom.Document; +import org.w3c.dom.Element; import org.tizen.webuibuilder.BuilderConstants; import org.tizen.webuibuilder.model.GotoPageProperty; import org.tizen.webuibuilder.model.Part; @@ -49,89 +49,89 @@ import org.tizen.webuibuilder.ui.views.databinding.model.BindingObject; public class HtmlMetaWriter_ver_1 { - public static Element writeElement(AppManager appManager) { + public static Document writeElement(AppManager appManager) { TizenFileFormatter fmt = new TizenFileFormatter("tizen-app", "1", "Tizen Web UI Builder Project"); - Element root = fmt.GenerateFileFormat(); + Document doc = fmt.GenerateFileFormat(); - Element elem0 = DocumentHelper.createElement("document"); - root.add(elem0); + Element elem0 = doc.createElement("document"); + doc.appendChild(elem0); - Element pageInfoelem = DocumentHelper.createElement("documentInfo"); + Element pageInfoelem = doc.createElement("documentInfo"); Element elem; - elem = DocumentHelper.createElement("title"); - elem.addText("test"); - pageInfoelem.add(elem); - elem = DocumentHelper.createElement("author"); - elem.addText("noname"); - pageInfoelem.add(elem); - elem = DocumentHelper.createElement("version"); - elem.addText("0.1.1"); - pageInfoelem.add(elem); - elem0.add(pageInfoelem); - - Element docDataElem = DocumentHelper.createElement("documentData"); - - Element nscreenElement = DocumentHelper.createElement("tizen.nscreen"); - docDataElem.add(writeNScreen(nscreenElement, appManager.getPageData(0).getCssFiles())); + elem = doc.createElement("title"); + elem.setTextContent("test"); + pageInfoelem.appendChild(elem); + elem = doc.createElement("author"); + elem.setTextContent("noname"); + pageInfoelem.appendChild(elem); + elem = doc.createElement("version"); + elem.setTextContent("0.1.1"); + pageInfoelem.appendChild(elem); + elem0.appendChild(pageInfoelem); + + Element docDataElem = doc.createElement("documentData"); + + Element nscreenElement = doc.createElement("tizen.nscreen"); + docDataElem.appendChild(writeNScreen(doc, nscreenElement, appManager.getPageData(0).getCssFiles())); for (int i = 0; i < appManager.getNumberOfPages(); i++) { PageData pageData = appManager.getPageData(i); - Element pageDataElem = DocumentHelper.createElement("pageData"); - pageDataElem.setAttributeValue("id", pageData.getName()); + Element pageDataElem = doc.createElement("pageData"); + pageDataElem.setAttribute("id", pageData.getName()); - // Element cssElement = DocumentHelper.createElement("tizen.css"); + // Element cssElement = doc.createElement("tizen.css"); // pageDataElem.add(writeCss(cssElement, pageData.getRootPart())); - pageDataElem.add(writePart(pageData.getRootPart(), false)); + pageDataElem.appendChild(writePart(doc, pageData.getRootPart(), false)); - docDataElem.add(pageDataElem); + docDataElem.appendChild(pageDataElem); } - Element dataModels = DocumentHelper.createElement(BuilderConstants.ELEMENT_DATABINDING); - docDataElem.add(dataModels); - writeDataModels(dataModels, appManager.getAppFileData()); + Element dataModels = doc.createElement(BuilderConstants.ELEMENT_DATABINDING); + docDataElem.appendChild(dataModels); + writeDataModels(doc, dataModels, appManager.getAppFileData()); - elem0.add(docDataElem); + elem0.appendChild(docDataElem); - return root; + return doc; } - public static Element writeCss(Element cssElement, Part part) { + public static Element writeCss(Document doc, Element cssElement, Part part) { // Adds selector attribute. for (CssSelector selector : part.getSelectors()) { if (selector == null) { continue; } - Element selectorElement = DocumentHelper.createElement("tizen.selector"); - selectorElement.addAttribute(BuilderConstants.ATTRIBUTE_NAME, + Element selectorElement = doc.createElement("tizen.selector"); + selectorElement.setAttribute(BuilderConstants.ATTRIBUTE_NAME, selector.getSelectorName()); - selectorElement.addAttribute(BuilderConstants.ATTRIBUTE_PARTID, selector.getPartId()); + selectorElement.setAttribute(BuilderConstants.ATTRIBUTE_PARTID, selector.getPartId()); // Adds style attribute. for (Entry child : selector.getProperties()) { - Element styleElement = DocumentHelper.createElement("tizen.style"); - styleElement.addAttribute(BuilderConstants.ATTRIBUTE_NAME, child.getKey()); - styleElement.addAttribute(BuilderConstants.ATTRIBUTE_VALUE, child.getValue()); - selectorElement.add(styleElement); + Element styleElement = doc.createElement("tizen.style"); + styleElement.setAttribute(BuilderConstants.ATTRIBUTE_NAME, child.getKey()); + styleElement.setAttribute(BuilderConstants.ATTRIBUTE_VALUE, child.getValue()); + selectorElement.appendChild(styleElement); } - cssElement.add(selectorElement); + cssElement.appendChild(selectorElement); } List children = part.getChildren(); int size = children.size(); for (int i = 0; i < size; i++) { - writeCss(cssElement, children.get(i)); + writeCss(doc, cssElement, children.get(i)); } return cssElement; } // public static Element writeDataBinding(Part part) { - // Element elem = DocumentHelper.createElement("tizen.dataModel"); + // Element elem = doc.createElement("tizen.dataModel"); // // String value = part.getPropertyValue("data-bind"); // if ((value != null) && (!value.equals(""))) { @@ -150,7 +150,7 @@ public class HtmlMetaWriter_ver_1 { // return elem; // } - public static Element writeNScreen(Element nscreenElement, List list) { + public static Element writeNScreen(Document doc, Element nscreenElement, List list) { Collections.sort(list, new Comparator() { @Override public int compare(CssFile o1, CssFile o2) { @@ -167,28 +167,28 @@ public class HtmlMetaWriter_ver_1 { int preWidth = 0; for (CssFile model : list) { - Element screenElement = DocumentHelper.createElement("screen"); - screenElement.addAttribute("title", model.getTitle()); - screenElement.addAttribute("width", String.valueOf(model.getWidth())); - screenElement.addAttribute("height", String.valueOf(model.getHeight())); - screenElement.addAttribute("cssFileName", model.getFileName()); - screenElement.addAttribute("minWidth", String.valueOf(preWidth)); + Element screenElement = doc.createElement("screen"); + screenElement.setAttribute("title", model.getTitle()); + screenElement.setAttribute("width", String.valueOf(model.getWidth())); + screenElement.setAttribute("height", String.valueOf(model.getHeight())); + screenElement.setAttribute("cssFileName", model.getFileName()); + screenElement.setAttribute("minWidth", String.valueOf(preWidth)); preWidth = model.getWidth(); if (preWidth != 0) { preWidth++; } - nscreenElement.add(screenElement); + nscreenElement.appendChild(screenElement); } return nscreenElement; } - public static Element writePart(Part part, boolean includePid) { - Element elem = DocumentHelper.createElement(part.getDescriptorId()); + public static Element writePart(Document doc, Part part, boolean includePid) { + Element elem = doc.createElement(part.getDescriptorId()); if (includePid) { - elem.addAttribute(BuilderConstants.ATTRIBUTE_PID, part.getPartId()); + elem.setAttribute(BuilderConstants.ATTRIBUTE_PID, part.getPartId()); // Adds height style attribute. PartDescriptor descriptor = part.getPartDescriptor(); @@ -199,12 +199,12 @@ public class HtmlMetaWriter_ver_1 { String value = BuilderConstants.ATTRIBUTE_VALUE_HEIGHT + BuilderConstants.COLON + height + BuilderConstants.ATTRIBUTE_VALUE_PX; - elem.addAttribute(BuilderConstants.ATTRIBUTE_STYLE, value); + elem.setAttribute(BuilderConstants.ATTRIBUTE_STYLE, value); - Element textElem = DocumentHelper.createElement(BuilderConstants.PART_TEXT); - textElem.addAttribute(BuilderConstants.ATTRIBUTE_TEXT, + Element textElem = doc.createElement(BuilderConstants.PART_TEXT); + textElem.setAttribute(BuilderConstants.ATTRIBUTE_TEXT, descriptor.getGuideText()); - elem.add(textElem); + elem.appendChild(textElem); } } } @@ -213,10 +213,10 @@ public class HtmlMetaWriter_ver_1 { String value = part.getPropertyValue(property.getPropertyName()); if ((value != null) && (!value.isEmpty())) { if (property.getPropertyType().equals(TypeDescriptor.ID_OF_HTMLSTRING)) { - elem.setText(value); + elem.setTextContent(value); } else if (property.getPropertyType() .indexOf(BuilderConstants.PROPERTY_GROUP_PREFIX) != 0) { - elem.addAttribute(property.getPropertyName(), value); + elem.setAttribute(property.getPropertyName(), value); } } } @@ -231,9 +231,9 @@ public class HtmlMetaWriter_ver_1 { for (int i = 0; i < values.size(); i++) { value = values.get(i); if (value != null) { - Element element = DocumentHelper.createElement("event"); - element.addAttribute(event.getKey(), value); - elem.add(element); + Element element = doc.createElement("event"); + element.setAttribute(event.getKey(), value); + elem.appendChild(element); } } } @@ -243,42 +243,42 @@ public class HtmlMetaWriter_ver_1 { GotoPageProperty value = gotoPageEvent.getValue(); if ((value != null) && (value.getDestinationPage() != null) && (value.getTransition() != null)) { - Element element = DocumentHelper.createElement("gotoPage"); - element.addAttribute("event", gotoPageEvent.getKey()); - element.addAttribute("destinationPage", value.getDestinationPage()); - element.addAttribute("transition", value.getTransition()); - elem.add(element); + Element element = doc.createElement("gotoPage"); + element.setAttribute("event", gotoPageEvent.getKey()); + element.setAttribute("destinationPage", value.getDestinationPage()); + element.setAttribute("transition", value.getTransition()); + elem.appendChild(element); } } for (Part child : part.getChildren()) { - elem.add(writePart(child, includePid)); + elem.appendChild(writePart(doc, child, includePid)); } return elem; } - private static void writeDataModels(Element element, AppFileData descriptor) { + private static void writeDataModels(Document doc, Element element, AppFileData descriptor) { List dataSources = descriptor.getDataSources(); for (BindingData dataSource : dataSources) { - element.add(writeDataSourceInfo(dataSource)); + element.appendChild(writeDataSourceInfo(doc, dataSource)); } List viewModels = descriptor.getViewModels(); for (BindingData viewModel : viewModels) { - element.add(writeViewModelInfo(viewModel)); + element.appendChild(writeViewModelInfo(doc, viewModel)); } - writeHandlerInfoFromViewModels(element, viewModels); + writeHandlerInfoFromViewModels(doc, element, viewModels); for (BindingData dataSource : dataSources) { if (dataSource.getUpdateOnStartup()) { - element.add(writeUpdateOnStartUp(dataSource)); + element.appendChild(writeUpdateOnStartUp(doc, dataSource)); } } } - private static void writeHandlerInfoFromViewModels(Element element, List dataModels) { + private static void writeHandlerInfoFromViewModels(Document doc, Element element, List dataModels) { List handlerModelInfo = new ArrayList(); List handlerSourceInfo = new ArrayList(); @@ -299,113 +299,113 @@ public class HtmlMetaWriter_ver_1 { if ((handlerSourceInfo.get(i) != null) && (handlerSourceInfo.get(i).equals(""))) { continue; } - Element subElement = DocumentHelper.createElement(BuilderConstants.ELEMENT_HANDLERINFO); - subElement.addAttribute(BuilderConstants.ATTRIBUTE_NAME, handlerSourceInfo.get(i)); + Element subElement = doc.createElement(BuilderConstants.ELEMENT_HANDLERINFO); + subElement.setAttribute(BuilderConstants.ATTRIBUTE_NAME, handlerSourceInfo.get(i)); Element subSubElement = - DocumentHelper.createElement(BuilderConstants.ELEMENT_MODELINFO); - subSubElement.addAttribute(BuilderConstants.ATTRIBUTE_NAME, handlerModelInfo.get(i)); - subElement.add(subSubElement); + doc.createElement(BuilderConstants.ELEMENT_MODELINFO); + subSubElement.setAttribute(BuilderConstants.ATTRIBUTE_NAME, handlerModelInfo.get(i)); + subElement.appendChild(subSubElement); for (int j = i + 1; j < handlerSourceInfo.size(); j++) { if ((handlerSourceInfo.get(i) != null) && (handlerSourceInfo.get(j) != null) && (handlerSourceInfo.get(i).equals(handlerSourceInfo.get(j)))) { Element testElement = - DocumentHelper.createElement(BuilderConstants.ELEMENT_MODELINFO); - testElement.addAttribute(BuilderConstants.ATTRIBUTE_NAME, + doc.createElement(BuilderConstants.ELEMENT_MODELINFO); + testElement.setAttribute(BuilderConstants.ATTRIBUTE_NAME, handlerModelInfo.get(j)); - subElement.add(testElement); + subElement.appendChild(testElement); handlerSourceInfo.set(j, ""); } } - element.add(subElement); + element.appendChild(subElement); } } - private static Element writeUpdateOnStartUp(BindingData dataModel) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_UPDATEONSTARTUP); - element.addAttribute(BuilderConstants.ATTRIBUTE_NAME, dataModel.getSourceName()); - element.addAttribute(BuilderConstants.ATTRIBUTE_ISCHECKED, dataModel.getUpdateOnStartup() + private static Element writeUpdateOnStartUp(Document doc, BindingData dataModel) { + Element element = doc.createElement(BuilderConstants.ELEMENT_UPDATEONSTARTUP); + element.setAttribute(BuilderConstants.ATTRIBUTE_NAME, dataModel.getSourceName()); + element.setAttribute(BuilderConstants.ATTRIBUTE_ISCHECKED, dataModel.getUpdateOnStartup() .toString()); return element; } - private static Element writeDataSourceInfo(BindingData dataModel) { + private static Element writeDataSourceInfo(Document doc, BindingData dataModel) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_DATASOURCE); + Element element = doc.createElement(BuilderConstants.ELEMENT_DATASOURCE); - element.addAttribute(BuilderConstants.ATTRIBUTE_NAME, dataModel.getSourceName()); - element.addAttribute(BuilderConstants.ATTRIBUTE_MODELTYPE, dataModel.getModelType()); + element.setAttribute(BuilderConstants.ATTRIBUTE_NAME, dataModel.getSourceName()); + element.setAttribute(BuilderConstants.ATTRIBUTE_MODELTYPE, dataModel.getModelType()); if ((dataModel.getModelType() != null) && (dataModel.getModelType().equals("REMOTECALL"))) { - element.addAttribute(BuilderConstants.ATTRIBUTE_URL, dataModel.getURL()); - element.addAttribute(BuilderConstants.ATTRIBUTE_TYPE, dataModel.getMethod()); - element.addAttribute(BuilderConstants.ATTRIBUTE_PROXY, dataModel.getProxy()); - element.addAttribute(BuilderConstants.ATTRIBUTE_QUERY, dataModel.getQuery()); - element.addAttribute(BuilderConstants.ATTRIBUTE_SOURCETYPE, dataModel.getSourceType()); - element.addAttribute(BuilderConstants.ATTRIBUTE_TIMEOUT, dataModel.getTimeout()); - element.addAttribute(BuilderConstants.ATTRIBUTE_JSONDATA, dataModel.getJsonData()); + element.setAttribute(BuilderConstants.ATTRIBUTE_URL, dataModel.getURL()); + element.setAttribute(BuilderConstants.ATTRIBUTE_TYPE, dataModel.getMethod()); + element.setAttribute(BuilderConstants.ATTRIBUTE_PROXY, dataModel.getProxy()); + element.setAttribute(BuilderConstants.ATTRIBUTE_QUERY, dataModel.getQuery()); + element.setAttribute(BuilderConstants.ATTRIBUTE_SOURCETYPE, dataModel.getSourceType()); + element.setAttribute(BuilderConstants.ATTRIBUTE_TIMEOUT, dataModel.getTimeout()); + element.setAttribute(BuilderConstants.ATTRIBUTE_JSONDATA, dataModel.getJsonData()); List observableObjects = dataModel.getDataSourceObjects(); int size = observableObjects.size(); for (int i = 0; i < size; i++) { - element.add(writeObservableObjects(observableObjects.get(i))); + element.appendChild(writeObservableObjects(doc, observableObjects.get(i))); } } else if ((dataModel.getModelType() != null) && (dataModel.getModelType().equals("STATIC"))) { List observableObjects = dataModel.getDataSourceObjects(); int size = observableObjects.size(); for (int i = 0; i < size; i++) { - element.add(writeObservableObjects(observableObjects.get(i))); + element.appendChild(writeObservableObjects(doc, observableObjects.get(i))); } String jsonData = dataModel.getJsonData(); if ((jsonData == null) || (jsonData.equals(""))) { jsonData = "{}"; } - element.addAttribute(BuilderConstants.ATTRIBUTE_JSONDATA, jsonData); - element.addAttribute(BuilderConstants.ATTRIBUTE_FILEPATH, dataModel.getStaticFilePath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_JSONDATA, jsonData); + element.setAttribute(BuilderConstants.ATTRIBUTE_FILEPATH, dataModel.getStaticFilePath()); } else if ((dataModel.getModelType() != null) && (dataModel.getModelType().equals("RUNTIMEAPI"))) { - element.addAttribute(BuilderConstants.ATTRIBUTE_API, dataModel.getRuntimeApiName()); + element.setAttribute(BuilderConstants.ATTRIBUTE_API, dataModel.getRuntimeApiName()); } return element; } - private static Element writeViewModelInfo(BindingData dataModel) { + private static Element writeViewModelInfo(Document doc, BindingData dataModel) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_VIEWMODEL); + Element element = doc.createElement(BuilderConstants.ELEMENT_VIEWMODEL); - element.addAttribute(BuilderConstants.ATTRIBUTE_NAME, dataModel.getName()); - element.addAttribute(BuilderConstants.ATTRIBUTE_DATASOURCE, dataModel.getSourceName()); + element.setAttribute(BuilderConstants.ATTRIBUTE_NAME, dataModel.getName()); + element.setAttribute(BuilderConstants.ATTRIBUTE_DATASOURCE, dataModel.getSourceName()); List observableObjects = dataModel.getViewModelObjects(); int size = observableObjects.size(); for (int i = 0; i < size; i++) { - element.add(writeObservableObjects(observableObjects.get(i))); + element.appendChild(writeObservableObjects(doc, observableObjects.get(i))); } return element; } - private static Element writeObservableObjects(BindingObject observableObject) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_OBSERVABLEOBJECT); - // Element element = DocumentHelper.createElement("dataSourceTreeNode"); + private static Element writeObservableObjects(Document doc, BindingObject observableObject) { + Element element = doc.createElement(BuilderConstants.ELEMENT_OBSERVABLEOBJECT); + // Element element = doc.createElement("dataSourceTreeNode"); - element.addAttribute(BuilderConstants.ATTRIBUTE_NAME, observableObject.getName()); + element.setAttribute(BuilderConstants.ATTRIBUTE_NAME, observableObject.getName()); if (observableObject.getMarked() != null) { - element.addAttribute(BuilderConstants.ATTRIBUTE_ISMARKED, observableObject.getMarked() + element.setAttribute(BuilderConstants.ATTRIBUTE_ISMARKED, observableObject.getMarked() .toString()); } - element.addAttribute(BuilderConstants.ATTRIBUTE_TYPE, observableObject.getType()); - element.addAttribute(BuilderConstants.ATTRIBUTE_VALUE, observableObject.getValue()); + element.setAttribute(BuilderConstants.ATTRIBUTE_TYPE, observableObject.getType()); + element.setAttribute(BuilderConstants.ATTRIBUTE_VALUE, observableObject.getValue()); List observableObjects = observableObject.getItems(); int size = observableObjects.size(); for (int i = 0; i < size; i++) { - element.add(writeObservableObjects(observableObjects.get(i))); + element.appendChild(writeObservableObjects(doc, observableObjects.get(i))); } return element; diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/css/io/CssDescriptorReader.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/css/io/CssDescriptorReader.java index 040d987..d94eb5e 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/css/io/CssDescriptorReader.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/css/io/CssDescriptorReader.java @@ -23,12 +23,14 @@ package org.tizen.webuibuilder.model.css.io; +import java.io.IOException; +import java.net.URISyntaxException; import java.net.URL; -import org.dom4j.Document; -import org.dom4j.DocumentException; -import org.dom4j.Element; -import org.dom4j.io.SAXReader; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + import org.tizen.webuibuilder.BuilderConstants; import org.tizen.webuibuilder.model.css.descriptors.CssCategoryDescriptor; import org.tizen.webuibuilder.model.css.descriptors.CssDescriptor; @@ -36,6 +38,10 @@ import org.tizen.webuibuilder.model.css.descriptors.CssPropertyDescriptor; import org.tizen.webuibuilder.model.descriptors.DescriptorManager; import org.tizen.webuibuilder.model.descriptors.PropertyConditionDescriptor; import org.tizen.webuibuilder.model.descriptors.TypeDescriptor; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; /** @@ -80,19 +86,27 @@ public class CssDescriptorReader { * a {@link URL} of descriptor XML */ public void parse(URL descriptorPath) { - SAXReader reader = new SAXReader(); + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = null; Document doc = null; - + try { - doc = reader.read(descriptorPath); - } catch (DocumentException e) { + builder = factory.newDocumentBuilder(); + doc = builder.parse(descriptorPath.toURI().toString()); + } catch (URISyntaxException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (ParserConfigurationException e) { + e.printStackTrace(); + } catch (SAXException e) { e.printStackTrace(); } CssDescriptor cssDescriptor = new CssDescriptor(); - if (doc != null && doc.getRootElement() != null) { - parseRoot(doc.getRootElement(), cssDescriptor); + if (doc != null && doc.getDocumentElement() != null) { + parseRoot(doc.getDocumentElement(), cssDescriptor); } manager.setCssDescriptor(cssDescriptor); @@ -107,8 +121,9 @@ public class CssDescriptorReader { * a {@link CssDescriptor} */ private void parseRoot(Element root, CssDescriptor cssDescriptor) { - for (Object childObj : root.elements(ELEM_CATEGORY)) { - parseCategory((Element) childObj, cssDescriptor); + NodeList elemList = root.getElementsByTagName(ELEM_CATEGORY); + for(int i = 0; i < elemList.getLength(); i++){ + parseCategory((Element) elemList.item(i), cssDescriptor); } } @@ -121,14 +136,15 @@ public class CssDescriptorReader { * a {@link CssCategoryDescriptor} */ private void parseCategory(Element elem, CssDescriptor cssDescriptor) { - String name = elem.attributeValue(ATTR_NAME); - String displayName = elem.attributeValue(ATTR_DISPLAYNAME); - String brief = elem.attributeValue(ATTR_BRIEF); + String name = elem.getAttribute(ATTR_NAME); + String displayName = elem.getAttribute(ATTR_DISPLAYNAME); + String brief = elem.getAttribute(ATTR_BRIEF); CssCategoryDescriptor cssCategoryDescriptor = new CssCategoryDescriptor(name, displayName, brief); - for (Object childObj : elem.elements(ELEM_PROPERTY)) { - parseProperty((Element) childObj, cssCategoryDescriptor); + NodeList elemList = elem.getElementsByTagName(ELEM_PROPERTY); + for(int i = 0; i < elemList.getLength(); i++){ + parseProperty((Element) elemList.item(i), cssCategoryDescriptor); } cssDescriptor.addCssCategoryDescriptor(cssCategoryDescriptor); @@ -147,13 +163,13 @@ public class CssDescriptorReader { return; } - String name = elem.attributeValue(ATTR_NAME); - String type = elem.attributeValue(ATTR_TYPE); - String displayName = elem.attributeValue(ATTR_DISPLAYNAME); - String toolip = elem.attributeValue(ATTR_TOOLTIP); - String defaultValue = elem.attributeValue(ATTR_DEFAULT); - String initValue = elem.attributeValue(ATTR_INITVALUE); - String inlineText = elem.attributeValue(ATTR_INLINE); + String name = elem.getAttribute(ATTR_NAME); + String type = elem.getAttribute(ATTR_TYPE); + String displayName = elem.getAttribute(ATTR_DISPLAYNAME); + String toolip = elem.getAttribute(ATTR_TOOLTIP); + String defaultValue = elem.getAttribute(ATTR_DEFAULT); + String initValue = elem.getAttribute(ATTR_INITVALUE); + String inlineText = elem.getAttribute(ATTR_INLINE); boolean inline = false; if (BuilderConstants.TRUE.equals(inlineText)) { @@ -165,13 +181,15 @@ public class CssDescriptorReader { defaultValue, initValue, manager, inline); if (type.startsWith(TypeDescriptor.ID_OF_GROUP)) { - for (Object propertyObj : elem.elements(ELEM_PROPERTY)) { - parseChildProperty((Element) propertyObj, cssPropertyDescriptor); + NodeList elemList = elem.getElementsByTagName(ELEM_PROPERTY); + for(int i = 0; i < elemList.getLength(); i++){ + parseChildProperty((Element) elemList.item(i), cssPropertyDescriptor); } } - for (Object childObj : elem.elements(ELEM_CONDITION)) { - parseCondition((Element) childObj, cssPropertyDescriptor); + NodeList elemList = elem.getElementsByTagName(ELEM_CONDITION); + for(int i = 0; i < elemList.getLength(); i++){ + parseCondition((Element) elemList.item(i), cssPropertyDescriptor); } cssCategoryDescriptor.addCssPropertyDescriptor(cssPropertyDescriptor); @@ -190,12 +208,12 @@ public class CssDescriptorReader { return; } - String name = elem.attributeValue(ATTR_NAME); - String type = elem.attributeValue(ATTR_TYPE); - String displayName = elem.attributeValue(ATTR_DISPLAYNAME); - String tooltip = elem.attributeValue(ATTR_TOOLTIP); - String defaultValue = elem.attributeValue(ATTR_DEFAULT); - String initValue = elem.attributeValue(ATTR_INITVALUE); + String name = elem.getAttribute(ATTR_NAME); + String type = elem.getAttribute(ATTR_TYPE); + String displayName = elem.getAttribute(ATTR_DISPLAYNAME); + String tooltip = elem.getAttribute(ATTR_TOOLTIP); + String defaultValue = elem.getAttribute(ATTR_DEFAULT); + String initValue = elem.getAttribute(ATTR_INITVALUE); // child property must be not inline CssPropertyDescriptor childProperty = @@ -206,22 +224,24 @@ public class CssDescriptorReader { if (type.startsWith(TypeDescriptor.ID_OF_GROUP) || type.startsWith(TypeDescriptor.ID_OF_SCALE)) { - for (Object childObj : elem.elements(ELEM_PROPERTY)) { - parseChildProperty((Element) childObj, childProperty); + NodeList elemList = elem.getElementsByTagName(ELEM_PROPERTY); + for(int i = 0; i < elemList.getLength(); i++){ + parseChildProperty((Element) elemList.item(i), childProperty); } } - for (Object childObj : elem.elements(ELEM_CONDITION)) { - parseCondition((Element) childObj, childProperty); + NodeList elemList = elem.getElementsByTagName(ELEM_CONDITION); + for(int i = 0; i < elemList.getLength(); i++){ + parseCondition((Element) elemList.item(i), childProperty); } } private void parseCondition(Element elem, CssPropertyDescriptor cssPropertyDescriptor) { - String name = elem.attributeValue(ATTR_NAME); - String value = elem.attributeValue(ATTR_VALUE); - String target = elem.attributeValue(ATTR_TARGET); - String targetValue = elem.attributeValue(ATTR_TARGETVALUE); - String error = elem.attributeValue(ATTR_ERROR); + String name = elem.getAttribute(ATTR_NAME); + String value = elem.getAttribute(ATTR_VALUE); + String target = elem.getAttribute(ATTR_TARGET); + String targetValue = elem.getAttribute(ATTR_TARGETVALUE); + String error = elem.getAttribute(ATTR_ERROR); PropertyConditionDescriptor condition = new PropertyConditionDescriptor(name, value, target, targetValue, error); diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/descriptors/DescriptorManager.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/descriptors/DescriptorManager.java index 1bd9855..af0311e 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/descriptors/DescriptorManager.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/descriptors/DescriptorManager.java @@ -32,7 +32,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import org.dom4j.Document; +import org.w3c.dom.Document; +import org.w3c.dom.Element; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/html/HtmlReader.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/html/HtmlReader.java index 66b3e89..6a124a2 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/html/HtmlReader.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/html/HtmlReader.java @@ -234,7 +234,7 @@ public class HtmlReader { } String xpath = descriptor.getXpath(); - if (xpath == null) { + if (xpath == null || xpath.isEmpty()) { return; } XPathFactory xpathFactory = XPathFactory.newInstance(); @@ -242,7 +242,7 @@ public class HtmlReader { NodeList nodes = null; Object nodeset = null; try { - if (xpath != null && !xpath.equals(BuilderConstants.EMPTY)) { + if (xpath != null && !xpath.isEmpty()) { nodeset = expr.evaluate(xpath, document, XPathConstants.NODESET); } } catch (XPathExpressionException e) { @@ -275,7 +275,7 @@ public class HtmlReader { } String xpath = descriptor.getChildXpath(); - if (xpath == null) { + if (xpath == null || xpath.isEmpty()) { return; } XPathFactory xpathFactory = XPathFactory.newInstance(); @@ -283,7 +283,7 @@ public class HtmlReader { NodeList nodes = null; Object nodeset = null; try { - if (xpath != null && !xpath.equals(BuilderConstants.EMPTY)) { + if (xpath != null && !xpath.isEmpty()) { nodeset = expr.evaluate(xpath, document, XPathConstants.NODESET); } } catch (XPathExpressionException e) { @@ -326,7 +326,7 @@ public class HtmlReader { try { List pagePartDescriptor = manager.getPageDescriptors(); String xpath = pagePartDescriptor.get(0).getXpath(); - if (xpath != null && !xpath.equals(BuilderConstants.EMPTY)) { + if (xpath != null && !xpath.isEmpty()) { nodeset = expr.evaluate(xpath, document, XPathConstants.NODESET); } } catch (XPathExpressionException e) { @@ -342,11 +342,12 @@ public class HtmlReader { int size = nodes.getLength(); for (int i = 0; i < size; i++) { Node node = nodes.item(i); - Element element = (Element) node; - Part childPart = parseElement(pageFileData, part, element, manager, factory); - part.addChildWhenPageRead(childPart); - if (childPart.getDescriptorId().equals("tizen.page")) { - pageFileData.addRootPart(childPart.getIdPropertyValue(), childPart); + if(node instanceof Element){ + Part childPart = parseElement(pageFileData, part, (Element) node, manager, factory); + part.addChildWhenPageRead(childPart); + if (childPart.getDescriptorId().equals("tizen.page")) { + pageFileData.addRootPart(childPart.getIdPropertyValue(), childPart); + } } } } @@ -412,7 +413,7 @@ public class HtmlReader { String xpath = propertyDescriptor.getXpath(); - if (xpath != null && !xpath.equals(BuilderConstants.EMPTY)) { + if (xpath != null && !xpath.isEmpty()) { XPathFactory xpathFactory = XPathFactory.newInstance(); XPath expr = xpathFactory.newXPath(); Object node = null; diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/html/HtmlWriter.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/html/HtmlWriter.java index eff72b0..8b255bc 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/html/HtmlWriter.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/html/HtmlWriter.java @@ -79,7 +79,7 @@ public class HtmlWriter { // StreamSource(new StringBufferInputStream(xslt))); Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.METHOD, BuilderConstants.HTML); - transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, BuilderConstants.NO); + transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, BuilderConstants.YES); transformer.setOutputProperty(OutputKeys.INDENT, BuilderConstants.NO); DOMSource source = new DOMSource(element); StreamResult result = new StreamResult(writer); diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/CodeGenerator.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/CodeGenerator.java index 787db4e..aa224c0 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/CodeGenerator.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/CodeGenerator.java @@ -20,10 +20,10 @@ * */ - package org.tizen.webuibuilder.model.io; import java.io.File; +import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; @@ -33,6 +33,9 @@ import java.util.Iterator; import java.util.List; import java.util.Map.Entry; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Source; import javax.xml.transform.Transformer; @@ -40,18 +43,13 @@ import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.URIResolver; +import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; -import org.dom4j.Document; -import org.dom4j.DocumentException; -import org.dom4j.DocumentHelper; -import org.dom4j.Element; -import org.dom4j.io.DocumentResult; -import org.dom4j.io.DocumentSource; -import org.dom4j.io.OutputFormat; -import org.dom4j.io.SAXContentHandler; -import org.dom4j.io.SAXReader; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xml.sax.SAXException; import org.eclipse.core.resources.IProject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -65,363 +63,339 @@ import org.tizen.webuibuilder.model.descriptors.DescriptorManager; import org.tizen.webuibuilder.model.filedata.PageFileData; import org.tizen.webuibuilder.utility.ResourceManager; - /** * A code generator. */ public class CodeGenerator { - /** - * A logger instance. - */ - private static Logger logger = LoggerFactory.getLogger(PartFactory.class); - - /** - * A {@link Transformer}. - */ - private static Transformer transformer; - - /** - * Gets a {@link Transformer}. - * - * @param xslt - * a {@link Document} - * @return {@link Transformer} - */ - private static Transformer getTransformer(Document xslt) { - if (transformer == null) { - TransformerFactory factory = TransformerFactory.newInstance(); - try { - transformer = factory.newTransformer(new DocumentSource(xslt)); - transformer - .setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, BuilderConstants.YES); - transformer.setOutputProperty(OutputKeys.ENCODING, BuilderConstants.ENCODING); - transformer.setOutputProperty(OutputKeys.METHOD, BuilderConstants.HTML); - } catch (TransformerConfigurationException e) { - e.printStackTrace(); - } - } - - return transformer; - } - - // private static Transformer getTransformer( - // DescriptorManager descriptorManager) { - // if (transformer == null) { - // Document xslt = descriptorManager.getXsltDocument(); - // return getTransformer(xslt); - // } - // - // return transformer; - // } - - /** - * Generates HTML code. - * - * @param part - * a root {@link Part} - * @param includePid - * whether to write part-id - * @param descriptorManager - * a {@link DescriptorManager} - * @return HTML code if generating succeed. - */ - // public static String generateCode(Part part, boolean includePid, - // DescriptorManager descriptorManager, boolean partialGen) { - // StringWriter stringwriter = new StringWriter(); - // try { - // generateCode(part, stringwriter, includePid, descriptorManager, - // partialGen); - // } catch (IOException e) { - // e.printStackTrace(); - // } - // - // String code = stringwriter.toString(); - // - // return code; - // } - - /** - * Generates HTML code. - * - * @param part - * a {@link Part} - * @param includePid - * whether to write part-id - * @param xslt - * a {@link Document} - * @param partialGen - * whether to generate partially - * @return HTML code - */ - public static String generateCode(Part part, boolean includePid, Document xslt, - boolean partialGen) { - StringWriter stringwriter = new StringWriter(); - try { - generateCode(part, stringwriter, includePid, xslt, partialGen); - } catch (IOException e) { - e.printStackTrace(); - } - - String code = stringwriter.toString(); - - return code; - } - - /** - * Generates HTML code. - * - * @param part - * a {@link Part} - * @param writer - * a writer - * @param includePid - * whether to write part-id - * @param xslt - * a {@link Document} - * @param partialGen - * whether to generate partially - * @throws IOException - */ - private static void generateCode(Part part, Writer writer, boolean includePid, Document xslt, - boolean partialGen) throws IOException { - Element elem = PageWriter.writePart(part, includePid); - - Element elem0 = null; - if (partialGen) { - elem0 = DocumentHelper.createElement("tizen.dummy"); - elem0.add(elem); - } else { - elem0 = elem; - } - - Document doc = elem.getDocument(); - if (doc == null) { - doc = DocumentHelper.createDocument(); - doc.add(elem0); - } - - DocumentSource source = new DocumentSource(doc); - SAXContentHandler handler = new SAXContentHandler(); - DocumentResult result = new DocumentResult(handler); - try { - getTransformer(xslt).transform(source, result); - } catch (TransformerException e) { - e.printStackTrace(); - } - - OutputFormat format = OutputFormat.createPrettyPrint(); - format.setExpandEmptyElements(true); - format.setTrimText(false); - HTMLWriter2 htmlwriter = new HTMLWriter2(writer, format); - if (partialGen) { - @SuppressWarnings("unchecked") - List lst = result.getDocument().getRootElement().content(); - for (Element elm : lst) { - htmlwriter.write(elm); - } - } else { - htmlwriter.write(result.getDocument()); - } - htmlwriter.close(); - } - - // private static void generateCode(Part part, Writer writer, - // boolean includePid, DescriptorManager descriptorManager, - // boolean partialGen) throws IOException { - // generateCode(part, writer, includePid, - // descriptorManager.getXsltDocument(), partialGen); - // } - // - - /** - * Generates HTML code. - * - * @param part - * a {@link Part} - * @param writer - * a writer - * @param includePid - * whether to write part-id - * @param xslt - * a {@link Document} - * @param partialGen - * whether to generate partially - * @throws IOException - */ - - /** - * Generates HTML code. - * - * @param srcFile - * a source file - * @param dstFile - * a destination file - * @param descriptorManager - * a {@link DescriptorManager} - * @param partFactory - * a {@link PartFactory} - * @param project - * an {@link IProject} - * @throws IOException - */ - public static void generateCode(String srcFile, String dstFile, - DescriptorManager descriptorManager, PartFactory partFactory, - IProject project) throws IOException { - PageFileData page = PageReader.read(srcFile, partFactory); - if (page == null) { - return; - } - - generateCode(page.getRootPart(0), new FileWriter(dstFile), false, - descriptorManager.getXsltDocument(), false); - } - - public static void generateCode(String srcFile, InputStream xsltFile, String dstFile, - Document xslt) throws IOException { - SAXReader reader = new SAXReader(); - Document doc = DocumentHelper.createDocument(); - - try { - doc = reader.read(new File(srcFile).toURI().toURL()); - } catch (DocumentException e) { - logger.error(BuilderConstants.LOG_READ_PAGE_ERROR); - } - - DocumentSource source = new DocumentSource(doc); - StreamResult result = new StreamResult(dstFile); - - Transformer transformer = null; - TransformerFactory factory = TransformerFactory.newInstance(); - factory.setURIResolver(new URIResolver() { - - @Override - public Source resolve(String href, String base) throws TransformerException { - String uri = BuilderConstants.XSLT_DIR + href; - try { - InputStream stream = ResourceManager.openStream(uri); - return new StreamSource(stream); - } catch (IOException e) { - logger.error(uri + BuilderConstants.CANNOT_BE_FOUND_ERROR); - e.printStackTrace(); - } - - return null; - } - }); - - try { - transformer = factory.newTransformer(new StreamSource(xsltFile)); - transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, BuilderConstants.YES); - transformer.setOutputProperty(OutputKeys.ENCODING, BuilderConstants.ENCODING); - transformer.setOutputProperty(OutputKeys.METHOD, BuilderConstants.HTML); - transformer.transform(source, result); - } catch (TransformerConfigurationException e) { - e.printStackTrace(); - } catch (TransformerException e) { - e.printStackTrace(); - } - } - - // public static void generateCode(String srcFile, InputStream xsltFile, - // String dstFile, DescriptorManager descriptorManager) - // throws IOException { - // generateCode(srcFile, xsltFile, dstFile, - // descriptorManager.getXsltDocument()); - // } - - /** - * Generates css code using a root {@link Part}. - * - * @param rootPart - * a root {@link Part} - * @return css code if generating succeed, and empty string otherwise - */ - public static String generateCssCode(Part rootPart) { - if (rootPart == null) { - return BuilderConstants.EMPTY; - } - - String css = getCssCode(rootPart, true); - - return css; - } - - /** - * Generates css code using a {@link Part}. - * - * @param part - * a {@link Part} - * @param deep - * whether recursive generation is done - * @return css code - */ - private static String getCssCode(Part part, boolean deep) { - StringBuilder css = new StringBuilder(); - Iterator selectors = part.getSelectors().iterator(); - while (selectors.hasNext()) { - // Generates selector. - CssSelector selector = selectors.next(); - css.append(selector.getSelectorName()); - css.append(BuilderConstants.SPACE); - css.append(BuilderConstants.OPEN_CURLY_BRACKET); - css.append(BuilderConstants.NEW_LINE); - Iterator> properties = selector.getProperties().iterator(); - - while (properties.hasNext()) { - // Generates property. - Entry property = properties.next(); - css.append(BuilderConstants.TAB); - css.append(property.getKey()); - css.append(BuilderConstants.SPACE); - css.append(BuilderConstants.COLON); - css.append(BuilderConstants.SPACE); - css.append(property.getValue()); - css.append(BuilderConstants.SEMICOLON); - css.append(BuilderConstants.NEW_LINE); - } - css.append(BuilderConstants.CLOSE_CURLY_BRACKET); - css.append(BuilderConstants.NEW_LINE); - } - - if (deep) { - List children = part.getChildren(); - int size = children.size(); - for (int i = 0; i < size; i++) { - Part child = children.get(i); - css.append(getCssCode(child, true)); - } - } - - return css.toString(); - } - - /** - * Generates css code of specific {@link Part} using a root {@link Part}. - * - * @param crootPart - * a root {@link Part} - * @param partId - * an id property of a {@link Part} - * @return css code if generating succeed, and empty string otherwise - */ - public static String generateCssCode(Part rootPart, String partId) { - if (rootPart == null) { - return BuilderConstants.EMPTY; - } - - Part part = rootPart.getChildOfIdPropertyValue(partId, true); - String css = getCssCode(part, false); - - return css; - } - - public static String generateCssCode(CssFile cssFile) { - return new CssWriter().generateSelectors(cssFile); - } - - public static void generateCSS(CssFile cssFile) { - new CssWriter().generate(cssFile); - } + /** + * A logger instance. + */ + private static Logger logger = LoggerFactory.getLogger(PartFactory.class); + + /** + * A {@link Transformer}. + */ + // private static Transformer transformer; + + /** + * Gets a {@link Transformer}. + * + * @param xslt + * a {@link Document} + * @return {@link Transformer} + */ + private static Transformer getTransformer(Document xslt) { + // if (transformer == null) { + TransformerFactory factory = TransformerFactory.newInstance(); + + DOMSource source = new DOMSource(xslt); + Transformer transformer = null; + try { + transformer = factory.newTransformer(source); + transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, + BuilderConstants.YES); + transformer.setOutputProperty(OutputKeys.ENCODING, + BuilderConstants.ENCODING); + transformer.setOutputProperty(OutputKeys.INDENT, + BuilderConstants.YES); + transformer.setOutputProperty(OutputKeys.METHOD, + BuilderConstants.HTML); + } catch (TransformerConfigurationException e) { + e.printStackTrace(); + } + // } + + return transformer; + } + + /** + * Generates HTML code. + * + * @param part + * a {@link Part} + * @param includePid + * whether to write part-id + * @param xslt + * a {@link Document} + * @param partialGen + * whether to generate partially + * @return HTML code + */ + public static String generateCode(Part part, boolean includePid, + Document xslt, boolean partialGen) { + StringWriter stringwriter = new StringWriter(); + + try { + generateCode(part, stringwriter, includePid, xslt, partialGen); + } catch (IOException e) { + e.printStackTrace(); + } + + String code = stringwriter.toString(); + + return code; + } + + /** + * Generates HTML code. + * + * @param part + * a {@link Part} + * @param writer + * a writer + * @param includePid + * whether to write part-id + * @param xslt + * a {@link Document} + * @param partialGen + * whether to generate partially + * @throws IOException + */ + private static void generateCode(Part part, Writer writer, + boolean includePid, Document xslt, boolean partialGen) + throws IOException { + Document doc = PageWriter.writePart(part, includePid); + + Element elem0 = null; + if (partialGen) { + elem0 = doc.createElement("tizen.dummy"); + Element elem = (Element) doc.getFirstChild(); + doc.removeChild(elem); + elem0.appendChild(elem); + doc.appendChild(elem0); + } + + DOMSource source = new DOMSource(doc); + StreamResult result = new StreamResult(writer); + try { + getTransformer(xslt).transform(source, result); + } catch (TransformerException e) { + e.printStackTrace(); + } + + // OutputFormat format = OutputFormat.createPrettyPrint(); + // format.setExpandEmptyElements(true); + // format.setTrimText(false); + // HTMLWriter2 htmlwriter = new HTMLWriter2(writer, format); + // if (partialGen) { + // @SuppressWarnings("unchecked") + // List lst = result.getDocument().getRootElement().content(); + // for (Element elm : lst) { + // htmlwriter.write(elm); + // } + // } else { + // htmlwriter.write(result.getDocument()); + // } + // htmlwriter.close(); + } + + // private static void generateCode(Part part, Writer writer, + // boolean includePid, DescriptorManager descriptorManager, + // boolean partialGen) throws IOException { + // generateCode(part, writer, includePid, + // descriptorManager.getXsltDocument(), partialGen); + // } + // + + /** + * Generates HTML code. + * + * @param part + * a {@link Part} + * @param writer + * a writer + * @param includePid + * whether to write part-id + * @param xslt + * a {@link Document} + * @param partialGen + * whether to generate partially + * @throws IOException + */ + + /** + * Generates HTML code. + * + * @param srcFile + * a source file + * @param dstFile + * a destination file + * @param descriptorManager + * a {@link DescriptorManager} + * @param partFactory + * a {@link PartFactory} + * @param project + * an {@link IProject} + * @throws IOException + */ + public static void generateCode(String srcFile, String dstFile, + DescriptorManager descriptorManager, PartFactory partFactory) + throws IOException { + PageFileData page = PageReader.read(srcFile, partFactory); + if (page == null) { + return; + } + + generateCode(page.getRootPart(0), new FileWriter(dstFile), false, + descriptorManager.getXsltDocument(), false); + } + + public static void generateCode(String srcFile, InputStream xsltFile, + String dstFile, Document xslt) throws IOException { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = null; + Document doc = null; + + try { + builder = factory.newDocumentBuilder(); + doc = builder.parse(srcFile); + } catch (ParserConfigurationException e) { + e.printStackTrace(); + } catch (SAXException e) { + e.printStackTrace(); + } + + DOMSource source = new DOMSource(doc); + StreamResult result = new StreamResult(dstFile); + + Transformer transformer = null; + TransformerFactory transFactory = TransformerFactory.newInstance(); + transFactory.setURIResolver(new URIResolver() { + + @Override + public Source resolve(String href, String base) + throws TransformerException { + String uri = BuilderConstants.XSLT_DIR + href; + try { + InputStream stream = ResourceManager.openStream(uri); + return new StreamSource(stream); + } catch (IOException e) { + logger.error(uri + BuilderConstants.CANNOT_BE_FOUND_ERROR); + e.printStackTrace(); + } + + return null; + } + }); + + try { + transformer = transFactory + .newTransformer(new StreamSource(xsltFile)); + transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, + BuilderConstants.YES); + transformer.setOutputProperty(OutputKeys.ENCODING, + BuilderConstants.ENCODING); + transformer.setOutputProperty(OutputKeys.METHOD, + BuilderConstants.HTML); + transformer.transform(source, result); + } catch (TransformerConfigurationException e) { + e.printStackTrace(); + } catch (TransformerException e) { + e.printStackTrace(); + } + } + + // public static void generateCode(String srcFile, InputStream xsltFile, + // String dstFile, DescriptorManager descriptorManager) + // throws IOException { + // generateCode(srcFile, xsltFile, dstFile, + // descriptorManager.getXsltDocument()); + // } + + /** + * Generates css code using a root {@link Part}. + * + * @param rootPart + * a root {@link Part} + * @return css code if generating succeed, and empty string otherwise + */ + public static String generateCssCode(Part rootPart) { + if (rootPart == null) { + return BuilderConstants.EMPTY; + } + + String css = getCssCode(rootPart, true); + + return css; + } + + /** + * Generates css code using a {@link Part}. + * + * @param part + * a {@link Part} + * @param deep + * whether recursive generation is done + * @return css code + */ + private static String getCssCode(Part part, boolean deep) { + StringBuilder css = new StringBuilder(); + Iterator selectors = part.getSelectors().iterator(); + while (selectors.hasNext()) { + // Generates selector. + CssSelector selector = selectors.next(); + css.append(selector.getSelectorName()); + css.append(BuilderConstants.SPACE); + css.append(BuilderConstants.OPEN_CURLY_BRACKET); + css.append(BuilderConstants.NEW_LINE); + Iterator> properties = selector + .getProperties().iterator(); + + while (properties.hasNext()) { + // Generates property. + Entry property = properties.next(); + css.append(BuilderConstants.TAB); + css.append(property.getKey()); + css.append(BuilderConstants.SPACE); + css.append(BuilderConstants.COLON); + css.append(BuilderConstants.SPACE); + css.append(property.getValue()); + css.append(BuilderConstants.SEMICOLON); + css.append(BuilderConstants.NEW_LINE); + } + css.append(BuilderConstants.CLOSE_CURLY_BRACKET); + css.append(BuilderConstants.NEW_LINE); + } + + if (deep) { + List children = part.getChildren(); + int size = children.size(); + for (int i = 0; i < size; i++) { + Part child = children.get(i); + css.append(getCssCode(child, true)); + } + } + + return css.toString(); + } + + /** + * Generates css code of specific {@link Part} using a root {@link Part}. + * + * @param crootPart + * a root {@link Part} + * @param partId + * an id property of a {@link Part} + * @return css code if generating succeed, and empty string otherwise + */ + public static String generateCssCode(Part rootPart, String partId) { + if (rootPart == null) { + return BuilderConstants.EMPTY; + } + + Part part = rootPart.getChildOfIdPropertyValue(partId, true); + String css = getCssCode(part, false); + + return css; + } + + public static String generateCssCode(CssFile cssFile) { + return new CssWriter().generateSelectors(cssFile); + } + + public static void generateCSS(CssFile cssFile) { + new CssWriter().generate(cssFile); + } } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/DescriptorReader.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/DescriptorReader.java index b3d226d..55742e7 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/DescriptorReader.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/DescriptorReader.java @@ -20,19 +20,34 @@ * */ - package org.tizen.webuibuilder.model.io; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.StringBufferInputStream; +import java.io.StringWriter; +import java.net.URISyntaxException; import java.net.URL; import java.util.Arrays; -import org.dom4j.Document; -import org.dom4j.DocumentException; -import org.dom4j.DocumentHelper; -import org.dom4j.Element; -import org.dom4j.Namespace; -import org.dom4j.QName; -import org.dom4j.io.SAXReader; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +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 org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; import org.tizen.webuibuilder.BuilderConstants; import org.tizen.webuibuilder.model.descriptors.ChildPropertyDescriptor; import org.tizen.webuibuilder.model.descriptors.ConstantDescriptor; @@ -51,663 +66,718 @@ import org.tizen.webuibuilder.model.descriptors.RelationDescriptor; import org.tizen.webuibuilder.model.descriptors.TypeDescriptor; import org.tizen.webuibuilder.model.descriptors.WidgetPartDescriptor; - /** * A descriptor reader. */ public class DescriptorReader { - // Element name - private static final String ELEM_DOC = "doc"; //$NON-NLS-1$ - private static final String ELEM_PAGE = "page"; //$NON-NLS-1$ - private static final String ELEM_WIDGET = "widget"; //$NON-NLS-1$ - private static final String ELEM_CONTENT = "content"; //$NON-NLS-1$ - private static final String ELEM_NOCONTENT = "nocontent"; //$NON-NLS-1$ - private static final String ELEM_PARENT = "parent"; //$NON-NLS-1$ - private static final String ELEM_NOPARENT = "noparent"; //$NON-NLS-1$ - private static final String ELEM_RELATIONS = "relations"; //$NON-NLS-1$ - private static final String ELEM_PROPERTY = "property"; //$NON-NLS-1$ - private static final String ELEM_CONDITION = "condition"; //$NON-NLS-1$ - private static final String ELEM_EVENT = "event"; //$NON-NLS-1$ - private static final String ELEM_XSL_FOR_OUTPUT = "xsl-for-output"; //$NON-NLS-1$ - private static final String ELEM_TYPES = "types"; //$NON-NLS-1$ - private static final String ELEM_TYPE = "type"; //$NON-NLS-1$ - private static final String ELEM_CONSTANT = "constant"; //$NON-NLS-1$ - private static final String ELEM_EVENTTYPES = "eventTypes"; //$NON-NLS-1$ - private static final String ELEM_EVENTTYPE = "eventType"; //$NON-NLS-1$ - private static final String ELEM_DEFAULTCODE = "defaultCode"; //$NON-NLS-1$ - private static final String ELEM_PARAM = "param"; //$NON-NLS-1$ - - // Attribute name - private static final String ATTR_ID = "id"; //$NON-NLS-1$ - private static final String ATTR_DISPLAYNAME = "displayName"; //$NON-NLS-1$ - private static final String ATTR_SMALLICON = "smallIcon"; //$NON-NLS-1$ - private static final String ATTR_ICON_16 = "icon.16"; //$NON-NLS-1$ - private static final String ATTR_ICON = "icon"; //$NON-NLS-1$ - private static final String ATTR_CATEGORY = "category"; //$NON-NLS-1$ - private static final String ATTR_DESCRIPTION = "description"; //$NON-NLS-1$ - private static final String ATTR_PALETTE_VISIBLE = "paletteVisible"; //$NON-NLS-1$ - private static final String ATTR_HELPCATEGORY = "helpCategory"; //$NON-NLS-1$ - private static final String ATTR_HELPCONTENS = "helpContents"; //$NON-NLS-1$ - private static final String ATTR_FEEDBACKWIDTH = "feedbackWidth"; //$NON-NLS-1$ - private static final String ATTR_FEEDBACKHEIGHT = "feedbackHeight"; //$NON-NLS-1$ - private static final String ATTR_BORDER_VISIBLE = "borderVisible"; //$NON-NLS-1$ - private static final String ATTR_FEEDBACKCONDITION = "feedbackCondition"; //$NON-NLS-1$ - private static final String ATTR_GUIDE_TEXT = "guideText"; //$NON-NLS-1$ - private static final String ATTR_SET_STYLE = "setStyle"; //$NON-NLS-1$ - private static final String ATTR_UI_SELECTOR = "uiSelector"; //$NON-NLS-1$ - private static final String ATTR_XPATH = "xpath"; //$NON-NLS-1$ - private static final String ATTR_CHILDXPATH = "childXpath"; //$NON-NLS-1$ - private static final String ATTR_IDS = "ids"; //$NON-NLS-1$ - private static final String ATTR_EXCLUDE_IDS = "exclude-ids"; //$NON-NLS-1$ - private static final String ATTR_PARENT_IDS = "parent-ids"; //$NON-NLS-1$ - private static final String ATTR_EXCLUSIVE_GROUP = "exclusiveGroup"; //$NON-NLS-1$ - private static final String ATTR_MIN = "min"; //$NON-NLS-1$ - private static final String ATTR_MAX = "max"; //$NON-NLS-1$ - private static final String ATTR_NAME = "name"; //$NON-NLS-1$ - private static final String ATTR_TYPE = "type"; //$NON-NLS-1$ - private static final String ATTR_DEFAULT = "default"; //$NON-NLS-1$ - private static final String ATTR_INITVALUE = "initValue"; //$NON-NLS-1$ - private static final String ATTR_SELECTOR = "selector"; //$NON-NLS-1$ - private static final String ATTR_NOT_SUPPORTED = "notsupported"; //$NON-NLS-1$ - private static final String ATTR_VALUE = "value"; //$NON-NLS-1$ - private static final String ATTR_TARGET = "target"; //$NON-NLS-1$ - private static final String ATTR_TARGETVALUE = "targetValue"; //$NON-NLS-1$ - private static final String ATTR_TOOLTIP = "tooltip"; //$NON-NLS-1$ - private static final String ATTR_ERROR = "error"; //$NON-NLS-1$ - private static final String ATTR_EVENTTYPE = "eventType"; //$NON-NLS-1$ - - private static final Namespace XSLT_NAMESPACE = - new Namespace("xsl", "http://www.w3.org/1999/XSL/Transform"); //$NON-NLS-1$ //$NON-NLS-2$ - private static final String ELEM_STYLESHEET = "stylesheet"; //$NON-NLS-1$ - private static final String ATTR_STYLESHEET_VERSION = "version"; //$NON-NLS-1$ - private static final String VALUE_STYLESHEET_VERSION = "1.0"; //$NON-NLS-1$ - - private static final String PART_TYPE_DOC = "doc"; //$NON-NLS-1$ - private static final String PART_TYPE_PAGE = "page"; //$NON-NLS-1$ - private static final String PART_TYPE_WIDGET = "widget"; //$NON-NLS-1$ - - /** - * A {@link DescriptorManager}. - */ - private DescriptorManager manager; - - /** - * A xsl-for-output document. - */ - private Document xslt; - - /** - * Constructor. - * - * @param manager - * a {@link DescriptorManager} - */ - public DescriptorReader(DescriptorManager manager) { - this.manager = manager; - this.xslt = DocumentHelper.createDocument(); - xslt.addElement(new QName(ELEM_STYLESHEET, XSLT_NAMESPACE)) - .addAttribute(ATTR_STYLESHEET_VERSION, VALUE_STYLESHEET_VERSION); - } - - /** - * Gets a {@link Document}. - * - * @return a {@link Document} - */ - public Document getXsltForOutput() { - return xslt; - } - - /** - * Parses a descriptor XML. - * - * @param descriptorPath - * a path of descriptor XML - */ - public void parse(URL descriptorPath) { - SAXReader reader = new SAXReader(); - Document doc = null; - - try { - doc = reader.read(descriptorPath); - } catch (DocumentException e) { - e.printStackTrace(); - } - - if (doc != null && doc.getRootElement() != null) { - parseRoot(doc.getRootElement()); - } - } - - /** - * Parses a root element of descriptor XML. - * - * @param root - * a root element - */ - private void parseRoot(Element root) { - if (root == null) { - return; - } - - for (Object childObj : root.elements(ELEM_DOC)) { - parsePart((Element) childObj, new DocumentPartDescriptor()); - } - for (Object childObj : root.elements(ELEM_PAGE)) { - parsePart((Element) childObj, new PagePartDescriptor()); - } - for (Object childObj : root.elements(ELEM_WIDGET)) { - parsePart((Element) childObj, new WidgetPartDescriptor()); - } - for (Object childObj : root.elements(ELEM_TYPES)) { - parseTypes((Element) childObj); - } - for (Object childObj : root.elements(ELEM_EVENTTYPES)) { - parseEventTypes((Element) childObj); - } - } - - /** - * Parses a doc, page or widget element of descriptor XML. - * - * @param elem - * a doc, page or widget element - * @param part - * a {@link PartDescriptor} - */ - private void parsePart(Element elem, PartDescriptor part) { - if (elem == null || part == null) { - return; - } - - String id = elem.attributeValue(ATTR_ID); - String displayName = elem.attributeValue(ATTR_DISPLAYNAME); - String smallIcon = elem.attributeValue(ATTR_SMALLICON); - String icon16 = elem.attributeValue(ATTR_ICON_16); - String description = elem.attributeValue(ATTR_DESCRIPTION); - String paletteVisible = elem.attributeValue(ATTR_PALETTE_VISIBLE); - String helpCategory = elem.attributeValue(ATTR_HELPCATEGORY); - String helpContens = elem.attributeValue(ATTR_HELPCONTENS); - String width = elem.attributeValue(ATTR_FEEDBACKWIDTH); - String height = elem.attributeValue(ATTR_FEEDBACKHEIGHT); - String borderVisible = elem.attributeValue(ATTR_BORDER_VISIBLE); - String feedbackCondition = elem.attributeValue(ATTR_FEEDBACKCONDITION); - String guideText = elem.attributeValue(ATTR_GUIDE_TEXT); - String setStyle = elem.attributeValue(ATTR_SET_STYLE); - String uiSelector = elem.attributeValue(ATTR_UI_SELECTOR); - String xpath = elem.attributeValue(ATTR_XPATH); - String childXpath = elem.attributeValue(ATTR_CHILDXPATH); - - boolean boolpaletteVisible = true; - if (paletteVisible != null) { - boolpaletteVisible = Boolean.parseBoolean(paletteVisible); - } - boolean boolBorderVisible = Boolean.parseBoolean(borderVisible); - boolean boolSetStyle = Boolean.parseBoolean(setStyle); - - part.init(id, displayName, smallIcon, icon16, description, boolpaletteVisible, - helpCategory, helpContens, width, height, boolBorderVisible, feedbackCondition, - guideText, boolSetStyle, uiSelector, xpath, childXpath); - - if (part instanceof WidgetPartDescriptor) { - String categories = elem.attributeValue(ATTR_CATEGORY); - if (categories != null) { - String[] categoriesArray = categories.split(BuilderConstants.COMMA); - ((WidgetPartDescriptor) part).setCategories(Arrays.asList(categoriesArray)); - } - } - - boolean isNoRelation = true; - for (Object contentObj : elem.elements(ELEM_RELATIONS)) { - parseRelations((Element) contentObj, part); - isNoRelation = false; - } - - // This code remains for compatibility. - if (isNoRelation) { - for (Object contentObj : elem.elements(ELEM_CONTENT)) { - parseContent((Element) contentObj, part); - } - } - - for (Object childObj : elem.elements(ELEM_CONDITION)) { - parsePartCondition((Element) childObj, part); - } - - for (Object propertyObj : elem.elements(ELEM_PROPERTY)) { - parseProperty((Element) propertyObj, part); - } - - for (Object contentObj : elem.elements(ELEM_EVENT)) { - parseEvent((Element) contentObj, part); - } - - parseXsltForOutput(elem); - - manager.addPartDescriptor(part); - } - - /** - * Parses a relation element of descriptor XML. - * - * @param elem - * a relation element - * @param property - * a {@link PartDescriptor} - */ - private void parseRelations(Element elem, PartDescriptor part) { - if (elem == null || part == null) { - return; - } - - RelationDescriptor relation = part.getRelation(); - if (relation == null) { - return; - } - - for (Object childObj : elem.elements(ELEM_PARENT)) { - Element childElem = (Element) childObj; - String ids = childElem.attributeValue(ATTR_IDS); - - relation.addParentPartIds(ids); - } - - for (Object childObj : elem.elements(ELEM_NOPARENT)) { - Element childElem = (Element) childObj; - String ids = childElem.attributeValue(ATTR_IDS); - - relation.addNoParentPartIds(ids); - } - - for (Object childObj : elem.elements(ELEM_CONTENT)) { - Element childElem = (Element) childObj; - parseContent2(childElem, relation); - } - - for (Object childObj : elem.elements(ELEM_NOCONTENT)) { - Element childElem = (Element) childObj; - String ids = childElem.attributeValue(ATTR_IDS); - - relation.addNoContentPartIds(ids); - } - } - - /** - * Parses a content element of descriptor XML. This method remains for compatibility. - * - * @param elem - * a content element - * @param part - * a {@link PartDescriptor} - */ - private void parseContent(Element elem, PartDescriptor part) { - if (elem == null || part == null) { - return; - } - - RelationDescriptor relation = part.getRelation(); - if (relation == null) { - return; - } - - parseContent2(elem, relation); - - String excludeIds = elem.attributeValue(ATTR_EXCLUDE_IDS); - String parentIds = elem.attributeValue(ATTR_PARENT_IDS); - - if (excludeIds != null) { - relation.addNoContentPartIds(excludeIds); - } - if (parentIds != null) { - relation.addParentPartIds(parentIds); - } - } - - /** - * Parses a content element of descriptor XML. - * - * @param elem - * a content element - * @param relation - * a {@link RelationDescriptor} - */ - private void parseContent2(Element elem, RelationDescriptor relation) { - if (elem == null || relation == null) { - return; - } - - String ids = elem.attributeValue(ATTR_IDS); - String type = elem.attributeValue(ATTR_TYPE); - String min = elem.attributeValue(ATTR_MIN); - String max = elem.attributeValue(ATTR_MAX); - String exclusiveGroup = elem.attributeValue(ATTR_EXCLUSIVE_GROUP); - ContentDescriptor.PartType partType = ContentDescriptor.PartType.ANY_PART; - - if (type != null) { - if (type.equals(PART_TYPE_DOC)) { - partType = ContentDescriptor.PartType.DOCUMENT_PART; - } else if (type.equals(PART_TYPE_PAGE)) { - partType = ContentDescriptor.PartType.PAGE_PART; - } else if (type.equals(PART_TYPE_WIDGET)) { - partType = ContentDescriptor.PartType.WIDGET_PART; - } - } - - ContentDescriptor content = new ContentDescriptor(); - content.setPartType(partType); - if (ids != null) { - content.setPartIds(ids); - } - if (min != null) { - content.setMin(Integer.valueOf(min).intValue()); - } - if (max != null) { - content.setMax(Integer.valueOf(max).intValue()); - } - if (exclusiveGroup != null) { - content.setExclusiveGroup(exclusiveGroup); - } - relation.addContent(content); - } - - /** - * Parses a condition element of descriptor XML. - * - * @param elem - * a property element - * @param part - * a {@link PartDescriptor} - */ - private void parsePartCondition(Element elem, PartDescriptor part) { - if (elem == null || part == null) { - return; - } - - String name = elem.attributeValue(ATTR_NAME); - String value = elem.attributeValue(ATTR_VALUE); - String target = elem.attributeValue(ATTR_TARGET); - String targetValue = elem.attributeValue(ATTR_TARGETVALUE); - - PartConditionDescriptor condition = - new PartConditionDescriptor(name, value, target, targetValue); - part.addConditionDescriptor(condition); - } - - /** - * Parses a property element of descriptor XML. - * - * @param elem - * a property element - * @param part - * a {@link PartDescriptor} - */ - private void parseProperty(Element elem, PartDescriptor part) { - if (elem == null || part == null) { - return; - } - - String notsupported = elem.attributeValue(ATTR_NOT_SUPPORTED); - if (notsupported != null && notsupported.equals(BuilderConstants.TRUE)) { - return; - } - - String name = elem.attributeValue(ATTR_NAME); - String type = elem.attributeValue(ATTR_TYPE); - String displayName = elem.attributeValue(ATTR_DISPLAYNAME); - String tooltip = elem.attributeValue(ATTR_TOOLTIP); - String defaultValue = elem.attributeValue(ATTR_DEFAULT); - String initValue = elem.attributeValue(ATTR_INITVALUE); - String category = elem.attributeValue(ATTR_CATEGORY); - String xpath = elem.attributeValue(ATTR_XPATH); - - if (tooltip == null) { - tooltip = displayName; - } else { - tooltip = - displayName + BuilderConstants.SPACE + BuilderConstants.DASH - + BuilderConstants.SPACE + tooltip; - } - - PropertyDescriptor property = - new PropertyDescriptor(name, type, displayName, tooltip, defaultValue, initValue, - category, xpath, manager); - part.addPropertyDescriptor(property); - - if (TypeDescriptor.ID_OF_GROUP.equals(type) || TypeDescriptor.ID_OF_GROUP_TEXT.equals(type) - || TypeDescriptor.ID_OF_GROUP_POSITION.equals(type)) { - for (Object propertyObj : elem.elements(ELEM_PROPERTY)) { - parseChildProperty((Element) propertyObj, property); - } - } - - for (Object childObj : elem.elements(ELEM_CONDITION)) { - parseCondition((Element) childObj, property); - } - } - - /** - * Parses a child property element of descriptor XML. - * - * @param elem - * a child property - * @param property - * a {@link PropertyDescriptor} - */ - private void parseChildProperty(Element elem, PropertyDescriptor property) { - if (elem == null || property == null) { - return; - } - - String name = elem.attributeValue(ATTR_NAME); - String type = elem.attributeValue(ATTR_TYPE); - String displayName = elem.attributeValue(ATTR_DISPLAYNAME); - String tooltip = elem.attributeValue(ATTR_TOOLTIP); - String defaultValue = elem.attributeValue(ATTR_DEFAULT); - String initValue = elem.attributeValue(ATTR_INITVALUE); - String category = elem.attributeValue(ATTR_CATEGORY); - String xpath = elem.attributeValue(ATTR_XPATH); - String selector = elem.attributeValue(ATTR_SELECTOR); - - PropertyDescriptor childProperty = - new ChildPropertyDescriptor(name, type, displayName, tooltip, defaultValue, - initValue, category, xpath, selector, manager); - property.addChildPropertyDescriptor(childProperty); - - for (Object childObj : elem.elements(ELEM_CONDITION)) { - parseCondition((Element) childObj, childProperty); - } - } - - /** - * Parses a condition element of descriptor XML. - * - * @param elem - * a condition element - * @param property - * a {@link PropertyDescriptor} - */ - private void parseCondition(Element elem, PropertyDescriptor property) { - if (elem == null || property == null) { - return; - } - - String name = elem.attributeValue(ATTR_NAME); - String value = elem.attributeValue(ATTR_VALUE); - String target = elem.attributeValue(ATTR_TARGET); - String targetValue = elem.attributeValue(ATTR_TARGETVALUE); - String error = elem.attributeValue(ATTR_ERROR); - - PropertyConditionDescriptor condition = - new PropertyConditionDescriptor(name, value, target, targetValue, error); - property.addConditionDescriptor(condition); - } - - /** - * Parses an event element of descriptor XML. - * - * @param elem - * an event element - * @param part - * a {@link PartDescriptor} - */ - private void parseEvent(Element elem, PartDescriptor part) { - if (elem == null || part == null) { - return; - } - - String name = elem.attributeValue(ATTR_NAME); - String displayName = elem.attributeValue(ATTR_DISPLAYNAME); - String eventType = elem.attributeValue(ATTR_EVENTTYPE); - EventDescriptor event = new EventDescriptor(name, displayName, eventType, manager); - part.addEventDescriptor(event); - } - - /** - * Parses a types element of descriptor XML. - * - * @param elem - * a types element - */ - private void parseTypes(Element elem) { - if (elem == null) { - return; - } - - for (Object childObj : elem.elements(ELEM_TYPE)) { - parseType((Element) childObj); - } - } - - /** - * Parses a type element of descriptor XML. - * - * @param elem - * a type element - */ - private void parseType(Element elem) { - if (elem == null) { - return; - } - - String id = elem.attributeValue(ATTR_ID); - - TypeDescriptor type = manager.getTypeDescriptor(id); - - if (type == null) { - type = new TypeDescriptor(id); - manager.addTypeDescriptor(type); - } - - for (Object childObj : elem.elements(ELEM_CONSTANT)) { - type.addAvailableConstant(parseConstant((Element) childObj)); - } - - } - - /** - * Parses a constant element of descriptor XML. - * - * @param elem - * a constant element - */ - private ConstantDescriptor parseConstant(Element elem) { - if (elem == null) { - return null; - } - - String value = elem.attributeValue(ATTR_VALUE); - String displayName = elem.attributeValue(ATTR_DISPLAYNAME); - String icon = elem.attributeValue(ATTR_ICON); - - if (displayName == null) { - displayName = value; - } - - return new ConstantDescriptor(value, displayName, icon); - } - - /** - * Parses an eventTypes element of descriptor XML. - * - * @param elem - * an eventTypes element - */ - private void parseEventTypes(Element elem) { - if (elem == null) { - return; - } - - for (Object childObj : elem.elements(ELEM_EVENTTYPE)) { - parseEventType((Element) childObj); - } - } - - /** - * Parses an eventType element of descriptor XML. - * - * @param elem - * an eventType element - */ - private void parseEventType(Element elem) { - if (elem == null) { - return; - } - - String id = elem.attributeValue(ATTR_ID); - if (manager.getEventTypeDescriptor(id) != null) { - return; - } - - EventTypeDescriptor eventType = new EventTypeDescriptor(id); - - for (Object childObj : elem.elements(ELEM_DEFAULTCODE)) { - eventType.setDefaultCode(((Element) childObj).getText()); - } - - for (Object childObj : elem.elements(ELEM_PARAM)) { - eventType.addEventParameter(parseParameter((Element) childObj)); - } - - manager.addEventTypeDescriptor(eventType); - } - - /** - * Parses a param element of descriptor XML. - * - * @param elem - * a param element - */ - private EventParamDescriptor parseParameter(Element elem) { - if (elem == null) { - return null; - } - - String name = elem.attributeValue(ATTR_NAME); - String type = elem.attributeValue(ATTR_TYPE); - - return new EventParamDescriptor(name, type); - } - - /** - * Parses a xsl-for-output element of descriptor XML. - * - * @param elem - * a xsl-for-output element - */ - private void parseXsltForOutput(Element elem) { - if (elem == null) { - return; - } - - Element code = elem.element(ELEM_XSL_FOR_OUTPUT); - if (code != null) { - Element child = null; - for (Object nodeObj : code.elements()) { - child = (Element) nodeObj; - xslt.getRootElement().add(child.createCopy()); - } - } - } + // Element name + private static final String ELEM_DOC = "doc"; //$NON-NLS-1$ + private static final String ELEM_PAGE = "page"; //$NON-NLS-1$ + private static final String ELEM_WIDGET = "widget"; //$NON-NLS-1$ + private static final String ELEM_CONTENT = "content"; //$NON-NLS-1$ + private static final String ELEM_NOCONTENT = "nocontent"; //$NON-NLS-1$ + private static final String ELEM_PARENT = "parent"; //$NON-NLS-1$ + private static final String ELEM_NOPARENT = "noparent"; //$NON-NLS-1$ + private static final String ELEM_RELATIONS = "relations"; //$NON-NLS-1$ + private static final String ELEM_PROPERTY = "property"; //$NON-NLS-1$ + private static final String ELEM_CONDITION = "condition"; //$NON-NLS-1$ + private static final String ELEM_EVENT = "event"; //$NON-NLS-1$ + private static final String ELEM_XSL_FOR_OUTPUT = "xsl-for-output"; //$NON-NLS-1$ + private static final String ELEM_TYPES = "types"; //$NON-NLS-1$ + private static final String ELEM_TYPE = "type"; //$NON-NLS-1$ + private static final String ELEM_CONSTANT = "constant"; //$NON-NLS-1$ + private static final String ELEM_EVENTTYPES = "eventTypes"; //$NON-NLS-1$ + private static final String ELEM_EVENTTYPE = "eventType"; //$NON-NLS-1$ + private static final String ELEM_DEFAULTCODE = "defaultCode"; //$NON-NLS-1$ + private static final String ELEM_PARAM = "param"; //$NON-NLS-1$ + + // Attribute name + private static final String ATTR_ID = "id"; //$NON-NLS-1$ + private static final String ATTR_DISPLAYNAME = "displayName"; //$NON-NLS-1$ + private static final String ATTR_SMALLICON = "smallIcon"; //$NON-NLS-1$ + private static final String ATTR_ICON_16 = "icon.16"; //$NON-NLS-1$ + private static final String ATTR_ICON = "icon"; //$NON-NLS-1$ + private static final String ATTR_CATEGORY = "category"; //$NON-NLS-1$ + private static final String ATTR_DESCRIPTION = "description"; //$NON-NLS-1$ + private static final String ATTR_PALETTE_VISIBLE = "paletteVisible"; //$NON-NLS-1$ + private static final String ATTR_HELPCATEGORY = "helpCategory"; //$NON-NLS-1$ + private static final String ATTR_HELPCONTENS = "helpContents"; //$NON-NLS-1$ + private static final String ATTR_FEEDBACKWIDTH = "feedbackWidth"; //$NON-NLS-1$ + private static final String ATTR_FEEDBACKHEIGHT = "feedbackHeight"; //$NON-NLS-1$ + private static final String ATTR_BORDER_VISIBLE = "borderVisible"; //$NON-NLS-1$ + private static final String ATTR_FEEDBACKCONDITION = "feedbackCondition"; //$NON-NLS-1$ + private static final String ATTR_GUIDE_TEXT = "guideText"; //$NON-NLS-1$ + private static final String ATTR_SET_STYLE = "setStyle"; //$NON-NLS-1$ + private static final String ATTR_UI_SELECTOR = "uiSelector"; //$NON-NLS-1$ + private static final String ATTR_XPATH = "xpath"; //$NON-NLS-1$ + private static final String ATTR_CHILDXPATH = "childXpath"; //$NON-NLS-1$ + private static final String ATTR_IDS = "ids"; //$NON-NLS-1$ + private static final String ATTR_EXCLUDE_IDS = "exclude-ids"; //$NON-NLS-1$ + private static final String ATTR_PARENT_IDS = "parent-ids"; //$NON-NLS-1$ + private static final String ATTR_EXCLUSIVE_GROUP = "exclusiveGroup"; //$NON-NLS-1$ + private static final String ATTR_MIN = "min"; //$NON-NLS-1$ + private static final String ATTR_MAX = "max"; //$NON-NLS-1$ + private static final String ATTR_NAME = "name"; //$NON-NLS-1$ + private static final String ATTR_TYPE = "type"; //$NON-NLS-1$ + private static final String ATTR_DEFAULT = "default"; //$NON-NLS-1$ + private static final String ATTR_INITVALUE = "initValue"; //$NON-NLS-1$ + private static final String ATTR_SELECTOR = "selector"; //$NON-NLS-1$ + private static final String ATTR_NOT_SUPPORTED = "notsupported"; //$NON-NLS-1$ + private static final String ATTR_VALUE = "value"; //$NON-NLS-1$ + private static final String ATTR_TARGET = "target"; //$NON-NLS-1$ + private static final String ATTR_TARGETVALUE = "targetValue"; //$NON-NLS-1$ + private static final String ATTR_TOOLTIP = "tooltip"; //$NON-NLS-1$ + private static final String ATTR_ERROR = "error"; //$NON-NLS-1$ + private static final String ATTR_EVENTTYPE = "eventType"; //$NON-NLS-1$ + + // private static final Namespace XSLT_NAMESPACE = + // new Namespace("xsl", "http://www.w3.org/1999/XSL/Transform"); //$NON-NLS-1$ //$NON-NLS-2$ + + private static final String XSLT_TAG = "xsl"; //$NON-NLS-1$ + private static final String XSLT_NAMESPACE = "http://www.w3.org/1999/XSL/Transform"; //$NON-NLS-1$ + private static final String ELEM_STYLESHEET = "stylesheet"; //$NON-NLS-1$ + private static final String ATTR_STYLESHEET_VERSION = "version"; //$NON-NLS-1$ + private static final String VALUE_STYLESHEET_VERSION = "1.0"; //$NON-NLS-1$ + + private static final String PART_TYPE_DOC = "doc"; //$NON-NLS-1$ + private static final String PART_TYPE_PAGE = "page"; //$NON-NLS-1$ + private static final String PART_TYPE_WIDGET = "widget"; //$NON-NLS-1$ + + /** + * A {@link DescriptorManager}. + */ + private DescriptorManager manager; + + /** + * A xsl-for-output document. + */ + private Document xslt; + private Element xslRoot; + + /** + * Constructor. + * + * @param manager + * a {@link DescriptorManager} + */ + public DescriptorReader(DescriptorManager manager) { + this.manager = manager; + } + + /** + * Gets a {@link Document}. + * + * @return a {@link Document} + */ + public Document getXsltForOutput() { + return xslt; + } + + /** + * Parses a descriptor XML. + * + * @param descriptorPath + * a path of descriptor XML + */ + public void parse(URL descriptorPath) { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setNamespaceAware(true); + + DocumentBuilder builder = null; + Document doc = null; + + try { + builder = factory.newDocumentBuilder(); + doc = builder.parse(descriptorPath.toURI().toString()); + } catch (URISyntaxException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (ParserConfigurationException e) { + e.printStackTrace(); + } catch (SAXException e) { + e.printStackTrace(); + } + + xslRoot = doc.createElement("xsl:stylesheet"); + xslRoot.setAttribute("xmlns:xsl", XSLT_NAMESPACE); + xslRoot.setAttribute(ATTR_STYLESHEET_VERSION, VALUE_STYLESHEET_VERSION); + + if (doc != null && doc.getDocumentElement() != null) { + parseRoot(doc.getDocumentElement()); + } + + xslt = builder.newDocument(); + xslt.appendChild(xslt.importNode(xslRoot, true)); + + // TODO: Temporary code. Expected to be simplified. + TransformerFactory transFactory = TransformerFactory.newInstance(); + StringWriter stringwriter = new StringWriter(); + try { + Transformer transformerx = transFactory.newTransformer(); + transformerx.transform(new DOMSource(xslt), new StreamResult(stringwriter)); + xslt = builder.parse(new StringBufferInputStream(stringwriter.toString())); + } catch (TransformerConfigurationException e1) { + e1.printStackTrace(); + } catch (TransformerException e) { + e.printStackTrace(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (SAXException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * Parses a root element of descriptor XML. + * + * @param root + * a root element + */ + private void parseRoot(Element root) { + if (root == null) { + return; + } + + NodeList elemList = root.getChildNodes(); + for (int i = 0; i < elemList.getLength(); i++) { + Node childNode = elemList.item(i); + if (childNode instanceof Element) { + if (childNode.getNodeName().equals(ELEM_DOC)) { + parsePart((Element) childNode, new DocumentPartDescriptor()); + } else if (childNode.getNodeName().equals(ELEM_PAGE)) { + parsePart((Element) childNode, new PagePartDescriptor()); + } else if (childNode.getNodeName().equals(ELEM_WIDGET)) { + parsePart((Element) childNode, new WidgetPartDescriptor()); + } else if (childNode.getNodeName().equals(ELEM_TYPES)) { + parseTypes((Element) childNode); + } else if (childNode.getNodeName().equals(ELEM_EVENTTYPES)) { + parseEventTypes((Element) childNode); + } + } + } + } + + /** + * Parses a doc, page or widget element of descriptor XML. + * + * @param elem + * a doc, page or widget element + * @param part + * a {@link PartDescriptor} + */ + private void parsePart(Element elem, PartDescriptor part) { + if (elem == null || part == null) { + return; + } + + String id = elem.getAttribute(ATTR_ID); + String displayName = elem.getAttribute(ATTR_DISPLAYNAME); + String smallIcon = elem.getAttribute(ATTR_SMALLICON); + String icon16 = elem.getAttribute(ATTR_ICON_16); + String description = elem.getAttribute(ATTR_DESCRIPTION); + String paletteVisible = elem.getAttribute(ATTR_PALETTE_VISIBLE); + String helpCategory = elem.getAttribute(ATTR_HELPCATEGORY); + String helpContens = elem.getAttribute(ATTR_HELPCONTENS); + String width = elem.getAttribute(ATTR_FEEDBACKWIDTH); + String height = elem.getAttribute(ATTR_FEEDBACKHEIGHT); + String borderVisible = elem.getAttribute(ATTR_BORDER_VISIBLE); + String feedbackCondition = elem.getAttribute(ATTR_FEEDBACKCONDITION); + String guideText = elem.getAttribute(ATTR_GUIDE_TEXT); + String setStyle = elem.getAttribute(ATTR_SET_STYLE); + String uiSelector = elem.getAttribute(ATTR_UI_SELECTOR); + String xpath = elem.getAttribute(ATTR_XPATH); + String childXpath = elem.getAttribute(ATTR_CHILDXPATH); + + boolean boolpaletteVisible = true; + if (paletteVisible != null) { + boolpaletteVisible = Boolean.parseBoolean(paletteVisible); + } + boolean boolBorderVisible = Boolean.parseBoolean(borderVisible); + boolean boolSetStyle = Boolean.parseBoolean(setStyle); + + part.init(id, displayName, smallIcon, icon16, description, + boolpaletteVisible, helpCategory, helpContens, width, height, + boolBorderVisible, feedbackCondition, guideText, boolSetStyle, + uiSelector, xpath, childXpath); + + if (part instanceof WidgetPartDescriptor) { + String categories = elem.getAttribute(ATTR_CATEGORY); + if (categories != null) { + String[] categoriesArray = categories + .split(BuilderConstants.COMMA); + ((WidgetPartDescriptor) part).setCategories(Arrays + .asList(categoriesArray)); + } + } + + boolean isNoRelation = true; + NodeList elemList1 = elem.getElementsByTagName(ELEM_RELATIONS); + for (int i = 0; i < elemList1.getLength(); i++) { + parseRelations((Element) elemList1.item(i), part); + isNoRelation = false; + } + + // This code remains for compatibility. + if (isNoRelation) { + NodeList elemList = elem.getElementsByTagName(ELEM_CONTENT); + for (int i = 0; i < elemList.getLength(); i++) { + parseContent((Element) elemList.item(i), part); + } + } + + NodeList elemList = elem.getChildNodes(); + for (int i = 0; i < elemList.getLength(); i++) { + Node childNode = elemList.item(i); + if (childNode instanceof Element) { + if (childNode.getNodeName().equals(ELEM_CONDITION)) { + parsePartCondition((Element) childNode, part); + } else if (childNode.getNodeName().equals(ELEM_PROPERTY)) { + parseProperty((Element) childNode, part); + } else if (childNode.getNodeName().equals(ELEM_EVENT)) { + parseEvent((Element) childNode, part); + } else if (childNode.getNodeName().equals(ELEM_XSL_FOR_OUTPUT)) { + parseXsltForOutput((Element) childNode, xslRoot); + } + } + } + + //parseXsltForOutput(elem); + + manager.addPartDescriptor(part); + } + + /** + * Parses a relation element of descriptor XML. + * + * @param elem + * a relation element + * @param property + * a {@link PartDescriptor} + */ + private void parseRelations(Element elem, PartDescriptor part) { + if (elem == null || part == null) { + return; + } + + RelationDescriptor relation = part.getRelation(); + if (relation == null) { + return; + } + + NodeList elemList = elem.getChildNodes(); + for (int i = 0; i < elemList.getLength(); i++) { + Node childNode = elemList.item(i); + if (childNode instanceof Element) { + Element childElem = (Element) childNode; + if (childNode.getNodeName().equals(ELEM_PARENT)) { + String ids = childElem.getAttribute(ATTR_IDS); + relation.addParentPartIds(ids); + } else if (childNode.getNodeName().equals(ELEM_NOPARENT)) { + String ids = childElem.getAttribute(ATTR_IDS); + relation.addNoParentPartIds(ids); + } else if (childNode.getNodeName().equals(ELEM_CONTENT)) { + parseContent2(childElem, relation); + } else if (childNode.getNodeName().equals(ELEM_NOPARENT)) { + String ids = childElem.getAttribute(ATTR_IDS); + relation.addNoContentPartIds(ids); + } + } + } + } + + /** + * Parses a content element of descriptor XML. This method remains for + * compatibility. + * + * @param elem + * a content element + * @param part + * a {@link PartDescriptor} + */ + private void parseContent(Element elem, PartDescriptor part) { + if (elem == null || part == null) { + return; + } + + RelationDescriptor relation = part.getRelation(); + if (relation == null) { + return; + } + + parseContent2(elem, relation); + + String excludeIds = elem.getAttribute(ATTR_EXCLUDE_IDS); + String parentIds = elem.getAttribute(ATTR_PARENT_IDS); + + if (excludeIds != null) { + relation.addNoContentPartIds(excludeIds); + } + if (parentIds != null) { + relation.addParentPartIds(parentIds); + } + } + + /** + * Parses a content element of descriptor XML. + * + * @param elem + * a content element + * @param relation + * a {@link RelationDescriptor} + */ + private void parseContent2(Element elem, RelationDescriptor relation) { + if (elem == null || relation == null) { + return; + } + + String ids = elem.getAttribute(ATTR_IDS); + String type = elem.getAttribute(ATTR_TYPE); + String min = elem.getAttribute(ATTR_MIN); + String max = elem.getAttribute(ATTR_MAX); + String exclusiveGroup = elem.getAttribute(ATTR_EXCLUSIVE_GROUP); + ContentDescriptor.PartType partType = ContentDescriptor.PartType.ANY_PART; + + if (type != null && !type.isEmpty()) { + if (type.equals(PART_TYPE_DOC)) { + partType = ContentDescriptor.PartType.DOCUMENT_PART; + } else if (type.equals(PART_TYPE_PAGE)) { + partType = ContentDescriptor.PartType.PAGE_PART; + } else if (type.equals(PART_TYPE_WIDGET)) { + partType = ContentDescriptor.PartType.WIDGET_PART; + } + } + + ContentDescriptor content = new ContentDescriptor(); + content.setPartType(partType); + if (ids != null) { + content.setPartIds(ids); + } + if (min != null && !min.isEmpty()) { + content.setMin(Integer.valueOf(min).intValue()); + } + if (max != null && !max.isEmpty()) { + content.setMax(Integer.valueOf(max).intValue()); + } + if (exclusiveGroup != null && !exclusiveGroup.isEmpty()) { + content.setExclusiveGroup(exclusiveGroup); + } + relation.addContent(content); + } + + /** + * Parses a condition element of descriptor XML. + * + * @param elem + * a property element + * @param part + * a {@link PartDescriptor} + */ + private void parsePartCondition(Element elem, PartDescriptor part) { + if (elem == null || part == null) { + return; + } + + String name = elem.getAttribute(ATTR_NAME); + String value = elem.getAttribute(ATTR_VALUE); + String target = elem.getAttribute(ATTR_TARGET); + String targetValue = elem.getAttribute(ATTR_TARGETVALUE); + + PartConditionDescriptor condition = new PartConditionDescriptor(name, + value, target, targetValue); + part.addConditionDescriptor(condition); + } + + /** + * Parses a property element of descriptor XML. + * + * @param elem + * a property element + * @param part + * a {@link PartDescriptor} + */ + private void parseProperty(Element elem, PartDescriptor part) { + if (elem == null || part == null) { + return; + } + + String notsupported = elem.getAttribute(ATTR_NOT_SUPPORTED); + if (notsupported != null && notsupported.equals(BuilderConstants.TRUE)) { + return; + } + + String name = elem.getAttribute(ATTR_NAME); + String type = elem.getAttribute(ATTR_TYPE); + String displayName = elem.getAttribute(ATTR_DISPLAYNAME); + String tooltip = elem.getAttribute(ATTR_TOOLTIP); + String defaultValue = elem.getAttribute(ATTR_DEFAULT); + String initValue = elem.getAttribute(ATTR_INITVALUE); + String category = elem.getAttribute(ATTR_CATEGORY); + String xpath = elem.getAttribute(ATTR_XPATH); + + if (tooltip == null) { + tooltip = displayName; + } else { + tooltip = displayName + BuilderConstants.SPACE + + BuilderConstants.DASH + BuilderConstants.SPACE + tooltip; + } + + PropertyDescriptor property = new PropertyDescriptor(name, type, + displayName, tooltip, defaultValue, initValue, category, xpath, + manager); + part.addPropertyDescriptor(property); + + if (TypeDescriptor.ID_OF_GROUP.equals(type) + || TypeDescriptor.ID_OF_GROUP_TEXT.equals(type) + || TypeDescriptor.ID_OF_GROUP_POSITION.equals(type)) { + NodeList elemList = elem.getElementsByTagName(ELEM_PROPERTY); + for (int i = 0; i < elemList.getLength(); i++) { + parseChildProperty((Element) elemList.item(i), property); + } + } + + NodeList elemList = elem.getElementsByTagName(ELEM_CONDITION); + for (int i = 0; i < elemList.getLength(); i++) { + parseCondition((Element) elemList.item(i), property); + } + } + + /** + * Parses a child property element of descriptor XML. + * + * @param elem + * a child property + * @param property + * a {@link PropertyDescriptor} + */ + private void parseChildProperty(Element elem, PropertyDescriptor property) { + if (elem == null || property == null) { + return; + } + + String name = elem.getAttribute(ATTR_NAME); + String type = elem.getAttribute(ATTR_TYPE); + String displayName = elem.getAttribute(ATTR_DISPLAYNAME); + String tooltip = elem.getAttribute(ATTR_TOOLTIP); + String defaultValue = elem.getAttribute(ATTR_DEFAULT); + String initValue = elem.getAttribute(ATTR_INITVALUE); + String category = elem.getAttribute(ATTR_CATEGORY); + String xpath = elem.getAttribute(ATTR_XPATH); + String selector = elem.getAttribute(ATTR_SELECTOR); + + PropertyDescriptor childProperty = new ChildPropertyDescriptor(name, + type, displayName, tooltip, defaultValue, initValue, category, + xpath, selector, manager); + property.addChildPropertyDescriptor(childProperty); + + NodeList elemList = elem.getElementsByTagName(ELEM_CONDITION); + for (int i = 0; i < elemList.getLength(); i++) { + parseCondition((Element) elemList.item(i), childProperty); + } + } + + /** + * Parses a condition element of descriptor XML. + * + * @param elem + * a condition element + * @param property + * a {@link PropertyDescriptor} + */ + private void parseCondition(Element elem, PropertyDescriptor property) { + if (elem == null || property == null) { + return; + } + + String name = elem.getAttribute(ATTR_NAME); + String value = elem.getAttribute(ATTR_VALUE); + String target = elem.getAttribute(ATTR_TARGET); + String targetValue = elem.getAttribute(ATTR_TARGETVALUE); + String error = elem.getAttribute(ATTR_ERROR); + + PropertyConditionDescriptor condition = new PropertyConditionDescriptor( + name, value, target, targetValue, error); + property.addConditionDescriptor(condition); + } + + /** + * Parses an event element of descriptor XML. + * + * @param elem + * an event element + * @param part + * a {@link PartDescriptor} + */ + private void parseEvent(Element elem, PartDescriptor part) { + if (elem == null || part == null) { + return; + } + + String name = elem.getAttribute(ATTR_NAME); + String displayName = elem.getAttribute(ATTR_DISPLAYNAME); + String eventType = elem.getAttribute(ATTR_EVENTTYPE); + EventDescriptor event = new EventDescriptor(name, displayName, + eventType, manager); + part.addEventDescriptor(event); + } + + /** + * Parses a types element of descriptor XML. + * + * @param elem + * a types element + */ + private void parseTypes(Element elem) { + if (elem == null) { + return; + } + + NodeList elemList = elem.getElementsByTagName(ELEM_TYPE); + for (int i = 0; i < elemList.getLength(); i++) { + parseType((Element) elemList.item(i)); + } + } + + /** + * Parses a type element of descriptor XML. + * + * @param elem + * a type element + */ + private void parseType(Element elem) { + if (elem == null) { + return; + } + + String id = elem.getAttribute(ATTR_ID); + + TypeDescriptor type = manager.getTypeDescriptor(id); + + if (type == null) { + type = new TypeDescriptor(id); + manager.addTypeDescriptor(type); + } + + NodeList elemList = elem.getElementsByTagName(ELEM_CONSTANT); + for (int i = 0; i < elemList.getLength(); i++) { + type.addAvailableConstant(parseConstant((Element) elemList.item(i))); + } + } + + /** + * Parses a constant element of descriptor XML. + * + * @param elem + * a constant element + */ + private ConstantDescriptor parseConstant(Element elem) { + if (elem == null) { + return null; + } + + String value = elem.getAttribute(ATTR_VALUE); + String displayName = elem.getAttribute(ATTR_DISPLAYNAME); + String icon = elem.getAttribute(ATTR_ICON); + + if (displayName == null) { + displayName = value; + } + + return new ConstantDescriptor(value, displayName, icon); + } + + /** + * Parses an eventTypes element of descriptor XML. + * + * @param elem + * an eventTypes element + */ + private void parseEventTypes(Element elem) { + if (elem == null) { + return; + } + + NodeList elemList = elem.getElementsByTagName(ELEM_EVENTTYPE); + for (int i = 0; i < elemList.getLength(); i++) { + parseEventType((Element) elemList.item(i)); + } + } + + /** + * Parses an eventType element of descriptor XML. + * + * @param elem + * an eventType element + */ + private void parseEventType(Element elem) { + if (elem == null) { + return; + } + + String id = elem.getAttribute(ATTR_ID); + if (manager.getEventTypeDescriptor(id) != null) { + return; + } + + EventTypeDescriptor eventType = new EventTypeDescriptor(id); + + NodeList elemList = elem.getChildNodes(); + for (int i = 0; i < elemList.getLength(); i++) { + Node childNode = elemList.item(i); + if (childNode instanceof Element) { + Element childElem = (Element) childNode; + if (childNode.getNodeName().equals(ELEM_DEFAULTCODE)) { + eventType.setDefaultCode(((Element) elemList.item(i)) + .getTextContent()); + } else if (childNode.getNodeName().equals(ELEM_PARAM)) { + eventType + .addEventParameter(parseParameter((Element) elemList + .item(i))); + } + } + } + + manager.addEventTypeDescriptor(eventType); + } + + /** + * Parses a param element of descriptor XML. + * + * @param elem + * a param element + */ + private EventParamDescriptor parseParameter(Element elem) { + if (elem == null) { + return null; + } + + String name = elem.getAttribute(ATTR_NAME); + String type = elem.getAttribute(ATTR_TYPE); + + return new EventParamDescriptor(name, type); + } + + /** + * Parses a xsl-for-output element of descriptor XML. + * + * @param elem + * a xsl-for-output element + */ + private void parseXsltForOutput(Element elem, Element xslRoot) { + if (elem == null) { + return; + } + + NodeList elemList2 = elem.getChildNodes(); + for (int j = 0; j < elemList2.getLength(); j++) { + Node childNode = elemList2.item(j); + if (childNode instanceof Element) { + xslRoot.appendChild(childNode); + } + } + } } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/DescriptorReader_ver_1.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/DescriptorReader_ver_1.java deleted file mode 100644 index 37825e8..0000000 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/DescriptorReader_ver_1.java +++ /dev/null @@ -1,710 +0,0 @@ -/* - * UI Builder - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Contributors: - * - S-Core Co., Ltd - * - */ - - -package org.tizen.webuibuilder.model.io; - -import java.net.URL; -import java.util.Arrays; - -import org.dom4j.Document; -import org.dom4j.DocumentException; -import org.dom4j.DocumentHelper; -import org.dom4j.Element; -import org.dom4j.Namespace; -import org.dom4j.QName; -import org.dom4j.io.SAXReader; -import org.tizen.webuibuilder.BuilderConstants; -import org.tizen.webuibuilder.model.descriptors.ChildPropertyDescriptor; -import org.tizen.webuibuilder.model.descriptors.ConstantDescriptor; -import org.tizen.webuibuilder.model.descriptors.ContentDescriptor; -import org.tizen.webuibuilder.model.descriptors.DescriptorManager; -import org.tizen.webuibuilder.model.descriptors.DocumentPartDescriptor; -import org.tizen.webuibuilder.model.descriptors.EventDescriptor; -import org.tizen.webuibuilder.model.descriptors.EventParamDescriptor; -import org.tizen.webuibuilder.model.descriptors.EventTypeDescriptor; -import org.tizen.webuibuilder.model.descriptors.PagePartDescriptor; -import org.tizen.webuibuilder.model.descriptors.PartConditionDescriptor; -import org.tizen.webuibuilder.model.descriptors.PartDescriptor; -import org.tizen.webuibuilder.model.descriptors.PropertyConditionDescriptor; -import org.tizen.webuibuilder.model.descriptors.PropertyDescriptor; -import org.tizen.webuibuilder.model.descriptors.RelationDescriptor; -import org.tizen.webuibuilder.model.descriptors.TypeDescriptor; -import org.tizen.webuibuilder.model.descriptors.WidgetPartDescriptor; - - -/** - * A descriptor reader. - */ -public class DescriptorReader_ver_1 { - - // Element name - private static final String ELEM_DOC = "doc"; //$NON-NLS-1$ - private static final String ELEM_PAGE = "page"; //$NON-NLS-1$ - private static final String ELEM_WIDGET = "widget"; //$NON-NLS-1$ - private static final String ELEM_CONTENT = "content"; //$NON-NLS-1$ - private static final String ELEM_NOCONTENT = "nocontent"; //$NON-NLS-1$ - private static final String ELEM_PARENT = "parent"; //$NON-NLS-1$ - private static final String ELEM_NOPARENT = "noparent"; //$NON-NLS-1$ - private static final String ELEM_RELATIONS = "relations"; //$NON-NLS-1$ - private static final String ELEM_PROPERTY = "property"; //$NON-NLS-1$ - private static final String ELEM_CONDITION = "condition"; //$NON-NLS-1$ - private static final String ELEM_EVENT = "event"; //$NON-NLS-1$ - private static final String ELEM_XSL_FOR_OUTPUT = "xsl-for-output"; //$NON-NLS-1$ - private static final String ELEM_TYPES = "types"; //$NON-NLS-1$ - private static final String ELEM_TYPE = "type"; //$NON-NLS-1$ - private static final String ELEM_CONSTANT = "constant"; //$NON-NLS-1$ - private static final String ELEM_EVENTTYPES = "eventTypes"; //$NON-NLS-1$ - private static final String ELEM_EVENTTYPE = "eventType"; //$NON-NLS-1$ - private static final String ELEM_DEFAULTCODE = "defaultCode"; //$NON-NLS-1$ - private static final String ELEM_PARAM = "param"; //$NON-NLS-1$ - - // Attribute name - private static final String ATTR_ID = "id"; //$NON-NLS-1$ - private static final String ATTR_DISPLAYNAME = "displayName"; //$NON-NLS-1$ - private static final String ATTR_SMALLICON = "smallIcon"; //$NON-NLS-1$ - private static final String ATTR_ICON_16 = "icon.16"; //$NON-NLS-1$ - private static final String ATTR_CATEGORY = "category"; //$NON-NLS-1$ - private static final String ATTR_DESCRIPTION = "description"; //$NON-NLS-1$ - private static final String ATTR_PALETTE_VISIBLE = "paletteVisible"; //$NON-NLS-1$ - private static final String ATTR_HELPCATEGORY = "helpCategory"; //$NON-NLS-1$ - private static final String ATTR_HELPCONTENS = "helpContents"; //$NON-NLS-1$ - private static final String ATTR_FEEDBACKWIDTH = "feedbackWidth"; //$NON-NLS-1$ - private static final String ATTR_FEEDBACKHEIGHT = "feedbackHeight"; //$NON-NLS-1$ - private static final String ATTR_BORDER_VISIBLE = "borderVisible"; //$NON-NLS-1$ - private static final String ATTR_FEEDBACKCONDITION = "feedbackCondition"; //$NON-NLS-1$ - private static final String ATTR_GUIDE_TEXT = "guideText"; //$NON-NLS-1$ - private static final String ATTR_SET_STYLE = "setStyle"; //$NON-NLS-1$ - private static final String ATTR_UI_SELECTOR = "uiSelector"; //$NON-NLS-1$ - private static final String ATTR_XPATH = "xpath"; //$NON-NLS-1$ - private static final String ATTR_CHILDXPATH = "childXpath"; //$NON-NLS-1$ - private static final String ATTR_IDS = "ids"; //$NON-NLS-1$ - private static final String ATTR_EXCLUDE_IDS = "exclude-ids"; //$NON-NLS-1$ - private static final String ATTR_PARENT_IDS = "parent-ids"; //$NON-NLS-1$ - private static final String ATTR_EXCLUSIVE_GROUP = "exclusiveGroup"; //$NON-NLS-1$ - private static final String ATTR_MIN = "min"; //$NON-NLS-1$ - private static final String ATTR_MAX = "max"; //$NON-NLS-1$ - private static final String ATTR_NAME = "name"; //$NON-NLS-1$ - private static final String ATTR_TYPE = "type"; //$NON-NLS-1$ - private static final String ATTR_DEFAULT = "default"; //$NON-NLS-1$ - private static final String ATTR_INITVALUE = "initValue"; //$NON-NLS-1$ - private static final String ATTR_SELECTOR = "selector"; //$NON-NLS-1$ - private static final String ATTR_NOT_SUPPORTED = "notsupported"; //$NON-NLS-1$ - private static final String ATTR_VALUE = "value"; //$NON-NLS-1$ - private static final String ATTR_TARGET = "target"; //$NON-NLS-1$ - private static final String ATTR_TARGETVALUE = "targetValue"; //$NON-NLS-1$ - private static final String ATTR_TOOLTIP = "tooltip"; //$NON-NLS-1$ - private static final String ATTR_ERROR = "error"; //$NON-NLS-1$ - private static final String ATTR_EVENTTYPE = "eventType"; //$NON-NLS-1$ - - private static final Namespace XSLT_NAMESPACE = - new Namespace("xsl", "http://www.w3.org/1999/XSL/Transform"); //$NON-NLS-1$ //$NON-NLS-2$ - private static final String ELEM_STYLESHEET = "stylesheet"; //$NON-NLS-1$ - private static final String ATTR_STYLESHEET_VERSION = "version"; //$NON-NLS-1$ - private static final String VALUE_STYLESHEET_VERSION = "1.0"; //$NON-NLS-1$ - - private static final String PART_TYPE_DOC = "doc"; //$NON-NLS-1$ - private static final String PART_TYPE_PAGE = "page"; //$NON-NLS-1$ - private static final String PART_TYPE_WIDGET = "widget"; //$NON-NLS-1$ - - /** - * A {@link DescriptorManager}. - */ - private DescriptorManager manager; - - /** - * A xsl-for-output document. - */ - private Document xslt; - - /** - * Constructor. - * - * @param manager - * a {@link DescriptorManager} - */ - public DescriptorReader_ver_1(DescriptorManager manager) { - this.manager = manager; - this.xslt = DocumentHelper.createDocument(); - xslt.addElement(new QName(ELEM_STYLESHEET, XSLT_NAMESPACE)) - .addAttribute(ATTR_STYLESHEET_VERSION, VALUE_STYLESHEET_VERSION); - } - - /** - * Gets a {@link Document}. - * - * @return a {@link Document} - */ - public Document getXsltForOutput() { - return xslt; - } - - /** - * Parses a descriptor XML. - * - * @param descriptorPath - * a path of descriptor XML - */ - public void parse(URL descriptorPath) { - SAXReader reader = new SAXReader(); - Document doc = null; - - try { - doc = reader.read(descriptorPath); - } catch (DocumentException e) { - e.printStackTrace(); - } - - if (doc != null && doc.getRootElement() != null) { - parseRoot(doc.getRootElement()); - } - } - - /** - * Parses a root element of descriptor XML. - * - * @param root - * a root element - */ - private void parseRoot(Element root) { - if (root == null) { - return; - } - - for (Object childObj : root.elements(ELEM_DOC)) { - parsePart((Element) childObj, new DocumentPartDescriptor()); - } - for (Object childObj : root.elements(ELEM_PAGE)) { - parsePart((Element) childObj, new PagePartDescriptor()); - } - for (Object childObj : root.elements(ELEM_WIDGET)) { - parsePart((Element) childObj, new WidgetPartDescriptor()); - } - for (Object childObj : root.elements(ELEM_TYPES)) { - parseTypes((Element) childObj); - } - for (Object childObj : root.elements(ELEM_EVENTTYPES)) { - parseEventTypes((Element) childObj); - } - } - - /** - * Parses a doc, page or widget element of descriptor XML. - * - * @param elem - * a doc, page or widget element - * @param part - * a {@link PartDescriptor} - */ - private void parsePart(Element elem, PartDescriptor part) { - if (elem == null || part == null) { - return; - } - - String id = elem.attributeValue(ATTR_ID); - String displayName = elem.attributeValue(ATTR_DISPLAYNAME); - String smallIcon = elem.attributeValue(ATTR_SMALLICON); - String icon16 = elem.attributeValue(ATTR_ICON_16); - String description = elem.attributeValue(ATTR_DESCRIPTION); - String paletteVisible = elem.attributeValue(ATTR_PALETTE_VISIBLE); - String helpCategory = elem.attributeValue(ATTR_HELPCATEGORY); - String helpContens = elem.attributeValue(ATTR_HELPCONTENS); - String width = elem.attributeValue(ATTR_FEEDBACKWIDTH); - String height = elem.attributeValue(ATTR_FEEDBACKHEIGHT); - String borderVisible = elem.attributeValue(ATTR_BORDER_VISIBLE); - String feedbackCondition = elem.attributeValue(ATTR_FEEDBACKCONDITION); - String guideText = elem.attributeValue(ATTR_GUIDE_TEXT); - String setStyle = elem.attributeValue(ATTR_SET_STYLE); - String uiSelector = elem.attributeValue(ATTR_UI_SELECTOR); - String xpath = elem.attributeValue(ATTR_XPATH); - String childXpath = elem.attributeValue(ATTR_CHILDXPATH); - - boolean boolpaletteVisible = true; - if (paletteVisible != null) { - boolpaletteVisible = Boolean.parseBoolean(paletteVisible); - } - boolean boolBorderVisible = Boolean.parseBoolean(borderVisible); - boolean boolSetStyle = Boolean.parseBoolean(setStyle); - - part.init(id, displayName, smallIcon, icon16, description, boolpaletteVisible, - helpCategory, helpContens, width, height, boolBorderVisible, feedbackCondition, - guideText, boolSetStyle, uiSelector, xpath, childXpath); - - if (part instanceof WidgetPartDescriptor) { - String categories = elem.attributeValue(ATTR_CATEGORY); - if (categories != null) { - String[] categoriesArray = categories.split(BuilderConstants.COMMA); - ((WidgetPartDescriptor) part).setCategories(Arrays.asList(categoriesArray)); - } - } - - boolean isNoRelation = true; - for (Object contentObj : elem.elements(ELEM_RELATIONS)) { - parseRelations((Element) contentObj, part); - isNoRelation = false; - } - - // This code remains for compatibility. - if (isNoRelation) { - for (Object contentObj : elem.elements(ELEM_CONTENT)) { - parseContent((Element) contentObj, part); - } - } - - for (Object childObj : elem.elements(ELEM_CONDITION)) { - parsePartCondition((Element) childObj, part); - } - - for (Object propertyObj : elem.elements(ELEM_PROPERTY)) { - parseProperty((Element) propertyObj, part); - } - - for (Object contentObj : elem.elements(ELEM_EVENT)) { - parseEvent((Element) contentObj, part); - } - - parseXsltForOutput(elem); - - manager.addPartDescriptor(part); - } - - /** - * Parses a relation element of descriptor XML. - * - * @param elem - * a relation element - * @param property - * a {@link PartDescriptor} - */ - private void parseRelations(Element elem, PartDescriptor part) { - if (elem == null || part == null) { - return; - } - - RelationDescriptor relation = part.getRelation(); - if (relation == null) { - return; - } - - for (Object childObj : elem.elements(ELEM_PARENT)) { - Element childElem = (Element) childObj; - String ids = childElem.attributeValue(ATTR_IDS); - - relation.addParentPartIds(ids); - } - - for (Object childObj : elem.elements(ELEM_NOPARENT)) { - Element childElem = (Element) childObj; - String ids = childElem.attributeValue(ATTR_IDS); - - relation.addNoParentPartIds(ids); - } - - for (Object childObj : elem.elements(ELEM_CONTENT)) { - Element childElem = (Element) childObj; - parseContent2(childElem, relation); - } - - for (Object childObj : elem.elements(ELEM_NOCONTENT)) { - Element childElem = (Element) childObj; - String ids = childElem.attributeValue(ATTR_IDS); - - relation.addNoContentPartIds(ids); - } - } - - /** - * Parses a content element of descriptor XML. This method remains for compatibility. - * - * @param elem - * a content element - * @param part - * a {@link PartDescriptor} - */ - private void parseContent(Element elem, PartDescriptor part) { - if (elem == null || part == null) { - return; - } - - RelationDescriptor relation = part.getRelation(); - if (relation == null) { - return; - } - - parseContent2(elem, relation); - - String excludeIds = elem.attributeValue(ATTR_EXCLUDE_IDS); - String parentIds = elem.attributeValue(ATTR_PARENT_IDS); - - if (excludeIds != null) { - relation.addNoContentPartIds(excludeIds); - } - if (parentIds != null) { - relation.addParentPartIds(parentIds); - } - } - - /** - * Parses a content element of descriptor XML. - * - * @param elem - * a content element - * @param relation - * a {@link RelationDescriptor} - */ - private void parseContent2(Element elem, RelationDescriptor relation) { - if (elem == null || relation == null) { - return; - } - - String ids = elem.attributeValue(ATTR_IDS); - String type = elem.attributeValue(ATTR_TYPE); - String min = elem.attributeValue(ATTR_MIN); - String max = elem.attributeValue(ATTR_MAX); - String exclusiveGroup = elem.attributeValue(ATTR_EXCLUSIVE_GROUP); - ContentDescriptor.PartType partType = ContentDescriptor.PartType.ANY_PART; - - if (type != null) { - if (type.equals(PART_TYPE_DOC)) { - partType = ContentDescriptor.PartType.DOCUMENT_PART; - } else if (type.equals(PART_TYPE_PAGE)) { - partType = ContentDescriptor.PartType.PAGE_PART; - } else if (type.equals(PART_TYPE_WIDGET)) { - partType = ContentDescriptor.PartType.WIDGET_PART; - } - } - - ContentDescriptor content = new ContentDescriptor(); - content.setPartType(partType); - if (ids != null) { - content.setPartIds(ids); - } - if (min != null) { - content.setMin(Integer.valueOf(min).intValue()); - } - if (max != null) { - content.setMax(Integer.valueOf(max).intValue()); - } - if (exclusiveGroup != null) { - content.setExclusiveGroup(exclusiveGroup); - } - relation.addContent(content); - } - - /** - * Parses a condition element of descriptor XML. - * - * @param elem - * a property element - * @param part - * a {@link PartDescriptor} - */ - private void parsePartCondition(Element elem, PartDescriptor part) { - if (elem == null || part == null) { - return; - } - - String name = elem.attributeValue(ATTR_NAME); - String value = elem.attributeValue(ATTR_VALUE); - String target = elem.attributeValue(ATTR_TARGET); - String targetValue = elem.attributeValue(ATTR_TARGETVALUE); - - PartConditionDescriptor condition = - new PartConditionDescriptor(name, value, target, targetValue); - part.addConditionDescriptor(condition); - } - - /** - * Parses a property element of descriptor XML. - * - * @param elem - * a property element - * @param part - * a {@link PartDescriptor} - */ - private void parseProperty(Element elem, PartDescriptor part) { - if (elem == null || part == null) { - return; - } - - String notsupported = elem.attributeValue(ATTR_NOT_SUPPORTED); - if (notsupported != null && notsupported.equals(BuilderConstants.TRUE)) { - return; - } - - String name = elem.attributeValue(ATTR_NAME); - String type = elem.attributeValue(ATTR_TYPE); - String displayName = elem.attributeValue(ATTR_DISPLAYNAME); - String tooltip = elem.attributeValue(ATTR_TOOLTIP); - String defaultValue = elem.attributeValue(ATTR_DEFAULT); - String initValue = elem.attributeValue(ATTR_INITVALUE); - String category = elem.attributeValue(ATTR_CATEGORY); - String xpath = elem.attributeValue(ATTR_XPATH); - - if (tooltip == null) { - tooltip = displayName; - } else { - tooltip = - displayName + BuilderConstants.SPACE + BuilderConstants.DASH - + BuilderConstants.SPACE + tooltip; - } - - PropertyDescriptor property = - new PropertyDescriptor(name, type, displayName, tooltip, defaultValue, initValue, - category, xpath, manager); - part.addPropertyDescriptor(property); - - if (TypeDescriptor.ID_OF_GROUP.equals(type) || TypeDescriptor.ID_OF_GROUP_TEXT.equals(type) - || TypeDescriptor.ID_OF_GROUP_POSITION.equals(type)) { - for (Object propertyObj : elem.elements(ELEM_PROPERTY)) { - parseChildProperty((Element) propertyObj, property); - } - } - - for (Object childObj : elem.elements(ELEM_CONDITION)) { - parseCondition((Element) childObj, property); - } - } - - /** - * Parses a child property element of descriptor XML. - * - * @param elem - * a child property - * @param property - * a {@link PropertyDescriptor} - */ - private void parseChildProperty(Element elem, PropertyDescriptor property) { - if (elem == null || property == null) { - return; - } - - String name = elem.attributeValue(ATTR_NAME); - String type = elem.attributeValue(ATTR_TYPE); - String displayName = elem.attributeValue(ATTR_DISPLAYNAME); - String tooltip = elem.attributeValue(ATTR_TOOLTIP); - String defaultValue = elem.attributeValue(ATTR_DEFAULT); - String initValue = elem.attributeValue(ATTR_INITVALUE); - String category = elem.attributeValue(ATTR_CATEGORY); - String xpath = elem.attributeValue(ATTR_XPATH); - String selector = elem.attributeValue(ATTR_SELECTOR); - - PropertyDescriptor childProperty = - new ChildPropertyDescriptor(name, type, displayName, tooltip, defaultValue, - initValue, category, xpath, selector, manager); - property.addChildPropertyDescriptor(childProperty); - - for (Object childObj : elem.elements(ELEM_CONDITION)) { - parseCondition((Element) childObj, childProperty); - } - } - - /** - * Parses a condition element of descriptor XML. - * - * @param elem - * a condition element - * @param property - * a {@link PropertyDescriptor} - */ - private void parseCondition(Element elem, PropertyDescriptor property) { - if (elem == null || property == null) { - return; - } - - String name = elem.attributeValue(ATTR_NAME); - String value = elem.attributeValue(ATTR_VALUE); - String target = elem.attributeValue(ATTR_TARGET); - String targetValue = elem.attributeValue(ATTR_TARGETVALUE); - String error = elem.attributeValue(ATTR_ERROR); - - PropertyConditionDescriptor condition = - new PropertyConditionDescriptor(name, value, target, targetValue, error); - property.addConditionDescriptor(condition); - } - - /** - * Parses an event element of descriptor XML. - * - * @param elem - * an event element - * @param part - * a {@link PartDescriptor} - */ - private void parseEvent(Element elem, PartDescriptor part) { - if (elem == null || part == null) { - return; - } - - String name = elem.attributeValue(ATTR_NAME); - String displayName = elem.attributeValue(ATTR_DISPLAYNAME); - String eventType = elem.attributeValue(ATTR_EVENTTYPE); - EventDescriptor event = new EventDescriptor(name, displayName, eventType, manager); - part.addEventDescriptor(event); - } - - /** - * Parses a types element of descriptor XML. - * - * @param elem - * a types element - */ - private void parseTypes(Element elem) { - if (elem == null) { - return; - } - - for (Object childObj : elem.elements(ELEM_TYPE)) { - parseType((Element) childObj); - } - } - - /** - * Parses a type element of descriptor XML. - * - * @param elem - * a type element - */ - private void parseType(Element elem) { - if (elem == null) { - return; - } - - String id = elem.attributeValue(ATTR_ID); - - TypeDescriptor type = manager.getTypeDescriptor(id); - - if (type == null) { - type = new TypeDescriptor(id); - manager.addTypeDescriptor(type); - } - - for (Object childObj : elem.elements(ELEM_CONSTANT)) { - type.addAvailableConstant(parseConstant((Element) childObj)); - } - - } - - /** - * Parses a constant element of descriptor XML. - * - * @param elem - * a constant element - */ - private ConstantDescriptor parseConstant(Element elem) { - if (elem == null) { - return null; - } - - String value = elem.attributeValue(ATTR_VALUE); - String displayName = elem.attributeValue(ATTR_DISPLAYNAME); - if (displayName == null) { - displayName = value; - } - - return new ConstantDescriptor(value, displayName); - } - - /** - * Parses an eventTypes element of descriptor XML. - * - * @param elem - * an eventTypes element - */ - private void parseEventTypes(Element elem) { - if (elem == null) { - return; - } - - for (Object childObj : elem.elements(ELEM_EVENTTYPE)) { - parseEventType((Element) childObj); - } - } - - /** - * Parses an eventType element of descriptor XML. - * - * @param elem - * an eventType element - */ - private void parseEventType(Element elem) { - if (elem == null) { - return; - } - - String id = elem.attributeValue(ATTR_ID); - if (manager.getEventTypeDescriptor(id) != null) { - return; - } - - EventTypeDescriptor eventType = new EventTypeDescriptor(id); - - for (Object childObj : elem.elements(ELEM_DEFAULTCODE)) { - eventType.setDefaultCode(((Element) childObj).getText()); - } - - for (Object childObj : elem.elements(ELEM_PARAM)) { - eventType.addEventParameter(parseParameter((Element) childObj)); - } - - manager.addEventTypeDescriptor(eventType); - } - - /** - * Parses a param element of descriptor XML. - * - * @param elem - * a param element - */ - private EventParamDescriptor parseParameter(Element elem) { - if (elem == null) { - return null; - } - - String name = elem.attributeValue(ATTR_NAME); - String type = elem.attributeValue(ATTR_TYPE); - - return new EventParamDescriptor(name, type); - } - - /** - * Parses a xsl-for-output element of descriptor XML. - * - * @param elem - * a xsl-for-output element - */ - private void parseXsltForOutput(Element elem) { - if (elem == null) { - return; - } - - Element code = elem.element(ELEM_XSL_FOR_OUTPUT); - if (code != null) { - Element child = null; - for (Object nodeObj : code.elements()) { - child = (Element) nodeObj; - xslt.getRootElement().add(child.createCopy()); - } - } - } - -} diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/DescriptorReader_ver_2.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/DescriptorReader_ver_2.java deleted file mode 100644 index a96874b..0000000 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/DescriptorReader_ver_2.java +++ /dev/null @@ -1,710 +0,0 @@ -/* - * UI Builder - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Contributors: - * - S-Core Co., Ltd - * - */ - - -package org.tizen.webuibuilder.model.io; - -import java.net.URL; -import java.util.Arrays; - -import org.dom4j.Document; -import org.dom4j.DocumentException; -import org.dom4j.DocumentHelper; -import org.dom4j.Element; -import org.dom4j.Namespace; -import org.dom4j.QName; -import org.dom4j.io.SAXReader; -import org.tizen.webuibuilder.BuilderConstants; -import org.tizen.webuibuilder.model.descriptors.ChildPropertyDescriptor; -import org.tizen.webuibuilder.model.descriptors.ConstantDescriptor; -import org.tizen.webuibuilder.model.descriptors.ContentDescriptor; -import org.tizen.webuibuilder.model.descriptors.DescriptorManager; -import org.tizen.webuibuilder.model.descriptors.DocumentPartDescriptor; -import org.tizen.webuibuilder.model.descriptors.EventDescriptor; -import org.tizen.webuibuilder.model.descriptors.EventParamDescriptor; -import org.tizen.webuibuilder.model.descriptors.EventTypeDescriptor; -import org.tizen.webuibuilder.model.descriptors.PagePartDescriptor; -import org.tizen.webuibuilder.model.descriptors.PartConditionDescriptor; -import org.tizen.webuibuilder.model.descriptors.PartDescriptor; -import org.tizen.webuibuilder.model.descriptors.PropertyConditionDescriptor; -import org.tizen.webuibuilder.model.descriptors.PropertyDescriptor; -import org.tizen.webuibuilder.model.descriptors.RelationDescriptor; -import org.tizen.webuibuilder.model.descriptors.TypeDescriptor; -import org.tizen.webuibuilder.model.descriptors.WidgetPartDescriptor; - - -/** - * A descriptor reader. - */ -public class DescriptorReader_ver_2 { - - // Element name - private static final String ELEM_DOC = "doc"; //$NON-NLS-1$ - private static final String ELEM_PAGE = "page"; //$NON-NLS-1$ - private static final String ELEM_WIDGET = "widget"; //$NON-NLS-1$ - private static final String ELEM_CONTENT = "content"; //$NON-NLS-1$ - private static final String ELEM_NOCONTENT = "nocontent"; //$NON-NLS-1$ - private static final String ELEM_PARENT = "parent"; //$NON-NLS-1$ - private static final String ELEM_NOPARENT = "noparent"; //$NON-NLS-1$ - private static final String ELEM_RELATIONS = "relations"; //$NON-NLS-1$ - private static final String ELEM_PROPERTY = "property"; //$NON-NLS-1$ - private static final String ELEM_CONDITION = "condition"; //$NON-NLS-1$ - private static final String ELEM_EVENT = "event"; //$NON-NLS-1$ - private static final String ELEM_XSL_FOR_OUTPUT = "xsl-for-output"; //$NON-NLS-1$ - private static final String ELEM_TYPES = "types"; //$NON-NLS-1$ - private static final String ELEM_TYPE = "type"; //$NON-NLS-1$ - private static final String ELEM_CONSTANT = "constant"; //$NON-NLS-1$ - private static final String ELEM_EVENTTYPES = "eventTypes"; //$NON-NLS-1$ - private static final String ELEM_EVENTTYPE = "eventType"; //$NON-NLS-1$ - private static final String ELEM_DEFAULTCODE = "defaultCode"; //$NON-NLS-1$ - private static final String ELEM_PARAM = "param"; //$NON-NLS-1$ - - // Attribute name - private static final String ATTR_ID = "id"; //$NON-NLS-1$ - private static final String ATTR_DISPLAYNAME = "displayName"; //$NON-NLS-1$ - private static final String ATTR_SMALLICON = "smallIcon"; //$NON-NLS-1$ - private static final String ATTR_ICON_16 = "icon.16"; //$NON-NLS-1$ - private static final String ATTR_CATEGORY = "category"; //$NON-NLS-1$ - private static final String ATTR_DESCRIPTION = "description"; //$NON-NLS-1$ - private static final String ATTR_PALETTE_VISIBLE = "paletteVisible"; //$NON-NLS-1$ - private static final String ATTR_HELPCATEGORY = "helpCategory"; //$NON-NLS-1$ - private static final String ATTR_HELPCONTENS = "helpContents"; //$NON-NLS-1$ - private static final String ATTR_FEEDBACKWIDTH = "feedbackWidth"; //$NON-NLS-1$ - private static final String ATTR_FEEDBACKHEIGHT = "feedbackHeight"; //$NON-NLS-1$ - private static final String ATTR_FEEDBACKCONDITION = "feedbackCondition"; //$NON-NLS-1$ - private static final String ATTR_BORDER_VISIBLE = "borderVisible"; //$NON-NLS-1$ - private static final String ATTR_GUIDE_TEXT = "guideText"; //$NON-NLS-1$ - private static final String ATTR_SET_STYLE = "setStyle"; //$NON-NLS-1$ - private static final String ATTR_UI_SELECTOR = "uiSelector"; //$NON-NLS-1$ - private static final String ATTR_XPATH = "xpath"; //$NON-NLS-1$ - private static final String ATTR_CHILDXPATH = "childXpath"; //$NON-NLS-1$ - private static final String ATTR_IDS = "ids"; //$NON-NLS-1$ - private static final String ATTR_EXCLUDE_IDS = "exclude-ids"; //$NON-NLS-1$ - private static final String ATTR_PARENT_IDS = "parent-ids"; //$NON-NLS-1$ - private static final String ATTR_EXCLUSIVE_GROUP = "exclusiveGroup"; //$NON-NLS-1$ - private static final String ATTR_MIN = "min"; //$NON-NLS-1$ - private static final String ATTR_MAX = "max"; //$NON-NLS-1$ - private static final String ATTR_NAME = "name"; //$NON-NLS-1$ - private static final String ATTR_TYPE = "type"; //$NON-NLS-1$ - private static final String ATTR_DEFAULT = "default"; //$NON-NLS-1$ - private static final String ATTR_INITVALUE = "initValue"; //$NON-NLS-1$ - private static final String ATTR_SELECTOR = "selector"; //$NON-NLS-1$ - private static final String ATTR_NOT_SUPPORTED = "notsupported"; //$NON-NLS-1$ - private static final String ATTR_VALUE = "value"; //$NON-NLS-1$ - private static final String ATTR_TARGET = "target"; //$NON-NLS-1$ - private static final String ATTR_TARGETVALUE = "targetValue"; //$NON-NLS-1$ - private static final String ATTR_TOOLTIP = "tooltip"; //$NON-NLS-1$ - private static final String ATTR_ERROR = "error"; //$NON-NLS-1$ - private static final String ATTR_EVENTTYPE = "eventType"; //$NON-NLS-1$ - - private static final Namespace XSLT_NAMESPACE = - new Namespace("xsl", "http://www.w3.org/1999/XSL/Transform"); //$NON-NLS-1$ //$NON-NLS-2$ - private static final String ELEM_STYLESHEET = "stylesheet"; //$NON-NLS-1$ - private static final String ATTR_STYLESHEET_VERSION = "version"; //$NON-NLS-1$ - private static final String VALUE_STYLESHEET_VERSION = "1.0"; //$NON-NLS-1$ - - private static final String PART_TYPE_DOC = "doc"; //$NON-NLS-1$ - private static final String PART_TYPE_PAGE = "page"; //$NON-NLS-1$ - private static final String PART_TYPE_WIDGET = "widget"; //$NON-NLS-1$ - - /** - * A {@link DescriptorManager}. - */ - private DescriptorManager manager; - - /** - * A xsl-for-output document. - */ - private Document xslt; - - /** - * Constructor. - * - * @param manager - * a {@link DescriptorManager} - */ - public DescriptorReader_ver_2(DescriptorManager manager) { - this.manager = manager; - this.xslt = DocumentHelper.createDocument(); - xslt.addElement(new QName(ELEM_STYLESHEET, XSLT_NAMESPACE)) - .addAttribute(ATTR_STYLESHEET_VERSION, VALUE_STYLESHEET_VERSION); - } - - /** - * Gets a {@link Document}. - * - * @return a {@link Document} - */ - public Document getXsltForOutput() { - return xslt; - } - - /** - * Parses a descriptor XML. - * - * @param descriptorPath - * a path of descriptor XML - */ - public void parse(URL descriptorPath) { - SAXReader reader = new SAXReader(); - Document doc = null; - - try { - doc = reader.read(descriptorPath); - } catch (DocumentException e) { - e.printStackTrace(); - } - - if (doc != null && doc.getRootElement() != null) { - parseRoot(doc.getRootElement()); - } - } - - /** - * Parses a root element of descriptor XML. - * - * @param root - * a root element - */ - private void parseRoot(Element root) { - if (root == null) { - return; - } - - for (Object childObj : root.elements(ELEM_DOC)) { - parsePart((Element) childObj, new DocumentPartDescriptor()); - } - for (Object childObj : root.elements(ELEM_PAGE)) { - parsePart((Element) childObj, new PagePartDescriptor()); - } - for (Object childObj : root.elements(ELEM_WIDGET)) { - parsePart((Element) childObj, new WidgetPartDescriptor()); - } - for (Object childObj : root.elements(ELEM_TYPES)) { - parseTypes((Element) childObj); - } - for (Object childObj : root.elements(ELEM_EVENTTYPES)) { - parseEventTypes((Element) childObj); - } - } - - /** - * Parses a doc, page or widget element of descriptor XML. - * - * @param elem - * a doc, page or widget element - * @param part - * a {@link PartDescriptor} - */ - private void parsePart(Element elem, PartDescriptor part) { - if (elem == null || part == null) { - return; - } - - String id = elem.attributeValue(ATTR_ID); - String displayName = elem.attributeValue(ATTR_DISPLAYNAME); - String smallIcon = elem.attributeValue(ATTR_SMALLICON); - String icon16 = elem.attributeValue(ATTR_ICON_16); - String description = elem.attributeValue(ATTR_DESCRIPTION); - String paletteVisible = elem.attributeValue(ATTR_PALETTE_VISIBLE); - String helpCategory = elem.attributeValue(ATTR_HELPCATEGORY); - String helpContens = elem.attributeValue(ATTR_HELPCONTENS); - String width = elem.attributeValue(ATTR_FEEDBACKWIDTH); - String height = elem.attributeValue(ATTR_FEEDBACKHEIGHT); - String borderVisible = elem.attributeValue(ATTR_BORDER_VISIBLE); - String feedbackCondition = elem.attributeValue(ATTR_FEEDBACKCONDITION); - String guideText = elem.attributeValue(ATTR_GUIDE_TEXT); - String setStyle = elem.attributeValue(ATTR_SET_STYLE); - String uiSelector = elem.attributeValue(ATTR_UI_SELECTOR); - String xpath = elem.attributeValue(ATTR_XPATH); - String childXpath = elem.attributeValue(ATTR_CHILDXPATH); - - boolean boolpaletteVisible = true; - if (paletteVisible != null) { - boolpaletteVisible = Boolean.parseBoolean(paletteVisible); - } - boolean boolBorderVisible = Boolean.parseBoolean(borderVisible); - boolean boolSetStyle = Boolean.parseBoolean(setStyle); - - part.init(id, displayName, smallIcon, icon16, description, boolpaletteVisible, - helpCategory, helpContens, width, height, boolBorderVisible, feedbackCondition, - guideText, boolSetStyle, uiSelector, xpath, childXpath); - - if (part instanceof WidgetPartDescriptor) { - String categories = elem.attributeValue(ATTR_CATEGORY); - if (categories != null) { - String[] categoriesArray = categories.split(BuilderConstants.COMMA); - ((WidgetPartDescriptor) part).setCategories(Arrays.asList(categoriesArray)); - } - } - - boolean isNoRelation = true; - for (Object contentObj : elem.elements(ELEM_RELATIONS)) { - parseRelations((Element) contentObj, part); - isNoRelation = false; - } - - // This code remains for compatibility. - if (isNoRelation) { - for (Object contentObj : elem.elements(ELEM_CONTENT)) { - parseContent((Element) contentObj, part); - } - } - - for (Object childObj : elem.elements(ELEM_CONDITION)) { - parsePartCondition((Element) childObj, part); - } - - for (Object propertyObj : elem.elements(ELEM_PROPERTY)) { - parseProperty((Element) propertyObj, part); - } - - for (Object contentObj : elem.elements(ELEM_EVENT)) { - parseEvent((Element) contentObj, part); - } - - parseXsltForOutput(elem); - - manager.addPartDescriptor(part); - } - - /** - * Parses a relation element of descriptor XML. - * - * @param elem - * a relation element - * @param property - * a {@link PartDescriptor} - */ - private void parseRelations(Element elem, PartDescriptor part) { - if (elem == null || part == null) { - return; - } - - RelationDescriptor relation = part.getRelation(); - if (relation == null) { - return; - } - - for (Object childObj : elem.elements(ELEM_PARENT)) { - Element childElem = (Element) childObj; - String ids = childElem.attributeValue(ATTR_IDS); - - relation.addParentPartIds(ids); - } - - for (Object childObj : elem.elements(ELEM_NOPARENT)) { - Element childElem = (Element) childObj; - String ids = childElem.attributeValue(ATTR_IDS); - - relation.addNoParentPartIds(ids); - } - - for (Object childObj : elem.elements(ELEM_CONTENT)) { - Element childElem = (Element) childObj; - parseContent2(childElem, relation); - } - - for (Object childObj : elem.elements(ELEM_NOCONTENT)) { - Element childElem = (Element) childObj; - String ids = childElem.attributeValue(ATTR_IDS); - - relation.addNoContentPartIds(ids); - } - } - - /** - * Parses a content element of descriptor XML. This method remains for compatibility. - * - * @param elem - * a content element - * @param part - * a {@link PartDescriptor} - */ - private void parseContent(Element elem, PartDescriptor part) { - if (elem == null || part == null) { - return; - } - - RelationDescriptor relation = part.getRelation(); - if (relation == null) { - return; - } - - parseContent2(elem, relation); - - String excludeIds = elem.attributeValue(ATTR_EXCLUDE_IDS); - String parentIds = elem.attributeValue(ATTR_PARENT_IDS); - - if (excludeIds != null) { - relation.addNoContentPartIds(excludeIds); - } - if (parentIds != null) { - relation.addParentPartIds(parentIds); - } - } - - /** - * Parses a content element of descriptor XML. - * - * @param elem - * a content element - * @param relation - * a {@link RelationDescriptor} - */ - private void parseContent2(Element elem, RelationDescriptor relation) { - if (elem == null || relation == null) { - return; - } - - String ids = elem.attributeValue(ATTR_IDS); - String type = elem.attributeValue(ATTR_TYPE); - String min = elem.attributeValue(ATTR_MIN); - String max = elem.attributeValue(ATTR_MAX); - String exclusiveGroup = elem.attributeValue(ATTR_EXCLUSIVE_GROUP); - ContentDescriptor.PartType partType = ContentDescriptor.PartType.ANY_PART; - - if (type != null) { - if (type.equals(PART_TYPE_DOC)) { - partType = ContentDescriptor.PartType.DOCUMENT_PART; - } else if (type.equals(PART_TYPE_PAGE)) { - partType = ContentDescriptor.PartType.PAGE_PART; - } else if (type.equals(PART_TYPE_WIDGET)) { - partType = ContentDescriptor.PartType.WIDGET_PART; - } - } - - ContentDescriptor content = new ContentDescriptor(); - content.setPartType(partType); - if (ids != null) { - content.setPartIds(ids); - } - if (min != null) { - content.setMin(Integer.valueOf(min).intValue()); - } - if (max != null) { - content.setMax(Integer.valueOf(max).intValue()); - } - if (exclusiveGroup != null) { - content.setExclusiveGroup(exclusiveGroup); - } - relation.addContent(content); - } - - /** - * Parses a condition element of descriptor XML. - * - * @param elem - * a property element - * @param part - * a {@link PartDescriptor} - */ - private void parsePartCondition(Element elem, PartDescriptor part) { - if (elem == null || part == null) { - return; - } - - String name = elem.attributeValue(ATTR_NAME); - String value = elem.attributeValue(ATTR_VALUE); - String target = elem.attributeValue(ATTR_TARGET); - String targetValue = elem.attributeValue(ATTR_TARGETVALUE); - - PartConditionDescriptor condition = - new PartConditionDescriptor(name, value, target, targetValue); - part.addConditionDescriptor(condition); - } - - /** - * Parses a property element of descriptor XML. - * - * @param elem - * a property element - * @param part - * a {@link PartDescriptor} - */ - private void parseProperty(Element elem, PartDescriptor part) { - if (elem == null || part == null) { - return; - } - - String notsupported = elem.attributeValue(ATTR_NOT_SUPPORTED); - if (notsupported != null && notsupported.equals(BuilderConstants.TRUE)) { - return; - } - - String name = elem.attributeValue(ATTR_NAME); - String type = elem.attributeValue(ATTR_TYPE); - String displayName = elem.attributeValue(ATTR_DISPLAYNAME); - String tooltip = elem.attributeValue(ATTR_TOOLTIP); - String defaultValue = elem.attributeValue(ATTR_DEFAULT); - String initValue = elem.attributeValue(ATTR_INITVALUE); - String category = elem.attributeValue(ATTR_CATEGORY); - String xpath = elem.attributeValue(ATTR_XPATH); - - if (tooltip == null) { - tooltip = displayName; - } else { - tooltip = - displayName + BuilderConstants.SPACE + BuilderConstants.DASH - + BuilderConstants.SPACE + tooltip; - } - - PropertyDescriptor property = - new PropertyDescriptor(name, type, displayName, tooltip, defaultValue, initValue, - category, xpath, manager); - part.addPropertyDescriptor(property); - - if (TypeDescriptor.ID_OF_GROUP.equals(type) || TypeDescriptor.ID_OF_GROUP_TEXT.equals(type) - || TypeDescriptor.ID_OF_GROUP_POSITION.equals(type)) { - for (Object propertyObj : elem.elements(ELEM_PROPERTY)) { - parseChildProperty((Element) propertyObj, property); - } - } - - for (Object childObj : elem.elements(ELEM_CONDITION)) { - parseCondition((Element) childObj, property); - } - } - - /** - * Parses a child property element of descriptor XML. - * - * @param elem - * a child property - * @param property - * a {@link PropertyDescriptor} - */ - private void parseChildProperty(Element elem, PropertyDescriptor property) { - if (elem == null || property == null) { - return; - } - - String name = elem.attributeValue(ATTR_NAME); - String type = elem.attributeValue(ATTR_TYPE); - String displayName = elem.attributeValue(ATTR_DISPLAYNAME); - String tooltip = elem.attributeValue(ATTR_TOOLTIP); - String defaultValue = elem.attributeValue(ATTR_DEFAULT); - String initValue = elem.attributeValue(ATTR_INITVALUE); - String category = elem.attributeValue(ATTR_CATEGORY); - String xpath = elem.attributeValue(ATTR_XPATH); - String selector = elem.attributeValue(ATTR_SELECTOR); - - PropertyDescriptor childProperty = - new ChildPropertyDescriptor(name, type, displayName, tooltip, defaultValue, - initValue, category, xpath, selector, manager); - property.addChildPropertyDescriptor(childProperty); - - for (Object childObj : elem.elements(ELEM_CONDITION)) { - parseCondition((Element) childObj, childProperty); - } - } - - /** - * Parses a condition element of descriptor XML. - * - * @param elem - * a condition element - * @param property - * a {@link PropertyDescriptor} - */ - private void parseCondition(Element elem, PropertyDescriptor property) { - if (elem == null || property == null) { - return; - } - - String name = elem.attributeValue(ATTR_NAME); - String value = elem.attributeValue(ATTR_VALUE); - String target = elem.attributeValue(ATTR_TARGET); - String targetValue = elem.attributeValue(ATTR_TARGETVALUE); - String error = elem.attributeValue(ATTR_ERROR); - - PropertyConditionDescriptor condition = - new PropertyConditionDescriptor(name, value, target, targetValue, error); - property.addConditionDescriptor(condition); - } - - /** - * Parses an event element of descriptor XML. - * - * @param elem - * an event element - * @param part - * a {@link PartDescriptor} - */ - private void parseEvent(Element elem, PartDescriptor part) { - if (elem == null || part == null) { - return; - } - - String name = elem.attributeValue(ATTR_NAME); - String displayName = elem.attributeValue(ATTR_DISPLAYNAME); - String eventType = elem.attributeValue(ATTR_EVENTTYPE); - EventDescriptor event = new EventDescriptor(name, displayName, eventType, manager); - part.addEventDescriptor(event); - } - - /** - * Parses a types element of descriptor XML. - * - * @param elem - * a types element - */ - private void parseTypes(Element elem) { - if (elem == null) { - return; - } - - for (Object childObj : elem.elements(ELEM_TYPE)) { - parseType((Element) childObj); - } - } - - /** - * Parses a type element of descriptor XML. - * - * @param elem - * a type element - */ - private void parseType(Element elem) { - if (elem == null) { - return; - } - - String id = elem.attributeValue(ATTR_ID); - - TypeDescriptor type = manager.getTypeDescriptor(id); - - if (type == null) { - type = new TypeDescriptor(id); - manager.addTypeDescriptor(type); - } - - for (Object childObj : elem.elements(ELEM_CONSTANT)) { - type.addAvailableConstant(parseConstant((Element) childObj)); - } - - } - - /** - * Parses a constant element of descriptor XML. - * - * @param elem - * a constant element - */ - private ConstantDescriptor parseConstant(Element elem) { - if (elem == null) { - return null; - } - - String value = elem.attributeValue(ATTR_VALUE); - String displayName = elem.attributeValue(ATTR_DISPLAYNAME); - if (displayName == null) { - displayName = value; - } - - return new ConstantDescriptor(value, displayName); - } - - /** - * Parses an eventTypes element of descriptor XML. - * - * @param elem - * an eventTypes element - */ - private void parseEventTypes(Element elem) { - if (elem == null) { - return; - } - - for (Object childObj : elem.elements(ELEM_EVENTTYPE)) { - parseEventType((Element) childObj); - } - } - - /** - * Parses an eventType element of descriptor XML. - * - * @param elem - * an eventType element - */ - private void parseEventType(Element elem) { - if (elem == null) { - return; - } - - String id = elem.attributeValue(ATTR_ID); - if (manager.getEventTypeDescriptor(id) != null) { - return; - } - - EventTypeDescriptor eventType = new EventTypeDescriptor(id); - - for (Object childObj : elem.elements(ELEM_DEFAULTCODE)) { - eventType.setDefaultCode(((Element) childObj).getText()); - } - - for (Object childObj : elem.elements(ELEM_PARAM)) { - eventType.addEventParameter(parseParameter((Element) childObj)); - } - - manager.addEventTypeDescriptor(eventType); - } - - /** - * Parses a param element of descriptor XML. - * - * @param elem - * a param element - */ - private EventParamDescriptor parseParameter(Element elem) { - if (elem == null) { - return null; - } - - String name = elem.attributeValue(ATTR_NAME); - String type = elem.attributeValue(ATTR_TYPE); - - return new EventParamDescriptor(name, type); - } - - /** - * Parses a xsl-for-output element of descriptor XML. - * - * @param elem - * a xsl-for-output element - */ - private void parseXsltForOutput(Element elem) { - if (elem == null) { - return; - } - - Element code = elem.element(ELEM_XSL_FOR_OUTPUT); - if (code != null) { - Element child = null; - for (Object nodeObj : code.elements()) { - child = (Element) nodeObj; - xslt.getRootElement().add(child.createCopy()); - } - } - } - -} diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/FileReader.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/FileReader.java index 31669bf..18b63f4 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/FileReader.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/FileReader.java @@ -23,7 +23,7 @@ package org.tizen.webuibuilder.model.io; -import org.dom4j.Element; +import org.w3c.dom.Element; public class FileReader { @@ -40,24 +40,28 @@ public class FileReader { private String desc = null; public FileReader(Element rootElem) { - if (!rootElem.getName().equals(ELEMENT_TIZEN_FILE)) { + if (!rootElem.getNodeName().equals(ELEMENT_TIZEN_FILE)) { validate = false; return; } - for (Object childObj : rootElem.elements(ELEMENT_FILE_INFO)) { - Element elem = (Element) childObj; - for (Object childObj2 : elem.elements(ELEMENT_TYPE)) { - Element elem2 = (Element) childObj2; - type = new String(elem2.getText()); + int cnt = rootElem.getElementsByTagName(ELEMENT_FILE_INFO).getLength(); + for (int i = 0; i < cnt; i++) { + Element elem = (Element)rootElem.getElementsByTagName(ELEMENT_FILE_INFO).item(i); + int cnt2 = rootElem.getElementsByTagName(ELEMENT_TYPE).getLength(); + for (int j = 0; j < cnt2; j++) { + Element elem2 = (Element)rootElem.getElementsByTagName(ELEMENT_TYPE).item(j); + type = new String(elem2.getTextContent()); } - for (Object childObj2 : elem.elements(ELEMENT_VERSION)) { - Element elem2 = (Element) childObj2; - version = new String(elem2.getText()); + cnt2 = rootElem.getElementsByTagName(ELEMENT_VERSION).getLength(); + for (int j = 0; j < cnt2; j++) { + Element elem2 = (Element)rootElem.getElementsByTagName(ELEMENT_VERSION).item(j); + version = new String(elem2.getTextContent()); } - for (Object childObj2 : elem.elements(ELEMENT_DESC)) { - Element elem2 = (Element) childObj2; - desc = new String(elem2.getText()); + cnt2 = rootElem.getElementsByTagName(ELEMENT_DESC).getLength(); + for (int j = 0; j < cnt2; j++) { + Element elem2 = (Element)rootElem.getElementsByTagName(ELEMENT_DESC).item(j); + desc = new String(elem2.getTextContent()); } } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/HTMLWriter2.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/HTMLWriter2.java deleted file mode 100644 index 67714a4..0000000 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/HTMLWriter2.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * UI Builder - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Contributors: - * - S-Core Co., Ltd - * - */ - - -package org.tizen.webuibuilder.model.io; - -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.io.Writer; - -import javax.xml.transform.Result; - -import org.dom4j.ProcessingInstruction; -import org.dom4j.io.HTMLWriter; -import org.dom4j.io.OutputFormat; -import org.xml.sax.SAXException; - - -public class HTMLWriter2 extends HTMLWriter { - - private boolean toggleEscape = true; // temporary processing... - - public HTMLWriter2() throws UnsupportedEncodingException { - } - - public HTMLWriter2(Writer writer, OutputFormat format) throws UnsupportedEncodingException { - super(writer, format); - } - - private boolean _processingInstruction(String target) { - if (target.equals(Result.PI_DISABLE_OUTPUT_ESCAPING)) { - if (toggleEscape) { - this.setEscapeText(false); - } else { - this.setEscapeText(true); - } - toggleEscape = !toggleEscape; - return true; - } else if (target.equals(Result.PI_ENABLE_OUTPUT_ESCAPING)) { - this.setEscapeText(true); - toggleEscape = true; - return true; - } - - return false; - } - - @Override - public void processingInstruction(String target, String data) throws SAXException { - if (_processingInstruction(target)) { - return; - } - - super.processingInstruction(target, data); - } - - @Override - protected void writeProcessingInstruction(ProcessingInstruction pi) throws IOException { - if (_processingInstruction(pi.getName())) { - return; - } - - super.writeProcessingInstruction(pi); - } - -} diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageReader.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageReader.java index 5bb8ca7..d20e163 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageReader.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageReader.java @@ -24,12 +24,17 @@ package org.tizen.webuibuilder.model.io; import java.io.File; +import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; -import org.dom4j.Document; -import org.dom4j.DocumentException; -import org.dom4j.io.SAXReader; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xml.sax.SAXException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.tizen.webuibuilder.BuilderConstants; @@ -71,12 +76,18 @@ public class PageReader { * @return {@link PageFileData} */ public static PageFileData read(URL url, PartFactory partFactory) { - SAXReader reader = new SAXReader(); + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = null; Document doc = null; try { - doc = reader.read(url); - } catch (DocumentException e) { + builder = factory.newDocumentBuilder(); + doc = builder.parse(url.openStream()); + } catch (ParserConfigurationException e) { + e.printStackTrace(); + } catch (SAXException e) { + e.printStackTrace(); + } catch (IOException e) { Logger logger = LoggerFactory.getLogger(PartFactory.class); logger.error(BuilderConstants.LOG_READ_PAGE_ERROR); if (doc == null) { diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageReader_ver_1.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageReader_ver_1.java index fb67476..70f3bfa 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageReader_ver_1.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageReader_ver_1.java @@ -20,12 +20,8 @@ * */ - package org.tizen.webuibuilder.model.io; -import org.dom4j.Attribute; -import org.dom4j.Document; -import org.dom4j.Element; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.tizen.webuibuilder.BuilderConstants; @@ -35,120 +31,146 @@ import org.tizen.webuibuilder.model.Part; import org.tizen.webuibuilder.model.PartFactory; import org.tizen.webuibuilder.model.WidgetPart; import org.tizen.webuibuilder.model.filedata.PageFileData; - +import org.w3c.dom.Attr; +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; public class PageReader_ver_1 { - /** - * Parses a page document. - * - * @param doc - * a page document - * @param partFactory - * a {@link PartFactory} - * @return {@link PageFileData} - */ - public static PageFileData parsePage(Document doc, PartFactory partFactory) { - if (doc == null) { - return null; - } - - Element elem = doc.getRootElement(); - if (!elem.getName().equals("document")) { - return null; - } - - PageFileData pageFileData = new PageFileData(); - - for (Object childObj : elem.elements("documentInfo")) { - parsePageInfo(pageFileData, (Element) childObj); - } - for (Object childObj : elem.elements("documentData")) { - elem = (Element) childObj; - for (Object childElem : elem.elements()) { - Part part = parseElement(pageFileData, (Element) childElem, partFactory); - if (part instanceof DocumentPart) { - pageFileData.addRootPart(BuilderConstants.EMPTY, part); - } - } - } - - return pageFileData; - } - - /** - * Parses a document info element. - * - * @param pageFileData - * a {@link PageFileData} - * @param elem - * a document info element - */ - private static void parsePageInfo(PageFileData pageFileData, Element elem) { - for (Object childObj : elem.elements()) { - Element childElem = (Element) childObj; - if (childElem.getName().equals("version")) { - pageFileData.setVersion(childElem.getText()); - } else if (childElem.getName().equals("version")) { - pageFileData.setVersion(childElem.getText()); - } - } - } - - /** - * Parses an element. - * - * @param pageFileData - * a {@link PageFileData} - * @param elem - * an element - * @param partFactory - * a {@link PartFactory} - * @return {@link Part} - */ - private static Part parseElement(PageFileData pageFileData, Element elem, - PartFactory partFactory) { - Part part = partFactory.createPart(elem.getName()); - - if (part == null) { - Logger logger = LoggerFactory.getLogger(PartFactory.class); - logger.error(BuilderConstants.LOG_DESC_CANNOT_BE_FOUND_ERROR); - } else { - if (part instanceof PagePart) { - pageFileData.setName(0, elem.attribute(BuilderConstants.PROPERTY_ID).getValue()); - } - - // Sets events and properties. - Attribute attr = null; - for (Object attrObj : elem.attributes()) { - attr = (Attribute) attrObj; - if (BuilderConstants.ATTRIBUTE_EVENT_PREFIX.equals((attr.getName()) - .substring(0, BuilderConstants.ATTRIBUTE_EVENT_PREFIX.length()))) { - part.setEventValue(attr.getName(), attr.getValue()); - } else { - part.setPropertyValueWhenPageRead(attr.getName(), attr.getValue()); + /** + * Parses a page document. + * + * @param doc + * a page document + * @param partFactory + * a {@link PartFactory} + * @return {@link PageFileData} + */ + public static PageFileData parsePage(Document doc, PartFactory partFactory) { + if (doc == null) { + return null; + } + + Element elem = doc.getDocumentElement(); + if (!elem.getNodeName().equals("document")) { + return null; + } + + PageFileData pageFileData = new PageFileData(); + + NodeList elemList = elem.getChildNodes(); + for (int i = 0; i < elemList.getLength(); i++) { + Node childNode = elemList.item(i); + if (childNode instanceof Element) { + if (childNode.getNodeName().equals("documentInfo")) { + parsePageInfo(pageFileData, (Element) childNode); + } else if (childNode.getNodeName().equals("documentData")) { + parsePageData(pageFileData, (Element) childNode, + partFactory); + } + } + } + + return pageFileData; + } + + /** + * Parses a document info element. + * + * @param pageFileData + * a {@link PageFileData} + * @param elem + * a document info element + */ + private static void parsePageInfo(PageFileData pageFileData, Element elem) { + NodeList elemList = elem.getChildNodes(); + for (int i = 0; i < elemList.getLength(); i++) { + Node childNode = elemList.item(i); + if (childNode instanceof Element) { + if (childNode.getNodeName().equals("version")) { + pageFileData.setVersion(((Element) childNode) + .getTextContent()); + } + } + } + } + + private static void parsePageData(PageFileData pageFileData, Element elem, + PartFactory partFactory) { + NodeList elemList = elem.getChildNodes(); + for (int i = 0; i < elemList.getLength(); i++) { + Node childNode = elemList.item(i); + if(childNode instanceof Element){ + Part part = parseElement(pageFileData, (Element) childNode, + partFactory); + if (part instanceof DocumentPart) { + pageFileData.addRootPart(BuilderConstants.EMPTY, part); + } + } + } + } + + /** + * Parses an element. + * + * @param pageFileData + * a {@link PageFileData} + * @param elem + * an element + * @param partFactory + * a {@link PartFactory} + * @return {@link Part} + */ + private static Part parseElement(PageFileData pageFileData, Element elem, + PartFactory partFactory) { + Part part = partFactory.createPart(elem.getNodeName()); + + if (part == null) { + Logger logger = LoggerFactory.getLogger(PartFactory.class); + logger.error(BuilderConstants.LOG_DESC_CANNOT_BE_FOUND_ERROR); + } else { + if (part instanceof PagePart) { + pageFileData.setName(0, + elem.getAttribute(BuilderConstants.PROPERTY_ID)); + } + + // Sets events and properties. + NamedNodeMap attrList = elem.getAttributes(); + for (int i = 0; i < attrList.getLength(); i++) { + Attr attr = (Attr) attrList.item(i); + if (BuilderConstants.ATTRIBUTE_EVENT_PREFIX.equals((attr + .getName()).substring(0, + BuilderConstants.ATTRIBUTE_EVENT_PREFIX.length()))) { + part.setEventValue(attr.getName(), attr.getValue()); + } else { + part.setPropertyValueWhenPageRead(attr.getName(), + attr.getValue()); + } + } + + if (part instanceof WidgetPart) { + String text = elem.getTextContent(); + + if (!text.isEmpty()) { + ((WidgetPart) part).setHtmlString(text); + } + } + + // Adds children. + NodeList elemList = elem.getChildNodes(); + for (int i = 0; i < elemList.getLength(); i++) { + Element child = (Element) elemList.item(i); + if(child instanceof Element){ + Part childpart = parseElement(pageFileData, child, partFactory); + part.addChildWhenPageRead(childpart); } - } + } + } - if (part instanceof WidgetPart) { - String text = elem.getText(); - - if (!text.isEmpty()) { - ((WidgetPart) part).setHtmlString(text); - } - } - - // Adds children. - Element child = null; - Part childpart = null; - for (Object childObj : elem.elements()) { - child = (Element) childObj; - childpart = parseElement(pageFileData, child, partFactory); - part.addChildWhenPageRead(childpart); - } - } - - return part; - } + return part; + } } \ No newline at end of file diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageReader_ver_2.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageReader_ver_2.java index cfa7fbb..c688de9 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageReader_ver_2.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageReader_ver_2.java @@ -27,9 +27,12 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import org.dom4j.Attribute; -import org.dom4j.Document; -import org.dom4j.Element; +import org.w3c.dom.Attr; +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 org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.tizen.webuibuilder.BuilderConstants; @@ -59,7 +62,7 @@ public class PageReader_ver_2 { return null; } - Element root = doc.getRootElement(); + Element root = doc.getDocumentElement(); FileReader fileReader = new FileReader(root); if (!fileReader.isValidate()) { @@ -74,8 +77,9 @@ public class PageReader_ver_2 { PageFileData pageFileData = new PageFileData(); - for (Object childObj : root.elements("document")) { - parsePart(pageFileData, (Element) childObj, partFactory); + NodeList elemList = root.getElementsByTagName("document"); + for (int i = 0; i < elemList.getLength(); i++) { + parsePart(pageFileData, (Element) elemList.item(i), partFactory); } return pageFileData; @@ -92,11 +96,16 @@ public class PageReader_ver_2 { * a {@link PartFactory} */ private static void parsePart(PageFileData pageFileData, Element elem, PartFactory partFactory) { - for (Object childObj : elem.elements("documentInfo")) { - parsePageInfo(pageFileData, (Element) childObj); - } - for (Object childObj : elem.elements("documentData")) { - parsePageData(pageFileData, (Element) childObj, partFactory); + NodeList elemList = elem.getChildNodes(); + for (int i = 0; i < elemList.getLength(); i++) { + Node childNode = elemList.item(i); + if(childNode instanceof Element){ + if(childNode.getNodeName().equals("documentInfo")){ + parsePageInfo(pageFileData, (Element) childNode); + } else if(childNode.getNodeName().equals("documentData")){ + parsePageData(pageFileData, (Element) childNode, partFactory); + } + } } } @@ -109,11 +118,14 @@ public class PageReader_ver_2 { * a document info element */ private static void parsePageInfo(PageFileData pageFileData, Element elem) { - for (Object childObj : elem.elements()) { - Element childElem = (Element) childObj; - if (childElem.getName().equals("version")) { - pageFileData.setVersion(childElem.getText()); - } + NodeList elemList = elem.getChildNodes(); + for (int i = 0; i < elemList.getLength(); i++) { + Node childNode = elemList.item(i); + if(childNode instanceof Element){ + if(childNode.getNodeName().equals("version")){ + pageFileData.setVersion(((Element)childNode).getTextContent()); + } + } } } @@ -131,44 +143,51 @@ public class PageReader_ver_2 { PartFactory partFactory) { List selectors = null; - for (Object childObj : elem.elements("tizen.css")) { - Element elem2 = (Element) childObj; - selectors = parseStyle(elem2); + NodeList elemList = elem.getElementsByTagName("tizen.css"); + for (int i = 0; i < elemList.getLength(); i++) { + selectors = parseStyle((Element) elemList.item(i)); } - { - boolean existNscreen = false; - for (Iterator i_nscreen = elem.elementIterator("tizen.nscreen"); i_nscreen - .hasNext();) { - existNscreen = true; - Element nscreen = i_nscreen.next(); - for (Iterator i_screen = nscreen.elementIterator("screen"); i_screen - .hasNext();) { - Element screen = i_screen.next(); - NScreenModel model = new NScreenModel(); - for (Iterator i_child = screen.elementIterator(); i_child.hasNext();) { - Element child = i_child.next(); - String tagName = child.getName(); - if ("title".equals(tagName)) { - model.setTitle(child.getText()); - } else if ("width".equals(tagName)) { - model.setWidth(Integer.parseInt(child.getText())); - } else if ("height".equals(tagName)) { - model.setHeight(Integer.parseInt(child.getText())); - } else if ("cssFileName".equals(tagName)) { - model.setFileName(child.getText()); - } + boolean existNscreen = false; + elemList = elem.getElementsByTagName("tizen.nscreen"); + for (int i = 0; i < elemList.getLength(); i++) { + Element nscreen = (Element) elemList.item(i); + NodeList elemList2 = nscreen.getElementsByTagName("nscreen"); + for (int j = 0; j < elemList2.getLength(); j++) { + Element screen = (Element) elemList2.item(j); + + NScreenModel model = new NScreenModel(); + + NodeList elemList3 = screen.getChildNodes(); + for (int k = 0; k < elemList3.getLength(); k++) { + Node childNode = (Element) elemList3.item(k); + if(childNode instanceof Element){ + Element child = (Element)childNode; + String tagName = child.getNodeName(); + if ("title".equals(tagName)) { + model.setTitle(child.getTextContent()); + } else if ("width".equals(tagName)) { + model.setWidth(Integer.parseInt(child.getTextContent())); + } else if ("height".equals(tagName)) { + model.setHeight(Integer.parseInt(child.getTextContent())); + } else if ("cssFileName".equals(tagName)) { + model.setFileName(child.getTextContent()); + } } - pageFileData.getNscreenModelList().add(model); } + pageFileData.getNscreenModelList().add(model); } - if (!existNscreen) { - pageFileData.getNscreenModelList().add(new NScreenModel()); - } + + existNscreen = true; + } + + if (!existNscreen) { + pageFileData.getNscreenModelList().add(new NScreenModel()); } - for (Object childObj : elem.elements("tizen.doc")) { - Element elem2 = (Element) childObj; + elemList = elem.getElementsByTagName("tizen.doc"); + for (int i = 0; i < elemList.getLength(); i++) { + Element elem2 = (Element) elemList.item(i); Part part = parseElement(pageFileData, elem2, partFactory, selectors); if (part instanceof DocumentPart) { pageFileData.addRootPart("", part); @@ -187,20 +206,22 @@ public class PageReader_ver_2 { List selectors = new ArrayList(); // Sets selectors. - for (Object childObj : elem.elements("tizen.selector")) { - Element element = (Element) childObj; + NodeList elemList = elem.getElementsByTagName("tizen.selector"); + for (int i = 0; i < elemList.getLength(); i++) { + Element element = (Element) elemList.item(i); - String selectorName = element.attributeValue(BuilderConstants.ATTRIBUTE_NAME); - String partId = element.attributeValue(BuilderConstants.ATTRIBUTE_PARTID); + String selectorName = element.getAttribute(BuilderConstants.ATTRIBUTE_NAME); + String partId = element.getAttribute(BuilderConstants.ATTRIBUTE_PARTID); CssSelector selector = new CssSelector(selectorName, "", partId); selectors.add(selector); // Sets styles. - for (Object childObj2 : element.elements("tizen.style")) { - Element element2 = (Element) childObj2; + NodeList elemList2 = elem.getElementsByTagName("tizen.style"); + for (int j = 0; j < elemList2.getLength(); j++) { + Element element2 = (Element) elemList2.item(i); - String name = element2.attributeValue(BuilderConstants.ATTRIBUTE_NAME); - String value = element2.attributeValue(BuilderConstants.ATTRIBUTE_VALUE); + String name = element2.getAttribute(BuilderConstants.ATTRIBUTE_NAME); + String value = element2.getAttribute(BuilderConstants.ATTRIBUTE_VALUE); selector.setPropertyValue(name, value); } @@ -224,20 +245,20 @@ public class PageReader_ver_2 { */ private static Part parseElement(PageFileData pageFileData, Element elem, PartFactory partFactory, List selectors) { - Part part = partFactory.createPart(elem.getName()); + Part part = partFactory.createPart(elem.getNodeName()); if (part == null) { Logger logger = LoggerFactory.getLogger(PartFactory.class); logger.error(BuilderConstants.LOG_DESC_CANNOT_BE_FOUND_ERROR); } else { if (part instanceof PagePart) { - pageFileData.setName(0, elem.attribute(BuilderConstants.PROPERTY_ID).getValue()); + pageFileData.setName(0, elem.getAttribute(BuilderConstants.PROPERTY_ID)); } // Sets events and properties. - Attribute attr = null; - for (Object attrObj : elem.attributes()) { - attr = (Attribute) attrObj; + NamedNodeMap attrList = elem.getAttributes(); + for (int i = 0; i < attrList.getLength(); i++) { + Attr attr = (Attr) attrList.item(i); // if (BuilderConstants.ATTRIBUTE_EVENT_PREFIX.equals((attr // .getName()).substring(0, // BuilderConstants.ATTRIBUTE_EVENT_PREFIX.length()))) { @@ -248,7 +269,7 @@ public class PageReader_ver_2 { } if (part instanceof WidgetPart) { - String text = elem.getText(); + String text = elem.getTextContent(); if (!text.isEmpty()) { ((WidgetPart) part).setHtmlString(text); @@ -265,29 +286,30 @@ public class PageReader_ver_2 { } // Adds children. - Element child = null; - Part childpart = null; - for (Object childObj : elem.elements()) { - child = (Element) childObj; - if (child.getName().equals("event")) { - Attribute eventAttr = null; - for (Object attrObj : child.attributes()) { - eventAttr = (Attribute) attrObj; - part.setEventValue(eventAttr.getName(), eventAttr.getValue()); - } - } else if (child.getName().equals("gotoPage")) { - Attribute eventAttr = null; - List strList = new ArrayList(); - - for (Object attrObj : child.attributes()) { - eventAttr = (Attribute) attrObj; - strList.add(eventAttr.getValue()); - } - part.setGotoPageEventValue(strList.get(0), strList.get(1), strList.get(2)); - - } else { - childpart = parseElement(pageFileData, child, partFactory, selectors); - part.addChildWhenPageRead(childpart); + NodeList elemList = elem.getChildNodes(); + for (int i = 0; i < elemList.getLength(); i++) { + Element child = (Element) elemList.item(i); + if(child instanceof Element){ + if (child.getNodeName().equals("event")) { + attrList = child.getAttributes(); + for (int j = 0; j < attrList.getLength(); j++) { + Attr eventAttr = (Attr) attrList.item(j); + part.setEventValue(eventAttr.getName(), eventAttr.getValue()); + } + } else if (child.getNodeName().equals("gotoPage")) { + List strList = new ArrayList(); + + attrList = child.getAttributes(); + for (int j = 0; j < attrList.getLength(); j++) { + Attr eventAttr = (Attr) attrList.item(j); + strList.add(eventAttr.getValue()); + } + part.setGotoPageEventValue(strList.get(0), strList.get(1), strList.get(2)); + + } else { + Part childpart = parseElement(pageFileData, child, partFactory, selectors); + part.addChildWhenPageRead(childpart); + } } } } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageWriter.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageWriter.java index 2c0bbc1..c22a93c 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageWriter.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageWriter.java @@ -20,7 +20,6 @@ * */ - package org.tizen.webuibuilder.model.io; import java.io.FileWriter; @@ -28,95 +27,139 @@ import java.io.IOException; import java.io.StringWriter; import java.io.Writer; -import org.dom4j.Document; -import org.dom4j.DocumentHelper; -import org.dom4j.Element; -import org.dom4j.io.OutputFormat; -import org.dom4j.io.XMLWriter; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +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 org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.tizen.webuibuilder.BuilderConstants; import org.tizen.webuibuilder.model.Part; import org.tizen.webuibuilder.model.filedata.PageFileData; - public class PageWriter { - private static final int INDENT_SIZE = 4; - - /** - * Writes a page. - * - * @param pageFileData - * a {@link PageFileData} - * @param writer - * a writer - * @throws IOException - */ - public static void writeTo(PageFileData pageFileData, Writer writer) throws IOException { - Element elem = writeElement(pageFileData); - - Document doc = DocumentHelper.createDocument(); - doc.add(elem); - - OutputFormat format = OutputFormat.createPrettyPrint(); - format.setIndentSize(INDENT_SIZE); - - XMLWriter xmlwriter = new XMLWriter(writer, format); - xmlwriter.write(doc); - xmlwriter.close(); - } - - /** - * Writes a page string. - * - * @param pageFileData - * a {@link PageFileData} - * @return page string - */ - public static String writeToString(PageFileData pageFileData) { - StringWriter writer = new StringWriter(); - try { - writeTo(pageFileData, writer); - } catch (IOException e) { - e.printStackTrace(); - } - - return writer.getBuffer().toString(); - } - - /** - * Writes a page file. - * - * @param pageFileData - * a {@link PageFileData} - * @param filePath - * a page file path - * @throws IOException - */ - public static void writeToFile(PageFileData pageFileData, String filePath) throws IOException { - writeTo(pageFileData, new FileWriter(filePath)); - } - - /** - * Writes a page element. - * - * @param pageFileData - * a {@link PageFileData} - * @return page element - */ - public static Element writeElement(PageFileData pageFileData) { - return PageWriter_ver_2.writeElement(pageFileData); - } - - /** - * Writes a page element. - * - * @param part - * a {@link part} - * @param includePid - * whether to write part-id - * @return page element - */ - public static Element writePart(Part part, boolean includePid) { - return PageWriter_ver_2.writePart(part, includePid); - } + private static final int INDENT_SIZE = 4; + + /** + * Writes a page. + * + * @param pageFileData + * a {@link PageFileData} + * @param writer + * a writer + * @throws IOException + */ + public static void writeTo(PageFileData pageFileData, Writer writer) + throws IOException { + Document doc = writeElement(pageFileData); + + DOMSource source = new DOMSource(doc); + StreamResult result = new StreamResult(writer); + + TransformerFactory factory = TransformerFactory.newInstance(); + Transformer transformer = null; + try { + transformer = factory.newTransformer(); + transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, + BuilderConstants.YES); + transformer.setOutputProperty(OutputKeys.ENCODING, + BuilderConstants.ENCODING); + transformer.setOutputProperty(OutputKeys.METHOD, + BuilderConstants.XML); + } catch (TransformerConfigurationException e) { + e.printStackTrace(); + } + + try { + transformer.transform(source, result); + } catch (TransformerException e) { + e.printStackTrace(); + } + + // OutputFormat format = OutputFormat.createPrettyPrint(); + // format.setIndentSize(INDENT_SIZE); + // + // XMLWriter xmlwriter = new XMLWriter(writer, format); + // xmlwriter.write(doc); + // xmlwriter.close(); + } + + /** + * Writes a page string. + * + * @param pageFileData + * a {@link PageFileData} + * @return page string + */ + public static String writeToString(PageFileData pageFileData) { + StringWriter writer = new StringWriter(); + try { + writeTo(pageFileData, writer); + } catch (IOException e) { + e.printStackTrace(); + } + + return writer.getBuffer().toString(); + } + + /** + * Writes a page file. + * + * @param pageFileData + * a {@link PageFileData} + * @param filePath + * a page file path + * @throws IOException + */ + public static void writeToFile(PageFileData pageFileData, String filePath) + throws IOException { + writeTo(pageFileData, new FileWriter(filePath)); + } + + /** + * Writes a page element. + * + * @param pageFileData + * a {@link PageFileData} + * @return page element + */ + public static Document writeElement(PageFileData pageFileData) { + return PageWriter_ver_2.writeElement(pageFileData); + } + + /** + * Writes a page element. + * + * @param part + * a {@link part} + * @param includePid + * whether to write part-id + * @return page element + */ + public static Document writePart(Part part, boolean includePid) { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder docBuilder = null; + try { + docBuilder = factory.newDocumentBuilder(); + } catch (ParserConfigurationException e) { + e.printStackTrace(); + return null; + } + + Document doc = docBuilder.newDocument(); + + Element elem = PageWriter_ver_2.writePart(doc, part, includePid); + doc.appendChild(elem); + + return doc; + } } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageWriter_ver_1.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageWriter_ver_1.java index fc329a7..c7f6ade 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageWriter_ver_1.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageWriter_ver_1.java @@ -20,108 +20,129 @@ * */ - package org.tizen.webuibuilder.model.io; -import org.dom4j.DocumentHelper; -import org.dom4j.Element; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + import org.tizen.webuibuilder.BuilderConstants; import org.tizen.webuibuilder.model.Part; import org.tizen.webuibuilder.model.descriptors.PartDescriptor; import org.tizen.webuibuilder.model.descriptors.PropertyDescriptor; import org.tizen.webuibuilder.model.descriptors.TypeDescriptor; import org.tizen.webuibuilder.model.filedata.PageFileData; - +import org.w3c.dom.Document; +import org.w3c.dom.Element; public class PageWriter_ver_1 { - /** - * Writes a page element. - * - * @param pageFileData - * a {@link PageFileData} - * @return page element - */ - public static Element writeElement(PageFileData pageFileData) { - Element root = DocumentHelper.createElement("document"); - - Element pageInfoelem = DocumentHelper.createElement("documentInfo"); - Element elem; - elem = DocumentHelper.createElement("title"); - elem.addText("test"); - pageInfoelem.add(elem); - elem = DocumentHelper.createElement("author"); - elem.addText("noname"); - pageInfoelem.add(elem); - elem = DocumentHelper.createElement("version"); - elem.addText("0.1.1"); - pageInfoelem.add(elem); - root.add(pageInfoelem); - - Element pageDataelem = DocumentHelper.createElement("documentData"); - pageDataelem.add(writePart(pageFileData.getRootPart(0), false)); - root.add(pageDataelem); - - return root; - } - - /** - * Writes a page element. - * - * @param part - * a {@link part} - * @param includePid - * whether to write part-id - * @return page element - */ - public static Element writePart(Part part, boolean includePid) { - Element elem = DocumentHelper.createElement(part.getDescriptorId()); - - if (includePid) { - elem.addAttribute(BuilderConstants.ATTRIBUTE_PID, part.getPartId()); - - // Adds height style attribute. - PartDescriptor descriptor = part.getPartDescriptor(); - if (part.canBeVisibleBorder()) { - String heightString = descriptor.getFeedbackHeight(); - if (heightString != null) { - int height = Integer.valueOf(heightString).intValue(); - String value = - BuilderConstants.ATTRIBUTE_VALUE_HEIGHT + BuilderConstants.COLON - + height + BuilderConstants.ATTRIBUTE_VALUE_PX; - elem.addAttribute(BuilderConstants.ATTRIBUTE_STYLE, value); - - Element textElem = DocumentHelper.createElement(BuilderConstants.PART_TEXT); - textElem.addAttribute(BuilderConstants.ATTRIBUTE_TEXT, - descriptor.getGuideText()); - elem.add(textElem); - } - } - } - - for (PropertyDescriptor property : part.getPartDescriptor().getPropertyDescriptors()) { - String value = part.getPropertyValue(property.getPropertyName()); - if (value != null) { - if (property.getPropertyType().equals(TypeDescriptor.ID_OF_HTMLSTRING)) { - elem.setText(value); - } else { - elem.addAttribute(property.getPropertyName(), value); - } - } - } - - // for (EventDescriptor event : part.getPartDescriptor().getEventDescriptors()) { - // String value = part.getEventValue(event.getEventName()); - // if (value != null) { - // elem.addAttribute(event.getEventName(), value); - // } - // } - - for (Part child : part.getChildren()) { - elem.add(writePart(child, includePid)); - } - - return elem; - } + /** + * Writes a page element. + * + * @param pageFileData + * a {@link PageFileData} + * @return page element + */ + public static Document writeElement(PageFileData pageFileData) { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = null; + + try { + builder = factory.newDocumentBuilder(); + } catch (ParserConfigurationException e) { + e.printStackTrace(); + return null; + } + + Document doc = builder.newDocument(); + + Element root = doc.createElement("document"); + + Element pageInfoelem = doc.createElement("documentInfo"); + Element elem; + elem = doc.createElement("title"); + elem.setTextContent("test"); + pageInfoelem.appendChild(elem); + elem = doc.createElement("author"); + elem.setTextContent("noname"); + pageInfoelem.appendChild(elem); + elem = doc.createElement("version"); + elem.setTextContent("0.1.1"); + pageInfoelem.appendChild(elem); + root.appendChild(pageInfoelem); + + Element pageDataelem = doc.createElement("documentData"); + pageDataelem.appendChild(writePart(doc, pageFileData.getRootPart(0), + false)); + root.appendChild(pageDataelem); + + doc.appendChild(root); + + return doc; + } + + /** + * Writes a page element. + * + * @param part + * a {@link part} + * @param includePid + * whether to write part-id + * @return page element + */ + public static Element writePart(Document doc, Part part, boolean includePid) { + Element elem = doc.createElement(part.getDescriptorId()); + + if (includePid) { + elem.setAttribute(BuilderConstants.ATTRIBUTE_PID, part.getPartId()); + + // Adds height style attribute. + PartDescriptor descriptor = part.getPartDescriptor(); + if (part.canBeVisibleBorder()) { + String heightString = descriptor.getFeedbackHeight(); + if (heightString != null) { + int height = Integer.valueOf(heightString).intValue(); + String value = BuilderConstants.ATTRIBUTE_VALUE_HEIGHT + + BuilderConstants.COLON + height + + BuilderConstants.ATTRIBUTE_VALUE_PX; + elem.setAttribute(BuilderConstants.ATTRIBUTE_STYLE, value); + + Element textElem = doc + .createElement(BuilderConstants.PART_TEXT); + textElem.setAttribute(BuilderConstants.ATTRIBUTE_TEXT, + descriptor.getGuideText()); + elem.appendChild(textElem); + } + } + } + + for (PropertyDescriptor property : part.getPartDescriptor() + .getPropertyDescriptors()) { + String value = part.getPropertyValue(property.getPropertyName()); + if (value != null) { + if (property.getPropertyType().equals( + TypeDescriptor.ID_OF_HTMLSTRING)) { + elem.setTextContent(value); + } else { + elem.setAttribute(property.getPropertyName(), value); + } + } + } + + // for (EventDescriptor event : + // part.getPartDescriptor().getEventDescriptors()) { + // String value = part.getEventValue(event.getEventName()); + // if (value != null) { + // elem.addAttribute(event.getEventName(), value); + // } + // } + + for (Part child : part.getChildren()) { + elem.appendChild(writePart(doc, child, includePid)); + } + + return elem; + } } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageWriter_ver_2.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageWriter_ver_2.java index 4a1388e..2909d89 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageWriter_ver_2.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/PageWriter_ver_2.java @@ -26,8 +26,6 @@ package org.tizen.webuibuilder.model.io; import java.util.List; import java.util.Map.Entry; -import org.dom4j.DocumentHelper; -import org.dom4j.Element; import org.tizen.webuibuilder.BuilderConstants; import org.tizen.webuibuilder.model.GotoPageProperty; import org.tizen.webuibuilder.model.Part; @@ -37,6 +35,8 @@ import org.tizen.webuibuilder.model.descriptors.PropertyDescriptor; import org.tizen.webuibuilder.model.descriptors.TypeDescriptor; import org.tizen.webuibuilder.model.filedata.PageFileData; import org.tizen.webuibuilder.ui.views.nscreen.model.NScreenModel; +import org.w3c.dom.Document; +import org.w3c.dom.Element; public class PageWriter_ver_2 { @@ -48,40 +48,40 @@ public class PageWriter_ver_2 { * a {@link PageFileData} * @return page element */ - public static Element writeElement(PageFileData pageFileData) { + public static Document writeElement(PageFileData pageFileData) { TizenFileFormatter fmt = new TizenFileFormatter("tizen-page", "2", "Tizen Web UI Builder Project"); - Element root = fmt.GenerateFileFormat(); + Document doc = fmt.GenerateFileFormat(); - Element elem0 = DocumentHelper.createElement("document"); - root.add(elem0); + Element elem0 = doc.createElement("document"); + doc.appendChild(elem0); - Element pageInfoelem = DocumentHelper.createElement("documentInfo"); + Element pageInfoelem = doc.createElement("documentInfo"); Element elem; - elem = DocumentHelper.createElement("title"); - elem.addText("test"); - pageInfoelem.add(elem); - elem = DocumentHelper.createElement("author"); - elem.addText("noname"); - pageInfoelem.add(elem); - elem = DocumentHelper.createElement("version"); - elem.addText("0.1.1"); - pageInfoelem.add(elem); - elem0.add(pageInfoelem); + elem = doc.createElement("title"); + elem.setTextContent("test"); + pageInfoelem.appendChild(elem); + elem = doc.createElement("author"); + elem.setTextContent("noname"); + pageInfoelem.appendChild(elem); + elem = doc.createElement("version"); + elem.setTextContent("0.1.1"); + pageInfoelem.appendChild(elem); + elem0.appendChild(pageInfoelem); - Element pageDataElem = DocumentHelper.createElement("documentData"); + Element pageDataElem = doc.createElement("documentData"); - Element cssElement = DocumentHelper.createElement("tizen.css"); + Element cssElement = doc.createElement("tizen.css"); - pageDataElem.add(writeCss(cssElement, pageFileData.getRootPart(0))); - Element nscreenElement = DocumentHelper.createElement("tizen.nscreen"); - pageDataElem.add(writeNScreen(nscreenElement, pageFileData.getNscreenModelList())); + pageDataElem.appendChild(writeCss(doc, cssElement, pageFileData.getRootPart(0))); + Element nscreenElement = doc.createElement("tizen.nscreen"); + pageDataElem.appendChild(writeNScreen(doc, nscreenElement, pageFileData.getNscreenModelList())); - pageDataElem.add(writePart(pageFileData.getRootPart(0), false)); - elem0.add(pageDataElem); + pageDataElem.appendChild(writePart(doc, pageFileData.getRootPart(0), false)); + elem0.appendChild(pageDataElem); - return root; + return doc; } /** @@ -93,52 +93,52 @@ public class PageWriter_ver_2 { * a {@link part} * @return css element */ - public static Element writeCss(Element cssElement, Part part) { + public static Element writeCss(Document doc, Element cssElement, Part part) { // Adds selector attribute. for (CssSelector selector : part.getSelectors()) { if (selector == null) { continue; } - Element selectorElement = DocumentHelper.createElement("tizen.selector"); - selectorElement.addAttribute(BuilderConstants.ATTRIBUTE_NAME, + Element selectorElement = doc.createElement("tizen.selector"); + selectorElement.setAttribute(BuilderConstants.ATTRIBUTE_NAME, selector.getSelectorName()); - selectorElement.addAttribute(BuilderConstants.ATTRIBUTE_PARTID, selector.getPartId()); + selectorElement.setAttribute(BuilderConstants.ATTRIBUTE_PARTID, selector.getPartId()); // Adds style attribute. for (Entry child : selector.getProperties()) { - Element styleElement = DocumentHelper.createElement("tizen.style"); - styleElement.addAttribute(BuilderConstants.ATTRIBUTE_NAME, child.getKey()); - styleElement.addAttribute(BuilderConstants.ATTRIBUTE_VALUE, child.getValue()); - selectorElement.add(styleElement); + Element styleElement = doc.createElement("tizen.style"); + styleElement.setAttribute(BuilderConstants.ATTRIBUTE_NAME, child.getKey()); + styleElement.setAttribute(BuilderConstants.ATTRIBUTE_VALUE, child.getValue()); + selectorElement.appendChild(styleElement); } - cssElement.add(selectorElement); + cssElement.appendChild(selectorElement); } List children = part.getChildren(); int size = children.size(); for (int i = 0; i < size; i++) { - writeCss(cssElement, children.get(i)); + writeCss(doc, cssElement, children.get(i)); } return cssElement; } // public static Element writeDataBinding(Part part) { - // Element elem = DocumentHelper.createElement("tizen.dataModel"); + // Element elem = doc.createElement("tizen.dataModel"); // // String value = part.getPropertyValue("data-bind"); // if ((value != null) && (!value.equals(""))) { - // elem.addAttribute("name", value); + // elem.setAttribute("name", value); // } // // for (Part child : part.getChildren()) { // String childValue = child.getPropertyValue("data-bind"); // if ((childValue != null) && (!childValue.equals(""))) { - // elem.addAttribute("name", childValue); + // elem.setAttribute("name", childValue); // } // - // //elem.add(writeDataBinding(child)); + // //elem.appendChild(writeDataBinding(child)); // } // // return elem; @@ -153,24 +153,24 @@ public class PageWriter_ver_2 { * a List containing {@link NScreenModel} * @return nscreen element */ - public static Element writeNScreen(Element nscreenElement, List list) { + public static Element writeNScreen(Document doc, Element nscreenElement, List list) { for (NScreenModel model : list) { - Element screenElement = DocumentHelper.createElement("screen"); - Element titleElement = DocumentHelper.createElement("title"); - titleElement.setText(model.getTitle()); - Element widthElement = DocumentHelper.createElement("width"); - widthElement.setText(String.valueOf(model.getWidth())); - Element heightElement = DocumentHelper.createElement("height"); - heightElement.setText(String.valueOf(model.getHeight())); - Element cssFileNameElement = DocumentHelper.createElement("cssFileName"); - cssFileNameElement.setText(model.getFileName()); - - screenElement.add(titleElement); - screenElement.add(widthElement); - screenElement.add(heightElement); - screenElement.add(cssFileNameElement); - - nscreenElement.add(screenElement); + Element screenElement = doc.createElement("screen"); + Element titleElement = doc.createElement("title"); + titleElement.setTextContent(model.getTitle()); + Element widthElement = doc.createElement("width"); + widthElement.setTextContent(String.valueOf(model.getWidth())); + Element heightElement = doc.createElement("height"); + heightElement.setTextContent(String.valueOf(model.getHeight())); + Element cssFileNameElement = doc.createElement("cssFileName"); + cssFileNameElement.setTextContent(model.getFileName()); + + screenElement.appendChild(titleElement); + screenElement.appendChild(widthElement); + screenElement.appendChild(heightElement); + screenElement.appendChild(cssFileNameElement); + + nscreenElement.appendChild(screenElement); } return nscreenElement; @@ -185,11 +185,11 @@ public class PageWriter_ver_2 { * whether to write part-id * @return part element */ - public static Element writePart(Part part, boolean includePid) { - Element elem = DocumentHelper.createElement(part.getDescriptorId()); + public static Element writePart(Document doc, Part part, boolean includePid) { + Element elem = doc.createElement(part.getDescriptorId()); if (includePid) { - elem.addAttribute(BuilderConstants.ATTRIBUTE_PID, part.getPartId()); + elem.setAttribute(BuilderConstants.ATTRIBUTE_PID, part.getPartId()); // Adds height style attribute. PartDescriptor descriptor = part.getPartDescriptor(); @@ -198,7 +198,7 @@ public class PageWriter_ver_2 { if (heightString != null) { String widthString = descriptor.getFeedbackWidth(); String widthValue = BuilderConstants.EMPTY; - if (widthString != null) { + if (widthString != null && !widthString.isEmpty()) { int width = Integer.valueOf(widthString); widthValue = BuilderConstants.ATTRIBUTE_VALUE_WIDTH + BuilderConstants.COLON @@ -211,12 +211,12 @@ public class PageWriter_ver_2 { widthValue + BuilderConstants.ATTRIBUTE_VALUE_HEIGHT + BuilderConstants.COLON + height + BuilderConstants.ATTRIBUTE_VALUE_PX; - elem.addAttribute(BuilderConstants.ATTRIBUTE_STYLE, value); + elem.setAttribute(BuilderConstants.ATTRIBUTE_STYLE, value); - Element textElem = DocumentHelper.createElement(BuilderConstants.PART_TEXT); - textElem.addAttribute(BuilderConstants.ATTRIBUTE_TEXT, + Element textElem = doc.createElement(BuilderConstants.PART_TEXT); + textElem.setAttribute(BuilderConstants.ATTRIBUTE_TEXT, descriptor.getGuideText()); - elem.add(textElem); + elem.appendChild(textElem); } } } @@ -225,16 +225,16 @@ public class PageWriter_ver_2 { String value = part.getPropertyValue(property.getPropertyName()); if (value != null) { if (property.getPropertyType().equals(TypeDescriptor.ID_OF_HTMLSTRING)) { - elem.setText(value); + elem.setTextContent(value); } else if (property.getPropertyType() .indexOf(BuilderConstants.PROPERTY_GROUP_PREFIX) != 0) { - elem.addAttribute(property.getPropertyName(), value); + elem.setAttribute(property.getPropertyName(), value); } } } // for (Entry event : part.getEvents().entrySet()) { - // elem.addAttribute(event.getKey(), event.getValue()); + // elem.setAttribute(event.getKey(), event.getValue()); // } for (Entry> event : part.getEvents().entrySet()) { @@ -243,9 +243,9 @@ public class PageWriter_ver_2 { for (int i = 0; i < values.size(); i++) { value = values.get(i); if (value != null) { - Element element = DocumentHelper.createElement("event"); - element.addAttribute(event.getKey(), value); - elem.add(element); + Element element = doc.createElement("event"); + element.setAttribute(event.getKey(), value); + elem.appendChild(element); } } } @@ -255,16 +255,16 @@ public class PageWriter_ver_2 { GotoPageProperty value = gotoPageEvent.getValue(); if ((value != null) && (value.getDestinationPage() != null) && (value.getTransition() != null)) { - Element element = DocumentHelper.createElement("gotoPage"); - element.addAttribute("event", gotoPageEvent.getKey()); - element.addAttribute("destinationPage", value.getDestinationPage()); - element.addAttribute("transition", value.getTransition()); - elem.add(element); + Element element = doc.createElement("gotoPage"); + element.setAttribute("event", gotoPageEvent.getKey()); + element.setAttribute("destinationPage", value.getDestinationPage()); + element.setAttribute("transition", value.getTransition()); + elem.appendChild(element); } } for (Part child : part.getChildren()) { - elem.add(writePart(child, includePid)); + elem.appendChild(writePart(doc, child, includePid)); } return elem; diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/SAXContentHandler2.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/SAXContentHandler2.java deleted file mode 100644 index d489bf9..0000000 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/SAXContentHandler2.java +++ /dev/null @@ -1,235 +0,0 @@ -/* - * UI Builder - * - * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Contributors: - * - S-Core Co., Ltd - * - */ - - - -package org.tizen.webuibuilder.model.io; - -import org.dom4j.Document; -import org.dom4j.io.SAXContentHandler; -import org.dom4j.io.XMLWriter; -import org.xml.sax.Attributes; -import org.xml.sax.Locator; -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; - - -// Referenced classes of package org.dom4j.io: -// DispatchHandler, ElementStack - -public class SAXContentHandler2 extends SAXContentHandler { - private XMLWriter xmlWriter = null; - - public SAXContentHandler2() { - } - - public SAXContentHandler2(XMLWriter xmlwriter) { - super(); - setXMLWriter(xmlwriter); - } - - void setXMLWriter(XMLWriter xmlwriter) { - this.xmlWriter = xmlwriter; - } - - @Override - public Document getDocument() { - return super.getDocument(); - } - - @Override - public void setDocumentLocator(Locator documentLocator) { - super.setDocumentLocator(documentLocator); - } - - @Override - public void processingInstruction(String target, String data) throws SAXException { - super.processingInstruction(target, data); - if (target.equals("javax.xml.transform.disable-output-escaping")) { - xmlWriter.setEscapeText(false); - } else if (target.equals("javax.xml.transform.enable-output-escaping")) { - xmlWriter.setEscapeText(true); - } - if (xmlWriter != null) { - xmlWriter.processingInstruction(target, data); - } - } - - @Override - public void startPrefixMapping(String prefix, String uri) throws SAXException { - super.startPrefixMapping(prefix, uri); - } - - @Override - public void endPrefixMapping(String prefix) throws SAXException { - super.endPrefixMapping(prefix); - } - - @Override - public void startDocument() throws SAXException { - super.startDocument(); - if (xmlWriter != null) { - xmlWriter.startDocument(); - } - } - - @Override - public void endDocument() throws SAXException { - super.endDocument(); - if (xmlWriter != null) { - xmlWriter.endDocument(); - } - } - - @Override - public void startElement(String namespaceURI, String localName, String qualifiedName, - Attributes attributes) throws SAXException { - super.startElement(namespaceURI, localName, qualifiedName, attributes); - if (xmlWriter != null) { - xmlWriter.startElement(namespaceURI, localName, qualifiedName, attributes); - } - } - - @Override - public void endElement(String namespaceURI, String localName, String qName) throws SAXException { - super.endElement(namespaceURI, localName, qName); - if (xmlWriter != null) { - xmlWriter.endElement(namespaceURI, localName, qName); - } - } - - @Override - public void characters(char ch[], int start, int length) throws SAXException { - super.characters(ch, start, length); - if (xmlWriter != null) { - xmlWriter.characters(ch, start, length); - } - } - - @Override - public void warning(SAXParseException saxparseexception) throws SAXException { - super.warning(saxparseexception); - } - - @Override - public void error(SAXParseException exception) throws SAXException { - super.error(exception); - } - - @Override - public void fatalError(SAXParseException exception) throws SAXException { - super.fatalError(exception); - } - - @Override - public void startDTD(String name, String publicId, String systemId) throws SAXException { - super.startDTD(name, publicId, systemId); - if (xmlWriter != null) { - xmlWriter.startDTD(name, publicId, systemId); - } - } - - @Override - public void endDTD() throws SAXException { - super.endDTD(); - if (xmlWriter != null) { - xmlWriter.endDTD(); - } - } - - @Override - public void startEntity(String name) throws SAXException { - super.startEntity(name); - if (xmlWriter != null) { - xmlWriter.startEntity(name); - } - } - - @Override - public void endEntity(String name) throws SAXException { - super.endEntity(name); - if (xmlWriter != null) { - xmlWriter.endEntity(name); - } - } - - @Override - public void startCDATA() throws SAXException { - super.startCDATA(); - if (xmlWriter != null) { - xmlWriter.startCDATA(); - } - } - - @Override - public void endCDATA() throws SAXException { - super.endCDATA(); - if (xmlWriter != null) { - xmlWriter.endCDATA(); - } - } - - @Override - public void comment(char ch[], int start, int end) throws SAXException { - super.comment(ch, start, end); - if (xmlWriter != null) { - xmlWriter.comment(ch, start, end); - } - } - - @Override - public void elementDecl(String name, String model) throws SAXException { - super.elementDecl(name, model); - } - - @Override - public void attributeDecl(String eName, String aName, String type, String valueDefault, - String val) throws SAXException { - super.attributeDecl(eName, aName, type, valueDefault, val); - } - - @Override - public void internalEntityDecl(String name, String value) throws SAXException { - super.internalEntityDecl(name, value); - } - - @Override - public void externalEntityDecl(String name, String publicId, String sysId) throws SAXException { - super.externalEntityDecl(name, publicId, sysId); - } - - @Override - public void notationDecl(String s, String s1, String s2) throws SAXException { - super.notationDecl(s, s1, s2); - if (xmlWriter != null) { - xmlWriter.notationDecl(s, s1, s2); - } - } - - @Override - public void unparsedEntityDecl(String s, String s1, String s2, String s3) throws SAXException { - super.unparsedEntityDecl(s, s1, s2, s3); - if (xmlWriter != null) { - xmlWriter.unparsedEntityDecl(s, s1, s2, s3); - } - } -} diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/TizenFileFormatter.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/TizenFileFormatter.java index 9a84cce..9750406 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/TizenFileFormatter.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/io/TizenFileFormatter.java @@ -23,8 +23,12 @@ package org.tizen.webuibuilder.model.io; -import org.dom4j.DocumentHelper; -import org.dom4j.Element; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; public class TizenFileFormatter { @@ -45,24 +49,37 @@ public class TizenFileFormatter { this.desc = desc; } - public Element GenerateFileFormat() { - Element rootElem = DocumentHelper.createElement(ELEMENT_TIZEN_FILE); + public Document GenerateFileFormat() { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder docBuilder = null; + try { + docBuilder = factory.newDocumentBuilder(); + } catch (ParserConfigurationException e) { + e.printStackTrace(); + return null; + } + + Document doc = docBuilder.newDocument(); + + Element rootElem = doc.createElement(ELEMENT_TIZEN_FILE); - Element elem0 = DocumentHelper.createElement(ELEMENT_FILE_INFO); - rootElem.add(elem0); + Element elem0 = doc.createElement(ELEMENT_FILE_INFO); + rootElem.appendChild(elem0); - Element elem = DocumentHelper.createElement(ELEMENT_TYPE); - elem.setText(type); - elem0.add(elem); + Element elem = doc.createElement(ELEMENT_TYPE); + elem.setTextContent(type); + elem0.appendChild(elem); - elem = DocumentHelper.createElement(ELEMENT_VERSION); - elem.setText(version); - elem0.add(elem); + elem = doc.createElement(ELEMENT_VERSION); + elem.setTextContent(version); + elem0.appendChild(elem); - elem = DocumentHelper.createElement(ELEMENT_DESC); - elem.setText(desc); - elem0.add(elem); + elem = doc.createElement(ELEMENT_DESC); + elem.setTextContent(desc); + elem0.appendChild(elem); - return rootElem; + doc.appendChild(rootElem); + + return doc; } } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/page/PageDataForHTML.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/page/PageDataForHTML.java index 24be19d..54d16ff 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/page/PageDataForHTML.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/page/PageDataForHTML.java @@ -42,7 +42,6 @@ import javax.xml.xpath.XPathFactory; import org.apache.xerces.parsers.DOMParser; import org.cyberneko.html.HTMLConfiguration; -import org.dom4j.io.DocumentSource; import org.tizen.webuibuilder.BuilderConstants; import org.tizen.webuibuilder.model.Part; import org.tizen.webuibuilder.model.PartEvent; @@ -172,12 +171,12 @@ public class PageDataForHTML extends PageData { Transformer transformer = null; try { transformer = - transformerFactory.newTransformer(new DocumentSource(getDescriptorManager() + transformerFactory.newTransformer(new DOMSource(getDescriptorManager() .getXsltDocument())); } catch (TransformerConfigurationException e) { e.printStackTrace(); } - transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, BuilderConstants.NO); + transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, BuilderConstants.YES); transformer.setOutputProperty(OutputKeys.INDENT, BuilderConstants.NO); transformer.setOutputProperty(OutputKeys.ENCODING, BuilderConstants.ENCODING); transformer.setOutputProperty(OutputKeys.METHOD, BuilderConstants.HTML); diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/ProjectManager.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/ProjectManager.java index e34d471..055354e 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/ProjectManager.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/ProjectManager.java @@ -23,13 +23,19 @@ package org.tizen.webuibuilder.model.project; import java.io.File; +import java.io.IOException; import java.util.ArrayList; import java.util.List; -import org.dom4j.Document; -import org.dom4j.DocumentException; -import org.dom4j.Element; -import org.dom4j.io.SAXReader; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectNature; @@ -38,8 +44,11 @@ import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.tizen.webuibuilder.BuilderConstants; import org.tizen.webuibuilder.animator.perspective.AnimatorPerspectiveListener; +import org.tizen.webuibuilder.model.PartFactory; import org.tizen.webuibuilder.model.app.AppManager; import org.tizen.webuibuilder.model.app.AppManagerForAppXML; import org.tizen.webuibuilder.model.descriptors.DescriptorManager; @@ -193,18 +202,27 @@ public class ProjectManager { } private void loadToolPath(String filePath) { - SAXReader reader = new SAXReader(); + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = null; Document doc = null; - Element root = null; try { - doc = reader.read(filePath); - } catch (DocumentException e) { + builder = factory.newDocumentBuilder(); + doc = builder.parse(new File(filePath)); + } catch (ParserConfigurationException e) { + e.printStackTrace(); + } catch (SAXException e) { e.printStackTrace(); + } catch (IOException e) { + Logger logger = LoggerFactory.getLogger(PartFactory.class); + logger.error(BuilderConstants.LOG_READ_PAGE_ERROR); + if (doc == null) { + return; + } } - if (doc != null && doc.getRootElement() != null) { - root = doc.getRootElement(); + if (doc != null && doc.getDocumentElement() != null) { + Element root = doc.getDocumentElement(); FileReader fileReader = new FileReader(root); if (!fileReader.isValidate()) { return; @@ -216,13 +234,24 @@ public class ProjectManager { return; } - for (Object childObj : root.elements("tizenToolPath")) { - for (Object childObj2 : ((Element)childObj).elements("descriptor")) { - descriptorFilePath = ((Element) childObj2).getTextTrim(); - } - for (Object childObj2 : ((Element)childObj).elements("descriptorIcons")) { - } - for (Object childObj2 : ((Element)childObj).elements("buildXslt")) { + NodeList elemList = root.getElementsByTagName("tizenToolPath"); + if (elemList.getLength() > 0) { + Node firstChild = elemList.item(0); + if (firstChild instanceof Element) { + elemList = firstChild.getChildNodes(); + for (int i = 0; i < elemList.getLength(); i++) { + Node childNode = elemList.item(i); + if (childNode instanceof Element) { + if (childNode.getNodeName().equals("descriptor")) { + descriptorFilePath = ((Element) childNode) + .getTextContent().trim(); + } else if (childNode.getNodeName().equals( + "descriptorIcons")) { + } else if (childNode.getNodeName().equals( + "buildXslt")) { + } + } + } } } } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectReader.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectReader.java index 329cde2..e01af20 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectReader.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectReader.java @@ -23,30 +23,49 @@ package org.tizen.webuibuilder.model.project.io; +import java.io.IOException; import java.net.URL; -import org.dom4j.Document; -import org.dom4j.DocumentException; -import org.dom4j.io.SAXReader; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.w3c.dom.Document; +import org.xml.sax.SAXException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.tizen.webuibuilder.BuilderConstants; +import org.tizen.webuibuilder.model.PartFactory; import org.tizen.webuibuilder.model.filedata.AppFileData; public class ProjectReader { public static AppFileData read(URL descriptorPath) { - SAXReader reader = new SAXReader(); + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = null; Document doc = null; - AppFileData descriptor = null; try { - doc = reader.read(descriptorPath); - } catch (DocumentException e) { - e.printStackTrace(); + builder = factory.newDocumentBuilder(); + doc = builder.parse(descriptorPath.openStream()); + } catch (ParserConfigurationException e) { + e.printStackTrace(); + } catch (SAXException e) { + e.printStackTrace(); + } catch (IOException e) { + Logger logger = LoggerFactory.getLogger(PartFactory.class); + logger.error(BuilderConstants.LOG_READ_PAGE_ERROR); + if (doc == null) { + return null; + } } - if (doc != null && doc.getRootElement() != null) { - descriptor = ProjectReader_ver_2.parse(doc.getRootElement()); + AppFileData descriptor = null; + + if (doc != null && doc.getDocumentElement() != null) { + descriptor = ProjectReader_ver_2.parse(doc.getDocumentElement()); if (descriptor == null) { - descriptor = ProjectReader_ver_1.parse(doc.getRootElement()); + descriptor = ProjectReader_ver_1.parse(doc.getDocumentElement()); } } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectReader_ver_1.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectReader_ver_1.java index 426903e..f344196 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectReader_ver_1.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectReader_ver_1.java @@ -23,13 +23,15 @@ package org.tizen.webuibuilder.model.project.io; -import org.dom4j.Element; import org.tizen.webuibuilder.BuilderConstants; import org.tizen.webuibuilder.model.app.Framework; import org.tizen.webuibuilder.model.app.Library; import org.tizen.webuibuilder.model.app.Page; import org.tizen.webuibuilder.model.app.Stylesheet; import org.tizen.webuibuilder.model.filedata.AppFileData; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; class FrameworkEntry { @@ -51,67 +53,83 @@ public class ProjectReader_ver_1 { descriptor = new AppFileData(); descriptor.setProjectFileVersion("0.0.1"); - for (Object childObj : root.elements(BuilderConstants.ELEMENT_PROJECTINFO)) { - parseProjectInfo((Element) childObj, descriptor); - } - - for (Object childObj : root.elements(BuilderConstants.ELEMENT_PAGESYSTEM)) { - parsePart((Element) childObj, descriptor); - } + NodeList elemList = root.getChildNodes(); + for(int i = 0; i < elemList.getLength(); i++){ + Node childNode = elemList.item(i); + if(childNode instanceof Element){ + if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_PROJECTINFO)) { + parseProjectInfo((Element) childNode, descriptor); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_PAGESYSTEM)) { + parsePart((Element) childNode, descriptor); + } + } + } return descriptor; } private static void parseProjectInfo(Element elem, AppFileData descriptor) { - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_TITLE)) { - Element title = (Element) childObj; - descriptor.setTitle(title.getText()); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_AUTHOR)) { - Element author = (Element) childObj; - descriptor.setAuthor(author.getText()); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_VERSION)) { - Element version = (Element) childObj; - descriptor.setVersion(version.getText()); - } + NodeList elemList = elem.getChildNodes(); + for(int i = 0; i < elemList.getLength(); i++){ + Node childNode = elemList.item(i); + if(childNode instanceof Element){ + if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_TITLE)) { + Element title = (Element) childNode; + descriptor.setTitle(title.getTextContent()); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_AUTHOR)) { + Element author = (Element) childNode; + descriptor.setAuthor(author.getTextContent()); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_VERSION)) { + Element version = (Element) childNode; + descriptor.setVersion(version.getTextContent()); + } + } + } } private static void parsePart(Element elem, AppFileData descriptor) { - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_FRAMEWORKS)) { - parseFrameworks((Element) childObj, descriptor); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_LIBRARIES)) { - parseLibraries((Element) childObj, descriptor); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_PAGES)) { - parsePages((Element) childObj, descriptor); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_ENTRIES)) { - parseEntrys((Element) childObj, descriptor); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_STYLESHEETS)) { - parseStylesheets((Element) childObj, descriptor); - } + NodeList elemList = elem.getChildNodes(); + for(int i = 0; i < elemList.getLength(); i++){ + Node childNode = elemList.item(i); + if(childNode instanceof Element){ + if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_FRAMEWORKS)) { + parseFrameworks((Element) childNode, descriptor); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_LIBRARIES)) { + parseLibraries((Element) childNode, descriptor); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_PAGES)) { + parsePages((Element) childNode, descriptor); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_ENTRIES)) { + parseEntrys((Element) childNode, descriptor); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_STYLESHEETS)) { + parseStylesheets((Element) childNode, descriptor); + } + } + } } private static void parseFrameworks(Element elem, AppFileData descriptor) { - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_FRAMEWORK_THEME)) { - String theme = parseTheme((Element) childObj); - descriptor.addOrReplaceFrameworkVariable("theme", theme); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_SCRIPT)) { - FrameworkEntry frameworkentry = parseFramework((Element) childObj, descriptor); - descriptor.addLibrary(frameworkentry.library); - if (frameworkentry.framework != null) { - descriptor.addFramework(frameworkentry.framework); - } - } + NodeList elemList = elem.getChildNodes(); + for(int i = 0; i < elemList.getLength(); i++){ + Node childNode = elemList.item(i); + if(childNode instanceof Element){ + if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_FRAMEWORK_THEME)) { + String theme = parseTheme((Element) childNode); + descriptor.addOrReplaceFrameworkVariable("theme", theme); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_SCRIPT)) { + FrameworkEntry frameworkentry = parseFramework((Element) childNode, descriptor); + descriptor.addLibrary(frameworkentry.library); + if (frameworkentry.framework != null) { + descriptor.addFramework(frameworkentry.framework); + } + } + } + } } private static void parseLibraries(Element elem, AppFileData descriptor) { - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_SCRIPT)) { - Library script = parseScript((Element) childObj); + NodeList elemList = elem.getElementsByTagName(BuilderConstants.ELEMENT_SCRIPT); + for(int i = 0; i < elemList.getLength(); i++){ + Library script = parseScript((Element) elemList.item(i)); descriptor.addLibrary(script); } @@ -120,17 +138,18 @@ public class ProjectReader_ver_1 { } private static void parsePages(Element element, AppFileData descriptor) { - for (Object childObj : element.elements(BuilderConstants.ELEMENT_PAGE)) { - Element element2 = (Element) childObj; + NodeList elemList = element.getElementsByTagName(BuilderConstants.ELEMENT_PAGE); + for(int i = 0; i < elemList.getLength(); i++){ + Element element2 = (Element) elemList.item(i); - String name = element2.attributeValue(BuilderConstants.ATTRIBUTE_NAME); - String startup = element2.attributeValue(BuilderConstants.ATTRIBUTE_STARTUP); + String name = element2.getAttribute(BuilderConstants.ATTRIBUTE_NAME); + String startup = element2.getAttribute(BuilderConstants.ATTRIBUTE_STARTUP); boolean boolStartup = Boolean.valueOf(startup).booleanValue(); - String pagePath = element2.attributeValue(BuilderConstants.ATTRIBUTE_PAGEPATH); - String jsPath = element2.attributeValue(BuilderConstants.ATTRIBUTE_JSPATH); + String pagePath = element2.getAttribute(BuilderConstants.ATTRIBUTE_PAGEPATH); + String jsPath = element2.getAttribute(BuilderConstants.ATTRIBUTE_JSPATH); String managedJsPath = - element2.attributeValue(BuilderConstants.ATTRIBUTE_MANAGEDJSPATH); - String htmlPath = element2.attributeValue(BuilderConstants.ATTRIBUTE_HTMLPATH); + element2.getAttribute(BuilderConstants.ATTRIBUTE_MANAGEDJSPATH); + String htmlPath = element2.getAttribute(BuilderConstants.ATTRIBUTE_HTMLPATH); String cssPath = htmlPath.replace(".html", ".css"); String managedCssPath = htmlPath.replace(".html", ".managed.css"); @@ -146,8 +165,9 @@ public class ProjectReader_ver_1 { } private static void parseEntrys(Element elem, AppFileData descriptor) { - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_SCRIPT)) { - Library entry = parseEntry((Element) childObj); + NodeList elemList = elem.getElementsByTagName(BuilderConstants.ELEMENT_SCRIPT); + for(int i = 0; i < elemList.getLength(); i++){ + Library entry = parseEntry((Element) elemList.item(i)); descriptor.addLibrary(entry); } } @@ -155,14 +175,16 @@ public class ProjectReader_ver_1 { private static void parseStylesheets(Element elem, AppFileData descriptor) { Stylesheet stylesheet = new Stylesheet("pages", "all", ""); descriptor.addStylesheet(stylesheet); - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_STYLESHEET)) { - stylesheet = parseStylesheet((Element) childObj); + + NodeList elemList = elem.getElementsByTagName(BuilderConstants.ELEMENT_STYLESHEET); + for(int i = 0; i < elemList.getLength(); i++){ + stylesheet = parseStylesheet((Element) elemList.item(i)); descriptor.addStylesheet(stylesheet); } } private static String parseTheme(Element element) { - String theme = element.attributeValue(BuilderConstants.ATTRIBUTE_NAME); + String theme = element.getAttribute(BuilderConstants.ATTRIBUTE_NAME); return theme; } @@ -170,9 +192,9 @@ public class ProjectReader_ver_1 { private static FrameworkEntry parseFramework(Element element, AppFileData descriptor) { // String type = // element.attributeValue(BuilderConstants.ATTRIBUTE_TYPE); - String path = element.attributeValue(BuilderConstants.ATTRIBUTE_PATH); - String theme = element.attributeValue(BuilderConstants.ATTRIBUTE_THEME); - String viewport = element.attributeValue(BuilderConstants.ATTRIBUTE_SCALE); + String path = element.getAttribute(BuilderConstants.ATTRIBUTE_PATH); + String theme = element.getAttribute(BuilderConstants.ATTRIBUTE_THEME); + String viewport = element.getAttribute(BuilderConstants.ATTRIBUTE_SCALE); String core = ""; if (theme != null && !theme.isEmpty()) { @@ -201,7 +223,7 @@ public class ProjectReader_ver_1 { // String type = // element.attributeValue(BuilderConstants.ATTRIBUTE_TYPE); String type = "user"; - String path = element.attributeValue(BuilderConstants.ATTRIBUTE_PATH); + String path = element.getAttribute(BuilderConstants.ATTRIBUTE_PATH); Library script = new Library(type, path); // type == "user" @@ -212,7 +234,7 @@ public class ProjectReader_ver_1 { // String type = // element.attributeValue(BuilderConstants.ATTRIBUTE_TYPE); String type = " entry"; - String path = element.attributeValue(BuilderConstants.ATTRIBUTE_PATH); + String path = element.getAttribute(BuilderConstants.ATTRIBUTE_PATH); Library framework = new Library(type, path); // type == "entry" @@ -220,7 +242,7 @@ public class ProjectReader_ver_1 { } private static Stylesheet parseStylesheet(Element element) { - String path = element.attributeValue(BuilderConstants.ATTRIBUTE_PATH); + String path = element.getAttribute(BuilderConstants.ATTRIBUTE_PATH); Stylesheet stylesheet = new Stylesheet("user", path, ""); diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectReader_ver_2.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectReader_ver_2.java index 582ac5e..b8b1897 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectReader_ver_2.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectReader_ver_2.java @@ -26,7 +26,9 @@ package org.tizen.webuibuilder.model.project.io; import java.util.AbstractMap; import java.util.Map.Entry; -import org.dom4j.Element; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; import org.tizen.webuibuilder.BuilderConstants; import org.tizen.webuibuilder.animator.AnimatorConstants; import org.tizen.webuibuilder.model.app.Framework; @@ -56,75 +58,86 @@ public class ProjectReader_ver_2 { descriptor = new AppFileData(); descriptor.setProjectFileVersion(fileReader.getVersion()); - for (Object childObj : root.elements(BuilderConstants.ELEMENT_TIZENPROJECT)) { - parsePart((Element) childObj, descriptor); + NodeList elemList = root.getElementsByTagName(BuilderConstants.ELEMENT_TIZENPROJECT); + for(int i = 0; i < elemList.getLength(); i++){ + parsePart((Element) elemList.item(i), descriptor); } return descriptor; } private static void parsePart(Element elem, AppFileData descriptor) { - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_METAS)) { - parseMetas((Element) childObj, descriptor); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_LIBRARIES)) { - parseLibrarys((Element) childObj, descriptor); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_FRAMEWORKS)) { - parseFrameworks((Element) childObj, descriptor); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_PAGES)) { - parsePage((Element) childObj, descriptor); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_STYLESHEETS)) { - parseStylesheets((Element) childObj, descriptor); - } + NodeList elemList = elem.getChildNodes(); + for(int i = 0; i < elemList.getLength(); i++){ + Node childNode = elemList.item(i); + if(childNode instanceof Element){ + if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_METAS)) { + parseMetas((Element) childNode, descriptor); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_LIBRARIES)) { + parseLibrarys((Element) childNode, descriptor); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_FRAMEWORKS)) { + parseFrameworks((Element) childNode, descriptor); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_PAGES)) { + parsePage((Element) childNode, descriptor); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_STYLESHEETS)) { + parseStylesheets((Element) childNode, descriptor); + } + } + } } private static void parseMetas(Element elem, AppFileData descriptor) { - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_META)) { - Meta meta = parseMeta((Element) childObj); + NodeList elemList = elem.getElementsByTagName(BuilderConstants.ELEMENT_META); + for(int i = 0; i < elemList.getLength(); i++){ + Meta meta = parseMeta((Element) elemList.item(i)); descriptor.addMeta(meta); } } private static void parseFrameworks(Element elem, AppFileData descriptor) { - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_VARIABLES)) { - parseFrameworkVariables((Element) childObj, descriptor); - } - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_FRAMEWORK)) { - Framework script = parseFramework((Element) childObj); - descriptor.addFramework(script); - } + NodeList elemList = elem.getChildNodes(); + for(int i = 0; i < elemList.getLength(); i++){ + Node childNode = elemList.item(i); + if(childNode instanceof Element){ + if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_VARIABLES)) { + parseFrameworkVariables((Element) childNode, descriptor); + } else if(childNode.getNodeName().equals(BuilderConstants.ELEMENT_FRAMEWORK)) { + Framework script = parseFramework((Element) childNode); + descriptor.addFramework(script); + } + } + } } private static void parseLibrarys(Element elem, AppFileData descriptor) { - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_LIBRARY)) { - Library library = parseLibrary((Element) childObj); + NodeList elemList = elem.getElementsByTagName(BuilderConstants.ELEMENT_LIBRARY); + for(int i = 0; i < elemList.getLength(); i++){ + Library library = parseLibrary((Element) elemList.item(i)); descriptor.addLibrary(library); } } private static void parsePage(Element element, AppFileData descriptor) { - for (Object childObj : element.elements(BuilderConstants.ELEMENT_PAGE)) { - Element element2 = (Element) childObj; + NodeList elemList = element.getElementsByTagName(BuilderConstants.ELEMENT_PAGE); + for(int i = 0; i < elemList.getLength(); i++){ + Element element2 = (Element) elemList.item(i); - String name = element2.attributeValue(BuilderConstants.ATTRIBUTE_NAME); - String startup = element2.attributeValue(BuilderConstants.ATTRIBUTE_STARTUP); + String name = element2.getAttribute(BuilderConstants.ATTRIBUTE_NAME); + String startup = element2.getAttribute(BuilderConstants.ATTRIBUTE_STARTUP); boolean boolStartup = Boolean.valueOf(startup).booleanValue(); - String pagePath = element2.attributeValue(BuilderConstants.ATTRIBUTE_PAGEPATH); - String jsPath = element2.attributeValue(BuilderConstants.ATTRIBUTE_JSPATH); + String pagePath = element2.getAttribute(BuilderConstants.ATTRIBUTE_PAGEPATH); + String jsPath = element2.getAttribute(BuilderConstants.ATTRIBUTE_JSPATH); String managedJsPath = - element2.attributeValue(BuilderConstants.ATTRIBUTE_MANAGEDJSPATH); - String htmlPath = element2.attributeValue(BuilderConstants.ATTRIBUTE_HTMLPATH); - String cssPath = element2.attributeValue(BuilderConstants.ATTRIBUTE_CSSPATH); + element2.getAttribute(BuilderConstants.ATTRIBUTE_MANAGEDJSPATH); + String htmlPath = element2.getAttribute(BuilderConstants.ATTRIBUTE_HTMLPATH); + String cssPath = element2.getAttribute(BuilderConstants.ATTRIBUTE_CSSPATH); String managedCssPath = - element2.attributeValue(BuilderConstants.ATTRIBUTE_MANAGED_CSSPATH); + element2.getAttribute(BuilderConstants.ATTRIBUTE_MANAGED_CSSPATH); String animatorJsPath = - element2.attributeValue(AnimatorConstants.ATTRIBUTE_ANIMATOR_MANAGED_JSPATH); + element2.getAttribute(AnimatorConstants.ATTRIBUTE_ANIMATOR_MANAGED_JSPATH); String animatorCssPath = - element2.attributeValue(AnimatorConstants.ATTRIBUTE_ANIMATOR_MANAGED_CSSPATH); + element2.getAttribute(AnimatorConstants.ATTRIBUTE_ANIMATOR_MANAGED_CSSPATH); Page page = new Page(name, pagePath, jsPath, managedJsPath, htmlPath, cssPath, @@ -139,23 +152,25 @@ public class ProjectReader_ver_2 { } private static void parseStylesheets(Element elem, AppFileData descriptor) { - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_STYLESHEET)) { - Stylesheet stylesheet = parseStylesheet((Element) childObj); + NodeList elemList = elem.getElementsByTagName(BuilderConstants.ELEMENT_STYLESHEET); + for(int i = 0; i < elemList.getLength(); i++){ + Stylesheet stylesheet = parseStylesheet((Element) elemList.item(i)); descriptor.addStylesheet(stylesheet); } } private static void parseFrameworkVariables(Element elem, AppFileData descriptor) { - for (Object childObj : elem.elements(BuilderConstants.ELEMENT_VARIABLE)) { - Entry variable = parseFrameworkVariable((Element) childObj); + NodeList elemList = elem.getElementsByTagName(BuilderConstants.ELEMENT_VARIABLE); + for(int i = 0; i < elemList.getLength(); i++){ + Entry variable = parseFrameworkVariable((Element) elemList.item(i)); descriptor.addFrameworkVariable(variable.getKey(), variable.getValue()); } } private static Framework parseFramework(Element elem) { - String param = elem.attributeValue(BuilderConstants.ATTRIBUTE_PARAM); - String path = elem.attributeValue(BuilderConstants.ATTRIBUTE_PATH); - String param2 = elem.attributeValue(BuilderConstants.ATTRIBUTE_PARAM2); + String param = elem.getAttribute(BuilderConstants.ATTRIBUTE_PARAM); + String path = elem.getAttribute(BuilderConstants.ATTRIBUTE_PATH); + String param2 = elem.getAttribute(BuilderConstants.ATTRIBUTE_PARAM2); Framework framework = new Framework(param, path, param2); @@ -163,8 +178,8 @@ public class ProjectReader_ver_2 { } private static Entry parseFrameworkVariable(Element elem) { - String name = elem.attributeValue(BuilderConstants.ATTRIBUTE_NAME); - String value = elem.attributeValue(BuilderConstants.ATTRIBUTE_VALUE); + String name = elem.getAttribute(BuilderConstants.ATTRIBUTE_NAME); + String value = elem.getAttribute(BuilderConstants.ATTRIBUTE_VALUE); Entry variable = new AbstractMap.SimpleEntry(name, value); @@ -172,9 +187,9 @@ public class ProjectReader_ver_2 { } private static Meta parseMeta(Element element) { - String type = element.attributeValue(BuilderConstants.ATTRIBUTE_TYPE); - String param = element.attributeValue(BuilderConstants.ATTRIBUTE_PARAM); - String param2 = element.attributeValue(BuilderConstants.ATTRIBUTE_PARAM2); + String type = element.getAttribute(BuilderConstants.ATTRIBUTE_TYPE); + String param = element.getAttribute(BuilderConstants.ATTRIBUTE_PARAM); + String param2 = element.getAttribute(BuilderConstants.ATTRIBUTE_PARAM2); Meta meta = new Meta(type, param, param2); @@ -182,8 +197,8 @@ public class ProjectReader_ver_2 { } private static Library parseLibrary(Element element) { - String type = element.attributeValue(BuilderConstants.ATTRIBUTE_TYPE); - String param = element.attributeValue(BuilderConstants.ATTRIBUTE_PARAM); + String type = element.getAttribute(BuilderConstants.ATTRIBUTE_TYPE); + String param = element.getAttribute(BuilderConstants.ATTRIBUTE_PARAM); Library library = new Library(type, param); @@ -191,9 +206,9 @@ public class ProjectReader_ver_2 { } private static Stylesheet parseStylesheet(Element element) { - String type = element.attributeValue(BuilderConstants.ATTRIBUTE_TYPE); - String param = element.attributeValue(BuilderConstants.ATTRIBUTE_PARAM); - String param2 = element.attributeValue(BuilderConstants.ATTRIBUTE_PARAM2); + String type = element.getAttribute(BuilderConstants.ATTRIBUTE_TYPE); + String param = element.getAttribute(BuilderConstants.ATTRIBUTE_PARAM); + String param2 = element.getAttribute(BuilderConstants.ATTRIBUTE_PARAM2); Stylesheet stylesheet = new Stylesheet(type, param, param2); diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectWriter.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectWriter.java index d917a1c..d4d68cc 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectWriter.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectWriter.java @@ -28,12 +28,21 @@ import java.io.IOException; import java.io.StringWriter; import java.io.Writer; -import org.dom4j.Document; -import org.dom4j.DocumentHelper; -import org.dom4j.Element; -import org.dom4j.io.OutputFormat; -import org.dom4j.io.XMLWriter; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +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 org.tizen.webuibuilder.BuilderConstants; import org.tizen.webuibuilder.model.filedata.AppFileData; +import org.w3c.dom.Document; +import org.w3c.dom.Element; public class ProjectWriter { @@ -41,20 +50,43 @@ public class ProjectWriter { private static final int INDENT_SIZE = 4; public static void writeTo(AppFileData descriptor, Writer writer) throws IOException { - Element elem = writeElement(descriptor); - - Document doc = DocumentHelper.createDocument(); - doc.add(elem); - - OutputFormat format = OutputFormat.createPrettyPrint(); - format.setIndentSize(INDENT_SIZE); - - XMLWriter xmlwriter = new XMLWriter(writer, format); - // xmlwriter.setMaximumAllowedCharacter(127); - // xmlwriter.setEscapeText(false); - - xmlwriter.write(doc); - xmlwriter.close(); + Document doc = writeElement(descriptor); + + DOMSource source = new DOMSource(doc); + StreamResult result = new StreamResult(writer); + + TransformerFactory factory = TransformerFactory.newInstance(); + Transformer transformer = null; + try { + transformer = factory.newTransformer(); + transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, + BuilderConstants.YES); + transformer.setOutputProperty(OutputKeys.ENCODING, + BuilderConstants.ENCODING); + transformer.setOutputProperty(OutputKeys.METHOD, + BuilderConstants.XML); + } catch (TransformerConfigurationException e) { + e.printStackTrace(); + } + + try { + transformer.transform(source, result); + } catch (TransformerException e) { + e.printStackTrace(); + } + +// Document doc = DocumentHelper.createDocument(); +// doc.add(elem); +// +// OutputFormat format = OutputFormat.createPrettyPrint(); +// format.setIndentSize(INDENT_SIZE); +// +// XMLWriter xmlwriter = new XMLWriter(writer, format); +// // xmlwriter.setMaximumAllowedCharacter(127); +// // xmlwriter.setEscapeText(false); +// +// xmlwriter.write(doc); +// xmlwriter.close(); } public static String writeToString(AppFileData descriptor) { @@ -72,7 +104,7 @@ public class ProjectWriter { writeTo(descriptor, new FileWriter(filePath)); } - public static Element writeElement(AppFileData descriptor) { + public static Document writeElement(AppFileData descriptor) { // return ProjectWriter_ver0_0_1.writeElement(descriptor); return ProjectWriter_ver_2.writeElement(descriptor); } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectWriter_ver_1.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectWriter_ver_1.java index c0733e9..2e943c0 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectWriter_ver_1.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectWriter_ver_1.java @@ -25,67 +25,83 @@ package org.tizen.webuibuilder.model.project.io; import java.util.List; -import org.dom4j.DocumentHelper; -import org.dom4j.Element; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + import org.tizen.webuibuilder.BuilderConstants; import org.tizen.webuibuilder.model.app.Framework; import org.tizen.webuibuilder.model.app.Library; import org.tizen.webuibuilder.model.app.Page; import org.tizen.webuibuilder.model.app.Stylesheet; import org.tizen.webuibuilder.model.filedata.AppFileData; +import org.w3c.dom.Document; +import org.w3c.dom.Element; public class ProjectWriter_ver_1 { - public static Element writeElement(AppFileData descriptor) { - Element root = DocumentHelper.createElement(BuilderConstants.ELEMENT_TIZENPROJECT); - - Element projectInfo = DocumentHelper.createElement(BuilderConstants.ELEMENT_PROJECTINFO); - root.add(projectInfo); - writeProjectInfo(projectInfo, descriptor); - - Element pageSystem = DocumentHelper.createElement(BuilderConstants.ELEMENT_PAGESYSTEM); - root.add(pageSystem); - - Element frameworks = DocumentHelper.createElement(BuilderConstants.ELEMENT_FRAMEWORKS); - pageSystem.add(frameworks); - writeFrameworks(frameworks, descriptor); - - Element libraries = DocumentHelper.createElement(BuilderConstants.ELEMENT_LIBRARIES); - pageSystem.add(libraries); - writeLibraries(libraries, descriptor); - - Element pages = DocumentHelper.createElement(BuilderConstants.ELEMENT_PAGES); - pageSystem.add(pages); - writePages(pages, descriptor); - - Element entries = DocumentHelper.createElement(BuilderConstants.ELEMENT_ENTRIES); - pageSystem.add(entries); - writeEntries(entries, descriptor); - - Element stylesheets = DocumentHelper.createElement(BuilderConstants.ELEMENT_STYLESHEETS); - pageSystem.add(stylesheets); - writeStylesheets(stylesheets, descriptor); - - return root; + public static Document writeElement(AppFileData descriptor) { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder docBuilder = null; + try { + docBuilder = factory.newDocumentBuilder(); + } catch (ParserConfigurationException e) { + e.printStackTrace(); + return null; + } + + Document doc = docBuilder.newDocument(); + + Element root = doc.createElement(BuilderConstants.ELEMENT_TIZENPROJECT); + doc.appendChild(root); + + Element projectInfo = doc.createElement(BuilderConstants.ELEMENT_PROJECTINFO); + root.appendChild(projectInfo); + writeProjectInfo(doc, projectInfo, descriptor); + + Element pageSystem = doc.createElement(BuilderConstants.ELEMENT_PAGESYSTEM); + root.appendChild(pageSystem); + + Element frameworks = doc.createElement(BuilderConstants.ELEMENT_FRAMEWORKS); + pageSystem.appendChild(frameworks); + writeFrameworks(doc, frameworks, descriptor); + + Element libraries = doc.createElement(BuilderConstants.ELEMENT_LIBRARIES); + pageSystem.appendChild(libraries); + writeLibraries(doc, libraries, descriptor); + + Element pages = doc.createElement(BuilderConstants.ELEMENT_PAGES); + pageSystem.appendChild(pages); + writePages(doc, pages, descriptor); + + Element entries = doc.createElement(BuilderConstants.ELEMENT_ENTRIES); + pageSystem.appendChild(entries); + writeEntries(doc, entries, descriptor); + + Element stylesheets = doc.createElement(BuilderConstants.ELEMENT_STYLESHEETS); + pageSystem.appendChild(stylesheets); + writeStylesheets(doc, stylesheets, descriptor); + + return doc; } - private static void writeProjectInfo(Element element, AppFileData descriptor) { - Element title = DocumentHelper.createElement(BuilderConstants.ELEMENT_TITLE); - title.addText(descriptor.getTitle()); - element.add(title); + private static void writeProjectInfo(Document doc, Element element, AppFileData descriptor) { + Element title = doc.createElement(BuilderConstants.ELEMENT_TITLE); + title.setTextContent(descriptor.getTitle()); + element.appendChild(title); - Element author = DocumentHelper.createElement(BuilderConstants.ELEMENT_AUTHOR); - author.addText(descriptor.getAuthor()); - element.add(author); + Element author = doc.createElement(BuilderConstants.ELEMENT_AUTHOR); + author.setTextContent(descriptor.getAuthor()); + element.appendChild(author); - Element version = DocumentHelper.createElement(BuilderConstants.ELEMENT_VERSION); - version.addText(descriptor.getVersion()); - element.add(version); + Element version = doc.createElement(BuilderConstants.ELEMENT_VERSION); + version.setTextContent(descriptor.getVersion()); + element.appendChild(version); } - private static void writeFrameworks(Element element, AppFileData descriptor) { - element.add(writeTheme(descriptor.getFrameworkVariable("theme"))); + private static void writeFrameworks(Document doc, Element element, AppFileData descriptor) { + element.appendChild(writeTheme(doc, descriptor.getFrameworkVariable("theme"))); List frameworks = descriptor.getLibraries(); @@ -95,14 +111,14 @@ public class ProjectWriter_ver_1 { if (!framework.getType().equals("framework") && !framework.getType().equals("system")) { continue; } - Element elm = writeFramework(framework, descriptor); + Element elm = writeFramework(doc, framework, descriptor); if (elm != null) { - element.add(elm); + element.appendChild(elm); } } } - private static void writeLibraries(Element element, AppFileData descriptor) { + private static void writeLibraries(Document doc, Element element, AppFileData descriptor) { List libraries = descriptor.getLibraries(); int size = libraries.size(); @@ -110,20 +126,20 @@ public class ProjectWriter_ver_1 { if (!libraries.get(i).getType().equals("user")) { continue; } - element.add(writeScript(libraries.get(i))); + element.appendChild(writeScript(doc, libraries.get(i))); } } - private static void writePages(Element element, AppFileData descriptor) { + private static void writePages(Document doc, Element element, AppFileData descriptor) { List pages = descriptor.getPages(); int size = pages.size(); for (int i = 0; i < size; i++) { - element.add(writePage(pages.get(i), i == descriptor.getStartupPage())); + element.appendChild(writePage(doc, pages.get(i), i == descriptor.getStartupPage())); } } - private static void writeEntries(Element element, AppFileData descriptor) { + private static void writeEntries(Document doc, Element element, AppFileData descriptor) { List entries = descriptor.getLibraries(); int size = entries.size(); @@ -131,11 +147,11 @@ public class ProjectWriter_ver_1 { if (!entries.get(i).getType().equals("entry")) { continue; } - element.add(writeEntry(entries.get(i))); + element.appendChild(writeEntry(doc, entries.get(i))); } } - private static void writeStylesheets(Element element, AppFileData descriptor) { + private static void writeStylesheets(Document doc, Element element, AppFileData descriptor) { List stylesheets = descriptor.getStylesheets(); int size = stylesheets.size(); @@ -143,19 +159,19 @@ public class ProjectWriter_ver_1 { if (!stylesheets.get(i).getType().equals("user")) { continue; } - element.add(writeStylesheet(stylesheets.get(i))); + element.appendChild(writeStylesheet(doc, stylesheets.get(i))); } } - private static Element writeTheme(String theme) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_FRAMEWORK_THEME); + private static Element writeTheme(Document doc, String theme) { + Element element = doc.createElement(BuilderConstants.ELEMENT_FRAMEWORK_THEME); - element.addAttribute(BuilderConstants.ATTRIBUTE_NAME, theme); + element.setAttribute(BuilderConstants.ATTRIBUTE_NAME, theme); return element; } - private static Element writeFramework(Library framework, AppFileData descriptor) { + private static Element writeFramework(Document doc, Library framework, AppFileData descriptor) { Framework data = null; if (framework.getType().equals("framework")) { data = descriptor.findFramework(framework.getParam()); @@ -164,65 +180,65 @@ public class ProjectWriter_ver_1 { } } - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_SCRIPT); + Element element = doc.createElement(BuilderConstants.ELEMENT_SCRIPT); - element.addAttribute(BuilderConstants.ATTRIBUTE_TYPE, "system"); + element.setAttribute(BuilderConstants.ATTRIBUTE_TYPE, "system"); if (data != null) { String path = new String(data.getPath()); path = path.replaceAll("%tizen-web-ui-fw-path%", "./tizen-web-ui-fw/latest"); - element.addAttribute(BuilderConstants.ATTRIBUTE_PATH, path); + element.setAttribute(BuilderConstants.ATTRIBUTE_PATH, path); if (data.getParam2() != null && !data.getParam2().isEmpty()) { - element.addAttribute(BuilderConstants.ATTRIBUTE_THEME, + element.setAttribute(BuilderConstants.ATTRIBUTE_THEME, descriptor.getFrameworkVariable("theme")); - element.addAttribute(BuilderConstants.ATTRIBUTE_SCALE, + element.setAttribute(BuilderConstants.ATTRIBUTE_SCALE, descriptor.getFrameworkVariable("viewport-scale")); } } else { String path = new String(framework.getParam()); path = path.replaceAll("%tizen-web-ui-fw-path%", "./tizen-web-ui-fw/latest"); - element.addAttribute(BuilderConstants.ATTRIBUTE_PATH, path); + element.setAttribute(BuilderConstants.ATTRIBUTE_PATH, path); } return element; } - private static Element writeEntry(Library framework) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_SCRIPT); + private static Element writeEntry(Document doc, Library framework) { + Element element = doc.createElement(BuilderConstants.ELEMENT_SCRIPT); - element.addAttribute(BuilderConstants.ATTRIBUTE_TYPE, "system"); - element.addAttribute(BuilderConstants.ATTRIBUTE_PATH, framework.getParam()); + element.setAttribute(BuilderConstants.ATTRIBUTE_TYPE, "system"); + element.setAttribute(BuilderConstants.ATTRIBUTE_PATH, framework.getParam()); return element; } - private static Element writeScript(Library script) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_SCRIPT); + private static Element writeScript(Document doc, Library script) { + Element element = doc.createElement(BuilderConstants.ELEMENT_SCRIPT); - element.addAttribute(BuilderConstants.ATTRIBUTE_TYPE, "user"); - element.addAttribute(BuilderConstants.ATTRIBUTE_PATH, script.getParam()); + element.setAttribute(BuilderConstants.ATTRIBUTE_TYPE, "user"); + element.setAttribute(BuilderConstants.ATTRIBUTE_PATH, script.getParam()); return element; } - private static Element writePage(Page page, boolean isStartup) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_PAGE); + private static Element writePage(Document doc, Page page, boolean isStartup) { + Element element = doc.createElement(BuilderConstants.ELEMENT_PAGE); - element.addAttribute(BuilderConstants.ATTRIBUTE_TYPE, "system"); - element.addAttribute(BuilderConstants.ATTRIBUTE_NAME, page.getName()); - element.addAttribute(BuilderConstants.ATTRIBUTE_STARTUP, Boolean.toString(isStartup)); - element.addAttribute(BuilderConstants.ATTRIBUTE_PAGEPATH, page.getPagePath()); - element.addAttribute(BuilderConstants.ATTRIBUTE_JSPATH, page.getJsPath()); - element.addAttribute(BuilderConstants.ATTRIBUTE_MANAGEDJSPATH, page.getManagedJsPath()); - element.addAttribute(BuilderConstants.ATTRIBUTE_HTMLPATH, page.getHtmlPath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_TYPE, "system"); + element.setAttribute(BuilderConstants.ATTRIBUTE_NAME, page.getName()); + element.setAttribute(BuilderConstants.ATTRIBUTE_STARTUP, Boolean.toString(isStartup)); + element.setAttribute(BuilderConstants.ATTRIBUTE_PAGEPATH, page.getPagePath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_JSPATH, page.getJsPath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_MANAGEDJSPATH, page.getManagedJsPath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_HTMLPATH, page.getHtmlPath()); return element; } - private static Element writeStylesheet(Stylesheet stylesheet) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_STYLESHEET); + private static Element writeStylesheet(Document doc, Stylesheet stylesheet) { + Element element = doc.createElement(BuilderConstants.ELEMENT_STYLESHEET); - element.addAttribute(BuilderConstants.ATTRIBUTE_PATH, stylesheet.getParam()); + element.setAttribute(BuilderConstants.ATTRIBUTE_PATH, stylesheet.getParam()); return element; } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectWriter_ver_2.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectWriter_ver_2.java index 269cbae..5a11478 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectWriter_ver_2.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/project/io/ProjectWriter_ver_2.java @@ -27,8 +27,6 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; -import org.dom4j.DocumentHelper; -import org.dom4j.Element; import org.tizen.webuibuilder.BuilderConstants; import org.tizen.webuibuilder.animator.AnimatorConstants; import org.tizen.webuibuilder.model.app.Framework; @@ -37,141 +35,143 @@ import org.tizen.webuibuilder.model.app.Page; import org.tizen.webuibuilder.model.app.Stylesheet; import org.tizen.webuibuilder.model.filedata.AppFileData; import org.tizen.webuibuilder.model.io.TizenFileFormatter; +import org.w3c.dom.Document; +import org.w3c.dom.Element; public class ProjectWriter_ver_2 { - public static Element writeElement(AppFileData descriptor) { + public static Document writeElement(AppFileData descriptor) { TizenFileFormatter fmt = new TizenFileFormatter("tizen-project", "2", "Tizen Web UI Builder Project"); - Element root = fmt.GenerateFileFormat(); + Document doc = fmt.GenerateFileFormat(); - Element pageSystem = DocumentHelper.createElement(BuilderConstants.ELEMENT_TIZENPROJECT); - root.add(pageSystem); + Element pageSystem = doc.createElement(BuilderConstants.ELEMENT_TIZENPROJECT); + doc.appendChild(pageSystem); - Element libraries = DocumentHelper.createElement(BuilderConstants.ELEMENT_LIBRARIES); - pageSystem.add(libraries); - writeLibraries(libraries, descriptor); + Element libraries = doc.createElement(BuilderConstants.ELEMENT_LIBRARIES); + pageSystem.appendChild(libraries); + writeLibraries(doc, libraries, descriptor); - Element frameworks = DocumentHelper.createElement(BuilderConstants.ELEMENT_FRAMEWORKS); - pageSystem.add(frameworks); - writeFrameworks(frameworks, descriptor); + Element frameworks = doc.createElement(BuilderConstants.ELEMENT_FRAMEWORKS); + pageSystem.appendChild(frameworks); + writeFrameworks(doc, frameworks, descriptor); - Element pages = DocumentHelper.createElement(BuilderConstants.ELEMENT_PAGES); - pageSystem.add(pages); - writePages(pages, descriptor); + Element pages = doc.createElement(BuilderConstants.ELEMENT_PAGES); + pageSystem.appendChild(pages); + writePages(doc, pages, descriptor); - Element stylesheets = DocumentHelper.createElement(BuilderConstants.ELEMENT_STYLESHEETS); - pageSystem.add(stylesheets); - writeStylesheets(stylesheets, descriptor); + Element stylesheets = doc.createElement(BuilderConstants.ELEMENT_STYLESHEETS); + pageSystem.appendChild(stylesheets); + writeStylesheets(doc, stylesheets, descriptor); - return root; + return doc; } - private static void writeFrameworks(Element element, AppFileData descriptor) { - element.add(writeFrameworkVariables(element, descriptor)); + private static void writeFrameworks(Document doc, Element element, AppFileData descriptor) { + element.appendChild(writeFrameworkVariables(doc, element, descriptor)); List frameworks = descriptor.getFrameworks(); int size = frameworks.size(); for (int i = 0; i < size; i++) { - element.add(writeFramework(frameworks.get(i))); + element.appendChild(writeFramework(doc, frameworks.get(i))); } } - private static Element writeFrameworkVariables(Element element, AppFileData descriptor) { - Element element2 = DocumentHelper.createElement(BuilderConstants.ELEMENT_VARIABLES); + private static Element writeFrameworkVariables(Document doc, Element element, AppFileData descriptor) { + Element element2 = doc.createElement(BuilderConstants.ELEMENT_VARIABLES); Map variables = descriptor.getFrameworkVariables(); for (Entry variable : variables.entrySet()) { - element2.add(writeFrameworkVariable(variable)); + element2.appendChild(writeFrameworkVariable(doc, variable)); } return element2; } - private static void writeLibraries(Element element, AppFileData descriptor) { + private static void writeLibraries(Document doc, Element element, AppFileData descriptor) { List libraries = descriptor.getLibraries(); int size = libraries.size(); for (int i = 0; i < size; i++) { - element.add(writeLibrary(libraries.get(i))); + element.appendChild(writeLibrary(doc, libraries.get(i))); } } - private static void writePages(Element element, AppFileData descriptor) { + private static void writePages(Document doc, Element element, AppFileData descriptor) { List pages = descriptor.getPages(); int size = pages.size(); for (int i = 0; i < size; i++) { - element.add(writePage(pages.get(i), i == descriptor.getStartupPage())); + element.appendChild(writePage(doc, pages.get(i), i == descriptor.getStartupPage())); } } - private static void writeStylesheets(Element element, AppFileData descriptor) { + private static void writeStylesheets(Document doc, Element element, AppFileData descriptor) { List stylesheets = descriptor.getStylesheets(); int size = stylesheets.size(); for (int i = 0; i < size; i++) { - element.add(writeStylesheet(stylesheets.get(i))); + element.appendChild(writeStylesheet(doc, stylesheets.get(i))); } } - private static Element writeLibrary(Library library) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_LIBRARY); + private static Element writeLibrary(Document doc, Library library) { + Element element = doc.createElement(BuilderConstants.ELEMENT_LIBRARY); - element.addAttribute(BuilderConstants.ATTRIBUTE_TYPE, library.getType()); - element.addAttribute(BuilderConstants.ATTRIBUTE_PARAM, library.getParam()); + element.setAttribute(BuilderConstants.ATTRIBUTE_TYPE, library.getType()); + element.setAttribute(BuilderConstants.ATTRIBUTE_PARAM, library.getParam()); return element; } - private static Element writeFramework(Framework framework) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_FRAMEWORK); + private static Element writeFramework(Document doc, Framework framework) { + Element element = doc.createElement(BuilderConstants.ELEMENT_FRAMEWORK); - element.addAttribute(BuilderConstants.ATTRIBUTE_PARAM, framework.getParam()); - element.addAttribute(BuilderConstants.ATTRIBUTE_PATH, framework.getPath()); - element.addAttribute(BuilderConstants.ATTRIBUTE_PARAM2, framework.getParam2()); + element.setAttribute(BuilderConstants.ATTRIBUTE_PARAM, framework.getParam()); + element.setAttribute(BuilderConstants.ATTRIBUTE_PATH, framework.getPath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_PARAM2, framework.getParam2()); return element; } - private static Element writeFrameworkVariable(Entry variable) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_VARIABLE); + private static Element writeFrameworkVariable(Document doc, Entry variable) { + Element element = doc.createElement(BuilderConstants.ELEMENT_VARIABLE); - element.addAttribute(BuilderConstants.ATTRIBUTE_NAME, variable.getKey()); - element.addAttribute(BuilderConstants.ATTRIBUTE_VALUE, variable.getValue()); + element.setAttribute(BuilderConstants.ATTRIBUTE_NAME, variable.getKey()); + element.setAttribute(BuilderConstants.ATTRIBUTE_VALUE, variable.getValue()); return element; } - private static Element writePage(Page page, boolean isStartup) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_PAGE); + private static Element writePage(Document doc, Page page, boolean isStartup) { + Element element = doc.createElement(BuilderConstants.ELEMENT_PAGE); - element.addAttribute(BuilderConstants.ATTRIBUTE_NAME, page.getName()); - element.addAttribute(BuilderConstants.ATTRIBUTE_STARTUP, Boolean.toString(isStartup)); - element.addAttribute(BuilderConstants.ATTRIBUTE_PAGEPATH, page.getPagePath()); - element.addAttribute(BuilderConstants.ATTRIBUTE_JSPATH, page.getJsPath()); - element.addAttribute(BuilderConstants.ATTRIBUTE_MANAGEDJSPATH, page.getManagedJsPath()); - element.addAttribute(BuilderConstants.ATTRIBUTE_HTMLPATH, page.getHtmlPath()); - element.addAttribute(BuilderConstants.ATTRIBUTE_CSSPATH, page.getCssPath()); - element.addAttribute(BuilderConstants.ATTRIBUTE_MANAGED_CSSPATH, page.getManagedCssPath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_NAME, page.getName()); + element.setAttribute(BuilderConstants.ATTRIBUTE_STARTUP, Boolean.toString(isStartup)); + element.setAttribute(BuilderConstants.ATTRIBUTE_PAGEPATH, page.getPagePath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_JSPATH, page.getJsPath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_MANAGEDJSPATH, page.getManagedJsPath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_HTMLPATH, page.getHtmlPath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_CSSPATH, page.getCssPath()); + element.setAttribute(BuilderConstants.ATTRIBUTE_MANAGED_CSSPATH, page.getManagedCssPath()); - element.addAttribute(AnimatorConstants.ATTRIBUTE_ANIMATOR_MANAGED_JSPATH, + element.setAttribute(AnimatorConstants.ATTRIBUTE_ANIMATOR_MANAGED_JSPATH, page.getAnimatorManagedJsPath()); - element.addAttribute(AnimatorConstants.ATTRIBUTE_ANIMATOR_MANAGED_CSSPATH, + element.setAttribute(AnimatorConstants.ATTRIBUTE_ANIMATOR_MANAGED_CSSPATH, page.getAnimatorManagedCssPath()); return element; } - private static Element writeStylesheet(Stylesheet stylesheet) { - Element element = DocumentHelper.createElement(BuilderConstants.ELEMENT_STYLESHEET); + private static Element writeStylesheet(Document doc, Stylesheet stylesheet) { + Element element = doc.createElement(BuilderConstants.ELEMENT_STYLESHEET); - element.addAttribute(BuilderConstants.ATTRIBUTE_TYPE, stylesheet.getType()); - element.addAttribute(BuilderConstants.ATTRIBUTE_PARAM, stylesheet.getParam()); + element.setAttribute(BuilderConstants.ATTRIBUTE_TYPE, stylesheet.getType()); + element.setAttribute(BuilderConstants.ATTRIBUTE_PARAM, stylesheet.getParam()); return element; } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/snippet/converter/Converter.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/snippet/converter/Converter.java index 9882cad..7d98bb2 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/snippet/converter/Converter.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/snippet/converter/Converter.java @@ -23,19 +23,30 @@ package org.tizen.webuibuilder.snippet.converter; +import java.io.FileWriter; import java.io.IOException; import java.io.StringBufferInputStream; import java.io.StringWriter; import java.util.List; -import org.dom4j.Attribute; -import org.dom4j.Document; -import org.dom4j.DocumentException; -import org.dom4j.DocumentHelper; -import org.dom4j.Element; -import org.dom4j.io.OutputFormat; -import org.dom4j.io.SAXReader; -import org.dom4j.io.XMLWriter; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +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 org.w3c.dom.Attr; +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 org.xml.sax.SAXException; import org.tizen.webuibuilder.BuilderConstants; import org.tizen.webuibuilder.model.PagePart; import org.tizen.webuibuilder.model.Part; @@ -73,56 +84,102 @@ public class Converter implements IConverter { */ @Override public String convert(Part part) { - Document document = DocumentHelper.createDocument(); - - Element rootElement = DocumentHelper.createElement("descriptor"); - Element cssElement = DocumentHelper.createElement("tizen.css"); - Element partElement = DocumentHelper.createElement("tizen.part"); - partElement.add(PageWriter_ver_2.writePart(part, false)); - rootElement.add(PageWriter_ver_2.writeCss(cssElement, part)); - rootElement.add(partElement); - document.add(rootElement); + DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = null; + try { + builder = docFactory.newDocumentBuilder(); + } catch (ParserConfigurationException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + + Document document = builder.newDocument(); + + Element rootElement = document.createElement("descriptor"); + Element cssElement = document.createElement("tizen.css"); + Element partElement = document.createElement("tizen.part"); + partElement.appendChild(PageWriter_ver_2.writePart(document, part, false)); + rootElement.appendChild(PageWriter_ver_2.writeCss(document, cssElement, part)); + rootElement.appendChild(partElement); + document.appendChild(rootElement); StringWriter stringWriter = new StringWriter(); - OutputFormat prettyFormat = OutputFormat.createPrettyPrint(); - prettyFormat.setIndentSize(INDENT_SIZE); - - XMLWriter xmlwriter = new XMLWriter(stringWriter, prettyFormat); - try { - xmlwriter.write(document); - xmlwriter.close(); - } catch (IOException e) { - e.printStackTrace(); - } + + DOMSource source = new DOMSource(document); + StreamResult result = new StreamResult(stringWriter); + + TransformerFactory factory = TransformerFactory.newInstance(); + Transformer transformer = null; + try { + transformer = factory.newTransformer(); + transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, + BuilderConstants.YES); + transformer.setOutputProperty(OutputKeys.ENCODING, + BuilderConstants.ENCODING); + transformer.setOutputProperty(OutputKeys.METHOD, + BuilderConstants.XML); + } catch (TransformerConfigurationException e) { + e.printStackTrace(); + } + + try { + transformer.transform(source, result); + } catch (TransformerException e) { + e.printStackTrace(); + } + +// OutputFormat prettyFormat = OutputFormat.createPrettyPrint(); +// prettyFormat.setIndentSize(INDENT_SIZE); +// +// XMLWriter xmlwriter = new XMLWriter(stringWriter, prettyFormat); +// try { +// xmlwriter.write(document); +// xmlwriter.close(); +// } catch (IOException e) { +// e.printStackTrace(); +// } return stringWriter.getBuffer().toString(); } public Part convert(String text) { - SAXReader reader = new SAXReader(); + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = null; Document doc = null; + try { - doc = reader.read(new StringBufferInputStream(text)); - } catch (DocumentException e) { - return null; - } - Element rootElement = doc.getRootElement(); + builder = factory.newDocumentBuilder(); + doc = builder.parse(new StringBufferInputStream(text)); + } catch (ParserConfigurationException e) { + e.printStackTrace(); + } catch (SAXException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + Element rootElement = doc.getDocumentElement(); List selectors = null; - for (Object child : rootElement.elements("tizen.css")) { - Element childElement = (Element) child; + NodeList elemList = rootElement.getElementsByTagName("tizen.css"); + for (int i = 0; i < elemList.getLength(); i++) { + Element childElement = (Element) elemList.item(i); selectors = PageReader_ver_2.parseStyle((Element) childElement); } - Element partElement = rootElement.element("tizen.part"); - List elements = partElement.elements(); - Part part = parse(elements.get(0), descriptorManager, selectors); - return part; + elemList = rootElement.getElementsByTagName("tizen.part"); + if(elemList.getLength() > 0) { + Element childElement = (Element) elemList.item(0); + Part part = parse(childElement, descriptorManager, selectors); + return part; + } else { + return null; + } } private static Part parse(Element element, DescriptorManager descriptorManager, List selectors) { Part part = null; - PartDescriptor descriptor = descriptorManager.getPartDescriptor(element.getName()); + PartDescriptor descriptor = descriptorManager.getPartDescriptor(element.getNodeName()); if (descriptor == null) { } else { if (descriptor instanceof WidgetPartDescriptor) { @@ -135,9 +192,10 @@ public class Converter implements IConverter { } // Sets events and properties. - Attribute attr = null; - for (Object attrObj : element.attributes()) { - attr = (Attribute) attrObj; + Attr attr = null; + NamedNodeMap attrList = element.getAttributes(); + for (int i = 0; i < attrList.getLength(); i++) { + attr = (Attr) attrList.item(i); if (BuilderConstants.ATTRIBUTE_EVENT_PREFIX.equals((attr.getName()) .substring(0, BuilderConstants.ATTRIBUTE_EVENT_PREFIX.length()))) { part.setEventValue(attr.getName(), attr.getValue()); @@ -145,7 +203,7 @@ public class Converter implements IConverter { part.setPropertyValueWhenPageRead(attr.getName(), attr.getValue()); } } - String text = element.getText(); + String text = element.getTextContent(); if (!text.isEmpty()) { PropertyDescriptor prop = null; for (Object attrObj : descriptor.getPropertyDescriptors()) { @@ -167,12 +225,13 @@ public class Converter implements IConverter { } // Adds children. - Element child = null; - Part childpart = null; - for (Object childObj : element.elements()) { - child = (Element) childObj; - childpart = parse(child, descriptorManager, selectors); - part.addChildWhenPageRead(childpart); + NodeList elemList = element.getChildNodes(); + for (int i = 0; i < elemList.getLength(); i++) { + Node childNode = elemList.item(i); + if(childNode instanceof Element){ + Part childpart = parse((Element)childNode, descriptorManager, selectors); + part.addChildWhenPageRead(childpart); + } } } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/properties/style/CssStyleTab.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/properties/style/CssStyleTab.java index 996af34..e53f75c 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/properties/style/CssStyleTab.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/properties/style/CssStyleTab.java @@ -446,16 +446,18 @@ public class CssStyleTab extends PropertiesTabItem implements IPageDataListener String positionValue = BuilderConstants.EMPTY; // refresh position - if (methodName.equals("width")) { - positionValue = model.getPosition().width + "px"; - method.refreshValue(methodName, positionValue); - refreshManagedMethods(methodName, positionValue, false); - refreshFlag = false; - } else if (methodName.equals("height")) { - positionValue = model.getPosition().height + "px"; - method.refreshValue(methodName, positionValue); - refreshManagedMethods(methodName, positionValue, false); - refreshFlag = false; + if(model.getPosition() != null){ + if (methodName.equals("width")) { + positionValue = model.getPosition().width + "px"; + method.refreshValue(methodName, positionValue); + refreshManagedMethods(methodName, positionValue, false); + refreshFlag = false; + } else if (methodName.equals("height")) { + positionValue = model.getPosition().height + "px"; + method.refreshValue(methodName, positionValue); + refreshManagedMethods(methodName, positionValue, false); + refreshFlag = false; + } } for (CssStyle style : cloneStyles) { -- 2.7.4