/* * Copyright (C) 2010 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 vogar; import java.io.File; /** * A named job such as a test or benchmark run. This class tracks the resource * files and classes for compiling and running a Java source file. */ public final class Action { private static final String TEST_ROOT = "/test/"; private final String name; private final String actionClass; private final File resourcesDirectory; private final File sourcePath; private final File javaFile; private File userDir = new File(System.getProperty("user.dir")); public Action(String name, String actionClass, File resourcesDirectory, File sourcePath, File javaFile) { // Some part of the stack dies with hashes in file-names. this.name = name.replaceAll("#", "_"); this.actionClass = actionClass; this.resourcesDirectory = resourcesDirectory; this.sourcePath = sourcePath; this.javaFile = javaFile; } /** * Returns the local directory containing this action's required resource * files, or {@code null} if this action is standalone. */ public File getResourcesDirectory() { return resourcesDirectory; } /** * Returns this action's source path, or {@code null} if this file wasn't * built from source. */ public File getSourcePath() { return sourcePath; } /** * Returns this action's java file, or {@code null} if this file wasn't * built from source. */ public File getJavaFile() { return javaFile; } /** * Returns the executable classname, such as java.lang.IntegerTest * or BitTwiddle. */ public String getTargetClass() { return actionClass; } /** * Returns a unique identifier for this action. */ public String getName() { return name; } /** * Initializes the directory from which local files can be read by the * action. */ public void setUserDir(File base) { this.userDir = base; } public File getUserDir() { return userDir; } @Override public String toString() { return name; } /** * Returns an action name appropriate for the given {@code .java} file * without first reading the contents of the file. */ public static String nameForJavaFile(File javaFile) { String path = javaFile.getAbsolutePath(); int indexOfTest = path.indexOf(TEST_ROOT); path = (indexOfTest != -1) ? path.substring(indexOfTest + TEST_ROOT.length(), path.length() - ".java".length()) : path.substring(1); return path.replace(File.separatorChar, '.'); } }