/**
 * 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.cxf.service.factory;

/**
 *
 */
public interface FactoryBeanListener {
    enum Event {
        /**
         * Event fired at the very start of processing.  No parameters.  Useful
         * for setting up any state the listener may need to maintain.
         */
        START_CREATE,

        /**
         * Event fired at the very end of processing.   One parameter is passed
         * in which is the Service object that was created.
         */
        END_CREATE,

        /**
         * Called at the start of processing when it detects that the service
         * is to be created based on a wsdl contract.   One String parameter
         * of the URL of the wsdl.
         */
        CREATE_FROM_WSDL,

        /**
         * Called at the start of processing when it detects that the service
         * is to be created based on a Java class.  One Class<?> parameter
         * of the class that is being analyzed.
         */
        CREATE_FROM_CLASS,

        /**
         * Called after the wsdl is loaded/parsed.   Single parameter of the
         * WSS4J Definition of the WSDL.
         */
        WSDL_LOADED,

        /**
         * Called after the Service is set into the Factory after which the getService()
         * call will return a valid value.  One parameter of the Service object.
         */
        SERVICE_SET,


        /**
         * OperationInfo, Method
         */
        INTERFACE_OPERATION_BOUND,

        /**
         * OperationInfo, Method, MessageInfo
         */
        OPERATIONINFO_IN_MESSAGE_SET,
        OPERATIONINFO_OUT_MESSAGE_SET,

        /**
         * OperationInfo, Class<? extends Throwable>, FaultInfo
         */
        OPERATIONINFO_FAULT,

        /**
         * InterfaceInfo, Class<?>
         */
        INTERFACE_CREATED,

        /**
         * DataBinding
         */
        DATABINDING_INITIALIZED,

        /**
         * EndpointInfo, Endpoint, Class
         */
        ENDPOINT_CREATED,

        /**
         * Server, targetObject, Class
         */
        PRE_SERVER_CREATE,

        /**
         * Server, targetObject, Class
         */
        SERVER_CREATED,

        /**
         * BindingInfo, BindingOperationInfo, Implementation Method
         */
        BINDING_OPERATION_CREATED,

        /**
         * BindingInfo
         */
        BINDING_CREATED,

        /**
         * Endpoint
         */
        PRE_CLIENT_CREATE,

        /**
         * Endpoint, Client
         */
        CLIENT_CREATED,

        /**
         * EndpointInfo, Endpoint, SEI Class, Class
         */
        ENDPOINT_SELECTED,

        /**
         * EndpointInfo
         */
        ENDPOINTINFO_CREATED,

        /**
         * Class[], InvokationHandler, Proxy
         */
        PROXY_CREATED,
    }


    void handleEvent(Event ev, AbstractServiceFactoryBean factory, Object ... args);
}
