/*
* 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.activemq.transport.amqp.client;
import org.apache.activemq.transport.amqp.client.util.AsyncResult;
/**
* AmqpResource specification.
*
* All AMQP types should implement this interface to allow for control of state
* and configuration details.
*/
public interface AmqpResource extends AmqpEventSink {
/**
* Perform all the work needed to open this resource and store the request
* until such time as the remote peer indicates the resource has become active.
*
* @param request
* The initiating request that triggered this open call.
*/
void open(AsyncResult request);
/**
* @return if the resource has moved to the opened state on the remote.
*/
boolean isOpen();
/**
* Called to indicate that this resource is now remotely opened. Once opened a
* resource can start accepting incoming requests.
*/
void opened();
/**
* Perform all work needed to close this resource and store the request
* until such time as the remote peer indicates the resource has been closed.
*
* @param request
* The initiating request that triggered this close call.
*/
void close(AsyncResult request);
/**
* Perform all work needed to detach this resource and store the request
* until such time as the remote peer indicates the resource has been detached.
*
* @param request
* The initiating request that triggered this detach call.
*/
void detach(AsyncResult request);
/**
* @return if the resource has moved to the closed state on the remote.
*/
boolean isClosed();
/**
* Called to indicate that this resource is now remotely closed. Once closed a
* resource can not accept any incoming requests.
*/
void closed();
/**
* Sets the failed state for this Resource and triggers a failure signal for
* any pending ProduverRequest.
*/
void failed();
/**
* Called to indicate that the remote end has become closed but the resource
* was not awaiting a close. This could happen during an open request where
* the remote does not set an error condition or during normal operation.
*
* @param connection
* The connection that owns this resource.
*/
void remotelyClosed(AmqpConnection connection);
/**
* Called to indicate that the local end has become closed but the resource
* was not awaiting a close. This could happen during an open request where
* the remote does not set an error condition or during normal operation.
*
* @param connection
* The connection that owns this resource.
* @param error
* The error that triggered the local close of this resource.
*/
void locallyClosed(AmqpConnection connection, Exception error);
/**
* Sets the failed state for this Resource and triggers a failure signal for
* any pending ProduverRequest.
*
* @param cause
* The Exception that triggered the failure.
*/
void failed(Exception cause);
}