package jdepend.util.analyzer.element; import java.util.ArrayList; import java.util.List; import jdepend.metadata.JavaClassRelationItem; import jdepend.model.Component; import jdepend.model.ComponentException; import jdepend.model.JDependUnit; import jdepend.model.JavaClassUnit; import jdepend.model.result.AnalysisResult; import jdepend.util.analyzer.element.layer.JEELayer; import jdepend.util.analyzer.element.layer.JavaClassType; import jdepend.util.analyzer.element.layer.LayerInfo; import jdepend.util.analyzer.framework.AbstractAnalyzer; import jdepend.util.analyzer.framework.Analyzer; import jdepend.util.analyzer.framework.AnalyzerException; public class DAOCallService extends AbstractAnalyzer { private static final long serialVersionUID = 5980835716758700893L; private String DaoPackageEndsWith; private String ServiceSuperClassName; private String DaoSuperClassName; public DAOCallService() { super("DAO调用Service", Analyzer.AntiPattern, "DAO调用Service"); this.setType(AntiPattern); if (this.DaoPackageEndsWith == null) { this.DaoPackageEndsWith = ".dao"; } } protected void doExecute(AnalysisResult result) throws AnalyzerException { List<LayerInfo> layerInfos = new ArrayList<LayerInfo>(); layerInfos.add(new LayerInfo("DaoLayer", DaoSuperClassName, DaoPackageEndsWith)); JEELayer jeeLayer = new JEELayer(layerInfos); List<Component> components; try { components = jeeLayer.list(result.getJavaPackages()); } catch (ComponentException e) { throw new AnalyzerException(e); } List<String> supers = new ArrayList<String>(); supers.add(ServiceSuperClassName); JavaClassType ServiceClassType = new JavaClassType("Service", supers); ServiceClassType.setJavaClasses(result.getClasses()); JDependUnit daoLayer = null; for (JDependUnit component : components) { if (component.getName().equals("DaoLayer")) { daoLayer = component; } } for (JavaClassUnit daoClass : daoLayer.getClasses()) { for (JavaClassRelationItem relationItem : daoClass.getJavaClass().getCeItems()) { if (ServiceClassType.isMember(relationItem.getTarget())) { this.print(daoClass.getName() + " Call " + relationItem.getTarget().getName()); } } } } public String getDaoPackageEndsWith() { return DaoPackageEndsWith; } public void setDaoPackageEndsWith(String daoPackageEndsWith) { DaoPackageEndsWith = daoPackageEndsWith; } public String getServiceSuperClassName() { return ServiceSuperClassName; } public void setServiceSuperClassName(String serviceSuperClassName) { ServiceSuperClassName = serviceSuperClassName; } public String getDaoSuperClassName() { return DaoSuperClassName; } public void setDaoSuperClassName(String daoSuperClassName) { DaoSuperClassName = daoSuperClassName; } }