package packet_readers.lineage2.holders;
import java.io.File;
import java.net.URL;
import java.util.Iterator;
import java.util.zip.ZipFile;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.napile.primitive.maps.IntObjectMap;
import org.napile.primitive.maps.impl.HashIntObjectMap;
/**
* Author: VISTALL
* Company: J Develop Station
* Date: 19:57:29/31.07.2010
*/
public class SkillNameHolder
{
private static final Logger _log = Logger.getLogger(SkillNameHolder.class);
private static SkillNameHolder _instance;
private IntObjectMap<String> _skillNames = new HashIntObjectMap<String>();
public static SkillNameHolder getInstance()
{
if (_instance == null)
{
_instance = new SkillNameHolder();
}
return _instance;
}
private SkillNameHolder()
{
URL url = getClass().getResource("/com/jds/jn/resources/datas/l2-data.zip");
if(url == null)
{
_log.info("Not exists");
return;
}
ZipFile zipFile = null;
try
{
zipFile = new ZipFile(new File(url.toURI()));
}
catch(Exception e)
{
_log.info(e, e);
return;
}
try
{
SAXReader reader = new SAXReader();
Document document = reader.read(zipFile.getInputStream(zipFile.getEntry("SkillName.xml")));
for(Iterator<Element> iterator = document.getRootElement().elementIterator(); iterator.hasNext();)
{
Element e = iterator.next();
int id = Integer.parseInt(e.element("id").getText());
int level = Integer.parseInt(e.element("level").getText());
String name = e.element("name").getText();
_skillNames.put(hashCode(id, level), name);
}
}
catch(Exception e)
{
_log.warn("Exception:" + e, e);
}
_log.info("Load skills names " + _skillNames.size());
}
public String name(int id, int level)
{
String name = _skillNames.get(hashCode(id, level));
return name == null ? "None" : name;
}
public static int hashCode(int skillId, int skillLevel)
{
return skillId * 1021 + skillLevel;
}
}