/**
* Sahi - Web Automation and Test Tool
*
* Copyright 2006 V Narayan Raman
*
* 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 net.sf.sahi.playback;
import net.sf.sahi.config.Configuration;
import net.sf.sahi.util.Utils;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
public class ScriptUtil {
public static String getScriptsJs(final String scriptName) {
String[] fileList = getScriptFiles();
Arrays.sort(fileList);
return getJs(fileList, scriptName, false);
}
public static String getScriptRootsJs(final String dir) {
String[] fileList = Configuration.getScriptRoots();
return getJs(fileList, Utils.escapeDoubleQuotesAndBackSlashes(dir), true);
}
private static String getJs(final String[] list, final String selected, final boolean isDir) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < list.length; i++) {
String absolutePath = list[i];
sb.append("addToScript").append(isDir ? "Dir" : "").append("List").append("('");
sb.append(Utils.escapeDoubleQuotesAndBackSlashes(absolutePath));
sb.append("');\n");
}
sb.append("setSelectedScript").append(isDir ? "Dir" : "").append("('").append(selected).append("')");
sb.append("\n\n\n");
return sb.toString();
}
private static String[] getScriptFiles() {
List<String> allFiles = new ArrayList<String>();
Configuration.createScriptsDirIfNeeded();
String[] scriptRoots = Configuration.getScriptRoots();
for (int i = 0; i < scriptRoots.length; i++) {
String scriptRoot = scriptRoots[i];
File file = new File(scriptRoot);
getFilesRecursively(file, allFiles);
}
return allFiles.toArray(new String[0]);
}
public static String[] getScriptFiles(String dir) {
List<String> allFiles = new ArrayList<String>();
File file = new File(dir);
getFilesRecursively(file, allFiles);
return allFiles.toArray(new String[0]);
}
private static List<String> getFilesRecursively(final File dir, final List<String> allFiles) {
File[] files = dir.listFiles();
for (int i = 0; i < files.length; i++) {
File file = files[i];
if (file.isDirectory()) {
getFilesRecursively(file, allFiles);
} else {
if (isAddable(file)) {
allFiles.add(Utils.getAbsolutePath(file));
}
}
}
return allFiles;
}
private static boolean isAddable(final File file) {
String absolutePath = Utils.getAbsolutePath(file);
String[] extensions = Configuration.getScriptExtensions();
for (int i = 0; i < extensions.length; i++) {
if (absolutePath.endsWith(extensions[i])) {
return true;
}
}
return false;
}
}