/* * $Id: UserCases.java,v 1.55 2009/06/30 09:35:57 valdas Exp $ * Created on Sep 25, 2005 * * Copyright (C) 2005 Idega Software hf. All Rights Reserved. * * This software is the proprietary information of Idega hf. * Use is subject to license terms. */ package com.idega.block.process.presentation; import java.io.IOException; import java.rmi.RemoteException; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; import javax.ejb.FinderException; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import com.idega.block.process.business.CaseBusiness; import com.idega.block.process.business.CaseCodeManager; import com.idega.block.process.business.CasesRetrievalManager; import com.idega.block.process.data.Case; import com.idega.block.process.presentation.beans.CaseManagerState; import com.idega.block.process.presentation.beans.GeneralCaseManagerViewBuilder; import com.idega.business.IBORuntimeException; import com.idega.core.builder.data.ICPage; import com.idega.event.IWPageEventListener; import com.idega.idegaweb.IWException; import com.idega.presentation.IWContext; import com.idega.presentation.Layer; import com.idega.presentation.text.Text; import com.idega.webface.WFUtil; /** * Last modified: $Date: 2009/06/30 09:35:57 $ by $Author: valdas $ * * @author <a href="mailto:laddi@idega.com">laddi</a> * @version $Revision: 1.55 $ */ public class UserCases extends CaseBlock implements IWPageEventListener { private static final String PARAMETER_UC_CASE_PK = "uc_case_pk"; public static final String PARAMETER_CASE_PK = "prm_case_pk"; public static final String PARAMETER_ACTION = "cp_prm_action"; public static final int ACTION_VIEW = 1; public static final int ACTION_CASE_MANAGER_VIEW = 8; private static final String caseManagerFacet = "caseManager"; public static final String pageType = "cases"; private Set<String> hiddenCaseCodes; public UserCases() { setHideEmptySection(Boolean.TRUE); } private Map<Object, Object> pageMap; @SuppressWarnings("unused") private int iMaxNumberOfEntries = -1; @SuppressWarnings("unused") private int iNumberOfEntriesShown = 20; @Override protected void present(IWContext iwc) throws Exception { } protected String getHeading() { return getResourceBundle().getLocalizedString("user_cases", "User cases"); } protected ICPage getPage(String caseCode, String caseStatus) { if (this.pageMap != null) { Object object = this.pageMap.get(caseCode); if (object instanceof ICPage) return (ICPage) object; if (object instanceof Map) { Map<?, ?> statusMap = (Map<?, ?>) object; return (ICPage) statusMap.get(caseStatus); } } return null; } public void setHideCaseCode(String caseCode) { getHiddenCaseCodes().add(caseCode); } private Set<String> getHiddenCaseCodes() { if (hiddenCaseCodes == null) hiddenCaseCodes = new HashSet<String>(); return hiddenCaseCodes; } public void setPage(String caseCode, String caseStatus, ICPage page) { if (this.pageMap == null) { this.pageMap = new HashMap<Object, Object>(); } @SuppressWarnings("unchecked") Map<Object, Object> statusMap = (Map<Object, Object>) this.pageMap.get(caseCode); if (statusMap == null) { statusMap = new HashMap<Object, Object>(); } statusMap.put(caseStatus, page); this.pageMap.put(caseCode, statusMap); } public void setPage(String caseCode, ICPage page) { if (this.pageMap == null) { this.pageMap = new HashMap<Object, Object>(); } this.pageMap.put(caseCode, page); } @Override public boolean actionPerformed(IWContext iwc) throws IWException { if (iwc.isParameterSet(PARAMETER_UC_CASE_PK)) { try { Case userCase = getCaseBusiness(iwc).getCase(iwc.getParameter(PARAMETER_UC_CASE_PK)); CaseBusiness caseBusiness = CaseCodeManager.getInstance().getCaseBusinessOrDefault(userCase.getCaseCode(), iwc); caseBusiness.deleteCase(userCase, iwc.getCurrentUser()); return true; } catch (FinderException fe) { fe.printStackTrace(); } catch (RemoteException re) { throw new IBORuntimeException(re); } } return false; } public void setMaximumNumberOfEntries(int maxNumberOfEntries) { this.iMaxNumberOfEntries = maxNumberOfEntries; } public void setMaximumNumberOfLetters(int maxNumberOfLetters) { //this.iMaxNumberOfLetters = maxNumberOfLetters; } public void setMaximumHandlerLength(int maxNumberOfHandlerLetters) { //this.iMaxNumberOfHandlerLetters = maxNumberOfHandlerLetters; } public void setNumberOfEntriesShownPerPage(int numberOfEntriesShown) { this.iNumberOfEntriesShown = numberOfEntriesShown; } @Override public void encodeBegin(FacesContext fc) throws IOException { super.encodeBegin(fc); IWContext iwc = IWContext.getIWContext(fc); if (!iwc.isLoggedOn()) { add(new Text("No user logged on...")); return; } try { display(iwc); } catch (IOException e) { throw e; } catch (Exception e) { Logger.getLogger(getClassName()).log(Level.SEVERE, "Exception while displaying CasesProcessor", e); } } @Override public void encodeChildren(FacesContext context) throws IOException { super.encodeChildren(context); CaseManagerState caseHandlerState = WFUtil.getBeanInstance(CaseManagerState.beanIdentifier); if(caseHandlerState.getShowCaseHandler()) { UIComponent facet = getFacet(caseManagerFacet); renderChild(context, facet); } } protected void display(IWContext iwc) throws Exception { Integer action = null; if (iwc.isParameterSet(UserCases.PARAMETER_ACTION)) { try { action = Integer.parseInt(iwc.getParameter(UserCases.PARAMETER_ACTION)); } catch(NumberFormatException e) { e.printStackTrace(); } } if (action == null) { showList(iwc); return; } switch (action) { case ACTION_CASE_MANAGER_VIEW: showProcessorForBpm(iwc); break; default: showList(iwc); break; } } private void showProcessorForBpm(IWContext iwc) throws NullPointerException { GeneralCaseManagerViewBuilder processorView = WFUtil.getBeanInstance(GeneralCaseManagerViewBuilder.SPRING_BEAN_IDENTIFIER); UIComponent view = null; try { view = processorView.getCaseManagerView(iwc, CasesRetrievalManager.CASE_LIST_TYPE_USER); } catch (RemoteException e) { e.printStackTrace(); } if (view == null) { return; } add(view); } private void showList(IWContext iwc) throws RemoteException { Layer layer = new Layer(Layer.DIV); layer.setStyleClass("caseElement"); layer.setID("userCases"); UICasesList list = getCasesList(iwc, layer.getId()); layer.add(list); add(layer); } @Override public boolean showCheckBox() { return false; } @Override public String getCasesProcessorType() { return CasesRetrievalManager.CASE_LIST_TYPE_USER; } @Override public boolean showCheckBoxes() { return showCheckBox(); } @Override public Map<Object, Object> getUserCasesPageMap() { return pageMap; } }