コード例 #1
0
ファイル: Lesto.java プロジェクト: rafaelalmeida/jgrasstools
  public static void main(String[] args) throws IOException {
    Lesto hm = Lesto.getInstance();
    Set<Entry<String, Class<?>>> cls = hm.moduleName2Class.entrySet();
    for (Entry<String, Class<?>> cl : cls) {
      System.out.println(cl.getValue().getCanonicalName());
    }
    if (true) return;

    LinkedHashMap<String, List<ClassField>> moduleName2Fields = hm.moduleName2Fields;
    LinkedHashMap<String, Class<?>> moduleName2Class = hm.moduleName2Class;

    Set<Entry<String, List<ClassField>>> entrySet = moduleName2Fields.entrySet();
    for (Entry<String, List<ClassField>> entry : entrySet) {
      String moduleName = entry.getKey();

      StringBuilder sb = new StringBuilder();

      Class<?> moduleClass = moduleName2Class.get(moduleName);
      Description description = moduleClass.getAnnotation(Description.class);
      sb.append(
          "public static final String "
              + moduleName.toUpperCase()
              + "_DESCRIPTION = \""
              + description.value()
              + "\";\n");
      Documentation documentation = moduleClass.getAnnotation(Documentation.class);
      String doc;
      if (documentation == null) {
        doc = "";
      } else {
        doc = documentation.value();
      }
      sb.append(
          "public static final String "
              + moduleName.toUpperCase()
              + "_DOCUMENTATION = \""
              + doc
              + "\";\n");
      Keywords keywords = moduleClass.getAnnotation(Keywords.class);
      String k;
      if (keywords == null) {
        k = "";
      } else {
        k = keywords.value();
      }
      sb.append(
          "public static final String "
              + moduleName.toUpperCase()
              + "_KEYWORDS = \""
              + k
              + "\";\n");
      Label label = moduleClass.getAnnotation(Label.class);
      String lab;
      if (label == null) {
        lab = "";
      } else {
        lab = label.value();
      }
      sb.append(
          "public static final String " + moduleName.toUpperCase() + "_LABEL = \"" + lab + "\";\n");
      Name name = moduleClass.getAnnotation(Name.class);
      String n;
      if (name == null) {
        n = "";
      } else {
        n = name.value();
      }
      sb.append(
          "public static final String " + moduleName.toUpperCase() + "_NAME = \"" + n + "\";\n");
      Status status = moduleClass.getAnnotation(Status.class);
      // String st = "";
      // switch( status.value() ) {
      // case 5:
      // st = "EXPERIMENTAL";
      // break;
      // case 10:
      // st = "DRAFT";
      // break;
      // case 20:
      // st = "TESTED";
      // break;
      // case 30:
      // st = "VALIDATED";
      // break;
      // case 40:
      // st = "CERTIFIED";
      // break;
      // default:
      // st = "DRAFT";
      // break;
      // }

      sb.append(
          "public static final int "
              + moduleName.toUpperCase()
              + "_STATUS = "
              + status.value()
              + ";\n");
      License license = moduleClass.getAnnotation(License.class);
      sb.append(
          "public static final String "
              + moduleName.toUpperCase()
              + "_LICENSE = \""
              + license.value()
              + "\";\n");
      Author author = moduleClass.getAnnotation(Author.class);
      String authorName = author.name();
      sb.append(
          "public static final String "
              + moduleName.toUpperCase()
              + "_AUTHORNAMES = \""
              + authorName
              + "\";\n");
      String authorContact = author.contact();
      sb.append(
          "public static final String "
              + moduleName.toUpperCase()
              + "_AUTHORCONTACTS = \""
              + authorContact
              + "\";\n");

      UI ui = moduleClass.getAnnotation(UI.class);
      if (ui != null) {
        sb.append(
            "public static final String "
                + moduleName.toUpperCase()
                + "_UI = \""
                + ui.value()
                + "\";\n");
      }

      List<ClassField> value = entry.getValue();
      for (ClassField classField : value) {
        String fieldName = classField.fieldName;
        if (fieldName.equals("pm")) {
          continue;
        }
        String fieldDescription = classField.fieldDescription;

        String str =
            "public static final String "
                + moduleName.toUpperCase()
                + "_"
                + fieldName
                + "_DESCRIPTION = \""
                + fieldDescription
                + "\";\n";
        sb.append(str);
      }
      System.out.println(sb.toString());
      System.out.println();
    }

    // for( String className : hm.allClasses ) {
    // System.out.println(className);
    // }
    // for( String fieldName : hm.allFields ) {
    // System.out.println(fieldName);
    // }

  }
コード例 #2
0
ファイル: Lesto.java プロジェクト: rafaelalmeida/jgrasstools
  private void gatherInformations() {

    try {
      if (baseclassUrl == null) {
        baseclassUrl = ClasspathUrlFinder.findClassBase(Lesto.class);
      }
      AnnotationDB db = new AnnotationDB();
      db.scanArchives(baseclassUrl);

      Map<String, Set<String>> annotationIndex = db.getAnnotationIndex();
      Set<String> simpleClasses = annotationIndex.get(Execute.class.getName());
      for (String className : simpleClasses) {
        if (!className.startsWith("org.jgrasstools.lesto")) {
          continue;
        }

        int lastDot = className.lastIndexOf('.');
        String name = className.substring(lastDot + 1);
        Class<?> clazz = null;
        try {
          clazz = Class.forName(className);
          moduleName2Class.put(name, clazz);
        } catch (Throwable e) {
          e.printStackTrace();
        }
      }

      /*
       * extract all classes and fields
       */
      List<String> classNames = new ArrayList<String>();
      List<String> fieldNamesList = new ArrayList<String>();

      Set<Entry<String, Class<?>>> moduleName2ClassEntries = moduleName2Class.entrySet();
      for (Entry<String, Class<?>> moduleName2ClassEntry : moduleName2ClassEntries) {
        String moduleName = moduleName2ClassEntry.getKey();
        Class<?> moduleClass = moduleName2ClassEntry.getValue();
        Status annotation = moduleClass.getAnnotation(Status.class);
        if (annotation == null) {
          System.out.println("Missing status: " + moduleClass.getCanonicalName());
          continue;
        }
        String statusString = null;
        int status = annotation.value();
        switch (status) {
          case Status.CERTIFIED:
            statusString = "CERTIFIED";
            break;
          case Status.DRAFT:
            statusString = "DRAFT";
            break;
          case Status.TESTED:
            statusString = "TESTED";
            break;
          default:
            statusString = "UNKNOWN";
            break;
        }

        classNames.add(moduleName);

        List<ClassField> tmpfields = new ArrayList<ClassField>();
        Object annotatedObject = moduleClass.newInstance();
        ComponentAccess cA = new ComponentAccess(annotatedObject);
        Collection<Access> inputs = cA.inputs();
        for (Access access : inputs) {
          Field field = access.getField();
          String name = field.getName();
          Description descriptionAnnot = field.getAnnotation(Description.class);
          String description = name;
          if (descriptionAnnot != null) {
            description = descriptionAnnot.value();
            if (description == null) {
              description = name;
            }
          }
          Class<?> fieldClass = field.getType();
          ClassField cf = new ClassField();
          cf.isIn = true;
          cf.fieldName = name;
          cf.fieldDescription = description;
          cf.fieldClass = fieldClass;
          cf.parentClass = moduleClass;
          cf.parentClassStatus = statusString;
          if (!fieldNamesList.contains(name)) {
            fieldNamesList.add(name);
          }
          tmpfields.add(cf);
        }
        Collection<Access> outputs = cA.outputs();
        for (Access access : outputs) {
          Field field = access.getField();
          String name = field.getName();
          Description descriptionAnnot = field.getAnnotation(Description.class);
          String description = name;
          if (descriptionAnnot != null) {
            description = descriptionAnnot.value();
            if (description == null) {
              description = name;
            }
          }
          Class<?> fieldClass = field.getType();
          ClassField cf = new ClassField();
          cf.isOut = true;
          cf.fieldName = name;
          cf.fieldDescription = description;
          cf.fieldClass = fieldClass;
          cf.parentClass = moduleClass;
          cf.parentClassStatus = statusString;
          if (!fieldNamesList.contains(name)) {
            fieldNamesList.add(name);
          }
          tmpfields.add(cf);
        }
        moduleName2Fields.put(moduleName, tmpfields);
      }
      Collections.sort(fieldNamesList);
      allFields = (String[]) fieldNamesList.toArray(new String[fieldNamesList.size()]);
      Collections.sort(classNames);
      allClasses = (String[]) classNames.toArray(new String[classNames.size()]);
    } catch (Exception e1) {
      e1.printStackTrace();
    }
  }