NIHVIVO-161 Remove obsolete files from previous implementation.
This commit is contained in:
parent
0b83d8b681
commit
ceb1bb2af9
4 changed files with 0 additions and 712 deletions
|
@ -1,68 +0,0 @@
|
||||||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
|
||||||
|
|
||||||
package edu.cornell.mannlib.vitro.webapp.controller.edit;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
|
|
||||||
import javax.servlet.RequestDispatcher;
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
|
|
||||||
import edu.cornell.mannlib.vedit.controller.BaseEditController;
|
|
||||||
import edu.cornell.mannlib.vedit.beans.EditProcessObject;
|
|
||||||
import edu.cornell.mannlib.vedit.beans.FormObject;
|
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.policy.JenaNetidPolicy.ContextSetup;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.Controllers;
|
|
||||||
|
|
||||||
public class ImageUploadController extends BaseEditController {
|
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(ImageUploadController.class.getName());
|
|
||||||
|
|
||||||
public void doGet(HttpServletRequest request, HttpServletResponse response) {
|
|
||||||
|
|
||||||
if (!checkLoginStatus(request,response,(String)request.getAttribute("fetchURI")))
|
|
||||||
return;
|
|
||||||
|
|
||||||
try {
|
|
||||||
super.doGet(request,response);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
String individualURIStr=
|
|
||||||
(individualURIStr=(String)request.getAttribute("entityUri"))==null ?
|
|
||||||
((individualURIStr=request.getParameter("entityUri"))==null ? null:individualURIStr) : individualURIStr;
|
|
||||||
|
|
||||||
if (individualURIStr != null)
|
|
||||||
request.setAttribute("individual", getWebappDaoFactory().getIndividualDao().getIndividualByURI(individualURIStr));
|
|
||||||
|
|
||||||
EditProcessObject epo = super.createEpo(request);
|
|
||||||
FormObject foo = new FormObject();
|
|
||||||
HashMap optionMap = new HashMap();
|
|
||||||
foo.setOptionLists(optionMap);
|
|
||||||
epo.setFormObject(foo);
|
|
||||||
|
|
||||||
RequestDispatcher rd = request.getRequestDispatcher(Controllers.BASIC_JSP);
|
|
||||||
request.setAttribute("bodyJsp","/templates/edit/specific/uploadimages_body.jsp");
|
|
||||||
request.setAttribute("scripts","/templates/edit/specific/uploadimages_head.jsp");
|
|
||||||
request.setAttribute("title","Upload Image");
|
|
||||||
request.setAttribute("bodyAttr","onLoad=\"initDHTMLAPI();initGroupDisplay('thumbnailExtra','block');\"");
|
|
||||||
request.setAttribute("epoKey",epo.getKey());
|
|
||||||
try {
|
|
||||||
rd.forward(request, response);
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error("ImageUploadController could not forward to view.");
|
|
||||||
log.error(e.getMessage());
|
|
||||||
log.error(e.getStackTrace());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void doPost(HttpServletRequest request, HttpServletResponse response) {
|
|
||||||
doGet(request,response);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,481 +0,0 @@
|
||||||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
|
||||||
|
|
||||||
package edu.cornell.mannlib.vitro.webapp.controller.edit;
|
|
||||||
|
|
||||||
import java.awt.Graphics2D;
|
|
||||||
import java.awt.geom.AffineTransform;
|
|
||||||
import java.awt.image.BufferedImage;
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
|
||||||
import javax.servlet.ServletContext;
|
|
||||||
import javax.servlet.ServletException;
|
|
||||||
import javax.servlet.UnavailableException;
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
|
|
||||||
import org.apache.commons.fileupload.FileItem;
|
|
||||||
import org.apache.commons.fileupload.FileUploadException;
|
|
||||||
import org.apache.commons.io.FilenameUtils;
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.filestorage.FileModelHelper;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.filestorage.backend.FileAlreadyExistsException;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.filestorage.backend.FileStorage;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.filestorage.backend.FileStorageSetup;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.filestorage.uploadrequest.FileUploadServletRequest;
|
|
||||||
|
|
||||||
public class UploadImagesServlet extends VitroHttpServlet {
|
|
||||||
private static final Log log = LogFactory.getLog(UploadImagesServlet.class);
|
|
||||||
|
|
||||||
/** Recognized file extensions mapped to MIME-types. */
|
|
||||||
private static final Map<String, String> RECOGNIZED_FILE_TYPES = createFileTypesMap();
|
|
||||||
|
|
||||||
/** The field in the HTTP request that holds the file. */
|
|
||||||
public static final String FILE_FIELD_NAME = "file1";
|
|
||||||
|
|
||||||
/** The field in the HTTP request that holds the individual's URI. */
|
|
||||||
public static final String URI_FIELD_NAME = "entityUri";
|
|
||||||
|
|
||||||
/** Limit file size to 50 megabytes. */
|
|
||||||
private static final int MAXIMUM_FILE_SIZE = 50 * 1024 * 1024;
|
|
||||||
|
|
||||||
/** How wide should a generated thumbnail image be (in pixels)? */
|
|
||||||
private static final int THUMBNAIL_WIDTH = 150;
|
|
||||||
|
|
||||||
/** How high should a generated thumbnail image be (in pixels)? */
|
|
||||||
private static final int THUMBNAIL_HEIGHT = 150;
|
|
||||||
|
|
||||||
private FileStorage fileStorage;
|
|
||||||
|
|
||||||
private static Map<String, String> createFileTypesMap() {
|
|
||||||
Map<String, String> map = new HashMap<String, String>();
|
|
||||||
map.put(".gif", "image/gif");
|
|
||||||
map.put(".png", "image/png");
|
|
||||||
map.put(".jpg", "image/jpeg");
|
|
||||||
map.put(".jpeg", "image/jpeg");
|
|
||||||
map.put(".jpe", "image/jpeg");
|
|
||||||
return Collections.unmodifiableMap(map);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* On startup, get a reference to the {@link FileStorage} system from the
|
|
||||||
* {@link ServletContext}.
|
|
||||||
*
|
|
||||||
* @throws UnavailableException
|
|
||||||
* if the attribute is missing, or is not of the correct type.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void init() throws ServletException {
|
|
||||||
Object o = getServletContext().getAttribute(
|
|
||||||
FileStorageSetup.ATTRIBUTE_NAME);
|
|
||||||
if (o instanceof FileStorage) {
|
|
||||||
fileStorage = (FileStorage) o;
|
|
||||||
} else if (o == null) {
|
|
||||||
throw new UnavailableException(this.getClass().getSimpleName()
|
|
||||||
+ " could not initialize. Attribute '"
|
|
||||||
+ FileStorageSetup.ATTRIBUTE_NAME
|
|
||||||
+ "' was not set in the servlet context.");
|
|
||||||
} else {
|
|
||||||
throw new UnavailableException(this.getClass().getSimpleName()
|
|
||||||
+ " could not initialize. Attribute '"
|
|
||||||
+ FileStorageSetup.ATTRIBUTE_NAME
|
|
||||||
+ "' in the servlet context contained an instance of '"
|
|
||||||
+ o.getClass().getName() + "' instead of '"
|
|
||||||
+ FileStorage.class.getName() + "'");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Treat a GET request like a POST request. However, since a GET request
|
|
||||||
* cannot contain uploaded files, this should produce an error.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void doGet(HttpServletRequest request, HttpServletResponse response)
|
|
||||||
throws ServletException, IOException {
|
|
||||||
doPost(request, response);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* Store an image file as the main image for the associated individual. The
|
|
||||||
* request must be a multi-part request containing the file. It must also
|
|
||||||
* contain a parameter for the URI of the individual.
|
|
||||||
* </p>
|
|
||||||
* <p>
|
|
||||||
* If the individual already has a main image, it will be removed. The new
|
|
||||||
* image is stored, and a thumbnail is generated and stored.
|
|
||||||
* </p>
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected void doPost(HttpServletRequest rawRequest,
|
|
||||||
HttpServletResponse response) throws ServletException, IOException {
|
|
||||||
List<String> errors = new ArrayList<String>();
|
|
||||||
|
|
||||||
try {
|
|
||||||
VitroRequest request = new VitroRequest(FileUploadServletRequest
|
|
||||||
.parseRequest(rawRequest, MAXIMUM_FILE_SIZE));
|
|
||||||
try {
|
|
||||||
FileItem imageFileItem = validateImageFromRequest(request);
|
|
||||||
Individual person = validateEntityUriFromRequest(request);
|
|
||||||
|
|
||||||
FileModelHelper fileModelHelper = new FileModelHelper(
|
|
||||||
getWebappDaoFactory());
|
|
||||||
|
|
||||||
removeExistingImage(person, fileModelHelper);
|
|
||||||
storeMainImageFile(person, imageFileItem, fileModelHelper);
|
|
||||||
generateThumbnailAndStore(person, imageFileItem,
|
|
||||||
fileModelHelper);
|
|
||||||
|
|
||||||
displaySuccess(request, response, person);
|
|
||||||
} catch (UserErrorException e) {
|
|
||||||
// No need to log it - it's a user error.
|
|
||||||
errors.add(e.getMessage());
|
|
||||||
displayFailure(request, response, errors);
|
|
||||||
} catch (IllegalStateException e) {
|
|
||||||
log.error(e, e);
|
|
||||||
errors.add(e.getMessage());
|
|
||||||
displayFailure(request, response, errors);
|
|
||||||
}
|
|
||||||
} catch (FileUploadException e) {
|
|
||||||
log.error(e, e);
|
|
||||||
errors.add(e.getMessage());
|
|
||||||
displayFailure(rawRequest, response, errors);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The image must be present and non-empty, and must have a mime-type that
|
|
||||||
* represents an image we support.
|
|
||||||
*
|
|
||||||
* We rely on the fact that a {@link FileUploadServletRequest} will always
|
|
||||||
* have a map of {@link FileItem}s, even if it is empty. However, that map
|
|
||||||
* may not contain the field that we want, or that field may contain an
|
|
||||||
* empty file.
|
|
||||||
*
|
|
||||||
* @throws UserErrorException
|
|
||||||
* if there is no file, if it is empty, or if it is not an image
|
|
||||||
* file.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
private FileItem validateImageFromRequest(HttpServletRequest request)
|
|
||||||
throws UserErrorException {
|
|
||||||
Map<String, List<FileItem>> map = (Map<String, List<FileItem>>) request
|
|
||||||
.getAttribute(FileUploadServletRequest.FILE_ITEM_MAP);
|
|
||||||
List<FileItem> list = map.get(FILE_FIELD_NAME);
|
|
||||||
if ((list == null) || list.isEmpty()) {
|
|
||||||
throw new UserErrorException("The form did not contain a '"
|
|
||||||
+ FILE_FIELD_NAME + "' field.");
|
|
||||||
}
|
|
||||||
|
|
||||||
FileItem file = list.get(0);
|
|
||||||
if (file.getSize() == 0) {
|
|
||||||
throw new UserErrorException("No file was uploaded in '"
|
|
||||||
+ FILE_FIELD_NAME + "'");
|
|
||||||
}
|
|
||||||
|
|
||||||
String filename = getSimpleFilename(file);
|
|
||||||
String mimeType = getMimeType(file);
|
|
||||||
if (!RECOGNIZED_FILE_TYPES.containsValue(mimeType)) {
|
|
||||||
throw new UserErrorException("'" + filename
|
|
||||||
+ "' is not a recognized image file type. "
|
|
||||||
+ "These are the recognized types: "
|
|
||||||
+ RECOGNIZED_FILE_TYPES);
|
|
||||||
}
|
|
||||||
|
|
||||||
return file;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The entity URI must be present and non-empty, and must refer to an
|
|
||||||
* existing individual.
|
|
||||||
*
|
|
||||||
* @throws UserErrorException
|
|
||||||
* if there is no entity URI, or if it is empty.
|
|
||||||
*/
|
|
||||||
private Individual validateEntityUriFromRequest(VitroRequest request)
|
|
||||||
throws UserErrorException {
|
|
||||||
String entityUri = request.getParameter(URI_FIELD_NAME);
|
|
||||||
if (entityUri == null) {
|
|
||||||
throw new UserErrorException("The form did not contain a '"
|
|
||||||
+ URI_FIELD_NAME + "' field.");
|
|
||||||
}
|
|
||||||
entityUri = entityUri.trim();
|
|
||||||
if (entityUri.length() == 0) {
|
|
||||||
throw new UserErrorException("The form did not contain a '"
|
|
||||||
+ URI_FIELD_NAME + "' field.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Individual entity = request.getWebappDaoFactory().getIndividualDao()
|
|
||||||
.getIndividualByURI(entityUri);
|
|
||||||
if (entity == null) {
|
|
||||||
throw new UserErrorException(
|
|
||||||
"No entity exists with the provided URI: '" + entityUri
|
|
||||||
+ "'");
|
|
||||||
}
|
|
||||||
return entity;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If this entity already had a main image, remove the connection. If the
|
|
||||||
* image and the thumbnail are no longer used by anyone, remove them from
|
|
||||||
* the model, and from the file system.
|
|
||||||
*/
|
|
||||||
private void removeExistingImage(Individual person,
|
|
||||||
FileModelHelper fileModelHelper) {
|
|
||||||
Individual mainImage = fileModelHelper.removeMainImage(person);
|
|
||||||
if (mainImage == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Individual thumbnail = FileModelHelper.getThumbnailForImage(mainImage);
|
|
||||||
|
|
||||||
if (!fileModelHelper.isFileReferenced(mainImage)) {
|
|
||||||
Individual bytes = FileModelHelper.getBytestreamForFile(mainImage);
|
|
||||||
if (bytes != null) {
|
|
||||||
try {
|
|
||||||
fileStorage.deleteFile(bytes.getURI());
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new IllegalStateException(
|
|
||||||
"Can't delete the main image file: '"
|
|
||||||
+ bytes.getURI() + "'", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fileModelHelper.removeFileFromModel(mainImage);
|
|
||||||
}
|
|
||||||
if (!fileModelHelper.isFileReferenced(thumbnail)) {
|
|
||||||
Individual bytes = FileModelHelper.getBytestreamForFile(thumbnail);
|
|
||||||
if (bytes != null) {
|
|
||||||
try {
|
|
||||||
fileStorage.deleteFile(bytes.getURI());
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new IllegalStateException(
|
|
||||||
"Can't delete the thumbnail file: '"
|
|
||||||
+ bytes.getURI() + "'", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fileModelHelper.removeFileFromModel(thumbnail);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Store this image in the model and in the file storage system, and set it
|
|
||||||
* as the main image for this person.
|
|
||||||
*/
|
|
||||||
private void storeMainImageFile(Individual person, FileItem imageFileItem,
|
|
||||||
FileModelHelper fileModelHelper) {
|
|
||||||
InputStream inputStream = null;
|
|
||||||
try {
|
|
||||||
inputStream = imageFileItem.getInputStream();
|
|
||||||
String mimeType = getMimeType(imageFileItem);
|
|
||||||
String filename = getSimpleFilename(imageFileItem);
|
|
||||||
|
|
||||||
// Create the file individuals in the model
|
|
||||||
Individual byteStream = fileModelHelper
|
|
||||||
.createByteStreamIndividual();
|
|
||||||
Individual file = fileModelHelper.createFileIndividual(mimeType,
|
|
||||||
filename, byteStream);
|
|
||||||
|
|
||||||
// Store the file in the FileStorage system.
|
|
||||||
fileStorage.createFile(byteStream.getURI(), filename, inputStream);
|
|
||||||
|
|
||||||
// Set the file as the main image for the person.
|
|
||||||
fileModelHelper.setAsMainImageOnEntity(person, file);
|
|
||||||
} catch (FileAlreadyExistsException e) {
|
|
||||||
throw new IllegalStateException(
|
|
||||||
"Can't create the main image file: " + e.getMessage(), e);
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new IllegalStateException("Can't create the main image file",
|
|
||||||
e);
|
|
||||||
} finally {
|
|
||||||
if (inputStream != null) {
|
|
||||||
try {
|
|
||||||
inputStream.close();
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate the thumbnail image from the original, store in the model and in
|
|
||||||
* the file storage system, and set it as the thumbnail on the main image.
|
|
||||||
*/
|
|
||||||
private void generateThumbnailAndStore(Individual person,
|
|
||||||
FileItem imageFileItem, FileModelHelper fileModelHelper) {
|
|
||||||
|
|
||||||
InputStream inputStream = null;
|
|
||||||
try {
|
|
||||||
inputStream = scaleImageForThumbnail(
|
|
||||||
imageFileItem.getInputStream(), THUMBNAIL_WIDTH,
|
|
||||||
THUMBNAIL_HEIGHT);
|
|
||||||
String mimeType = RECOGNIZED_FILE_TYPES.get(".jpg");
|
|
||||||
String filename = createThumbnailFilename(getSimpleFilename(imageFileItem));
|
|
||||||
|
|
||||||
// Create the file individuals in the model
|
|
||||||
Individual byteStream = fileModelHelper
|
|
||||||
.createByteStreamIndividual();
|
|
||||||
Individual file = fileModelHelper.createFileIndividual(mimeType,
|
|
||||||
filename, byteStream);
|
|
||||||
|
|
||||||
// Store the file in the FileStorage system.
|
|
||||||
fileStorage.createFile(byteStream.getURI(), filename, inputStream);
|
|
||||||
|
|
||||||
// Set the file as the thumbnail on the main image for the person.
|
|
||||||
fileModelHelper.setThumbnailOnIndividual(person, file);
|
|
||||||
} catch (FileAlreadyExistsException e) {
|
|
||||||
throw new IllegalStateException("Can't create the thumbnail file: "
|
|
||||||
+ e.getMessage(), e);
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new IllegalStateException("Can't create the thumbnail file",
|
|
||||||
e);
|
|
||||||
} finally {
|
|
||||||
if (inputStream != null) {
|
|
||||||
try {
|
|
||||||
inputStream.close();
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Everything went fine. Forward back to the JSP.
|
|
||||||
*/
|
|
||||||
private void displaySuccess(VitroRequest request,
|
|
||||||
HttpServletResponse response, Individual person)
|
|
||||||
throws ServletException, IOException {
|
|
||||||
try {
|
|
||||||
request.setAttribute(URI_FIELD_NAME, person.getURI());
|
|
||||||
|
|
||||||
String individualURI = person.getURI();
|
|
||||||
String recordName = person.getName();
|
|
||||||
if ((recordName == null) || recordName.isEmpty()) {
|
|
||||||
recordName = "here";
|
|
||||||
}
|
|
||||||
request.setAttribute("processError",
|
|
||||||
"updated individual <a href=\"entity?uri="
|
|
||||||
+ java.net.URLEncoder
|
|
||||||
.encode(individualURI, "UTF-8") + "\">"
|
|
||||||
+ recordName + "</a>");
|
|
||||||
request.setAttribute("outputLink", "<img src='"
|
|
||||||
+ person.getMainImageUri() + "'>");
|
|
||||||
getServletContext().getRequestDispatcher("/uploadimages.jsp")
|
|
||||||
.forward(request, response);
|
|
||||||
} catch (UnsupportedEncodingException e) {
|
|
||||||
log.error("This can't happen.", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Problem! Format the error messages and forward back to the JSP.
|
|
||||||
*/
|
|
||||||
private void displayFailure(HttpServletRequest request,
|
|
||||||
HttpServletResponse response, List<String> errors)
|
|
||||||
throws ServletException, IOException {
|
|
||||||
String entityUri = request.getParameter(URI_FIELD_NAME);
|
|
||||||
request.setAttribute(URI_FIELD_NAME, entityUri);
|
|
||||||
|
|
||||||
StringBuilder formatted = new StringBuilder();
|
|
||||||
for (String error : errors) {
|
|
||||||
if (formatted.length() > 0) {
|
|
||||||
formatted.append("<br/>");
|
|
||||||
}
|
|
||||||
formatted.append(error);
|
|
||||||
}
|
|
||||||
|
|
||||||
request.setAttribute("processError", formatted.toString());
|
|
||||||
getServletContext().getRequestDispatcher("/uploadimages.jsp").forward(
|
|
||||||
request, response);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Internet Explorer and Opera will give you the full path along with the
|
|
||||||
* filename. This will remove the path.
|
|
||||||
*/
|
|
||||||
private String getSimpleFilename(FileItem item) {
|
|
||||||
String fileName = item.getName();
|
|
||||||
if (fileName == null) {
|
|
||||||
return null;
|
|
||||||
} else {
|
|
||||||
return FilenameUtils.getName(fileName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the MIME type as supplied by the browser. If none, try to infer it
|
|
||||||
* from the filename extension and the map of recognized MIME types.
|
|
||||||
*/
|
|
||||||
private String getMimeType(FileItem file) {
|
|
||||||
String mimeType = file.getContentType();
|
|
||||||
if (mimeType != null) {
|
|
||||||
return mimeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
String filename = getSimpleFilename(file);
|
|
||||||
int periodHere = filename.lastIndexOf('.');
|
|
||||||
if (periodHere == -1) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
String extension = filename.substring(periodHere);
|
|
||||||
return RECOGNIZED_FILE_TYPES.get(extension);
|
|
||||||
}
|
|
||||||
|
|
||||||
private InputStream scaleImageForThumbnail(InputStream source, int width,
|
|
||||||
int height) throws IOException {
|
|
||||||
BufferedImage bsrc = ImageIO.read(source);
|
|
||||||
|
|
||||||
AffineTransform at = AffineTransform.getScaleInstance((double) width
|
|
||||||
/ bsrc.getWidth(), (double) height / bsrc.getHeight());
|
|
||||||
|
|
||||||
BufferedImage bdest = new BufferedImage(width, height,
|
|
||||||
BufferedImage.TYPE_INT_RGB);
|
|
||||||
Graphics2D g = bdest.createGraphics();
|
|
||||||
|
|
||||||
g.drawRenderedImage(bsrc, at);
|
|
||||||
|
|
||||||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
|
||||||
ImageIO.write(bdest, "JPG", buffer);
|
|
||||||
return new ByteArrayInputStream(buffer.toByteArray());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a name for the thumbnail from the name of the original file.
|
|
||||||
* "myPicture.anything" becomes "thumbnail_myPicture.jpg".
|
|
||||||
*/
|
|
||||||
private String createThumbnailFilename(String filename) {
|
|
||||||
String prefix = "thumbnail_";
|
|
||||||
String extension = ".jpg";
|
|
||||||
int periodHere = filename.lastIndexOf('.');
|
|
||||||
if (periodHere == -1) {
|
|
||||||
return prefix + filename + extension;
|
|
||||||
} else {
|
|
||||||
return prefix + filename.substring(0, periodHere) + extension;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Indicates that we should complain to the user.
|
|
||||||
*/
|
|
||||||
private static class UserErrorException extends Exception {
|
|
||||||
UserErrorException(String message) {
|
|
||||||
super(message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,132 +0,0 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
|
||||||
|
|
||||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
|
||||||
|
|
||||||
<table cellpadding="1" cellspacing="1" border="0" width="100%">
|
|
||||||
<c:choose>
|
|
||||||
<c:when test="${!empty processError}">
|
|
||||||
<tr>
|
|
||||||
<td align="center" colspan="7">
|
|
||||||
<font color="red">Results from processing input file:</font><br/>
|
|
||||||
${processError}
|
|
||||||
<c:if test="${!empty outputLink}">
|
|
||||||
<br/><font color="red">Link to check uploaded image:</font><br/>
|
|
||||||
<${outputLink}>
|
|
||||||
<c:if test="${processErrorUpdated}">
|
|
||||||
<p>
|
|
||||||
<form action="entity" method="get">
|
|
||||||
<input type="hidden" name="home" value="${portalBean.portalId}"/>
|
|
||||||
<input type="submit" class="form-button" value="view updated record"/>
|
|
||||||
<input type="hidden" name="entityUri" value="${individual.URI}"/>
|
|
||||||
</form>
|
|
||||||
</p>
|
|
||||||
</c:if>
|
|
||||||
</c:if>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</c:when>
|
|
||||||
</c:choose>
|
|
||||||
<tr><td align="center" colspan="7">
|
|
||||||
<form name="uploadForm" action="uploadImages" method="post" ENCTYPE="multipart/form-data">
|
|
||||||
<input type="hidden" name="home" value="${portalBean.portalId}"/>
|
|
||||||
<input type="hidden" name="submitter" value="${loginName}"/>
|
|
||||||
<input type="hidden" name="destination" value="images" />
|
|
||||||
<input type="hidden" name="contentType" value="image/jpeg/gif/pjpeg" />
|
|
||||||
<table width="100%" cellpadding="4" cellspacing="2" border="1">
|
|
||||||
<tr>
|
|
||||||
<td bgcolor="#C8D8F8" valign="middle" colspan="1" align="right">
|
|
||||||
<b>Individual</b>
|
|
||||||
</td>
|
|
||||||
<td bgcolor="#C8D8F8" valign="middle" align="left" colspan="2">
|
|
||||||
<c:choose>
|
|
||||||
<c:when test="${individual != null}">
|
|
||||||
<select name="entityUri" style="width:95%;">
|
|
||||||
<option value="${individual.URI}">${individual.name}</option>
|
|
||||||
</select>
|
|
||||||
</c:when>
|
|
||||||
<c:otherwise>
|
|
||||||
<p>No individuals match the incoming parameters or no individual was specified in the request</p>
|
|
||||||
</c:otherwise>
|
|
||||||
</c:choose>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<%-- RY Disabling large image upload
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td bgcolor="#C8D8F8" valign="middle" colspan="1" align="right">
|
|
||||||
<b>Select Image Type</b><br/>
|
|
||||||
</td>
|
|
||||||
|
|
||||||
<td colspan="2" bgcolor="#C8D8F8" align="left">
|
|
||||||
<input type="radio" name="type" value="thumb" checked="checked" onclick="refreshModeValue();" /> thumbnail (150px x 150px only)
|
|
||||||
<input type="radio" name="type" value="larger" onclick="refreshModeValue();" /> optional larger image
|
|
||||||
</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
--%>
|
|
||||||
<tr>
|
|
||||||
<td bgcolor="#C8D8F8" valign="middle" colspan="1" align="right">
|
|
||||||
<b>Select Image File</b>
|
|
||||||
<c:if test="${!empty inputLink}">
|
|
||||||
<br/>${inputLink}
|
|
||||||
</c:if>
|
|
||||||
</td>
|
|
||||||
<td colspan="2" bgcolor="#C8D8F8" align="left">
|
|
||||||
<span class="comment">Please note: images are displayed at approximately 150x150px. Smaller images may not display optimally.</span><br />
|
|
||||||
<input type="file" size="55" name="file1"/>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td bgcolor="#C8D8F8" valign="middle" colspan="1" align="right">
|
|
||||||
<b>Optional remote image link</b>
|
|
||||||
</td>
|
|
||||||
<td colspan="2" bgcolor="#C8D8F8" align="left">
|
|
||||||
<div id="thumbnailExtra" class="dropdownExtra">
|
|
||||||
<%-- (instead of uploading larger image -- use only when uploading thumbnail)<br/> --%>
|
|
||||||
<input type="text" size="55" name="remoteURL" value="http://"/>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td bgcolor="#C8D8F8" valign="middle" colspan="1" align="right">
|
|
||||||
<b>Destination Directory</b><br/>
|
|
||||||
</td>
|
|
||||||
<td colspan="2" bgcolor="#C8D8F8" align="left">
|
|
||||||
<input type="radio" name="destination" value="buildings" /> buildings<br/>
|
|
||||||
<input type="radio" name="destination" value="events" /> events<br/>
|
|
||||||
<input type="radio" name="destination" value="logos" /> logos<br/>
|
|
||||||
<input type="radio" name="destination" value="people" checked="checked" /> people<br/>
|
|
||||||
<input type="radio" name="destination" value="projects" /> projects<br/>
|
|
||||||
<input type="radio" name="destination" value="science" /> science<br/>
|
|
||||||
<input type="radio" name="destination" value="other" /> other<br/>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td bgcolor="#C8D8F8" valign="middle" colspan="1" align="right">
|
|
||||||
<b>Select Processing Mode</b><br/>
|
|
||||||
</td>
|
|
||||||
<td colspan="2" bgcolor="#C8D8F8" align="left">
|
|
||||||
<input type="radio" name="mode" value="upload"/> upload image
|
|
||||||
<input type="radio" name="mode" value="replace" checked="checked"/> upload and replace any existing image or URL
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td colspan="3" bgcolor="#C8D8F8" align="center">
|
|
||||||
<input type="hidden" name="type" value="thumb" /> <%-- RY Disabling large image upload --%>
|
|
||||||
<p>
|
|
||||||
<input type="submit" name="submitMode" class="yellowbutton" value="Upload Selected Image"/>
|
|
||||||
<input type="reset" name="reset" class="plainbutton" value="Reset" onclick="document.refreshForm.submit();"/>
|
|
||||||
</p>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</form>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr><td colspan="7">
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<form action="uploadimages.jsp" name="refreshForm" >
|
|
||||||
<input type="hidden" name="entityUri" value="${individual.URI}" />
|
|
||||||
</form>
|
|
|
@ -1,31 +0,0 @@
|
||||||
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
|
|
||||||
|
|
||||||
<script type="text/javascript" language="JavaScript" src="js/toggle.js"></script>
|
|
||||||
<%--
|
|
||||||
<script type="text/javascript" language="JavaScript">
|
|
||||||
/**************************************************** MODE OPTIONS ***********************************************************/
|
|
||||||
|
|
||||||
function refreshModeValue() {
|
|
||||||
var thumbnailMode = document.uploadForm.type[1].checked;
|
|
||||||
thumbnailMode = !thumbnailMode;
|
|
||||||
//alert("thumbnailMode set to " + thumbnailMode );
|
|
||||||
if ( thumbnailMode ) {
|
|
||||||
document.uploadForm.type[0].checked=true;
|
|
||||||
document.uploadForm.type[1].checked=false;
|
|
||||||
} else {
|
|
||||||
document.uploadForm.type[0].checked=false;
|
|
||||||
document.uploadForm.type[1].checked=true;
|
|
||||||
}
|
|
||||||
switchElementDisplay('thumbnailExtra');
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
--%>
|
|
||||||
<style type="text/css">
|
|
||||||
.dropdownExtra { display: none; }
|
|
||||||
.comment {
|
|
||||||
color: #6a5acd;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue