package com.jdbernard.timeanalyzer public class TwoLevelCategorizationPlan implements CategorizationPlan { private static final def TWO_LEVEL_PATTERN = ~/(.+?):(.*)/ public boolean deservesNewCategory(Event event, List el) { return event ==~ TWO_LEVEL_PATTERN } public Category newCategory(Event event, List el) { def m = event.description =~ TWO_LEVEL_PATTERN return new TwoLevelCategory(m[0][1]) } public List findEntriesToRecategorize(Event event, List existingEntries) { def m = event.description =~ TWO_LEVEL_PATTERN return existingEntries.findAll { it.description ==~ /${m[0][1]}:.*/ } } }