OSDN Git Service

d27b461b61a5c6d5e8cefbf501145f262c4f461c
[gokigen/MeMoMa.git] / app / src / main / java / jp / sourceforge / gokigen / memoma / io / MeMoMaFileSavingEngine.java
1 package jp.sourceforge.gokigen.memoma.io;
2
3 import java.io.File;
4 import java.io.FileWriter;
5 import java.util.Enumeration;
6
7 import org.xmlpull.v1.XmlSerializer;
8
9 import android.content.Context;
10 import android.graphics.RectF;
11 import android.util.Log;
12 import android.util.Xml;
13
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;
18
19 /**
20  *  データをファイルに保存するエンジン部分
21  */
22 public class MeMoMaFileSavingEngine
23 {
24     private final String TAG = toString();
25     private final Context context;
26         private final String backgroundUri;
27         private final String userCheckboxString;
28         
29         /**
30          *   コンストラクタ
31          */
32     public MeMoMaFileSavingEngine(Context context, String bgUri, String checkBoxLabel)
33     {
34         this.context = context;
35
36         //  設定データ読み出し用...。
37         backgroundUri = bgUri;
38         userCheckboxString = checkBoxLabel;
39     }
40
41     /**
42      *    データを(XML形式で)保管する。
43      *
44      */
45     private String storeToXmlFile(String fileName, MeMoMaObjectHolder objectHolder)
46     {
47         String resultMessage = "";
48         try
49         {
50             FileWriter writer = new FileWriter(new File(fileName + ".xml"));            
51             XmlSerializer serializer = Xml.newSerializer();
52
53             serializer.setOutput(writer);
54             serializer.startDocument("UTF-8", true);
55             serializer.startTag(Main.APP_NAMESPACE, "memoma");
56             
57             // タイトルの出力
58             serializer.startTag(Main.APP_NAMESPACE, "title");
59             serializer.text(objectHolder.getDataTitle());
60             serializer. endTag(Main.APP_NAMESPACE, "title");
61
62             // 背景情報の出力
63             serializer.startTag(Main.APP_NAMESPACE, "background");
64             serializer.text(objectHolder.getBackground());
65             serializer. endTag(Main.APP_NAMESPACE, "background");
66
67             // 背景画像URIの出力
68             serializer.startTag(Main.APP_NAMESPACE, "backgroundUri");
69             serializer.text(backgroundUri);
70             serializer. endTag(Main.APP_NAMESPACE, "backgroundUri");
71             
72             // ユーザチェックボックス名の出力
73             serializer.startTag(Main.APP_NAMESPACE, "userCheckboxString");
74             serializer.text(userCheckboxString);
75             serializer. endTag(Main.APP_NAMESPACE, "userCheckboxString");
76             
77             serializer.startTag(Main.APP_NAMESPACE, "objserial");
78             serializer.text(Integer.toString(objectHolder.getSerialNumber()));
79             serializer.endTag(Main.APP_NAMESPACE, "objserial");
80
81             serializer.startTag(Main.APP_NAMESPACE, "lineserial");
82             serializer.text(Integer.toString(objectHolder.getConnectLineHolder().getSerialNumber()));
83             serializer.endTag(Main.APP_NAMESPACE, "lineserial");
84             
85             
86                 // オブジェクトの出力 (保持しているものはすべて表示する)
87                 Enumeration<Integer> keys = objectHolder.getObjectKeys();
88             while (keys.hasMoreElements())
89             {
90                 Integer key = keys.nextElement();
91                 PositionObject pos = objectHolder.getPosition(key);
92                 RectF posRect = pos.getRect();
93                 serializer.startTag(Main.APP_NAMESPACE, "object");
94
95                 serializer.attribute(Main.APP_NAMESPACE, "key", Integer.toString(key));
96
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");
111
112                 serializer.startTag(Main.APP_NAMESPACE, "drawStyle");
113                 serializer.text(Integer.toString(pos.getDrawStyle()));
114                 serializer. endTag(Main.APP_NAMESPACE, "drawStyle");
115
116                 serializer.startTag(Main.APP_NAMESPACE, "icon");
117                 serializer.text(Integer.toString(pos.getIcon()));
118                 serializer. endTag(Main.APP_NAMESPACE, "icon");
119
120                 serializer.startTag(Main.APP_NAMESPACE, "label");
121                 serializer.text(pos.getLabel());
122                 serializer. endTag(Main.APP_NAMESPACE, "label");
123
124                 serializer.startTag(Main.APP_NAMESPACE, "detail");
125                 serializer.text(pos.getDetail());
126                 serializer. endTag(Main.APP_NAMESPACE, "detail");
127 /*
128                 serializer.startTag(Main.APP_NAMESPACE, "otherInfoUri");
129                 serializer.text(pos.otherInfoUri);
130                 serializer. endTag(Main.APP_NAMESPACE, "otherInfoUri");
131
132                 serializer.startTag(Main.APP_NAMESPACE, "backgroundUri");
133                 serializer.text(pos.backgroundUri);
134                 serializer. endTag(Main.APP_NAMESPACE, "backgroundUri");
135
136                 serializer.startTag(Main.APP_NAMESPACE, "objectStatus");
137                 serializer.text(pos.objectStatus);
138                 serializer. endTag(Main.APP_NAMESPACE, "objectStatus");
139 */
140                 serializer.startTag(Main.APP_NAMESPACE, "userChecked");
141                 serializer.text(Boolean.toString(pos.getUserChecked()));
142                 serializer. endTag(Main.APP_NAMESPACE, "userChecked");
143                 
144                 serializer.startTag(Main.APP_NAMESPACE, "labelColor");
145                 serializer.text(Integer.toString(pos.getLabelColor()));
146                 serializer. endTag(Main.APP_NAMESPACE, "labelColor");
147
148                 serializer.startTag(Main.APP_NAMESPACE, "objectColor");
149                 serializer.text(Integer.toString(pos.getObjectColor()));
150                 serializer. endTag(Main.APP_NAMESPACE, "objectColor");
151
152                 serializer.startTag(Main.APP_NAMESPACE, "paintStyle");
153                 serializer.text(pos.getPaintStyle());
154                 serializer. endTag(Main.APP_NAMESPACE, "paintStyle");
155                
156                 serializer.startTag(Main.APP_NAMESPACE, "strokeWidth");
157                 serializer.text(Float.toString(pos.getstrokeWidth()));
158                 serializer. endTag(Main.APP_NAMESPACE, "strokeWidth");
159
160                 serializer.startTag(Main.APP_NAMESPACE, "fontSize");
161                 serializer.text(Float.toString(pos.getFontSize()));
162                 serializer. endTag(Main.APP_NAMESPACE, "fontSize");
163
164                 serializer.endTag(Main.APP_NAMESPACE, "object");
165             }
166
167             // 接続線の出力 (保持しているものはすべて表示する)
168                 Enumeration<Integer> lineKeys = objectHolder.getConnectLineHolder().getLineKeys();
169             while (lineKeys.hasMoreElements())
170             {
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));
175
176                 serializer.startTag(Main.APP_NAMESPACE, "fromObjectKey");
177                 serializer.text(Integer.toString(line.getFromObjectKey()));
178                 serializer.endTag(Main.APP_NAMESPACE, "fromObjectKey");
179
180                 serializer.startTag(Main.APP_NAMESPACE, "toObjectKey");
181                 serializer.text(Integer.toString(line.getToObjectKey()));
182                 serializer.endTag(Main.APP_NAMESPACE, "toObjectKey");
183
184                 serializer.startTag(Main.APP_NAMESPACE, "lineStyle");
185                 serializer.text(Integer.toString(line.getLineStyle()));
186                 serializer.endTag(Main.APP_NAMESPACE, "lineStyle");
187
188                 serializer.startTag(Main.APP_NAMESPACE, "lineShape");
189                 serializer.text(Integer.toString(line.getLineShape()));
190                 serializer.endTag(Main.APP_NAMESPACE, "lineShape");
191
192                 serializer.startTag(Main.APP_NAMESPACE, "lineThickness");
193                 serializer.text(Integer.toString(line.getLineThickness()));
194                 serializer.endTag(Main.APP_NAMESPACE, "lineThickness");
195 /*
196                 serializer.startTag(Main.APP_NAMESPACE, "fromShape");
197                 serializer.text(Integer.toString(line.fromShape));
198                 serializer.endTag(Main.APP_NAMESPACE, "fromShape");
199
200                 serializer.startTag(Main.APP_NAMESPACE, "toShape");
201                 serializer.text(Integer.toString(line.toShape));
202                 serializer.endTag(Main.APP_NAMESPACE, "toShape");
203                 
204                 serializer.startTag(Main.APP_NAMESPACE, "fromString");
205                 serializer.text(line.fromString);
206                 serializer.endTag(Main.APP_NAMESPACE, "fromString");
207
208                 serializer.startTag(Main.APP_NAMESPACE, "toString");
209                 serializer.text(line.toString);
210                 serializer.endTag(Main.APP_NAMESPACE, "toString");
211 */
212                 serializer.endTag(Main.APP_NAMESPACE, "line");
213             }
214
215             serializer.endTag(Main.APP_NAMESPACE, "memoma");
216             serializer.endDocument();
217             serializer.flush();
218             writer.close();
219         }
220         catch (Exception e)
221         {
222             resultMessage = " " + e.getMessage();
223             Log.v(TAG, resultMessage);
224             e.printStackTrace();
225         }
226         return (resultMessage);
227     }
228
229     /**
230      *    オブジェクトを保存する
231      */
232     public String saveObjects(MeMoMaObjectHolder objectHolder)
233     {
234                 // データタイトルがない場合...保存処理は行わない。
235         if (objectHolder.getDataTitle().length() == 0)
236         {
237                 Log.v(TAG, "MeMoMaFileSavingEngine::saveObjects() : specified file name is illegal, save aborted. : " + objectHolder.getDataTitle() );
238
239                 return ("");
240         }
241
242         if (objectHolder.isEmpty())
243         {
244             // データがない場合は保存しない
245             return("Data is empty, not saved.");
246         }
247
248         // データを保管する (ファイル名の設定は、拡張子なし
249         return (storeToXmlFile(context.getFilesDir() + "/" + objectHolder.getDataTitle(), objectHolder));
250     }
251 }