/**
 * Copyright 2013 Red Hat, Inc. and/or its affiliates.
 *
 * Licensed under the Eclipse Public License version 1.0, available at
 * http://www.eclipse.org/legal/epl-v10.html
 */
package org.jboss.forge.addon.angularjs.util;

import org.jboss.forge.addon.parser.java.resources.JavaResource;
import org.jboss.forge.addon.parser.java.resources.JavaResourceVisitor;
import org.jboss.forge.addon.resource.visit.VisitContext;
import org.jboss.forge.roaster.model.source.JavaSource;

import java.io.FileNotFoundException;

public class RestResourceTypeVisitor extends JavaResourceVisitor
{
   private String proposedPath;
   private boolean found;
   private JavaSource<?> javaSource;

   public void setProposedPath(String proposedPath)
   {
      this.proposedPath = proposedPath;
   }

   public String getQualifiedClassNameForMatch()
   {
      if (javaSource != null)
      {
         return javaSource.getQualifiedName();
      }
      return null;
   }

   public boolean isFound()
   {
      return found;
   }

   public void setFound(boolean found)
   {
      this.found = found;
   }

   @Override
   public void visit(VisitContext context, JavaResource javaResource)
   {
      if (!found)
      {
         try
         {
            JavaSource<?> javaType = javaResource.getJavaType();
            if (javaType.getAnnotation("javax.ws.rs.Path") != null)
            {
               String path = javaType.getAnnotation("javax.ws.rs.Path")
                        .getStringValue();
               String absolutePath = path.endsWith("/") ? path.substring(0, path.lastIndexOf('/')) : path;
               if (absolutePath.equals(proposedPath))
               {
                  javaSource = javaType;
                  found = true;
               }
            }
         }
         catch (FileNotFoundException e)
         {
            throw new RuntimeException(e);
         }
      }
   }
}