/**
  * Create a class that acts as a container for a hierarchy of static inner classes, one for each
  * resource described by the WADL file.
  *
  * @param root the resource element that corresponds to the root of the resource tree
  * @throws com.sun.codemodel.JClassAlreadyExistsException if, during code generation, the WADL
  *     processor attempts to create a duplicate class. This indicates a structural problem with
  *     the WADL file, e.g. duplicate peer resource entries.
  */
 protected void generateEndpointClass(ResourceNode root) throws JClassAlreadyExistsException {
   JDefinedClass impl = jPkg._class(JMod.PUBLIC, root.getClassName());
   javaDoc.generateClassDoc(root, impl);
   for (ResourceNode r : root.getChildResources()) {
     generateSubClass(impl, r);
   }
 }
 /**
  * Generate Java interfaces for WADL resource types
  *
  * @throws com.sun.codemodel.JClassAlreadyExistsException if the interface to be generated already
  *     exists
  */
 protected void generateResourceTypeInterfaces() throws JClassAlreadyExistsException {
   for (String id : ifaceMap.keySet()) {
     ResourceTypeNode n = ifaceMap.get(id);
     JDefinedClass iface = jPkg._class(JMod.PUBLIC, n.getClassName(), ClassType.INTERFACE);
     n.setGeneratedInterface(iface);
     javaDoc.generateClassDoc(n, iface);
     ResourceClassGenerator rcGen =
         new ResourceClassGenerator(s2jModel, codeModel, jPkg, generatedPackages, javaDoc, iface);
     // generate Java methods for each resource method
     for (MethodNode m : n.getMethods()) {
       rcGen.generateMethodDecls(m, true);
     }
     // generate bean properties for matrix parameters
     for (Param p : n.getMatrixParams()) {
       rcGen.generateBeanProperty(iface, p, true);
     }
   }
 }