/* * Copyright (c) 2013 Data Harmonisation Panel * * All rights reserved. This program and the accompanying materials are made * available under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the License, * or (at your option) any later version. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution. If not, see <http://www.gnu.org/licenses/>. * * Contributors: * Data Harmonisation Panel <http://www.dhpanel.eu> */ package eu.esdihumboldt.hale.ui.views.resources.internal; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ListMultimap; import de.fhg.igd.slf4jplus.ALogger; import de.fhg.igd.slf4jplus.ALoggerFactory; import eu.esdihumboldt.hale.common.core.io.IOAction; import eu.esdihumboldt.hale.common.core.io.extension.IOActionExtension; import eu.esdihumboldt.hale.common.core.io.project.model.Resource; /** * Content provider for project resources organized by action. * * @author Simon Templer */ public class ResourcesContentProvider implements ITreeContentProvider { private static final ALogger log = ALoggerFactory.getLogger(ResourcesContentProvider.class); private final ListMultimap<IOAction, Resource> resources = ArrayListMultimap.create(); @Override public void dispose() { resources.clear(); } @SuppressWarnings("unchecked") @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { resources.clear(); if (newInput instanceof Iterable<?>) { for (Resource resource : (Iterable<Resource>) newInput) { String actionId = resource.getActionId(); IOAction action = IOActionExtension.getInstance().get(actionId); if (action != null) { resources.put(action, resource); } else { log.warn("Resource is not displayed because action {} was not found", actionId); } } } } @Override public Object[] getElements(Object inputElement) { List<Object> result = new ArrayList<>(); result.add(ProjectToken.TOKEN); return result.toArray(); } @Override public Object[] getChildren(Object parentElement) { if (parentElement instanceof ProjectToken) { return resources.keySet().toArray(); } if (parentElement instanceof IOAction) { return resources.get((IOAction) parentElement).toArray(); } if (parentElement instanceof Resource) { Resource resource = (Resource) parentElement; List<Object> children = new ArrayList<>(); // location if (resource.getSource() != null) { children.add(resource.getSource()); } // content type // if (resource.getContentType() != null) { // children.add(resource.getContentType()); // } return children.toArray(); } return null; } @Override public Object getParent(Object element) { if (element instanceof Resource) { Resource resource = (Resource) element; return IOActionExtension.getInstance().get(resource.getActionId()); } if (element instanceof IOAction) { return ProjectToken.TOKEN; } return null; } @Override public boolean hasChildren(Object element) { if (element instanceof IOAction) { return resources.containsKey(element); } return element instanceof ProjectToken || element instanceof Resource; } }