| /* |
| * Copyright (C) 2013 The Android Open Source Project |
| * |
| * 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.android.tools.idea.gradle.stubs; |
| |
| import com.google.common.io.Files; |
| import com.intellij.openapi.util.io.FileUtil; |
| import junit.framework.Assert; |
| import org.jetbrains.annotations.NotNull; |
| |
| import java.io.File; |
| |
| /** |
| * Structure, in the file system, of an Android-Gradle project. |
| */ |
| public class FileStructure { |
| @NotNull private final File myRootDir; |
| |
| /** |
| * Creates a new {@link FileStructure}. The directory structure is created in a temporary folder. |
| * |
| * @param rootDirName name of the root directory. |
| */ |
| public FileStructure(@NotNull String rootDirName) { |
| this(Files.createTempDir(), rootDirName); |
| } |
| |
| /** |
| * Creates a new {@link FileStructure}. |
| * |
| * @param parentDir parent directory. |
| * @param rootDirName name of the root directory. |
| */ |
| public FileStructure(@NotNull File parentDir, @NotNull String rootDirName) { |
| this(createDirectory(parentDir, rootDirName)); |
| } |
| |
| /** |
| * Creates a new {@link FileStructure}. |
| * |
| * @param rootDir the root directory. |
| */ |
| public FileStructure(@NotNull File rootDir) { |
| myRootDir = rootDir; |
| setUpStructure(); |
| } |
| |
| private void setUpStructure() { |
| createProjectDir("build/apk"); |
| createProjectDir("build/assets"); |
| createProjectDir("build/classes"); |
| createProjectDir("build/dependency-cache"); |
| createProjectDir("build/incremental"); |
| createProjectDir("build/libs"); |
| createProjectDir("build/manifests"); |
| createProjectDir("build/res"); |
| createProjectDir("build/source"); |
| createProjectDir("build/symbols"); |
| createProjectDir("src/main/assets"); |
| createProjectDir("src/main/java"); |
| createProjectDir("src/main/res"); |
| createProjectDir("src/instrumentTest/java"); |
| } |
| |
| /** |
| * Creates a directory using the given path. |
| * |
| * @param path the path of the directory to create. It is relative to {@link #getRootDir()}. |
| * @return the created directory. |
| */ |
| @NotNull |
| public File createProjectDir(@NotNull String path) { |
| File dir = createDirectory(myRootDir, path); |
| String msg = String.format("Directory '%s' should exist", path); |
| Assert.assertTrue(msg, dir.isDirectory()); |
| return dir; |
| } |
| |
| @NotNull |
| private static File createDirectory(@NotNull File parent, @NotNull String name) { |
| File dir = new File(parent, name); |
| FileUtil.createDirectory(dir); |
| return dir; |
| } |
| |
| /** |
| * Creates a file using the given path. |
| * |
| * @param path the path of the file to create. It is relative to {@link #getRootDir()}. |
| * @return the created file. |
| */ |
| @NotNull |
| public File createProjectFile(@NotNull String path) { |
| File file = new File(myRootDir, path); |
| FileUtil.createIfDoesntExist(file); |
| return file; |
| } |
| |
| /** |
| * @return the root directory. |
| */ |
| @NotNull |
| public File getRootDir() { |
| return myRootDir; |
| } |
| |
| /** |
| * Deletes all the directories in this file structure. |
| */ |
| public void dispose() { |
| FileUtil.delete(myRootDir); |
| } |
| } |