325N/A/*
325N/A * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
325N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
325N/A *
325N/A * This code is free software; you can redistribute it and/or modify it
325N/A * under the terms of the GNU General Public License version 2 only, as
325N/A * published by the Free Software Foundation. Oracle designates this
325N/A * particular file as subject to the "Classpath" exception as provided
325N/A * by Oracle in the LICENSE file that accompanied this code.
325N/A *
325N/A * This code is distributed in the hope that it will be useful, but WITHOUT
325N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
325N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
325N/A * version 2 for more details (a copy is included in the LICENSE file that
325N/A * accompanied this code).
325N/A *
325N/A * You should have received a copy of the GNU General Public License version
325N/A * 2 along with this work; if not, write to the Free Software Foundation,
325N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
325N/A *
325N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
325N/A * or visit www.oracle.com if you need additional information or have any
325N/A * questions.
325N/A */
325N/A
325N/Apackage com.sun.xml.internal.org.jvnet.mimepull;
325N/A
325N/Aimport java.io.File;
325N/Aimport java.io.IOException;
325N/A
325N/A/**
325N/A * Configuration for MIME message parsing and storing.
325N/A *
325N/A * @author Jitendra Kotamraju
325N/A */
325N/Apublic class MIMEConfig {
325N/A
325N/A private static final int DEFAULT_CHUNK_SIZE = 8192;
325N/A private static final long DEFAULT_MEMORY_THRESHOLD = 1048576L;
325N/A private static final String DEFAULT_FILE_PREFIX = "MIME";
325N/A
325N/A // Parses the entire message eagerly
325N/A boolean parseEagerly;
325N/A
325N/A // Approximate Chunk size
325N/A int chunkSize;
325N/A
325N/A // Maximum in-memory data per attachment
325N/A long memoryThreshold;
325N/A
325N/A // Do not store to disk
325N/A boolean onlyMemory;
325N/A
325N/A // temp Dir to store large files
325N/A File tempDir;
325N/A String prefix;
325N/A String suffix;
325N/A
325N/A
325N/A private MIMEConfig(boolean parseEagerly, int chunkSize,
325N/A long inMemoryThreshold, String dir, String prefix, String suffix) {
325N/A this.parseEagerly = parseEagerly;
325N/A this.chunkSize = chunkSize;
325N/A this.memoryThreshold = inMemoryThreshold;
325N/A this.prefix = prefix;
325N/A this.suffix = suffix;
325N/A setDir(dir);
325N/A }
325N/A
325N/A public MIMEConfig() {
325N/A this(false, DEFAULT_CHUNK_SIZE, DEFAULT_MEMORY_THRESHOLD, null,
325N/A DEFAULT_FILE_PREFIX, null);
325N/A }
325N/A
325N/A boolean isParseEagerly() {
325N/A return parseEagerly;
325N/A }
325N/A
325N/A public void setParseEagerly(boolean parseEagerly) {
325N/A this.parseEagerly = parseEagerly;
325N/A }
325N/A
325N/A int getChunkSize() {
325N/A return chunkSize;
325N/A }
325N/A
325N/A void setChunkSize(int chunkSize) {
325N/A this.chunkSize = chunkSize;
325N/A }
325N/A
325N/A long getMemoryThreshold() {
325N/A return memoryThreshold;
325N/A }
325N/A
325N/A /**
325N/A * If the attachment is greater than the threshold, it is
325N/A * written to the disk.
325N/A *
325N/A * @param memoryThreshold no of bytes per attachment
325N/A * if -1, then the whole attachment is kept in memory
325N/A */
325N/A public void setMemoryThreshold(long memoryThreshold) {
325N/A this.memoryThreshold = memoryThreshold;
325N/A }
325N/A
325N/A boolean isOnlyMemory() {
325N/A return memoryThreshold == -1L;
325N/A }
325N/A
325N/A File getTempDir() {
325N/A return tempDir;
325N/A }
325N/A
325N/A String getTempFilePrefix() {
325N/A return prefix;
325N/A }
325N/A
325N/A String getTempFileSuffix() {
325N/A return suffix;
325N/A }
325N/A
325N/A /**
325N/A * @param dir
325N/A */
325N/A public void setDir(String dir) {
325N/A if (tempDir == null && dir != null && !dir.equals("")) {
325N/A tempDir = new File(dir);
325N/A }
325N/A }
325N/A
325N/A /**
325N/A * Validates if it can create temporary files. Otherwise, it stores
325N/A * attachment contents in memory.
325N/A */
325N/A public void validate() {
325N/A if (!isOnlyMemory()) {
325N/A try {
325N/A File tempFile = (tempDir == null)
325N/A ? File.createTempFile(prefix, suffix)
325N/A : File.createTempFile(prefix, suffix, tempDir);
325N/A tempFile.delete();
325N/A } catch(Exception ioe) {
325N/A memoryThreshold = -1L; // whole attachment will be in-memory
325N/A }
325N/A }
325N/A }
325N/A
325N/A}