All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.extra.client.plugins.responseprocessplugin.filesystem.AcknowledgeSingleResponseDataResponseProcessPlugin Maven / Gradle / Ivy

The newest version!
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package de.extra.client.plugins.responseprocessplugin.filesystem;

import java.io.IOException;
import java.io.InputStream;

import javax.inject.Inject;
import javax.inject.Named;

import org.springframework.oxm.XmlMappingException;
import org.springframework.util.Assert;

import de.drv.dsrv.extra.marshaller.IExtraMarschaller;
import de.drv.dsrv.extra.marshaller.IExtraUnmarschaller;
import de.drv.dsrv.extrastandard.namespace.components.ClassifiableIDType;
import de.drv.dsrv.extrastandard.namespace.components.ReportType;
import de.drv.dsrv.extrastandard.namespace.components.RequestDetailsType;
import de.drv.dsrv.extrastandard.namespace.components.ResponseDetailsType;
import de.drv.dsrv.extrastandard.namespace.response.Transport;
import de.drv.dsrv.extrastandard.namespace.response.TransportHeader;
import de.extra.client.core.observer.impl.TransportInfoBuilder;
import de.extra.client.core.responce.impl.SingleReportData;
import de.extra.client.core.responce.impl.SingleResponseData;
import de.extra.client.core.responce.impl.SingleResponseDataForMultipleRequest;
import de.extrastandard.api.exception.ExtraResponseProcessPluginRuntimeException;
import de.extrastandard.api.model.content.IResponseData;
import de.extrastandard.api.model.content.ISingleResponseData;
import de.extrastandard.api.model.execution.PersistentStatus;
import de.extrastandard.api.observer.ITransportInfo;
import de.extrastandard.api.observer.ITransportObserver;
import de.extrastandard.api.plugin.IResponseProcessPlugin;
import de.extrastandard.api.util.IExtraReturnCodeAnalyser;

/**
 * Erwartet nur ein Response in Transport, der für alle Requests gilt
 * 
 * @author DPRS
 * @version $Id$
 */
@Named("acknowledgeSingleResponseDataResponseProcessPlugin")
public class AcknowledgeSingleResponseDataResponseProcessPlugin implements
		IResponseProcessPlugin {

	@Inject
	@Named("extraMarschaller")
	private IExtraMarschaller marshaller;

	@Inject
	@Named("extraUnmarschaller")
	private IExtraUnmarschaller extraUnmarschaller;

	@Inject
	@Named("extraMessageReturnDataExtractor")
	private ExtraMessageReturnDataExtractor returnCodeExtractor;

	@Inject
	@Named("transportObserver")
	private ITransportObserver transportObserver;

	@Inject
	@Named("transportInfoBuilder")
	private TransportInfoBuilder transportInfoBuilder;

	@Inject
	@Named("extraReturnCodeAnalyser")
	private IExtraReturnCodeAnalyser extraReturnCodeAnalyser;

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * de.extra.client.core.plugin.IResponsePlugin#processResponse(de.drv.dsrv
	 * .extrastandard.namespace.response.XMLTransport)
	 */
	@Override
	public IResponseData processResponse(final InputStream responseAsStream) {
		try {

			final Transport extraResponse = extraUnmarschaller.unmarshal(
					responseAsStream, Transport.class);

			// Ausgabe der Response im log
			ExtraMessageReturnDataExtractor.printResult(marshaller, extraResponse);

			// TODO Validierungsmodul
			final TransportHeader transportHeader = extraResponse
					.getTransportHeader();
			Assert.notNull(transportHeader,
					"Transportheader in der Acknowledge sind leer");
			final ITransportInfo transportInfo = transportInfoBuilder
					.createTransportInfo(transportHeader);

			transportObserver.responseFilled(transportInfo);

			final ResponseDetailsType responseDetails = transportHeader
					.getResponseDetails();
			Assert.notNull(responseDetails,
					"ResponseDetailsType in der Acknowledge ist leer");
			final RequestDetailsType requestDetails = transportHeader
					.getRequestDetails();
			Assert.notNull(transportHeader,
					"RequestDetailsType in der Acknowledge ist leer");
			final ClassifiableIDType classifiableResponseIDType = responseDetails
					.getResponseID();
			Assert.notNull(classifiableResponseIDType,
					"ResponseID in der Acknowledge ist leer");
			final String responseId = classifiableResponseIDType.getValue();

			// final ReportType report = responseDetails.getReport();

			final ClassifiableIDType classifiableRequestIDType = requestDetails
					.getRequestID();
			Assert.notNull(classifiableRequestIDType,
					"RequestIDType  in der Acknowledge ist leer");
			final String requestId = classifiableRequestIDType.getValue();

			final ReportType report = responseDetails.getReport();
			final SingleReportData reportData = returnCodeExtractor
					.extractReportData(report);
			final String returnCode = reportData.getReturnCode();
			final boolean returnCodeSuccessful = extraReturnCodeAnalyser
					.isReturnCodeSuccessful(returnCode);
			// Status (DONE oder FAIL)
			final PersistentStatus persistentStatus = returnCodeSuccessful ? PersistentStatus.DONE
					: PersistentStatus.FAIL;

			// (17.12.12) keine Server Daten -> kein OutputIdentifier
			final String outputIdentifier = null;

			final ISingleResponseData singleResponseData = new SingleResponseData(
					requestId, returnCode, reportData.getReturnText(),
					responseId, returnCodeSuccessful, persistentStatus,
					outputIdentifier);
			final IResponseData responseData = new SingleResponseDataForMultipleRequest(
					singleResponseData);
			return responseData;
		} catch (final XmlMappingException xmlMappingException) {
			throw new ExtraResponseProcessPluginRuntimeException(
					xmlMappingException);
		} catch (final IOException ioException) {
			throw new ExtraResponseProcessPluginRuntimeException(ioException);
		}

	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy