blob: ba1b83989408ed410233b17657ec39f739cffa60 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.openmeetings.app.documents;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import org.openmeetings.app.remote.red5.ScopeApplicationAdapter;
import org.openmeetings.utils.ProcessHelper;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
public class GenerateThumbs {
private static final Logger log = Red5LoggerFactory
.getLogger(GenerateThumbs.class);
@Autowired
private GenerateImage generateImage;
public HashMap<String, String> generateThumb(String pre,
String current_dir, String filepath, Integer thumbSize) {
// Init variables
File f = new File(filepath);
String name = f.getName();
String folder = f.getParentFile().getAbsolutePath()
+ File.separatorChar;
String[] argv = new String[] {
generateImage.getPathToImageMagic(),
"-thumbnail",
Integer.toString(thumbSize) + "x" + Integer.toString(thumbSize),
filepath + ".jpg", folder + pre + name + ".jpg" };
log.debug("START generateThumb ################# ");
for (int i = 0; i < argv.length; i++) {
log.debug(" i " + i + " argv-i " + argv[i]);
}
log.debug("END generateThumb ################# ");
if (System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") == -1) {
return ProcessHelper.executeScript("generateBatchThumbByWidth", argv);
} else {
return this.processImageWindows(argv);
}
}
public HashMap<String, String> decodePDF(String inputfile, String outputfile) {
String[] argv = new String[] { generateImage.getPathToImageMagic(), // FIXME
inputfile, outputfile };
if (System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") == -1) {
return ProcessHelper.executeScript("generateBatchThumbByWidth", argv);
} else {
return this.processImageWindows(argv);
}
}
public HashMap<String, String> generateBatchThumb(String current_dir,
String inputfile, String outputpath, Integer thumbSize, String pre) {
if (System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") == -1) {
String[] argv = new String[] {
generateImage.getPathToImageMagic(),
"-thumbnail", // FIXME
Integer.toString(thumbSize), inputfile,
outputpath + "_" + pre + "_page-%04d.jpg" };
return ProcessHelper.executeScript("generateBatchThumbByWidth", argv);
} else {
String[] argv = new String[] {
generateImage.getPathToImageMagic(),
"-thumbnail", // FIXME
Integer.toString(thumbSize), inputfile,
outputpath + "_" + pre + "_page-%%04d.jpg" };
// return GenerateSWF.executeScript("generateBatchThumbByWidth",
// argv);
return this.processImageWindows(argv);
}
}
public HashMap<String, String> generateImageBatchByWidth(
String current_dir, String inputfile, String outputpath,
Integer thumbWidth, String pre) {
String[] argv = new String[] { generateImage.getPathToImageMagic(),
"-resize", Integer.toString(thumbWidth), inputfile,
outputpath + "_" + pre + "_page.png" };
if (System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") == -1) {
return ProcessHelper.executeScript("generateBatchThumbByWidth", argv);
} else {
return this.processImageWindows(argv);
}
}
public HashMap<String, String> processImageWindows(String[] args) {
HashMap<String, String> returnMap = new HashMap<String, String>();
returnMap.put("process", "processImageWindows");
try {
// Init variables
String[] cmd;
String executable_fileName = "";
String runtimeFile = "interviewMerge.bat";
executable_fileName = ScopeApplicationAdapter.batchFileDir
+ runtimeFile;
cmd = new String[4];
cmd[0] = "cmd.exe";
cmd[1] = "/C";
cmd[2] = "start";
cmd[3] = executable_fileName;
// log.debug("executable_fileName: "+executable_fileName);
// Create the Content of the Converter Script (.bat or .sh File)
String fileContent = "";
for (int k = 0; k < args.length; k++) {
if (k != 0) {
fileContent += " ";
}
fileContent += args[k];
}
fileContent += ScopeApplicationAdapter.lineSeperator + "exit";
File previous = new File(executable_fileName);
if (previous.exists()) {
previous.delete();
}
// execute the Script
FileOutputStream fos = new FileOutputStream(executable_fileName);
fos.write(fileContent.getBytes());
fos.close();
Runtime rt = Runtime.getRuntime();
returnMap.put("command", cmd.toString());
Process proc = rt.exec(cmd);
InputStream stderr = proc.getErrorStream();
BufferedReader br = new BufferedReader(new InputStreamReader(stderr));
String line = null;
String error = "";
while ((line = br.readLine()) != null) {
error += line;
// log.debug("line: "+line);
}
br.close();
returnMap.put("error", error);
int exitVal = proc.waitFor();
returnMap.put("exitValue", "" + exitVal);
return returnMap;
} catch (Throwable t) {
t.printStackTrace();
returnMap.put("error", t.getMessage());
returnMap.put("exitValue", "-1");
return returnMap;
}
}
}