From f4ed3e259d4e58e17290c9a23a1879bf463e10a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Pluta?= Date: Fri, 5 Apr 2019 14:16:51 +0200 Subject: [PATCH] 10: Add checking element in BasePlugin --- .../bartek/esa/core/archetype/BasePlugin.java | 43 ++++++++++++++++++- .../bartek/esa/core/archetype/JavaPlugin.java | 1 + .../bartek/esa/core/archetype/XmlPlugin.java | 1 + .../esa/core/plugin/AllowBackupPlugin.java | 2 +- .../esa/core/plugin/DebuggablePlugin.java | 2 +- src/main/resources/description.properties | 13 ++++++ 6 files changed, 59 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/bartek/esa/core/archetype/BasePlugin.java b/src/main/java/com/bartek/esa/core/archetype/BasePlugin.java index ed3465d..4dc66ab 100644 --- a/src/main/java/com/bartek/esa/core/archetype/BasePlugin.java +++ b/src/main/java/com/bartek/esa/core/archetype/BasePlugin.java @@ -2,8 +2,11 @@ package com.bartek.esa.core.archetype; import com.bartek.esa.core.model.enumeration.Severity; import com.bartek.esa.core.model.object.Issue; +import com.bartek.esa.core.xml.XmlHelper; import org.w3c.dom.Document; +import org.w3c.dom.Node; +import javax.xml.xpath.XPathConstants; import java.io.File; import java.util.HashMap; import java.util.HashSet; @@ -11,10 +14,15 @@ import java.util.Map; import java.util.Set; public abstract class BasePlugin implements Plugin { + private final XmlHelper xmlHelper; private Set issues = new HashSet<>(); private Document manifest; private File file; + public BasePlugin(XmlHelper xmlHelper) { + this.xmlHelper = xmlHelper; + } + @Override public void update(File file, Document manifest) { this.file = file; @@ -24,10 +32,43 @@ public abstract class BasePlugin implements Plugin { @Override public Set runForIssues() { - run(file); + if(canBeExecuted()) { + run(file); + } return issues; } + private boolean canBeExecuted() { + return hasDeclaredApiVersion(); + } + + private boolean hasDeclaredApiVersion() { + Node usesSdkNode = (Node) xmlHelper.xPath(manifest, "/manifest/uses-sdk", XPathConstants.NODE); + if(usesSdkNode == null) { + Issue issue = Issue.builder() + .issuer(BasePlugin.class) + .descriptionCode(".NO_USES_SDK") + .severity(Severity.ERROR) + .build(); + addIssue(issue); + + return false; + } + + if(usesSdkNode.getAttributes().getNamedItem("android:minSdkVersion") == null) { + Issue issue = Issue.builder() + .issuer(BasePlugin.class) + .descriptionCode(".USES_SDK.NO_MIN_SDK_VERSION") + .severity(Severity.ERROR) + .build(); + addIssue(issue); + + return false; + } + + return true; + } + protected abstract void run(File file); protected void addIssue(Severity severity, Integer lineNumber, String line) { diff --git a/src/main/java/com/bartek/esa/core/archetype/JavaPlugin.java b/src/main/java/com/bartek/esa/core/archetype/JavaPlugin.java index 030587f..d9f9791 100644 --- a/src/main/java/com/bartek/esa/core/archetype/JavaPlugin.java +++ b/src/main/java/com/bartek/esa/core/archetype/JavaPlugin.java @@ -21,6 +21,7 @@ public abstract class JavaPlugin extends BasePlugin { private final XmlHelper xmlHelper; public JavaPlugin(GlobMatcher globMatcher, XmlHelper xmlHelper) { + super(xmlHelper); this.globMatcher = globMatcher; this.xmlHelper = xmlHelper; } diff --git a/src/main/java/com/bartek/esa/core/archetype/XmlPlugin.java b/src/main/java/com/bartek/esa/core/archetype/XmlPlugin.java index c1bbedd..082c984 100644 --- a/src/main/java/com/bartek/esa/core/archetype/XmlPlugin.java +++ b/src/main/java/com/bartek/esa/core/archetype/XmlPlugin.java @@ -12,6 +12,7 @@ public abstract class XmlPlugin extends BasePlugin { private final XmlHelper xmlHelper; public XmlPlugin(GlobMatcher globMatcher, XmlHelper xmlHelper) { + super(xmlHelper); this.globMatcher = globMatcher; this.xmlHelper = xmlHelper; } diff --git a/src/main/java/com/bartek/esa/core/plugin/AllowBackupPlugin.java b/src/main/java/com/bartek/esa/core/plugin/AllowBackupPlugin.java index 87c21a6..d188bc0 100644 --- a/src/main/java/com/bartek/esa/core/plugin/AllowBackupPlugin.java +++ b/src/main/java/com/bartek/esa/core/plugin/AllowBackupPlugin.java @@ -25,6 +25,6 @@ public class AllowBackupPlugin extends AndroidManifestPlugin { if (!n.getNodeValue().equals("false")) { addIssue(Severity.WARNING, ".NO_FALSE", null, n.toString()); } - }, () -> addIssue(Severity.ERROR, ".NO_ATTR", null, null)); + }, () -> addIssue(Severity.WARNING, ".NO_ATTR", null, null)); } } diff --git a/src/main/java/com/bartek/esa/core/plugin/DebuggablePlugin.java b/src/main/java/com/bartek/esa/core/plugin/DebuggablePlugin.java index e198352..481ad80 100644 --- a/src/main/java/com/bartek/esa/core/plugin/DebuggablePlugin.java +++ b/src/main/java/com/bartek/esa/core/plugin/DebuggablePlugin.java @@ -25,6 +25,6 @@ public class DebuggablePlugin extends AndroidManifestPlugin { if(!n.getNodeValue().equals("false")) { addIssue(Severity.WARNING, ".NO_FALSE", null, n.toString()); } - }, () -> addIssue(Severity.ERROR, ".NO_ATTR",null, null)); + }, () -> addIssue(Severity.WARNING, ".NO_ATTR",null, null)); } } diff --git a/src/main/resources/description.properties b/src/main/resources/description.properties index 10a1b91..d0b792b 100644 --- a/src/main/resources/description.properties +++ b/src/main/resources/description.properties @@ -1,3 +1,16 @@ +com.bartek.esa.core.archetype.BasePlugin.NO_USES_SDK=There is no defined in AndroidManifest.xml file. \n\ + In order to use this tool, should be defined in AndroidManifest.xml with android:minSdkVersion attribute at least.\n\ + This element should be placed below the root () level.\n\ + For example: \n\ + \n\ + \t\n\ + \t...\n\ + + +com.bartek.esa.core.archetype.BasePlugin.USES_SDK.NO_MIN_SDK_VERSION=There is no minSdkVersion defined in AndroidManifest.xml file. \n\ + In order to use this tool, minimal SDK version should be provided as the attribute of element.\n\ + For example: + com.bartek.esa.core.archetype.JavaPlugin.NO_PACKAGE=There is no package defined in AndroidManifest.xml file. \n\ Package should be defined as attribute of tag.\n\ For example: \n\