Beispiel #1
0
  private String getMetadataFileName(ICompilationUnit iCompilationUnit) {
    String result = null;

    try {
      result =
          iCompilationUnit.getCorrespondingResource().getLocation().removeFileExtension().toString()
              + METADATA_EXTENSION;

    } catch (JavaModelException e) {
      IStatus status =
          new Status(
              IStatus.ERROR,
              Activator.PLUGIN_ID,
              "Error reading compilation unit at getMetadataFileName.",
              e);
      Activator.getDefault().getLog().log(status);

    } catch (Exception e) {
      IStatus status =
          new Status(
              IStatus.ERROR,
              Activator.PLUGIN_ID,
              "Error reading compilation unit at getMetadataFileName.",
              e);
      Activator.getDefault().getLog().log(status);
    }

    return result;
  }
 /*
  * Ensures that getCorrespondingResource() returns a non-null value for a primary working copy.
  * (regression test for bug 44065 NPE during hot code replace)
  */
 public void testGetCorrespondingResource() throws CoreException {
   ICompilationUnit cu = null;
   try {
     cu = getCompilationUnit("P/X.java");
     cu.becomeWorkingCopy(null);
     assertResourceNamesEqual(
         "Unexpected resource", "X.java", new Object[] {cu.getCorrespondingResource()});
   } finally {
     if (cu != null) {
       cu.discardWorkingCopy();
     }
   }
 }
Beispiel #3
0
  @Override
  public Object execute(ExecutionEvent event) throws ExecutionException {
    /*
     * Lê os arquivos selecionados no Package Explorer
     * Fontes:
     * http://www.vogella.de/articles/EclipsePlugIn/article.html#contribute
     */
    IStructuredSelection selection =
        (IStructuredSelection) HandlerUtil.getActiveMenuSelection(event);

    try {
      /*
       * Os arquivos selecionados podem ser de mais de um projeto, desta
       * forma, armazena os projetos num mapa para que possam ser
       * atualizados (Refresh) após a criação dos arquivos de metadados
       */
      Set<IProject> projects = new HashSet<IProject>();

      for (Object element : selection.toList()) {
        if (element instanceof ICompilationUnit) {
          ICompilationUnit iCompilationUnit = (ICompilationUnit) element;
          String metadataFileName = getMetadataFileName(iCompilationUnit);
          if (metadataFileName != null) {
            /*
             * Obtém um CompilationUnit para percorrer as propriedades
             * com um Visitor
             * Fontes:
             * http://www.guj.com.br/java/245139-duvida-com-classloader-ao-desenvolver-um-plugin-para-o-eclipse
             * http://stackoverflow.com/questions/3938528/getting-field-type-in-a-method-in-eclipse
             */
            CompilationUnit compilationUnit = getAst(iCompilationUnit);

            EntityParser parser = new EntityParser(iCompilationUnit, compilationUnit);
            parser.run();

            EntityType entityType = parser.getEntityType();

            // Grava os dados da entidade em um arquivo xml
            write(metadataFileName, entityType);

            // adicina o projeto no conjunto, para ser atualizado após a criação dos arquivos
            projects.add(iCompilationUnit.getCorrespondingResource().getProject());

          } else {
            MessageDialog.openInformation(
                HandlerUtil.getActiveShell(event),
                "Erro",
                "Não foi possível gravar o arquivo "
                    + METADATA_EXTENSION
                    + ". Verifique se você possui permissão de escrita no projeto.");
          }

        } else {
          MessageDialog.openInformation(
              HandlerUtil.getActiveShell(event), "Atenção", "Selecione apenas arquivos Java");
          return null;
        }
      }

      /*
       *  Atualiza os projetos vinculados aos arquivos
       *  Fontes:
       *  http://www.openarchitectureware.org/forum/viewtopic.php?showtopic=4958
       */
      for (IProject project : projects) {
        project.refreshLocal(IResource.DEPTH_INFINITE, null);
      }

      MessageDialog.openInformation(
          HandlerUtil.getActiveShell(event),
          "Sucesso",
          "Arquivos de metadados criados com sucesso.");

    } catch (Exception e) {
      /*
       * Logs, Fonte:
       * http://www.ibm.com/developerworks/library/os-eclog/
       */
      IStatus status =
          new Status(
              IStatus.ERROR, Activator.PLUGIN_ID, "Error executing plugin orion-metadata.", e);
      Activator.getDefault().getLog().log(status);

      throw new ExecutionException("Error executing plugin orion-metadata.", e);
    }

    return null;
  }