package husacct.control.task; import husacct.ServiceProvider; import husacct.common.savechain.ISaveable; import husacct.control.IControlService; import husacct.control.domain.Workspace; import husacct.control.presentation.workspace.CreateWorkspaceDialog; import husacct.control.presentation.workspace.OpenWorkspaceDialog; import husacct.control.presentation.workspace.SaveWorkspaceDialog; import husacct.control.task.resources.IResource; import husacct.control.task.resources.ResourceFactory; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import org.apache.log4j.Logger; import org.jdom2.Document; import org.jdom2.Element; public class WorkspaceController { private Logger logger = Logger.getLogger(WorkspaceController.class); private Workspace currentWorkspace; private MainController mainController; public WorkspaceController(MainController mainController){ this.mainController = mainController; currentWorkspace = null; } public void showCreateWorkspaceGui() { new CreateWorkspaceDialog(mainController); } public void showOpenWorkspaceGui() { new OpenWorkspaceDialog(mainController); } public SaveWorkspaceDialog showSaveWorkspaceGui() { return new SaveWorkspaceDialog(mainController); } public void createWorkspace(String name){ logger.info( new Date().toString() + " New workspace: " + name); Workspace workspace = new Workspace(); workspace.setName(name); currentWorkspace = workspace; if(ServiceProvider.getInstance().getControlService().isGuiEnabled()){ mainController.getMainGui().setTitle(name); mainController.getViewController().closeAll(); } ServiceProvider.getInstance().resetServices(); mainController.getStateController().checkState(); } public void closeWorkspace() { currentWorkspace = null; if(ServiceProvider.getInstance().getControlService().isGuiEnabled()) { mainController.getMainGui().setTitle(""); mainController.getViewController().closeAll(); } ServiceProvider.getInstance().resetServices(); mainController.getStateController().checkState(); } public boolean saveWorkspace(String resourceIdentifier, HashMap<String, Object> dataValues, HashMap<String, Object> config) { IResource workspaceResource = ResourceFactory.get(resourceIdentifier); Document document = getWorkspaceData(); return workspaceResource.save(document, dataValues, config); } public Document getWorkspaceData(){ Element rootElement = new Element("husacct"); rootElement.setAttribute("version", "5.3.2"); for(ISaveable service : getSaveableServices()){ String serviceName = service.getClass().getName(); try { Element container = new Element(serviceName); Element serviceData = service.getWorkspaceData(); container.addContent(serviceData); rootElement.addContent(container); } catch (Exception e) { logger.debug("Unable to save workspacedata for " + serviceName + ": " + e.getMessage()); } } Document doc = new Document(rootElement); return doc; } public boolean loadWorkspace(String resourceIdentifier, HashMap<String, Object> dataValues){ IResource workspaceResource = ResourceFactory.get(resourceIdentifier); Document document = workspaceResource.load(dataValues); try { ServiceProvider.getInstance().resetServices(); List<ISaveable> savableServices = getSaveableServices(); if(document.hasRootElement()){ Element rootElement = document.getRootElement(); for(ISaveable service : savableServices){ String serviceName = service.getClass().getName(); List<Element> elementQuery = rootElement.getChildren(serviceName); for(Element serviceDataContainer : elementQuery){ Element serviceData = serviceDataContainer.getChildren().get(0); service.loadWorkspaceData(serviceData); } } } return true; } catch (Exception exception){ String message = "Unable to load workspacedata\n" + exception.getMessage(); if (ServiceProvider.getInstance().getControlService().isGuiEnabled()) { IControlService controlService = ServiceProvider.getInstance().getControlService(); controlService.showErrorMessage(message); } else { logger.error(message); } } return false; } private List<ISaveable> getSaveableServices() { List<ISaveable> saveableServices = new ArrayList<ISaveable>(); if(ServiceProvider.getInstance().getControlService() instanceof ISaveable){ saveableServices.add((ISaveable) ServiceProvider.getInstance().getControlService()); } if(ServiceProvider.getInstance().getDefineService() instanceof ISaveable){ saveableServices.add(ServiceProvider.getInstance().getDefineService()); } if(ServiceProvider.getInstance().getAnalyseService() instanceof ISaveable){ saveableServices.add(ServiceProvider.getInstance().getAnalyseService()); } if(ServiceProvider.getInstance().getValidateService() instanceof ISaveable){ saveableServices.add((ISaveable) ServiceProvider.getInstance().getValidateService()); } if(ServiceProvider.getInstance().getGraphicsService() instanceof ISaveable){ saveableServices.add((ISaveable) ServiceProvider.getInstance().getGraphicsService()); } return saveableServices; } public boolean isAWorkspaceOpened(){ if(currentWorkspace != null){ return true; } return false; } public Workspace getCurrentWorkspace(){ return currentWorkspace; } public void setWorkspace(Workspace workspace) { currentWorkspace = workspace; if(mainController != null && ServiceProvider.getInstance().getControlService().isGuiEnabled()) { mainController.getMainGui().setTitle(workspace.getName()); } } }