/** * @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; }