de.cismet.cids.custom.utils.vermessungsunterlagen.tasks.VermUntTaskPNR.java Source code

Java tutorial

Introduction

Here is the source code for de.cismet.cids.custom.utils.vermessungsunterlagen.tasks.VermUntTaskPNR.java

Source

/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
*              ... and it just works.
*
****************************************************/
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package de.cismet.cids.custom.utils.vermessungsunterlagen.tasks;

import org.apache.commons.io.FileUtils;

import java.io.File;

import java.text.ParseException;
import java.text.SimpleDateFormat;

import java.util.Collection;
import java.util.GregorianCalendar;

import de.cismet.cids.custom.utils.pointnumberreservation.PointNumberReservation;
import de.cismet.cids.custom.utils.pointnumberreservation.PointNumberReservationRequest;
import de.cismet.cids.custom.utils.vermessungsunterlagen.VermessungsunterlagenAnfrageBean;
import de.cismet.cids.custom.utils.vermessungsunterlagen.VermessungsunterlagenHelper;
import de.cismet.cids.custom.utils.vermessungsunterlagen.VermessungsunterlagenTask;
import de.cismet.cids.custom.utils.vermessungsunterlagen.exceptions.VermessungsunterlagenException;
import de.cismet.cids.custom.utils.vermessungsunterlagen.exceptions.VermessungsunterlagenTaskException;
import de.cismet.cids.custom.wunda_blau.search.actions.PointNumberReserverationServerAction;

import de.cismet.cids.server.actions.ServerActionParameter;

/**
 * DOCUMENT ME!
 *
 * @author   jruiz
 * @version  $Revision$, $Date$
 */
public class VermUntTaskPNR extends VermessungsunterlagenTask {

    //~ Static fields/initializers ---------------------------------------------

    public static final String TYPE = "PNR";

    //~ Instance fields --------------------------------------------------------

    private final String auftragsnummer;
    private final String vermessungsstelle;
    private final VermessungsunterlagenAnfrageBean.PunktnummernreservierungBean[] punktnummernreservierungBeans;

    //~ Constructors -----------------------------------------------------------

    /**
     * Creates a new VermUntTaskRisseBilder object.
     *
     * @param  jobKey                         DOCUMENT ME!
     * @param  vermessungsstelle              DOCUMENT ME!
     * @param  auftragsnummer                 DOCUMENT ME!
     * @param  punktnummernreservierungBeans  DOCUMENT ME!
     */
    public VermUntTaskPNR(final String jobKey, final String vermessungsstelle, final String auftragsnummer,
            final VermessungsunterlagenAnfrageBean.PunktnummernreservierungBean[] punktnummernreservierungBeans) {
        super(TYPE, jobKey);

        this.auftragsnummer = auftragsnummer;
        this.vermessungsstelle = vermessungsstelle;
        this.punktnummernreservierungBeans = punktnummernreservierungBeans;
    }

    //~ Methods ----------------------------------------------------------------

    @Override
    protected void performTask() throws VermessungsunterlagenTaskException {
        if (vermessungsstelle == null) {
            final File src = new File(
                    VermessungsunterlagenHelper.getInstance().getProperties().getAbsPathPdfPnrVermstelle());
            final File dst = new File(getPath() + "/" + src.getName());
            if (!dst.exists()) {
                try {
                    FileUtils.copyFile(src, dst);
                } catch (final Exception ex) {
                    final String message = "Beim Kopieren des PNR-Informations-PDFs kam es zu einem unerwarteten Fehler.";
                    throw new VermessungsunterlagenTaskException(getType(), message, ex);
                }
            }
        } else {
            if (punktnummernreservierungBeans != null) {
                final Collection reservations = getReservations();
                boolean first = (reservations == null) || reservations.isEmpty();
                for (final VermessungsunterlagenAnfrageBean.PunktnummernreservierungBean bean : punktnummernreservierungBeans) {
                    if (bean.getAnzahlPunktnummern() > 0) {
                        try {
                            final PointNumberReservationRequest result = doReservation(bean, !first);
                            if (result != null) {
                                final String protokoll = getProtokoll(result);

                                final String filename = getPath() + "/" + auftragsnummer + "_"
                                        + bean.getUtmKilometerQuadrat() + ".txt";
                                FileUtils.writeStringToFile(new File(filename), protokoll, "ISO-8859-1");
                            }
                            first = false;
                        } catch (final Exception ex) {
                            final String message = "Beim Herunterladen des Punktnummernreservierungsprotokolls kam es zu einem unerwarteten Fehler.";
                            throw new VermessungsunterlagenTaskException(getType(), message, ex);
                        }
                    }
                }
            }
        }
    }

    /**
     * DOCUMENT ME!
     *
     * @param   content  DOCUMENT ME!
     *
     * @return  DOCUMENT ME!
     *
     * @throws  VermessungsunterlagenException      DOCUMENT ME!
     * @throws  VermessungsunterlagenTaskException  DOCUMENT ME!
     */
    private String getProtokoll(final PointNumberReservationRequest content) throws VermessungsunterlagenException {
        boolean isFreigabeMode = false;
        if ((content != null) && content.isSuccessfull() && (content.getPointNumbers() != null)) {
            for (final PointNumberReservation pnr : content.getPointNumbers()) {
                if ((pnr.getAblaufDatum() == null) || pnr.getAblaufDatum().isEmpty()) {
                    isFreigabeMode = true;
                    break;
                }
            }
        }

        final StringBuffer contentBuilder = new StringBuffer();
        if ((content == null) || content.isSuccessfull()) {
            if (!isPointNumberBeanValid(content)) {
                throw new VermessungsunterlagenTaskException(getType(),
                        "Ungltige Antwort des Punktnummernreservierungsdienstes.");
            }
            String header = "Antragsnummer: " + content.getAntragsnummer() + " erstellt am: ";
            final GregorianCalendar cal = new GregorianCalendar();
            header += new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
            header += " Anzahl ";
            if (isFreigabeMode) {
                header += "freigegebener";
            } else {
                header += "reservierter";
            }

            header += " Punktnummern: " + content.getPointNumbers().size();
            contentBuilder.append(header).append("\r\n");
            if (isFreigabeMode) {
                contentBuilder.append("freigegebene Punktnummern").append("\r\n");
            } else {
                contentBuilder.append("reservierte Punktnummern (gltig bis)").append("\r\n");
            }
            contentBuilder.append("\r\n");

            for (final PointNumberReservation pnr : content.getPointNumbers()) {
                contentBuilder.append(pnr.getPunktnummer());
                if (!isFreigabeMode) {
                    contentBuilder.append(" (");
                    try {
                        contentBuilder.append(new SimpleDateFormat("dd-MM-yyyy")
                                .format(new SimpleDateFormat("yyyy-MM-dd").parse(pnr.getAblaufDatum())));
                    } catch (final ParseException ex) {
                        LOG.info(
                                "Could not parse the expiration date of a reservation. Using the string representation return by server");
                        contentBuilder.append(pnr.getAblaufDatum());
                    }
                    contentBuilder.append(")");
                }
                contentBuilder.append("\r\n");
            }

            return contentBuilder.toString();
        } else {
            return content.getProtokoll();
        }
    }

    /**
     * DOCUMENT ME!
     *
     * @param   content  DOCUMENT ME!
     *
     * @return  DOCUMENT ME!
     */
    private boolean isPointNumberBeanValid(final PointNumberReservationRequest content) {
        if (content == null) {
            return false;
        }
        if ((content.getAntragsnummer() == null) || content.getAntragsnummer().isEmpty()) {
            return false;
        }
        if ((content.getPointNumbers() == null) || content.getPointNumbers().isEmpty()) {
            return false;
        }
        return true;
    }

    @Override
    protected String getSubPath() {
        return "/PNR";
    }

    /**
     * DOCUMENT ME!
     *
     * @return  DOCUMENT ME!
     */
    private Collection<PointNumberReservation> getReservations() {
        final ServerActionParameter sapPrefix = new ServerActionParameter(
                PointNumberReserverationServerAction.PARAMETER_TYPE.PREFIX.toString(),
                vermessungsstelle.substring(2));
        final ServerActionParameter sapAuftragsnummer = new ServerActionParameter(
                PointNumberReserverationServerAction.PARAMETER_TYPE.AUFTRAG_NUMMER.toString(), auftragsnummer);
        final ServerActionParameter sapAction = new ServerActionParameter(
                PointNumberReserverationServerAction.PARAMETER_TYPE.ACTION.toString(),
                PointNumberReserverationServerAction.ACTION_TYPE.GET_POINT_NUMBERS);
        final PointNumberReserverationServerAction action = new PointNumberReserverationServerAction();
        action.setUser(VermessungsunterlagenHelper.getInstance().getUser());
        action.setMetaService(VermessungsunterlagenHelper.getInstance().getMetaService());
        final Collection<PointNumberReservation> request = (Collection) action.execute(null, sapAction, sapPrefix,
                sapAuftragsnummer);
        return request;
    }

    /**
     * DOCUMENT ME!
     *
     * @param   bean       DOCUMENT ME!
     * @param   ergaenzen  DOCUMENT ME!
     *
     * @return  DOCUMENT ME!
     */
    protected PointNumberReservationRequest doReservation(
            final VermessungsunterlagenAnfrageBean.PunktnummernreservierungBean bean, final boolean ergaenzen) {
        final ServerActionParameter sapAction;
        if (ergaenzen) {
            sapAction = new ServerActionParameter(
                    PointNumberReserverationServerAction.PARAMETER_TYPE.ACTION.toString(),
                    PointNumberReserverationServerAction.ACTION_TYPE.PROLONG_RESERVATION);
        } else {
            sapAction = new ServerActionParameter(
                    PointNumberReserverationServerAction.PARAMETER_TYPE.ACTION.toString(),
                    PointNumberReserverationServerAction.ACTION_TYPE.DO_RESERVATION);
        }
        final ServerActionParameter sapPrefix = new ServerActionParameter(
                PointNumberReserverationServerAction.PARAMETER_TYPE.PREFIX.toString(),
                vermessungsstelle.substring(2));
        final ServerActionParameter sapAuftragsnummer = new ServerActionParameter(
                PointNumberReserverationServerAction.PARAMETER_TYPE.AUFTRAG_NUMMER.toString(), auftragsnummer);
        final ServerActionParameter sapNummerierungsbezirk = new ServerActionParameter(
                PointNumberReserverationServerAction.PARAMETER_TYPE.NBZ.toString(), bean.getUtmKilometerQuadrat());
        final ServerActionParameter sapAnzahl = new ServerActionParameter(
                PointNumberReserverationServerAction.PARAMETER_TYPE.ANZAHL.toString(),
                bean.getAnzahlPunktnummern());
        final ServerActionParameter sapStartwert = new ServerActionParameter(
                PointNumberReserverationServerAction.PARAMETER_TYPE.STARTWERT.toString(), 0);

        final PointNumberReserverationServerAction action = new PointNumberReserverationServerAction();
        action.setUser(VermessungsunterlagenHelper.getInstance().getUser());
        action.setMetaService(VermessungsunterlagenHelper.getInstance().getMetaService());
        final PointNumberReservationRequest request = (PointNumberReservationRequest) action.execute(null,
                sapAction, sapPrefix, sapAuftragsnummer, sapNummerierungsbezirk, sapAnzahl, sapStartwert);
        return request;
    }
}