/**
* TNTConcept Easy Enterprise Management by Autentia Real Bussiness Solution S.L.
* Copyright (C) 2007 Autentia Real Bussiness Solution S.L.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License.
*
* 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 com.autentia.tnt.bean.document;
import java.io.File;
import java.io.IOException;
import java.util.*;
import javax.faces.component.UIComponent;
import javax.faces.component.UIData;
import javax.faces.component.html.HtmlDataTable;
import javax.faces.model.SelectItem;
import org.apache.commons.logging.*;
import org.apache.myfaces.custom.fileupload.UploadedFile;
import com.autentia.tnt.bean.*;
import com.autentia.tnt.businessobject.*;
import com.autentia.tnt.dao.*;
import com.autentia.tnt.dao.search.*;
import com.autentia.tnt.manager.document.DocumentCategoryManager;
import com.autentia.tnt.manager.document.DocumentManager;
import com.autentia.tnt.manager.document.DocumentVersionManager;
import com.autentia.tnt.manager.security.AuthenticationManager;
import com.autentia.tnt.manager.security.Permission;
import com.autentia.tnt.upload.*;
import com.autentia.tnt.util.*;
import org.acegisecurity.acls.domain.BasePermission;
/**
* UI bean for BulletinBoard objects.
*
* @author stajanov code generator
*/
public class DocumentBean extends BaseBean {
/** Serial version field */
private static final long serialVersionUID = -1L;
/* document - generated by stajanov (do not edit/delete) */
/** Logger */
private static final Log log = LogFactory.getLog(DocumentBean.class);
/** Active search object */
private DocumentSearch search = new DocumentSearch();
/** Manager */
private static DocumentManager manager = DocumentManager.getDefault();
/** Upload service */
private static final Uploader uploader = UploaderFactory
.getInstance("document");
/** Active Document object */
private Document document;
/** Default sort column */
private String sortColumn = "name";
/** Default sort order */
private boolean sortAscending = false;
/** Quick search letter for ABC pager control */
private Character letter;
/**
* List documents. Order depends on Faces parameter sort.
*
* @return the list of all documents sorted by requested criterion
*/
public List<Document> getAll() {
return manager.getAllEntities(search, new SortCriteria(
sortColumn, sortAscending));
}
// Getters to list possible values of related entities
/**
* Get the list of all categories selected
*
* @return the list of all categories selected
*/
public List<SelectItem> getCategoriesSelected() {
ArrayList<SelectItem> ret = new ArrayList<SelectItem>();
List<DocumentCategory> refs = this.getCategories();
for (DocumentCategory ref : refs) {
ret.add(new SelectItem(ref, ref.getName()));
}
return ret;
}
/**
* Get the list of all categoriess
*
* @return the list of all categoriess
*/
public List<SelectItem> getCategoriess() {
List<DocumentCategory> refs = DocumentCategoryManager.getDefault()
.getAllEntities(null, new SortCriteria("name"));
ArrayList<SelectItem> ret = new ArrayList<SelectItem>();
for (DocumentCategory ref : refs) {
ret.add(new SelectItem(ref, ref.getName()));
}
return ret;
}
/**
* Get the list of all versionss
*
* @return the list of all versionss
*/
public List<SelectItem> getVersionss() {
List<DocumentVersion> refs = DocumentVersionManager.getDefault()
.getAllEntities(null, new SortCriteria(ROW_ID));
ArrayList<SelectItem> ret = new ArrayList<SelectItem>();
for (DocumentVersion ref : refs) {
ret.add(new SelectItem(ref, ref.getVersion()));
}
return ret;
}
// Getters to list possible values of enum fields
// Methods to create/remove instances of one-to-many entities (slave
// entities)
/**
* Create a new empty instance of the one-to-many field
*
* @return forward to the same page
*/
public String createCategories() {
DocumentCategory item = new DocumentCategory();
if (document.getCategories() == null) {
document.setCategories(new HashSet());
}
document.getCategories().add(item);
return null;
}
/**
* Create a new empty instance of the one-to-many field
*
* @return forward to the same page
*/
public String editCategories() {
DocumentCategory item = new DocumentCategory();
if (document.getCategories() == null) {
document.setCategories(new HashSet());
}
document.getCategories().add(item);
return null;
}
/**
* Delete selected instance of the one-to-many field
*
* @return forward to the same page
*/
public String deleteCategories() {
UIData table = (UIData) FacesUtils
.getComponent("editDocument:categories");
document.getCategories().remove(table.getRowData());
return null;
}
/**
* Create a new empty instance of the one-to-many field
*
* @return forward to the same page
*/
public String createVersions() {
DocumentVersion item = new DocumentVersion();
// Initializations
item.setCreationDate(new java.util.Date());
item.setDocument(document);
if (document.getVersions() == null) {
document.setVersions(new HashSet<DocumentVersion>());
}
document.getVersions().add(item);
return null;
}
/**
* Create a new empty instance of the one-to-many field
*
* @return forward to the same page
*/
public String editVersions() {
DocumentVersion item = new DocumentVersion();
// Initializations
item.setCreationDate(new java.util.Date());
item.setDocument(document);
if (document.getVersions() == null) {
document.setVersions(new HashSet<DocumentVersion>());
}
if (document.getVersions() == null) {
document.setVersions(new HashSet());
}
document.getVersions().add(item);
return null;
}
/**
* Delete selected instance of the one-to-many field
*
* @return forward to the same page
*/
public String deleteVersions() {
UIData table = (UIData) FacesUtils
.getComponent("editDocument:versions");
document.getVersions().remove(table.getRowData());
return null;
}
/**
* Whether or not create button is available for user
*
* @return true if user can create objects of type Document
*/
public boolean isCreateAvailable() {
return SpringUtils.isRolePermissionGranted(Permission
.Entity_Create(Document.class));
}
/**
* Whether or not edit button is available for user
*
* @return true if user can edit current object
*/
public boolean isEditAvailable() {
return SpringUtils.isAclPermissionGranted(document,
BasePermission.WRITE);
}
/**
* Whether or not delete button is available for user
*
* @return true if user can delete current object
*/
public boolean isDeleteAvailable() {
return (document.getId() != null)
&& SpringUtils.isAclPermissionGranted(document,
BasePermission.DELETE);
}
/**
* Reset search criteria
*
* @return forward to LIST page
*/
public String reset() {
final Integer ownerID = search.getOwnerId();
search.reset();
search.setOwnerId(ownerID);
return list();
}
/**
* Go to create page
*
* @return forward to CREATE page
*/
public String create() {
document = new Document();
// Takes categories from current filter settings
if (this.getSearchCategories() != null
&& !this.getSearchCategories().isEmpty()) {
Set<DocumentCategory> categories = new HashSet<DocumentCategory>();
categories.addAll(this.getSearchCategories());
document.setCategories(categories);
}
document.setCreationDate(new Date());
return NavigationResults.CREATE;
}
/**
* Go to detail page
*
* @return forward to DETAIL page
*/
public String detail() {
Integer id = Integer.parseInt(FacesUtils.getRequestParameter(ROW_ID));
document = manager.getEntityById(id);
return SpringUtils.isAclPermissionGranted(document,
BasePermission.WRITE) ? NavigationResults.EDIT
: NavigationResults.DETAIL;
}
/**
* Save bean and stay on it
*
* @return forward to list page
*/
public String save() {
doBeforeSave();
Map<String, UploadedFile> uploadedFiles = new HashMap<String, UploadedFile>();
if (document.getId() == null) {
manager.insertEntity(document);
} else {
if (this.document.getVersions() != null
&& !this.document.getVersions().isEmpty()) {
for (Iterator iter = this.document.getVersions().iterator(); iter
.hasNext();) {
DocumentVersion version = (DocumentVersion) iter.next();
if (version.getUploadDocument() != null) {
uploadedFiles.put(version.getVersion(),
version.getUploadDocument());
}
}
}
document = manager.updateEntity(document);
}
// Calls an after save action
String result = doAfterSave(NavigationResults.LIST, uploadedFiles);
// Unselect object
// document = null;
return result;
}
/**
* Delete bean and go back to beans list
*
* @return forward to LIST page
*/
public String delete() {
manager.deleteEntity(document);
document = null;
return NavigationResults.LIST;
}
/**
* Go back to beans list
*
* @return forward to LIST page
*/
public String list() {
return NavigationResults.LIST;
}
/**
* Go to search page
*
* @return forward to SEARCH page
*/
public String search() {
return NavigationResults.SEARCH;
}
/**
* Check if we have an active object.
*
* @return true is an object is selected
*/
public boolean isDocumentSelected() {
return document != null;
}
// Getters and setters to manipulate sorting
public boolean isSortAscending() {
return sortAscending;
}
public void setSortAscending(boolean sortAscending) {
this.sortAscending = sortAscending;
}
public String getSortColumn() {
return sortColumn;
}
public void setSortColumn(String sortColumn) {
this.sortColumn = sortColumn;
}
// Getters and setters to handle search
public DocumentSearch getSearch() {
return search;
}
public Date getSearchStartCreationDate() {
return search.getStartCreationDate();
}
public void setSearchStartCreationDate(Date val) {
if (val != null) {
search.setStartCreationDate(val);
} else {
search.unsetStartCreationDate();
}
}
public boolean isSearchStartCreationDateValid() {
return search.isStartCreationDateSet();
}
public void setSearchStartCreationDateValid(boolean val) {
if (val) {
search.setStartCreationDate(search.getStartCreationDate());
} else {
search.unsetStartCreationDate();
}
}
public Date getSearchEndCreationDate() {
return search.getEndCreationDate();
}
public void setSearchEndCreationDate(Date val) {
if (val != null) {
search.setEndCreationDate(val);
} else {
search.unsetEndCreationDate();
}
}
public boolean isSearchEndCreationDateValid() {
return search.isEndCreationDateSet();
}
public void setSearchEndCreationDateValid(boolean val) {
if (val) {
search.setEndCreationDate(search.getEndCreationDate());
} else {
search.unsetEndCreationDate();
}
}
public String getSearchName() {
return search.getName();
}
public void setSearchName(String val) {
if (search.isNameSet()) {
search.setName(val);
}
}
public boolean isSearchNameValid() {
return search.isNameSet();
}
public void setSearchNameValid(boolean val) {
if (val) {
search.setName(search.getName());
} else {
search.unsetName();
}
}
public String getSearchDescription() {
return search.getDescription();
}
public void setSearchDescription(String val) {
if (search.isDescriptionSet()) {
search.setDescription(val);
}
}
public boolean isSearchDescriptionValid() {
return search.isDescriptionSet();
}
public void setSearchDescriptionValid(boolean val) {
if (val) {
search.setDescription(search.getDescription());
} else {
search.unsetDescription();
}
}
public Integer getSearchOwnerId() {
return search.getOwnerId();
}
public void setSearchOwnerId(Integer val) {
if (search.isOwnerIdSet()) {
search.setOwnerId(val);
}
}
public boolean isSearchOwnerIdValid() {
return search.isOwnerIdSet();
}
public void setSearchOwnerIdValid(boolean val) {
if (val) {
search.setOwnerId(search.getOwnerId());
} else {
search.unsetOwnerId();
}
}
public Integer getSearchDepartmentId() {
return search.getDepartmentId();
}
public void setSearchDepartmentId(Integer val) {
if (search.isDepartmentIdSet()) {
search.setDepartmentId(val);
}
}
public boolean isSearchDepartmentIdValid() {
return search.isDepartmentIdSet();
}
public void setSearchDepartmentIdValid(boolean val) {
if (val) {
search.setDepartmentId(search.getDepartmentId());
} else {
search.unsetDepartmentId();
}
}
public Date getSearchStartInsertDate() {
return search.getStartInsertDate();
}
public void setSearchStartInsertDate(Date val) {
if (val != null) {
search.setStartInsertDate(val);
} else {
search.unsetStartInsertDate();
}
}
public boolean isSearchStartInsertDateValid() {
return search.isStartInsertDateSet();
}
public void setSearchStartInsertDateValid(boolean val) {
if (val) {
search.setStartInsertDate(search.getStartInsertDate());
} else {
search.unsetStartInsertDate();
}
}
public Date getSearchEndInsertDate() {
return search.getEndInsertDate();
}
public void setSearchEndInsertDate(Date val) {
if (val != null) {
search.setEndInsertDate(val);
} else {
search.unsetEndInsertDate();
}
}
public boolean isSearchEndInsertDateValid() {
return search.isEndInsertDateSet();
}
public void setSearchEndInsertDateValid(boolean val) {
if (val) {
search.setEndInsertDate(search.getEndInsertDate());
} else {
search.unsetEndInsertDate();
}
}
public Date getSearchStartUpdateDate() {
return search.getStartUpdateDate();
}
public void setSearchStartUpdateDate(Date val) {
if (val != null) {
search.setStartUpdateDate(val);
} else {
search.unsetStartUpdateDate();
}
}
public boolean isSearchStartUpdateDateValid() {
return search.isStartUpdateDateSet();
}
public void setSearchStartUpdateDateValid(boolean val) {
if (val) {
search.setStartUpdateDate(search.getStartUpdateDate());
} else {
search.unsetStartUpdateDate();
}
}
public Date getSearchEndUpdateDate() {
return search.getEndUpdateDate();
}
public void setSearchEndUpdateDate(Date val) {
if (val != null) {
search.setEndUpdateDate(val);
} else {
search.unsetEndUpdateDate();
}
}
public boolean isSearchEndUpdateDateValid() {
return search.isEndUpdateDateSet();
}
public void setSearchEndUpdateDateValid(boolean val) {
if (val) {
search.setEndUpdateDate(search.getEndUpdateDate());
} else {
search.unsetEndUpdateDate();
}
}
public List<DocumentCategory> getSearchCategories() {
return search.getCategories();
}
public void setSearchCategories(List<DocumentCategory> val) {
if (search.isCategoriesSet()) {
search.setCategories(val);
}
}
public boolean isSearchCategoriesValid() {
return search.isCategoriesSet();
}
public void setSearchCategoriesValid(boolean val) {
if (val) {
search.setCategories(search.getCategories());
} else {
search.unsetCategories();
}
}
public List<DocumentVersion> getSearchVersions() {
return search.getVersions();
}
public void setSearchVersions(List<DocumentVersion> val) {
if (search.isVersionsSet()) {
search.setVersions(val);
}
}
public boolean isSearchVersionsValid() {
return search.isVersionsSet();
}
public void setSearchVersionsValid(boolean val) {
if (val) {
search.setVersions(search.getVersions());
} else {
search.unsetVersions();
}
}
/**
* Handle an ABC pager letter click: filter objects by specified starting
* letter
*/
public void letterClicked() {
if (letter != null) {
UIComponent comp = FacesUtils.getComponent("documents:list");
HtmlDataTable tabla = (HtmlDataTable) comp;
tabla.setFirst(0);
search.setName(letter + "%");
} else {
search.unsetName();
}
}
public Character getLetter() {
return letter;
}
public void setLetter(Character letter) {
this.letter = letter;
}
// Getters and setters to handle uploads
// Getters and setters to manipulate active Document object
public java.lang.Integer getId() {
return document.getId();
}
public Date getCreationDate() {
return document.getCreationDate();
}
public void setCreationDate(Date creationDate) {
document.setCreationDate(creationDate);
}
public String getName() {
return document.getName();
}
public void setName(String name) {
document.setName(name);
}
public String getDescription() {
return document.getDescription();
}
public void setDescription(String description) {
document.setDescription(description);
}
public Integer getOwnerId() {
return document.getOwnerId();
}
public void setOwnerId(Integer ownerId) {
document.setOwnerId(ownerId);
}
public Integer getDepartmentId() {
return document.getDepartmentId();
}
public void setDepartmentId(Integer departmentId) {
document.setDepartmentId(departmentId);
}
public Date getInsertDate() {
return document.getInsertDate();
}
public void setInsertDate(Date insertDate) {
document.setInsertDate(insertDate);
}
public Date getUpdateDate() {
return document.getUpdateDate();
}
public void setUpdateDate(Date updateDate) {
document.setUpdateDate(updateDate);
}
public List<DocumentCategory> getCategories() {
List<DocumentCategory> categories = new ArrayList<DocumentCategory>();
if (document.getCategories() != null
&& !document.getCategories().isEmpty()) {
categories.addAll(document.getCategories());
}
return categories;
}
public void setCategories(List<DocumentCategory> categories) {
Set<DocumentCategory> result = new HashSet<DocumentCategory>();
if (categories != null && !categories.isEmpty()) {
result.addAll(categories);
}
document.setCategories(result);
}
public Set<DocumentVersion> getVersions() {
return document.getVersions();
}
public void setVersions(Set<DocumentVersion> versions) {
document.setVersions(versions);
}
/* document - generated by stajanov (do not edit/delete) */
/**
* Save version files after save the document
*
* @param uploadedFiles
*/
public String doAfterSave(String result,
Map<String, UploadedFile> uploadedFiles) {
if (this.document.getVersions() != null
&& !this.document.getVersions().isEmpty()) {
for (Iterator iter = this.document.getVersions().iterator(); iter
.hasNext();) {
DocumentVersion version = (DocumentVersion) iter.next();
if (version.getUploadDocument() != null
|| uploadedFiles.containsKey(version.getVersion())) {
try {
String documentPath = this.document.getId()
+ File.separator + version.getId();
UploadedFile uploaded = (version.getUploadDocument() == null) ? uploadedFiles
.get(version.getVersion()) : version
.getUploadDocument();
uploader.replace(documentPath,
version.getOldDocumentPath(), uploaded);
version.setDocumentPath(this.document.getId() + "/"
+ version.getId() + "/"
+ FileUtil.getFileName(uploaded.getName()));
// if (document.getId() == null) {
// manager.insertEntity(document);
// } else {
// manager.updateEntity(document);
// }
} catch (IOException e) {
log.error("save - exception uploading field file", e);
FacesUtils.addErrorMessage("file",
"error.fileTransfer", e.getMessage());
}
}
}
}
return result;
}
@Override
public String doBeforeSave() {
String result = super.doBeforeSave();
if (document.getCategories() != null
&& !document.getCategories().isEmpty()) {
for (Iterator iter = document.getCategories().iterator(); iter
.hasNext();) {
DocumentCategory category = (DocumentCategory) iter.next();
category.setDocumentsLastUpdate(new Date());
category.setHasUpdatedDocuments(null);
}
}
if (this.document.getVersions() != null
&& !this.document.getVersions().isEmpty()) {
for (Iterator iter = this.document.getVersions().iterator(); iter
.hasNext();) {
DocumentVersion version = (DocumentVersion) iter.next();
if (version.getUploadDocument() != null) {
version.setDocumentPath("");
}
}
}
return result;
}
}