(prop :Map entries (new Map)) (method :Void process [:Archive archive &opt :ArchiveUI ui] (doFor e (entries.iterator) (processEntry archive e ui))) (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)))))