1/* 2* Copyright 2013 The Android Open Source Project 3* 4* Licensed under the Apache License, Version 2.0 (the "License"); 5* you may not use this file except in compliance with the License. 6* You may obtain a copy of the License at 7* 8* http://www.apache.org/licenses/LICENSE-2.0 9* 10* Unless required by applicable law or agreed to in writing, software 11* distributed under the License is distributed on an "AS IS" BASIS, 12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13* See the License for the specific language governing permissions and 14* limitations under the License. 15*/ 16package com.example.android.samples.build 17 18import org.gradle.api.Plugin 19import org.gradle.api.Project 20import org.gradle.api.tasks.GradleBuild 21/** 22 * Plugin to expose build rules for sample generation and packaging. 23 */ 24class SampleGenPlugin implements Plugin { 25 26 /** 27 * Creates a new sample generator task based on the supplied sources. 28 * 29 * @param name Name of the new task 30 * @param sources Source tree that this task should process 31 */ 32 void createTask( 33 Project project, 34 String name, 35 SampleGenProperties props, 36 def sources, 37 def destination) { 38 project.task ([type:ApplyTemplates], name, { 39 sources.each { tree -> 40 source += tree 41 } 42 outputDir = destination 43 include = props.templatesInclude() 44 filenameTransform = {s -> props.getOutputForInput(s)} 45 parameters = props.templateParams() 46 }) 47 } 48 49 50 @Override 51 void apply(project) { 52 project.extensions.create("samplegen", SampleGenProperties) 53 project.samplegen.project = project 54 SampleGenProperties samplegen = project.samplegen 55 project.task('create') { 56 if (project.gradle.startParameter.taskNames.contains('create')) { 57 samplegen.getCreationProperties() 58 } 59 60 } 61 62 project.task('refresh') { 63 samplegen.getRefreshProperties() 64 } 65 66 project.afterEvaluate({ 67 createTask(project, 68 'processTemplates', 69 samplegen, 70 samplegen.templates(), 71 samplegen.targetProjectPath) 72 createTask(project, 73 'processCommon', 74 samplegen, 75 samplegen.common(), 76 samplegen.targetCommonPath()) 77 78 79 project.task([type: GradleBuild], 'bootstrap', { 80 buildFile = "${samplegen.targetProjectPath}/build.gradle" 81 dir = samplegen.targetProjectPath 82 tasks = ["refresh"] 83 }) 84 project.bootstrap.dependsOn(project.processTemplates) 85 project.bootstrap.dependsOn(project.processCommon) 86 project.create.dependsOn(project.bootstrap) 87 88 project.refresh.dependsOn(project.processTemplates) 89 project.refresh.dependsOn(project.processCommon) 90 91 // People get nervous when they see a task with no actions, so... 92 project.create { 93 doLast { 94 println "Project creation finished." 95 } 96 } 97 98 project.refresh { 99 doLast { 100 println "Project refresh finished." 101 } 102 } 103 104 }) 105 } 106 107 108} 109