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 ActionFormOutWebLayer extends AbstractAnalyzer { private static final long serialVersionUID = -7231037234241760758L; private String ActionFormSuperClassName; private String ActionPackageEndsWith; private String ServicePackageEndsWith; private String DaoPackageEndsWith; private String ActionSuperClassName; private String ServiceSuperClassName; private String DaoSuperClassName; public ActionFormOutWebLayer() { super("ActionForm出现在web层以外", Analyzer.AntiPattern, "ActionForm出现在web层以外"); if (this.ActionFormSuperClassName == null) { this.ActionFormSuperClassName = "org.apache.struts.action.ActionForm"; } if (this.ActionPackageEndsWith == null) { this.ActionPackageEndsWith = ".action"; } if (this.ServicePackageEndsWith == null) { this.ServicePackageEndsWith = ".service"; } if (this.DaoPackageEndsWith == null) { this.DaoPackageEndsWith = ".dao"; } } protected void doExecute(AnalysisResult result) throws AnalyzerException { List<LayerInfo> layerInfos = new ArrayList<LayerInfo>(); layerInfos.add(new LayerInfo("WebLayer", ActionSuperClassName, ActionPackageEndsWith)); layerInfos.add(new LayerInfo("ServiceLayer", ServiceSuperClassName, ServicePackageEndsWith)); layerInfos.add(new LayerInfo("DaoLayer", DaoSuperClassName, DaoPackageEndsWith)); JEELayer jeeLayer = new JEELayer(layerInfos); List<Component> components = null; try { components = jeeLayer.list(result.getJavaPackages()); } catch (ComponentException e) { throw new AnalyzerException(e); } List<String> supers = new ArrayList<String>(); supers.add(ActionFormSuperClassName); JavaClassType ActionFormClassType = new JavaClassType("ActionForm", supers); ActionFormClassType.setJavaClasses(result.getClasses()); JDependUnit serviceLayer = null; JDependUnit daoLayer = null; for (JDependUnit component : components) { if (component.getName().equals("ServiceLayer")) { serviceLayer = component; } else if (component.getName().equals("DaoLayer")) { daoLayer = component; } } for (JavaClassUnit serviceClass : serviceLayer.getClasses()) { for (JavaClassRelationItem relationItem : serviceClass.getJavaClass().getCeItems()) { if (ActionFormClassType.isMember(relationItem.getTarget())) { this.print(relationItem.getTarget().getName() + " into " + serviceClass.getName()); } } } for (JavaClassUnit daoClass : daoLayer.getClasses()) { for (JavaClassRelationItem relationItem : daoClass.getJavaClass().getCeItems()) { if (ActionFormClassType.isMember(relationItem.getTarget())) { this.print(relationItem.getTarget().getName() + " into " + daoClass.getName()); } } } } public void setActionFormSuperClassName(String actionFormSuperClassName) { ActionFormSuperClassName = actionFormSuperClassName; } public void setActionPackageEndsWith(String actionPackageEndsWith) { ActionPackageEndsWith = actionPackageEndsWith; } public void setServicePackageEndsWith(String servicePackageEndsWith) { ServicePackageEndsWith = servicePackageEndsWith; } public void setDaoPackageEndsWith(String daoPackageEndsWith) { DaoPackageEndsWith = daoPackageEndsWith; } public void setActionSuperClassName(String actionSuperClassName) { ActionSuperClassName = actionSuperClassName; } public void setServiceSuperClassName(String serviceSuperClassName) { ServiceSuperClassName = serviceSuperClassName; } public void setDaoSuperClassName(String daoSuperClassName) { DaoSuperClassName = daoSuperClassName; } public String getActionFormSuperClassName() { return ActionFormSuperClassName; } public String getActionPackageEndsWith() { return ActionPackageEndsWith; } public String getServicePackageEndsWith() { return ServicePackageEndsWith; } public String getDaoPackageEndsWith() { return DaoPackageEndsWith; } public String getActionSuperClassName() { return ActionSuperClassName; } public String getServiceSuperClassName() { return ServiceSuperClassName; } public String getDaoSuperClassName() { return DaoSuperClassName; } }