This is an automated email from the ASF dual-hosted git repository.

lkishalmi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git


The following commit(s) were added to refs/heads/master by this push:
     new 81af35ca15 Add property sheet for Gradle Configuration nodes
81af35ca15 is described below

commit 81af35ca1534a04554019de8336a14d628a1eb50
Author: Laszlo Kishalmi <laszlo.kisha...@gmail.com>
AuthorDate: Thu Jun 2 21:42:38 2022 +0200

    Add property sheet for Gradle Configuration nodes
---
 extide/gradle/nbproject/project.xml                |   2 +-
 .../gradle/tooling/NbProjectInfoBuilder.java       |  11 +++
 .../gradle/api/GradleBaseProjectBuilder.java       |   5 +
 .../modules/gradle/api/GradleConfiguration.java    |  26 ++++++
 .../modules/gradle/cache/ProjectInfoDiskCache.java |   2 +-
 .../modules/gradle/nodes/ConfigurationsNode.java   | 104 +++++++++++++++------
 6 files changed, 121 insertions(+), 29 deletions(-)

diff --git a/extide/gradle/nbproject/project.xml 
b/extide/gradle/nbproject/project.xml
index 65840173c7..024a39262f 100644
--- a/extide/gradle/nbproject/project.xml
+++ b/extide/gradle/nbproject/project.xml
@@ -314,7 +314,7 @@
                     <build-prerequisite/>
                     <compile-dependency/>
                     <run-dependency>
-                        <specification-version>7.38.1</specification-version>
+                        <specification-version>7.62</specification-version>
                     </run-dependency>
                 </dependency>
                 <dependency>
diff --git 
a/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java
 
b/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java
index bc3c26203f..ff6c30571d 100644
--- 
a/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java
+++ 
b/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java
@@ -28,6 +28,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
@@ -53,6 +54,8 @@ import 
org.gradle.api.artifacts.result.ComponentArtifactsResult;
 import org.gradle.api.artifacts.result.ResolvedArtifactResult;
 import org.gradle.api.artifacts.result.ResolvedDependencyResult;
 import org.gradle.api.artifacts.result.UnresolvedDependencyResult;
+import org.gradle.api.attributes.Attribute;
+import org.gradle.api.attributes.AttributeContainer;
 import org.gradle.api.distribution.DistributionContainer;
 import org.gradle.api.file.ConfigurableFileCollection;
 import org.gradle.api.initialization.IncludedBuild;
@@ -417,8 +420,16 @@ class NbProjectInfoBuilder {
             String propBase = "configuration_" + it.getName() + "_";
             model.getInfo().put(propBase + "non_resolving", !resolvable(it));
             model.getInfo().put(propBase + "transitive",  it.isTransitive());
+            model.getInfo().put(propBase + "canBeConsumed", 
it.isCanBeConsumed());
             model.getInfo().put(propBase + "extendsFrom",  
it.getExtendsFrom().stream().map(c -> 
c.getName()).collect(Collectors.toCollection(HashSet::new)));
             model.getInfo().put(propBase + "description",  
it.getDescription());
+
+            Map<String, String> attributes = new LinkedHashMap<>();
+            AttributeContainer attrs = it.getAttributes();
+            for (Attribute<?> attr : attrs.keySet()) {
+                attributes.put(attr.getName(), 
String.valueOf(attrs.getAttribute(attr)));
+            }
+            model.getInfo().put(propBase + "attributes", attributes);
         });
         //visibleConfigurations = visibleConfigurations.findAll() { 
resolvable(it) }
         visibleConfigurations.forEach(it -> {
diff --git 
a/extide/gradle/src/org/netbeans/modules/gradle/api/GradleBaseProjectBuilder.java
 
b/extide/gradle/src/org/netbeans/modules/gradle/api/GradleBaseProjectBuilder.java
index dc5586c114..5aefbc9e75 100644
--- 
a/extide/gradle/src/org/netbeans/modules/gradle/api/GradleBaseProjectBuilder.java
+++ 
b/extide/gradle/src/org/netbeans/modules/gradle/api/GradleBaseProjectBuilder.java
@@ -284,6 +284,11 @@ class GradleBaseProjectBuilder implements 
ProjectInfoExtractor.Result {
                 Boolean transitive = (Boolean) info.get("configuration_" + 
name + "_transitive");
                 conf.transitive = transitive == null ? true : transitive;
 
+                Boolean canBeConsumed = (Boolean) info.get("configuration_" + 
name + "_canBeConsumed");
+                conf.canBeConsumed = canBeConsumed == null ? false : 
canBeConsumed;
+
+                conf.attributes = (Map<String, String>) 
info.get("configuration_" + name + "_attributes");
+
                 conf.description = (String) info.get("configuration_" + name + 
"_description");
             }
             for (String name : configurationNames) {
diff --git 
a/extide/gradle/src/org/netbeans/modules/gradle/api/GradleConfiguration.java 
b/extide/gradle/src/org/netbeans/modules/gradle/api/GradleConfiguration.java
index 96634bd37c..cf619ec942 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/api/GradleConfiguration.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/api/GradleConfiguration.java
@@ -22,6 +22,7 @@ package org.netbeans.modules.gradle.api;
 import java.io.Serializable;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.Map;
 import java.util.Set;
 import org.netbeans.modules.gradle.GradleModuleFileCache21;
 
@@ -41,6 +42,8 @@ public final class GradleConfiguration implements 
Serializable, ModuleSearchSupp
     GradleDependency.FileCollectionDependency files;
     boolean transitive;
     boolean canBeResolved = true;
+    boolean canBeConsumed;
+    Map<String, String> attributes;
 
     GradleConfiguration(String name) {
         this.name = name;
@@ -119,6 +122,29 @@ public final class GradleConfiguration implements 
Serializable, ModuleSearchSupp
         return canBeResolved;
     }
 
+    /**
+     * Returns {@code true} if this configuration is to be consumed.
+     * 
+     * @return {@code true} if this configuration is consumable.
+     * @since 2.24
+     */
+    public boolean isCanBeConsumed() {
+        return canBeConsumed;
+    }
+
+    /**
+     * Returns the attributes of this configuration. The returned map is a
+     * simplified version of the Gradle configuration
+     * {@link 
https://docs.gradle.org/current/javadoc/org/gradle/api/attributes/AttributeContainer.html
 AttributeContainer},
+     * where the attribute names are the keys and the attribute string values 
are the values.
+     *
+     * @return the attributes of this configuration
+     * @since 2.24
+     */
+    public Map<String, String> getAttributes() {
+        return attributes != null ? attributes : Collections.emptyMap();
+    }
+
     public boolean isEmpty() {
         return ((files == null || files.files.isEmpty()) 
                 && modules.isEmpty() 
diff --git 
a/extide/gradle/src/org/netbeans/modules/gradle/cache/ProjectInfoDiskCache.java 
b/extide/gradle/src/org/netbeans/modules/gradle/cache/ProjectInfoDiskCache.java
index 3560708c27..74757cdb6f 100644
--- 
a/extide/gradle/src/org/netbeans/modules/gradle/cache/ProjectInfoDiskCache.java
+++ 
b/extide/gradle/src/org/netbeans/modules/gradle/cache/ProjectInfoDiskCache.java
@@ -45,7 +45,7 @@ import org.netbeans.modules.gradle.spi.GradleFiles;
 public final class ProjectInfoDiskCache extends AbstractDiskCache<GradleFiles, 
QualifiedProjectInfo> {
 
     // Increase this number if new info is gathered from the projects.
-    private static final int COMPATIBLE_CACHE_VERSION = 21;
+    private static final int COMPATIBLE_CACHE_VERSION = 22;
     private static final String INFO_CACHE_FILE_NAME = "project-info.ser"; 
//NOI18N
     private static final Map<GradleFiles, ProjectInfoDiskCache> DISK_CACHES = 
Collections.synchronizedMap(new WeakHashMap<>());
 
diff --git 
a/extide/gradle/src/org/netbeans/modules/gradle/nodes/ConfigurationsNode.java 
b/extide/gradle/src/org/netbeans/modules/gradle/nodes/ConfigurationsNode.java
index ed5218ff28..348883f441 100644
--- 
a/extide/gradle/src/org/netbeans/modules/gradle/nodes/ConfigurationsNode.java
+++ 
b/extide/gradle/src/org/netbeans/modules/gradle/nodes/ConfigurationsNode.java
@@ -16,7 +16,6 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
 package org.netbeans.modules.gradle.nodes;
 
 import org.netbeans.modules.gradle.ActionProviderImpl;
@@ -38,6 +37,7 @@ import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.prefs.PreferenceChangeEvent;
 import java.util.prefs.PreferenceChangeListener;
 import javax.swing.AbstractAction;
@@ -50,6 +50,7 @@ import org.netbeans.api.project.ProjectManager;
 import org.netbeans.modules.gradle.api.GradleBaseProject;
 import org.netbeans.modules.gradle.api.NbGradleProject.Quality;
 import org.netbeans.spi.project.ui.LogicalViewProvider;
+import org.openide.actions.PropertiesAction;
 import org.openide.awt.HtmlBrowser;
 import org.openide.filesystems.FileObject;
 import org.openide.filesystems.FileUtil;
@@ -60,8 +61,12 @@ import org.openide.nodes.ChildFactory;
 import org.openide.nodes.Children;
 import org.openide.nodes.FilterNode;
 import org.openide.nodes.Node;
+import org.openide.nodes.PropertySupport;
+import org.openide.nodes.Sheet;
 import org.openide.util.ImageUtilities;
 import org.openide.util.NbBundle;
+import org.openide.util.NbBundle.Messages;
+import org.openide.util.actions.SystemAction;
 import org.openide.util.lookup.Lookups;
 
 /**
@@ -122,7 +127,7 @@ public class ConfigurationsNode extends AbstractNode {
 
     @Override
     public Action[] getActions(boolean context) {
-        return new Action[] {
+        return new Action[]{
             downloadSourcesAction,
             downloadJavadocAction
         };
@@ -152,24 +157,7 @@ public class ConfigurationsNode extends AbstractNode {
 
         @Override
         protected Node createNodeForKey(GradleConfiguration conf) {
-            Children ch = conf.isEmpty() ? Children.LEAF : Children.create(new 
ConfigurationChildren(project, conf.getName()), false);
-            AbstractNode ret = new AbstractNode(ch);
-            ret.setName(conf.getName());
-            ret.setShortDescription(conf.getDescription());
-            StringBuilder displayName = new StringBuilder(conf.getName());
-            if (!conf.getExtendsFrom().isEmpty()) {
-                displayName.append(" [");
-                String separator = "";
-                for (GradleConfiguration ext : conf.getExtendsFrom()) {
-                    displayName.append(separator);
-                    displayName.append(ext.getName());
-                    separator = ", ";
-                }
-                displayName.append(']');
-            }
-            ret.setDisplayName(displayName.toString());
-            ret.setIconBaseWithExtension(LIBRARIES_ICON);
-            return ret;
+            return new ConfigurationNode(project, conf);
         }
 
         @Override
@@ -208,24 +196,23 @@ public class ConfigurationsNode extends AbstractNode {
         @Override
         public void propertyChange(PropertyChangeEvent evt) {
             refresh(false);
-    }
+        }
 
     }
 
     private static class ConfigurationChildren extends 
ChildFactory.Detachable<GradleDependency> implements PropertyChangeListener {
 
-        private final NbGradleProjectImpl project;
+        private final Project project;
         private final String configuration;
 
-        public ConfigurationChildren(NbGradleProjectImpl project, String 
configuration) {
+        public ConfigurationChildren(Project project, String configuration) {
             this.project = project;
             this.configuration = configuration;
         }
 
         @NbBundle.Messages({
             "LBL_LocalDependenciesNode=Local Files",
-            "HINT_NotResolvableConfiguration=This dependency is not resolved 
here as its configuration can't be resolved.",
-        })
+            "HINT_NotResolvableConfiguration=This dependency is not resolved 
here as its configuration can't be resolved.",})
         @Override
         protected Node[] createNodesForKey(GradleDependency key) {
             ArrayList<Node> ret = new ArrayList<>(1);
@@ -332,11 +319,11 @@ public class ConfigurationsNode extends AbstractNode {
 
     private static class ModuleFilterNode extends FilterNode implements 
ChangeListener {
 
-        private final NbGradleProjectImpl project;
+        private final Project project;
         private final GradleDependency.ModuleDependency module;
         private final DataObject mainJar;
 
-        public ModuleFilterNode(NbGradleProjectImpl project, 
GradleDependency.ModuleDependency module, DataObject mainJar) {
+        public ModuleFilterNode(Project project, 
GradleDependency.ModuleDependency module, DataObject mainJar) {
             super(mainJar.getNodeDelegate().cloneNode());
             this.project = project;
             this.module = module;
@@ -442,7 +429,59 @@ public class ConfigurationsNode extends AbstractNode {
             return null;
         }
 
+    }
 
+    private static class ConfigurationNode extends AbstractNode {
+
+        public ConfigurationNode(Project project, GradleConfiguration conf) {
+            super(conf.isEmpty() ? Children.LEAF : Children.create(new 
ConfigurationChildren(project, conf.getName()), false), Lookups.fixed(project, 
conf));
+            setName(conf.getName());
+            setShortDescription(conf.getDescription());
+            StringBuilder displayName = new StringBuilder(conf.getName());
+            if (!conf.getExtendsFrom().isEmpty()) {
+                displayName.append(" [").append(extendsFrom(conf)).append(']');
+            }
+            setDisplayName(displayName.toString());
+            setIconBaseWithExtension(LIBRARIES_ICON);
+        }
+
+        @Override
+        @Messages({
+            "LBL_name=Name",
+            "LBL_canBeConsumed=Can be Consumed",
+            "LBL_canBeResolved=Can be Resolved",
+            "LBL_extendsFrom=Extends From",
+            "LBL_transitive=Transitive",
+            "LBL_attributes=Attributes",
+        })
+        protected final Sheet createSheet() {
+            Sheet sheet = Sheet.createDefault();
+            Sheet.Set set = Sheet.createPropertiesSet();
+            GradleConfiguration conf = 
getLookup().lookup(GradleConfiguration.class);
+
+            set.put(PropertySupport.readOnly("name", String.class, 
conf::getName).withDisplayName(Bundle.LBL_name()));                            
//NOI18N
+            set.put(PropertySupport.readOnly("canBeConsumed", Boolean.class, 
conf::isCanBeConsumed).withDisplayName(Bundle.LBL_canBeConsumed())); //NOI18N
+            set.put(PropertySupport.readOnly("canBeResolved", Boolean.class, 
conf::isCanBeResolved).withDisplayName(Bundle.LBL_canBeResolved())); //NOI18N
+            set.put(PropertySupport.readOnly("extendsFrom", String.class, () 
-> extendsFrom(conf)).withDisplayName(Bundle.LBL_extendsFrom()));    //NOI18N
+            set.put(PropertySupport.readOnly("transitive", Boolean.class, 
conf::isTransitive).withDisplayName(Bundle.LBL_transitive()));          //NOI18N
+            sheet.put(set);
+
+            Sheet.Set attrs = new Sheet.Set();
+            attrs.setName("attributes"); //NOI18N
+            attrs.setDisplayName(Bundle.LBL_attributes());
+            for (Map.Entry<String, String> entry : 
conf.getAttributes().entrySet()) {
+                attrs.put(PropertySupport.readOnly(entry.getKey(), 
String.class, entry::getValue));
+            }
+            sheet.put(attrs);
+            return sheet;
+        }
+
+        @Override
+        public Action[] getActions(boolean context) {
+            return new Action[] {
+                SystemAction.get(PropertiesAction.class),
+            };
+        }
     }
 
     private static class LocalFileFilterNode extends FilterNode {
@@ -523,4 +562,15 @@ public class ConfigurationsNode extends AbstractNode {
         }
 
     }
+
+    private static String extendsFrom(GradleConfiguration conf) {
+        StringBuilder ret = new StringBuilder();
+        String separator = "";
+        for (GradleConfiguration ext : conf.getExtendsFrom()) {
+            ret.append(separator);
+            ret.append(ext.getName());
+            separator = ", ";
+        }
+        return ret.toString();
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org
For additional commands, e-mail: commits-h...@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to