[Jiemamy-notify] commit [2051] ModelWriterをとりあえずスケルトンにしてみる。

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2008年 10月 27日 (月) 02:27:42 JST


Revision: 2051
          http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=jiemamy&view=rev&rev=2051
Author:   daisuke_m
Date:     2008-10-27 02:27:42 +0900 (Mon, 27 Oct 2008)

Log Message:
-----------
ModelWriterをとりあえずスケルトンにしてみる。

Modified Paths:
--------------
    artemis/trunk/org.jiemamy.serializer/src/main/java/org/jiemamy/serializer/ModelWriter.java


-------------- next part --------------
Modified: artemis/trunk/org.jiemamy.serializer/src/main/java/org/jiemamy/serializer/ModelWriter.java
===================================================================
--- artemis/trunk/org.jiemamy.serializer/src/main/java/org/jiemamy/serializer/ModelWriter.java	2008-10-26 17:24:45 UTC (rev 2050)
+++ artemis/trunk/org.jiemamy.serializer/src/main/java/org/jiemamy/serializer/ModelWriter.java	2008-10-26 17:27:42 UTC (rev 2051)
@@ -19,9 +19,6 @@
 package org.jiemamy.serializer;
 
 import java.io.StringWriter;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Map;
 import java.util.Queue;
 import java.util.Stack;
 import java.util.concurrent.LinkedBlockingQueue;
@@ -30,7 +27,6 @@
 
 import org.xml.sax.SAXException;
 
-import org.jiemamy.spec.model.JiemamyModel;
 import org.jiemamy.spec.model.RootModel;
 
 /**
@@ -45,6 +41,8 @@
 	
 	private Queue<XmlElement> currentQueue;
 	
+	private XmlElement currentElement;
+	
 	private DataWriter dataWriter = new DataWriter();
 	
 	private Queue<Byte> resourceQueue;
@@ -93,71 +91,73 @@
 	 * と定義。</p>
 	 * 
 	 * @return 出力する対象がもう残っていない場合は <code>false</code>
+	 * @throws SAXException 
 	 */
-	public boolean write() {
+	public boolean write() throws SAXException {
 		StringWriter sw = new StringWriter();
 		dataWriter.setOutput(sw); // 毎回出力先を更新する
 		
-		XmlElement currentElement = null;
+//		// 次に出力すべきエレメントの特定
+//		boolean opened = true;
+//		while (currentElement == null) {
+//			if (currentQueue == null) {
+//				if (nextWriteModelStack.empty()) {
+//					return false;
+//				}
+//				currentQueue = nextWriteModelStack.peek();
+//			}
+//			
+//			if (currentQueue.isEmpty()) {
+//				dataWriter.endElement(currentElement.name);
+//				nextWriteModelStack.pop();
+//				currentQueue = null;
+//				currentElement = null;
+//			} else {
+//				currentElement = currentQueue.poll();
+//				opened = false;
+//			}
+//		}
+//		
+//		// モデルの出力
+//		if (currentElement.content instanceof JiemamyModel) {
+//			if (opened == false) {
+//				dataWriter.startElement(currentElement.name);
+//			}
+//			writeJiemamyModel(currentElement);
+//		} else if (currentElement.content instanceof Collection) {
+//			Collection<?> collection = (Collection<?>) currentElement.content;
+//			Iterator<?> iterator = collection.iterator();
+//			Queue<XmlElement> queue = new LinkedBlockingQueue<XmlElement>();
+//			while (iterator.hasNext()) {
+//				queue.add(new XmlElement("TODO", iterator.next()));
+//			}
+//			nextWriteModelStack.push(queue);
+//		} else if (currentElement.content instanceof Map) {
+//			Map map = (Map) currentElement.content;
+//			// TODO Mapの時の処理
+//		} else {
+//			write(currentElement);
+//		}
 		
-		// 次に出力すべきエレメントの特定
-		do {
-			if (currentQueue == null) {
-				if (nextWriteModelStack.empty()) {
-					return false;
-				}
-				currentQueue = nextWriteModelStack.peek();
-			}
-			
-			if (currentQueue.isEmpty()) {
-				nextWriteModelStack.pop();
-				currentQueue = null;
-			} else {
-				currentElement = currentQueue.poll();
-			}
-		} while (currentElement == null);
-		
-		// モデルの出力
-		if (currentElement.content instanceof JiemamyModel) {
-			writeJiemamyModel(currentElement);
-		} else if (currentElement.content instanceof Collection) {
-			Collection<?> collection = (Collection<?>) currentElement.content;
-			Iterator<?> iterator = collection.iterator();
-			Queue<XmlElement> queue = new LinkedBlockingQueue<XmlElement>();
-			while (iterator.hasNext()) {
-				queue.add(new XmlElement("TODO", iterator.next()));
-			}
-			nextWriteModelStack.push(queue);
-		} else if (currentElement.content instanceof Map) {
-			Map map = (Map) currentElement.content;
-			// TODO Mapの時の処理
-		} else {
-			write(currentElement);
-		}
-		
-		// 前回 #write以降の出力をキューに突っ込む
+		// 今回出力された内容をキューに突っ込む
 		for (byte b : sw.toString().getBytes()) {
 			resourceQueue.add(b);
 		}
 		
-		return resourceQueue.size() > 0 || nextWriteModelStack.empty() == false;
+		return resourceQueue.size() > 0;
 		
 	}
 	
 	/**
 	 * TODO for daisuke
 	 * @param element
+	 * @throws SAXException 
 	 */
-	private void write(XmlElement element) {
-		try {
-			if (element.content == null) {
-				dataWriter.emptyElement(element.name);
-			} else {
-				dataWriter.dataElement(element.name, element.content.toString());
-			}
-		} catch (SAXException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+	private void write(XmlElement element) throws SAXException {
+		if (element.content == null) {
+			dataWriter.emptyElement(element.name);
+		} else {
+			dataWriter.dataElement(element.name, element.content.toString());
 		}
 	}
 	
@@ -167,7 +167,11 @@
 	 */
 	private void writeJiemamyModel(XmlElement currentElement) {
 		// TODO Auto-generated method stub
-		
+//		if(currentElement.content instanceof TableModel) {
+		Queue<XmlElement> queue = new LinkedBlockingQueue<XmlElement>();
+		queue.add(new XmlElement("a", "b"));
+		nextWriteModelStack.push(queue);
+//		}
 	}
 	
 }


Jiemamy-notify メーリングリストの案内
Back to archive index