/***************************************************************************
* Copyright (C) 2003-2007 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see<http://www.gnu.org/licenses/>.
***************************************************************************/
package org.exoplatform.faq.service;
import java.io.InputStream;
import javax.jcr.Node;
import javax.jcr.Session;
import org.exoplatform.container.ExoContainer;
import org.exoplatform.container.ExoContainerContext;
import org.exoplatform.services.jcr.RepositoryService;
/**
* Created by The eXo Platform SARL
* File Attachment is used to store infor of file is attached when upload file
* or get files of question when view in page.
*
* @author Duy Tu
* @since Nov 10, 2007
*/
public class FileAttachment {
/** The id. */
private String id;
/** The path. */
private String path;
/** The work space. */
private String workspace;
/** The name. */
private String name;
/** The mine type. */
private String mimeType;
/** The size. */
private long size;
/** The input. */
private InputStream input;
/** the name of node file */
private String nodeName;
/**
* Gets the file's id, each file have an unique id.
* this id is used to edit question when upload file
*
* @return the id
*/
public String getId() {
return id;
}
/**
* Sets the id for this file, setting the id for this file
* is done auto by system.
*
* @param s the new id
*/
public void setId(String s) {
this.id = s;
}
/**
* Gets the path of file, this path is used to view or down load file.
*
* @return the path of file
*/
public String getPath() {
return path;
}
/**
* Sets the path which is the path in server. System auto set this property for File object
*
* @param p the new path
*/
public void setPath(String p) {
this.path = p;
}
/**
* Gets the workspace.
*
* @return the workspace
*/
public String getWorkspace() {
return workspace;
}
/**
* Sets the workspace.
*
* @param ws the new workspace
*/
public void setWorkspace(String ws) {
workspace = ws;
}
/**
* Gets the mime type.
*
* @return the mime type
*/
public String getMimeType() {
return mimeType;
}
/**
* Sets the mime type.
*
* @param mimeType_ the new mime type
*/
public void setMimeType(String mimeType_) {
this.mimeType = mimeType_;
}
/**
* Gets the size of file.
*
* @return the size
*/
public long getSize() {
return size;
}
/**
* Sets the size for file is uploaded, setting size for file is done auto by sytem.
*
* @param size_ the new size
*/
public void setSize(long size_) {
this.size = size_;
}
/**
* Gets the name of file attach.
*
* @return the name
*/
public String getName() {
return name;
}
/**
* Sets the name of file for fileAttachment object when upload or get data.
*
* @param name_ the new name
*/
public void setName(String name_) {
this.name = name_;
}
/**
* Gets the input stream which is file's data.
*
* @return data of file
* @throws Exception if Repository or value format occur exception
*/
public InputStream getInputStream() throws Exception {
if (input != null)
return input;
else {
Node attachment;
Session session = getSesison();
try {
attachment = (Node) session.getItem(getId());
return attachment.getNode("jcr:content").getProperty("jcr:data").getStream();
} catch (Exception e) {
return null;
} finally {
session.logout();
}
}
}
/**
* Sets the input stream which is file's data.
*
* @param in the new input stream
* @throws Exception the exception
*/
public void setInputStream(InputStream in) throws Exception {
input = in;
}
/**
* Get the name of Node file
* @return name of node
*/
public String getNodeName() {
return nodeName;
}
/**
* Registers name for node which is used to store file attachment
* @param nodeName
*/
public void setNodeName(String nodeName) {
this.nodeName = nodeName;
}
/**
* Gets the sesison.
*
* @return the sesison
* @throws Exception if Repository or RepositoryConfiguration occur exception
*/
private Session getSesison() throws Exception {
ExoContainer container = ExoContainerContext.getCurrentContainer();
RepositoryService repoService = (RepositoryService) container.getComponentInstanceOfType(RepositoryService.class);
return repoService.getDefaultRepository().getSystemSession(getWorkspace());
}
}