commit:     889bcaf2504570a64c9b0a8e1f22b092a83e0c0c
Author:     Miroslav Šulc <fordfrog <AT> gentoo <DOT> org>
AuthorDate: Fri Nov  1 19:41:43 2019 +0000
Commit:     Miroslav Šulc <fordfrog <AT> gentoo <DOT> org>
CommitDate: Fri Nov  1 19:41:43 2019 +0000
URL:        https://gitweb.gentoo.org/proj/java-ebuilder.git/commit/?id=889bcaf2

added parsing of ebuild file name components

Signed-off-by: Miroslav Šulc <fordfrog <AT> gentoo.org>

 src/main/java/org/gentoo/java/ebuilder/Config.java | 66 ++++++++++++++++++++++
 src/main/java/org/gentoo/java/ebuilder/Main.java   | 30 ++++++++++
 .../java/ebuilder/portage/PortageParser.java       | 45 +++++++++++++++
 3 files changed, 141 insertions(+)

diff --git a/src/main/java/org/gentoo/java/ebuilder/Config.java 
b/src/main/java/org/gentoo/java/ebuilder/Config.java
index 4127266..9bc98f8 100644
--- a/src/main/java/org/gentoo/java/ebuilder/Config.java
+++ b/src/main/java/org/gentoo/java/ebuilder/Config.java
@@ -28,6 +28,18 @@ public class Config {
      * Path to ebuild file that should be generated.
      */
     private Path ebuild;
+    /**
+     * Ebuild name.
+     */
+    private String ebuildName;
+    /**
+     * Ebuild version excluding suffix.
+     */
+    private String ebuildVersion;
+    /**
+     * Ebuild version suffix (-r).
+     */
+    private String ebuildVersionSuffix;
     /**
      * Writer for errors.
      */
@@ -144,6 +156,60 @@ public class Config {
         this.ebuild = ebuild;
     }
 
+    /**
+     * Getter for {@link #ebuildName}.
+     *
+     * @return {@link #ebuildName}
+     */
+    public String getEbuildName() {
+        return ebuildName;
+    }
+
+    /**
+     * Setter for {@link #ebuildName}.
+     *
+     * @param ebuildName {@link #ebuildName}
+     */
+    public void setEbuildName(final String ebuildName) {
+        this.ebuildName = ebuildName;
+    }
+
+    /**
+     * Getter for {@link #ebuildVersion}.
+     *
+     * @return {@link #ebuildVersion}
+     */
+    public String getEbuildVersion() {
+        return ebuildVersion;
+    }
+
+    /**
+     * Setter for {@link #ebuildVersion}.
+     *
+     * @param ebuildVersion {@link #ebuildVersion}
+     */
+    public void setEbuildVersion(final String ebuildVersion) {
+        this.ebuildVersion = ebuildVersion;
+    }
+
+    /**
+     * Getter for {@link #ebuildVersionSuffix}.
+     *
+     * @return {@link #ebuildVersionSuffix}
+     */
+    public String getEbuildVersionSuffix() {
+        return ebuildVersionSuffix;
+    }
+
+    /**
+     * Setter for {@link #ebuildVersionSuffix}.
+     *
+     * @param ebuildVersionSuffix {@link #ebuildVersionSuffix}
+     */
+    public void setEbuildVersionSuffix(final String ebuildVersionSuffix) {
+        this.ebuildVersionSuffix = ebuildVersionSuffix;
+    }
+
     /**
      * Getter for {@link #errorWriter}.
      *

diff --git a/src/main/java/org/gentoo/java/ebuilder/Main.java 
b/src/main/java/org/gentoo/java/ebuilder/Main.java
index 5921ea1..6c5cd13 100644
--- a/src/main/java/org/gentoo/java/ebuilder/Main.java
+++ b/src/main/java/org/gentoo/java/ebuilder/Main.java
@@ -9,6 +9,7 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.nio.file.Paths;
 import java.util.List;
+import java.util.Map;
 import org.gentoo.java.ebuilder.maven.MavenCache;
 import org.gentoo.java.ebuilder.maven.MavenEbuilder;
 import org.gentoo.java.ebuilder.maven.MavenParser;
@@ -159,6 +160,8 @@ public class Main {
      * @param config application configuration
      */
     private static void generateEbuild(final Config config) {
+        parseEbuildName(config);
+
         final MavenCache mavenCache = new MavenCache();
         mavenCache.loadCache(config);
 
@@ -253,6 +256,33 @@ public class Main {
         }
     }
 
+    /**
+     * Parses ebuild file name into its components.
+     *
+     * @param config app configuration containing ebuild information
+     */
+    private static void parseEbuildName(final Config config) {
+        final Map<String, String> result;
+
+        try {
+            result = PortageParser.parseEbuildName(
+                    config.getEbuild().getFileName().toString());
+
+            config.setEbuildName(result.get("name"));
+            config.setEbuildVersion(result.get("version"));
+            config.setEbuildVersionSuffix(result.get("suffix"));
+
+            config.getStdoutWriter().println("Parsed ebuild file name - name: "
+                    + config.getEbuildName() + " version: "
+                    + config.getEbuildVersion() + " suffix: "
+                    + config.getEbuildVersionSuffix());
+        } catch (final IllegalArgumentException ex) {
+            config.getStdoutWriter().println("Cannot parse ebuild file name");
+
+            Runtime.getRuntime().exit(1);
+        }
+    }
+
     /**
      * Prints application usage information.
      */

diff --git a/src/main/java/org/gentoo/java/ebuilder/portage/PortageParser.java 
b/src/main/java/org/gentoo/java/ebuilder/portage/PortageParser.java
index d504b2c..a85fe6c 100644
--- a/src/main/java/org/gentoo/java/ebuilder/portage/PortageParser.java
+++ b/src/main/java/org/gentoo/java/ebuilder/portage/PortageParser.java
@@ -49,6 +49,11 @@ public class PortageParser {
      * Current java utilities eclass name.
      */
     private static final String ECLASS_JAVA_UTILS = "java-utils-2";
+    /**
+     * Pattern for parsing ebuild file name.
+     */
+    private static final Pattern PATTERN_EBUILD_NAME = Pattern.compile(
+            "^(\\S+?)-([^-]+)(?:-(r\\d+))?\\.ebuild$");
     /**
      * Pattern for parsing SLOT with bash substring.
      */
@@ -67,6 +72,46 @@ public class PortageParser {
      */
     private static final Pattern PATTERN_VARIABLE = Pattern.compile(
             "^(\\S+?)=(.*)$");
+
+    /**
+     * Parses ebuild name into map. Keys are:
+     * <dl>
+     * <dt>name</dt>
+     * <dd>ebuild name</dd>
+     * <dt>version</dt>
+     * <dd>ebuild version</dd>
+     * <dt>suffix</dt>
+     * <dd>ebuild version suffix (-r)</dd>
+     * </dl>
+     * If suffix is not present in ebuild name, it is not put into the map
+     * aswell.
+     *
+     * @param name ebuild file name
+     *
+     * @return map of parsed values
+     *
+     * @throws IllegalArgumentException Thrown if the ebuild file name is not
+     *                                  valid or it cannot be parsed.
+     */
+    public static Map<String, String> parseEbuildName(final String name) {
+        final Matcher matcher = PATTERN_EBUILD_NAME.matcher(name);
+
+        if (!matcher.matches()) {
+            throw new IllegalArgumentException("Ebuild file name is not valid "
+                    + "or parser does not support this ebuild name format");
+        }
+
+        final Map<String, String> result = new HashMap<>(3);
+        result.put("name", matcher.group(1));
+        result.put("version", matcher.group(2));
+
+        if (matcher.groupCount() > 2) {
+            result.put("suffix", matcher.group(3));
+        }
+
+        return result;
+    }
+
     /**
      * List of cache items. This list is populated during parsing the tree.
      */

Reply via email to