/*
 * Copyright 2013 Guidewire Software, Inc.
 */

package gw.internal.gosu.javadoc;

import gw.lang.javadoc.IExceptionNode;
import gw.lang.javadoc.IMethodNode;
import gw.lang.javadoc.IParamNode;
import gw.lang.reflect.java.IJavaClassInfo;
import gw.util.GosuClassUtil;

import java.util.List;
import java.util.Collections;
import java.util.ArrayList;

/**
 */
class MethodNode extends BaseFeatureNode implements IMethodNode, IDocNodeWithParams
{
  private String _name;
  private List<IParamNode> _params = Collections.emptyList();
  private List<IExceptionNode> _exceptions = Collections.emptyList();
  private String _returnDescription;

  @Override
  public String getReturnDescription() {
    return _returnDescription;
  }

  @Override
  public void setReturnDescription(String value) {
    _returnDescription = value;
  }

  @Override
  public List<IParamNode> getParams() {
    return _params;
  }

  @Override
  public void addParam(IParamNode param) {
    if ( _params == Collections.EMPTY_LIST ) {
      _params = new ArrayList<IParamNode>( 1 );
    }
    _params.add( param );
  }

  @Override
  public List<IExceptionNode> getExceptions() {
    return _exceptions;
  }

  @Override
  public void addException(IExceptionNode exception) {
    if ( _exceptions == Collections.EMPTY_LIST ) {
      _exceptions = new ArrayList<IExceptionNode>( 1 );
    }
    _exceptions.add( exception );
  }

  @Override
  public ExceptionNode getException(IJavaClassInfo exceptionClass) {
    for (IExceptionNode exceptionNode : getExceptions()) {
      if (exceptionNode.getType().equalsIgnoreCase(exceptionClass.getName()) || exceptionNode.getType().equalsIgnoreCase( GosuClassUtil.getShortClassName(exceptionClass.getName()))) {
          return (ExceptionNode)exceptionNode;
      }
    }
    return null;
  }

  @Override
  public String getName() {
    return _name;
  }

  @Override
  public void setName(String name) {
    _name = name;
  }

}
