OSDN Git Service

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