1/*
2 * Copyright (C) 2016 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 */
16
17package android.support.build;
18
19import org.gradle.api.tasks.SourceSet;
20
21import java.util.ArrayList;
22import java.util.Collections;
23import java.util.List;
24
25/**
26 * Defines an API specific support library modules.
27 * e.g. Honeycomb implementation of Support-v4.
28 *
29 * These ApiModules are converted into real modules when project is opened in AndroidStudio.
30 * When project is run from the command line, they are converted into source sets.
31 * This allows us to rely on previous compile setup to deploy projects with their dependencies while
32 * supporting development on Android Studio.
33 */
34public class ApiModule {
35    public static final int CURRENT = 99;
36    private String mFolderName;
37    private int mApi;
38    private SourceSet mSourceSet;
39    private ApiModule mPrev;
40    private String mParentModuleName;
41    private List<String> mParentModuleDependencies;
42    private List<String> mResourceFolders = new ArrayList<>();
43    private List<String> mAssetFolders = new ArrayList<>();
44    private List<String> mJavaResourceFolders = new ArrayList<>();
45
46    public ApiModule(String folderName, int api) {
47        mFolderName = folderName;
48        mApi = api;
49    }
50
51    public ApiModule resources(String... resourceFolders) {
52        Collections.addAll(mResourceFolders, resourceFolders);
53        return this;
54    }
55
56    public ApiModule assets(String... assetFolders) {
57        Collections.addAll(mAssetFolders, assetFolders);
58        return this;
59    }
60
61    public ApiModule javaResources(String... javaResourceFolders) {
62        Collections.addAll(mJavaResourceFolders, javaResourceFolders);
63        return this;
64    }
65
66    public List<String> getResourceFolders() {
67        return mResourceFolders;
68    }
69
70    public List<String> getAssetFolders() {
71        return mAssetFolders;
72    }
73
74    public List<String> getJavaResourceFolders() {
75        return mJavaResourceFolders;
76    }
77
78    public void setResourceFolders(List<String> resourceFolders) {
79        mResourceFolders = resourceFolders;
80    }
81
82    public String getParentModuleName() {
83        return mParentModuleName;
84    }
85
86    public void setParentModuleName(String parentModuleName) {
87        mParentModuleName = parentModuleName;
88    }
89
90    public String getFolderName() {
91        return mFolderName;
92    }
93
94    public int getApi() {
95        return mApi;
96    }
97
98    public Object getApiForSourceSet() {
99        return mApi == CURRENT ? "current" : mApi;
100    }
101
102    public SourceSet getSourceSet() {
103        return mSourceSet;
104    }
105
106    public void setSourceSet(SourceSet sourceSet) {
107        mSourceSet = sourceSet;
108    }
109
110    public ApiModule getPrev() {
111        return mPrev;
112    }
113
114    public void setPrev(ApiModule prev) {
115        mPrev = prev;
116    }
117
118    public String getModuleName() {
119        return ":" + mParentModuleName + "-" + mFolderName;
120    }
121
122    public List<String> getParentModuleDependencies() {
123        return mParentModuleDependencies;
124    }
125
126    public void setParentModuleDependencies(List<String> parentModuleDependencies) {
127        mParentModuleDependencies = parentModuleDependencies;
128    }
129}
130