package org.xmind.ui.internal.outline.resource; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.eclipse.core.runtime.Assert; import org.xmind.core.ISheet; import org.xmind.core.ITopic; import org.xmind.core.ITopicExtension; import org.xmind.core.ITopicExtensionElement; public class AssigneeResourceForSheet extends AbstractIndexResource implements IAssigneeResource { private ISheet sheet; private Set<String> assignees = new HashSet<String>(); private Map<String, Set<ITopic>> assigneeToTopics = new HashMap<String, Set<ITopic>>(); public AssigneeResourceForSheet(ISheet sheet) { Assert.isNotNull(sheet); this.sheet = sheet; init(false); } private void init(boolean update) { if (update) { assignees.clear(); assigneeToTopics.clear(); } collectResourceForSheet(sheet); } public Object getSource() { return sheet; } public void reset(Object source, boolean update) { Assert.isNotNull(source); this.sheet = (ISheet) source; init(update); } public Set<String> getAssignees() { return assignees; } public Set<ITopic> getTopics(String assignee) { return assigneeToTopics.get(assignee); } protected void collectResourceForTopic(ITopic topic) { ITopicExtension ext = topic.getExtension("org.xmind.ui.taskInfo"); //$NON-NLS-1$ if (ext == null) return; ITopicExtensionElement content = ext.getContent(); List<ITopicExtensionElement> children = content .getChildren("assigned-to"); //$NON-NLS-1$ if (!children.isEmpty()) { for (ITopicExtensionElement element : children) { String assignee = element.getTextContent(); if (assigneeToTopics.containsKey(assignee)) { Set<ITopic> assignedTopics = assigneeToTopics.get(assignee); if (assignedTopics == null) { assignedTopics = new HashSet<ITopic>(); assigneeToTopics.put(assignee, assignedTopics); } assignedTopics.add(topic); } else { assignees.add(assignee); Set<ITopic> assignedTopics = new HashSet<ITopic>(); assignedTopics.add(topic); assigneeToTopics.put(assignee, assignedTopics); } } } } }