XmlResource.java
/*
* XML resources
*
* License : The MIT License
* Copyright(c) 2009 olyutorskii
*/
package jp.sourceforge.jindolf.corelib;
import java.io.FileNotFoundException;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* このパッケージに含まれるXML関連の各種リソース、およびWeb上の原本。
* 相対URIのベースはこのクラスのコードベース。
*/
public final class XmlResource{
/** 独自XMLスキーマ 外部URI名の前置詞。 {@value} */
public static final String O_XSDBASE =
"http://jindolf.sourceforge.jp/xml/xsd/";
/** 独自XMLスキーマ 内部リソース名の前置詞。 {@value} */
public static final String I_XSDBASE = "resources/xsd/";
/** XML 内部リソース名の前置詞。 {@value} */
public static final String I_XMLBASE = "resources/xml/";
/** パブリックXMLスキーマ 外部URI名。 {@value} */
public static final String O_RES_EXTXML =
"http://www.w3.org/2001/xml.xsd";
/** 基本型定義XMLスキーマ 外部URI名。 {@value} */
public static final String O_RES_CORETYPE =
O_XSDBASE + "coreType-090829.xsd";
/** 文書定義XMLスキーマ 外部URI名。 {@value} */
public static final String O_RES_COREXML =
O_XSDBASE + "coreXML-090829.xsd";
/** パブリックXMLスキーマ 内部リソース名。 {@value} */
public static final String I_RES_EXTXML =
I_XSDBASE + "ext/xml-2009-01.xsd";
/** 基本型定義XMLスキーマ 内部リソース名。 {@value} */
public static final String I_RES_CORETYPE =
I_XSDBASE + "private/coreType-090829.xsd";
/** 文書定義XMLスキーマ 内部リソース名。 {@value} */
public static final String I_RES_COREXML =
I_XSDBASE + "private/coreXML-090829.xsd";
/** 国定義 内部リソース名。 {@value} */
public static final String I_RES_LANDDEF =
I_XMLBASE + "landDefList.xml";
/** キャラ定義 内部リソース名。 {@value} */
public static final String I_RES_AVATARDEF =
I_XMLBASE + "preDefAvatarList.xml";
/** パブリックXMLスキーマ 外部URI。 */
public static final URI O_URI_EXTXML;
/** 基本型定義XMLスキーマ 外部URI。 */
public static final URI O_URI_CORETYPE;
/** 文書定義XMLスキーマ 外部URI。 */
public static final URI O_URI_COREXML;
/** パブリックXMLスキーマ 内部リソースURI。 */
public static final URI I_URI_EXTXML;
/** 基本型定義XMLスキーマ 内部リソースURI。 */
public static final URI I_URI_CORETYPE;
/** 文書定義XMLスキーマ 内部リソースURI。 */
public static final URI I_URI_COREXML;
/** 国定義 内部リソースURI。 */
public static final URI I_URI_LANDDEF;
/** キャラ定義 内部リソースURI。 */
public static final URI I_URI_AVATARDEF;
/** 文書定義XMLスキーマ 内部リソースURL。 */
public static final URL I_URL_COREXML;
/** 国定義 内部リソースURL。 */
public static final URL I_URL_LANDDEF;
/** キャラ定義 内部リソースURL。 */
public static final URL I_URL_AVATARDEF;
/**
* Web上の原本からリソースへの変換を記述したマップ。
*/
public static final Map<URI, URI> RESOLVE_MAP;
private static final Class<?> THISCLASS = XmlResource.class;
static{
new XmlResource().hashCode();
O_URI_EXTXML = loadOuter(O_RES_EXTXML);
O_URI_CORETYPE = loadOuter(O_RES_CORETYPE);
O_URI_COREXML = loadOuter(O_RES_COREXML);
try{
I_URI_EXTXML = loadInner(I_RES_EXTXML);
I_URI_CORETYPE = loadInner(I_RES_CORETYPE);
I_URI_COREXML = loadInner(I_RES_COREXML);
I_URI_LANDDEF = loadInner(I_RES_LANDDEF);
I_URI_AVATARDEF = loadInner(I_RES_AVATARDEF);
}catch(FileNotFoundException | URISyntaxException e){
throw new ExceptionInInitializerError(e);
}
try{
I_URL_COREXML = I_URI_COREXML.toURL();
I_URL_LANDDEF = I_URI_LANDDEF.toURL();
I_URL_AVATARDEF = I_URI_AVATARDEF.toURL();
}catch(MalformedURLException e){
throw new ExceptionInInitializerError(e);
}
Map<URI, URI> map = new HashMap<>();
map.put(O_URI_EXTXML, I_URI_EXTXML);
map.put(O_URI_CORETYPE, I_URI_CORETYPE);
map.put(O_URI_COREXML, I_URI_COREXML);
RESOLVE_MAP = Collections.unmodifiableMap(map);
}
/**
* 隠れコンストラクタ。
*/
private XmlResource(){
super();
assert this.getClass().equals(THISCLASS);
return;
}
/**
* 内部リソースのURIを得る。
* @param res リソース名
* @return URI
* @throws FileNotFoundException リソースが見つからない。
* @throws URISyntaxException URI書式が変。
*/
private static URI loadInner(String res)
throws FileNotFoundException,
URISyntaxException {
URL url = THISCLASS.getResource(res);
if(url == null) throw new FileNotFoundException(res);
URI result = url.toURI().normalize();
return result;
}
/**
* 外部リソースのURIを得る。
* @param http 外部リソース名
* @return URI
*/
private static URI loadOuter(String http){
URI uri = URI.create(http).normalize();
return uri;
}
}