public synchronized boolean equals(java.lang.Object obj) {
   if (!(obj instanceof ErrorList)) return false;
   ErrorList other = (ErrorList) obj;
   if (obj == null) return false;
   if (this == obj) return true;
   if (__equalsCalc != null) {
     return (__equalsCalc == obj);
   }
   __equalsCalc = obj;
   boolean _equals;
   _equals =
       true
           && ((this.errors == null && other.getErrors() == null)
               || (this.errors != null
                   && java.util.Arrays.equals(this.errors, other.getErrors())));
   __equalsCalc = null;
   return _equals;
 }
Ejemplo n.º 2
0
  public KloReport parse(final File file) throws IOException {

    if (file == null) {
      throw new IllegalArgumentException("File input is mandatory.");
    }

    if (!file.exists()) {
      throw new IllegalArgumentException("File input " + file.getName() + " must exist.");
    }

    KloReport report = new KloReport();

    List<ValidationError> list = KlocworkModel.OUTPUT_KLOCWORK_9_2.validate(file);
    if (!list.isEmpty()) {
      StringBuilder sb = new StringBuilder("XML Validation failed. See errors below :\n");
      for (ValidationError val : list) {
        sb.append(val.toString()).append("\n");
      }
      throw new IllegalArgumentException(sb.toString());
    }

    try {

      ErrorList errList = getErrorList(file);
      List<KloFile> lowSeverities = new ArrayList<KloFile>();
      List<KloFile> highSeverities = new ArrayList<KloFile>();
      List<KloFile> errors = new ArrayList<KloFile>();
      int i = 0;
      for (Problem problem : errList.getProblem()) {
        KloFile kloFile;
        kloFile = new KloFile();
        kloFile.setKey(i + 1);

        /** Using reflection to get the tags' name and value and to put them in kloFile map */
        for (Field f : problem.getClass().getDeclaredFields()) {
          f.setAccessible(true);
          try {
            String name = f.getName();
            Object value = f.get(problem);
            if (value != null) {
              String valueToString = value.toString();
              // Changing the default value returned by Object.toString() by an empty value
              if (valueToString.startsWith("com.thalesgroup.hudson.plugins.klocwork.model")
                  && valueToString.contains("@")) {
                kloFile.store(name, "");
              } else {
                kloFile.store(name, valueToString);
              }

              // Treating the trace tag
              if (name.equals("trace")) {
                Trace trace = (Trace) value;
                for (TraceBlock tracelt : trace.getTraceBlock()) {

                  kloFile.addTraceBlock(
                      tracelt.getFile(), tracelt.getMethod(), tracelt.getName(), tracelt.getId());

                  for (TraceLine traceLinelt : tracelt.getTraceLine()) {

                    // Element traceLinelt = (Element) listTraceLine.get(k);
                    String refId = null;
                    if (problem.getRefID() != null
                        && (refId = problem.getRefID().toString()) != null) {
                      kloFile.addTraceLine(
                          tracelt.getId(),
                          traceLinelt.getLine(),
                          traceLinelt.getText(),
                          traceLinelt.getType().charAt(0),
                          Integer.parseInt(refId));
                    } else {
                      kloFile.addTraceLine(
                          tracelt.getId(),
                          traceLinelt.getLine(),
                          traceLinelt.getText(),
                          traceLinelt.getType().charAt(0));
                    }
                  }
                }
              }
            }
          } catch (IllegalArgumentException e) {
            e.printStackTrace();
          } catch (IllegalAccessException e) {
            e.printStackTrace();
          }
          f.setAccessible(false);
        }
        // Adding a new entry in the map corresponding to the file name without its path
        String fileName = kloFile.get("file");
        String fileNameWithoutPath = extractFileName(fileName, "\\");
        if (fileName.equals(fileNameWithoutPath)) {
          fileNameWithoutPath = extractFileName(fileName, "/");
        }
        kloFile.store("fileNameOnly", fileNameWithoutPath);

        if (Integer.parseInt((String) kloFile.get("severitylevel")) > 3) {
          highSeverities.add(kloFile);
        } else {
          lowSeverities.add(kloFile);
        }

        errors.add(kloFile);

        agregateMap.put(kloFile.getKey(), kloFile);

        kloFiles.add(kloFile);

        i++;
      }

      if (!lowSeverities.isEmpty()) {
        report.setLowSeverities(lowSeverities);
      }

      if (!highSeverities.isEmpty()) {
        report.setHighSeverities(highSeverities);
      }

      report.setErrors(errors);

    } catch (JAXBException e) {
      e.printStackTrace();
    }

    return report;
  }