blob: c4b79b4817f02c5e072247ceb441b5ad25ae9344 [file] [log] [blame]
/*
* 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 org.apache.qpid.proton.engine;
import static org.apache.qpid.proton.engine.TransportResult.Status.ERROR;
import static org.apache.qpid.proton.engine.TransportResult.Status.OK;
import java.util.IllegalFormatException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Creates TransportResults.
* Only intended for use by internal Proton classes.
* This class resides in the api module so it can be used by both proton-j-impl and proton-jni.
*/
public class TransportResultFactory
{
private static final Logger LOGGER = Logger.getLogger(TransportResultFactory.class.getName());
private static final TransportResult _okResult = new TransportResultImpl(OK, null, null);
public static TransportResult ok()
{
return _okResult;
}
public static TransportResult error(String format, Object... args)
{
String errorDescription;
try
{
errorDescription = String.format(format, args);
}
catch(IllegalFormatException e)
{
LOGGER.log(Level.SEVERE, "Formating error in string " + format, e);
errorDescription = format;
}
return new TransportResultImpl(ERROR, errorDescription, null);
}
public static TransportResult error(final String errorDescription)
{
return new TransportResultImpl(ERROR, errorDescription, null);
}
public static TransportResult error(final Exception e)
{
return new TransportResultImpl(ERROR, e == null ? null : e.toString(), e);
}
private static final class TransportResultImpl implements TransportResult
{
private final String _errorDescription;
private final Status _status;
private final Exception _exception;
private TransportResultImpl(Status status, String errorDescription, Exception exception)
{
_status = status;
_errorDescription = errorDescription;
_exception = exception;
}
@Override
public boolean isOk()
{
return _status == OK;
}
@Override
public Status getStatus()
{
return _status;
}
@Override
public String getErrorDescription()
{
return _errorDescription;
}
@Override
public Exception getException()
{
return _exception;
}
@Override
public void checkIsOk()
{
if (!isOk())
{
Exception e = getException();
if (e != null)
{
throw new TransportException(e);
}
else
{
throw new TransportException(getErrorDescription());
}
}
}
}
}