public void generate(ServiceDescriptor serviceDescriptor, Writer writer, String path)
      throws LoadTemplateException {
    // construct UMLService model
    UMLServiceJavaDescriptor umlService = new UMLServiceJavaDescriptor(serviceDescriptor);

    // generate Java Service API
    writer =
        createWriter(
            path + File.separator + packageToDir(umlService.getPackageName()),
            umlService.getServiceAPIName() + ".java");
    genServiceAPI(umlService, writer);

    // generate Java Service Impl
    writer =
        createWriter(
            path + File.separator + packageToDir(umlService.getPackageName()),
            umlService.getServiceImplName() + ".java");
    genServiceImpl(umlService, writer);
  }
  /*
   * generate Java Service API
   */
  public void genServiceAPI(UMLServiceJavaDescriptor umlService, Writer writer)
      throws LoadTemplateException {

    template = m_loader.loadTemplate(JAVA_SERVICE_API_TEMPLATE);

    VelocityContext ctx = new VelocityContext();
    try {
      ctx.put("service", umlService);

      System.out.println(
          "Merging Template - "
              + umlService.getServiceAPIName()
              + ": "
              + JAVA_SERVICE_API_TEMPLATE);
      template.merge(ctx, writer);
      System.out.println("Done");
      writer.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }