package husacct;
import java.util.Date;
import husacct.analyse.AnalyseServiceImpl;
import husacct.analyse.IAnalyseService;
import husacct.common.locale.ILocaleService;
import husacct.common.locale.LocaleServiceImpl;
import husacct.control.ControlServiceImpl;
import husacct.control.IControlService;
import husacct.define.DefineServiceImpl;
import husacct.define.IDefineService;
import husacct.graphics.GraphicsServiceImpl;
import husacct.graphics.IGraphicsService;
import husacct.validate.IValidateService;
import husacct.validate.ValidateServiceImpl;
import org.apache.log4j.Logger;
public final class ServiceProvider {
private final Logger logger = Logger.getLogger(ServiceProvider.class);
private static ServiceProvider _instance;
private ILocaleService localeService;
private ControlServiceImpl controlService;
private IAnalyseService analyseService;
private IDefineService defineService;
private IValidateService validateService;
private IGraphicsService graphicsService;
private ServiceProvider() {
try {
_instance = this;
resetServices();
} catch (StackOverflowError error) {
logger.error("Unable to initiate services, avoid using the ServiceProvider within the ServiceImpl constructor or field declaration. Terminating.");
System.exit(0);
}
}
public static ServiceProvider getInstance() {
if (ServiceProvider._instance == null) {
new ServiceProvider();
}
return ServiceProvider._instance;
}
public void resetServices(){
logger.info(new Date().toString() + " Resetting services");
if(this.controlService == null) this.controlService = new ControlServiceImpl();
if(this.localeService == null) this.localeService = new LocaleServiceImpl();
this.analyseService = new AnalyseServiceImpl();
this.defineService = new DefineServiceImpl();
this.validateService = new ValidateServiceImpl();
this.graphicsService = new GraphicsServiceImpl();
this.controlService.getMainController().initialiseCodeViewerController();
this.controlService.setServiceListeners();
}
public void resetAnalyseService() {
this.analyseService = new AnalyseServiceImpl();
}
public void resetValidateService() {
this.validateService = new ValidateServiceImpl();
}
public ILocaleService getLocaleService(){
return localeService;
}
public IControlService getControlService() {
return controlService;
}
public IAnalyseService getAnalyseService() {
return analyseService;
}
public IDefineService getDefineService() {
return defineService;
}
public IValidateService getValidateService() {
return validateService;
}
public IGraphicsService getGraphicsService() {
return graphicsService;
}
}