package husacct.graphics.task;
import java.util.ArrayList;
import java.util.HashSet;
import husacct.ServiceProvider;
import husacct.analyse.IAnalyseService;
import husacct.common.dto.AbstractDTO;
import husacct.common.dto.DependencyDTO;
import husacct.common.dto.RuleDTO;
import husacct.common.dto.SoftwareUnitDTO;
import husacct.common.dto.UmlLinkDTO;
import husacct.common.dto.ViolationDTO;
import husacct.common.enums.DependencyTypeOption;
import husacct.graphics.domain.figures.BaseFigure;
import husacct.graphics.domain.figures.ModuleFigure;
import husacct.graphics.domain.figures.RelationFigure;
import husacct.validate.IValidateService;
public class AnalysedController extends DrawingController {
protected IAnalyseService analyseService;
protected IValidateService validateService;
public AnalysedController() {
super();
initializeServices();
}
@Override
protected ModuleFigure getModuleFiguresByUniqueName(String uniqueName) {
ModuleFigure moduleFigure = null;
SoftwareUnitDTO module = analyseService.getSoftwareUnitByUniqueName(uniqueName);
if (module != null) {
moduleFigure = figureFactory.createModuleFigure(module);
}
return moduleFigure;
}
@Override
protected ArrayList<ModuleFigure> getModuleFiguresInRoot() {
SoftwareUnitDTO[] rootModules = analyseService.getSoftwareUnitsInRoot();
ArrayList<ModuleFigure> rootModuleFigures = new ArrayList<ModuleFigure>();
for (SoftwareUnitDTO rootModule : rootModules) {
if (rootModule.name.toLowerCase().equals("xlibraries")){
rootModule.type = "library";
}
ModuleFigure rootModuleFigure = figureFactory.createModuleFigure(rootModule);
rootModuleFigures.add(rootModuleFigure);
}
return rootModuleFigures;
}
@Override
protected HashSet<String> getChildenOfParent(String parentName) {
SoftwareUnitDTO[] children = analyseService.getChildUnitsOfSoftwareUnit(parentName);
HashSet<String> knownChildren = new HashSet<String>();
for (SoftwareUnitDTO child : children) {
knownChildren.add(child.uniqueName);
}
return knownChildren;
}
@Override
protected ArrayList<ModuleFigure> getChildModuleFiguresOfParent(String parentName) {
SoftwareUnitDTO[] children = analyseService.getChildUnitsOfSoftwareUnit(parentName);
ArrayList<ModuleFigure> knownChildren = new ArrayList<ModuleFigure>();
for (AbstractDTO child : children) {
ModuleFigure moduleFigure = figureFactory.createModuleFigure(child);
knownChildren.add(moduleFigure);
}
return knownChildren;
}
@Override
protected RelationFigure getRelationFigureBetween(ModuleFigure figureFrom, ModuleFigure figureTo) {
RelationFigure dependencyFigure = null;
if ((figureFrom != null) && (figureTo != null) && !figureFrom.getUniqueName().equals(figureTo.getUniqueName())){
switch(this.drawingSettingsHolder.getSelectedDependencyOption()){
case ONLY_UMLLINKS:
dependencyFigure = createUmlLinkRelationFigure(figureFrom, figureTo, dependencyFigure);
break;
default:
dependencyFigure = createDependencyRelationFigure(figureFrom, figureTo, dependencyFigure);
}
}
return dependencyFigure;
}
private RelationFigure createDependencyRelationFigure(ModuleFigure figureFrom, ModuleFigure figureTo, RelationFigure dependencyFigure) {
try {
DependencyDTO[] dependencies;
if (this.drawingSettingsHolder.getSelectedDependencyOption().equals(DependencyTypeOption.ACCESS_CALL_REFERENCE)) {
dependencies = analyseService.getDependencies_OnlyAccessCallAndReferences_FromSoftwareUnitToSoftwareUnit(figureFrom.getUniqueName(), figureTo.getUniqueName());
} else {
dependencies = analyseService.getDependenciesFromSoftwareUnitToSoftwareUnit(figureFrom.getUniqueName(), figureTo.getUniqueName());
}
if (dependencies.length > 0) {
dependencyFigure = figureFactory.createRelationFigure_Dependency(dependencies);
}
} catch (Exception e) {
logger.error(" Could not create a dependency figure: " + e.getMessage());
}
return dependencyFigure;
}
private RelationFigure createUmlLinkRelationFigure(ModuleFigure figureFrom, ModuleFigure figureTo, RelationFigure dependencyFigure) {
UmlLinkDTO[] umlLinks = analyseService.getUmlLinksFromSoftwareUnitToSoftwareUnit(figureFrom.getUniqueName(), figureTo.getUniqueName());
try {
if (umlLinks.length > 0) {
dependencyFigure = figureFactory.createRelationFigure_UmlLink(umlLinks);
}
} catch (Exception e) {
logger.error(" Could not create a dependency figure.");
e.printStackTrace();
}
return dependencyFigure;
}
@Override
protected DependencyDTO[] getDependenciesBetween(ModuleFigure figureFrom, ModuleFigure figureTo) {
if ((figureFrom != null) && (figureTo != null) && !figureFrom.getUniqueName().equals(figureTo.getUniqueName())){
return analyseService.getDependenciesFromSoftwareUnitToSoftwareUnit(figureFrom.getUniqueName(), figureTo.getUniqueName());
}
return new DependencyDTO[] {};
}
@Override
protected UmlLinkDTO[] getUmlLinksBetween(ModuleFigure figureFrom, ModuleFigure figureTo) {
if ((figureFrom != null) && (figureTo != null) && !figureFrom.getUniqueName().equals(figureTo.getUniqueName())){
return analyseService.getUmlLinksFromSoftwareUnitToSoftwareUnit(figureFrom.getUniqueName(), figureTo.getUniqueName());
}
return new UmlLinkDTO[] {};
}
@Override
protected boolean hasRelationBetween(ModuleFigure figureFrom, ModuleFigure figureTo){
boolean b = false;
if ((figureFrom != null) && (figureTo != null) && !figureFrom.getUniqueName().equals(figureTo.getUniqueName())){
if((analyseService.getDependenciesFromSoftwareUnitToSoftwareUnit(figureFrom.getUniqueName(), figureTo.getUniqueName()).length > 0) ||
(analyseService.getDependenciesFromSoftwareUnitToSoftwareUnit(figureTo.getUniqueName(), figureFrom.getUniqueName()).length > 0)){
b = true;
}
}
return b;
}
@Override
protected RelationFigure getRelationFigureWithViolationsBetween(ModuleFigure figureFrom, ModuleFigure figureTo) {
RelationFigure violationFigure = null;
if ((figureFrom != null) && (figureTo != null) && !figureFrom.getUniqueName().equals(figureTo.getUniqueName())){
try {
ViolationDTO[] violations = getViolationsBetween(figureFrom, figureTo);
DependencyDTO[] dependencies = getDependenciesBetween(figureFrom, figureTo);
if ((violations != null) && (dependencies != null)) {
violationFigure = figureFactory.createRelationFigure_DependencyWithViolations(dependencies, violations);
}
} catch (Exception e) {
logger.error("Could not create a violation line between figures." + e.getMessage());
}
}
return violationFigure;
}
@Override
protected ViolationDTO[] getViolationsBetween(ModuleFigure figureFrom, ModuleFigure figureTo) {
if ((figureFrom != null) && (figureTo != null) && !figureFrom.getUniqueName().equals(figureTo.getUniqueName())){
return validateService.getViolationsByPhysicalPath(figureFrom.getUniqueName(), figureTo.getUniqueName());
} else {
return new ViolationDTO[]{};
}
}
@Override
protected String getUniqueNameOfParentModule(String childUniqueName) {
String parentUniqueName = "";
SoftwareUnitDTO parentDTO = analyseService.getParentUnitOfSoftwareUnit(childUniqueName);
if (parentDTO != null) {
parentUniqueName = parentDTO.uniqueName;
}
return parentUniqueName;
}
private void initializeServices() {
analyseService = ServiceProvider.getInstance().getAnalyseService();
validateService = ServiceProvider.getInstance().getValidateService();
}
@Override
protected RuleDTO[] getRulesBetween(BaseFigure figureFrom, BaseFigure figureTo) {
return new RuleDTO[]{};
}
}