[Jiemamy-notify] commit [2035] ModelInputStreamとModelWriterを分割しますた

Back to archive index

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


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