--- /dev/null
+package twitter.manage;\r
+\r
+import java.io.BufferedReader;\r
+import java.io.IOException;\r
+import java.io.InputStreamReader;\r
+import java.io.StringReader;\r
+import java.net.MalformedURLException;\r
+import java.net.URL;\r
+import java.net.URLConnection;\r
+import java.text.ParseException;\r
+import java.text.SimpleDateFormat;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import javax.xml.parsers.DocumentBuilder;\r
+import javax.xml.parsers.DocumentBuilderFactory;\r
+\r
+import org.w3c.dom.Document;\r
+import org.w3c.dom.Element;\r
+import org.w3c.dom.NodeList;\r
+import org.xml.sax.InputSource;\r
+import org.xml.sax.SAXParseException;\r
+\r
+\r
+\r
+/**\r
+ * バージョン管理\r
+ * @author nishio\r
+ *\r
+ */\r
+public class ClientVersionManager {\r
+ public static final String currentVersion = "0.6";\r
+ public static final String nishioTweetManagerURL = "http://densan-labs.net/software/ntm/";\r
+ private static final String characterSet = "UTF-8";\r
+ private static final String latestInformationURL = "http://git.densan-labs.net/ntm/latest.txt";\r
+\r
+ //xml tag\r
+ private static final String versionTag = "version";\r
+ private static final String logTag = "log";\r
+\r
+ //for singleton\r
+ private static ClientVersionManager versionManager = null;\r
+\r
+ /**\r
+ * singleton\r
+ */\r
+ private ClientVersionManager() {\r
+\r
+ }\r
+\r
+ /**\r
+ * インスタンス取得\r
+ * @return\r
+ */\r
+ public static ClientVersionManager getInstance() {\r
+ if( versionManager == null ) {\r
+ versionManager = new ClientVersionManager();\r
+ }\r
+ return versionManager;\r
+ }\r
+\r
+ /**\r
+ * currentVersionを取得します。\r
+ * @return currentVersion\r
+ */\r
+ public String getCurrentversion() {\r
+ return currentVersion;\r
+ }\r
+\r
+ /**\r
+ * 最新情報を取得\r
+ * @return\r
+ */\r
+ private String getLatestInformation() {\r
+ StringBuffer buf = new StringBuffer("");\r
+ try {\r
+ URL url = new URL(latestInformationURL);\r
+ URLConnection conn = url.openConnection();\r
+ BufferedReader reader = new BufferedReader(\r
+ new InputStreamReader( conn.getInputStream(), characterSet));\r
+ String line = null;\r
+ while( (line = reader.readLine()) != null ) {\r
+ buf.append(line + "\n");\r
+ }\r
+ } catch (MalformedURLException e) {\r
+ e.printStackTrace();\r
+ } catch (IOException e) {\r
+ e.printStackTrace();\r
+ }\r
+ return buf.toString();\r
+ }\r
+\r
+ /**\r
+ * クライアントの最新バージョンの情報を取得する\r
+ * @return\r
+ */\r
+ public static VersionInfo getLatestVersionInfo() {\r
+ ClientVersionManager manager = ClientVersionManager.getInstance();\r
+ String log = manager.getLatestInformation();\r
+ VersionInfo info = null;\r
+ try {\r
+ info = manager.XMLToVersionInfo(log);\r
+ } catch (SAXParseException e) {\r
+ e.printStackTrace();\r
+ }\r
+ return info;\r
+ }\r
+\r
+ /**\r
+ * nishioTweetManagerURLを取得します。\r
+ * @return nishioTweetManagerURL\r
+ */\r
+ public String getNishiotweetmanagerurl() {\r
+ return nishioTweetManagerURL;\r
+ }\r
+\r
+ /**\r
+ * 指定されたエレメントから子要素の内容を取得\r
+ *\r
+ * @param element\r
+ * 指定エレメント\r
+ * @param tagName\r
+ * 指定タグ名\r
+ * @return 取得した内容\r
+ */\r
+ private static String getChildren(Element element, String tagName) {\r
+ NodeList list = element.getElementsByTagName(tagName);\r
+ Element cElement = (Element) list.item(0);\r
+ if (cElement == null || cElement.getFirstChild() == null) {\r
+ return null;\r
+ }\r
+ return cElement.getFirstChild().getNodeValue();\r
+ }\r
+\r
+ /**\r
+ * latest info XMLからデータ取得\r
+ *\r
+ * @param xmlData\r
+ * @return\r
+ * @throws SAXParseException\r
+ */\r
+ public VersionInfo XMLToVersionInfo(String xmlData)\r
+ throws SAXParseException {\r
+ if (xmlData == null) {\r
+ return null;\r
+ }\r
+ try {\r
+ // ドキュメントビルダーファクトリを生成\r
+ DocumentBuilderFactory dbfactory = DocumentBuilderFactory\r
+ .newInstance();\r
+ // ドキュメントビルダーを生成\r
+ DocumentBuilder builder = dbfactory.newDocumentBuilder();\r
+ // パースを実行してDocumentオブジェクトを取得\r
+ Document doc = null;\r
+ // 入力ストリーム作成\r
+ StringReader sr = new StringReader(xmlData);\r
+ InputSource is = new InputSource(sr);\r
+\r
+ doc = builder.parse(is);\r
+\r
+ // ルート要素になっている子ノードを取得\r
+ Element root = doc.getDocumentElement();\r
+ String version = getChildren(root, versionTag);\r
+ String log = getChildren(root, logTag);\r
+\r
+ return new VersionInfo(version, log);\r
+ } catch (SAXParseException e) {\r
+ throw e;\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ }\r
+ return null;\r
+ }\r
+}\r