package org.genmymodel.plugin.resource.explorer; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.ui.IViewSite; import org.genmymodel.common.account.GMMCredential; import org.genmymodel.common.api.GMMAPIRestClient; import org.genmymodel.common.api.ProjectBinding; /** * * @author Ali Gourch */ public class ViewContentProvider implements IStructuredContentProvider, ITreeContentProvider { protected TreeParent invisibleRoot; protected List<List<Object>> users = new ArrayList<List<Object>>(); protected GMMAPIRestClient client; protected IViewSite site; public ViewContentProvider(GMMAPIRestClient client, IViewSite site) { this.client = client; this.site = site; } public void inputChanged(Viewer v, Object oldInput, Object newInput) { } public void dispose() { } public Object[] getElements(Object parent) { if (parent.equals(site)) { if (invisibleRoot == null) initialize(); return getChildren(invisibleRoot); } return getChildren(parent); } public Object getParent(Object child) { if (child instanceof TreeObject) { return ((TreeObject) child).getParent(); } return null; } public Object[] getChildren(Object parent) { if (parent instanceof TreeParent) { return ((TreeParent) parent).getChildren(); } return new Object[0]; } public boolean hasChildren(Object parent) { if (parent instanceof TreeParent) return ((TreeParent) parent).hasChildren(); return false; } protected void initialize() { TreeParent root = new TreeParent("Users"); for (int i = 0; i < users.size(); i++) { TreeParent parent = new TreeParent(((GMMCredential) users.get(i) .get(0)).getUsername()); TreeParent publicChild = new TreeParent("public"); TreeParent privateChild = new TreeParent("private"); TreeParent sharedChild = new TreeParent("shared"); parent.addChild(publicChild); parent.addChild(privateChild); parent.addChild(sharedChild); parent.setCredential((GMMCredential) users.get(i).get(0)); ProjectBinding[] sharedProjects = client .GETSharedProjects((GMMCredential) users.get(i).get(0)); for (ProjectBinding project : sharedProjects) { TreeObject child = new TreeObject(project.getName()); child.setCredential((GMMCredential) users.get(i).get(0)); child.setProject(project); sharedChild.addChild(child); } for (int j = 1; j < users.get(i).size(); j++) { TreeObject child = new TreeObject(((ProjectBinding) users .get(i).get(j)).getName()); child.setCredential((GMMCredential) users.get(i).get(0)); child.setProject((ProjectBinding) users.get(i).get(j)); if (((ProjectBinding) users.get(i).get(j)).isPublic()) { publicChild.addChild(child); } else { privateChild.addChild(child); } } root.addChild(parent); } invisibleRoot = new TreeParent(""); invisibleRoot.addChild(root); } public void addElement(ArrayList<Object> element) { users.add(element); } public boolean removeElement(String element) { for (int i = 0; i < users.size(); i++) { if (((GMMCredential) users.get(i).get(0)).getUsername().equals( element)) { return users.remove(users.get(i)); } } return false; } }