package sk.stuba.fiit.perconik.activity.serializers.ui.text; import java.util.Set; import org.eclipse.jdt.core.IClassFile; import sk.stuba.fiit.perconik.activity.serializers.AbstractConfigurableMultiSerializer; import sk.stuba.fiit.perconik.activity.serializers.resource.FileSerializer; import sk.stuba.fiit.perconik.activity.serializers.resource.PathSerializer; import sk.stuba.fiit.perconik.data.content.StructuredContent; import sk.stuba.fiit.perconik.eclipse.jdt.core.dom.NodeType; import sk.stuba.fiit.perconik.eclipse.jdt.ui.UnderlyingResource; import static sk.stuba.fiit.perconik.activity.serializers.Serializations.identifyObject; import static sk.stuba.fiit.perconik.data.content.StructuredContents.key; public final class UnderlyingResourceSerializer extends AbstractConfigurableMultiSerializer<UnderlyingResource<?>> { public UnderlyingResourceSerializer(final Option ... options) { super(options); } public UnderlyingResourceSerializer(final Iterable<Option> options) { super(options); } static void putUnderlyingResource(final StructuredContent content, final UnderlyingResource<?> resource, final Set<Option> options) { Object raw = resource.getRaw(); content.put(key("raw"), identifyObject(raw)); content.put(key("path"), new PathSerializer(options).serialize(resource.getPath().orNull())); content.put(key("file"), new FileSerializer(options).serialize(resource.getFile().orNull())); if (raw instanceof IClassFile) { IClassFile classFile = (IClassFile) raw; content.put(key("classFile", "type"), NodeType.valueOf(classFile.getElementType()).toString().toLowerCase()); content.put(key("classFile", "name"), classFile.getElementName()); content.put(key("classFile", "handle"), classFile.getHandleIdentifier()); content.put(key("classFile", "isOpen"), classFile.isOpen()); content.put(key("classFile", "isReadOnly"), classFile.isReadOnly()); } } @Override protected void put(final StructuredContent content, final UnderlyingResource<?> resource) { putUnderlyingResource(content, resource, this.options); } }