Exemplo n.º 1
0
  /**
   * @param scene the scene to filter
   * @param filter the filter to use
   * @param containsFilter true to exclusively use the arguments or false to exclude filter
   *     arguments
   * @return the filteredSequence
   */
  public static Scene filterScene(Scene scene, String[] filter, boolean containsFilter) {

    Sequence[] originalSequences = scene.getSequences();
    List<Sequence> sequenceList = new ArrayList<Sequence>();
    List<Sequence> aggregatedList = new ArrayList<Sequence>();

    for (int i = 0; i < originalSequences.length; i++) {

      Sequence tmpSequence = originalSequences[i].filterSequence(filter, containsFilter);
      sequenceList.add(tmpSequence);
    }

    if (originalSequences.length != sequenceList.size()) {

      System.out.println("ALARM Ungleiche Größe!");
    }
    //		aggregatedList = sequenceList;

    Sequence tmpBaseSequence = sequenceList.get(0);

    for (int i = 1; i < sequenceList.size(); i++) {

      if (tmpBaseSequence.equalTo(sequenceList.get(i))) {

        tmpBaseSequence.setLastTimestamp(sequenceList.get(i).getLastTimestamp());
        tmpBaseSequence.setNumberOfFrames(
            tmpBaseSequence.getNumberOfFrames() + sequenceList.get(i).getNumberOfFrames());

        if (sequenceList.get(i).getConcatenatedTypeNames().length != 0) {

          String[] tmpTypes = sequenceList.get(i).getConcatenatedTypeNames();

          for (int j = 0; j < tmpTypes.length; j++) {

            // increase age from previousSequence by numberOfFrames
            tmpBaseSequence.setElementOfTypeToAgeMap(
                tmpTypes[j],
                sequenceList.get(i).getNumberOfFrames()
                    + tmpBaseSequence.getElementOfTypeToAgeMap(tmpTypes[j]));
          }
        }

      } else {

        aggregatedList.add(tmpBaseSequence);
        tmpBaseSequence = sequenceList.get(i);
      }
    }

    aggregatedList.add(tmpBaseSequence);

    /*
     * added a final sequence to set all types to dying
     */
    Sequence nextToLastSeq = aggregatedList.get(aggregatedList.size() - 1);
    Sequence lastSequence = new Sequence();
    lastSequence.setDyingTypes(nextToLastSeq.getConcatenatedTypeNames());
    lastSequence.setFirstTimestamp(nextToLastSeq.getFirstTimestamp());
    lastSequence.setLastTimestamp(nextToLastSeq.getLastTimestamp());
    lastSequence.setNumberOfFrames(1);
    lastSequence.setTypeToAgeMap(nextToLastSeq.getTypeToAgeMap());

    aggregatedList.add(lastSequence);

    Sequence[] filteredSequences = new Sequence[aggregatedList.size()];
    filteredSequences = aggregatedList.toArray(filteredSequences);

    Scene filteredScene =
        new Scene(
            filteredSequences, scene.getNumberOfFrames(), scene.getStartTime(), scene.getEndTime());

    return filteredScene;
  }