コード例 #1
0
        public override ParallelSendResult <AlunoDisciplinaViewModel, GetEnrolmentsByUserIdResponse> SendAll()
        {
            Result = new ParallelSendResult <AlunoDisciplinaViewModel, GetEnrolmentsByUserIdResponse>();

            IEnumerable <AlunoDisciplinaViewModel> data = GetData("");

            if (data == null)
            {
                return(Result);
            }

            var factory = new HttpClientFactory();

            HttpClient                    = factory.CreateMoodleHttpClient();
            CreateCourseClient            = new CreateCourseClient();
            CreateCategoryClient          = new CreateCategoryClient();
            CreateUserClient              = new CreateUserClient();
            GetCategoryByNameClient       = new GetCategoryByNameClient();
            GetCourseByNameClient         = new GetCourseByNameClient();
            GetUserByUsernameClient       = new GetUserByUsernameClient();
            EnrolmentClient               = new EnrolmentClient();
            GetEnrolementsrByUserIdClient = new GetEnrolementsrByUserIdClient();

            CreateCourseClient.AddHttpClient(HttpClient);
            CreateCategoryClient.AddHttpClient(HttpClient);
            CreateUserClient.AddHttpClient(HttpClient);
            GetCategoryByNameClient.AddHttpClient(HttpClient);
            GetCourseByNameClient.AddHttpClient(HttpClient);
            GetUserByUsernameClient.AddHttpClient(HttpClient);
            EnrolmentClient.AddHttpClient(HttpClient);
            GetEnrolementsrByUserIdClient.AddHttpClient(HttpClient);

            foreach (var modalidade in Modalidades)
            {
                ModalidadeAtual = modalidade;

                this.AddMoodleBaseUrl(modalidade.MoodleUrl)
                .AddMoodleToken(modalidade.MoodleToken)
                .AddMoodleGetInfoServiceToken(modalidade.MoodleGetInfoServiceToken)
                .AddMoodleServiceUrl(modalidade.MoodleServiceUrl);

                this.AddMoodleCategoryParent(modalidade.MoodleCategoryParent)
                .AddMoodleDescriptionFormat(modalidade.MoodleDescriptionFormat);

                var alunos = data.Where(x => x.Aluno.IdModalidade == modalidade.IdModalidade).ToArray();

                if (UseParallelism)
                {
                    ProcessWithParallelism(alunos, null, null);
                }
                else
                {
                    ProcessWithRegularForeach(alunos, null, null);
                }
            }

            return(Result);
        }
コード例 #2
0
 public static long?GetMoodleCursoId
 (
     this Curso item,
     Modalidade modalidade,
     GetCategoryByNameClient client = null,
     HttpClient httpClient          = null
 )
 {
     return(InternalGetMoodleCursoId(item.CursoDescricao, modalidade, client, httpClient));
 }
コード例 #3
0
        public MoodleFromToCacheAdapter FillCategories()
        {
            var cursos = Service.GetCursosBySemestre(Configuration.SemestreAtual);

            if (cursos == null)
            {
                return(this);
            }


            var factory = new HttpClientFactory();

            using (var httpClient = factory.CreateMoodleHttpClient())
            {
                var getCategoryClient = new GetCategoryByNameClient();

                // Sharing the same HttpClient instance to improve performance
                getCategoryClient.AddHttpClient(httpClient);

                foreach (var modalidade in Modalidades)
                {
                    IEnumerable <CategoryResponse> moodleCategories = GetMoodleCategories(modalidade, httpClient);


                    if (moodleCategories?.Count() == 0)
                    {
                        continue;
                    }

                    getCategoryClient
                    .AddBaseUrl(modalidade.MoodleUrl)
                    .AddToken(modalidade.MoodleGetInfoServiceToken)
                    .AddServiceUrl(modalidade.MoodleServiceUrl);

                    var filtered = cursos.Where(x => x.IdModalidade == modalidade.IdModalidade).ToArray();

                    filtered.AsParallel()
                    .WithExecutionMode(ParallelExecutionMode.ForceParallelism)
                    .ForAll((item) =>
                    {
                        CategoryResponse moodleCategory = moodleCategories.Where(x => x.Name.ToLower() == item.CursoDescricao.ToLower())
                                                          .FirstOrDefault();

                        if (moodleCategory != null)
                        {
                            MoodleFromToCache.AddCategory(modalidade.IdModalidade, item.CursoDescricao, moodleCategory.Id);
                        }
                    });
                }
            }

            return(this);
        }
コード例 #4
0
        public override ParallelSendResult <Disciplina, CourseResponse> SendAll()
        {
            Result = new ParallelSendResult <Disciplina, CourseResponse>();
            System.GC.Collect();

            IEnumerable <Disciplina> data = GetData("");

            if (data == null)
            {
                return(Result);
            }

            var factory = new HttpClientFactory();

            using (var httpClient = factory.CreateMoodleHttpClient())
            {
                GetCategoryByNameClient = new GetCategoryByNameClient();
                var createClient = new CreateCourseClient();
                var verifyClient = new GetCourseByNameClient();

                // Sharing the same HttpClient instance to improve performance
                verifyClient.AddHttpClient(httpClient);
                createClient.AddHttpClient(httpClient);
                GetCategoryByNameClient.AddHttpClient(httpClient);

                foreach (var modalidade in Modalidades)
                {
                    ModalidadeAtual = modalidade;

                    this.AddMoodleBaseUrl(modalidade.MoodleUrl)
                    .AddMoodleToken(modalidade.MoodleToken)
                    .AddMoodleGetInfoServiceToken(modalidade.MoodleGetInfoServiceToken)
                    .AddMoodleServiceUrl(modalidade.MoodleServiceUrl);

                    BuildMoodleClient(createClient, MoodleTokenType.OfficialMoodleApiFunctions);
                    BuildMoodleClient(verifyClient, MoodleTokenType.LocalMoodleExternalApiGetInfoToken);
                    BuildMoodleClient(GetCategoryByNameClient, MoodleTokenType.LocalMoodleExternalApiGetInfoToken);

                    var filtered = data.Where(x => x.IdModalidade == modalidade.IdModalidade).ToArray();

                    if (UseParallelism)
                    {
                        ProcessWithParallelism(filtered, createClient, verifyClient);
                    }
                    else
                    {
                        ProcessWithRegularForeach(filtered, createClient, verifyClient);
                    }
                }
            }

            return(Result);
        }
コード例 #5
0
        private static long?InternalGetMoodleCursoId
        (
            string cursoDescricao,
            Modalidade modalidade,
            GetCategoryByNameClient client = null,
            HttpClient httpClient          = null
        )
        {
            long?moodleCategoryId = MoodleFromToCache.GetCachedMoodleCategory(modalidade.IdModalidade, cursoDescricao);

            if (moodleCategoryId.HasValue)
            {
                return(moodleCategoryId.Value);
            }

            GetCategoryByNameClient getClient = client;

            if (getClient == null)
            {
                getClient = new GetCategoryByNameClient();
            }

            if (httpClient != null)
            {
                getClient.AddHttpClient(httpClient);
            }

            getClient.AddBaseUrl(modalidade.MoodleUrl)
            .AddServiceUrl(modalidade.MoodleServiceUrl)
            .AddToken(modalidade.MoodleGetInfoServiceToken);

            GetByNameRequest request = new GetByNameRequest()
            {
                Name = cursoDescricao
            };

            Task <CategoryResponse> task = getClient.Post(request);

            task.Wait();

            CategoryResponse response = task.Result;

            if (response?.Id > 0)
            {
                MoodleFromToCache.AddCategory(modalidade.IdModalidade, cursoDescricao, response.Id);
            }

            return(response?.Id);
        }
コード例 #6
0
        public override CategoryResponse VerifyIfExists(string filter)
        {
            GetCategoryByNameClient client = new GetCategoryByNameClient();

            BuildMoodleClient(client, MoodleTokenType.LocalMoodleExternalApiGetInfoToken);

            GetByNameRequest request = new GetByNameRequest()
            {
                Name = filter
            };

            Task <CategoryResponse> task = client.Post(request);

            task.Wait();

            LastUrl = client.LastUrl;
            CategoryResponse response = task.Result;

            return(response);
        }