(prop :Map entries (new Map)) (method :Void process [:Archive archive] (doFor e (entries.iterator) (processEntry archive e))) (defNew [&prop :EntryChecker canProcessEntry &prop :EntryProcessor processEntry] []) (prop &mut :Null onRemoveEntry) (method :Void checkEntryInOrOut [:Archive archive :Entry e] (if (canProcessEntry archive e) (dictSet entries e.id e) (when (entries.exists e.id) (entries.remove e.id) (when onRemoveEntry (onRemoveEntry archive e))))) // TODO systems may need access to a UI or ArchiveController