diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/maven/MavenArtifact.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/maven/MavenArtifact.java index 54ebe3eaa2486549bbf0170df054cf26ba3253ed..340e4876ce500498c21788d8a3b4e3e611a1c106 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/maven/MavenArtifact.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/maven/MavenArtifact.java @@ -320,7 +320,7 @@ public class MavenArtifact return localVersion; } - private boolean versionMatches(String version, String versionSpec) { + public static boolean versionMatches(String version, String versionSpec) { try { if (versionSpec.startsWith("{") && versionSpec.endsWith("}")) { Pattern versionPattern = Pattern.compile(versionSpec.substring(1, versionSpec.length() - 1)); diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/maven/MavenArtifactVersion.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/maven/MavenArtifactVersion.java index e9f24686dc2a289ab43757d7904ebc9adb510f42..a7d9b0b4142fd05f202ce41168c836ddd6c89e5a 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/maven/MavenArtifactVersion.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/maven/MavenArtifactVersion.java @@ -32,7 +32,9 @@ import java.io.*; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; /** * Maven artifact version descriptor (POM). @@ -50,24 +52,27 @@ public class MavenArtifactVersion { private String description; private String url; private MavenArtifactVersion parent; - private Map properties = new LinkedHashMap<>(); - private List licenses = new ArrayList<>(); - private List dependencies; - private List dependencyManagement; + private final List licenses = new ArrayList<>(); + private final List profiles = new ArrayList<>(); private GeneralUtils.IVariableResolver propertyResolver = new GeneralUtils.IVariableResolver() { @Override public String get(String name) { for (MavenArtifactVersion v = MavenArtifactVersion.this; v != null; v = v.parent) { - String value = v.properties.get(name); - if (value != null) { - return value; - } else if (name.equals(PROP_PROJECT_VERSION)) { - return v.version; - } else if (name.equals(PROP_PROJECT_GROUP_ID)) { - return v.artifact.getGroupId(); - } else if (name.equals(PROP_PROJECT_ARTIFACT_ID)) { - return v.artifact.getArtifactId(); + for (MavenProfile profile : profiles) { + if (!profile.isActive()) { + continue; + } + String value = profile.properties.get(name); + if (value != null) { + return value; + } else if (name.equals(PROP_PROJECT_VERSION)) { + return v.version; + } else if (name.equals(PROP_PROJECT_GROUP_ID)) { + return v.artifact.getGroupId(); + } else if (name.equals(PROP_PROJECT_ARTIFACT_ID)) { + return v.artifact.getArtifactId(); + } } } return null; @@ -104,35 +109,26 @@ public class MavenArtifactVersion { return parent; } - public Map getProperties() { - return properties; - } - public List getLicenses() { return licenses; } public List getDependencies(DBRProgressMonitor monitor) { + List dependencies = new ArrayList<>(); + for (MavenProfile profile : profiles) { + if (profile.isActive() && !CommonUtils.isEmpty(profile.dependencies)) { + dependencies.addAll(profile.dependencies); + } + } if (parent != null) { List parentDependencies = parent.getDependencies(monitor); if (!CommonUtils.isEmpty(parentDependencies)) { - if (CommonUtils.isEmpty(dependencies)) { - return parentDependencies; - } - List result = new ArrayList<>(dependencies.size() + parentDependencies.size()); - result.addAll(dependencies); - result.addAll(parentDependencies); - return result; + dependencies.addAll(parentDependencies); } } - return this.dependencies; - } - - List getDependencies() { return dependencies; } - public File getCacheFile() { if (artifact.getRepository().isLocal()) { String externalURL = getExternalURL(MavenArtifact.FILE_JAR); @@ -221,15 +217,6 @@ public class MavenArtifactVersion { } } - { - // Properties - Element propsElement = XMLUtils.getChildElement(root, "properties"); - if (propsElement != null) { - for (Element prop : XMLUtils.getChildElementList(propsElement)) { - properties.put(prop.getTagName(), XMLUtils.getElementBody(prop)); - } - } - } { // Licenses Element licensesElement = XMLUtils.getChildElement(root, "licenses"); @@ -242,15 +229,58 @@ public class MavenArtifactVersion { } } } + + // Default profile + MavenProfile defaultProfile = new MavenProfile(null); + parseProfile(monitor, defaultProfile, root); + profiles.add(defaultProfile); + + { + // Profiles + Element licensesElement = XMLUtils.getChildElement(root, "profiles"); + if (licensesElement != null) { + for (Element profElement : XMLUtils.getChildElementList(licensesElement, "profile")) { + MavenProfile profile = new MavenProfile(XMLUtils.getChildElementBody(profElement, "id")); + parseProfile(monitor, profile, profElement); + } + } + } + + monitor.worked(1); + } + + private void parseProfile(DBRProgressMonitor monitor, MavenProfile profile, Element element) { + { + // Activation + Element activationElement = XMLUtils.getChildElement(element, "activation"); + if (activationElement != null) { + String activeByDefault = XMLUtils.getChildElementBody(element, "activeByDefault"); + if (!CommonUtils.isEmpty(activeByDefault)) { + profile.active = CommonUtils.getBoolean(activeByDefault); + } + String jdk = XMLUtils.getChildElementBody(element, "jdk"); + if (!CommonUtils.isEmpty(jdk)) { + profile.active = MavenArtifact.versionMatches(System.getProperty("java.version"), jdk); + } + } + } + { + // Properties + Element propsElement = XMLUtils.getChildElement(element, "properties"); + if (propsElement != null) { + for (Element prop : XMLUtils.getChildElementList(propsElement)) { + profile.properties.put(prop.getTagName(), XMLUtils.getElementBody(prop)); + } + } + } { // Dependencies - Element dmElement = XMLUtils.getChildElement(root, "dependencyManagement"); + Element dmElement = XMLUtils.getChildElement(element, "dependencyManagement"); if (dmElement != null) { - dependencyManagement = parseDependencies(monitor, dmElement, true); + profile.dependencyManagement = parseDependencies(monitor, dmElement, true); } - dependencies = parseDependencies(monitor, root, false); + profile.dependencies = parseDependencies(monitor, element, false); } - monitor.worked(1); } private void cachePOM(File localPOM) throws IOException { @@ -335,12 +365,13 @@ public class MavenArtifactVersion { } private String findDependencyVersion(DBRProgressMonitor monitor, String groupId, String artifactId) { - if (dependencyManagement != null) { - for (MavenArtifactDependency dmArtifact : dependencyManagement) { - if (dmArtifact.getGroupId().equals(groupId) && - dmArtifact.getArtifactId().equals(artifactId)) - { - return dmArtifact.getVersion(); + for (MavenProfile profile : profiles) { + if (profile.isActive() && profile.dependencyManagement != null) { + for (MavenArtifactDependency dmArtifact : profile.dependencyManagement) { + if (dmArtifact.getGroupId().equals(groupId) && + dmArtifact.getArtifactId().equals(artifactId)) { + return dmArtifact.getVersion(); + } } } } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/maven/MavenProfile.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/maven/MavenProfile.java new file mode 100644 index 0000000000000000000000000000000000000000..de69dd0d1e5d4c880e4f01e138136a1a6f555caa --- /dev/null +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/maven/MavenProfile.java @@ -0,0 +1,63 @@ +/* + * DBeaver - Universal Database Manager + * Copyright (C) 2010-2015 Serge Rieder (serge@jkiss.org) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License (version 2) + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ +package org.jkiss.dbeaver.registry.maven; + +import org.w3c.dom.Element; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * Maven build profile + */ +public class MavenProfile { + + private final String id; + Map properties = new LinkedHashMap<>(); + List dependencies; + List dependencyManagement; + + boolean active; + + public MavenProfile(String id) { + this.id = id; + } + + public String getId() { + return id; + } + + public Map getProperties() { + return properties; + } + + public List getDependencies() { + return dependencies; + } + + public List getDependencyManagement() { + return dependencyManagement; + } + + public boolean isActive() { + return active; + } + + +}