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.R;
16 import jp.sourceforge.gokigen.memoma.holders.MeMoMaObjectHolder;
17 import jp.sourceforge.gokigen.memoma.holders.ObjectConnector;
18 import jp.sourceforge.gokigen.memoma.holders.PositionObject;
23 public class MeMoMaFileSavingEngine
25 private final String TAG = toString();
26 private final Context context;
27 private final String backgroundUri;
28 private final String userCheckboxString;
33 public MeMoMaFileSavingEngine(Context context, String bgUri, String checkBoxLabel)
35 this.context = context;
38 backgroundUri = bgUri;
39 userCheckboxString = checkBoxLabel;
46 private String storeToXmlFile(String fileName, MeMoMaObjectHolder objectHolder)
48 String resultMessage = "";
51 FileWriter writer = new FileWriter(fileName + ".xml");
52 XmlSerializer serializer = Xml.newSerializer();
54 serializer.setOutput(writer);
55 serializer.startDocument("UTF-8", true);
56 serializer.startTag(Main.APP_NAMESPACE, "memoma");
59 serializer.startTag(Main.APP_NAMESPACE, "title");
60 serializer.text(objectHolder.getDataTitle());
61 serializer. endTag(Main.APP_NAMESPACE, "title");
64 serializer.startTag(Main.APP_NAMESPACE, "background");
65 serializer.text(objectHolder.getBackground());
66 serializer. endTag(Main.APP_NAMESPACE, "background");
69 serializer.startTag(Main.APP_NAMESPACE, "backgroundUri");
70 serializer.text(backgroundUri);
71 serializer. endTag(Main.APP_NAMESPACE, "backgroundUri");
74 serializer.startTag(Main.APP_NAMESPACE, "userCheckboxString");
75 serializer.text(userCheckboxString);
76 serializer. endTag(Main.APP_NAMESPACE, "userCheckboxString");
78 serializer.startTag(Main.APP_NAMESPACE, "objserial");
79 serializer.text(Integer.toString(objectHolder.getSerialNumber()));
80 serializer.endTag(Main.APP_NAMESPACE, "objserial");
82 serializer.startTag(Main.APP_NAMESPACE, "lineserial");
83 serializer.text(Integer.toString(objectHolder.getConnectLineHolder().getSerialNumber()));
84 serializer.endTag(Main.APP_NAMESPACE, "lineserial");
87 // オブジェクトの出力 (保持しているものはすべて表示する)
88 Enumeration<Integer> keys = objectHolder.getObjectKeys();
89 while (keys.hasMoreElements())
91 Integer key = keys.nextElement();
92 PositionObject pos = objectHolder.getPosition(key);
93 RectF posRect = pos.getRect();
94 serializer.startTag(Main.APP_NAMESPACE, "object");
96 serializer.attribute(Main.APP_NAMESPACE, "key", Integer.toString(key));
98 serializer.startTag(Main.APP_NAMESPACE, "rect");
99 serializer.startTag(Main.APP_NAMESPACE, "top");
100 serializer.text(Float.toString(posRect.top));
101 serializer. endTag(Main.APP_NAMESPACE, "top");
102 serializer.startTag(Main.APP_NAMESPACE, "left");
103 serializer.text(Float.toString(posRect.left));
104 serializer. endTag(Main.APP_NAMESPACE, "left");
105 serializer.startTag(Main.APP_NAMESPACE, "right");
106 serializer.text(Float.toString(posRect.right));
107 serializer. endTag(Main.APP_NAMESPACE, "right");
108 serializer.startTag(Main.APP_NAMESPACE, "bottom");
109 serializer.text(Float.toString(posRect.bottom));
110 serializer. endTag(Main.APP_NAMESPACE, "bottom");
111 serializer. endTag(Main.APP_NAMESPACE, "rect");
113 serializer.startTag(Main.APP_NAMESPACE, "drawStyle");
114 serializer.text(Integer.toString(pos.getDrawStyle()));
115 serializer. endTag(Main.APP_NAMESPACE, "drawStyle");
117 serializer.startTag(Main.APP_NAMESPACE, "icon");
118 serializer.text(Integer.toString(pos.getIcon()));
119 serializer. endTag(Main.APP_NAMESPACE, "icon");
121 serializer.startTag(Main.APP_NAMESPACE, "label");
122 serializer.text(pos.getLabel());
123 serializer. endTag(Main.APP_NAMESPACE, "label");
125 serializer.startTag(Main.APP_NAMESPACE, "detail");
126 serializer.text(pos.getDetail());
127 serializer. endTag(Main.APP_NAMESPACE, "detail");
129 serializer.startTag(Main.APP_NAMESPACE, "otherInfoUri");
130 serializer.text(pos.otherInfoUri);
131 serializer. endTag(Main.APP_NAMESPACE, "otherInfoUri");
133 serializer.startTag(Main.APP_NAMESPACE, "backgroundUri");
134 serializer.text(pos.backgroundUri);
135 serializer. endTag(Main.APP_NAMESPACE, "backgroundUri");
137 serializer.startTag(Main.APP_NAMESPACE, "objectStatus");
138 serializer.text(pos.objectStatus);
139 serializer. endTag(Main.APP_NAMESPACE, "objectStatus");
141 serializer.startTag(Main.APP_NAMESPACE, "userChecked");
142 serializer.text(Boolean.toString(pos.getUserChecked()));
143 serializer. endTag(Main.APP_NAMESPACE, "userChecked");
145 serializer.startTag(Main.APP_NAMESPACE, "labelColor");
146 serializer.text(Integer.toString(pos.getLabelColor()));
147 serializer. endTag(Main.APP_NAMESPACE, "labelColor");
149 serializer.startTag(Main.APP_NAMESPACE, "objectColor");
150 serializer.text(Integer.toString(pos.getObjectColor()));
151 serializer. endTag(Main.APP_NAMESPACE, "objectColor");
153 serializer.startTag(Main.APP_NAMESPACE, "paintStyle");
154 serializer.text(pos.getPaintStyle());
155 serializer. endTag(Main.APP_NAMESPACE, "paintStyle");
157 serializer.startTag(Main.APP_NAMESPACE, "strokeWidth");
158 serializer.text(Float.toString(pos.getstrokeWidth()));
159 serializer. endTag(Main.APP_NAMESPACE, "strokeWidth");
161 serializer.startTag(Main.APP_NAMESPACE, "fontSize");
162 serializer.text(Float.toString(pos.getFontSize()));
163 serializer. endTag(Main.APP_NAMESPACE, "fontSize");
165 serializer.endTag(Main.APP_NAMESPACE, "object");
168 // 接続線の出力 (保持しているものはすべて表示する)
169 Enumeration<Integer> lineKeys = objectHolder.getConnectLineHolder().getLineKeys();
170 while (lineKeys.hasMoreElements())
172 Integer key = lineKeys.nextElement();
173 ObjectConnector line = objectHolder.getConnectLineHolder().getLine(key);
174 serializer.startTag(Main.APP_NAMESPACE, "line");
175 serializer.attribute(Main.APP_NAMESPACE, "key", Integer.toString(key));
177 serializer.startTag(Main.APP_NAMESPACE, "fromObjectKey");
178 serializer.text(Integer.toString(line.getFromObjectKey()));
179 serializer.endTag(Main.APP_NAMESPACE, "fromObjectKey");
181 serializer.startTag(Main.APP_NAMESPACE, "toObjectKey");
182 serializer.text(Integer.toString(line.getToObjectKey()));
183 serializer.endTag(Main.APP_NAMESPACE, "toObjectKey");
185 serializer.startTag(Main.APP_NAMESPACE, "lineStyle");
186 serializer.text(Integer.toString(line.getLineStyle()));
187 serializer.endTag(Main.APP_NAMESPACE, "lineStyle");
189 serializer.startTag(Main.APP_NAMESPACE, "lineShape");
190 serializer.text(Integer.toString(line.getLineShape()));
191 serializer.endTag(Main.APP_NAMESPACE, "lineShape");
193 serializer.startTag(Main.APP_NAMESPACE, "lineThickness");
194 serializer.text(Integer.toString(line.getLineThickness()));
195 serializer.endTag(Main.APP_NAMESPACE, "lineThickness");
197 serializer.startTag(Main.APP_NAMESPACE, "fromShape");
198 serializer.text(Integer.toString(line.fromShape));
199 serializer.endTag(Main.APP_NAMESPACE, "fromShape");
201 serializer.startTag(Main.APP_NAMESPACE, "toShape");
202 serializer.text(Integer.toString(line.toShape));
203 serializer.endTag(Main.APP_NAMESPACE, "toShape");
205 serializer.startTag(Main.APP_NAMESPACE, "fromString");
206 serializer.text(line.fromString);
207 serializer.endTag(Main.APP_NAMESPACE, "fromString");
209 serializer.startTag(Main.APP_NAMESPACE, "toString");
210 serializer.text(line.toString);
211 serializer.endTag(Main.APP_NAMESPACE, "toString");
213 serializer.endTag(Main.APP_NAMESPACE, "line");
216 serializer.endTag(Main.APP_NAMESPACE, "memoma");
217 serializer.endDocument();
223 resultMessage = " " + e.getMessage();
224 Log.v(TAG, resultMessage);
227 return (resultMessage);
233 public String saveObjects(MeMoMaObjectHolder objectHolder)
235 // データタイトルがない場合...保存処理は行わない。
236 if (objectHolder.getDataTitle().length() == 0)
238 Log.v(TAG, "MeMoMaFileSavingEngine::saveObjects() : specified file name is illegal, save aborted. : " + objectHolder.getDataTitle() );
242 if (objectHolder.isEmpty())
247 String fileName = context.getFilesDir() + "/" + objectHolder.getDataTitle() + ".xml";
248 File checkFile = new File(fileName);
249 if (!checkFile.exists())
251 // ファイルが存在しない場合、新規ファイルを作成する
252 if (checkFile.createNewFile())
254 Log.v(TAG, "create New File.");
255 return (context.getString(R.string.createnew));
264 return(context.getString(R.string.none_object));
267 // データを保管する (ファイル名の設定は、拡張子なし
268 return (storeToXmlFile(context.getFilesDir() + "/" + objectHolder.getDataTitle(), objectHolder));