コード例 #1
0
ファイル: Pull.cs プロジェクト: BHoM/3DRepo_Toolkit
        public override IEnumerable <object> Pull(IRequest request, PullType pullType = PullType.AdapterDefault, ActionConfig actionConfig = null)
        {
            PullConfig pullConfig = actionConfig as PullConfig ?? new PullConfig();

            RevisionRequest rr = request as RevisionRequest;

            if (rr != null)
            {
                return(GetRevisions(rr).OfType <object>());
            }

            IssueRequest ir = request as IssueRequest;

            if (ir != null)
            {
                return(GetIssues(ir, pullConfig).OfType <object>());
            }

            AuditRequest ar = request as AuditRequest;

            if (ar != null)
            {
                if (ar.Audit == null)
                {
                    BH.Engine.Reflection.Compute.RecordWarning("Please specify the Audit whose Issues you want to pull from 3DRepo in the request.");
                    return(null);
                }

                ir = new IssueRequest()
                {
                    ModelId    = ar.ModelId,
                    RevisionId = ar.RevisionId,
                    TeamSpace  = ar.TeamSpace,
                    UserAPIKey = ar.UserAPIKey
                };

                Audit audit = ar.Audit.DeepClone();

                // The conversion between 3DRepo issues and BHoM Issues
                // will need to be passed any Pulled media file Name, if they were pulled with the Issues.
                Dictionary <oM.Adapters.TDRepo.Issue, List <string> > mediaFilenames_perIssue = new Dictionary <oM.Adapters.TDRepo.Issue, List <string> >();
                List <oM.Inspection.Issue> pulledIssues = GetIssues(ir, pullConfig, true, mediaFilenames_perIssue);

                // Return the Audit with the Pulled issues from 3DRepo.
                return(new List <object>()
                {
                    audit
                });
            }

            BH.Engine.Reflection.Compute.RecordWarning($"The specified request is not compatible with {this.GetType().Name}.");
            return(new List <object>());
        }
コード例 #2
0
        public List <Revision> GetRevisions(RevisionRequest rr, bool enableMessages = true)
        {
            string modelId    = rr.ModelId ?? m_modelId;
            string teamsSpace = rr.TeamSpace ?? m_teamspace;

            string endpoint = $"https://api1.www.3drepo.io/api/{teamsSpace}/{modelId}/revisions.json";

            if (!string.IsNullOrWhiteSpace(rr.UserAPIKey))
            {
                endpoint += $"?key={rr.UserAPIKey}";
            }
            else if (!string.IsNullOrWhiteSpace(m_userAPIKey))
            {
                endpoint += $"?key={m_userAPIKey}";
            }

            // GET request
            HttpResponseMessage respMessage;
            string fullResponse = "";

            using (var httpClient = new HttpClient())
            {
                respMessage = httpClient.GetAsync(endpoint).Result;

                // Process response
                fullResponse = respMessage.Content.ReadAsStringAsync().Result;
            }

            // Deserialise the object.
            var serializerSettings = new Newtonsoft.Json.JsonSerializerSettings();

            serializerSettings.ContractResolver = new RevisionContractResolver();

            List <Revision> revisions_deserialised = new List <Revision>();

            try
            {
                revisions_deserialised = Newtonsoft.Json.JsonConvert.DeserializeObject <List <Revision> >(fullResponse, serializerSettings);
            } catch
            {
                Revision rev = Newtonsoft.Json.JsonConvert.DeserializeObject <Revision>(fullResponse, serializerSettings);
                revisions_deserialised.Add(rev);
            }

            if (enableMessages)
            {
                BH.Engine.Reflection.Compute.RecordNote($"Returning {nameof(Revision)}s \nfrom the 3DRepo Model `{modelId}` in the Teamspace `{teamsSpace}`.");
            }

            return(revisions_deserialised);
        }