001 /* 002 * Copyright 2011 The Kuali Foundation. 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.kfs.sys.businessobject.options; 017 018 import java.io.File; 019 import java.io.FileFilter; 020 import java.io.IOException; 021 import java.util.ArrayList; 022 import java.util.Collection; 023 import java.util.List; 024 import java.util.Map; 025 026 import org.apache.commons.io.DirectoryWalker; 027 import org.apache.commons.io.filefilter.DirectoryFileFilter; 028 import org.apache.commons.lang.StringUtils; 029 import org.kuali.kfs.sys.KFSConstants; 030 import org.kuali.kfs.sys.batch.BatchFileUtils; 031 import org.kuali.kfs.sys.context.SpringContext; 032 import org.kuali.rice.kns.lookup.keyvalues.KeyValuesBase; 033 import org.kuali.rice.kns.service.KualiConfigurationService; 034 import org.kuali.rice.core.util.KeyLabelPair; 035 036 public class BatchFileDirectoryPathValuesFinder extends KeyValuesBase { 037 public List<KeyLabelPair> getKeyValues() { 038 List<File> rootDirectories = BatchFileUtils.retrieveBatchFileLookupRootDirectories(); 039 List<KeyLabelPair> keyValues = new ArrayList<KeyLabelPair>(); 040 041 for (File rootDirectory: rootDirectories) { 042 SubDirectoryWalker walker = new SubDirectoryWalker(keyValues); 043 try { 044 walker.addKeyValues(rootDirectory); 045 } 046 catch (IOException e) { 047 throw new RuntimeException("IOException caught.", e); 048 } 049 } 050 051 return keyValues; 052 } 053 054 protected class SubDirectoryWalker extends DirectoryWalker { 055 private List<KeyLabelPair> keyValues; 056 private int recursiveDepth; 057 private File rootDirectory; 058 059 public SubDirectoryWalker(List<KeyLabelPair> keyValues) { 060 super(DirectoryFileFilter.DIRECTORY, -1); 061 this.keyValues = keyValues; 062 this.recursiveDepth = 0; 063 } 064 065 public void addKeyValues(File startDirectory) throws IOException { 066 rootDirectory = startDirectory; 067 walk(startDirectory, null); 068 } 069 070 /** 071 * @see org.apache.commons.io.DirectoryWalker#handleDirectoryStart(java.io.File, int, java.util.Collection) 072 */ 073 @Override 074 protected void handleDirectoryStart(File directory, int depth, Collection results) throws IOException { 075 super.handleDirectoryStart(directory, depth, results); 076 KeyLabelPair entry = new KeyLabelPair(); 077 entry.setKey(BatchFileUtils.pathRelativeToRootDirectory(directory.getAbsolutePath())); 078 entry.setLabel(directory.getName()); 079 entry.setNumPaddedSpaces(4 * this.recursiveDepth); 080 keyValues.add(entry); 081 this.recursiveDepth++; 082 } 083 084 /** 085 * @see org.apache.commons.io.DirectoryWalker#handleDirectoryEnd(java.io.File, int, java.util.Collection) 086 */ 087 @Override 088 protected void handleDirectoryEnd(File directory, int depth, Collection results) throws IOException { 089 super.handleDirectoryEnd(directory, depth, results); 090 this.recursiveDepth--; 091 } 092 } 093 }