package sharpen.xobotos.config; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import com.thoughtworks.xstream.annotations.XStreamImplicit; import sharpen.core.Configuration.NameMapping; import sharpen.xobotos.api.interop.NativeConfiguration; import sharpen.xobotos.config.xstream.IConfigurationFile; import java.util.ArrayList; import java.util.Collections; import java.util.List; @XStreamAlias(value="configuration") public final class ConfigFile implements IConfigurationFile { @XStreamAlias("source-info") private SourceInfo _sourceInfo; @XStreamImplicit(itemFieldName="map-namespace") private List<NameMapping> _mapNamespaces; @XStreamAlias("api-def") private String _apiDefFileName; @XStreamAlias("log-file") private LogFileEntry _logFile; @XStreamAlias("native-config") private NativeConfiguration _nativeConfig; private ConfigFile () { } private Object readResolve() { if (_sourceInfo == null) throw new RuntimeException("<source-info> element missing in config file!"); if (_mapNamespaces == null) _mapNamespaces = new ArrayList<NameMapping> (); if (_apiDefFileName == null) throw new RuntimeException("Missing <api-def> entry in config file!"); if ((_logFile != null) && (_logFile.path == null)) throw new RuntimeException("Invalid 'log-file' entry in config file!"); if (_nativeConfig == null) throw new RuntimeException("Missing <native-config> entry in config file!"); return this; } public LogFileEntry getLogFile() { return _logFile; } public SourceInfo getSourceInfo() { return _sourceInfo; } public List<NameMapping> getNamespaceMappings() { return Collections.unmodifiableList(_mapNamespaces); } public String getAPIDefinitionFileName() { return _apiDefFileName; } public NativeConfiguration getNativeConfig() { return _nativeConfig; } public static class LogFileEntry { public String path; @XStreamAsAttribute public boolean append; } }