it.cilea.osd.jdyna.web.flow.GestioneAlberoDTO.java Source code

Java tutorial

Introduction

Here is the source code for it.cilea.osd.jdyna.web.flow.GestioneAlberoDTO.java

Source

/*
 * JDynA, Dynamic Metadata Management for Java Domain Object
 * 
 *  Copyright (c) 2008, CILEA and third-party contributors as
 *  indicated by the @author tags or express copyright attribution
 *  statements applied by the authors.  All third-party contributions are
 *  distributed under license by CILEA.
 * 
 *  This copyrighted material is made available to anyone wishing to use, modify,
 *  copy, or redistribute it subject to the terms and conditions of the GNU
 *  Lesser General Public License v3 or any later version, as published 
 *  by the Free Software Foundation, Inc. <http://fsf.org/>.
 * 
 *  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 Lesser General Public License
 *  for more details.
 * 
 *   You should have received a copy of the GNU Lesser General Public License
 *   along with this distribution; if not, write to:
 *   Free Software Foundation, Inc.
 *   51 Franklin Street, Fifth Floor
 *   Boston, MA  02110-1301  USA
 */
package it.cilea.osd.jdyna.web.flow;

import it.cilea.osd.common.webflow.BaseFormAction;
import it.cilea.osd.jdyna.dto.DTOGestioneAlberoClassificatore;
import it.cilea.osd.jdyna.model.AlberoClassificatorio;
import it.cilea.osd.jdyna.model.Classificazione;
import it.cilea.osd.jdyna.utils.ClassificationExportUtils;

import java.io.PrintWriter;
import java.util.LinkedHashMap;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.springframework.validation.BindException;
import org.springframework.validation.Errors;
import org.springframework.webflow.context.servlet.ServletExternalContext;
import org.springframework.webflow.execution.Event;
import org.springframework.webflow.execution.RequestContext;

public class GestioneAlberoDTO extends BaseFormAction {

    private ClassificationExportUtils exportUtils;

    public Event putBreadCrumbs(RequestContext context) throws Exception {
        Map<String, String> links = new LinkedHashMap<String, String>();

        AlberoClassificatorio albero = (AlberoClassificatorio) context.getFlowScope().get("albero");

        links.put("albero/list.htm", "lista alberi classificatori");
        links.put("flusso.flow?id=" + albero.getId() + "&_flowId=gestioneAlbero-flow", albero.getNome());
        links.put("", "modifica albero");
        context.getFlashScope().put("breadCumbs", links);
        return success();
    }

    @Override
    protected Object createFormObject(RequestContext context) throws Exception {

        Integer alberoPKEY = context.getFlowScope().getInteger("albero_id");

        DTOGestioneAlberoClassificatore alberoDTO = new DTOGestioneAlberoClassificatore();

        if (alberoPKEY != null) {
            //devo recuperare l'albero da db per riempire i campi del dto
            AlberoClassificatorio albero = applicationService.get(AlberoClassificatorio.class, alberoPKEY);
            context.getFlowScope().put("albero", albero);
            //alberoDTO.setAttiva(albero.isAttiva());
            alberoDTO.setDescrizione(albero.getDescrizione());
            alberoDTO.setNome(albero.getNome());
            alberoDTO.setId(albero.getId());
            alberoDTO.setCodiceSignificativo(albero.isCodiceSignificativo());
            if (albero.isFlat()) {
                alberoDTO.setFlat(true);
            }

        }

        return alberoDTO;

    }

    public Event persistiAlbero(RequestContext context) throws Exception {

        DTOGestioneAlberoClassificatore alberoDTO = (DTOGestioneAlberoClassificatore) getFormObject(context);
        Integer alberoPKEY = context.getFlowScope().getInteger("albero_id");
        AlberoClassificatorio albero = null;
        if (alberoPKEY != null) {
            //devo recuperare l'albero da db per riempire i campi del dto
            albero = applicationService.get(AlberoClassificatorio.class, alberoPKEY);
        }

        //albero.setAttiva(alberoDTO.isAttiva());
        albero.setDescrizione(alberoDTO.getDescrizione());
        albero.setNome(alberoDTO.getNome());
        albero.setFlat(alberoDTO.isFlat());
        albero.setCodiceSignificativo(alberoDTO.isCodiceSignificativo());
        applicationService.saveOrUpdate(AlberoClassificatorio.class, albero);
        context.getFlowScope().put("albero_id", albero.getId());
        context.getFlowScope().put("albero", albero);
        return success();

    }

    public Event persistiTopClassificazione(RequestContext context) throws Exception {

        DTOGestioneAlberoClassificatore alberoDTO = (DTOGestioneAlberoClassificatore) getFormObject(context);
        Integer alberoPKEY = context.getFlowScope().getInteger("albero_id");
        AlberoClassificatorio albero = null;
        if (alberoPKEY != null) {
            //devo recuperare l'albero da db per riempire i campi del dto
            albero = applicationService.get(AlberoClassificatorio.class, alberoPKEY);
        }
        Classificazione real = albero.createClassificazione();
        real.setAttivo(alberoDTO.isTopAttivo());
        real.setSelezionabile(alberoDTO.isTopSelezionabile());
        real.setCodice(alberoDTO.getTopCodice());
        real.setNome(alberoDTO.getTopNome());

        //svuoto form         
        alberoDTO.setCreateSubClassificazione(false);
        alberoDTO.setTopAttivo(false);
        alberoDTO.setTopSelezionabile(false);
        alberoDTO.setTopCodice("");
        alberoDTO.setTopNome("");

        applicationService.saveOrUpdate(AlberoClassificatorio.class, albero);
        context.getFlowScope().put("albero_id", albero.getId());
        context.getFlowScope().put("albero", albero);
        return success();

    }

    public Event persistiModificheClassificazione(RequestContext context) throws Exception {

        DTOGestioneAlberoClassificatore alberoDTO = (DTOGestioneAlberoClassificatore) getFormObject(context);
        Integer alberoPKEY = context.getFlowScope().getInteger("albero_id");
        Integer classificazionePKEY = alberoDTO.getEditID(); //context.getFlowScope().getInteger("classificazione_id");
        AlberoClassificatorio albero = null;
        Classificazione real = null;
        if (alberoPKEY != null && classificazionePKEY != null) {
            //devo recuperare l'albero da db per riempire i campi del dto
            albero = applicationService.get(AlberoClassificatorio.class, alberoPKEY);
            real = applicationService.get(Classificazione.class, classificazionePKEY);
        } else {
            throw new Exception("Nessun id dell'albero o della classificazione trovato");
        }

        real.setAttivo(alberoDTO.isEditAttivo());
        real.setSelezionabile(alberoDTO.isEditSelezionabile());
        real.setCodice(alberoDTO.getEditCodice());
        real.setNome(alberoDTO.getEditNome());

        if (alberoDTO.isCreateSubClassificazione()) {
            //devo creare la sottoclassificazione solo se l'albero non e' flat
            if (alberoDTO.isFlat()) {
                log.debug("Non e' stata possibile creare la sottoclassificazione poiche' l'albero e' flat");
                Errors errors = new BindException(alberoDTO, "gestioneAlbero");
                errors.rejectValue("createSubClassificazione", "error.create.subclassificazione.albero.is.flat");
                getFormErrors(context).addAllErrors(errors);
            } else {
                Classificazione sub = real.createClassificazione();
                sub.setAttivo(alberoDTO.isSubAttivo());
                sub.setSelezionabile(alberoDTO.isSubSelezionabile());
                sub.setCodice(alberoDTO.getSubCodice());
                sub.setNome(alberoDTO.getSubNome());

                //svuoto form                  
                alberoDTO.setSubAttivo(false);
                alberoDTO.setSubSelezionabile(false);
                alberoDTO.setSubCodice("");
                alberoDTO.setSubNome("");
            }
        }

        //svuoto form
        alberoDTO.setCreateSubClassificazione(false);
        alberoDTO.setDescrizione("");
        alberoDTO.setEditAttivo(false);
        alberoDTO.setEditSelezionabile(false);
        alberoDTO.setEditCodice("");
        alberoDTO.setEditNome("");

        applicationService.saveOrUpdate(AlberoClassificatorio.class, albero);
        context.getFlowScope().put("albero_id", albero.getId());
        context.getFlowScope().put("albero", albero);
        return success();

    }

    public Event export(RequestContext context) throws Exception {

        DTOGestioneAlberoClassificatore alberoDTO = (DTOGestioneAlberoClassificatore) getFormObject(context);
        ServletExternalContext externalContext = (ServletExternalContext) context.getExternalContext();
        HttpServletResponse response = externalContext.getResponse();

        Integer alberoID = alberoDTO.getId();
        AlberoClassificatorio albero = null;
        if (alberoID != null) {
            albero = applicationService.get(AlberoClassificatorio.class, alberoID);
        }

        String filename;

        filename = "configurazione-albero_classificatorio_" + albero.getNome().replaceAll(" ", "_") + ".xml";

        response.setContentType("application/xml");
        response.addHeader("Content-Disposition", "attachment; filename=" + filename);

        PrintWriter writer = response.getWriter();
        exportUtils.writeDocTypeANDCustomEditorAlberoClassificatore(writer);

        if (albero != null) {
            exportUtils.alberoClassificatorioToXML(writer, albero);
        }

        response.getWriter().print("</beans>");
        response.flushBuffer();
        return success();
    }

    public Event eliminaClassificazione(RequestContext context) throws Exception {
        DTOGestioneAlberoClassificatore alberoDTO = (DTOGestioneAlberoClassificatore) getFormObject(context);

        Integer classificazionePKEY = alberoDTO.getEditID() == null
                ? context.getRequestParameters().getInteger("editID")
                : alberoDTO.getEditID();

        try {
            applicationService.delete(Classificazione.class, classificazionePKEY);
        } catch (Exception e) {
            log.debug("Non e' stata possibile cancellare la classificazione");
            Errors errors = new BindException(alberoDTO, "gestioneAlbero");
            errors.rejectValue("editID", "error.delete.classificazione");
            getFormErrors(context).addAllErrors(errors);
            return error();
        }
        return success();
    }

    public ClassificationExportUtils getExportUtils() {
        return exportUtils;
    }

    public void setExportUtils(ClassificationExportUtils exportUtils) {
        this.exportUtils = exportUtils;
    }
}