svnno****@sourc*****
svnno****@sourc*****
2008年 10月 25日 (土) 19:23:48 JST
Revision: 2035 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=jiemamy&view=rev&rev=2035 Author: j5ik2o Date: 2008-10-25 19:23:48 +0900 (Sat, 25 Oct 2008) Log Message: ----------- ModelInputStreamとModelWriterを分割しますた Modified Paths: -------------- artemis/trunk/org.jiemamy.serializer/src/main/java/org/jiemamy/serializer/ModelInputStream.java Added 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/ModelInputStream.java =================================================================== --- artemis/trunk/org.jiemamy.serializer/src/main/java/org/jiemamy/serializer/ModelInputStream.java 2008-10-25 10:14:26 UTC (rev 2034) +++ artemis/trunk/org.jiemamy.serializer/src/main/java/org/jiemamy/serializer/ModelInputStream.java 2008-10-25 10:23:48 UTC (rev 2035) @@ -20,29 +20,17 @@ import java.io.IOException; import java.io.InputStream; -import java.io.StringWriter; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Queue; import java.util.Stack; -import java.util.UUID; import java.util.concurrent.LinkedBlockingQueue; -import com.megginson.sax.DataWriter; - -import org.xml.sax.SAXException; - import org.jiemamy.spec.model.JiemamyModel; import org.jiemamy.spec.model.RootModel; /** - * TODO for junichi + * モデルインプットストリーム。 + * * @author junichi */ public class ModelInputStream extends InputStream { @@ -78,23 +66,6 @@ } /** - * {@inheritDoc} - */ - @Override - public int read() throws IOException { - if (initialized == false) { - modelWriter.init(); - initialized = true; - } - if (resourceQueue.size() == 0) { - if (loadFromModel() == false) { - return -1; - } - } - return resourceQueue.poll().intValue(); - } - - /** * 要求された1モデルだけを読み込み,Byteのキューに追加していく。 * @return 読み込むデータがない場合false, ある場合true * @throws IllegalArgumentException @@ -110,140 +81,20 @@ return resourceQueue.size() > 0 || nextWriteModelStack.empty() == false; } - - private class ModelWriter { - - private Queue<Byte> resourceQueues; - - private DataWriter dataWriter; - - private StringWriter stringWriter; - - private Map<UUID, JiemamyModel> nextWriteModelMaps = new HashMap<UUID, JiemamyModel>(); - - - /** - * コンストラクタ。 - * @param resourceQueues - * @category instance creation - */ - public ModelWriter(Queue<Byte> resourceQueues) { - this.resourceQueues = resourceQueues; - createModelWriter(); + /** + * {@inheritDoc} + */ + @Override + public int read() throws IOException { + if (initialized == false) { + modelWriter.init(); + initialized = true; } - - /** - * 破棄処理を行う。 - */ - public void dispose() { - try { - dataWriter.endDocument(); - } catch (SAXException e) { - e.printStackTrace(); + if (resourceQueue.size() == 0) { + if (loadFromModel() == false) { + return -1; } } - - /** - * 初期化処理を行う。 - */ - public void init() { - try { - dataWriter.startDocument(); - } catch (SAXException e) { - e.printStackTrace(); - } - } - - /** - * TODO ここはリフレクションではなく、直接クラスを指定して書き込むようにすること - * @param jiemamyModel - * @return 書き込まなかったモデルのリスト - */ - public List<JiemamyModel> write(JiemamyModel jiemamyModel) { - List<JiemamyModel> nextWriteModelList = new ArrayList<JiemamyModel>(); - Class<? extends Object> clazz = jiemamyModel.getClass(); - String className = clazz.getName(); - try { - dataWriter.startElement(className); - dataWriter.dataElement("id", jiemamyModel.getId().toString()); - while (clazz != Object.class) { - Method[] methods = clazz.getMethods(); - for (Method method : methods) { - if ((method.getParameterTypes().length > 0) || (method.getName().startsWith("get") == false) - || (method.getModifiers() == Modifier.STATIC)) { - continue; - } - Object value = method.invoke(jiemamyModel, new Object[0]); - if (value != null) { - if (value instanceof String) { - dataWriter.startElement(method.getName()); - dataWriter.dataElement(value.getClass().getName(), (String) value); - dataWriter.endElement(method.getName()); - } else if (value instanceof Number) { - dataWriter.dataElement(method.getName(), ((Number) value).toString()); - } else if (value instanceof JiemamyModel) { - String refClassName = ((JiemamyModel) value).getClass().getName(); - System.out.println(refClassName); - dataWriter.startElement(method.getName()); - dataWriter.startElement(refClassName); - dataWriter.dataElement("refid", ((JiemamyModel) value).getId().toString()); - dataWriter.endElement(refClassName); - dataWriter.endElement(method.getName()); - if (nextWriteModelMaps.containsKey(((JiemamyModel) value).getId()) == false) { - nextWriteModelMaps.put(((JiemamyModel) value).getId(), ((JiemamyModel) value)); - nextWriteModelList.add(((JiemamyModel) value)); - } - } else if (value instanceof Collection) { - if (((Collection<?>) value).size() > 0) { - String refCollectionClassName = ((Collection<?>) value).getClass().getName(); - dataWriter.startElement(method.getName()); - dataWriter.startElement(refCollectionClassName); - for (Object e : ((Collection<?>) value)) { - if (e instanceof JiemamyModel) { - String refClassName = ((JiemamyModel) e).getClass().getName(); - dataWriter.startElement(refClassName); - dataWriter.dataElement("refid", ((JiemamyModel) e).getId().toString()); - dataWriter.endElement(refClassName); - if (nextWriteModelMaps.containsKey(((JiemamyModel) e).getId()) == false) { - nextWriteModelMaps.put(((JiemamyModel) e).getId(), ((JiemamyModel) e)); - nextWriteModelList.add(((JiemamyModel) e)); - } - } - } - dataWriter.endElement(refCollectionClassName); - dataWriter.endElement(method.getName()); - } - } - } - } - clazz = clazz.getSuperclass(); - } - dataWriter.endElement(className); - } catch (SAXException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } catch (IllegalArgumentException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IllegalAccessException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (InvocationTargetException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - for (byte b : stringWriter.toString().getBytes()) { - resourceQueues.add(b); - } - createModelWriter(); - return nextWriteModelList; - } - - private void createModelWriter() { - stringWriter = (new StringWriter()); - dataWriter = (new DataWriter(stringWriter)); - dataWriter.setIndentStep(2); - } - + return resourceQueue.poll().intValue(); } } Added: 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 (rev 0) +++ artemis/trunk/org.jiemamy.serializer/src/main/java/org/jiemamy/serializer/ModelWriter.java 2008-10-25 10:23:48 UTC (rev 2035) @@ -0,0 +1,174 @@ +/* + * Copyright 2007-2008 MIYAMOTO Daisuke, jiemamy.org and the Others. + * Created on 2008/10/25 + * + * This file is part of Jiemamy. + * + * 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. + */ +package org.jiemamy.serializer; + +import java.io.StringWriter; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Queue; +import java.util.UUID; + +import com.megginson.sax.DataWriter; + +import org.xml.sax.SAXException; + +import org.jiemamy.spec.model.JiemamyModel; + +/** + * モデルライター。 + * + * @author j5ik2o + */ +public class ModelWriter { + + private Queue<Byte> resourceQueues; + + private DataWriter dataWriter; + + private StringWriter stringWriter; + + private Map<UUID, JiemamyModel> nextWriteModelMaps = new HashMap<UUID, JiemamyModel>(); + + + /** + * コンストラクタ。 + * @param resourceQueues + * @category instance creation + */ + public ModelWriter(Queue<Byte> resourceQueues) { + this.resourceQueues = resourceQueues; + createWriters(); + } + + private void createWriters() { + stringWriter = (new StringWriter()); + dataWriter = (new DataWriter(stringWriter)); + dataWriter.setIndentStep(2); + } + + /** + * 破棄処理を行う。 + */ + public void dispose() { + try { + dataWriter.endDocument(); + } catch (SAXException e) { + e.printStackTrace(); + } + } + + /** + * 初期化処理を行う。 + */ + public void init() { + try { + dataWriter.startDocument(); + } catch (SAXException e) { + e.printStackTrace(); + } + } + + /** + * TODO ここはリフレクションではなく、直接クラスを指定して書き込むようにすること + * @param jiemamyModel + * @return 書き込まなかったモデルのリスト + */ + public List<JiemamyModel> write(JiemamyModel jiemamyModel) { + List<JiemamyModel> nextWriteModelList = new ArrayList<JiemamyModel>(); + Class<? extends Object> clazz = jiemamyModel.getClass(); + String className = clazz.getName(); + try { + dataWriter.startElement(className); + dataWriter.dataElement("id", jiemamyModel.getId().toString()); + while (clazz != Object.class) { + Method[] methods = clazz.getMethods(); + for (Method method : methods) { + if ((method.getParameterTypes().length > 0) || (method.getName().startsWith("get") == false) + || (method.getModifiers() == Modifier.STATIC)) { + continue; + } + Object value = method.invoke(jiemamyModel, new Object[0]); + if (value != null) { + if (value instanceof String) { + dataWriter.startElement(method.getName()); + dataWriter.dataElement(value.getClass().getName(), (String) value); + dataWriter.endElement(method.getName()); + } else if (value instanceof Number) { + dataWriter.dataElement(method.getName(), ((Number) value).toString()); + } else if (value instanceof JiemamyModel) { + String refClassName = ((JiemamyModel) value).getClass().getName(); + System.out.println(refClassName); + dataWriter.startElement(method.getName()); + dataWriter.startElement(refClassName); + dataWriter.dataElement("refid", ((JiemamyModel) value).getId().toString()); + dataWriter.endElement(refClassName); + dataWriter.endElement(method.getName()); + if (nextWriteModelMaps.containsKey(((JiemamyModel) value).getId()) == false) { + nextWriteModelMaps.put(((JiemamyModel) value).getId(), ((JiemamyModel) value)); + nextWriteModelList.add(((JiemamyModel) value)); + } + } else if (value instanceof Collection) { + if (((Collection<?>) value).size() > 0) { + String refCollectionClassName = ((Collection<?>) value).getClass().getName(); + dataWriter.startElement(method.getName()); + dataWriter.startElement(refCollectionClassName); + for (Object e : ((Collection<?>) value)) { + if (e instanceof JiemamyModel) { + String refClassName = ((JiemamyModel) e).getClass().getName(); + dataWriter.startElement(refClassName); + dataWriter.dataElement("refid", ((JiemamyModel) e).getId().toString()); + dataWriter.endElement(refClassName); + if (nextWriteModelMaps.containsKey(((JiemamyModel) e).getId()) == false) { + nextWriteModelMaps.put(((JiemamyModel) e).getId(), ((JiemamyModel) e)); + nextWriteModelList.add(((JiemamyModel) e)); + } + } + } + dataWriter.endElement(refCollectionClassName); + dataWriter.endElement(method.getName()); + } + } + } + } + clazz = clazz.getSuperclass(); + } + dataWriter.endElement(className); + } catch (SAXException e1) { + e1.printStackTrace(); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + for (byte b : stringWriter.toString().getBytes()) { + resourceQueues.add(b); + } + createWriters(); + return nextWriteModelList; + } + +} Property changes on: artemis/trunk/org.jiemamy.serializer/src/main/java/org/jiemamy/serializer/ModelWriter.java ___________________________________________________________________ Name: svn:mime-type + text/plain