package husacct.analyse;
import java.util.HashSet;
import java.util.List;
import husacct.analyse.domain.IModelPersistencyService;
import husacct.analyse.domain.IModelQueryService;
import husacct.analyse.domain.famix.FamixPersistencyServiceImpl;
import husacct.analyse.domain.famix.FamixQueryServiceImpl;
import husacct.analyse.presentation.AnalyseInternalFrame;
import husacct.analyse.presentation.reconstruct.AnalyseInternalSARFrame;
import husacct.analyse.task.AnalyseTaskControl;
import husacct.analyse.task.reconstruct.dto.ReconstructArchitectureDTO;
import husacct.common.dto.AnalysisStatisticsDTO;
import husacct.common.dto.ApplicationDTO;
import husacct.common.dto.DependencyDTO;
import husacct.common.dto.ProjectDTO;
import husacct.common.dto.SoftwareUnitDTO;
import husacct.common.dto.UmlLinkDTO;
import husacct.common.savechain.ISaveable;
import husacct.common.services.ObservableService;
import javax.swing.JInternalFrame;
import org.jdom2.Element;
public class AnalyseServiceImpl extends ObservableService implements IAnalyseService, ISaveable {
private IModelQueryService queryService;
private IModelPersistencyService persistencyService;
private AnalyseTaskControl analyseTaskControl;
private AnalyseInternalFrame analyseInternalFrame;
private AnalyseInternalSARFrame analyseInternalSARFrame;
public AnalyseServiceImpl() {
this.queryService = new FamixQueryServiceImpl(); //Must be created as first, since it clears the model (needed in case of reloading workspaces).
this.persistencyService = new FamixPersistencyServiceImpl(queryService);
this.analyseTaskControl = new AnalyseTaskControl(persistencyService, queryService);
this.analyseInternalFrame = null;
this.analyseInternalSARFrame = null;
}
@Override
public String[] getAvailableLanguages() {
return analyseTaskControl.getAvailableLanguages();
}
@Override
public void analyseApplication(ProjectDTO project) {
this.analyseTaskControl.analyseApplication(project.paths.toArray(new String[project.paths.size()]), project.programmingLanguage);
this.analyseInternalFrame = new AnalyseInternalFrame(analyseTaskControl);
this.analyseInternalSARFrame = new AnalyseInternalSARFrame(analyseTaskControl);
super.notifyServiceListeners();
}
@Override
public boolean isAnalysed() {
return analyseTaskControl.isAnalysed();
}
@Override
public JInternalFrame getJInternalFrame() {
if (analyseInternalFrame == null) {
analyseInternalFrame = new AnalyseInternalFrame(analyseTaskControl);
}
return analyseInternalFrame;
}
@Override
public JInternalFrame getJInternalSARFrame() {
reconstructArchitecture_Initiate();
analyseInternalSARFrame = new AnalyseInternalSARFrame(analyseTaskControl);
return analyseInternalSARFrame;
}
@Override
public SoftwareUnitDTO getSoftwareUnitByUniqueName(String uniquename) {
return queryService.getSoftwareUnitByUniqueName(uniquename);
}
@Override
public String getSourceFilePathOfClass(String uniquename) {
return queryService.getSourceFilePathOfClass(uniquename);
}
@Override
public SoftwareUnitDTO[] getSoftwareUnitsInRoot() {
return queryService.getSoftwareUnitsInRoot();
}
@Override
public SoftwareUnitDTO[] getChildUnitsOfSoftwareUnit(String from) {
return queryService.getChildUnitsOfSoftwareUnit(from);
}
@Override
public SoftwareUnitDTO getParentUnitOfSoftwareUnit(String child) {
return queryService.getParentUnitOfSoftwareUnit(child);
}
@Override
public List<String> getAllPhysicalClassPathsOfSoftwareUnit(String uniqueName){
return queryService.getAllPhysicalClassPathsOfSoftwareUnit(uniqueName);
}
@Override
public List<String> getAllPhysicalPackagePathsOfSoftwareUnit(String uniqueName){
return queryService.getAllPhysicalPackagePathsOfSoftwareUnit(uniqueName);
}
@Override
public DependencyDTO[] getDependenciesFromSoftwareUnitToSoftwareUnit(String pathFrom, String pathTo) {
return queryService.getDependenciesFromSoftwareUnitToSoftwareUnit(pathFrom, pathTo);
}
@Override
public DependencyDTO[] getDependenciesFromClassToClass(String classPathFrom, String classPathTo){
return queryService.getDependenciesFromClassToClass(classPathFrom, classPathTo);
}
@Override
public DependencyDTO[] getDependencies_OnlyAccessCallAndReferences_FromSoftwareUnitToSoftwareUnit(String pathFrom, String pathTo) {
return queryService.getDependencies_OnlyAccessCallAndReferences_FromSoftwareUnitToSoftwareUnit(pathFrom, pathTo);
}
@Override
public DependencyDTO[] getDependencies_OnlyAccessCallAndReferences_FromClassToClass(String classPathFrom, String classPathTo){
return queryService.getDependencies_OnlyAccessCallAndReferences_FromClassToClass(classPathFrom, classPathTo);
}
@Override
public void createDependencyReport(String fullPath) {
analyseTaskControl.createDependencyReport(fullPath);
}
@Override
public Element exportAnalysisModel() {
return analyseTaskControl.exportAnalysisModel();
}
@Override
public void importAnalysisModel(Element analyseElement) {
analyseTaskControl.importAnalysisModel(analyseElement);
this.analyseInternalFrame = new AnalyseInternalFrame(analyseTaskControl);
this.analyseInternalSARFrame = new AnalyseInternalSARFrame(analyseTaskControl);
super.notifyServiceListeners();
}
@Override
public void reconstructArchitecture_Initiate() {
analyseTaskControl.reconstructArchitecture_Initiate();
}
@Override
public void reconstructArchitecture_ClearAll() {
analyseTaskControl.reconstructArchitecture_ClearAll();
}
@Override
public boolean reconstructArchitecture_Execute(ReconstructArchitectureDTO dto) {
analyseTaskControl.reconstructArchitecture_Execute(dto);
return analyseTaskControl.getAlgorithmSucces();
}
// Used for the generic mechanism to save workspace data of all components; e.g. configuration settings
@Override // From ISaveable
public Element getWorkspaceData() {
return persistencyService.getWorkspaceData();
}
// Used for the generic mechanism to load workspace data of all components; e.g. configuration settings
@Override // From ISaveable
public void loadWorkspaceData(Element rootElement) {
persistencyService.loadWorkspaceData(rootElement);
}
@Override
public void logHistory(ApplicationDTO applicationDTO, String workspaceName) {
analyseTaskControl.logHistory(applicationDTO, workspaceName);
}
@Override
public AnalysisStatisticsDTO getAnalysisStatistics(SoftwareUnitDTO selectedModule) {
return queryService.getAnalysisStatistics(selectedModule);
}
@Override
public UmlLinkDTO[] getUmlLinksFromClassToToClass(String fromClass, String toClass) {
return queryService.getUmlLinksFromClassToToClass(fromClass, toClass);
}
@Override
public HashSet<UmlLinkDTO> getUmlLinksFromClassToOtherClasses(String fromClass) {
return queryService.getUmlLinksFromClassToOtherClasses(fromClass);
}
@Override
public UmlLinkDTO[] getUmlLinksFromSoftwareUnitToSoftwareUnit(String pathFrom, String pathTo) {
return queryService.getUmlLinksFromSoftwareUnitToSoftwareUnit(pathFrom, pathTo);
}
}