package is.idega.idegaweb.egov.bpm.cases.presentation;
import is.idega.idegaweb.egov.bpm.IWBundleStarter;
import is.idega.idegaweb.egov.bpm.business.BPMCommentsPersistenceManager;
import is.idega.idegaweb.egov.bpm.cases.CasesBPMProcessView;
import is.idega.idegaweb.egov.bpm.cases.presentation.beans.CasesBPMAssetsState;
import is.idega.idegaweb.egov.bpm.cases.presentation.beans.CasesEngineImp;
import is.idega.idegaweb.egov.cases.business.CasesBusiness;
import is.idega.idegaweb.egov.cases.util.CasesConstants;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import org.apache.myfaces.custom.htmlTag.HtmlTag;
import org.springframework.beans.factory.annotation.Autowired;
import com.idega.block.article.business.CommentsPersistenceManager;
import com.idega.block.article.component.CommentsViewer;
import com.idega.block.process.business.CasesRetrievalManager;
import com.idega.block.process.presentation.beans.CaseManagerState;
import com.idega.block.web2.business.JQuery;
import com.idega.block.web2.business.Web2Business;
import com.idega.bpm.pdf.servlet.BPMTaskPDFPrinter;
import com.idega.bpm.pdf.servlet.CaseLogsToPDFWriter;
import com.idega.bpm.pdf.servlet.XFormToPDFWriter;
import com.idega.business.IBOLookup;
import com.idega.business.IBOLookupException;
import com.idega.business.IBORuntimeException;
import com.idega.facelets.ui.FaceletComponent;
import com.idega.idegaweb.IWApplicationContext;
import com.idega.idegaweb.IWBundle;
import com.idega.idegaweb.IWResourceBundle;
import com.idega.idegaweb.egov.bpm.data.dao.CasesBPMDAO;
import com.idega.jbpm.artifacts.presentation.AttachmentWriter;
import com.idega.jbpm.data.ProcessManagerBind;
import com.idega.presentation.IWBaseComponent;
import com.idega.presentation.IWContext;
import com.idega.presentation.text.DownloadLink;
import com.idega.util.CoreConstants;
import com.idega.util.CoreUtil;
import com.idega.util.PresentationUtil;
import com.idega.util.StringUtil;
import com.idega.util.expression.ELUtil;
import com.idega.webface.WFUtil;
/**
*
* @author <a href="civilis@idega.com">Vytautas Čivilis</a>
* @version $Revision: 1.56 $
*
* Last modified: $Date: 2009/07/14 16:26:58 $ by $Author: valdas $
*
*/
public class UICasesBPMAssets extends IWBaseComponent {
public static final String COMPONENT_TYPE = "com.idega.UICasesBPMAssets";
private static final String assetsFacet = "assets", assetViewFacet = "assetView";
private boolean fullView = false, inCasesComponent = false,
usePdfDownloadColumn = true, allowPDFSigning = true,
hideEmptySection = true, showAttachmentStatistics,
showOnlyCreatorInContacts, showLogExportButton, showComments = true,
showContacts = true, nameFromExternalEntity = false, showUserProfilePicture = Boolean.TRUE,
showUserCompany = false, showLastLoginDate = false;;
private String commentsPersistenceManagerIdentifier, specialBackPage;
private Long processInstanceId;
private Integer caseId;
@Autowired
private JQuery jQuery;
@Autowired
private Web2Business web2;
@Override
protected void initializeComponent(FacesContext context) {
super.initializeComponent(context);
String caseID = context.getExternalContext().getRequestParameterMap().get(ProcessManagerBind.caseIdParam);
if (caseID != null && caseID.length() > 0) {
setCaseId(new Integer(caseID));
}
ELUtil.getInstance().autowire(this);
HtmlTag div = (HtmlTag)context.getApplication().createComponent(HtmlTag.COMPONENT_TYPE);
String clientId = null;
if (CoreUtil.isSingleComponentRenderingProcess(context)) {
Random numberGenerator = new Random();
clientId = new StringBuilder(CoreConstants.UNDER).append(numberGenerator.nextInt(Integer.MAX_VALUE)).toString();
} else
clientId = context.getViewRoot().createUniqueId();
div.setId(clientId);
div.setStyleClass(clientId);
div.setValue(divTag);
HtmlTag linksContainer = (HtmlTag)context.getApplication().createComponent(HtmlTag.COMPONENT_TYPE);
linksContainer.setValue(divTag);
linksContainer.setStyleClass("hiddenLinksForCasesContainerStyle");
div.getChildren().add(linksContainer);
DownloadLink attachmentLink = new DownloadLink();
attachmentLink.setStyleClass(CasesEngineImp.FILE_DOWNLOAD_LINK_STYLE_CLASS);
attachmentLink.setMediaWriterClass(AttachmentWriter.class);
linksContainer.getChildren().add(attachmentLink);
DownloadLink pdfLink = new DownloadLink();
pdfLink.setStyleClass(CasesEngineImp.PDF_GENERATOR_AND_DOWNLOAD_LINK_STYLE_CLASS);
pdfLink.setMediaWriterClass(XFormToPDFWriter.class);
linksContainer.getChildren().add(pdfLink);
DownloadLink casePDFLink = new DownloadLink();
casePDFLink.setStyleClass(CasesEngineImp.CASE_LOGS_PDF_DOWNLOAD_LINK_STYLE_CLASS);
casePDFLink.setMediaWriterClass(CaseLogsToPDFWriter.class);
linksContainer.getChildren().add(casePDFLink);
DownloadLink taskInPdf = new DownloadLink();
taskInPdf.setStyleClass(CasesEngineImp.DOWNLOAD_TASK_IN_PDF_LINK_STYLE_CLASS);
taskInPdf.setMediaWriterClass(BPMTaskPDFPrinter.class);
linksContainer.getChildren().add(taskInPdf);
IWBundle bundle = getBundle(context, IWBundleStarter.IW_BUNDLE_IDENTIFIER);
FaceletComponent facelet = (FaceletComponent)context.getApplication().createComponent(FaceletComponent.COMPONENT_TYPE);
facelet.setFaceletURI(bundle.getFaceletURI("UICasesListAsset.xhtml"));
div.getChildren().add(facelet);
div.setValueExpression(renderedAtt, WFUtil.createValueExpression(context.getELContext(), "#{casesBPMAssetsState.assetsRendered}",
Boolean.class));
getFacets().put(assetsFacet, div);
CasesBPMAssetsState stateBean = ELUtil.getInstance().getBean(CasesBPMAssetsState.beanIdentifier);
stateBean.setCaseId(getCaseId());
IWContext iwc = IWContext.getIWContext(context);
if (isShowComments()) {
String commentsManagerIdentifier = StringUtil.isEmpty(commentsPersistenceManagerIdentifier) ?
BPMCommentsPersistenceManager.SPRING_BEAN_IDENTIFIER : commentsPersistenceManagerIdentifier;
if (iwc.isParameterSet(CasesRetrievalManager.COMMENTS_PERSISTENCE_MANAGER_IDENTIFIER)) {
commentsManagerIdentifier = iwc.getParameter(CasesRetrievalManager.COMMENTS_PERSISTENCE_MANAGER_IDENTIFIER);
}
CommentsPersistenceManager commentsManager = ELUtil.getInstance().getBean(commentsManagerIdentifier);
if (commentsManager.hasRightsToViewComments(stateBean.getProcessInstanceId())) {
CommentsViewer comments = new CommentsViewer();
comments.setShowViewController(false);
comments.setSpringBeanIdentifier(commentsManagerIdentifier);
comments.setIdentifier(String.valueOf(stateBean.getProcessInstanceId()));
comments.setNewestEntriesOnTop(true);
comments.setShowCommentsList(stateBean.isAutoShowComments() ||
(iwc.isParameterSet(CommentsViewer.AUTO_SHOW_COMMENTS) && iwc.getParameter(CommentsViewer.AUTO_SHOW_COMMENTS)
.equals(Boolean.TRUE.toString())));
comments.setAddLoginbyUUIDOnRSSFeedLink(true);
comments.setStyleClass("commentsViewerForTaskViewerInCasesList");
div.getChildren().add(comments);
}
}
if (iwc.isParameterSet(CasesBPMAssetsState.CASES_ASSETS_SPECIAL_BACK_PAGE_PARAMETER)) {
stateBean.setSpecialBackPage(iwc.getParameter(CasesBPMAssetsState.CASES_ASSETS_SPECIAL_BACK_PAGE_PARAMETER));
} else if (!StringUtil.isEmpty(getSpecialBackPage()))
stateBean.setSpecialBackPage(getSpecialBackPage());
div = (HtmlTag)context.getApplication().createComponent(HtmlTag.COMPONENT_TYPE);
div.setValue(divTag);
facelet = (FaceletComponent)context.getApplication().createComponent(FaceletComponent.COMPONENT_TYPE);
facelet.setFaceletURI(bundle.getFaceletURI("UICasesBPMAssetView.xhtml"));
div.getChildren().add(facelet);
div.setValueExpression(renderedAtt, WFUtil.createValueExpression(context.getELContext(), "#{casesBPMAssetsState.assetViewRendered}",
Boolean.class));
getFacets().put(assetViewFacet, div);
if (!CoreUtil.isSingleComponentRenderingProcess(iwc)) {
IWResourceBundle iwrb = iwc.getIWMainApplication().getBundle(IWBundleStarter.IW_BUNDLE_IDENTIFIER).getResourceBundle(iwc);
PresentationUtil.addJavaScriptActionToBody(iwc, "jQuery(document).ready(function() {showLoadingMessage('" +
iwrb.getLocalizedString("loading", "Loading...") + "');});");
}
}
public boolean isShowComments() {
return showComments;
}
public void setShowComments(boolean showComments) {
this.showComments = showComments;
}
public boolean isShowContacts() {
return showContacts;
}
public void setShowContacts(boolean showContacts) {
this.showContacts = showContacts;
}
@Override
public boolean getRendersChildren() {
return true;
}
@Override
public void encodeChildren(FacesContext context) throws IOException {
super.encodeChildren(context);
UIComponent assets = getFacet(assetsFacet);
UIComponent assetView = getFacet(assetViewFacet);
if (assets.isRendered()) {
// TODO: add assets grid client resources
addClientResources(IWContext.getIWContext(context), assets);
renderChild(context, assets);
} else if (assetView.isRendered()) {
// TODO: add asset client resources
renderChild(context, assetView);
}
}
public boolean isFullView() {
return fullView;
}
public void setFullView(boolean fullView) {
CaseManagerState caseHandlerState = WFUtil.getBeanInstance(CaseManagerState.beanIdentifier);
caseHandlerState.setFullView(fullView);
this.fullView = fullView;
}
public boolean isInCasesComponent() {
return inCasesComponent;
}
public void setInCasesComponent(boolean inCasesComponent) {
this.inCasesComponent = inCasesComponent;
}
protected CasesBusiness getCasesBusiness(IWApplicationContext iwac) {
try {
return IBOLookup.getServiceInstance(iwac, CasesBusiness.class);
}
catch (IBOLookupException ile) {
throw new IBORuntimeException(ile);
}
}
protected Long resolveProcessInstanceId(FacesContext fctx) {
String piIdParam = fctx.getExternalContext().getRequestParameterMap().get(ProcessManagerBind.processInstanceIdParam);
Long piId;
if (piIdParam != null && !CoreConstants.EMPTY.equals(piIdParam)) {
piId = new Long(piIdParam);
} else
piId = null;
return piId;
}
public Long getProcessInstanceId(FacesContext fctx) {
if (processInstanceId == null)
processInstanceId = resolveProcessInstanceId(fctx);
return processInstanceId;
}
public Long getProcessInstanceId() {
return processInstanceId;
}
public void setProcessInstanceId(Long processInstanceId) {
this.processInstanceId = processInstanceId;
}
public CasesBPMProcessView getCasesBPMProcessView() {
return WFUtil.getBeanInstance(CasesBPMProcessView.BEAN_IDENTIFIER);
}
public Integer getCaseId() {
return caseId;
}
public void setCaseId(Integer caseId) {
if (caseId != null) {
CasesBPMAssetsState stateBean = getBeanInstance(CasesBPMAssetsState.beanIdentifier);
stateBean.setCaseId(caseId);
}
this.caseId = caseId;
}
private Web2Business getWeb2Business() {
if (web2 == null)
ELUtil.getInstance().autowire(this);
return web2;
}
private JQuery getJQuery() {
if (jQuery == null)
ELUtil.getInstance().autowire(this);
return jQuery;
}
@Autowired
private CasesBPMDAO casesDAO;
private CasesBPMDAO getCasesBPMDAO() {
if (casesDAO == null)
ELUtil.getInstance().autowire(this);
return casesDAO;
}
private void addClientResources(IWContext iwc, UIComponent container) {
IWBundle bundle = getBundle((FacesContext)iwc, IWBundleStarter.IW_BUNDLE_IDENTIFIER);
Web2Business web2 = getWeb2Business();
JQuery jQuery = getJQuery();
// CSS sources
List<String> cssFiles = new ArrayList<String>();
cssFiles.add(web2.getBundleUriToLinkLinksWithFilesStyleFile());
cssFiles.add(web2.getBundleURIToJQGridStyles());
cssFiles.add(web2.getBundleUriToHumanizedMessagesStyleSheet());
cssFiles.add(iwc.getIWMainApplication().getBundle(CasesConstants.IW_BUNDLE_IDENTIFIER).getVirtualPathWithFileNameString("style/case.css"));
cssFiles.add(web2.getBundleURIToFancyBoxStyleFile());
PresentationUtil.addStyleSheetsToHeader(iwc, cssFiles);
boolean isSingle = CoreUtil.isSingleComponentRenderingProcess(iwc);
// JS sources
List<String> scripts = new ArrayList<String>();
if (!isSingle) {
scripts.add(jQuery.getBundleURIToJQueryLib());
}
scripts.addAll(web2.getBundleURIsToFancyBoxScriptFiles());
scripts.add(web2.getBundleUriToLinkLinksWithFilesScriptFile());
scripts.add(web2.getBundleURIToJQGrid());
scripts.add(CoreConstants.DWR_ENGINE_SCRIPT);
scripts.add(CoreConstants.DWR_UTIL_SCRIPT);
scripts.add("/dwr/interface/BPMProcessAssets.js");
if (isAllowPDFSigning()) {
scripts.add("/dwr/interface/PDFGeneratorFromProcess.js");
}
scripts.add(web2.getBundleUriToHumanizedMessagesScript());
scripts.add(bundle.getVirtualPathWithFileNameString("javascript/CasesBPMAssets.js"));
PresentationUtil.addJavaScriptSourcesLinesToHeader(iwc, scripts);
// JS actions
IWResourceBundle iwrb = bundle.getResourceBundle(iwc);
String gridLocalization = new StringBuilder(
"if(CasesBPMAssets.Loc == null || !CasesBPMAssets.Loc.inited) { \nif(CasesBPMAssets.Loc == null) { CasesBPMAssets.Loc = { inited: false }; }\n")
.append("CasesBPMAssets.Loc.CASE_GRID_STRING_CONTACT_NAME = '") .append(iwrb.getLocalizedString("cases_bpm.human_name", "Name")).append("';\n")
.append("CasesBPMAssets.Loc.CASE_GRID_STRING_TASK_NAME = '") .append(iwrb.getLocalizedString("cases_bpm.task_name", "Task name")).append("';\n")
.append("CasesBPMAssets.Loc.CASE_GRID_STRING_FORM_NAME = '") .append(iwrb.getLocalizedString("cases_bpm.document_name", "Document name")).append("';\n")
.append("CasesBPMAssets.Loc.CASE_GRID_STRING_SENDER = '") .append(iwrb.getLocalizedString("sender", "Sender")).append("';\n")
.append("CasesBPMAssets.Loc.CASE_GRID_STRING_DATE = '") .append(iwrb.getLocalizedString("date", "Date")).append("';\n")
.append("CasesBPMAssets.Loc.CASE_GRID_STRING_TAKEN_BY = '") .append(iwrb.getLocalizedString("cases_bpm.assigned_to", "Taken by")).append("';\n")
.append("CasesBPMAssets.Loc.CASE_GRID_STRING_EMAIL_ADDRESS = '") .append(iwrb.getLocalizedString("email_address", "E-mail address")).append("';\n")
.append("CasesBPMAssets.Loc.CASE_GRID_STRING_PHONE_NUMBER = '") .append(iwrb.getLocalizedString("phone_number", "Phone number")).append("';\n")
.append("CasesBPMAssets.Loc.CASE_GRID_STRING_ADDRESS = '") .append(iwrb.getLocalizedString("address", "Address")).append("';\n")
.append("CasesBPMAssets.Loc.CASE_GRID_STRING_SUBJECT = '") .append(iwrb.getLocalizedString("cases_bpm.subject", "Subject")).append("';\n")
.append("CasesBPMAssets.Loc.CASE_GRID_STRING_FILE_DESCRIPTION = '") .append(iwrb.getLocalizedString("cases_bpm.file_description", "Descriptive name")).append("';\n")
.append("CasesBPMAssets.Loc.CASE_GRID_STRING_FILE_NAME = '") .append(iwrb.getLocalizedString("cases_bpm.file_name", "File name")).append("';\n")
.append("CasesBPMAssets.Loc.CASE_GRID_STRING_CHANGE_ACCESS_RIGHTS = '") .append(iwrb.getLocalizedString("cases_bpm.change_access_rights", "Change access rights")).append("';\n")
.append("CasesBPMAssets.Loc.CASE_GRID_STRING_DOWNLOAD_DOCUMENT_AS_PDF = '") .append(iwrb.getLocalizedString("cases_bpm.get_document_as_pdf", "Download document")).append("';\n")
.append("CasesBPMAssets.Loc.CASE_GRID_STRING_FILE_SIZE = '") .append(iwrb.getLocalizedString("cases_bpm.file_size", "File size")).append("';\n")
.append("CasesBPMAssets.Loc.CASE_GRID_STRING_SUBMITTED_BY = '") .append(iwrb.getLocalizedString("cases_bpm.submitted_by", "Submitted by")).append("';\n")
.append("CasesBPMAssets.Loc.CASE_GRID_STRING_GENERATING_PDF = '") .append(iwrb.getLocalizedString("cases_bpm.generating_pdf", "Downloading PDF")).append("';\n")
.append("CasesBPMAssets.Loc.CASE_GRID_STRING_LOADING = '") .append(iwrb.getLocalizedString("cases_bpm.loading", "Loading...")).append("';\n")
.append("CasesBPMAssets.Loc.CASE_GRID_STRING_ARE_YOU_SURE = '") .append(iwrb.getLocalizedString("cases_bpm.are_you_sure", "Are you sure?")).append("';\n")
.append("CasesBPMAssets.Loc.CASE_GRID_STRING_COMPANY = '") .append(iwrb.getLocalizedString("cases_bpm.company", "Company")).append("';\n")
.append("CasesBPMAssets.Loc.inited = true; }\n")
.toString();
String clientId = container.getClientId(iwc);
if (clientId == null) {
container.setId(iwc.getViewRoot().createUniqueId());
clientId = container.getClientId(iwc);
}
CasesBPMAssetsState stateBean = getBeanInstance(CasesBPMAssetsState.beanIdentifier);
Long processInstanceId = stateBean.getProcessInstanceId();
Integer caseId = stateBean.getCaseId();
if (caseId == null && processInstanceId != null) {
caseId = getCasesBPMDAO().getCaseProcInstBindByProcessInstanceId(processInstanceId).getCaseId();
}
String specialBackPage = getSpecialBackPage();
StringBuffer mainAction = new StringBuffer(gridLocalization).append("\n CasesBPMAssets.initGrid(jQuery('div.").append(clientId).append("')[0], ")
.append(processInstanceId == null ? String.valueOf(-1) : processInstanceId.toString()).append(", ")
.append(caseId == null ? String.valueOf(-1) : caseId.toString()).append(", ")
.append(isUsePdfDownloadColumn()).append(", ").append(isAllowPDFSigning()).append(", ").append(isHideEmptySection()).append(", ")
.append(isShowAttachmentStatistics()).append(", ").append(isShowOnlyCreatorInContacts()).append(", ").append(isShowLogExportButton())
.append(", ").append(isShowComments()).append(", ").append(isShowContacts()).append(", ");
if (StringUtil.isEmpty(specialBackPage))
mainAction.append("null");
else
mainAction.append("'").append(specialBackPage).append("'");
mainAction.append(CoreConstants.COMMA);
mainAction.append(isNameFromExternalEntity()).append(CoreConstants.COMMA)
.append(isShowUserProfilePicture()).append(", ").append(isShowUserCompany())
.append(", ").append(isShowLastLoginDate()).append(");").toString();
if (!isSingle)
mainAction = new StringBuffer("jQuery(document).ready(function() {\n").append(mainAction.toString()).append("\n});");
PresentationUtil.addJavaScriptActionToBody(iwc, mainAction.toString());
}
public boolean isUsePdfDownloadColumn() {
return usePdfDownloadColumn;
}
public void setUsePdfDownloadColumn(boolean usePdfDownloadColumn) {
this.usePdfDownloadColumn = usePdfDownloadColumn;
}
public boolean isAllowPDFSigning() {
return allowPDFSigning;
}
public void setAllowPDFSigning(boolean allowPDFSigning) {
this.allowPDFSigning = allowPDFSigning;
}
public boolean isHideEmptySection() {
return hideEmptySection;
}
public void setHideEmptySection(boolean hideEmptySection) {
this.hideEmptySection = hideEmptySection;
}
public String getCommentsPersistenceManagerIdentifier() {
return commentsPersistenceManagerIdentifier;
}
public void setCommentsPersistenceManagerIdentifier(String commentsPersistenceManagerIdentifier) {
this.commentsPersistenceManagerIdentifier = commentsPersistenceManagerIdentifier;
}
public boolean isShowAttachmentStatistics() {
return showAttachmentStatistics;
}
public void setShowAttachmentStatistics(boolean showAttachmentStatistics) {
this.showAttachmentStatistics = showAttachmentStatistics;
}
public boolean isShowOnlyCreatorInContacts() {
return showOnlyCreatorInContacts;
}
public void setShowOnlyCreatorInContacts(boolean showOnlyCreatorInContacts) {
this.showOnlyCreatorInContacts = showOnlyCreatorInContacts;
}
public boolean isShowLogExportButton() {
return showLogExportButton;
}
public void setShowLogExportButton(boolean showLogExportButton) {
this.showLogExportButton = showLogExportButton;
}
public String getSpecialBackPage() {
return specialBackPage;
}
public void setSpecialBackPage(String specialBackPage) {
this.specialBackPage = specialBackPage;
}
public boolean isNameFromExternalEntity() {
return nameFromExternalEntity;
}
public void setNameFromExternalEntity(boolean nameFromExternalEntity) {
this.nameFromExternalEntity = nameFromExternalEntity;
}
public boolean isShowUserProfilePicture() {
return showUserProfilePicture;
}
public void setShowUserProfilePicture(boolean showUserProfilePicture) {
this.showUserProfilePicture = showUserProfilePicture;
}
public boolean isShowUserCompany() {
return showUserCompany;
}
public void setShowUserCompany(boolean showUserCompany) {
this.showUserCompany = showUserCompany;
}
public boolean isShowLastLoginDate() {
return showLastLoginDate;
}
public void setShowLastLoginDate(boolean showLastLoginDate) {
this.showLastLoginDate = showLastLoginDate;
}
}