package com.kritsit.casetracker.client.domain.factory;
import com.kritsit.casetracker.client.domain.services.Administrator;
import com.kritsit.casetracker.client.domain.services.Editor;
import com.kritsit.casetracker.client.domain.services.IAdministratorService;
import com.kritsit.casetracker.client.domain.services.IConnectionService;
import com.kritsit.casetracker.client.domain.services.IEditorService;
import com.kritsit.casetracker.client.domain.services.ILoginService;
import com.kritsit.casetracker.client.domain.services.IMenuService;
import com.kritsit.casetracker.client.domain.services.Menu;
import com.kritsit.casetracker.client.domain.services.ServerConnection;
import com.kritsit.casetracker.client.domain.services.ServerLogin;
import com.kritsit.casetracker.shared.domain.model.Staff;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ServiceFactory {
private static final Logger logger = LoggerFactory.getLogger(ServiceFactory.class);
private static IConnectionService connection;
public static synchronized IConnectionService getServerConnection() {
if (connection == null) {
logger.info("Creating new server connection");
connection = new ServerConnection();
}
return connection;
}
public static void resetServerConnection() {
logger.debug("Resetting server connection");
connection = null;
}
public static ILoginService getLoginService() {
logger.debug("Creating new login service");
return new ServerLogin(getServerConnection());
}
public static IEditorService getEditorService(Staff user) {
logger.debug("Creating new editor service");
return new Editor(user, getServerConnection());
}
public static IAdministratorService getAdministratorService(Staff user) {
logger.debug("Creating new administrator service");
return new Administrator(user, getServerConnection());
}
public static IMenuService getMenuService(Staff user){
logger.debug("Creating new menu service");
return new Menu(user, getServerConnection());
}
}