/*
 * Copyright 2003-2006 the original author or authors.
 * Licensed 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 com.jdon.jivejdon.presentation.form;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.upload.FormFile;
import org.apache.struts.upload.MultipartRequestHandler;

import com.jdon.jivejdon.domain.model.message.upload.UploadHelper;

/**
 * @author <a href="mailto:[email protected]">banq</a>
 * 
 */
public class UpLoadFileForm extends BaseForm {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private UploadHelper uploadHelper;

	private String id;

	private String description;

	private FormFile theFile;

	private String parentName;

	private String parentId;

	private String tempId;

	private String path;

	private boolean authenticated = true;

	public boolean isAuthenticated() {
		return authenticated;
	}

	public void setAuthenticated(boolean authenticated) {
		this.authenticated = authenticated;
	}

	public UpLoadFileForm() {
		this.uploadHelper = new UploadHelper();
	}

	public String getId() {
		return id;
	}

	public FormFile getTheFile() {
		return theFile;
	}

	public void setId(String id) {
		this.id = id;
	}

	public void setTheFile(FormFile theFile) {
		this.theFile = theFile;
	}

	public String getParentId() {
		return parentId;
	}

	public void setParentId(String parentId) {
		this.parentId = parentId;
	}

	public String getParentName() {
		return parentName;
	}

	public void setParentName(String parentName) {
		this.parentName = parentName;
	}

	public String getTempId() {
		return tempId;
	}

	public void setTempId(String tempId) {
		this.tempId = tempId;
	}

	/**
	 * @return Returns the description.
	 */
	public String getDescription() {
		return description;
	}

	/**
	 * @param description
	 *            The description to set.
	 */
	public void setDescription(String description) {
		this.description = description;
	}

	public String getPath() {
		return path;
	}

	public void setPath(String path) {
		this.path = path;
	}

	/**
	 * Check to make sure the client hasn't exceeded the maximum allowed upload
	 * size inside of this validate method.
	 */
	public void doValidate(ActionMapping mapping, HttpServletRequest request, List errors) {

		// has the maximum length been exceeded?
		Boolean maxLengthExceeded = (Boolean) request.getAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED);
		if ((maxLengthExceeded != null) && (maxLengthExceeded.booleanValue())) {

			errors.add("exceed the upload max length");

		} else if (theFile != null) {
			// retrieve the file name
			String fileName = theFile.getFileName();
			if (!uploadHelper.canBeUpload(fileName))
				errors.add(new ActionMessage("illegal file type! "));
		}

	}

	public String getName() {
		if (theFile != null)
			return theFile.getFileName();
		return "";
	}

	public int getSize() {
		try {
			if (theFile != null) {
				int size = theFile.getFileSize();
				return size / 1000;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return 0;
	}

	public byte[] getData() {
		try {
			if (theFile != null)
				return theFile.getFileData();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * @return Returns the contentType.
	 */
	public String getContentType() {
		try {
			if (theFile != null) {
				return theFile.getContentType();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "html/text";
	}

	/**
	 * @return Returns the fileTypes.
	 */
	public List getFileTypes() {
		return uploadHelper.getFileTypes();
	}

	/**
	 * @return Returns the imagesTypes.
	 */
	public List getImagesTypes() {
		return uploadHelper.getImagesTypes();
	}

}