Ejemplo n.º 1
0
  /**
   * Servico responsavel por obter os dados referentes ao Usage de um ativo de software armezenado
   * no repositorio. Consome um XML padronizado (Command) contendo o caminho absoluto do repositorio
   * que se deseja utilizar em conjunto com o nome do ativo que se busca.
   *
   * @param command
   * @return
   */
  @POST
  @Path("/getUsage")
  @Consumes(MediaType.APPLICATION_XML)
  @Produces(MediaType.APPLICATION_XML)
  public Response getUsage(Command command) throws IOException {

    Hidra hidra;
    Usage usage = new Usage();
    String assetName = command.getAssetName();
    String path = command.getRepositoryPath();

    if (path.isEmpty() || assetName.isEmpty()) {
      throw new DataNotFoundException(
          "The absolute path of the repository Or Asset Name has not been set");
    }
    if (!new File(path).exists()) {
      throw new IOException("Could not find the informed repository");
    }

    hidra = new Hidra(path);
    UsageType usageType = hidra.describleUsage(assetName);
    if (usageType != null) {

      List<ArtifactActivy> artAct = usageType.getArtifactActivities();
      List<ContextReference> contexRefe = usageType.getContextReferences();

      for (ArtifactActivy artifacty : artAct) {
        ArtifactActivys artifactys =
            new ArtifactActivys(artifacty.getArtifactId(), artifacty.getContextId());

        for (Activity activity : artifacty.getActivities()) {
          Activities activities =
              new Activities(
                  activity.getId(),
                  activity.getTask(),
                  activity.getReference(),
                  activity.getRole(),
                  activity.getTaskRole());

          for (VariabilityPointBinding variability : activity.getVariability()) {
            Variability variabili =
                new Variability(variability.getId(), variability.getBindingRule());

            activities.getListOfVariability().add(variabili);
          }
          artifactys.getListOfActivities().add(activities);
          usage.getArtifactActivitie().add(artifactys);
        }
      }

      for (ContextReference context : contexRefe) {
        ContextReferences cont = new ContextReferences(context.getContextId());

        for (Activity activity : context.getActivities()) {
          Activities activities =
              new Activities(
                  activity.getId(),
                  activity.getTask(),
                  activity.getReference(),
                  activity.getRole(),
                  activity.getTaskRole());

          for (VariabilityPointBinding variability : activity.getVariability()) {
            Variability variabili =
                new Variability(variability.getId(), variability.getBindingRule());

            activities.getListOfVariability().add(variabili);
          }
          cont.getListOfActivities().add(activities);
          usage.getContextReference().add(cont);
        }
      }

      return Response.status(Status.OK).entity(usage).build();
    }

    throw new DataNotFoundException("Could not return to the Asset Usage ");
  }