package org.goko.core.workspace.tree; import java.util.List; import org.apache.commons.collections.CollectionUtils; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; import org.goko.core.common.exception.GkException; import org.goko.core.log.GkLog; import org.goko.core.workspace.bean.ProjectContainerUiProvider; import org.goko.core.workspace.internal.Activator; public class GkProjectContentProvider implements ITreeContentProvider { /** LOG */ private static final GkLog LOG = GkLog.getLogger(GkProjectContentProvider.class); public GkProjectContentProvider() { } /** (inheritDoc) * @see org.eclipse.jface.viewers.IContentProvider#dispose() */ @Override public void dispose() { } /** (inheritDoc) * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object) */ @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { // TODO Auto-generated method stub } /** (inheritDoc) * @see org.eclipse.jface.viewers.ITreeContentProvider#getElements(java.lang.Object) */ @SuppressWarnings("unchecked") @Override public Object[] getElements(Object inputElement) { List<ProjectContainerUiProvider> containers = ((List<ProjectContainerUiProvider>)inputElement); return containers.toArray(); } /** (inheritDoc) * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object) */ @Override public Object[] getChildren(Object parentElement) { try { return getChildrenIntern(parentElement); } catch (GkException e) { LOG.error(e); } return null; } private Object[] getChildrenIntern(Object parentElement) throws GkException{ if(parentElement instanceof ProjectContainerUiProvider){ ProjectContainerUiProvider uiProvider = (ProjectContainerUiProvider) parentElement; if(uiProvider != null){ return uiProvider.getChildren(parentElement); } }else{ List<ProjectContainerUiProvider> uiProvider = Activator.getWorkspaceUIService().getProjectContainerUiProvider(); if(CollectionUtils.isNotEmpty(uiProvider)){ for (ProjectContainerUiProvider projectContainerUiProvider : uiProvider) { if(projectContainerUiProvider.providesContentFor(parentElement)){ return projectContainerUiProvider.getChildren(parentElement); } } } } return new Object[0]; } /** (inheritDoc) * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object) */ @Override public Object getParent(Object element) { if(element instanceof ProjectContainerUiProvider){ try { ProjectContainerUiProvider uiProvider = (ProjectContainerUiProvider)element; if(uiProvider != null){ return uiProvider.getParent(element); } } catch (GkException e) { LOG.error(e); } } return null; } /** (inheritDoc) * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object) */ @Override public boolean hasChildren(Object element) { try { return hasChildrenIntern(element); } catch (GkException e) { LOG.error(e); } return false; } private boolean hasChildrenIntern(Object element) throws GkException { if (element instanceof ProjectContainerUiProvider) { ProjectContainerUiProvider uiProvider = (ProjectContainerUiProvider) element; if (uiProvider != null) { return uiProvider.hasChildren(element); } } else { List<ProjectContainerUiProvider> uiProvider = Activator.getWorkspaceUIService().getProjectContainerUiProvider(); if (CollectionUtils.isNotEmpty(uiProvider)) { for (ProjectContainerUiProvider projectContainerUiProvider : uiProvider) { if (projectContainerUiProvider.providesContentFor(element)) { return projectContainerUiProvider.hasChildren(element); } } } } return false; } }