1*055d4590SKeyi Gui /* 2*055d4590SKeyi Gui * Copyright (C) 2013 The Android Open Source Project 3*055d4590SKeyi Gui * 4*055d4590SKeyi Gui * Licensed under the Apache License, Version 2.0 (the "License"); 5*055d4590SKeyi Gui * you may not use this file except in compliance with the License. 6*055d4590SKeyi Gui * You may obtain a copy of the License at 7*055d4590SKeyi Gui * 8*055d4590SKeyi Gui * http://www.apache.org/licenses/LICENSE-2.0 9*055d4590SKeyi Gui * 10*055d4590SKeyi Gui * Unless required by applicable law or agreed to in writing, software 11*055d4590SKeyi Gui * distributed under the License is distributed on an "AS IS" BASIS, 12*055d4590SKeyi Gui * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*055d4590SKeyi Gui * See the License for the specific language governing permissions and 14*055d4590SKeyi Gui * limitations under the License. 15*055d4590SKeyi Gui */ 16*055d4590SKeyi Gui 17*055d4590SKeyi Gui package com.android.multidex; 18*055d4590SKeyi Gui 19*055d4590SKeyi Gui import java.io.File; 20*055d4590SKeyi Gui import java.io.FileInputStream; 21*055d4590SKeyi Gui import java.io.FileNotFoundException; 22*055d4590SKeyi Gui import java.io.InputStream; 23*055d4590SKeyi Gui import java.util.ArrayList; 24*055d4590SKeyi Gui 25*055d4590SKeyi Gui /** 26*055d4590SKeyi Gui * A folder element. 27*055d4590SKeyi Gui */ 28*055d4590SKeyi Gui class FolderPathElement implements ClassPathElement { 29*055d4590SKeyi Gui 30*055d4590SKeyi Gui private final File baseFolder; 31*055d4590SKeyi Gui FolderPathElement(File baseFolder)32*055d4590SKeyi Gui public FolderPathElement(File baseFolder) { 33*055d4590SKeyi Gui this.baseFolder = baseFolder; 34*055d4590SKeyi Gui } 35*055d4590SKeyi Gui 36*055d4590SKeyi Gui @Override open(String path)37*055d4590SKeyi Gui public InputStream open(String path) throws FileNotFoundException { 38*055d4590SKeyi Gui return new FileInputStream(new File(baseFolder, 39*055d4590SKeyi Gui path.replace(SEPARATOR_CHAR, File.separatorChar))); 40*055d4590SKeyi Gui } 41*055d4590SKeyi Gui 42*055d4590SKeyi Gui @Override close()43*055d4590SKeyi Gui public void close() { 44*055d4590SKeyi Gui } 45*055d4590SKeyi Gui 46*055d4590SKeyi Gui @Override list()47*055d4590SKeyi Gui public Iterable<String> list() { 48*055d4590SKeyi Gui ArrayList<String> result = new ArrayList<String>(); 49*055d4590SKeyi Gui collect(baseFolder, "", result); 50*055d4590SKeyi Gui return result; 51*055d4590SKeyi Gui } 52*055d4590SKeyi Gui collect(File folder, String prefix, ArrayList<String> result)53*055d4590SKeyi Gui private void collect(File folder, String prefix, ArrayList<String> result) { 54*055d4590SKeyi Gui for (File file : folder.listFiles()) { 55*055d4590SKeyi Gui if (file.isDirectory()) { 56*055d4590SKeyi Gui collect(file, prefix + SEPARATOR_CHAR + file.getName(), result); 57*055d4590SKeyi Gui } else { 58*055d4590SKeyi Gui result.add(prefix + SEPARATOR_CHAR + file.getName()); 59*055d4590SKeyi Gui } 60*055d4590SKeyi Gui } 61*055d4590SKeyi Gui } 62*055d4590SKeyi Gui 63*055d4590SKeyi Gui } 64