/* * Created on Dec 22, 2006 */ package ecologylab.serialization.types.scalar; import java.io.File; import java.io.IOException; import ecologylab.generic.StringTools; import ecologylab.io.Files; import ecologylab.serialization.ScalarUnmarshallingContext; import ecologylab.serialization.TranslationContext; import ecologylab.serialization.annotations.simpl_inherit; import ecologylab.serialization.types.CrossLanguageTypeConstants; /** * @author Zachary O. Toups (toupsz@cs.tamu.edu) */ @simpl_inherit public class FileType extends ReferenceType<File> implements CrossLanguageTypeConstants { /** */ public FileType() { super(File.class, JAVA_FILE, DOTNET_FILE, OBJC_FILE, null); } @Override public File getInstance(String value, String[] formatStrings, ScalarUnmarshallingContext scalarUnmarshallingContext) { File fileContext = (scalarUnmarshallingContext == null) ? null : scalarUnmarshallingContext .fileContext(); File file = (fileContext == null) ? new File(value) : new File(fileContext, value); try { return file.getCanonicalFile(); } catch (IOException e) { e.printStackTrace(); return file; } } @Override public String marshall(File instance, TranslationContext serializationContext) { File contextualizedInstance = instance; if (serializationContext != null) { File fileContext = serializationContext.fileContext(); if (fileContext != null) { String pathRelativeTo = StringTools.getPathRelativeTo(instance.getAbsolutePath(), fileContext.getAbsolutePath(), Files.sep); if (pathRelativeTo != null) return pathRelativeTo; } } return super.marshall(contextualizedInstance, serializationContext); } }