--- /dev/null
+<?xml version="1.0"?>\r
+<character\r
+ xmlns="http://charactermanaj.sourceforge.jp/schema/charactermanaj"\r
+ xmlns:xml="http://www.w3.org/XML/1998/namespace"\r
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+ xsi:schemaLocation="http://charactermanaj.sourceforge.jp/schema/charactermanaj character.xsd"\r
+ version="1.0"\r
+ id="default"\r
+ rev="default">\r
+\r
+ <name xml:lang="en">Default</name>\r
+ <name xml:lang="ja">デフォルト</name>\r
+\r
+ <information>\r
+ <author xml:lang="en">Unknown</author>\r
+ <author xml:lang="ja">名無し</author>\r
+ <description xml:lang="en"><![CDATA[default character]]></description>\r
+ <description xml:lang="ja"><![CDATA[デフォルトのキャラクター(キャラクターなんとか機Ver3互換セット)]]></description>\r
+ </information>\r
+\r
+ <image-size>\r
+ <width>300</width>\r
+ <height>400</height>\r
+ </image-size>\r
+\r
+ <settings>\r
+ <entry key="watch-dir">true</entry>\r
+ </settings>\r
+ \r
+ <categories>\r
+ <category id="hair_front" multipleSelectable="false">\r
+ <visible-rows>6</visible-rows>\r
+ <display-name xml:lang="en">Hair - Front</display-name>\r
+ <display-name xml:lang="ja">髪型 - 手前</display-name>\r
+ <layers>\r
+ <layer id="hair_front">\r
+ <display-name xml:lang="en">Variable</display-name>\r
+ <display-name xml:lang="ja">可変色</display-name>\r
+ <order>12</order>\r
+ <colorGroup refid="color-hair" init-sync="true"/>\r
+ <dir>hair_front</dir>\r
+ <colorModel>HSB</colorModel>\r
+ </layer>\r
+ <layer id="hair_front_accessory">\r
+ <display-name xml:lang="en">Accessory</display-name>\r
+ <display-name xml:lang="ja">アクセサリ</display-name>\r
+ <order>13</order>\r
+ <dir>hair_front_accessory</dir>\r
+ <colorModel>HSB</colorModel>\r
+ </layer>\r
+ </layers>\r
+ </category>\r
+ <category id="hair_back" multipleSelectable="false">\r
+ <visible-rows>6</visible-rows>\r
+ <display-name xml:lang="en">Hair - Back</display-name>\r
+ <display-name xml:lang="ja">髪型 - 後ろ</display-name>\r
+ <layers>\r
+ <layer id="hair_back">\r
+ <display-name xml:lang="en">Variable</display-name>\r
+ <display-name xml:lang="ja">可変色</display-name>\r
+ <order>2</order>\r
+ <colorGroup refid="color-hair" init-sync="true"/>\r
+ <dir>hair_back</dir>\r
+ <colorModel>HSB</colorModel>\r
+ </layer>\r
+ <layer id="hair_back_accessory">\r
+ <display-name xml:lang="en">Accessory</display-name>\r
+ <display-name xml:lang="ja">アクセサリ</display-name>\r
+ <order>3</order>\r
+ <dir>hair_back_accessory</dir>\r
+ <colorModel>HSB</colorModel>\r
+ </layer>\r
+ </layers>\r
+ </category>\r
+ <category id="head" multipleSelectable="false">\r
+ <visible-rows>6</visible-rows>\r
+ <display-name xml:lang="en">Head</display-name>\r
+ <display-name xml:lang="ja">頭</display-name>\r
+ <layers>\r
+ <layer id="head">\r
+ <display-name xml:lang="en">Head</display-name>\r
+ <display-name xml:lang="ja">頭</display-name>\r
+ <order>9</order>\r
+ <colorGroup refid="color-skin" init-sync="true"/>\r
+ <dir>head</dir>\r
+ <colorModel>HSB</colorModel>\r
+ </layer>\r
+ </layers>\r
+ </category>\r
+ <category id="face" multipleSelectable="false">\r
+ <visible-rows>6</visible-rows>\r
+ <display-name xml:lang="en">Expression</display-name>\r
+ <display-name xml:lang="ja">表情</display-name>\r
+ <layers>\r
+ <layer id="face_front"> \r
+ <display-name xml:lang="en">Face</display-name>\r
+ <display-name xml:lang="ja">表情</display-name>\r
+ <order>14</order>\r
+ <dir>face_front</dir>\r
+ <colorModel>HSB</colorModel>\r
+ </layer>\r
+ <layer id="face_back">\r
+ <display-name xml:lang="en">Accessory</display-name>\r
+ <display-name xml:lang="ja">アクセサリ</display-name>\r
+ <order>11</order>\r
+ <dir>face_back</dir>\r
+ <colorModel>HSB</colorModel>\r
+ </layer>\r
+ </layers>\r
+ </category>\r
+ <category id="eye" multipleSelectable="false">\r
+ <visible-rows>6</visible-rows>\r
+ <display-name xml:lang="en">Eyes</display-name>\r
+ <display-name xml:lang="ja">目</display-name>\r
+ <layers>\r
+ <layer id="eye">\r
+ <display-name xml:lang="en">Eye</display-name>\r
+ <display-name xml:lang="ja">目</display-name>\r
+ <order>15</order>\r
+ <dir>eye</dir>\r
+ <colorModel>HSB</colorModel>\r
+ </layer>\r
+ <layer id="eye_color">\r
+ <display-name xml:lang="en">Eye</display-name>\r
+ <display-name xml:lang="ja">可変色</display-name>\r
+ <order>16</order>\r
+ <colorGroup refid="color-eye" init-sync="true"/>\r
+ <dir>eye_color</dir>\r
+ <colorModel>HSB</colorModel>\r
+ </layer>\r
+ </layers>\r
+ </category>\r
+ <category id="body" multipleSelectable="false">\r
+ <visible-rows>6</visible-rows>\r
+ <display-name xml:lang="en">Body</display-name>\r
+ <display-name xml:lang="ja">身体</display-name>\r
+ <layers>\r
+ <layer id="body_front_color">\r
+ <display-name xml:lang="en">Variable</display-name>\r
+ <display-name xml:lang="ja">可変色</display-name>\r
+ <order>7</order>\r
+ <colorGroup init-sync="true" refid="color-dress"/>\r
+ <dir>body_front_color</dir>\r
+ <colorModel>HSB</colorModel>\r
+ </layer>\r
+ <layer id="body_front">\r
+ <display-name xml:lang="en">Clothes</display-name>\r
+ <display-name xml:lang="ja">ドレス</display-name>\r
+ <order>6</order>\r
+ <dir>body_front</dir>\r
+ <colorModel>HSB</colorModel>\r
+ </layer>\r
+ <layer id="body_back">\r
+ <display-name xml:lang="en">Skin</display-name>\r
+ <display-name xml:lang="ja">肌</display-name>\r
+ <order>4</order>\r
+ <colorGroup refid="color-skin" init-sync="true"/>\r
+ <dir>body_back</dir>\r
+ <colorModel>HSB</colorModel>\r
+ </layer>\r
+ </layers>\r
+ </category>\r
+ <category id="accessory" multipleSelectable="true">\r
+ <visible-rows>10</visible-rows>\r
+ <display-name xml:lang="en">Accessory</display-name>\r
+ <display-name xml:lang="ja">アクセサリー</display-name>\r
+ <layers>\r
+ <layer id="accessory_front">\r
+ <display-name xml:lang="en">Top</display-name>\r
+ <display-name xml:lang="ja">最前面</display-name>\r
+ <order>17</order>\r
+ <dir>accessory_front</dir>\r
+ <colorModel>HSB</colorModel>\r
+ </layer>\r
+ <layer id="accessory_middle_front" >\r
+ <display-name xml:lang="en">Middle(R)</display-name>\r
+ <display-name xml:lang="ja">中間(R)</display-name>\r
+ <order>10</order>\r
+ <dir>accessory_middle_front</dir>\r
+ <colorModel>HSB</colorModel>\r
+ </layer>\r
+ <layer id="accessory_middle_back">\r
+ <display-name xml:lang="en">Middle(L)</display-name>\r
+ <display-name xml:lang="ja">中間(L)</display-name>\r
+ <order>8</order>\r
+ <dir>accessory_middle_back</dir>\r
+ <colorModel>HSB</colorModel>\r
+ </layer>\r
+ <layer id="accessory_underwear">\r
+ <display-name xml:lang="en">Underwear</display-name>\r
+ <display-name xml:lang="ja">アンダーウェア</display-name>\r
+ <order>5</order>\r
+ <dir>accessory_underwear</dir>\r
+ <colorModel>HSB</colorModel>\r
+ </layer>\r
+ <layer id="accessory_back">\r
+ <display-name xml:lang="en">Back</display-name>\r
+ <display-name xml:lang="ja">最背面</display-name>\r
+ <order>1</order>\r
+ <dir>accessory_back</dir>\r
+ <colorModel>HSB</colorModel>\r
+ </layer>\r
+ </layers>\r
+ </category>\r
+ </categories>\r
+\r
+ <colorGroups>\r
+ <colorGroup id="color-hair">\r
+ <display-name xml:lang="en">Hair</display-name>\r
+ <display-name xml:lang="ja">髪</display-name>\r
+ </colorGroup>\r
+ <colorGroup id="color-eye">\r
+ <display-name xml:lang="en">Eye</display-name>\r
+ <display-name xml:lang="ja">瞳</display-name>\r
+ </colorGroup>\r
+ <colorGroup id="color-skin">\r
+ <display-name xml:lang="en">Skin</display-name>\r
+ <display-name xml:lang="ja">肌</display-name>\r
+ </colorGroup>\r
+ <colorGroup id="color-dress">\r
+ <display-name xml:lang="en">Dress</display-name>\r
+ <display-name xml:lang="ja">服</display-name>\r
+ </colorGroup>\r
+ </colorGroups>\r
+\r
+ <recommendations>\r
+ <recommendation>\r
+ <description xml:lang="en">Originator (K.Hmix 1st Edition)</description>\r
+ <description xml:lang="ja">(キャラクターなんとか機本家) K.Hmix 1st Edition</description>\r
+ <URL xml:lang="en">http://khmix.sakura.ne.jp/</URL>\r
+ </recommendation>\r
+ <recommendation>\r
+ <description xml:lang="en">The storage of an additional parts</description>\r
+ <description xml:lang="ja">キャラクターなんとか機 追加パーツ保管庫</description>\r
+ <URL xml:lang="en">http://nantoka.main.jp/</URL>\r
+ </recommendation>\r
+ </recommendations>\r
+\r
+</character>\r
\r
import java.io.IOException;\r
import java.io.InputStream;\r
-import java.io.ObjectInputStream;\r
import java.net.URL;\r
-import java.net.URLConnection;\r
-import java.util.Locale;\r
-import java.util.Map;\r
import java.util.logging.Level;\r
import java.util.logging.Logger;\r
\r
import charactermanaj.model.CharacterData;\r
\r
+/**\r
+ * デフォルトキャラクターセットのプロバイダ\r
+ * \r
+ * @author seraphy\r
+ */\r
public class CharacterDataDefaultProvider {\r
\r
/**\r
* リソースに格納されているデフォルトのキャラクター定義.<br>\r
+ * 「キャラクターなんとか機Ver3.xx系」\r
*/\r
- public static final String DEFAULT_CHARACTER_XML = "/schema/character.xml";\r
-\r
- /**\r
- * リソースに格納されているデフォルトのキャラクター定義のシリアライズデータ.<br>\r
- */\r
- public static final String DEFAULT_CHARACTER_XML_SER = "/schema/character.xml.ser";\r
+ public static final String DEFAULT_CHARACTER_V3_XML = "/schema/character3.xml";\r
\r
/**\r
* ロガー\r
public synchronized CharacterData createDefaultCharacterData() {\r
try {\r
if (defaultCharacterData == null) {\r
- CharacterData cd;\r
- try {\r
- // 埋め込みリソースからデフォルトキャラクターデータを構築する.\r
- cd = loadEmbeddedSerializedDefaultCharacterData();\r
-\r
- } catch (Exception ex) {\r
- // 失敗した場合はXMLでの読み込みを試行する.\r
- logger.log(\r
- Level.WARNING,\r
- "can't de-serialize the embedded default character-data.",\r
- ex);\r
- cd = null;\r
- }\r
-\r
- if (cd == null) {\r
- // XMLリソースからデフォルトキャラクターデータを構築する.\r
- cd = loadEmbeddedXMLDefaultCharacterData();\r
- }\r
-\r
+ CharacterData cd = loadEmbeddedXMLDefaultCharacterData();\r
assert (cd != null);\r
defaultCharacterData = cd;\r
}\r
}\r
\r
/**\r
- * シリアライズされたデフォルトキャラクターデータを埋め込みリソースより取得する.<br>\r
- * (現在のロケールの言語に対応するデータを取得し、なければenで代替する.)<br>\r
- * リソースがないか、読み込めない場合はnullを返す.<br>\r
- * 都度、リソースをデシリアライズする.<br>\r
- * \r
- * @return キャラクター定義、もしくはnull\r
- */\r
- protected CharacterData loadEmbeddedSerializedDefaultCharacterData()\r
- throws IOException, ClassNotFoundException {\r
- URL defaultSerializedCharacter = getEmbeddedResourceURL(DEFAULT_CHARACTER_XML_SER);\r
- URL defaultCharacter = getEmbeddedResourceURL(DEFAULT_CHARACTER_XML);\r
-\r
- // 埋め込みリソースのシリアライズされたデフォルトキャラクターデータを復元する.\r
- if (defaultSerializedCharacter != null) {\r
- URLConnection connSer = defaultSerializedCharacter.openConnection();\r
- URLConnection connXml = defaultCharacter.openConnection();\r
- if (connXml.getLastModified() <= connSer.getLastModified()) {\r
- Object obj;\r
- InputStream is = connSer.getInputStream();\r
- try {\r
- ObjectInputStream ois = new ObjectInputStream(is);\r
- try {\r
- obj = ois.readObject();\r
- } finally {\r
- ois.close();\r
- }\r
- } finally {\r
- is.close();\r
- }\r
- @SuppressWarnings("unchecked")\r
- Map<String, CharacterData> cdMap = (Map<String, CharacterData>) obj;\r
-\r
- Locale locale = Locale.getDefault();\r
- String lang = locale.getLanguage();\r
-\r
- CharacterData cd = cdMap.get(lang);\r
- if (cd == null) {\r
- // 指定した言語が見つからなければenを代表とする.\r
- cd = cdMap.get("en");\r
- if (cd == null && !cdMap.isEmpty()) {\r
- // それも見つからなければ、どれか1つを採用する.\r
- cd = cdMap.values().iterator().next();\r
- }\r
- }\r
- return cd;\r
- }\r
- }\r
- // リソースがないか、リソースの読み込みに失敗した場合.\r
- return null;\r
- }\r
-\r
- /**\r
* XMLリソースファイルから、デフォルトキャラクターデータを生成して返す.<br>\r
* (現在のロケールの言語に対応するデータを取得し、なければ最初の言語で代替する.)<br>\r
* 生成されたキャラクター定義のdocBaseはnullであるため、使用する場合はdocBaseをセットすること.<br>\r
protected CharacterData loadEmbeddedXMLDefaultCharacterData()\r
throws IOException {\r
CharacterData cd;\r
- URL defaultCharacter = getEmbeddedResourceURL(DEFAULT_CHARACTER_XML);\r
+ URL defaultCharacter = getEmbeddedResourceURL(DEFAULT_CHARACTER_V3_XML);\r
InputStream is = defaultCharacter.openStream();\r
try {\r
CharacterDataXMLReader characterDataXmlReader = new CharacterDataXMLReader();\r
cd = characterDataXmlReader.loadCharacterDataFromXML(is, null);\r
+ logger.log(Level.INFO, "デフォルトキャラクターデータをロードしました。");\r
\r
} finally {\r
is.close();\r