001/*
002 *  Copyright 2022 Anyware Services
003 *
004 *  Licensed under the Apache License, Version 2.0 (the "License");
005 *  you may not use this file except in compliance with the License.
006 *  You may obtain a copy of the License at
007 *
008 *      http://www.apache.org/licenses/LICENSE-2.0
009 *
010 *  Unless required by applicable law or agreed to in writing, software
011 *  distributed under the License is distributed on an "AS IS" BASIS,
012 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 *  See the License for the specific language governing permissions and
014 *  limitations under the License.
015 */
016package org.ametys.plugins.forms.content.workflow;
017
018import java.util.Collections;
019import java.util.List;
020import java.util.stream.Collectors;
021
022import javax.jcr.Node;
023
024import org.apache.avalon.framework.service.ServiceException;
025import org.apache.avalon.framework.service.ServiceManager;
026import org.apache.cocoon.environment.Request;
027
028import org.ametys.core.user.UserIdentity;
029import org.ametys.plugins.forms.FormsException;
030import org.ametys.plugins.forms.content.Form;
031import org.ametys.plugins.forms.content.jcr.FormPropertiesManager;
032import org.ametys.plugins.forms.content.table.FormTableManager;
033import org.ametys.plugins.forms.data.Answer;
034import org.ametys.plugins.forms.workflow.AbstractFormDashboardGenerator;
035import org.ametys.plugins.workflow.store.JdbcWorkflowStore;
036import org.ametys.plugins.workflow.support.WorkflowProvider;
037
038import com.opensymphony.workflow.Workflow;
039
040/**
041 * This class generates all the forms process information for current user
042 */
043public class FormDashboardGenerator extends AbstractFormDashboardGenerator
044{
045    /** The form table manager */
046    protected FormTableManager _formTableManager;
047    
048    /** The form properties manager */
049    protected FormPropertiesManager _formPropertiesManager;
050    
051    /** The workflow provider */
052    protected WorkflowProvider _workflowProvider;
053    
054    @Override
055    public void service(ServiceManager smanager) throws ServiceException
056    {
057        super.service(smanager);
058        _formTableManager = (FormTableManager) smanager.lookup(FormTableManager.ROLE);
059        _formPropertiesManager = (FormPropertiesManager) smanager.lookup(FormPropertiesManager.ROLE);
060        _workflowProvider = (WorkflowProvider) smanager.lookup(WorkflowProvider.ROLE);
061    }
062    
063    @Override
064    protected List<Answer> _getAnswers(Request request, String siteName, String lang, UserIdentity user) throws FormsException
065    {
066        List<Form> forms = _formPropertiesManager.getFormContentNodes(siteName, lang)
067                .stream()
068                .map(this::_getForms)
069                .flatMap(List::stream)
070                .collect(Collectors.toList());
071        
072        return _formTableManager.getUserAnwsers(forms, user);
073    }
074    
075    @Override
076    protected Workflow _getWorkflow(Answer answer)
077    {
078        return _workflowProvider.getExternalWorkflow(JdbcWorkflowStore.ROLE);
079    }
080    
081    private List<Form> _getForms(Node node)
082    {
083        try
084        {
085            return _formPropertiesManager.getForms(node);
086        }
087        catch (Exception e)
088        {
089            getLogger().error("Can get forms from content node", e);
090        }
091        
092        return Collections.EMPTY_LIST;
093    }
094}