package org.reunionemu.jreunion.server;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.annotation.PostConstruct;
import org.reunionemu.jcommon.Parser;
import org.reunionemu.jreunion.server.beans.SpringApplicationContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
/**
* @author Aidamina
* @license http://reunion.googlecode.com/svn/trunk/license.txt
*/
@Service
public class Reference {
@Autowired
ApplicationContext context;
public ApplicationContext getContext() {
return context;
}
private synchronized static void createInstance() {
if (_instance == null) {
_instance = new Reference();
}
}
public static Reference getInstance() {
if (_instance == null) {
throw new RuntimeException();
//createInstance();
}
return _instance;
}
private Parser itemReference;
private Parser mobReference;
private Parser expReference;
private Parser npcReference;
private Parser dropListReference;
private Parser skillReference;
private Parser mapReference;
private Parser mapConfigReference;
private Parser serverReference;
private static Reference _instance = null;
public Reference() {
itemReference = new Parser();
mobReference = new Parser();
expReference = new Parser();
mapReference = new Parser();
mapConfigReference = new Parser();
npcReference = new Parser();
serverReference = new Parser();
dropListReference = new Parser();
skillReference = new Parser();
_instance = this;
}
public void clear() {
mobReference.clear();
itemReference.clear();
mapReference.clear();
mapConfigReference.clear();
expReference.clear();
npcReference.clear();
serverReference.clear();
dropListReference.clear();
skillReference.clear();
}
public Parser getExpReference() {
return expReference;
}
public Parser getItemReference() {
return itemReference;
}
/**
* @return Returns the mapReference.
*/
public Parser getMapReference() {
return mapReference;
}
public Parser getMapConfigReference() {
return mapConfigReference;
}
public Parser getMobReference() {
return mobReference;
}
public Parser getNpcReference() {
return npcReference;
}
public Parser getServerReference() {
return serverReference;
}
public Parser getDropListReference() {
return dropListReference;
}
public Parser getSkillReference() {
return skillReference;
}
public void setSkillReference(Parser skillReference) {
this.skillReference = skillReference;
}
@PostConstruct
public void Load(){
clear();
try {
serverReference.Parse("config/Settings.dta");
mapConfigReference.Parse("config/Maps.dta");
itemReference.Parse(getDataResourceS("Items.dta"));
mobReference.Parse(getDataResourceS("Mob.dta"));
expReference.Parse(getDataResourceS("ExpTable.dta"));
mapReference.Parse(getDataResourceS("Maps.dta"));
npcReference.Parse(getDataResourceS("Npc.dta"));
dropListReference.Parse(getDataResourceS("DropList.dta"));
skillReference.Parse(getDataResourceS("Skills.dta"));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public InputStream getDataResourceS(String filename){
String dataPath = getServerReference().getItem("Server").getMemberValue("DataPath");
//ApplicationContext context = SpringApplicationContext.getApplicationContext();
String path = new File(dataPath, filename).getPath();
try{
if(context!=null){
return context.getResource(path).getInputStream();
}else{
return new FileInputStream(path);
}
}catch(Exception e){
throw new RuntimeException(e);
}
}
public static InputStream getDataResource(String filename){
String dataPath = getInstance().getServerReference().getItem("Server").getMemberValue("DataPath");
ApplicationContext context = getInstance().getContext();
String path = new File(dataPath, filename).getPath();
try{
if(context!=null){
return context.getResource(path).getInputStream();
}else{
return new FileInputStream(path);
}
}catch(Exception e){
throw new RuntimeException(e);
}
}
public static String getDataPathFile(String filename){
String dataPath = getInstance().getServerReference().getItem("Server").getMemberValue("DataPath");
String path = new File(dataPath, filename).getPath();
return path;
}
}