SNIPPET: Apply ModelSerializer 57/20257/1
authoryoungduk.hwang <youngduk.hwang@samsung.com>
Wed, 30 Apr 2014 07:21:01 +0000 (16:21 +0900)
committeryoungduk.hwang <youngduk.hwang@samsung.com>
Wed, 30 Apr 2014 07:21:01 +0000 (16:21 +0900)
ModelSerializer was applied on Snippet. It is used when a Snippet is converted from Model to String and from String to Model.

Change-Id: If4e0e37e8dfd2c9dae39832e7780fdbe05a84a86
Signed-off-by: youngduk.hwang <youngduk.hwang@samsung.com>
org.tizen.webuibuilder/src/org/tizen/webuibuilder/gef/dnd/model/SnippetTemplate.java
org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/snippet/io/SnippetReader.java [new file with mode: 0644]
org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/snippet/io/SnippetWriter.java [new file with mode: 0644]
org.tizen.webuibuilder/src/org/tizen/webuibuilder/snippet/ui/wizards/policy/CreatePolicy.java
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/editor/ComponentsCreator.java
org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/editor/PaletteRootProvider.java

index 8379d9a..ff0c7c8 100644 (file)
 package org.tizen.webuibuilder.gef.dnd.model;
 
 import org.eclipse.gef.requests.CreationFactory;
-import org.tizen.webuibuilder.snippet.converter.Converter;
+import org.tizen.webuibuilder.model.app.AppManager;
+import org.tizen.webuibuilder.model.snippet.io.SnippetReader;
 import org.tizen.webuibuilder.snippet.model.ISnippet;
 
 
 public class SnippetTemplate extends AbstractTemplate {
     private ISnippet snippet = null;
+    private AppManager appManager = null;
 
     public SnippetTemplate(ISnippet snippet) {
         this.snippet = snippet;
@@ -37,10 +39,22 @@ public class SnippetTemplate extends AbstractTemplate {
         SnippetCreationFactory factory = new SnippetCreationFactory();
         setFactory(factory);
     }
+    
+    public SnippetTemplate(ISnippet snippet, AppManager appManager) {
+        this.snippet = snippet;
+        this.appManager = appManager;
+        setType(SNIPPET);
+        SnippetCreationFactory factory = new SnippetCreationFactory();
+        setFactory(factory);
+    }
 
     public ISnippet getSnippet() {
         return snippet;
     }
+    
+    public AppManager appManager() {
+       return appManager;
+    }
 
     private class SnippetCreationFactory implements CreationFactory {
         /*
@@ -51,8 +65,9 @@ public class SnippetTemplate extends AbstractTemplate {
         @Override
         public Object getNewObject() {
             String text = snippet.getDescriptor().getText();
-            Converter converter = new Converter();
-            return converter.convert(text);
+            return SnippetReader.readSnippet(text, appManager.getPartFactory());
+//            Converter converter = new Converter();
+//            return converter.convert(text);
         }
 
         /*
diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/snippet/io/SnippetReader.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/snippet/io/SnippetReader.java
new file mode 100644 (file)
index 0000000..36afbaa
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * 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.snippet.io;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.tizen.webuibuilder.BuilderConstants;
+import org.tizen.webuibuilder.model.Part;
+import org.tizen.webuibuilder.model.PartFactory;
+import org.tizen.webuibuilder.model.io.ModelReader;
+import org.tizen.webuibuilder.model.io.file.TizenFileFormatter;
+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;
+
+
+public class SnippetReader {
+
+    /**
+     * Reads a snippet model.
+     * 
+     * @param data
+     *            a String Data
+     * @param partFactory
+     *            a {@link PartFactory}
+     * @return {@link Part}
+     */
+    public static Part readSnippet(String data, PartFactory partFactory) {
+       
+       Element partElement = null;
+       Document doc = read(data);
+       
+       if(doc == null) {
+               return null;
+       }
+
+       Element documentElement = doc.getDocumentElement();
+       
+       TizenFileFormatter fileReader = new TizenFileFormatter(documentElement);
+        if (!fileReader.isValidate()) {
+            return null;
+        }
+        if (!fileReader.getType().equals("tizen-snippet")) {
+            return null;
+        }
+        if (!fileReader.getVersion().equals("1") && !fileReader.getVersion().equals("0.0.1")) {
+            return null;
+        }
+        
+        NodeList elementList = documentElement.getElementsByTagName("tizen.snippet");
+        if(elementList.getLength() > 0) {
+               Node snippetNode = elementList.item(0);
+               if(snippetNode.getFirstChild() != null) {
+                       partElement = (Element)snippetNode.getFirstChild().getNextSibling();
+               }
+        }
+        return ModelReader.read(partElement, partFactory);
+    }
+    
+    private static Document read(String data) {
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
+        DocumentBuilder builder = null;
+        Document doc = null;
+
+        try {
+            builder = factory.newDocumentBuilder();
+            doc = builder.parse(new ByteArrayInputStream(data.getBytes("UTF-8")));
+        } 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);
+        }
+        
+        return doc;
+    }
+}
\ No newline at end of file
diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/snippet/io/SnippetWriter.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/model/snippet/io/SnippetWriter.java
new file mode 100644 (file)
index 0000000..d48c7f9
--- /dev/null
@@ -0,0 +1,144 @@
+/*
+ * 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.snippet.io;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+
+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.Part;
+import org.tizen.webuibuilder.model.io.ModelSerializer;
+import org.tizen.webuibuilder.model.io.file.TizenFileFormatter;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+
+public class SnippetWriter {
+
+    /**
+     * Writes a Part.
+     * 
+     * @param part
+     *            a {@link Part}
+     * @param writer
+     *            a writer
+     * @throws IOException
+     */
+    public static void writeTo(Part part, Writer writer) throws IOException {
+       
+       Document doc = makeSnippetTizenFileFormatDocument(part);
+        
+        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);
+            transformer.setOutputProperty(OutputKeys.INDENT, BuilderConstants.YES);
+
+            transformer.transform(source, result);
+        } catch (TransformerConfigurationException e) {
+            e.printStackTrace();
+        } catch (TransformerException e) {
+            e.printStackTrace();
+        }
+
+    }
+    
+    private static Document makeSnippetTizenFileFormatDocument(Part part) {
+       TizenFileFormatter fmt =
+                new TizenFileFormatter("tizen-snippet", "1", "Tizen Web UI Builder Project Snippet");
+
+        Document doc = fmt.GenerateFileFormat();
+        
+        Element documentElement = doc.createElement("document");
+        doc.getDocumentElement().appendChild(documentElement);
+        
+        Element documentInfoElement = doc.createElement("documentInfo");
+        documentElement.appendChild(makeDocumentInfo(doc, documentInfoElement));
+                
+        // set document data
+        Element documentDataElement = doc.createElement("documentData");
+        documentElement.appendChild(documentDataElement);
+        
+        Element snippetElement = doc.createElement("tizen.snippet");
+        documentDataElement.appendChild(snippetElement);
+        
+        Element partElement = ModelSerializer.writePart(doc, part, false);
+        snippetElement.appendChild(partElement);
+        
+        return doc;
+    }
+    
+    private static Element makeDocumentInfo(Document doc, Element documentInfoElement) {
+       
+        Element tempElement = null;
+        
+        tempElement = doc.createElement("title");
+        tempElement.setTextContent("test");
+        documentInfoElement.appendChild(tempElement);
+        
+        tempElement = doc.createElement("author");
+        tempElement.setTextContent("noname");
+        documentInfoElement.appendChild(tempElement);
+        
+        tempElement = doc.createElement("version");
+        tempElement.setTextContent("0.1.1");
+        documentInfoElement.appendChild(tempElement);
+        
+        return documentInfoElement;
+    }
+
+    /**
+     * Writes a page string.
+     * 
+     * @param part
+     *            a {@link Part}
+     * @return page string
+     */
+    public static String writeToString(Part part) {
+        StringWriter writer = new StringWriter();
+        try {
+            writeTo(part, writer);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        return writer.getBuffer().toString();
+    }
+
+}
index ca78159..9f96f92 100644 (file)
@@ -29,6 +29,8 @@ import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.graphics.ImageData;
 import org.eclipse.swt.graphics.ImageLoader;
 import org.tizen.webuibuilder.model.ISerializer;
+import org.tizen.webuibuilder.model.Part;
+import org.tizen.webuibuilder.model.snippet.io.SnippetWriter;
 import org.tizen.webuibuilder.snippet.manager.ISnippetManager;
 import org.tizen.webuibuilder.snippet.manager.SnippetManager;
 import org.tizen.webuibuilder.snippet.model.Descriptor;
@@ -39,6 +41,7 @@ import org.tizen.webuibuilder.ui.wizards.IWizardPolicy;
 
 
 public class CreatePolicy implements IWizardPolicy {
+       private Part part = null;
     private ISerializer model = null;
     private String name = null;
     private String description = null;
@@ -76,7 +79,11 @@ public class CreatePolicy implements IWizardPolicy {
         snippet.setImageDescriptor(imageDescriptor);
         // Create Descriptor
         IDescriptor descriptor = new Descriptor();
-        String text = model.serialize();
+        if(model instanceof Part) {
+               part = (Part) model;
+        }
+//        String text = model.serialize();
+        String text = SnippetWriter.writeToString(part);
         descriptor.setText(text);
         snippet.setDescriptor(descriptor);
 
index a01520c..a3d2ed8 100644 (file)
@@ -145,7 +145,7 @@ public class ComponentsCreator {
         for (ISnippet snippet : snippets) {
             String name = snippet.getName();
             String description = snippet.getDescription();
-            SnippetTemplate template = new SnippetTemplate(snippet);
+            SnippetTemplate template = new SnippetTemplate(snippet, appManager);
             ImageDescriptor smallIcon = snippet.getImageDescriptor();
             CombinedTemplateCreationEntry entry =
                     new CombinedTemplateCreationEntry(name, description, template,
index 297950f..2d61d87 100644 (file)
@@ -143,7 +143,7 @@ public class PaletteRootProvider {
         for (ISnippet snippet : snippets) {
             String name = snippet.getName();
             String description = snippet.getDescription();
-            SnippetTemplate template = new SnippetTemplate(snippet);
+            SnippetTemplate template = new SnippetTemplate(snippet, appManager);
             ImageDescriptor smallIcon = snippet.getImageDescriptor();
             CombinedTemplateCreationEntry entry =
                     new CombinedTemplateCreationEntry(name, description, template,