package sk.stuba.fiit.perconik.activity.serializers.ui.selection;
import org.eclipse.jface.text.IBlockTextSelection;
import org.eclipse.jface.text.IMarkSelection;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeSelection;
import sk.stuba.fiit.perconik.activity.serializers.AbstractConfigurableMultiSerializer;
import sk.stuba.fiit.perconik.data.content.StructuredContent;
import static sk.stuba.fiit.perconik.activity.serializers.Serializations.putObjectIdentity;
import static sk.stuba.fiit.perconik.activity.serializers.ui.selection.BlockTextSelectionSerializer.putBlockTextSelection;
import static sk.stuba.fiit.perconik.activity.serializers.ui.selection.MarkSelectionSerializer.putMarkSelection;
import static sk.stuba.fiit.perconik.activity.serializers.ui.selection.SelectionSerializer.putSelection;
import static sk.stuba.fiit.perconik.activity.serializers.ui.selection.StructuredSelectionSerializer.putStructuredSelection;
import static sk.stuba.fiit.perconik.activity.serializers.ui.selection.TextSelectionSerializer.putTextSelection;
import static sk.stuba.fiit.perconik.activity.serializers.ui.selection.TreeSelectionSerializer.putTreeSelection;
abstract class AbstractSelectionSerializer<T extends ISelection> extends AbstractConfigurableMultiSerializer<T> {
AbstractSelectionSerializer(final Option ... options) {
super(options);
}
AbstractSelectionSerializer(final Iterable<Option> options) {
super(options);
}
@Override
protected final void put(final StructuredContent content, final T selection) {
putObjectIdentity(content, selection);
putSelection(content, selection);
if (selection instanceof IMarkSelection) {
putMarkSelection(content, (IMarkSelection) selection, this.options);
}
if (selection instanceof IStructuredSelection) {
putStructuredSelection(content, (IStructuredSelection) selection);
if (selection instanceof ITreeSelection) {
putTreeSelection(content, (ITreeSelection) selection);
}
}
if (selection instanceof ITextSelection) {
putTextSelection(content, (ITextSelection) selection);
if (selection instanceof IBlockTextSelection) {
putBlockTextSelection(content, (IBlockTextSelection) selection, this.options);
}
}
}
}