/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package util;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.collect.Lists;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.TrueFileFilter;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;
import play.Play;
import play.data.validation.Error;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ViewHelpers {
public static String renderArgToJSON(String argName) {
Object modelValue = play.mvc.Scope.RenderArgs.current().get(argName);
return toJson(modelValue);
}
public static String buildModelInitializer(String modelName) {
return modelName + " = " + renderArgToJSON(modelName);
}
public static String buildModelInitializer(List<String> modelNames) {
return Joiner.on(";").join(Lists.transform(modelNames, new Function<String, String>() {
public String apply(String input) {
return buildModelInitializer(input);
}
}));
}
private static ObjectMapper MAPPER;
static {
MAPPER = new ObjectMapper();
MAPPER.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
}
public static String toJson(Object obj) {
try {
return MAPPER.writeValueAsString(obj);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static String errorsToJson(List<Error> playErrors) {
Map<String, List<String>> errors = new HashMap<String, List<String>>();
for (Error error : playErrors) {
if (!errors.containsKey(error.getKey())) {
errors.put(error.getKey(), new ArrayList<String>());
}
errors.get(error.getKey()).add(error.message());
}
return toJson(errors);
}
public static Map<String, String> globDirectory(String path) throws IOException {
Map<String, String> allFiles = new HashMap<String, String>();
File baseDir = Play.getVirtualFile(path).getRealFile();
Collection<File> files = FileUtils.listFiles(baseDir, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
int basePathLength = baseDir.getAbsolutePath().length() - path.length();
for (File file : files) {
allFiles.put(file.getAbsolutePath().substring(basePathLength), FileUtils.readFileToString(file));
}
return allFiles;
}
}