package fi.otavanopisto.muikku.plugins.dnm.parser.structure; import java.util.HashMap; import java.util.List; import java.util.Map; import fi.otavanopisto.muikku.plugins.dnm.parser.structure.model.Folder; import fi.otavanopisto.muikku.plugins.dnm.parser.structure.model.Resource; import fi.otavanopisto.muikku.plugins.dnm.parser.structure.model.ResourceContainer; import fi.otavanopisto.muikku.plugins.dnm.parser.structure.model.Type; public class DeusNexDocumentImpl implements DeusNexDocument { public Folder getRootFolder() { return rootFolder; } public void setRootFolder(Folder rootFolder) { this.rootFolder = rootFolder; mapResources(this.rootFolder); mapParents(this.rootFolder); } @Override public Resource getResourceByNo(Integer no) { return resourceMap.get(no); } @Override public ResourceContainer getParent(Resource resource) { return (ResourceContainer) getResourceByNo(this.parents.get(resource.getNo())); } @Override public ResourceContainer getAncestorByType(Resource resource, Type type) { ResourceContainer parent = getParent(resource); while (parent != null && parent.getType() != type) { parent = getParent(parent); } return parent; } private void mapResources(Resource resource) { resourceMap.put(resource.getNo(), resource); if (resource instanceof ResourceContainer) { List<Resource> children = ((ResourceContainer) resource).getResources(); if (children != null) { for (Resource child : children) { mapResources(child); } } } } private void mapParents(Resource resource) { if (resource instanceof ResourceContainer) { List<Resource> children = ((ResourceContainer) resource).getResources(); if (children != null) { for (Resource child : children) { parents.put(child.getNo(), resource.getNo()); mapParents(child); } } } } private Folder rootFolder; private Map<Integer, Resource> resourceMap = new HashMap<>(); private Map<Integer, Integer> parents = new HashMap<>(); }