/* * Copyright 2015 i-net software * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.inet.gradle.setup; import java.io.File; import java.util.ArrayList; import java.util.List; import org.gradle.api.Project; import org.gradle.util.ConfigureUtil; import com.inet.gradle.setup.abstracts.AbstractSetupBuilder; import com.inet.gradle.setup.abstracts.DesktopStarter; import com.inet.gradle.setup.abstracts.LocalizedResource; import com.inet.gradle.setup.abstracts.Service; import com.inet.gradle.setup.abstracts.SetupSources; import groovy.lang.Closure; /** * The Gradle extension for all setup tasks. * * @author Volker Berlin */ public class SetupBuilder extends AbstractSetupBuilder implements SetupSources { private List<LocalizedResource> licenseFiles = new ArrayList<>(); private List<LocalizedResource> longDescription = new ArrayList<>(); private String defaultResourceLanguage = "en"; private DesktopStarter runAfter, runBeforeUninstall; private List<Service> services = new ArrayList<>(); private final List<DesktopStarter> desktopStarters = new ArrayList<>(); private List<String> deleteFiles = new ArrayList<>(); private List<String> deleteFolders = new ArrayList<>(); /** * Create a new instance. * @param project current project */ public SetupBuilder( Project project ) { super(project); } /** * Return the license files * @return licenseFiles list of license files */ public List<LocalizedResource> getLicenseFiles() { return licenseFiles; } /** * Return the license file for a specific locale * @param locale for which to get the file * @return license file */ public File getLicenseFile( String locale ) { return LocalizedResource.getLocalizedResourceFile(licenseFiles, locale); } /** * Set the license file * @param license license file or closure */ public void setLicenseFile( Object license ) { licenseFiles.clear(); licenseFile( license ); } /** * Add a license file * @param license license file or closure */ public void licenseFile( Object license ) { LocalizedResource.addLocalizedResource(this, licenseFiles, license); } /** * A command that run after the installer. * @return the command or null */ public DesktopStarter getRunAfter() { return runAfter; } /** * Set a command that run after the installer. * @param runAfter the command */ public void setRunAfter( String runAfter ) { this.runAfter = new DesktopStarter( this ); this.runAfter.setExecutable( runAfter ); } /** * Set a command that run after the installer. * @param closue the command */ public void runAfter( Closure<?> closue ) { runAfter = ConfigureUtil.configure( closue, new DesktopStarter( this ) ); } /** * A command that run before the uninstaller. * @return the command or null */ public DesktopStarter getRunBeforeUninstall() { return runBeforeUninstall; } /** * Set a command that run before the uninstaller. * @param runAfter the command */ public void setRunBeforeUninstall( String runAfter ) { this.runBeforeUninstall = new DesktopStarter( this ); this.runBeforeUninstall.setExecutable( runAfter ); } /** * Set a command that run run before the uninstaller. * @param closue the command */ public void runBeforeUninstall( Closure<DesktopStarter> closue ) { runBeforeUninstall = ConfigureUtil.configure( closue, new DesktopStarter( this ) ); } /** * Register a service. * * @param closue the closure of the service definition */ public void service( Closure<Service> closue ) { Service service = ConfigureUtil.configure( closue, new Service( this ) ); services.add( service ); } /** * Returns the registered services. * * @return the registered services */ public List<Service> getServices() { return services; } /** * Register a desktop starter. * * @param closue the closure of the desktop starter's definition */ public void desktopStarter( Closure<?> closue ) { DesktopStarter service = ConfigureUtil.configure( closue, new DesktopStarter( this ) ); desktopStarters.add( service ); } /** * Returns the registered desktop starters. * * @return the registered desktop starters, never null, can be empty. */ public List<DesktopStarter> getDesktopStarters() { return desktopStarters; } /** * Get the list pattern for files that should be deleted. * @return the list */ public List<String> getDeleteFiles() { return deleteFiles; } /** * Add a file pattern to delete files before install and after uninstall. * @param pattern the patter. Can contains * and ? characters */ public void deleteFiles( String pattern ) { if( pattern.isEmpty() ) { return; } deleteFiles.add( pattern ); } /** * Get the list of folders to delete. * @return the list */ public List<String> getDeleteFolders() { return deleteFolders; } /** * Add a folder to delete before install and after uninstall. It delete the folder with all sub directories. * @param folder the folder */ public void deleteFolder( String folder ) { this.deleteFolders.add( folder ); } /** * @return the defaultResourceLanguage */ public String getDefaultResourceLanguage() { return defaultResourceLanguage; } /** * @param defaultResourceLanguage the defaultResourceLanguage to set */ public void setDefaultResourceLanguage(String defaultResourceLanguage) { this.defaultResourceLanguage = defaultResourceLanguage; } /** * Return the description files * @return licenseFiles list of license files */ public List<LocalizedResource> getLongDescriptions() { return longDescription; } /** * Return the description file for a specific locale * @param locale for which to get the file * @return license file */ public File getLongDescription( String locale ) { return LocalizedResource.getLocalizedResourceFile(longDescription, locale); } /** * Set the description file * @param description file or closure */ public void longDescription( Object description ) { LocalizedResource.addLocalizedResource(this, longDescription, description); } }