package com.netifera.platform.ui.spaces;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IPersistableElement;
import com.netifera.platform.api.model.ISpace;
import com.netifera.platform.api.probe.IProbe;
import com.netifera.platform.api.probe.IProbeManagerService;
import com.netifera.platform.ui.internal.spaces.Activator;
public class SpaceEditorInput implements IEditorInput {
public final static String ID = "com.netifera.platform.editors.spaces";
private final ISpace space;
private final IProbe probe;
public SpaceEditorInput(ISpace space) {
this.space = space;
this.probe = findProbeForSpace(space);
}
private IProbe findProbeForSpace(ISpace space) {
final IProbeManagerService probeManager = Activator.getDefault().getProbeManager();
if(probeManager == null) {
throw new RuntimeException("Cannot create editor because probe manager service is not available");
}
final IProbe probe = probeManager.getProbeById(space.getProbeId());
if(probe == null) {
throw new RuntimeException("Cannot create editor because probe associated with space does not exist.");
}
return probe;
}
public ISpace getSpace() {
return space;
}
public IProbe getProbeForSpace() {
return probe;
}
public boolean exists() {
return true;
}
public ImageDescriptor getImageDescriptor() {
return null;
}
public String getName() {
return space.getName();
}
public IPersistableElement getPersistable() {
return new IPersistableElement() {
public String getFactoryId() {
return ElementFactory.ID;
}
public void saveState(IMemento memento) {
memento.putInteger("space-id", (int) space.getId());
}
};
}
public String getToolTipText() {
return "Space: " + space.getName();
}
@Override
public boolean equals(Object o) {
if(!(o instanceof SpaceEditorInput)) {
return false;
}
return ((SpaceEditorInput)o).space.getId() == space.getId();
}
@Override
public int hashCode() {
return (int) (probe.getProbeId() ^ space.getId());
}
@SuppressWarnings("unchecked")
public Object getAdapter(Class adapter) {
return Platform.getAdapterManager().getAdapter(this, adapter);
}
}