1 package jp.sourceforge.gokigen.memoma.io;
4 import java.io.FileWriter;
5 import java.util.Enumeration;
7 import org.xmlpull.v1.XmlSerializer;
9 import android.content.Context;
10 import android.graphics.RectF;
11 import android.util.Log;
12 import android.util.Xml;
14 import jp.sourceforge.gokigen.memoma.Main;
15 import jp.sourceforge.gokigen.memoma.holders.MeMoMaObjectHolder;
16 import jp.sourceforge.gokigen.memoma.holders.ObjectConnector;
17 import jp.sourceforge.gokigen.memoma.holders.PositionObject;
22 public class MeMoMaFileSavingEngine
24 private final String TAG = toString();
25 private final Context context;
26 private final String backgroundUri;
27 private final String userCheckboxString;
32 public MeMoMaFileSavingEngine(Context context, String bgUri, String checkBoxLabel)
34 this.context = context;
37 backgroundUri = bgUri;
38 userCheckboxString = checkBoxLabel;
45 private String storeToXmlFile(String fileName, MeMoMaObjectHolder objectHolder)
47 String resultMessage = "";
50 FileWriter writer = new FileWriter(new File(fileName + ".xml"));
51 XmlSerializer serializer = Xml.newSerializer();
53 serializer.setOutput(writer);
54 serializer.startDocument("UTF-8", true);
55 serializer.startTag(Main.APP_NAMESPACE, "memoma");
58 serializer.startTag(Main.APP_NAMESPACE, "title");
59 serializer.text(objectHolder.getDataTitle());
60 serializer. endTag(Main.APP_NAMESPACE, "title");
63 serializer.startTag(Main.APP_NAMESPACE, "background");
64 serializer.text(objectHolder.getBackground());
65 serializer. endTag(Main.APP_NAMESPACE, "background");
68 serializer.startTag(Main.APP_NAMESPACE, "backgroundUri");
69 serializer.text(backgroundUri);
70 serializer. endTag(Main.APP_NAMESPACE, "backgroundUri");
73 serializer.startTag(Main.APP_NAMESPACE, "userCheckboxString");
74 serializer.text(userCheckboxString);
75 serializer. endTag(Main.APP_NAMESPACE, "userCheckboxString");
77 serializer.startTag(Main.APP_NAMESPACE, "objserial");
78 serializer.text(Integer.toString(objectHolder.getSerialNumber()));
79 serializer.endTag(Main.APP_NAMESPACE, "objserial");
81 serializer.startTag(Main.APP_NAMESPACE, "lineserial");
82 serializer.text(Integer.toString(objectHolder.getConnectLineHolder().getSerialNumber()));
83 serializer.endTag(Main.APP_NAMESPACE, "lineserial");
86 // オブジェクトの出力 (保持しているものはすべて表示する)
87 Enumeration<Integer> keys = objectHolder.getObjectKeys();
88 while (keys.hasMoreElements())
90 Integer key = keys.nextElement();
91 PositionObject pos = objectHolder.getPosition(key);
92 RectF posRect = pos.getRect();
93 serializer.startTag(Main.APP_NAMESPACE, "object");
95 serializer.attribute(Main.APP_NAMESPACE, "key", Integer.toString(key));
97 serializer.startTag(Main.APP_NAMESPACE, "rect");
98 serializer.startTag(Main.APP_NAMESPACE, "top");
99 serializer.text(Float.toString(posRect.top));
100 serializer. endTag(Main.APP_NAMESPACE, "top");
101 serializer.startTag(Main.APP_NAMESPACE, "left");
102 serializer.text(Float.toString(posRect.left));
103 serializer. endTag(Main.APP_NAMESPACE, "left");
104 serializer.startTag(Main.APP_NAMESPACE, "right");
105 serializer.text(Float.toString(posRect.right));
106 serializer. endTag(Main.APP_NAMESPACE, "right");
107 serializer.startTag(Main.APP_NAMESPACE, "bottom");
108 serializer.text(Float.toString(posRect.bottom));
109 serializer. endTag(Main.APP_NAMESPACE, "bottom");
110 serializer. endTag(Main.APP_NAMESPACE, "rect");
112 serializer.startTag(Main.APP_NAMESPACE, "drawStyle");
113 serializer.text(Integer.toString(pos.getDrawStyle()));
114 serializer. endTag(Main.APP_NAMESPACE, "drawStyle");
116 serializer.startTag(Main.APP_NAMESPACE, "icon");
117 serializer.text(Integer.toString(pos.getIcon()));
118 serializer. endTag(Main.APP_NAMESPACE, "icon");
120 serializer.startTag(Main.APP_NAMESPACE, "label");
121 serializer.text(pos.getLabel());
122 serializer. endTag(Main.APP_NAMESPACE, "label");
124 serializer.startTag(Main.APP_NAMESPACE, "detail");
125 serializer.text(pos.getDetail());
126 serializer. endTag(Main.APP_NAMESPACE, "detail");
128 serializer.startTag(Main.APP_NAMESPACE, "otherInfoUri");
129 serializer.text(pos.otherInfoUri);
130 serializer. endTag(Main.APP_NAMESPACE, "otherInfoUri");
132 serializer.startTag(Main.APP_NAMESPACE, "backgroundUri");
133 serializer.text(pos.backgroundUri);
134 serializer. endTag(Main.APP_NAMESPACE, "backgroundUri");
136 serializer.startTag(Main.APP_NAMESPACE, "objectStatus");
137 serializer.text(pos.objectStatus);
138 serializer. endTag(Main.APP_NAMESPACE, "objectStatus");
140 serializer.startTag(Main.APP_NAMESPACE, "userChecked");
141 serializer.text(Boolean.toString(pos.getUserChecked()));
142 serializer. endTag(Main.APP_NAMESPACE, "userChecked");
144 serializer.startTag(Main.APP_NAMESPACE, "labelColor");
145 serializer.text(Integer.toString(pos.getLabelColor()));
146 serializer. endTag(Main.APP_NAMESPACE, "labelColor");
148 serializer.startTag(Main.APP_NAMESPACE, "objectColor");
149 serializer.text(Integer.toString(pos.getObjectColor()));
150 serializer. endTag(Main.APP_NAMESPACE, "objectColor");
152 serializer.startTag(Main.APP_NAMESPACE, "paintStyle");
153 serializer.text(pos.getPaintStyle());
154 serializer. endTag(Main.APP_NAMESPACE, "paintStyle");
156 serializer.startTag(Main.APP_NAMESPACE, "strokeWidth");
157 serializer.text(Float.toString(pos.getstrokeWidth()));
158 serializer. endTag(Main.APP_NAMESPACE, "strokeWidth");
160 serializer.startTag(Main.APP_NAMESPACE, "fontSize");
161 serializer.text(Float.toString(pos.getFontSize()));
162 serializer. endTag(Main.APP_NAMESPACE, "fontSize");
164 serializer.endTag(Main.APP_NAMESPACE, "object");
167 // 接続線の出力 (保持しているものはすべて表示する)
168 Enumeration<Integer> lineKeys = objectHolder.getConnectLineHolder().getLineKeys();
169 while (lineKeys.hasMoreElements())
171 Integer key = lineKeys.nextElement();
172 ObjectConnector line = objectHolder.getConnectLineHolder().getLine(key);
173 serializer.startTag(Main.APP_NAMESPACE, "line");
174 serializer.attribute(Main.APP_NAMESPACE, "key", Integer.toString(key));
176 serializer.startTag(Main.APP_NAMESPACE, "fromObjectKey");
177 serializer.text(Integer.toString(line.getFromObjectKey()));
178 serializer.endTag(Main.APP_NAMESPACE, "fromObjectKey");
180 serializer.startTag(Main.APP_NAMESPACE, "toObjectKey");
181 serializer.text(Integer.toString(line.getToObjectKey()));
182 serializer.endTag(Main.APP_NAMESPACE, "toObjectKey");
184 serializer.startTag(Main.APP_NAMESPACE, "lineStyle");
185 serializer.text(Integer.toString(line.getLineStyle()));
186 serializer.endTag(Main.APP_NAMESPACE, "lineStyle");
188 serializer.startTag(Main.APP_NAMESPACE, "lineShape");
189 serializer.text(Integer.toString(line.getLineShape()));
190 serializer.endTag(Main.APP_NAMESPACE, "lineShape");
192 serializer.startTag(Main.APP_NAMESPACE, "lineThickness");
193 serializer.text(Integer.toString(line.getLineThickness()));
194 serializer.endTag(Main.APP_NAMESPACE, "lineThickness");
196 serializer.startTag(Main.APP_NAMESPACE, "fromShape");
197 serializer.text(Integer.toString(line.fromShape));
198 serializer.endTag(Main.APP_NAMESPACE, "fromShape");
200 serializer.startTag(Main.APP_NAMESPACE, "toShape");
201 serializer.text(Integer.toString(line.toShape));
202 serializer.endTag(Main.APP_NAMESPACE, "toShape");
204 serializer.startTag(Main.APP_NAMESPACE, "fromString");
205 serializer.text(line.fromString);
206 serializer.endTag(Main.APP_NAMESPACE, "fromString");
208 serializer.startTag(Main.APP_NAMESPACE, "toString");
209 serializer.text(line.toString);
210 serializer.endTag(Main.APP_NAMESPACE, "toString");
212 serializer.endTag(Main.APP_NAMESPACE, "line");
215 serializer.endTag(Main.APP_NAMESPACE, "memoma");
216 serializer.endDocument();
222 resultMessage = " " + e.getMessage();
223 Log.v(TAG, resultMessage);
226 return (resultMessage);
232 public String saveObjects(MeMoMaObjectHolder objectHolder)
234 // データタイトルがない場合...保存処理は行わない。
235 if (objectHolder.getDataTitle().length() == 0)
237 Log.v(TAG, "MeMoMaFileSavingEngine::saveObjects() : specified file name is illegal, save aborted. : " + objectHolder.getDataTitle() );
242 if (objectHolder.isEmpty())
245 return("Data is empty, not saved.");
248 // データを保管する (ファイル名の設定は、拡張子なし
249 return (storeToXmlFile(context.getFilesDir() + "/" + objectHolder.getDataTitle(), objectHolder));