public void AddByAasPackage(PackageCentral packageCentral, AdminShellPackageEnv env, string fn)
        {
            // access
            if (env == null)
            {
                return;
            }

            // ok, add
            var fi = PackageContainerFactory.GuessAndCreateFor(
                packageCentral,
                location: fn,
                fullItemLocation: fn,
                overrideLoadResident: false,
                containerOptions: PackageContainerOptionsBase.CreateDefault(Options.Curr));

            if (fi is PackageContainerRepoItem ri)
            {
                fi.Env = env;
                ri.CalculateIdsTagAndDesc();
                ri.VisualState = PackageContainerRepoItem.VisualStateEnum.ReadFrom;
                ri.VisualTime  = 2.0;
                this.Add(ri);
            }
        }
Esempio n. 2
0
 public PackageContainerNetworkHttpFile(
     PackageCentral packageCentral,
     string sourceFn, PackageContainerOptionsBase containerOptions = null)
     : base(packageCentral)
 {
     Init();
     SetNewLocation(sourceFn);
     if (containerOptions != null)
     {
         ContainerOptions = containerOptions;
     }
 }
        public static PackageContainerBase GuessAndCreateFor(
            PackageCentral packageCentral,
            string location,
            string fullItemLocation,
            bool overrideLoadResident,
            PackageContainerBase takeOver                = null,
            PackageContainerListBase containerList       = null,
            PackageContainerOptionsBase containerOptions = null,
            PackCntRuntimeOptions runtimeOptions         = null)
        {
            var task = Task.Run(() => GuessAndCreateForAsync(
                                    packageCentral, location, fullItemLocation, overrideLoadResident,
                                    takeOver, containerList, containerOptions, runtimeOptions));

            return(task.Result);
        }
Esempio n. 4
0
        public bool Load(
            PackageCentral packageCentral,
            string location,
            string fullItemLocation,
            bool overrideLoadResident,
            PackageContainerOptionsBase containerOptions = null,
            PackCntRuntimeOptions runtimeOptions         = null)
        {
            try
            {
                // close old one
                if (Container != null)
                {
                    if (Container.IsOpen)
                    {
                        Container.Close();
                    }
                    Container = null;
                }

                // figure out, what to load
                var task = Task.Run(async() => await PackageContainerFactory.GuessAndCreateForAsync(
                                        packageCentral,
                                        location,
                                        fullItemLocation,
                                        overrideLoadResident,
                                        null, null,
                                        containerOptions,
                                        runtimeOptions));
                var guess = task.Result;

                if (guess == null)
                {
                    return(false);
                }

                // success!
                Container = guess;
                return(true);
            }
            catch (Exception ex)
            {
                throw new PackageCentralException(
                          $"PackageCentral: while performing load from {location} " +
                          $"at {AdminShellUtil.ShortLocation(ex)} gave: {ex.Message}", ex);
            }
        }
        public static async Task <PackageContainerLocalFile> CreateAndLoadAsync(
            PackageCentral packageCentral,
            string location,
            string fullItemLocation,
            bool overrideLoadResident,
            PackageContainerBase takeOver = null,
            PackageContainerOptionsBase containerOptions = null,
            PackCntRuntimeOptions runtimeOptions         = null)
        {
            var res = new PackageContainerLocalFile(
                CopyMode.Serialized, takeOver,
                packageCentral, location, containerOptions);

            if (overrideLoadResident || true == res.ContainerOptions?.LoadResident)
            {
                await res.LoadFromSourceAsync(fullItemLocation, runtimeOptions);
            }

            return(res);
        }
Esempio n. 6
0
        //
        // Constructor
        //

        public static PackageContainerOptionsBase CreateDefault(
            OptionsInformation opts,
            bool loadResident = false)
        {
            // first act
            var res = new PackageContainerOptionsBase();

            res.LoadResident = loadResident;
            if (opts == null)
            {
                return(res);
            }

            // now take some user options, as well
            res.StayConnected = opts.DefaultStayConnected;
            res.UpdatePeriod  = Math.Max(OptionsInformation.MinimumUpdatePeriod, opts.DefaultUpdatePeriod);

            // ok
            return(res);
        }
Esempio n. 7
0
 public PackageContainerNetworkHttpFile(CopyMode mode, PackageContainerBase other,
                                        PackageCentral packageCentral = null,
                                        string sourceUri = null, PackageContainerOptionsBase containerOptions = null)
     : base(mode, other, packageCentral)
 {
     if ((mode & CopyMode.Serialized) > 0 && other != null)
     {
     }
     if ((mode & CopyMode.BusinessData) > 0 && other is PackageContainerNetworkHttpFile o)
     {
         sourceUri = o.Location;
     }
     if (sourceUri != null)
     {
         SetNewLocation(sourceUri);
     }
     if (containerOptions != null)
     {
         ContainerOptions = containerOptions;
     }
 }
Esempio n. 8
0
        public async Task <List <PackageContainerRepoItem> > GenerateRepositoryFromEndpointAsync()
        {
            // access
            if (!IsValid())
            {
                throw new PackageConnectorException("PackageConnector::GenerateRepositoryFromEndpoint() " +
                                                    "connection not valid!");
            }

            // results
            var res = new List <PackageContainerRepoItem>();

            // Log
            Log.Singleton.Info($"Building repository items for aas-list from {this.ToString()} ..");

            // sync-query for the list
            var aasItems = new List <ListAasItem>();

            try
            {
                if (OpenIDClient.auth)
                {
                    var responseAuth = _client.GetAsync("/authserver").Result;
                    if (responseAuth.IsSuccessStatusCode)
                    {
                        var content = responseAuth.Content.ReadAsStringAsync().Result;
                        if (content != null && content != "")
                        {
                            OpenIDClient.authServer = content;
                            var response2 = await OpenIDClient.RequestTokenAsync(null);

                            OpenIDClient.token = response2.AccessToken;
                            OpenIDClient.auth  = false;
                        }
                    }
                }

                if (OpenIDClient.token != "")
                {
                    _client.SetBearerToken(OpenIDClient.token);
                }

                // query
                var listAasResponse = await _client.GetAsync(
                    StartQuery("server", "listaas"));

                listAasResponse.EnsureSuccessStatusCode();
                var listAasString = await listAasResponse.Content.ReadAsStringAsync();

                // get some structures
                dynamic listAas = Newtonsoft.Json.Linq.JObject.Parse(listAasString);
                foreach (var li in listAas.aaslist)
                {
                    string line = "" + li;
                    var    arr  = line.Trim().Split(new[] { " : " }, StringSplitOptions.RemoveEmptyEntries);
                    if (arr.Length == 4)
                    {
                        aasItems.Add(new ListAasItem()
                        {
                            Index      = arr[0].Trim(),
                            AasIdShort = arr[1].Trim(),
                            AasId      = arr[2].Trim(),
                            Fn         = arr[3].Trim()
                        });
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Singleton.Error(ex, $"when parsing /server/listaas/ for {this.ToString()}");
            }

            // go thru the list
            foreach (var aasi in aasItems)
            {
                try
                {
                    // query
                    var x = await GetAasAssetCore(aasi.Index);

                    if (x.Item1 == null || x.Item2 == null)
                    {
                        Log.Singleton.Error($"when retrieving /aas/{aasi.Index}/, some null contents for AAS or" +
                                            $"Asset were found.");
                    }

                    // file item
                    var fi = new PackageContainerRepoItem()
                    {
                        ContainerOptions = PackageContainerOptionsBase.CreateDefault(Options.Curr),
                        Location         = CombineQuery(_client.BaseAddress.ToString(), _endPointSegments,
                                                        "server", "getaasx", aasi.Index),
                        Description = $"\"{"" + x.Item1?.idShort}\",\"{"" + x.Item2?.idShort}\"",
                        Tag         = "" + AdminShellUtil.ExtractPascalCasingLetters(x.Item1?.idShort).SubstringMax(0, 3)
                    };
                    fi.AasIds.Add("" + x.Item1?.identification?.id);
                    fi.AssetIds.Add("" + x.Item2?.identification?.id);
                    res.Add(fi);
                }
                catch (Exception ex)
                {
                    Log.Singleton.Error(ex, $"when parsing index {aasi.Index}");
                }
            }

            // return results
            return(res);
        }
        public static async Task <PackageContainerBase> Demo(
            PackageCentral packageCentral,
            string location,
            bool overrideLoadResident,
            PackageContainerOptionsBase containerOptions = null,
            PackCntRuntimeOptions ro = null)
        {
            // Log location
            ro?.Log?.Info($"Perform Demo() for location {location}");

            // ask for a list
            var li1 = new List <AnyUiDialogueListItem>();

            li1.Add(new AnyUiDialogueListItem("AAAAAAAAAAAAAAAAAAAAAAAAAAA", "A"));
            li1.Add(new AnyUiDialogueListItem("bbbbbbbbbbbb", "B"));
            li1.Add(new AnyUiDialogueListItem("CCCCCCCCCCCCCCCCCC  CCCCC", "C"));

            var waitLi1 = new TaskCompletionSource <AnyUiDialogueListItem>();

            ro?.AskForSelectFromList?.Invoke("Testselect", li1, waitLi1);
            var xx = await waitLi1.Task;

            ro?.Log?.Info($".. selected item is {"" + xx?.Text}");

            // ask for a list
            var li2 = new List <AnyUiDialogueListItem>();

            li2.Add(new AnyUiDialogueListItem("111111111", "A"));
            li2.Add(new AnyUiDialogueListItem("222222222222222222222222", "B"));
            li2.Add(new AnyUiDialogueListItem("3333333333333  3333", "C"));

            var waitLi2 = new TaskCompletionSource <AnyUiDialogueListItem>();

            ro?.AskForSelectFromList?.Invoke("Testselect", li2, waitLi2);
            var xy = await waitLi2.Task;

            ro?.Log?.Info($".. selected item is {"" + xy?.Text}");

            // ask for credentials
            var waitCre = new TaskCompletionSource <PackageContainerCredentials>();

            ro?.AskForCredentials?.Invoke("Fill user credentials", waitCre);
            var xz = await waitCre.Task;

            ro?.Log?.Info($".. credentials are {"" + xz?.Username} and {"" + xz?.Password}");

            // debug some important blocks of text
            ro?.Log?.Info(StoredPrint.Color.Yellow, "Showing fingerprint:");
            var sum = "";

            for (int i = 0; i < 1000; i++)
            {
                sum += $"{i} ";
            }
            ro?.Log?.Info($"Showing fingerprint: {sum}");

            // done
            ro?.Log?.Info($".. demo loading from internet ..");
            return(await PackageContainerNetworkHttpFile.CreateAndLoadAsync(
                       packageCentral,
                       "http://admin-shell-io.com:51310/server/getaasx/0",
                       "http://admin-shell-io.com:51310/server/getaasx/0",
                       // "http://localhost:51310/server/getaasx/0",
                       overrideLoadResident, null, null, containerOptions, ro));
        }
        public static async Task <PackageContainerBase> GuessAndCreateForAsync(
            PackageCentral packageCentral,
            string location,
            string fullItemLocation,
            bool overrideLoadResident,
            PackageContainerBase takeOver                = null,
            PackageContainerListBase containerList       = null,
            PackageContainerOptionsBase containerOptions = null,
            PackCntRuntimeOptions runtimeOptions         = null)
        {
            // access
            if (location == null)
            {
                return(null);
            }
            var ll = location.ToLower();

            // guess
            runtimeOptions?.Log?.Info($"Trying to guess package container for {location} ..");
            var guess = PackageContainerGuess.FromLocation(location, runtimeOptions);

            if (guess == null)
            {
                runtimeOptions?.Log?.Info("Aborting");
                return(null);
            }

            // start
            runtimeOptions?.Log?.Info($".. with containerOptions = {containerOptions?.ToString()}");

            // TODO (MIHO, 2021-02-01): check, if demo option is still required
            if (ll.Contains("/demo"))
            {
                return(await Demo(packageCentral, location,
                                  overrideLoadResident, containerOptions, runtimeOptions));
            }

            // starts with http ?
            if (guess.GuessedType == typeof(PackageContainerNetworkHttpFile))
            {
                var cnt = await PackageContainerNetworkHttpFile.CreateAndLoadAsync(
                    packageCentral, location, fullItemLocation,
                    overrideLoadResident, takeOver, containerList,
                    containerOptions, runtimeOptions);

                if (cnt.ContainerOptions.StayConnected &&
                    guess.AasId.HasContent() &&
                    guess.HeadOfPath.HasContent())
                {
                    cnt.ConnectorPrimary = new PackageConnectorHttpRest(cnt,
                                                                        new Uri(guess.HeadOfPath + "/aas/" + guess.AasId));
                }

                return(cnt);
            }

            // check FileInfo for (possible?) local file
            FileInfo fi = null;

            try
            {
                fi = new FileInfo(location);
            }
            catch (Exception ex)
            {
                LogInternally.That.SilentlyIgnoredError(ex);
            }

            // if file, try to open (might throw exceptions!)
            if (fi != null)
            {
                // seems to be a valid (possible) file
                return(await PackageContainerLocalFile.CreateAndLoadAsync(
                           packageCentral, location, fullItemLocation, overrideLoadResident, takeOver, containerOptions));
            }

            // no??
            runtimeOptions?.Log?.Info($".. no any possible option for package container found .. Aborting!");
            return(null);
        }