// Path: vertx-deploy-agent/src/main/java/nl/jpoint/vertx/deploy/agent/request/ModuleRequest.java
// public abstract class ModuleRequest {
// 
//     public static final String CONFIG_TYPE = "config";
//     public static final String ZIP_TYPE = "zip";
//     public static final String GZIP_TYPE = "tar.gz";
// 
//     private final UUID id = UUID.randomUUID();
//     private final String groupId;
//     private final String artifactId;
//     private final String classifier;
//     private final String type;
//     private final String remoteBase;
//     private final boolean snapshot;
//     private String version;
// 
//     private boolean restart = false;
// 
//     private Optional<String> restartCommand;
//     private Optional<String> testCommand;
//     private Path baseLocation;
// 
// 
//     ModuleRequest(final String groupId, final String artifactId, final String version, final String classifier, final String type) {
//         this.groupId = groupId;
//         this.artifactId = artifactId;
//         this.version = version;
//         this.classifier = classifier;
//         this.type = type != null ? type : "jar";
//         this.snapshot = version.endsWith("-SNAPSHOT");
//         this.remoteBase = groupId.replaceAll("\\.", "/") + "/" + artifactId + "/" + version + "/";
//     }
// 
//     public String getGroupId() {
//         return groupId;
//     }
// 
//     public String getArtifactId() {
//         return artifactId;
//     }
// 
//     public String getVersion() {
//         return version;
//     }
// 
//     public void setVersion(String version) {
//         this.version = version;
//     }
// 
//     public UUID getId() {
//         return id;
//     }
// 
//     public String getModuleId() {
//         return this.groupId + ":" + this.artifactId + ":" + this.version;
//     }
// 
//     public String getMavenArtifactId() {
//         return this.groupId + ":" + this.artifactId;
//     }
// 
//     public String getRemoteLocation() {
//         return remoteBase + getFileName();
//     }
// 
//     public Path getLocalPath(Path localRepo) {
//         if (!Objects.equals(type, "jar")) {
//             return localRepo.resolve(getFileName());
//         }
//         return null;
//     }
// 
//     public String getFileName() {
//         StringBuilder builder = new StringBuilder()
//                 .append(getArtifactId()).append("-");
//         builder.append(version);
//         if (classifier != null && !classifier.isEmpty()) {
//             builder.append("-")
//                     .append(classifier);
//         }
//         builder.append(".");
//         builder.append(type);
// 
//         return builder.toString();
// 
//     }
// 
//     public boolean isSnapshot() {
//         return snapshot;
//     }
// 
//     public String getMetadataLocation() {
//         return remoteBase + "maven-metadata.xml";
// 
//     }
// 
//     public String getType() {
//         return type;
//     }
// 
//     public boolean restart() {
//         return restart;
//     }
// 
//     public void setRestart(boolean restart) {
//         this.restart = restart;
//     }
// 
//     public Optional<String> getRestartCommand() {
//         return restartCommand;
//     }
// 
//     public void setRestartCommand(String restartCommand) {
//         this.restartCommand = (restartCommand == null || restartCommand.isEmpty()) ? Optional.empty() : Optional.of(restartCommand);
//     }
// 
//     public Optional<String> getTestCommand() {
//         return testCommand;
//     }
// 
//     public void setTestCommand(String testCommand) {
//         this.testCommand = (testCommand == null || testCommand.isEmpty()) ? Optional.empty() : Optional.of(testCommand);
//     }
// 
//     public Path getBaseLocation() {
//         return baseLocation;
//     }
// 
//     public void setBaseLocation(String baseLocation) {
//         this.baseLocation = Paths.get(baseLocation);
//     }
// 
//     public abstract boolean deleteBase();
// 
//     public abstract boolean checkConfig();
// 
//     public abstract String getLogName();
// 
// }


import nl.jpoint.vertx.deploy.agent.request.ModuleRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import java.io.ByteArrayInputStream;
import java.io.IOException;
package nl.jpoint.vertx.deploy.agent.util;




public class MetadataXPathUtil {

    private static final String TIMESTAMP = "/metadata/versioning/snapshot/timestamp/text()";
    private static final String BUILD_NUMBER = "/metadata/versioning/snapshot/buildNumber/text()";

    private static final Logger LOG = LoggerFactory.getLogger(MetadataXPathUtil.class);

// Path: vertx-deploy-agent/src/main/java/nl/jpoint/vertx/deploy/agent/request/ModuleRequest.java
// public abstract class ModuleRequest {
// 
//     public static final String CONFIG_TYPE = "config";
//     public static final String ZIP_TYPE = "zip";
//     public static final String GZIP_TYPE = "tar.gz";
// 
//     private final UUID id = UUID.randomUUID();
//     private final String groupId;
//     private final String artifactId;
//     private final String classifier;
//     private final String type;
//     private final String remoteBase;
//     private final boolean snapshot;
//     private String version;
// 
//     private boolean restart = false;
// 
//     private Optional<String> restartCommand;
//     private Optional<String> testCommand;
//     private Path baseLocation;
// 
// 
//     ModuleRequest(final String groupId, final String artifactId, final String version, final String classifier, final String type) {
//         this.groupId = groupId;
//         this.artifactId = artifactId;
//         this.version = version;
//         this.classifier = classifier;
//         this.type = type != null ? type : "jar";
//         this.snapshot = version.endsWith("-SNAPSHOT");
//         this.remoteBase = groupId.replaceAll("\\.", "/") + "/" + artifactId + "/" + version + "/";
//     }
// 
//     public String getGroupId() {
//         return groupId;
//     }
// 
//     public String getArtifactId() {
//         return artifactId;
//     }
// 
//     public String getVersion() {
//         return version;
//     }
// 
//     public void setVersion(String version) {
//         this.version = version;
//     }
// 
//     public UUID getId() {
//         return id;
//     }
// 
//     public String getModuleId() {
//         return this.groupId + ":" + this.artifactId + ":" + this.version;
//     }
// 
//     public String getMavenArtifactId() {
//         return this.groupId + ":" + this.artifactId;
//     }
// 
//     public String getRemoteLocation() {
//         return remoteBase + getFileName();
//     }
// 
//     public Path getLocalPath(Path localRepo) {
//         if (!Objects.equals(type, "jar")) {
//             return localRepo.resolve(getFileName());
//         }
//         return null;
//     }
// 
//     public String getFileName() {
//         StringBuilder builder = new StringBuilder()
//                 .append(getArtifactId()).append("-");
//         builder.append(version);
//         if (classifier != null && !classifier.isEmpty()) {
//             builder.append("-")
//                     .append(classifier);
//         }
//         builder.append(".");
//         builder.append(type);
// 
//         return builder.toString();
// 
//     }
// 
//     public boolean isSnapshot() {
//         return snapshot;
//     }
// 
//     public String getMetadataLocation() {
//         return remoteBase + "maven-metadata.xml";
// 
//     }
// 
//     public String getType() {
//         return type;
//     }
// 
//     public boolean restart() {
//         return restart;
//     }
// 
//     public void setRestart(boolean restart) {
//         this.restart = restart;
//     }
// 
//     public Optional<String> getRestartCommand() {
//         return restartCommand;
//     }
// 
//     public void setRestartCommand(String restartCommand) {
//         this.restartCommand = (restartCommand == null || restartCommand.isEmpty()) ? Optional.empty() : Optional.of(restartCommand);
//     }
// 
//     public Optional<String> getTestCommand() {
//         return testCommand;
//     }
// 
//     public void setTestCommand(String testCommand) {
//         this.testCommand = (testCommand == null || testCommand.isEmpty()) ? Optional.empty() : Optional.of(testCommand);
//     }
// 
//     public Path getBaseLocation() {
//         return baseLocation;
//     }
// 
//     public void setBaseLocation(String baseLocation) {
//         this.baseLocation = Paths.get(baseLocation);
//     }
// 
//     public abstract boolean deleteBase();
// 
//     public abstract boolean checkConfig();
// 
//     public abstract String getLogName();
// 
// }


// Path: vertx-deploy-agent/src/main/java/nl/jpoint/vertx/deploy/agent/util/MetadataXPathUtil.java
import nl.jpoint.vertx.deploy.agent.request.ModuleRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import java.io.ByteArrayInputStream;
import java.io.IOException;

package nl.jpoint.vertx.deploy.agent.util;




public class MetadataXPathUtil {

    private static final String TIMESTAMP = "/metadata/versioning/snapshot/timestamp/text()";
    private static final String BUILD_NUMBER = "/metadata/versioning/snapshot/buildNumber/text()";

    private static final Logger LOG = LoggerFactory.getLogger(MetadataXPathUtil.class);

    public static String getRealSnapshotVersionFromMetadata(byte[] metadata, ModuleRequest request) {