package com.itstherules.mediacentre.controller;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import com.itstherules.io.FileEmbedder;
import com.itstherules.io.IOHelper;
import com.itstherules.mediacentre.Extension;
import com.itstherules.mediacentre.freemarker.method.ParentDirectoryFinder;
import com.itstherules.mediacentre.model.ItemScalar;
import com.itstherules.mediacentre.model.MetaDataScalar;
import com.itstherules.mediacentre.model.RecursiveItemsList;
import com.itstherules.metadata.FlvHeader;
import com.itstherules.metadata.MetaDataGen;
import com.itstherules.metadata.TagBroker;
import com.itstherules.stream.model.ItemsModel;
public class MetaDataController extends BaseController {
private static final String MOVIES = "movies";
@Override
public void list(Map<String, Object> parameters, HttpServletResponse response) throws IOException {
RecursiveItemsList model = new RecursiveItemsList(MOVIES, Extension.flv.toString());
parameters.put("items", model.values());
parameters.put("parentDirectory", new ParentDirectoryFinder());
merge("metadata/list.freemarker", parameters, response.getWriter());
}
@Override
public void show(Map<String, Object> parameters, HttpServletResponse response) throws IOException {
ItemScalar itemScalar = new ItemScalar(MOVIES, (String) parameters.get("directory"));
File file = itemScalar.value((String) parameters.get("item"));
MetaDataScalar metaDataScalar = new MetaDataScalar();
parameters.put("metaData", metaDataScalar.value(file));
merge("metadata/show.freemarker", parameters, response.getWriter());
}
@Override
public void edit(Map<String, Object> parameters, HttpServletResponse response) throws IOException {
merge("metadata/edit.freemarker", parameters, response.getWriter());
}
@Override
public void update(Map<String, Object> parameters, HttpServletResponse response) throws IOException {
String metaAuthor = (String) parameters.get("metaCreator");
String[] addedEmbedParameters = nullGuard((String) parameters.get("parameters")).split(" ");
File flvFile = getFile(parameters);
if(flvFile != null) {
IOHelper ioHelper = new IOHelper(flvFile);
File tempOutFile = new File(flvFile.getAbsolutePath() + ".tmp");
ioHelper.setOutFile(tempOutFile);
FlvHeader flvHeader = new FlvHeader(ioHelper);
TagBroker tagBroker = new TagBroker(ioHelper, flvHeader);
MetaDataGen metaDataGen = new MetaDataGen(tagBroker, flvHeader);
metaDataGen.buildOnLastSecond();
metaDataGen.buildOnMetaData();
FileEmbedder fileEmbedder = new FileEmbedder(metaDataGen.getMetaData());
if("".equals(metaAuthor)) metaAuthor = "MediaCentre";
fileEmbedder.embedVar("metacreator", metaAuthor);
if(addedEmbedParameters.length > -1 && !"".equals(addedEmbedParameters[0])) fileEmbedder.embedVars(addedEmbedParameters);
metaDataGen.sealMetaData();
tagBroker.writeTags();
ioHelper.closeAll();
tempOutFile.renameTo(flvFile);
response.sendRedirect("../list/index.html");
}
}
private String nullGuard(String parameter) {
if(parameter == null) return "";
return parameter;
}
private File getFile(Map<String, Object> parameters) {
String directory = (String) parameters.get("directory");
String item = (String) parameters.get("item");
return itemPath(directory, item);
}
private File itemPath(String subDirectory, String item) {
ItemsModel items = new ItemsModel(MOVIES, subDirectory, Extension.flv.toString());
for (File file : items.asList()) {
if (item.equals(file.getName())) {
return file;
}
}
throw new RuntimeException();
}}