/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.gradle.plugins.alloy.taglib; import com.liferay.gradle.util.GradleUtil; import com.liferay.gradle.util.StringUtil; import com.liferay.gradle.util.Validator; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import org.gradle.api.Project; import org.gradle.api.file.FileCollection; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.InputFiles; import org.gradle.api.tasks.JavaExec; import org.gradle.api.tasks.Optional; import org.gradle.api.tasks.SkipWhenEmpty; import org.gradle.util.GUtil; /** * @author Andrea Di Giorgi */ public class BuildTaglibsTask extends JavaExec { public BuildTaglibsTask() { setMain("com.liferay.alloy.tools.tagbuilder.TagBuilder"); } public BuildTaglibsTask componentsXmlFiles(Iterable<?> componentsXmlFiles) { GUtil.addToCollection(_componentsXmlFiles, componentsXmlFiles); return this; } public BuildTaglibsTask componentsXmlFiles(Object... componentsXmlFiles) { return componentsXmlFiles(Arrays.asList(componentsXmlFiles)); } @Override public void exec() { setSystemProperties(_getCompleteSystemProperties()); super.exec(); } @InputFiles @SkipWhenEmpty public FileCollection getComponentsXmlFiles() { Project project = getProject(); return project.files(_componentsXmlFiles.toArray()); } @Input public String getCopyrightYear() { return GradleUtil.toString(_copyrightYear); } @Input public File getJavaDir() { return GradleUtil.toFile(getProject(), _javaDir); } @Input public String getJavaPackage() { return GradleUtil.toString(_javaPackage); } @Input public String getJspCommonInitPath() { return GradleUtil.toString(_jspCommonInitPath); } @Input public String getJspDirName() { return GradleUtil.toString(_jspDirName); } @Input public File getJspParentDir() { return GradleUtil.toFile(getProject(), _jspParentDir); } @Input @Optional public String getOsgiModuleSymbolicName() { return GradleUtil.toString(_osgiModuleSymbolicName); } @Input public String getTemplatesDirName() { return GradleUtil.toString(_templatesDirName); } @Input public File getTldDir() { return GradleUtil.toFile(getProject(), _tldDir); } public void setComponentsXmlFiles(Iterable<?> componentsXmlFiles) { _componentsXmlFiles.clear(); componentsXmlFiles(componentsXmlFiles); } public void setComponentsXmlFiles(Object... componentsXmlFiles) { setComponentsXmlFiles(Arrays.asList(componentsXmlFiles)); } public void setCopyrightYear(Object copyrightYear) { _copyrightYear = copyrightYear; } public void setJavaDir(Object javaDir) { _javaDir = javaDir; } public void setJavaPackage(Object javaPackage) { _javaPackage = javaPackage; } public void setJspCommonInitPath(Object jspCommonInitPath) { _jspCommonInitPath = jspCommonInitPath; } public void setJspDirName(Object jspDirName) { _jspDirName = jspDirName; } public void setJspParentDir(Object jspParentDir) { _jspParentDir = jspParentDir; } public void setOsgiModuleSymbolicName(Object osgiModuleSymbolicName) { _osgiModuleSymbolicName = osgiModuleSymbolicName; } public void setTemplatesDirName(Object templatesDirName) { _templatesDirName = templatesDirName; } public void setTldDir(Object tldDir) { _tldDir = tldDir; } private Map<String, Object> _getCompleteSystemProperties() { Map<String, Object> systemProperties = new HashMap<>( getSystemProperties()); systemProperties.put( "tagbuilder.components.xml", _getRelativePaths(getComponentsXmlFiles())); systemProperties.put("tagbuilder.copyright.year", getCopyrightYear()); systemProperties.put( "tagbuilder.java.dir", _getRelativePath(getJavaDir()) + "/"); systemProperties.put("tagbuilder.java.package", getJavaPackage()); systemProperties.put( "tagbuilder.jsp.common.init.path", getJspCommonInitPath()); String jspDirName = getJspDirName(); if (!jspDirName.endsWith("/")) { jspDirName = jspDirName + "/"; } systemProperties.put("tagbuilder.jsp.dir", jspDirName); systemProperties.put( "tagbuilder.jsp.parent.dir", _getRelativePath(getJspParentDir()) + "/"); String osgiModuleSymbolicName = getOsgiModuleSymbolicName(); if (Validator.isNotNull(osgiModuleSymbolicName)) { systemProperties.put( "tagbuilder.osgi.module.symbolic.name", osgiModuleSymbolicName); } systemProperties.put("tagbuilder.templates.dir", getTemplatesDirName()); systemProperties.put( "tagbuilder.tld.dir", _getRelativePath(getTldDir()) + "/"); return systemProperties; } private String _getRelativePath(File file) { Project project = getProject(); String relativePath = project.relativePath(file); return relativePath.replace('\\', '/'); } private String _getRelativePaths(Iterable<File> files) { List<String> relativePaths = new ArrayList<>(); for (File file : files) { relativePaths.add(_getRelativePath(file)); } return StringUtil.merge( relativePaths.toArray(new String[relativePaths.size()]), ","); } private final List<Object> _componentsXmlFiles = new ArrayList<>(); private Object _copyrightYear = "present"; private Object _javaDir; private Object _javaPackage; private Object _jspCommonInitPath = "/init.jsp"; private Object _jspDirName = "/"; private Object _jspParentDir; private Object _osgiModuleSymbolicName; private Object _templatesDirName = "com/liferay/alloy/tools/tagbuilder/templates/"; private Object _tldDir; }