it.cilea.osd.jdyna.utils.ClassificationExportUtils.java Source code

Java tutorial

Introduction

Here is the source code for it.cilea.osd.jdyna.utils.ClassificationExportUtils.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.utils;

import it.cilea.osd.jdyna.model.AlberoClassificatorio;
import it.cilea.osd.jdyna.model.Classificazione;
import it.cilea.osd.jdyna.service.IPersistenceDynaService;

import java.io.PrintWriter;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class ClassificationExportUtils implements ApplicationContextAware {
    private IPersistenceDynaService applicationService;
    private ApplicationContext appContext;

    /** Logger for this class and subclasses */
    protected final Log logger = LogFactory.getLog(getClass());

    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.appContext = applicationContext;

    }

    public void setApplicationService(IPersistenceDynaService applicationService) {
        this.applicationService = applicationService;
    }

    /**
     * Metodo di supporto per scrivere il DOCTYPE e il bean per il custom editor dell'albero classificatore
     * 
     * @param writer
     * @param albero
     *            l'albero da esportare
     */
    public void writeDocTypeANDCustomEditorAlberoClassificatore(PrintWriter writer) {
        writer.print("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
                + "<!DOCTYPE beans PUBLIC \"-//SPRING//DTD BEAN//EN\"\n"
                + "\"http://www.springframework.org/dtd/spring-beans.dtd\">\n\n\n");
        writer.print("<beans>\n");
        writer.print("   <!-- Configurazioni per il tool di import (NON MODIFICARE) -->\n");
        writer.print(
                "      <bean id=\"customEditorConfigurer\" class=\"org.springframework.beans.factory.config.CustomEditorConfigurer\">\n");
        writer.print("         <property name=\"customEditors\">\n");
        writer.print("              <map>\n");
        writer.print("               <entry key=\"it.cilea.osd.jdyna.model.AlberoClassificatorio\">\n");
        writer.print("                    <ref bean=\"configurazioneAlberoClassificatorioEditor\"/>\n");
        writer.print("                </entry>\n");
        writer.print("               <entry key=\"it.cilea.osd.jdyna.model.Classificazione\">\n");
        writer.print("                    <ref bean=\"configurazioneClassificazioneEditor\"/>\n");
        writer.print("                </entry>\n");

        writer.print("             </map>\n");
        writer.print("          </property>\n");
        writer.print("       </bean>\n");

    }

    /**
     * Metodo di supporto per esportare un albero classificatorio nella sua
     * "bean definition". //FIXME valutare la possibilita' di utilizzare il
     * polimorfismo implementando un'interfaccia IExportableBeanDefinition
     * 
     * @param writer
     * @param albero
     *            l'albero da esportare
     */
    public void alberoClassificatorioToXML(PrintWriter writer, AlberoClassificatorio albero) {
        writer.print("    <bean id=\"" + AlberoClassificatorio.class.getSimpleName() + albero.getId()
                + "\" class=\"" + AlberoClassificatorio.class.getCanonicalName() + "\">\n");
        writer.print("               <property name=\"nome\" value=\"" + albero.getNome() + "\" />\n");
        writer.print("               <property name=\"attiva\" value=\"" + albero.isAttiva() + "\" />\n");
        if (albero.getDescrizione() != null) {
            writer.print("               <property name=\"descrizione\"><value><![CDATA[" + albero.getDescrizione()
                    + "]]></value></property>\n");
        }
        // writer
        // .print(" <property name=\"classificazioni\">\n"
        // + " <list>\n");
        // for (Classificazione classificazione : albero.getClassificazioni()) {
        // // considero solo le classificazioni di primo livello
        // if (classificazione.getPadre() == null) {
        // toXML(writer, classificazione);
        // }
        // }
        // writer.print(" </list>\n");
        // writer.print(" </property>\n");

        writer.print("    </bean>\n\n");
        writer.print("    <!-- Classificazioni dell'albero:" + albero.getNome() + " -->\n\n");

        for (Classificazione classificazione : albero.getTopClassificazioni()) {
            // considero solo le classificazioni di primo livello
            if (classificazione.getPadre() == null) {
                classificazioneToXML(writer, classificazione);
            }
        }
        writer.print("    <!-- FINE Classificazioni dell'albero:" + albero.getNome() + " -->\n\n");

    }

    /**
     * Metodo di supporto per esportare una classificazione nella sua "bean
     * definition". //FIXME valutare la possibilita' di utilizzare il
     * polimorfismo implementando un'interfaccia IExportableBeanDefinition
     * 
     * @param writer
     * @param classificazione
     */
    private void classificazioneToXML(PrintWriter writer, Classificazione classificazione) {
        writer.print("         <bean id=\"" + Classificazione.class.getSimpleName() + classificazione.getId()
                + "\" class=\"" + Classificazione.class.getCanonicalName() + "\">\n");
        writer.print("               <property name=\"alberoClassificatorio\" ref=\""
                + AlberoClassificatorio.class.getSimpleName() + classificazione.getAlberoClassificatorio().getId()
                + "\" />\n");
        if (classificazione.getPadre() != null) {
            writer.print("               <property name=\"padre\" ref=\""

                    + Classificazione.class.getSimpleName() + classificazione.getPadre().getId() + "\" />\n");
        }
        writer.print("               <property name=\"codice\" value=\"" + classificazione.getCodice() + "\" />\n");
        writer.print("               <property name=\"nome\" value=\"" + classificazione.getNome() + "\" />\n");
        writer.print("               <property name=\"selezionabile\" value=\"" + classificazione.isSelezionabile()
                + "\" />\n");
        writer.print("               <property name=\"attivo\" value=\"" + classificazione.isAttivo() + "\" />\n");
        // bisogna settare solo i legami "a salire" quelli a scendere vengono
        // dedotti automaticamente
        // writer
        // .print(" <property name=\"sottoCategorie\">\n"
        // + " <list>\n");
        // for (Classificazione subClass : classificazione.getSottoCategorie())
        // {
        //
        // toXML(writer, subClass);
        //
        // }
        // writer.print(" </list>\n");
        // writer.print(" </property>\n");

        writer.print("         </bean>\n\n");
        writer.print("    <!-- SottoClassificazioni di:" + classificazione.getNome() + " -->\n\n");

        for (Classificazione subClass : classificazione.getSottoCategorie()) {
            classificazioneToXML(writer, subClass);
        }

        writer.print("    <!-- FINE SottoClassificazioni di:" + classificazione.getNome() + " -->\n\n");

    }

}