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