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); +// } } }