fixing gradle configuration and propagating it to the extension

Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/c1358ae7
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/c1358ae7
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/c1358ae7

Branch: refs/heads/master
Commit: c1358ae7337bc8e076c1eeba0b821e73ddf3a027
Parents: d4b4166
Author: Romain manni-Bucau <rmannibu...@gmail.com>
Authored: Mon Aug 29 09:31:30 2016 +0200
Committer: Romain manni-Bucau <rmannibu...@gmail.com>
Committed: Mon Aug 29 09:31:30 2016 +0200

----------------------------------------------------------------------
 .../gradle/embedded/TomEEEmbeddedExtension.java | 322 ++++++++++++++++++-
 .../gradle/embedded/TomEEEmbeddedPlugin.java    |  63 +++-
 .../gradle/embedded/TomEEEmbeddedTask.java      |  48 ++-
 3 files changed, 401 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/c1358ae7/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedExtension.java
----------------------------------------------------------------------
diff --git 
a/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedExtension.java
 
b/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedExtension.java
index d27609f..809667b 100644
--- 
a/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedExtension.java
+++ 
b/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedExtension.java
@@ -16,17 +16,55 @@
  */
 package org.apache.tomee.gradle.embedded;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
+import java.io.File;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
 
 public class TomEEEmbeddedExtension {
     public static final String NAME = "tomee-embedded";
+    public static final String ALIAS = "tomeeembedded"; // easier in 
build.gradle cause no iphen
 
+    // specific to the extension
     private boolean skipDefaultRepository = false;
     private String tomeeVersion;
 
-    public boolean isSkipDefaultRepository() {
+    // shared with the task
+    private Integer httpPort;
+    private Integer httpsPort;
+    private Integer ajpPort;
+    private Integer stopPort;
+    private String host;
+    private String keystoreFile;
+    private String keystorePass;
+    private String keystoreType;
+    private String clientAuth;
+    private String keyAlias;
+    private String sslProtocol;
+    private File serverXml;
+    private Boolean singleClassloader;
+    private Boolean ssl;
+    private Boolean withEjbRemote;
+    private Boolean quickSession;
+    private Boolean skipHttp;
+    private Collection<String> applicationScopes;
+    private Collection<String> classloaderFilteredPackages;
+    private Boolean webResourceCached;
+    private String context;
+    private Map<String, String> containerProperties;
+    private Boolean keepServerXmlAsThis;
+    private Map<String, String> users;
+    private Map<String, String> roles;
+    private Boolean forceJspDevelopment;
+    private String inlinedServerXml;
+    private String inlinedTomEEXml;
+    private File workDir;
+    private List<File> modules;
+    private File docBase;
+    private String dir;
+    private String conf;
+
+    public Boolean isSkipDefaultRepository() {
         return skipDefaultRepository;
     }
 
@@ -35,22 +73,274 @@ public class TomEEEmbeddedExtension {
     }
 
     public String getTomeeVersion() {
-        if (tomeeVersion == null) {
-            tomeeVersion = "7.0.0-M3";
-            try {
-                try (final InputStream is = 
Thread.currentThread().getContextClassLoader().getResourceAsStream("META-INF/maven/org.apache.tomee.gradle/tomee-embedded/pom.properties"))
 {
-                    final Properties p = new Properties();
-                    p.load(is);
-                    tomeeVersion = p.getProperty("version", tomeeVersion);
-                }
-            } catch (IOException e) {
-                // no-op
-            }
-        }
         return tomeeVersion;
     }
 
     public void setTomeeVersion(final String tomeeVersion) {
         this.tomeeVersion = tomeeVersion;
     }
+
+    public Integer getHttpPort() {
+        return httpPort;
+    }
+
+    public void setHttpPort(final Integer httpPort) {
+        this.httpPort = httpPort;
+    }
+
+    public Integer getHttpsPort() {
+        return httpsPort;
+    }
+
+    public void setHttpsPort(final Integer httpsPort) {
+        this.httpsPort = httpsPort;
+    }
+
+    public Integer getAjpPort() {
+        return ajpPort;
+    }
+
+    public void setAjpPort(final Integer ajpPort) {
+        this.ajpPort = ajpPort;
+    }
+
+    public Integer getStopPort() {
+        return stopPort;
+    }
+
+    public void setStopPort(final Integer stopPort) {
+        this.stopPort = stopPort;
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public void setHost(final String host) {
+        this.host = host;
+    }
+
+    public String getKeystoreFile() {
+        return keystoreFile;
+    }
+
+    public void setKeystoreFile(final String keystoreFile) {
+        this.keystoreFile = keystoreFile;
+    }
+
+    public String getKeystorePass() {
+        return keystorePass;
+    }
+
+    public void setKeystorePass(final String keystorePass) {
+        this.keystorePass = keystorePass;
+    }
+
+    public String getKeystoreType() {
+        return keystoreType;
+    }
+
+    public void setKeystoreType(final String keystoreType) {
+        this.keystoreType = keystoreType;
+    }
+
+    public String getClientAuth() {
+        return clientAuth;
+    }
+
+    public void setClientAuth(final String clientAuth) {
+        this.clientAuth = clientAuth;
+    }
+
+    public String getKeyAlias() {
+        return keyAlias;
+    }
+
+    public void setKeyAlias(final String keyAlias) {
+        this.keyAlias = keyAlias;
+    }
+
+    public String getSslProtocol() {
+        return sslProtocol;
+    }
+
+    public void setSslProtocol(final String sslProtocol) {
+        this.sslProtocol = sslProtocol;
+    }
+
+    public File getServerXml() {
+        return serverXml;
+    }
+
+    public void setServerXml(final File serverXml) {
+        this.serverXml = serverXml;
+    }
+
+    public Boolean getSingleClassloader() {
+        return singleClassloader;
+    }
+
+    public void setSingleClassloader(final Boolean singleClassloader) {
+        this.singleClassloader = singleClassloader;
+    }
+
+    public Boolean getSsl() {
+        return ssl;
+    }
+
+    public void setSsl(final Boolean ssl) {
+        this.ssl = ssl;
+    }
+
+    public Boolean getWithEjbRemote() {
+        return withEjbRemote;
+    }
+
+    public void setWithEjbRemote(final Boolean withEjbRemote) {
+        this.withEjbRemote = withEjbRemote;
+    }
+
+    public Boolean getQuickSession() {
+        return quickSession;
+    }
+
+    public void setQuickSession(final Boolean quickSession) {
+        this.quickSession = quickSession;
+    }
+
+    public Boolean getSkipHttp() {
+        return skipHttp;
+    }
+
+    public void setSkipHttp(final Boolean skipHttp) {
+        this.skipHttp = skipHttp;
+    }
+
+    public Collection<String> getApplicationScopes() {
+        return applicationScopes;
+    }
+
+    public void setApplicationScopes(final Collection<String> 
applicationScopes) {
+        this.applicationScopes = applicationScopes;
+    }
+
+    public Collection<String> getClassloaderFilteredPackages() {
+        return classloaderFilteredPackages;
+    }
+
+    public void setClassloaderFilteredPackages(final Collection<String> 
classloaderFilteredPackages) {
+        this.classloaderFilteredPackages = classloaderFilteredPackages;
+    }
+
+    public Boolean getWebResourceCached() {
+        return webResourceCached;
+    }
+
+    public void setWebResourceCached(final Boolean webResourceCached) {
+        this.webResourceCached = webResourceCached;
+    }
+
+    public String getContext() {
+        return context;
+    }
+
+    public void setContext(final String context) {
+        this.context = context;
+    }
+
+    public Map<String, String> getContainerProperties() {
+        return containerProperties;
+    }
+
+    public void setContainerProperties(final Map<String, String> 
containerProperties) {
+        this.containerProperties = containerProperties;
+    }
+
+    public Boolean getKeepServerXmlAsThis() {
+        return keepServerXmlAsThis;
+    }
+
+    public void setKeepServerXmlAsThis(final Boolean keepServerXmlAsThis) {
+        this.keepServerXmlAsThis = keepServerXmlAsThis;
+    }
+
+    public Map<String, String> getUsers() {
+        return users;
+    }
+
+    public void setUsers(final Map<String, String> users) {
+        this.users = users;
+    }
+
+    public Map<String, String> getRoles() {
+        return roles;
+    }
+
+    public void setRoles(final Map<String, String> roles) {
+        this.roles = roles;
+    }
+
+    public Boolean getForceJspDevelopment() {
+        return forceJspDevelopment;
+    }
+
+    public void setForceJspDevelopment(final Boolean forceJspDevelopment) {
+        this.forceJspDevelopment = forceJspDevelopment;
+    }
+
+    public String getInlinedServerXml() {
+        return inlinedServerXml;
+    }
+
+    public void setInlinedServerXml(final String inlinedServerXml) {
+        this.inlinedServerXml = inlinedServerXml;
+    }
+
+    public String getInlinedTomEEXml() {
+        return inlinedTomEEXml;
+    }
+
+    public void setInlinedTomEEXml(final String inlinedTomEEXml) {
+        this.inlinedTomEEXml = inlinedTomEEXml;
+    }
+
+    public File getWorkDir() {
+        return workDir;
+    }
+
+    public void setWorkDir(final File workDir) {
+        this.workDir = workDir;
+    }
+
+    public List<File> getModules() {
+        return modules;
+    }
+
+    public void setModules(final List<File> modules) {
+        this.modules = modules;
+    }
+
+    public File getDocBase() {
+        return docBase;
+    }
+
+    public void setDocBase(final File docBase) {
+        this.docBase = docBase;
+    }
+
+    public String getDir() {
+        return dir;
+    }
+
+    public void setDir(final String dir) {
+        this.dir = dir;
+    }
+
+    public String getConf() {
+        return conf;
+    }
+
+    public void setConf(final String conf) {
+        this.conf = conf;
+    }
 }

http://git-wip-us.apache.org/repos/asf/tomee/blob/c1358ae7/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedPlugin.java
----------------------------------------------------------------------
diff --git 
a/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedPlugin.java
 
b/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedPlugin.java
index 90d9d0d..671dfa1 100644
--- 
a/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedPlugin.java
+++ 
b/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedPlugin.java
@@ -22,36 +22,82 @@ import org.gradle.api.Project;
 import org.gradle.api.artifacts.Configuration;
 import org.gradle.api.artifacts.DependencySet;
 import org.gradle.api.artifacts.ResolvableDependencies;
+import org.gradle.api.artifacts.UnknownConfigurationException;
 import org.gradle.api.artifacts.dsl.DependencyHandler;
 
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.HashMap;
+import java.util.List;
+import java.util.Properties;
+
+import static java.util.Arrays.asList;
 
 /**
- * Custom dependencies can be added using the scope "tomee-embedded".
+ * Custom dependencies can be added using the scope "tomee-embedded" or 
"tomeeembedded".
  */
 public class TomEEEmbeddedPlugin implements Plugin<Project> {
     @Override
     public void apply(final Project project) {
-        project.getExtensions().create(TomEEEmbeddedExtension.NAME, 
TomEEEmbeddedExtension.class);
+        final List<String> extensions = asList(TomEEEmbeddedExtension.NAME, 
TomEEEmbeddedExtension.ALIAS);
+        for (final String name : extensions) {
+            project.getExtensions().create(name, TomEEEmbeddedExtension.class);
+        }
 
         project.afterEvaluate(new Action<Project>() {
             @Override
             public void execute(final Project actionProject) {
-                final TomEEEmbeddedExtension extension = 
actionProject.getExtensions().findByType(TomEEEmbeddedExtension.class);
-                if (!extension.isSkipDefaultRepository()) {
-                    actionProject.getRepositories().mavenCentral();
+                for (final String name : extensions) {
+                    final TomEEEmbeddedExtension extension = 
TomEEEmbeddedExtension.class.cast(actionProject.getExtensions().findByName(name));
+                    if (extension == null) {
+                        return;
+                    }
+                    if (extension.isSkipDefaultRepository() != null && 
!extension.isSkipDefaultRepository()) {
+                        actionProject.getRepositories().mavenCentral();
+                        return;
+                    }
                 }
+                actionProject.getRepositories().mavenCentral();
             }
         });
 
-        final Configuration configuration = 
project.getConfigurations().maybeCreate(TomEEEmbeddedExtension.NAME);
+        String configName = TomEEEmbeddedExtension.ALIAS;
+        try {
+            project.getConfigurations().getByName(configName);
+        } catch (final UnknownConfigurationException uce) {
+            configName = TomEEEmbeddedExtension.NAME;
+        }
+
+        final Configuration configuration = 
project.getConfigurations().maybeCreate(configName);
         configuration.getIncoming().beforeResolve(new 
Action<ResolvableDependencies>() {
             @Override
             public void execute(final ResolvableDependencies 
resolvableDependencies) {
+                String tomeeVersion = null;
+                for (final String name : extensions) {
+                    final TomEEEmbeddedExtension extension = 
TomEEEmbeddedExtension.class.cast(project.getExtensions().findByName(name));
+                    if (extension == null) {
+                        return;
+                    }
+                    tomeeVersion = extension.getTomeeVersion();
+                    if (tomeeVersion != null) {
+                        break;
+                    }
+                }
+                if (tomeeVersion == null) {
+                    try {
+                        try (final InputStream is = 
Thread.currentThread().getContextClassLoader().getResourceAsStream("META-INF/maven/org.apache.tomee.gradle/tomee-embedded/pom.properties"))
 {
+                            final Properties p = new Properties();
+                            p.load(is);
+                            tomeeVersion = p.getProperty("version");
+                        }
+                    } catch (final IOException e) {
+                        tomeeVersion = "7.0.2"; // we should never be there
+                    }
+                }
+
                 final DependencyHandler dependencyHandler = 
project.getDependencies();
                 final DependencySet dependencies = 
configuration.getDependencies();
-                
dependencies.add(dependencyHandler.create("org.apache.tomee:tomee-embedded:" +
-                        
project.getExtensions().findByType(TomEEEmbeddedExtension.class).getTomeeVersion()));
+                
dependencies.add(dependencyHandler.create("org.apache.tomee:tomee-embedded:" + 
tomeeVersion));
             }
         });
 
@@ -60,6 +106,5 @@ public class TomEEEmbeddedPlugin implements Plugin<Project> {
             put("group", "Embedded Application Server");
             put("description", "Start an embedded Apache TomEE server 
deploying application classpath");
         }}, TomEEEmbeddedExtension.NAME);
-        
TomEEEmbeddedTask.class.cast(project.getTasks().findByName(TomEEEmbeddedExtension.NAME)).setClasspath(configuration);
     }
 }

http://git-wip-us.apache.org/repos/asf/tomee/blob/c1358ae7/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedTask.java
----------------------------------------------------------------------
diff --git 
a/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedTask.java
 
b/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedTask.java
index bf06e0b..b3ce50d 100644
--- 
a/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedTask.java
+++ 
b/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedTask.java
@@ -21,6 +21,7 @@ import org.gradle.api.DefaultTask;
 import org.gradle.api.GradleException;
 import org.gradle.api.Project;
 import org.gradle.api.artifacts.Configuration;
+import org.gradle.api.artifacts.UnknownConfigurationException;
 import org.gradle.api.tasks.Input;
 import org.gradle.api.tasks.Optional;
 import org.gradle.api.tasks.TaskAction;
@@ -206,10 +207,13 @@ public class TomEEEmbeddedTask extends DefaultTask {
     private void fixConfig() {
         final Project project = getProject();
 
-        // final TomEEEmbeddedExtension extension = 
TomEEEmbeddedExtension.class.cast(project.findProject(TomEEEmbeddedExtension.NAME));
-
+        // defaults
         if (classpath == null) {
-            classpath = 
project.getConfigurations().getByName(TomEEEmbeddedExtension.NAME);
+            try {
+                
classpath.add(project.getConfigurations().getByName(TomEEEmbeddedExtension.ALIAS).fileCollection());
+            } catch (final UnknownConfigurationException uce) {
+                classpath = 
project.getConfigurations().getByName(TomEEEmbeddedExtension.NAME);
+            }
         }
 
         if (docBase == null) {
@@ -227,6 +231,32 @@ public class TomEEEmbeddedTask extends DefaultTask {
                 modules = new ArrayList<>(singletonList(main));
             }
         }
+
+        // extension override
+        for (final String name : asList(TomEEEmbeddedExtension.NAME, 
TomEEEmbeddedExtension.ALIAS)) {
+            final TomEEEmbeddedExtension extension = 
TomEEEmbeddedExtension.class.cast(project.getExtensions().findByName(name));
+            if (extension != null) {
+                for (final Field f : 
TomEEEmbeddedTask.class.getDeclaredFields()) {
+                    if (f.isAnnotationPresent(Input.class)) {
+                        try {
+                            final Field extField = 
TomEEEmbeddedExtension.class.getDeclaredField(f.getName());
+                            if (!extField.isAccessible()) {
+                                extField.setAccessible(true);
+                            }
+                            final Object val = extField.get(extension);
+                            if (val != null) {
+                                if (!f.isAccessible()) {
+                                    f.setAccessible(true);
+                                }
+                                f.set(this, val);
+                            }
+                        } catch (final IllegalAccessException | 
NoSuchFieldException e) {
+                            getLogger().warn("No field " + f.getName() + " in 
" + extension, e);
+                        }
+                    }
+                }
+            }
+        }
     }
 
     private void doRun() {
@@ -344,14 +374,18 @@ public class TomEEEmbeddedTask extends DefaultTask {
 
     private Object getConfig(final Class<?> configClass) throws Exception {
         final Object config = configClass.newInstance();
-        for (final Field field : getClass().getDeclaredFields()) {
+        for (final Field field : TomEEEmbeddedTask.class.getDeclaredFields()) {
             try {
-                final Field configField = 
Configuration.class.getDeclaredField(field.getName());
-                field.setAccessible(true);
-                configField.setAccessible(true);
+                final Field configField = 
configClass.getDeclaredField(field.getName());
+                if (!field.isAccessible()) {
+                    field.setAccessible(true);
+                }
 
                 final Object value = field.get(this);
                 if (value != null) {
+                    if (!configField.isAccessible()) {
+                        configField.setAccessible(true);
+                    }
                     configField.set(config, value);
                     getLogger().debug("using " + field.getName() + " = " + 
value);
                 }

Reply via email to