package husacct.define.task.persistency; import husacct.ServiceProvider; import husacct.common.dto.ProjectDTO; import husacct.common.savechain.ISaveable; import husacct.define.domain.Application; import husacct.define.domain.Project; import husacct.define.domain.SoftwareArchitecture; import husacct.define.domain.services.AppliedRuleDomainService; import husacct.define.domain.services.ModuleDomainService; import husacct.define.domain.services.SoftwareArchitectureDomainService; import java.util.ArrayList; import org.jdom2.Element; /** * This class enabled the feature to have the domain stored in XML format */ public class PersistentDomain implements ISaveable { public enum DomainElement { APPLICATION, LOGICAL, PHYSICAL } private DomainXML domainToXMLParser; private XMLDomain xmlToDomainParser; private SoftwareArchitectureDomainService domainService; private ModuleDomainService moduleService; private AppliedRuleDomainService appliedRuleService; private DomainElement parseData = DomainElement.APPLICATION; private Application workspaceApplication; public PersistentDomain(SoftwareArchitectureDomainService ds, ModuleDomainService ms, AppliedRuleDomainService ards) { domainService = ds; moduleService = ms; appliedRuleService = ards; } @Override public Element getWorkspaceData() { domainToXMLParser = new DomainXML(SoftwareArchitecture.getInstance()); switch(parseData){ case LOGICAL: domainToXMLParser.setParseLogical(false); return domainToXMLParser.getApplicationInXML(domainService.getApplicationDetails()); case APPLICATION: case PHYSICAL: default: return domainToXMLParser.getApplicationInXML(domainService.getApplicationDetails()); } } @Override public void loadWorkspaceData(Element workspaceData) { resetWorkspaceData(); xmlToDomainParser = new XMLDomain(workspaceData); workspaceApplication = xmlToDomainParser.createApplication(); ArrayList<ProjectDTO> projects = new ArrayList<ProjectDTO>(); for (Project project : workspaceApplication.getProjects()) { projects.add(new ProjectDTO(project.getName(), project .getPaths(), project.getProgrammingLanguage(), project .getVersion(), project.getDescription(), null)); } ServiceProvider.getInstance().getDefineService().createApplication(workspaceApplication.getName(), projects, workspaceApplication.getVersion()); } /** * Resets all workspace date prior to import. */ private void resetWorkspaceData() { appliedRuleService.removeAppliedRules(); moduleService.removeAllModules(); workspaceApplication = new Application(); } public void setDefineDomainService(SoftwareArchitectureDomainService ds) { domainService = ds; } public void setParseData(DomainElement de) { parseData = de; } public void setXMLDomain(XMLDomain xd) { xmlToDomainParser = xd; } }