/** * 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; } }