/* * * Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved. * * This file is part of Entando software. * Entando is a free software; * You can redistribute it and/or modify it * under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; version 2. * * See the file License for the specific language governing permissions * and limitations under the License * * * * Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved. * */ package com.agiletec.plugins.jpcontentworkflow.apsadmin.content; import java.util.ArrayList; import java.util.List; import com.agiletec.aps.system.ApsSystemUtils; import com.agiletec.aps.system.services.user.UserDetails; import com.agiletec.aps.util.SelectItem; import com.agiletec.plugins.jacms.aps.system.services.content.model.Content; import com.agiletec.plugins.jacms.apsadmin.content.ContentActionConstants; import com.agiletec.plugins.jpcontentworkflow.aps.system.services.workflow.IContentWorkflowManager; import com.agiletec.plugins.jpcontentworkflow.aps.system.services.workflow.model.Workflow; import com.agiletec.plugins.jpcontentworkflow.apsadmin.content.helper.IContentWorkFlowActionHelper; import org.slf4j.Logger; /** * @author E.Santoboni */ public class ContentAction extends com.agiletec.plugins.jacms.apsadmin.content.ContentAction implements IContentAction { @Override protected String saveContent(boolean approve) { Logger log = ApsSystemUtils.getLogger(); try { Content currentContent = this.getContent(); if (null != currentContent) { if (!this.getContentActionHelper().isUserAllowed(currentContent, this.getCurrentUser())) { log.info("Utente non abilitato al salvataggio del contenuto " + currentContent.getId()); return USER_NOT_ALLOWED; } currentContent.setLastEditor(this.getCurrentUser().getUsername()); if (approve) { if (!Content.STATUS_READY.equals(currentContent.getStatus()) && !Content.STATUS_PUBLIC.equals(currentContent.getStatus())) { String[] args = { currentContent.getId() , currentContent.getDescr()}; this.addFieldError("status", this.getText("error.content.publish.notReadyStatus", args)); return INPUT; } this.getContentManager().insertOnLineContent(currentContent); } else { this.getContentManager().saveContent(currentContent); } String sessionParamName = ContentActionConstants.SESSION_PARAM_NAME_CURRENT_CONTENT_PREXIX + this.getContentOnSessionMarker(); this.getRequest().getSession().removeAttribute(sessionParamName); log.info("Salvato contenuto " + currentContent.getId() + " - Descrizione: '" + currentContent.getDescr() + "' - Utente: " + this.getCurrentUser().getUsername()); } else { log.error("Tentativo Salvataggio/approvazione contenuto NULLO - Utente: " + this.getCurrentUser().getUsername()); } } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "saveContent"); return FAILURE; } return SUCCESS; } @Override public String previousStep() { Logger log = ApsSystemUtils.getLogger(); try { Content currentContent = this.updateContentOnSession(); if (null != currentContent) { currentContent.setLastEditor(this.getCurrentUser().getUsername()); String previousStep = this.getPreviousStep(); if (previousStep != null) { currentContent.setStatus(previousStep); this.getContentManager().saveContent(currentContent); String sessionParamName = ContentActionConstants.SESSION_PARAM_NAME_CURRENT_CONTENT_PREXIX + this.getContentOnSessionMarker(); this.getRequest().getSession().removeAttribute(sessionParamName); } else { this.addActionError(this.getText("error.content.save.statusNotAllowed")); return INPUT; } } else { log.error("Tentativo Salvataggio/approvazione contenuto NULLO - Utente: " + this.getCurrentUser().getUsername()); } } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "prevStep"); return FAILURE; } return SUCCESS; } @Override public String nextStep() { Logger log = ApsSystemUtils.getLogger(); try { Content currentContent = this.updateContentOnSession(); if (null != currentContent) { currentContent.setLastEditor(this.getCurrentUser().getUsername()); String nextStep = this.getNextStep(); if (nextStep != null) { currentContent.setStatus(nextStep); this.getContentManager().saveContent(currentContent); String sessionParamName = ContentActionConstants.SESSION_PARAM_NAME_CURRENT_CONTENT_PREXIX + this.getContentOnSessionMarker(); this.getRequest().getSession().removeAttribute(sessionParamName); } else { this.addActionError(this.getText("error.content.save.statusNotAllowed")); return INPUT; } } else { log.error("Tentativo Salvataggio/approvazione contenuto NULLO - Utente: " + this.getCurrentUser().getUsername()); } } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "nextStep"); return FAILURE; } return SUCCESS; } /** * Verifica se l'utente corrente è abilitato all'accesso * del contenuto specificato. * @param content Il contenuto su cui verificare il permesso di accesso. * @return True se l'utente corrente è abilitato all'eccesso al contenuto, * false in caso contrario. */ @Override protected boolean isUserAllowed(Content content) { UserDetails currentUser = this.getCurrentUser(); boolean isAllowed = this.getContentActionHelper().isUserAllowed(content, currentUser); return isAllowed; } public String getPreviousStep() { if (this._previousStep == null) { Content content = this.getContent(); this._previousStep = ((IContentWorkFlowActionHelper) this.getContentActionHelper()).getPreviousStep(content.getStatus(), content.getTypeCode()); } return this._previousStep; } public String getNextStep() { if (this._nextStep == null) { Content content = this.getContent(); this._nextStep = ((IContentWorkFlowActionHelper) this.getContentActionHelper()).getNextStep(content.getStatus(), content.getTypeCode()); } return this._nextStep; } @Override public List<SelectItem> getAvalaibleStatus() { List<SelectItem> items; try { Content content = this.getContent(); items = new ArrayList<SelectItem>(1); String statusDescrKey = "name.contentStatus." +content.getStatus(); SelectItem item = null; if (statusDescrKey.equals(this.getText(statusDescrKey))) { String contentType = content.getTypeCode(); Workflow workflow = this.getWorkflowManager().getWorkflow(contentType); if (null != workflow && null != workflow.getStep(content.getStatus())) { item = new SelectItem(content.getStatus(), workflow.getStep(content.getStatus()).getDescr()); } else { item = new SelectItem(content.getStatus(), content.getStatus()); } } else { item = new SelectItem(content.getStatus(), statusDescrKey); } items.add(item); } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "getAvalaibleStatus"); throw new RuntimeException("Error in getAvalaibleStatus"); } return items; } protected IContentWorkflowManager getWorkflowManager() { return _workflowManager; } public void setWorkflowManager(IContentWorkflowManager workflowManager) { this._workflowManager = workflowManager; } private String _previousStep; private String _nextStep; public IContentWorkflowManager _workflowManager; }