package sk.stuba.fiit.perconik.activity.serializers.resource;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import sk.stuba.fiit.perconik.activity.serializers.AbstractConfigurableMultiSerializer;
import sk.stuba.fiit.perconik.activity.serializers.git.MappedResourceSerializer;
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.resource.ContainerSerializer.putContainer;
import static sk.stuba.fiit.perconik.activity.serializers.resource.FileSerializer.putFile;
import static sk.stuba.fiit.perconik.activity.serializers.resource.FolderSerializer.putFolder;
import static sk.stuba.fiit.perconik.activity.serializers.resource.ProjectSerializer.putProject;
import static sk.stuba.fiit.perconik.activity.serializers.resource.ResourceSerializer.putResource;
import static sk.stuba.fiit.perconik.activity.serializers.resource.RootSerializer.putRoot;
import static sk.stuba.fiit.perconik.data.content.StructuredContents.key;
abstract class AbstractResourceSerializer<T extends IResource> extends AbstractConfigurableMultiSerializer<T> {
AbstractResourceSerializer(final Option ... options) {
super(options);
}
AbstractResourceSerializer(final Iterable<Option> options) {
super(options);
}
@Override
protected final void put(final StructuredContent content, final T resource) {
putObjectIdentity(content, resource);
putResource(content, resource, this.options);
if (resource instanceof IContainer) {
putContainer(content, (IContainer) resource, this.options);
if (resource instanceof IWorkspaceRoot) {
putRoot(content, (IWorkspaceRoot) resource, this.options);
}
if (resource instanceof IProject) {
putProject(content, (IProject) resource, this.options);
}
if (resource instanceof IFolder) {
putFolder(content, (IFolder) resource, this.options);
}
}
if (resource instanceof IFile) {
putFile(content, (IFile) resource, this.options);
}
content.put(key("git"), new MappedResourceSerializer(this.options).serialize(resource));
}
}