示例#1
0
  private void write(String metadataFileName, EntityType entityType) {
    OutputStream output = null;

    try {
      JAXBContext context = JAXBContext.newInstance(ObjectFactory.class.getPackage().getName());
      Marshaller marshaller = context.createMarshaller();

      output = new FileOutputStream(metadataFileName);
      /*
       * Informa que o arquivo gerado deve conter um schemaLocation e ser formatado.
       * Fontes:
       * http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.5/tutorial/doc/JAXBWorks2.html
       */
      marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, PROPERTY_SCHEMA_LOCATION_VALUE);
      marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, PROPERTY_FORMATTED_VALUE);
      marshaller.marshal(entityType, output);

    } catch (Exception e) {
      IStatus status =
          new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Error writing metadata file.", e);
      Activator.getDefault().getLog().log(status);

    } finally {
      try {
        output.close();

      } catch (IOException e) {
        IStatus status =
            new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Error closing metadata file.", e);
        Activator.getDefault().getLog().log(status);
      }
    }
  }
示例#2
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;
  }
示例#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;
  }