Exemplo n.º 1
0
        public void Read()
        {
            var r = new System.IO.StringReader(@"
# this is a comment
       argument1 argument2

argument 3
""argument 4""

""Quoted argument with a \"" character""

<<EndOfText
This
is
a
multiline
string<<EndOfText

");
            var a = ArgumentFile.Read(r).ToArray();

            Assert.AreEqual("argument1", a[0]);
            Assert.AreEqual("argument2", a[1]);
            Assert.AreEqual("argument", a[2]);
            Assert.AreEqual("3", a[3]);
            Assert.AreEqual("argument 4", a[4]);
            Assert.AreEqual("Quoted argument with a \" character", a[5]);
            Assert.AreEqual(@"This
is
a
multiline
string"
                            , a[6]);
        }
            public static List<OpenMI.Standard2.IArgument> ToArgument2(Argument1 arg1)
            {
                string key = arg1.Key;
                string value = arg1.Value;
                string description = arg1.Description;
                bool readOnly = arg1.ReadOnly;

                string[] parts = key.Split('.');

                var args = new List<OpenMI.Standard2.IArgument>();

                bool sdk1Arg = parts[0] == "FluidEarth_SDK" || parts[0] == "OpenWEB_SDK";

                if (parts.Length == 3 && sdk1Arg)
                {
                    Identity identity = new Identity(key, parts[2], description);

                    switch (parts[1])
                    {
                        case "ArgBool":
                            args.Add(new Argument<bool>(identity,
                                System.Convert.ToBoolean(value), false, readOnly));
                            break;
                        case "ArgInt":
                            args.Add(new Argument<int>(identity,
                                System.Convert.ToInt32(value), false, readOnly));
                            break;
                        case "ArgDouble":
                        case "ArgJulian":
                            args.Add(new Argument<double>(identity,
                                System.Convert.ToDouble(value), false, readOnly));
                            break;
                        case "ArgResource":
                        case "ArgFile":
                            var file = new ArgumentFile(identity);
                            file.IsReadOnly = readOnly;
                            file.ValueAsString = value;
                            args.Add(file);
                            break;
                        case "ArgPath":
                            var folder = new ArgumentFolder(identity);
                            folder.IsReadOnly = readOnly;
                            folder.ValueAsString = value;
                            args.Add(folder);
                            break;
                        case "ArgEnum":
                            if (parts[2] == "LoggerSeverity")
                            {
                                switch (value)
                                {
                                    case "Error":
                                    case "Warning":
                                        break;
                                    case "Event":
                                    case "Status":
                                        args.Add(new Argument<bool>(new Identity(
                                            "FluidEarth2.Sdk.BaseComponent.TraceStatus",
                                            "TraceStatus", string.Empty),
                                            true, false, readOnly));
                                        break;
                                    case "Progress":
                                    case "Debug1":
                                    case "Debug2":
                                        args.Add(new Argument<bool>(new Identity(
                                            "FluidEarth2.Sdk.BaseComponent.TraceStatus",
                                            "TraceStatus", string.Empty),
                                            true, false, readOnly));
                                        args.Add(new Argument<bool>(new Identity(
                                            "FluidEarth2.Sdk.BaseComponent.TraceConvertors",
                                            "TraceConvertors", string.Empty),
                                            true, false, readOnly));
                                        break;
                                    default:
                                        throw new NotImplementedException();
                                }
                            }
                            break;
                        default:
                            args.Add(new Argument<string>(new Identity(key, key, description),
                                value, false, readOnly));
                            break;
                    }
                }
                else if (parts.Length == 4 && sdk1Arg && parts[1] == "Remoting")
                {
                    switch (parts[3])
                    {
                        case "Protocol":
                            switch (value)
                            {
                                case "HTTP":
                                    args.Add(new Argument<RemotingProtocol>(new Identity(
                                        "FluidEarth2.Sdk.RemoteData.Protocol",
                                        "RemoteData.Protocol", string.Empty),
                                        RemotingProtocol.http, false, readOnly));
                                    break;
                                case "TCP":
                                    args.Add(new Argument<RemotingProtocol>(new Identity(
                                        "FluidEarth2.Sdk.RemoteData.Protocol",
                                        "RemoteData.Protocol", string.Empty),
                                        RemotingProtocol.tcp, false, readOnly));
                                    break;
                                case "IPC":
                                    args.Add(new Argument<RemotingProtocol>(new Identity(
                                        "FluidEarth2.Sdk.RemoteData.Protocol",
                                        "RemoteData.Protocol", string.Empty),
                                        RemotingProtocol.ipc, false, readOnly));
                                    break;
                                default:
                                    throw new NotImplementedException();
                            }
                            break;
                        case "Host":
                            args.Add(new Argument<string>(new Identity(
                                "FluidEarth2.Sdk.RemoteData.Host",
                                "RemoteData.Host", string.Empty),
                                value, false, readOnly));
                            break;
                        case "Port":
                            args.Add(new Argument<int>(new Identity(
                                "FluidEarth2.Sdk.RemoteData.Port",
                                "RemoteData.Port", string.Empty),
                                System.Convert.ToInt32(value), false, readOnly));
                            break;
                        case "UniqueId":
                            args.Add(new Argument<string>(new Identity(
                                key, key, description),
                                value, false, readOnly));
                            break;
                        case "Uri":
                            args.Add(new Argument<Uri>(new Identity(
                                "FluidEarth2.Sdk.RemoteData.Uri",
                                "RemoteData.Uri", string.Empty),
                                new Uri(value), false, readOnly));
                            break;
                        case "ServerProcessCreate":
                            args.Add(new Argument<RemotingProtocol>(new Identity(
                                "FluidEarth2.Sdk.RemoteData.Protocol",
                                "RemoteData.Protocol", string.Empty),
                                RemotingProtocol.ipcAuto, false, readOnly));
                            break;
                        case "ServerConfigFile":
                            args.Add(new Argument<string>(new Identity(
                                key, key, description),
                                value, false, readOnly));
                            break;
                        case "ConnectionSleep":
                            args.Add(new Argument<int>(new Identity(
                                "FluidEarth2.Sdk.RemoteData.ConnectionSleep",
                                "RemoteData.ConnectionSleep", string.Empty),
                                System.Convert.ToInt32(value), false, readOnly));
                            break;
                        case "TimeOut":
                            args.Add(new Argument<uint>(new Identity(
                                "FluidEarth2.Sdk.RemoteData.ConnectionTimeOut",
                                "RemoteData.ConnectionTimeOut", string.Empty),
                                System.Convert.ToUInt32(value), false, readOnly));
                            break;
                        default:
                            args.Add(new Argument<string>(new Identity(
                                key, key, description),
                                value, false, readOnly));
                            break;
                    }
                }
                else
                    args.Add(new Argument<string>(new Identity(
                        key, key, description),
                        value, false, readOnly));

                return args;
            }