/*******************************************************************************
 * Copyright (c) 2009 by SAP AG, Walldorf. 
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     SAP AG - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.ws.jaxws.dom.runtime.provider;

import java.util.List;
import java.util.Set;

import org.eclipse.jst.ws.jaxws.utils.annotations.IAnnotationPropertyContainer;

/**
 * An interface representing method in endpoint.
 * 
 * @author Georgi Vachkov
 */
public interface IEndpointMethod
{
	/**
	 * @return the method name
	 */
	public String getName();

	/**
	 * @return the returnFQName
	 */
	public String getReturnType();

	/**
	 * @param returnTypeFQName
	 *            sets the return type
	 */
	public void setReturnType(String returnTypeFQName);

	/**
	 * @return human readable method representation
	 */
	public String getSignature();

	/**
	 * @return set of thrown exceptions
	 */
	public Set<String> getExceptions();

	/**
	 * @param exceptionFQName
	 *            add thrown exception to the method
	 */
	public void addException(String exceptionFQName);

	/**
	 * @return list of method params on the order they appear in method
	 */
	public List<IMethodParameter> getParameters();

	/**
	 * creates new param ans adds it to the end of parameters list.
	 * 
	 * @param type fully qualified type name
	 * @param name parameter name
	 * @return {@link IMethodParameter} creates
	 */
	public IMethodParameter addParameter(String type, String name);

	/**
	 * Adds {@link IAnnotationPropertyContainer} to the {@link IEndpointMethod} descriptor.
	 * 
	 * @param annotationsContainer - Container, which will be added.
	 * 
	 */
	public void addAnnotationsContainer(final IAnnotationPropertyContainer annotationsContainer);

	/**
	 * Returns Set with {@link IAnnotationPropertyContainer} related to the {@link IEndpointMethod} descriptor.
	 *
	 * @return Set with {@link IAnnotationPropertyContainer}.
	 */
	public Set<IAnnotationPropertyContainer> getAnnotationsContainer();
}
