diff --git a/src/main/groovy/org/silverpeas/setup/SilverpeasConfigurationProperties.groovy b/src/main/groovy/org/silverpeas/setup/SilverpeasConfigurationProperties.groovy
index 0bdbef64..883c0112 100644
--- a/src/main/groovy/org/silverpeas/setup/SilverpeasConfigurationProperties.groovy
+++ b/src/main/groovy/org/silverpeas/setup/SilverpeasConfigurationProperties.groovy
@@ -67,12 +67,6 @@ class SilverpeasConfigurationProperties {
*/
final File jbossModulesDir
- /**
- * The Silverpeas settings as defined in the config.properties
file.
- * Some of them are computed from the properties in the file config.properties
.
- */
- final Map settings = [:]
-
@Inject
SilverpeasConfigurationProperties(Project project, File silverpeasHome) {
configurationHome = project.file("${silverpeasHome.path}/configuration")
@@ -80,8 +74,4 @@ class SilverpeasConfigurationProperties {
silverpeasConfigurationDir = project.file("${silverpeasHome.path}/configuration/silverpeas")
jbossModulesDir = project.file("${jbossConfigurationDir.path}/modules")
}
-
- void setSettings(final Map configProperties) {
- this.settings.putAll(configProperties)
- }
}
diff --git a/src/main/groovy/org/silverpeas/setup/SilverpeasInstallationProperties.groovy b/src/main/groovy/org/silverpeas/setup/SilverpeasInstallationProperties.groovy
new file mode 100644
index 00000000..4d41c454
--- /dev/null
+++ b/src/main/groovy/org/silverpeas/setup/SilverpeasInstallationProperties.groovy
@@ -0,0 +1,65 @@
+package org.silverpeas.setup
+
+import org.gradle.api.Action
+import org.gradle.api.Project
+import org.gradle.api.provider.Property
+
+import javax.inject.Inject
+/**
+ * Properties for the installation and deployment of Silverpeas in a JBoss server.
+ * @author mmoquillon
+ */
+class SilverpeasInstallationProperties {
+
+ /**
+ * The distribution directory. It is the directory that contains all the content of the
+ * constructed Silverpeas collaborative application. Defaulted into the build directory. Set a
+ * different location is pertinent only for development mode as in this mode the distribution
+ * directory is deployed as such in the JBoss/Wildfly application server.
+ * environment variable.
+ */
+ final Property distDir
+
+ /**
+ * Directory that have to contain all the application or resource archives to deploy into
+ * JBoss/Wildfly. Defaulted in the SILVERPEAS_HOME/deployments directory.
+ */
+ final Property deploymentDir
+
+ /**
+ * Directory that have to contain all the drivers required by Silverpeas and the Silverpeas Setup
+ * plugin to access the data source of Silverpeas.
+ */
+ final Property dsDriversDir
+
+ /**
+ * Is in development mode? (In this case, some peculiar configuration are applied to support the
+ * dev mode in the application server.) This is a property and hence can be set by the user input
+ * from the build script.
+ */
+ final Property developmentMode
+
+ /**
+ * Collections of software bundles required to construct the Silverpeas application.These bundles
+ * will be downloaded from our software repository server (provided by our Nexus service) and then
+ * unpacked to a given directory in order to generate the final application.
+ */
+ final SoftwareBundles bundles
+
+ @Inject
+ SilverpeasInstallationProperties(Project project, File silverpeasHome) {
+ distDir = project.objects.property(File)
+ distDir.set(new File(project.buildDir, "dist"))
+ deploymentDir = project.objects.property(File)
+ deploymentDir.set(new File(silverpeasHome, 'deployments'))
+ dsDriversDir = project.objects.property(File)
+ dsDriversDir.set(new File(project.buildDir, "drivers"))
+ developmentMode = project.objects.property(Boolean)
+ developmentMode.set(false)
+ bundles = project.objects.newInstance(SoftwareBundles, project)
+ }
+
+ void bundles(Action extends SoftwareBundles> action) {
+ action.execute(bundles)
+ }
+}
diff --git a/src/main/groovy/org/silverpeas/setup/SilverpeasMigrationProperties.groovy b/src/main/groovy/org/silverpeas/setup/SilverpeasMigrationProperties.groovy
new file mode 100644
index 00000000..58111874
--- /dev/null
+++ b/src/main/groovy/org/silverpeas/setup/SilverpeasMigrationProperties.groovy
@@ -0,0 +1,39 @@
+package org.silverpeas.setup
+
+import org.gradle.api.Project
+import org.gradle.api.provider.Property
+
+import javax.inject.Inject
+
+/**
+ * Properties for the migration of the data source used by Silverpeas when installing it or
+ * upgrading it to a new version.
+ * @author mmoquillon
+ */
+class SilverpeasMigrationProperties {
+
+ /**
+ * The directory in which are all located both the data source migration descriptors
+ * and the scripts to create or to update the schema of the database to be used by Silverpeas.
+ * It is defaulted to SILVERPEAS_HOME/migrations.
+ * It is expected to contain two kinds of subdirectories:
+ *
+ * modules
in which are provided the XML descriptor of each migration
+ * module. These descriptors refers the scripts to use to create or to update the
+ * database schema for a given Silverpeas module;
+ * db
in which are located per database type and per module the
+ * different SQL scripts to create or to upgrade the schema of the database;
+ * scripts
in which are located per module the different programming
+ * scripts (currently, only Groovy is supported) to perform complex tasks on the database or
+ * any other data sources used by Silverpeas (like the JCR for example).
+ *
+ *
+ */
+ final Property homeDir
+
+ @Inject
+ SilverpeasMigrationProperties(Project project, File silverpeasHome) {
+ this.homeDir = project.objects.property(File)
+ this.homeDir.set(new File(silverpeasHome, 'migrations'))
+ }
+}
diff --git a/src/main/groovy/org/silverpeas/setup/SilverpeasSetupExtension.groovy b/src/main/groovy/org/silverpeas/setup/SilverpeasSetupExtension.groovy
index 5faa8624..f0c87d3a 100644
--- a/src/main/groovy/org/silverpeas/setup/SilverpeasSetupExtension.groovy
+++ b/src/main/groovy/org/silverpeas/setup/SilverpeasSetupExtension.groovy
@@ -25,9 +25,8 @@ package org.silverpeas.setup
import org.gradle.api.Action
import org.gradle.api.Project
-import org.gradle.api.file.ConfigurableFileCollection
-import org.gradle.api.file.FileCollection
import org.gradle.api.provider.Property
+import org.silverpeas.setup.api.JBossServer
import org.silverpeas.setup.api.SystemWrapper
/**
* Extension of the plugin in which are defined the different properties required by the plugin to
@@ -64,43 +63,21 @@ class SilverpeasSetupExtension {
final File jbossHome
/**
- * The distribution directory. It is the directory that contains all the content of the
- * constructed Silverpeas collaborative application. Defaulted into the build directory. Set a
- * different location is pertinent only for development mode as in this mode the distribution
- * directory is deployed as such in the JBoss/Wildfly application server.
- * environment variable.
- */
- final Property distDir
-
- /**
- * The properties to access the configuration if Silverpeas in order to apply it to the
- * current Silverpeas distribution.
+ * The properties required by the configuration execution of a Silverpeas distribution.
*/
final SilverpeasConfigurationProperties config
/**
- * The directory in which are all located both the data source migration descriptors
- * and the scripts to create or to update the schema of the database to be used by Silverpeas.
- * It is expected to contain two kinds of subdirectories:
- *
- * modules
in which are provided the XML descriptor of each migration
- * module. These descriptors refers the scripts to use to create or to update the
- * database schema for a given Silverpeas module;
- * db
in which are located per database type and per module the
- * different SQL scripts to create or to upgrade the schema of the database;
- * scripts
in which are located per module the different programming
- * scripts (currently, only Groovy is supported) to perform complex tasks on the database or
- * any other data sources used by Silverpeas (like the JCR for example).
- *
- *
+ * The properties required by the build of a given version of Silverpeas and its deployment
+ * in a JBoss server.
*/
- final File migrationHome
+ final SilverpeasInstallationProperties installation
/**
- * Directory that have to contain all the application or resource archives to deploy into
- * JBoss/Wildfly.
+ * The properties required to perform a data source migration when upgrading Silverpeas to a newer
+ * version or when installing a fresh Silverpeas version.
*/
- final File deploymentDir
+ final SilverpeasMigrationProperties migration
/**
* The properties to configure the logging. They define the location of the logging file, the
@@ -109,25 +86,16 @@ class SilverpeasSetupExtension {
final SilverpeasLoggingProperties logging
/**
- * All the software bundles that made Silverpeas. Those bundles are usually downloaded from our
- * own Software Repository by the Silverpeas installer. They are required to assemble and build
- * the final Silverpeas Web Application. The Jar libraries other than the supported JDBC drivers
- * aren't taken in charge.
- */
- final ConfigurableFileCollection silverpeasBundles
-
- /**
- * Any tiers bundles to add into the Silverpeas Application being built. The tiers bundles are
- * processed differently by the plugin: only the JAR libraries are taken in charge.
+ * The time out when waiting JBoss answering to our requests. Defaulted to 5mn.
*/
- final ConfigurableFileCollection tiersBundles
+ final Property timeout
/**
- * Is in development mode ? (In this case, some peculiar configuration are applied to support the
- * dev mode in the application server.) This is a property and hence can be set by the user input
- * from the build script.
+ * The Silverpeas settings as defined in the config.properties
file.
+ * Some of them are computed from the properties in the file config.properties
.
+ * Tasks can overwrite some of the settings as well as add their own properties.
*/
- final Property developmentMode
+ final Map settings = [:]
/**
* Constructs a new silverpeas configuration extension. It checks the environment variables
@@ -148,24 +116,17 @@ class SilverpeasSetupExtension {
println 'The path referred by SILVERPEAS_HOME or by JBOSS_HOME doesn\'t exist or isn\'t a directory!'
throw new IllegalStateException()
}
- migrationHome = project.file("${silverpeasHome.path}/migrations")
- deploymentDir = project.file("${silverpeasHome.path}/deployments")
- distDir = project.objects.property(File)
- distDir.set(new File(project.buildDir, "dist"))
config = project.objects.newInstance(SilverpeasConfigurationProperties, project, silverpeasHome)
+ installation = project.objects.newInstance(SilverpeasInstallationProperties, project, silverpeasHome)
+ migration = project.objects.newInstance(SilverpeasMigrationProperties, project, silverpeasHome)
logging = project.objects.newInstance(SilverpeasLoggingProperties)
- silverpeasBundles = project.files()
- tiersBundles = project.files();
- developmentMode = project.objects.property(Boolean)
- developmentMode.set(false)
+ timeout = project.objects.property(Long)
+ timeout.set(300000l)
+ JBossServer.DEFAULT_TIMEOUT = timeout.get()
}
- void setSilverpeasBundles(FileCollection bundles) {
- this.silverpeasBundles.setFrom(bundles)
- }
-
- void setTiersBundles(FileCollection bundles) {
- this.tiersBundles.setFrom(bundles)
+ void setSettings(final Map configProperties) {
+ this.settings.putAll(configProperties)
}
void logging(Action extends SilverpeasLoggingProperties> action) {
@@ -175,4 +136,12 @@ class SilverpeasSetupExtension {
void config(Action extends SilverpeasConfigurationProperties> action) {
action.execute(config)
}
+
+ void installation(Action extends SilverpeasInstallationProperties> action) {
+ action.execute(installation)
+ }
+
+ void migration(Action extends SilverpeasMigrationProperties> action) {
+ action.execute(migration)
+ }
}
diff --git a/src/main/groovy/org/silverpeas/setup/SilverpeasSetupPlugin.groovy b/src/main/groovy/org/silverpeas/setup/SilverpeasSetupPlugin.groovy
index 64db4031..7ce45e0e 100644
--- a/src/main/groovy/org/silverpeas/setup/SilverpeasSetupPlugin.groovy
+++ b/src/main/groovy/org/silverpeas/setup/SilverpeasSetupPlugin.groovy
@@ -65,9 +65,9 @@ class SilverpeasSetupPlugin implements Plugin {
def extension = project.extensions.create(EXTENSION, SilverpeasSetupExtension, project)
initSilverpeasSetupExtention(extension)
- SilverpeasSetupService setupService = new SilverpeasSetupService(extension.config.settings)
+ SilverpeasSetupService setupService = new SilverpeasSetupService(extension.settings)
ManagedBeanContainer.registry()
- .register(new DataSourceProvider(extension.config.settings))
+ .register(new DataSourceProvider(extension.settings))
.register(setupService)
String.metaClass.asPath = { Paths.get(setupService.expanseVariables(delegate.toString())) }
@@ -75,35 +75,33 @@ class SilverpeasSetupPlugin implements Plugin {
project.afterEvaluate { Project currentProject, ProjectState state ->
SilverpeasSetupExtension silverSetup =
(SilverpeasSetupExtension) currentProject.extensions.getByName(EXTENSION)
- silverSetup.config.settings.DEV_MODE = silverSetup.developmentMode.get() as String
+ silverSetup.settings.DEV_MODE = silverSetup.installation.developmentMode.get() as String
if (silverSetup.logging.useLogger) {
initLogging(currentProject, silverSetup.logging)
}
- silverSetup.config.settings.SILVERPEAS_VERSION = currentProject.version as String
+ silverSetup.settings.SILVERPEAS_VERSION = currentProject.version as String
jBossServer.set(new JBossServer(extension.jbossHome.path)
+ .withStartingTimeout(extension.timeout.get())
.redirectOutputTo(new File(extension.logging.logDir, JBOSS_OUTPUT_LOG)))
}
- File driversDir = new File(project.buildDir, 'drivers')
Task construction = project.tasks.create(CONSTRUCT.name, SilverpeasConstructionTask) {
it.silverpeasHome = extension.silverpeasHome
- it.driversDir = driversDir
- it.settings = extension.config.settings
- it.developmentMode = extension.developmentMode
- it.silverpeasBundles = extension.silverpeasBundles
- it.tiersBundles = extension.tiersBundles
- it.destinationDir = extension.distDir
+ it.installation = extension.installation
+ it.settings = extension.settings
}
Task jbossConf = project.tasks.create(CONFIGURE_JBOSS.name, JBossConfigurationTask) {
- it.driversDir = driversDir
+ it.driversDir = extension.installation.dsDriversDir.get()
it.config = extension.config
it.jboss = jBossServer
+ it.settings = extension.settings
}
Task silverpeasConf = project.tasks.create(CONFIGURE_SILVERPEAS.name, SilverpeasConfigurationTask) {
it.silverpeasHome = extension.silverpeasHome
it.config = extension.config
+ it.settings = extension.settings
}.dependsOn(construction)
Task configuration = project.tasks.create(CONFIGURE.name) {
@@ -116,41 +114,40 @@ class SilverpeasSetupPlugin implements Plugin {
}.dependsOn(construction)
Task migration = project.tasks.create(MIGRATE.name, SilverpeasMigrationTask) {
- it.migrationHome = extension.migrationHome
- it.config = extension.config
+ it.migration = extension.migration
+ it.settings = extension.settings
}.dependsOn(configuration)
project.tasks.create(INSTALL.name, SilverpeasInstallationTask) {
- it.deploymentDir = extension.deploymentDir
- it.settings = extension.config.settings
- it.distDir = extension.distDir
- it.developmentMode = extension.developmentMode
+ it.installation = extension.installation
+ it.settings = extension.settings
it.jboss = jBossServer
}.dependsOn(construction, configuration, migration)
- setUpGradleAssemblingTaskForThisPlugin(project, extension, driversDir)
+ setUpGradleAssemblingTaskForThisPlugin(project, extension)
setUpGradleBuildTaskForThisPlugin(project, extension)
}
private void setUpGradleAssemblingTaskForThisPlugin(Project project,
- SilverpeasSetupExtension extension,
- File driversDir) {
+ SilverpeasSetupExtension extension) {
try {
Task assemble = project.tasks.getByName(ASSEMBLE.name).doLast {
- if (!extension.distDir.get().exists()) {
- extension.distDir.get().mkdirs()
+ if (!extension.installation.distDir.get().exists()) {
+ extension.installation.distDir.get().mkdirs()
}
SilverpeasBuilder builder = new SilverpeasBuilder(project, FileLogger.getLogger(delegate.name))
- builder.driversDir = driversDir
+ builder.driversDir = extension.installation.dsDriversDir.get()
builder.silverpeasHome = extension.silverpeasHome
- builder.settings = extension.config.settings
- builder.extractSoftwareBundles(extension.silverpeasBundles.files,
- extension.tiersBundles.files, extension.distDir.get())
+ builder.settings = extension.settings
+ builder.extractSoftwareBundles(extension.installation.bundles,
+ extension.installation.distDir.get())
}
assemble.description = 'Assemble all the software bundles that made Silverpeas'
- assemble.onlyIf { !extension.distDir.get().exists() && !driversDir.exists()}
+ assemble.onlyIf { !extension.installation.distDir.get().exists() &&
+ !extension.installation.dsDriversDir.get().exists()}
assemble.outputs.upToDateWhen {
- extension.distDir.get().exists() && driversDir.exists()
+ extension.installation.distDir.get().exists() &&
+ extension.installation.dsDriversDir.get().exists()
}
} catch (UnknownTaskException e) {
// nothing to do
@@ -163,18 +160,18 @@ class SilverpeasSetupPlugin implements Plugin {
Task build = project.tasks.getByName(BUILD.name).doLast {
SilverpeasBuilder builder = new SilverpeasBuilder(project, FileLogger.getLogger(delegate.name))
builder.silverpeasHome = extension.silverpeasHome
- builder.settings = extension.config.settings
- builder.developmentMode = extension.developmentMode.get()
- builder.generateSilverpeasApplication(extension.distDir.get())
+ builder.settings = extension.settings
+ builder.developmentMode = extension.installation.developmentMode.get()
+ builder.generateSilverpeasApplication(extension.installation.distDir.get())
}
build.description = 'Build the Silverpeas Collaborative Web Application'
build.onlyIf {
- extension.distDir.get().exists()
+ extension.installation.distDir.get().exists()
}
build.outputs.upToDateWhen {
- boolean ok = extension.distDir.get().exists() &&
- Files.exists(Paths.get(extension.distDir.get().path, 'WEB-INF', 'web.xml'))
- if (!extension.developmentMode) {
+ boolean ok = extension.installation.distDir.get().exists() &&
+ Files.exists(Paths.get(extension.installation.distDir.get().path, 'WEB-INF', 'web.xml'))
+ if (!extension.installation.developmentMode) {
ok = ok && Files.exists(
Paths.get(project.buildDir.path, SilverpeasConstructionTask.SILVERPEAS_WAR))
}
@@ -186,9 +183,9 @@ class SilverpeasSetupPlugin implements Plugin {
}
private void initSilverpeasSetupExtention(SilverpeasSetupExtension silverSetup) {
- silverSetup.config.settings = loadConfigurationProperties(silverSetup.config.configurationHome)
- completeSettings(silverSetup.config.settings, silverSetup)
- encryptAdminPassword(silverSetup.config.settings)
+ silverSetup.settings = loadConfigurationProperties(silverSetup.config.configurationHome)
+ completeSettings(silverSetup.settings, silverSetup)
+ encryptAdminPassword(silverSetup.settings)
}
private Map loadConfigurationProperties(File configurationHome) {
@@ -209,7 +206,7 @@ class SilverpeasSetupPlugin implements Plugin {
private void completeSettings(Map settings, SilverpeasSetupExtension silverSetup) {
settings.SILVERPEAS_HOME = normalizePath(silverSetup.silverpeasHome.path)
- settings.MIGRATION_HOME = normalizePath(silverSetup.migrationHome.path)
+ settings.MIGRATION_HOME = normalizePath(silverSetup.migration.homeDir.get().path)
settings.CONFIGURATION_HOME = normalizePath(silverSetup.config.configurationHome.path)
settings.SILVERPEAS_DATA_HOME = normalizePath(settings.SILVERPEAS_DATA_HOME)
settings.SILVERPEAS_DATA_WEB = normalizePath(settings.SILVERPEAS_DATA_WEB)
diff --git a/src/main/groovy/org/silverpeas/setup/SoftwareBundles.groovy b/src/main/groovy/org/silverpeas/setup/SoftwareBundles.groovy
new file mode 100644
index 00000000..569a8e9d
--- /dev/null
+++ b/src/main/groovy/org/silverpeas/setup/SoftwareBundles.groovy
@@ -0,0 +1,44 @@
+package org.silverpeas.setup
+
+import org.gradle.api.Project
+import org.gradle.api.file.ConfigurableFileCollection
+import org.gradle.api.file.FileCollection
+
+import javax.inject.Inject
+
+/**
+ * Collections of software bundles required to construct the Silverpeas application.These bundles
+ * will be downloaded from our software repository server (provided by our Nexus service) and then
+ * unpacked to a given directory in order to generate the final application.
+ * @author mmoquillon
+ */
+class SoftwareBundles {
+
+ /**
+ * All the software bundles that made Silverpeas. Those bundles are usually downloaded from our
+ * own Software Repository by the Silverpeas installer. They are required to assemble and build
+ * the final Silverpeas Web Application. The Jar libraries other than the supported JDBC drivers
+ * aren't taken in charge.
+ */
+ final ConfigurableFileCollection silverpeas
+
+ /**
+ * Any tiers bundles to add into the Silverpeas Application being built. The tiers bundles are
+ * processed differently by the plugin: only the JAR libraries are taken in charge.
+ */
+ final ConfigurableFileCollection tiers
+
+ @Inject
+ SoftwareBundles(Project project) {
+ silverpeas = project.files()
+ tiers = project.files()
+ }
+
+ void setSilverpeas(FileCollection bundles) {
+ this.silverpeas.setFrom(bundles)
+ }
+
+ void setTiers(FileCollection bundles) {
+ this.tiers.setFrom(bundles)
+ }
+}
diff --git a/src/main/groovy/org/silverpeas/setup/TaskEventLogging.groovy b/src/main/groovy/org/silverpeas/setup/TaskEventLogging.groovy
index d44ac696..4bfd71e5 100644
--- a/src/main/groovy/org/silverpeas/setup/TaskEventLogging.groovy
+++ b/src/main/groovy/org/silverpeas/setup/TaskEventLogging.groovy
@@ -72,11 +72,11 @@ class TaskEventLogging extends BuildAdapter implements TaskExecutionListener {
"SILVERPEAS SETUP: ${task.project.version}",
"SILVERPEAS HOME: ${silverSetup.silverpeasHome.path}",
"JBOSS HOME: ${silverSetup.jbossHome.path}",
- "JCR HOME: ${silverSetup.config.settings.JCR_HOME.asPath().toString()}",
+ "JCR HOME: ${silverSetup.settings.JCR_HOME.asPath().toString()}",
"JAVA HOME: ${System.getenv('JAVA_HOME')}",
- "DATABASE: ${silverSetup.config.settings.DB_SERVERTYPE.toLowerCase()}",
+ "DATABASE: ${silverSetup.settings.DB_SERVERTYPE.toLowerCase()}",
"OPERATING SYSTEM: ${System.getProperty('os.name')}",
- "PRODUCTION MODE: ${!silverSetup.developmentMode}")
+ "PRODUCTION MODE: ${!silverSetup.installation.developmentMode}")
}
FileLogger log = FileLogger.getLogger(task.name)
String taskTitle = unformat(task.name)
diff --git a/src/main/groovy/org/silverpeas/setup/api/JBossServer.groovy b/src/main/groovy/org/silverpeas/setup/api/JBossServer.groovy
index d95abcae..62d44427 100644
--- a/src/main/groovy/org/silverpeas/setup/api/JBossServer.groovy
+++ b/src/main/groovy/org/silverpeas/setup/api/JBossServer.groovy
@@ -43,6 +43,8 @@ import java.util.regex.Matcher
*/
class JBossServer {
+ static long DEFAULT_TIMEOUT = 120000
+
private String cli
private String starter
@@ -51,7 +53,7 @@ class JBossServer {
private File redirection = null
- private long timeout = 120000
+ private long timeout = DEFAULT_TIMEOUT
private FileLogger logger = FileLogger.getLogger(getClass().getSimpleName(), System.out)
@@ -165,7 +167,7 @@ class JBossServer {
* @return itself.
*/
JBossServer withStartingTimeout(long timeout) {
- if (this.timeout!= null && this.timeout > 0) {
+ if (this.timeout != null && this.timeout > 0) {
this.timeout = timeout
}
return this
diff --git a/src/main/groovy/org/silverpeas/setup/api/SilverpeasSetupTask.groovy b/src/main/groovy/org/silverpeas/setup/api/SilverpeasSetupTask.groovy
new file mode 100644
index 00000000..6de8374a
--- /dev/null
+++ b/src/main/groovy/org/silverpeas/setup/api/SilverpeasSetupTask.groovy
@@ -0,0 +1,18 @@
+package org.silverpeas.setup.api
+
+import org.gradle.api.DefaultTask
+
+/**
+ * Common definition of a task in the Silverpeas Setup plugin.
+ * @author mmoquillon
+ */
+abstract class SilverpeasSetupTask extends DefaultTask {
+
+ /**
+ * The settings is a dictionary of all configuration properties initially loaded from the
+ * config.properties
file and computed by the plugin. Any task can also set
+ * additional properties in order to share information with other tasks. Usually, the settings
+ * should be injected in the scripts that are executed by a task.
+ */
+ Map settings
+}
diff --git a/src/main/groovy/org/silverpeas/setup/configuration/JBossConfigurationTask.groovy b/src/main/groovy/org/silverpeas/setup/configuration/JBossConfigurationTask.groovy
index 63475141..52f125c7 100644
--- a/src/main/groovy/org/silverpeas/setup/configuration/JBossConfigurationTask.groovy
+++ b/src/main/groovy/org/silverpeas/setup/configuration/JBossConfigurationTask.groovy
@@ -23,7 +23,7 @@
*/
package org.silverpeas.setup.configuration
-import org.gradle.api.DefaultTask
+
import org.gradle.api.Project
import org.gradle.api.ProjectState
import org.gradle.api.provider.Property
@@ -33,17 +33,17 @@ import org.silverpeas.setup.SilverpeasConfigurationProperties
import org.silverpeas.setup.api.FileLogger
import org.silverpeas.setup.api.JBossServer
import org.silverpeas.setup.api.Script
+import org.silverpeas.setup.api.SilverpeasSetupTask
import java.nio.file.Files
import java.nio.file.Paths
import java.util.regex.Matcher
-
/**
* A Gradle task to configure a JBoss/Wildfly instance from some CLI scripts to be ready to run
* Silverpeas.
* @author mmoquillon
*/
-class JBossConfigurationTask extends DefaultTask {
+class JBossConfigurationTask extends SilverpeasSetupTask {
File driversDir
SilverpeasConfigurationProperties config
@@ -98,11 +98,11 @@ class JBossConfigurationTask extends DefaultTask {
}).each { conf ->
String jvmOpts; def regexp
if (conf.name.endsWith('.bat')) {
- jvmOpts = "set \"JAVA_OPTS=-Xmx${config.settings.JVM_RAM_MAX} ${config.settings.JVM_OPTS}"
+ jvmOpts = "set \"JAVA_OPTS=-Xmx${settings.JVM_RAM_MAX} ${settings.JVM_OPTS}"
regexp = /\s*set\s+"JAVA_OPTS=-Xm.+/
} else {
jvmOpts =
- "JAVA_OPTS=\"-Xmx${config.settings.JVM_RAM_MAX} -Djava.net.preferIPv4Stack=true ${config.settings.JVM_OPTS}"
+ "JAVA_OPTS=\"-Xmx${settings.JVM_RAM_MAX} -Djava.net.preferIPv4Stack=true ${settings.JVM_OPTS}"
regexp = /\s*JAVA_OPTS="-Xm.+/
}
jvmOpts += '"'
@@ -133,23 +133,23 @@ class JBossConfigurationTask extends DefaultTask {
}
private void setUpJDBCDriver() throws Exception {
- log.info "Install database driver for ${config.settings.DB_SERVERTYPE}"
+ log.info "Install database driver for ${settings.DB_SERVERTYPE}"
JBossServer server = jboss.get()
- if (config.settings.DB_SERVERTYPE == 'H2') {
+ if (settings.DB_SERVERTYPE == 'H2') {
// H2 is already available by default in JBoss/Wildfly
- config.settings.DB_DRIVER_NAME = 'h2'
+ settings.DB_DRIVER_NAME = 'h2'
} else {
// install the required driver other than H2
driversDir.listFiles().each { driver ->
- if ((driver.name.startsWith('postgresql') && config.settings.DB_SERVERTYPE == 'POSTGRESQL') ||
- (driver.name.startsWith('jtds') && config.settings.DB_SERVERTYPE == 'MSSQL') ||
- (driver.name.startsWith('ojdbc') && config.settings.DB_SERVERTYPE == 'ORACLE')) {
- config.settings.DB_DRIVER_NAME = driver.name
+ if ((driver.name.startsWith('postgresql') && settings.DB_SERVERTYPE == 'POSTGRESQL') ||
+ (driver.name.startsWith('jtds') && settings.DB_SERVERTYPE == 'MSSQL') ||
+ (driver.name.startsWith('ojdbc') && settings.DB_SERVERTYPE == 'ORACLE')) {
+ settings.DB_DRIVER_NAME = driver.name
try {
- server.add(Paths.get(driversDir.path, config.settings.DB_DRIVER_NAME).toString())
- server.deploy(config.settings.DB_DRIVER_NAME)
+ server.add(Paths.get(driversDir.path, settings.DB_DRIVER_NAME).toString())
+ server.deploy(settings.DB_DRIVER_NAME)
} catch (Exception ex) {
- log.error("Error: cannot deploy ${config.settings.DB_DRIVER_NAME}", ex)
+ log.error("Error: cannot deploy ${settings.DB_DRIVER_NAME}", ex)
throw ex
}
}
@@ -177,7 +177,7 @@ class JBossConfigurationTask extends DefaultTask {
scripts.each { aScript ->
aScript
.useLogger(log)
- .useSettings(config.settings)
+ .useSettings(settings)
.run(jboss: jboss.get())
}
} catch(Exception ex) {
diff --git a/src/main/groovy/org/silverpeas/setup/configuration/SilverpeasConfigurationTask.groovy b/src/main/groovy/org/silverpeas/setup/configuration/SilverpeasConfigurationTask.groovy
index 936cc766..e5fbbd2e 100644
--- a/src/main/groovy/org/silverpeas/setup/configuration/SilverpeasConfigurationTask.groovy
+++ b/src/main/groovy/org/silverpeas/setup/configuration/SilverpeasConfigurationTask.groovy
@@ -23,21 +23,23 @@
*/
package org.silverpeas.setup.configuration
-import org.gradle.api.DefaultTask
+
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.TaskExecutionException
import org.silverpeas.setup.SilverpeasConfigurationProperties
import org.silverpeas.setup.api.FileLogger
import org.silverpeas.setup.api.Script
+import org.silverpeas.setup.api.SilverpeasSetupTask
import java.nio.file.Files
import java.nio.file.Paths
+
/**
* This task aims to configure Silverpeas from the Silverpeas configuration file, from some XML
* configuration rules and from Groovy scripts.
* @author mmoquillon
*/
-class SilverpeasConfigurationTask extends DefaultTask {
+class SilverpeasConfigurationTask extends SilverpeasSetupTask {
File silverpeasHome
SilverpeasConfigurationProperties config
@@ -70,7 +72,7 @@ class SilverpeasConfigurationTask extends DefaultTask {
Script script = ConfigurationScriptBuilder.fromScript(configurationFile.path).build()
script
.useLogger(log)
- .useSettings(config.settings)
+ .useSettings(settings)
.run()
} catch (Exception ex) {
log.error("Error while processing the configuration file ${configurationFile.path}", ex)
diff --git a/src/main/groovy/org/silverpeas/setup/construction/SilverpeasBuilder.groovy b/src/main/groovy/org/silverpeas/setup/construction/SilverpeasBuilder.groovy
index 12e0c1dd..1ceb0719 100644
--- a/src/main/groovy/org/silverpeas/setup/construction/SilverpeasBuilder.groovy
+++ b/src/main/groovy/org/silverpeas/setup/construction/SilverpeasBuilder.groovy
@@ -27,6 +27,7 @@ import groovy.util.slurpersupport.GPathResult
import groovy.xml.XmlUtil
import org.gradle.api.Project
import org.gradle.util.GFileUtils
+import org.silverpeas.setup.SoftwareBundles
import org.silverpeas.setup.api.FileLogger
import org.silverpeas.setup.api.ManagedBeanContainer
import org.silverpeas.setup.api.SilverpeasSetupService
@@ -66,16 +67,16 @@ class SilverpeasBuilder {
* Extracts all the specified software bundles into the specified destination directory. The
* way the bundles are extracted follows the guide rules of the Silverpeas Portal Application
* construction.
- * @param silverpeasBundles a collection of the software bundles that makes Silverpeas.
- * @param tiersBundles a collection of tiers bundles to add to Silverpeas. This bundles are
- * processed differently than the Silverpeas ones.
+ * @param bundles collections of software bundles that makes Silverpeas.
* @param destinationDir the destination directory into which the bundles will be extracted
*/
void extractSoftwareBundles(
- final Collection silverpeasBundles,
- final Collection tiersBundles, final File destinationDir) {
+ final SoftwareBundles bundles,
+ final File destinationDir) {
Objects.requireNonNull(silverpeasHome)
Objects.requireNonNull(driversDir)
+ final Collection silverpeasBundles = bundles.silverpeas.files
+ final Collection tiersBundles = bundles.tiers.files
def isAWar = { File f ->
f.name.endsWith('.war') && !f.name.startsWith(CORE_WAR_BUNDLE_ID)
}
diff --git a/src/main/groovy/org/silverpeas/setup/construction/SilverpeasConstructionTask.groovy b/src/main/groovy/org/silverpeas/setup/construction/SilverpeasConstructionTask.groovy
index fa91cc56..58858c7d 100644
--- a/src/main/groovy/org/silverpeas/setup/construction/SilverpeasConstructionTask.groovy
+++ b/src/main/groovy/org/silverpeas/setup/construction/SilverpeasConstructionTask.groovy
@@ -23,12 +23,11 @@
*/
package org.silverpeas.setup.construction
-import org.gradle.api.DefaultTask
-import org.gradle.api.file.ConfigurableFileCollection
-import org.gradle.api.file.FileCollection
-import org.gradle.api.provider.Property
+
import org.gradle.api.tasks.TaskAction
+import org.silverpeas.setup.SilverpeasInstallationProperties
import org.silverpeas.setup.api.FileLogger
+import org.silverpeas.setup.api.SilverpeasSetupTask
import java.nio.file.Files
import java.nio.file.Paths
@@ -38,17 +37,12 @@ import java.nio.file.Paths
* Silverpeas. It gathers both the assembling and the build tasks.
* @author mmoquillon
*/
-class SilverpeasConstructionTask extends DefaultTask {
+class SilverpeasConstructionTask extends SilverpeasSetupTask {
public static final String SILVERPEAS_WAR = 'silverpeas.war'
File silverpeasHome
- File driversDir
- Map settings
- final Property destinationDir = project.objects.property(File)
- final ConfigurableFileCollection silverpeasBundles = project.files()
- final ConfigurableFileCollection tiersBundles = project.files()
- final Property developmentMode = project.objects.property(Boolean)
+ SilverpeasInstallationProperties installation
final FileLogger log = FileLogger.getLogger(this.name)
SilverpeasConstructionTask() {
@@ -63,40 +57,32 @@ class SilverpeasConstructionTask extends DefaultTask {
}
boolean precondition() {
- !destinationDir.get().exists() && !driversDir.exists()
+ !installation.distDir.get().exists() && !installation.dsDriversDir.get().exists()
}
boolean isUpToDate() {
- boolean ok = destinationDir.get().exists() && driversDir.exists()
- if (!developmentMode.get()) {
+ boolean ok = installation.distDir.get().exists() && installation.dsDriversDir.get().exists()
+ if (!installation.developmentMode.get()) {
ok = ok && Files.exists(Paths.get(project.buildDir.path, SILVERPEAS_WAR))
}
return ok
}
- void setSilverpeasBundles(FileCollection bundles) {
- this.silverpeasBundles.setFrom(bundles)
- }
-
- void setTiersBundles(FileCollection bundles) {
- this.tiersBundles.setFrom(bundles)
- }
-
@TaskAction
void construct() {
- if (!destinationDir.get().exists()) {
- destinationDir.get().mkdirs()
+ if (!installation.distDir.get().exists()) {
+ installation.distDir.get().mkdirs()
}
- if (!driversDir.exists()) {
- driversDir.mkdirs()
+ if (!installation.dsDriversDir.get().exists()) {
+ installation.dsDriversDir.get().mkdirs()
}
SilverpeasBuilder builder = new SilverpeasBuilder(project, log)
- builder.driversDir = driversDir
+ builder.driversDir = installation.dsDriversDir.get()
builder.silverpeasHome = silverpeasHome
- builder.developmentMode = developmentMode.get()
+ builder.developmentMode = installation.developmentMode.get()
builder.settings = settings
- builder.extractSoftwareBundles(silverpeasBundles.files, tiersBundles.files, destinationDir.get())
- builder.generateSilverpeasApplication(destinationDir.get())
+ builder.extractSoftwareBundles(installation.bundles, installation.distDir.get())
+ builder.generateSilverpeasApplication(installation.distDir.get())
}
}
diff --git a/src/main/groovy/org/silverpeas/setup/installation/SilverpeasInstallationTask.groovy b/src/main/groovy/org/silverpeas/setup/installation/SilverpeasInstallationTask.groovy
index 8e326f0a..30e7e540 100644
--- a/src/main/groovy/org/silverpeas/setup/installation/SilverpeasInstallationTask.groovy
+++ b/src/main/groovy/org/silverpeas/setup/installation/SilverpeasInstallationTask.groovy
@@ -28,10 +28,12 @@ import org.gradle.api.Project
import org.gradle.api.ProjectState
import org.gradle.api.provider.Property
import org.gradle.api.tasks.TaskAction
+import org.silverpeas.setup.SilverpeasInstallationProperties
import org.silverpeas.setup.api.FileLogger
import org.silverpeas.setup.api.JBossServer
import static org.silverpeas.setup.construction.SilverpeasConstructionTask.SILVERPEAS_WAR
+
/**
* A Gradle task to install the Web archive of the Silverpeas application into the JEE application
* server.
@@ -40,9 +42,7 @@ import static org.silverpeas.setup.construction.SilverpeasConstructionTask.SILVE
class SilverpeasInstallationTask extends DefaultTask {
Property jboss = project.objects.property(JBossServer)
- File deploymentDir
- final Property distDir = project.objects.property(File)
- final Property developmentMode = project.objects.property(Boolean)
+ SilverpeasInstallationProperties installation
Map settings
final FileLogger log = FileLogger.getLogger(this.name)
@@ -59,7 +59,8 @@ class SilverpeasInstallationTask extends DefaultTask {
@TaskAction
void install() {
- JBossServer server = jboss.get()
+ final JBossServer server = jboss.get()
+ final File deploymentDir = installation.deploymentDir.get()
if (server.isStartingOrRunning()) {
server.stop()
}
@@ -76,14 +77,14 @@ class SilverpeasInstallationTask extends DefaultTask {
it.into deploymentDir
}
try {
- installAdditionalArtifacts(server)
- installSilverpeas(server)
+ installAdditionalArtifacts(server, deploymentDir)
+ installSilverpeas(server, deploymentDir)
} finally {
server.stop()
}
}
- private void installAdditionalArtifacts(final JBossServer server) {
+ private void installAdditionalArtifacts(final JBossServer server, final File deploymentDir) {
deploymentDir.listFiles().sort().findAll { artifact ->
artifact.name != SILVERPEAS_WAR
}.each { artifact ->
@@ -95,13 +96,13 @@ class SilverpeasInstallationTask extends DefaultTask {
}
}
- private void installSilverpeas(final JBossServer server) {
+ private void installSilverpeas(final JBossServer server, final File deploymentDir) {
String name = 'silverpeas.war'
String context = settings.SILVERPEAS_CONTEXT + '.war'
File silverpeas = new File(deploymentDir.path, SILVERPEAS_WAR)
- if (developmentMode.get()) {
+ if (installation.developmentMode.get()) {
name += ' as exploded (dev mode)'
- silverpeas = distDir.get()
+ silverpeas = installation.distDir.get()
}
log.info "(Re)Installation of ${name}"
server.remove(SILVERPEAS_WAR)
diff --git a/src/main/groovy/org/silverpeas/setup/migration/SilverpeasMigrationTask.groovy b/src/main/groovy/org/silverpeas/setup/migration/SilverpeasMigrationTask.groovy
index b9443592..f14c185e 100644
--- a/src/main/groovy/org/silverpeas/setup/migration/SilverpeasMigrationTask.groovy
+++ b/src/main/groovy/org/silverpeas/setup/migration/SilverpeasMigrationTask.groovy
@@ -29,9 +29,11 @@ import org.gradle.api.logging.LogLevel
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.TaskExecutionException
import org.silverpeas.setup.SilverpeasConfigurationProperties
+import org.silverpeas.setup.SilverpeasMigrationProperties
import org.silverpeas.setup.api.DataSourceProvider
import org.silverpeas.setup.api.FileLogger
import org.silverpeas.setup.api.ManagedBeanContainer
+import org.silverpeas.setup.api.SilverpeasSetupTask
import java.nio.file.Path
import java.nio.file.Paths
@@ -55,12 +57,11 @@ import java.sql.SQLException
* MS-SQL, and Oracle).
* @author mmoquillon
*/
-class SilverpeasMigrationTask extends DefaultTask {
+class SilverpeasMigrationTask extends SilverpeasSetupTask {
static final String MIGRATION_SETTING_MODULE = 'dbbuilder-migration.xml'
- File migrationHome
- SilverpeasConfigurationProperties config
+ SilverpeasMigrationProperties migration
final FileLogger log = FileLogger.getLogger(this.name)
SilverpeasMigrationTask() {
@@ -91,10 +92,10 @@ class SilverpeasMigrationTask extends DefaultTask {
private void initMigrationTask() {
log.info 'Migration initialization...'
def status = loadInstalledModuleStatus()
- Path descriptor = Paths.get(migrationHome.path, 'modules', MIGRATION_SETTING_MODULE)
+ Path descriptor = Paths.get(migration.homeDir.get().path, 'modules', MIGRATION_SETTING_MODULE)
MigrationModule module = new MigrationModule()
.withStatus(status)
- .withSettings(config.settings)
+ .withSettings(settings)
.withLogger(log)
.loadMigrationsFrom(descriptor.toFile())
module.migrate()
@@ -108,11 +109,11 @@ class SilverpeasMigrationTask extends DefaultTask {
private List loadMigrationModules() {
def status = loadInstalledModuleStatus()
List modules = []
- new File(migrationHome, 'modules').listFiles().each { descriptor ->
+ new File(migration.homeDir.get(), 'modules').listFiles().each { descriptor ->
if (descriptor.name != MIGRATION_SETTING_MODULE) {
MigrationModule module = new MigrationModule()
.withStatus(status)
- .withSettings(config.settings)
+ .withSettings(settings)
.withLogger(log)
.loadMigrationsFrom(descriptor)
modules << module
diff --git a/src/test/groovy/org/silverpeas/setup/installation/SilverpeasInstallationTaskTest.groovy b/src/test/groovy/org/silverpeas/setup/installation/SilverpeasInstallationTaskTest.groovy
index 620e38ed..9739ee2f 100644
--- a/src/test/groovy/org/silverpeas/setup/installation/SilverpeasInstallationTaskTest.groovy
+++ b/src/test/groovy/org/silverpeas/setup/installation/SilverpeasInstallationTaskTest.groovy
@@ -55,7 +55,7 @@ class SilverpeasInstallationTaskTest extends GroovyTestCase {
void testInstall() {
SilverpeasInstallationTask task = project.tasks.findByPath(INSTALL.name)
- File jackrabbit = new File(task.deploymentDir, 'jackrabbit-jca.rar')
+ File jackrabbit = new File(task.installation.deploymentDir.get(), 'jackrabbit-jca.rar')
jackrabbit.createNewFile()
def mock = new MockFor(JBossServer)