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 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 action) { @@ -175,4 +136,12 @@ class SilverpeasSetupExtension { void config(Action action) { action.execute(config) } + + void installation(Action action) { + action.execute(installation) + } + + void migration(Action 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)