diff --git a/javaee-impl/src/main/java/org/jboss/forge/spec/javaee/rest/RestApplicationFacetImpl.java b/javaee-impl/src/main/java/org/jboss/forge/spec/javaee/rest/RestApplicationFacetImpl.java index ab20c3766e..b083637275 100644 --- a/javaee-impl/src/main/java/org/jboss/forge/spec/javaee/rest/RestApplicationFacetImpl.java +++ b/javaee-impl/src/main/java/org/jboss/forge/spec/javaee/rest/RestApplicationFacetImpl.java @@ -27,6 +27,7 @@ import org.jboss.forge.project.facets.BaseFacet; import org.jboss.forge.project.facets.JavaSourceFacet; import org.jboss.forge.resources.java.JavaResource; +import org.jboss.forge.resources.java.JavaResourceVisitor; import org.jboss.forge.shell.plugins.Alias; import org.jboss.forge.shell.plugins.RequiresFacet; import org.jboss.forge.spec.javaee.RestApplicationFacet; @@ -40,92 +41,143 @@ */ @Alias("forge.spec.jaxrs.applicationclass") @RequiresFacet({RestFacet.class, JavaSourceFacet.class}) -public class RestApplicationFacetImpl extends BaseFacet implements RestApplicationFacet { - private String pkg; - private String classname; - private String rootpath; - - @Inject - private Configuration configuration; - - @Inject - public RestApplicationFacetImpl(Configuration configuration) { - pkg = configuration.getString(REST_APPLICATIONCLASS_PACKAGE); - classname = configuration.getString(REST_APPLICATIONCLASS_NAME); - rootpath = configuration.getString(RestFacet.ROOTPATH); - } - - @Override - public boolean install() { - if (!isInstalled()) { - JavaSourceFacet javaSourceFacet = project.getFacet(JavaSourceFacet.class); - - JavaClass applicationClass = JavaParser.create(JavaClass.class) - .setPackage(pkg) - .setName(classname) - .setSuperType("javax.ws.rs.core.Application") - .addAnnotation("javax.ws.rs.ApplicationPath").setStringValue(rootpath).getOrigin(); - - applicationClass.addImport("javax.ws.rs.core.Application"); - applicationClass.addImport("javax.ws.rs.ApplicationPath"); - - try { - javaSourceFacet.saveJavaSource(applicationClass); - } catch (FileNotFoundException e) { - throw new RuntimeException(e); +public class RestApplicationFacetImpl extends BaseFacet implements RestApplicationFacet +{ + private String pkg; + private String classname; + private String rootpath; + + @Inject + private Configuration configuration; + + @Inject + public RestApplicationFacetImpl(Configuration configuration) + { + pkg = configuration.getString(REST_APPLICATIONCLASS_PACKAGE); + classname = configuration.getString(REST_APPLICATIONCLASS_NAME); + rootpath = configuration.getString(RestFacet.ROOTPATH); + } + + @Override + public boolean install() + { + if (!isInstalled()) + { + JavaSourceFacet javaSourceFacet = project.getFacet(JavaSourceFacet.class); + + JavaClass applicationClass = JavaParser.create(JavaClass.class) + .setPackage(pkg) + .setName(classname) + .setSuperType("javax.ws.rs.core.Application") + .addAnnotation("javax.ws.rs.ApplicationPath").setStringValue(rootpath).getOrigin(); + + applicationClass.addImport("javax.ws.rs.core.Application"); + applicationClass.addImport("javax.ws.rs.ApplicationPath"); + + try + { + javaSourceFacet.saveJavaSource(applicationClass); + } catch (FileNotFoundException e) + { + throw new RuntimeException(e); + } + } + + return true; + } + + @Override + public boolean isInstalled() + { + JavaSourceFacet javaSourceFacet = project.getFacet(JavaSourceFacet.class); + + if ((pkg == null || classname == null) && !findApplicationClass()) + { + return false; + } + + try + { + JavaResource javaResource = javaSourceFacet.getJavaResource(pkg + "." + classname); + if (javaResource.exists()) + { + return true; + } else + { + + } + + } catch (FileNotFoundException e) + { + return false; + } + + return false; + } + + private boolean findApplicationClass() + { + JavaSourceFacet javaSourceFacet = project.getFacet(JavaSourceFacet.class); + + configuration.clearProperty(REST_APPLICATIONCLASS_NAME); + configuration.clearProperty(REST_APPLICATIONCLASS_PACKAGE); + + + javaSourceFacet.visitJavaSources(new JavaResourceVisitor() + { + @Override + public void visit(JavaResource javaResource) + { + try + { + if (javaResource.getJavaSource().getAnnotation("javax.ws.rs.ApplicationPath") != null) + { + configuration.setProperty(REST_APPLICATIONCLASS_PACKAGE, javaResource.getJavaSource().getPackage()); + configuration.setProperty(REST_APPLICATIONCLASS_NAME, javaResource.getFullyQualifiedName()); + configuration.setProperty(RestFacet.ROOTPATH, javaResource.getJavaSource().getAnnotation("javax.ws.rs.ApplicationPath").getLiteralValue()); + } + } catch (FileNotFoundException e) + { + throw new RuntimeException(e); } - } - - return true; - } - - @Override - public boolean isInstalled() { - JavaSourceFacet javaSourceFacet = project.getFacet(JavaSourceFacet.class); - - if (pkg == null || classname == null) { - return false; - } - - try { - JavaResource javaResource = javaSourceFacet.getJavaResource(pkg + "." + classname); - if (javaResource.exists()) { - return true; - } - - } catch (FileNotFoundException e) { - return false; - } - - return false; - } - - @Override - public void setApplicationPath(String path) { - configuration.setProperty(RestFacet.ROOTPATH, path); - - if (pkg == null || classname == null) { + } + }); + + return configuration.getString(REST_APPLICATIONCLASS_NAME) != null; + } + + @Override + public void setApplicationPath(String path) + { + configuration.setProperty(RestFacet.ROOTPATH, path); + + if (pkg == null || classname == null) + { + reportConfigurationError(classname); + } + + JavaSourceFacet javaSourceFacet = project.getFacet(JavaSourceFacet.class); + + try + { + String classname = pkg + "." + this.classname; + JavaResource javaResource = javaSourceFacet.getJavaResource(classname); + if (!javaResource.exists()) + { reportConfigurationError(classname); - } - - JavaSourceFacet javaSourceFacet = project.getFacet(JavaSourceFacet.class); + } - try { - String classname = pkg + "." + this.classname; - JavaResource javaResource = javaSourceFacet.getJavaResource(classname); - if (!javaResource.exists()) { - reportConfigurationError(classname); - } - - javaResource.getJavaSource().getAnnotation("javax.ws.rs.ApplicationPath").setStringValue(path); + javaResource.getJavaSource().getAnnotation("javax.ws.rs.ApplicationPath").setStringValue(path); - } catch (FileNotFoundException e) { - reportConfigurationError(classname); - } + } catch (FileNotFoundException e) + { + reportConfigurationError(classname); + } - } + } - private void reportConfigurationError(String classname) { - throw new RuntimeException("Error setting application path. The class '" + classname + "' in your configuration file does not exist. Run rest setup again."); - } + private void reportConfigurationError(String classname) + { + throw new RuntimeException("Error setting application path. The class '" + classname + "' in your configuration file does not exist. Run rest setup again."); + } }