/// <summary>
        /// Only constructor
        /// </summary>
        /// <param name="identity">Derived class identity</param>
        /// <param name="derivedComponentType">Derived class Type</param>
        /// <param name="engineType">Runtime engine Type</param>
        /// <param name="useNativeDllArgument">Runtime engine requires location details of native engine DLL</param>
        public LinkableComponentV1Base(IIdentifiable identity, ExternalType derivedComponentType, ExternalType engineType, bool useNativeDllArgument)
            : base(identity, derivedComponentType, engineType, useNativeDllArgument)
        {
            // Null URI's cause problems so initialise to something wrong
            var uri = new Uri(@"http://sourceforge.net/projects/fluidearth/");
            var omiUri = new ArgumentUri(GetArgumentIdentity(Args.V1Omi), uri);

            // There is a design error should not have to add valueChanged in two ways here!

            omiUri.ValueChanged += new EventHandler<ArgumentBase.ValueChangedEventArgs>(omiUri_ValueChanged);

            Arguments.Add(omiUri);

            var argValue = Argument(GetArgumentIdentity(Args.V1Omi)).Value as ArgumentValueUri;

            argValue.ValueChanged += new EventHandler<ArgumentValueBase<Uri>.ValueChangedEventArgs>(OnArgOmiUriValueChanged);
        }
        protected virtual ArgumentUri InitialiseArguments(ILinkableComponentVersion1 component1, List<Utilities.Standard1.Argument1> args1)
        {
            if (component1 == null)
            {
                var uri = new Uri(@"http://sourceforge.net/projects/fluidearth/");
                var persistence = new ArgumentUri(GetArgumentIdentity(ArgsV1Wrapper.Persistence), uri);

                // For Uri's have to use a valid Url to initialise, then change to relevant value
                Arguments.Add(persistence);
                Arguments.Add(new ArgumentExternalType(GetArgumentIdentity(ArgsV1Wrapper.EngineExternalType),
                    new ExternalType(DocumentAccessor)));

                if (_includeUpdateTimeInterval)
                    Arguments.Add(new ArgumentTimeInterval(GetArgumentIdentity(ArgsV1Wrapper.UpdateTimeInterval),
                        new TimeInterval()));

                if (args1 != null)
                    foreach (var a1 in args1)
                        Arguments.Add(new ArgumentStandard1(a1));

                return persistence;
            }

            ArgumentTimeHorizon = new Time(
                component1.TimeHorizon.Start.ModifiedJulianDay,
                component1.TimeHorizon.End.ModifiedJulianDay);

            ExternalType component1Type = new ExternalType(DocumentAccessor);
            component1Type.Initialise(component1.GetType());

            var uriP = new Uri(
                DocumentAccessor.Uri
                    .LocalPath
                    .Substring(0, DocumentAccessor.Uri.LocalPath.LastIndexOf('.')) + Caption + "Persist.xml");

            var uriPersistence = new ArgumentUri(GetArgumentIdentity(ArgsV1Wrapper.Persistence), uriP);

            uriPersistence.ValueAsString =
                new Uri(
                    DocumentAccessor.Uri
                        .LocalPath
                        .Substring(0, DocumentAccessor.Uri.LocalPath.LastIndexOf('.')) + Caption + "Persist.xml")
                .AbsoluteUri;

            Arguments.Add(uriPersistence);
            Arguments.Add(new ArgumentExternalType(GetArgumentIdentity(ArgsV1Wrapper.EngineExternalType),
                component1Type));

            if (_includeUpdateTimeInterval)
                Arguments.Add(new ArgumentTimeInterval(GetArgumentIdentity(ArgsV1Wrapper.UpdateTimeInterval),
                    new TimeInterval()));

            foreach (var a1 in args1)
                Arguments.Add(new ArgumentStandard1(a1));

            return uriPersistence;
        }
        protected void ConstuctComponent(ILinkableComponentVersion1 component1,
            ArgumentUri uriPersistence,
            List<Utilities.Standard1.Argument1> args1)
        {
            try
            {
                _convertingFromV1 = true;

                Construct(component1, args1);

                Initialize();

                var uri = (uriPersistence.Value as ArgumentValueUri).Value;

                var xPersistence = new XDocument(Persist(DocumentAccessor));
                xPersistence.Save(uri.LocalPath);
            }
            finally
            {
                _convertingFromV1 = false;
            }
        }