/*
* OpenClinica is distributed under the
* GNU Lesser General Public License (GNU LGPL).
* For details see: http://www.openclinica.org/license
* copyright 2003-2010 Akaza Research
*/
package org.akaza.openclinica.bean.rule;
import org.akaza.openclinica.exception.OpenClinicaSystemException;
import java.util.ArrayList;
import java.util.Collections;
/**
* Setting configuration for file extensions & maxSize of files being uploaded
*
* @author Krikor Krumlian
* @since 3.1.0
* @see FileUploadHelper
*/
public class FileProperties {
private String extensions;
private ExtensionSettings extensionSettings;
private final Integer MB = 1024 * 1024;
private final Long fileSizeMax;
enum ExtensionSettings {
VALID, INVALID
}
public FileProperties() {
setExtensions("");
setExtensionSettings(ExtensionSettings.VALID);
fileSizeMax = Long.valueOf(MB * 10);
}
public FileProperties(String extensions) {
setExtensions(extensions);
setExtensionSettings(ExtensionSettings.VALID);
fileSizeMax = Long.valueOf(MB * 10);
}
public FileProperties(String extensions, String extensionSettings) {
setExtensions(extensions);
this.extensionSettings = getExtensionSettings(extensionSettings);
fileSizeMax = Long.valueOf(MB * 10);
}
public void isValidExtension(String uploadedFileExtension){
uploadedFileExtension =
uploadedFileExtension.lastIndexOf(".") == -1 ? " " : uploadedFileExtension
.substring(uploadedFileExtension.lastIndexOf(".") + 1, uploadedFileExtension.length()).trim().toUpperCase();
ArrayList<String> extensionsList = new ArrayList<String>();
Collections.addAll(extensionsList, extensions.trim().toUpperCase().split(","));
if (extensions.trim().length() == 0) { // if no list is defined
if (extensionSettings.equals(ExtensionSettings.VALID)) {
return;
} else {
throw new OpenClinicaSystemException("prohibited_file_extensions", new Object[] { "ALL" });
}
}
if (extensionSettings.equals(ExtensionSettings.VALID)) { // if the list is flagged as valid list
if (!extensionsList.contains(uploadedFileExtension)) // if valid list does not contain extension
throw new OpenClinicaSystemException("permitted_file_extensions", new Object[] { extensions});
}else{ // if the list is flagged as prohibited list
if (extensionsList.contains(uploadedFileExtension)) // if deny list contains extension
throw new OpenClinicaSystemException("prohibited_file_extensions", new Object[] { extensions});
}
}
public String getExtensions() {
return extensions;
}
public void setExtensions(String extensions) {
this.extensions = extensions == null ? "" : extensions.trim();
}
public ExtensionSettings getExtensionSettings() {
return extensionSettings;
}
public void setExtensionSettings(ExtensionSettings extensionSettings) {
this.extensionSettings = extensionSettings;
}
public ExtensionSettings getExtensionSettings(String extensionSettings) {
if (extensionSettings == null || extensionSettings.length() == 0 ) {
return ExtensionSettings.VALID;
}else{
try
{
return ExtensionSettings.valueOf(extensionSettings.trim().toUpperCase());
}
catch(IllegalArgumentException ex)
{
// Do Nothing for now. Is this a good practice ?
}
return ExtensionSettings.VALID;
}
}
public Long getFileSizeMax() {
return fileSizeMax;
}
public Long getFileSizeMaxInMb() {
return fileSizeMax / MB;
}
}