package com.netifera.platform.ui.spaces.views; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.jface.viewers.Viewer; import com.netifera.platform.api.events.IEvent; import com.netifera.platform.api.events.IEventHandler; import com.netifera.platform.api.model.ISpace; import com.netifera.platform.api.model.ISpaceStatusChangeEvent; import com.netifera.platform.api.model.IWorkspace; import com.netifera.platform.ui.updater.StructuredViewerUpdater; public class SpaceListContentProvider implements IStructuredContentProvider, IEventHandler { private IWorkspace workspace; private StructuredViewerUpdater updater; public Object[] getElements(Object inputElement) { List<ISpace> spaces = new ArrayList<ISpace>( workspace.getAllSpaces()); Collections.sort(spaces, new Comparator<ISpace>() { public int compare(ISpace o1, ISpace o2) { if(o1.getId() > o2.getId()) { return 1; } else if(o1.getId() < o2.getId()) { return -1; } else { return 0; } } }); return spaces.toArray(); } public void dispose() { updater = null; if(workspace != null) { workspace.removeSpaceCreationListener(this); } } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { if(newInput instanceof IWorkspace) { /* if workspace change remove handler from old and add to new */ final IWorkspace workspace = (IWorkspace) newInput; if(this.workspace != workspace) { if(this.workspace != null) { this.workspace.removeSpaceCreationListener(this); } workspace.addSpaceCreationListener(this); this.workspace = workspace; } updater = StructuredViewerUpdater.get((StructuredViewer) viewer); } } public void handleEvent(final IEvent event) { if(event instanceof ISpaceStatusChangeEvent) { final ISpaceStatusChangeEvent spaceChange = (ISpaceStatusChangeEvent) event; updater.refresh(spaceChange.getSpace()); } } }