1bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller/* 2bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller * Copyright (C) 2015 The Android Open Source Project 3bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller * 4bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller * Licensed under the Apache License, Version 2.0 (the "License"); 5bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller * you may not use this file except in compliance with the License. 6bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller * You may obtain a copy of the License at 7bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller * 8bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller * http://www.apache.org/licenses/LICENSE-2.0 9bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller * 10bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller * Unless required by applicable law or agreed to in writing, software 11bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller * distributed under the License is distributed on an "AS IS" BASIS, 12bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller * See the License for the specific language governing permissions and 14bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller * limitations under the License. 15bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller */ 16bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fullerpackage com.google.currysrc.api.input; 17bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller 18bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fullerimport com.google.common.collect.Lists; 19bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fullerimport com.google.currysrc.api.input.InputFileGenerator; 20bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller 21bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fullerimport java.io.File; 22bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fullerimport java.util.List; 23bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller 24bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller/** 25bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller * Generates a set of .java input files beneath a given base directory. 26bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller */ 27bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fullerpublic final class DirectoryInputFileGenerator implements InputFileGenerator { 28bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller 29bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller private final File baseDir; 30bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller 31bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller public DirectoryInputFileGenerator(File baseDir) { 32bf53169979076ad22f7a70c4ee03de098f8add9fTobias Thierer if (baseDir == null) { 33bf53169979076ad22f7a70c4ee03de098f8add9fTobias Thierer throw new NullPointerException("Null baseDir"); 34bf53169979076ad22f7a70c4ee03de098f8add9fTobias Thierer } 35bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller this.baseDir = baseDir; 36bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller } 37bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller 38bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller @Override 39bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller public Iterable<? extends File> generate() { 40bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller List<File> files = Lists.newArrayList(); 41bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller collectFiles(baseDir, files); 42bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller return files; 43bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller } 44bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller 45bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller private void collectFiles(File baseDir, List<File> files) { 46bf53169979076ad22f7a70c4ee03de098f8add9fTobias Thierer if (!baseDir.exists()) { 47bf53169979076ad22f7a70c4ee03de098f8add9fTobias Thierer throw new IllegalArgumentException("Not found: " + baseDir.getAbsolutePath()); 48bf53169979076ad22f7a70c4ee03de098f8add9fTobias Thierer } 49bf53169979076ad22f7a70c4ee03de098f8add9fTobias Thierer if (!baseDir.isDirectory()) { 50bf53169979076ad22f7a70c4ee03de098f8add9fTobias Thierer throw new IllegalArgumentException("Not a directory: " + baseDir.getAbsolutePath()); 51bf53169979076ad22f7a70c4ee03de098f8add9fTobias Thierer } 52bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller for (File file : baseDir.listFiles()) { 53bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller if (file.isDirectory()) { 54bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller collectFiles(file, files); 55bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller } else if (file.getName().endsWith(".java")) { 56bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller files.add(file); 57bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller } else { 58bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller System.out.println("Ignoring file: " + file); 59bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller } 60bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller } 61bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller } 62bb8f95bc32b7eaa43c162dc6687276fb34d9c49cNeil Fuller} 63