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

org.glassfish.grizzly.TransformationResult Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 2008, 2020 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0, which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the
 * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
 * version 2 with the GNU Classpath Exception, which is available at
 * https://www.gnu.org/software/classpath/license.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 */

package org.glassfish.grizzly;

/**
 * Represents the result of message encoding/decoding.
 *
 * @author Alexey Stashok
 */
public class TransformationResult implements Cacheable {
    private static final ThreadCache.CachedTypeIndex CACHE_IDX = ThreadCache.obtainIndex(TransformationResult.class, 2);

    public static  TransformationResult createErrorResult(int errorCode, String errorDescription) {
        return create(Status.ERROR, null, null, errorCode, errorDescription);
    }

    public static  TransformationResult createCompletedResult(O message, I externalRemainder) {
        return create(Status.COMPLETE, message, externalRemainder, 0, null);
    }

    public static  TransformationResult createIncompletedResult(I externalRemainder) {
        return create(Status.INCOMPLETE, null, externalRemainder, 0, null);
    }

    @SuppressWarnings("unchecked")
    private static  TransformationResult create(Status status, O message, I externalRemainder, int errorCode, String errorDescription) {

        final TransformationResult result = ThreadCache.takeFromCache(CACHE_IDX);
        if (result != null) {
            result.setStatus(status);
            result.setMessage(message);
            result.setExternalRemainder(externalRemainder);
            result.setErrorCode(errorCode);
            result.setErrorDescription(errorDescription);

            return result;
        }

        return new TransformationResult<>(status, message, externalRemainder, errorCode, errorDescription);
    }

    public enum Status {
        COMPLETE, INCOMPLETE, ERROR
    }

    private O message;
    private Status status;

    private int errorCode;
    private String errorDescription;

    private I externalRemainder;

    public TransformationResult() {
        this(Status.COMPLETE, null, null);
    }

    public TransformationResult(Status status, O message, I externalRemainder) {
        this.status = status;
        this.message = message;
        this.externalRemainder = externalRemainder;
    }

    /**
     * Creates error transformation result with specific code and description.
     *
     * @param errorCode id of the error
     * @param errorDescription error description
     */
    public TransformationResult(int errorCode, String errorDescription) {
        this.status = Status.ERROR;
        this.errorCode = errorCode;
        this.errorDescription = errorDescription;
    }

    protected TransformationResult(Status status, O message, I externalRemainder, int errorCode, String errorDescription) {
        this.status = status;
        this.message = message;
        this.externalRemainder = externalRemainder;

        this.errorCode = errorCode;
        this.errorDescription = errorDescription;
    }

    public O getMessage() {
        return message;
    }

    public void setMessage(O message) {
        this.message = message;
    }

    public I getExternalRemainder() {
        return externalRemainder;
    }

    public void setExternalRemainder(I externalRemainder) {
        this.externalRemainder = externalRemainder;
    }

    public Status getStatus() {
        return status;
    }

    public void setStatus(Status status) {
        this.status = status;
    }

    public int getErrorCode() {
        return errorCode;
    }

    public void setErrorCode(int errorCode) {
        this.errorCode = errorCode;
    }

    public String getErrorDescription() {
        return errorDescription;
    }

    public void setErrorDescription(String errorDescription) {
        this.errorDescription = errorDescription;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder(128);
        sb.append("Transformation result. Status: ").append(status);
        sb.append(" message: ").append(message);

        if (status == Status.ERROR) {
            sb.append(" errorCode: ").append(errorCode);
            sb.append(" errorDescription: ").append(errorDescription);
        }

        return sb.toString();
    }

    /**
     * If implementation uses {@link org.glassfish.grizzly.utils.ObjectPool} to store and reuse {@link TransformationResult}
     * instances - this method will be called before {@link TransformationResult} will be offered to pool.
     */
    public void reset() {
        message = null;
        status = null;

        errorCode = 0;
        errorDescription = null;
        externalRemainder = null;
    }

    /**
     * Recycle this {@link Context}
     */
    @Override
    public void recycle() {
        reset();
        ThreadCache.putToCache(CACHE_IDX, this);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy