public void TODTODocument_FieldTypeIsPassedinValue_ReturnsCorrectValue(string type, kCura.Relativity.Client.FieldType expected)
        {
            //ARRANGE
            var doc   = new RelativityObject();
            var cGuid = Guid.NewGuid();

            doc.FieldValues = new List <FieldValuePair>()
            {
                new FieldValuePair
                {
                    Field = new FieldRef(123)
                    {
                        FieldType = type
                    },
                    Value = new List <ChoiceRef> {
                        new ChoiceRef("choice name")
                    }
                }
            };

            //ACT
            var result = doc.ToDTODocument();

            //ASSERT
            Assert.Equal(expected, result.Fields.First().FieldType);
        }
        public void ToDTODocument_FieldValueIsMultiChoiceSerializedWithName_ResturnsValueAsRelativityChoice()
        {
            //ARRANGE
            var doc   = new RelativityObject();
            var cGuid = Guid.NewGuid();

            doc.FieldValues = new List <FieldValuePair>()
            {
                new FieldValuePair
                {
                    Field = new FieldRef(123)
                    {
                        FieldType = "MultipleChoice"
                    },
                    Value = Newtonsoft.Json.JsonConvert.SerializeObject(new List <ChoiceRef> {
                        new ChoiceRef("choice name")
                    })
                }
            };

            //ACT
            var result = doc.ToDTODocument();

            //ASSERT
            Assert.NotEmpty(result.Fields);
            Assert.NotNull(result.Fields.FirstOrDefault());
            Assert.IsType <MultiChoiceFieldValueList>(result.Fields.First().Value);
            Assert.Equal("choice name", result.Fields.First().ValueAsMultipleChoice.First().Name);
        }
        public static async Task UpdateAsync_UpdateSingleObjectByArtifactId_ReturnsSuccess(this IObjectManager manager, IHelper helper, int workspaceId, int docId)
        {
            //ARRANGE
            var fieldGuid = Guid.Parse(DocumentFieldDefinitions.SingleObject);
            var client    = helper.GetServicesManager().CreateProxy <IRSAPIClient>(Relativity.API.ExecutionIdentity.System);

            client.APIOptions.WorkspaceID = workspaceId;
            var obj = client.Repositories.RDO.CreateSingle(new RDO
            {
                ArtifactTypeGuids = new List <Guid> {
                    Guid.Parse(ObjectTypeGuids.SingleObject)
                },
                TextIdentifier = Guid.NewGuid().ToString()
            });

            //ACT
            var value = new RelativityObject()
            {
                ArtifactId = obj
            };

            var(uResult, result) = await SharedTestCases.RunUpdateTestAsync(manager,
                                                                            workspaceId,
                                                                            docId,
                                                                            new FieldRef(fieldGuid),
                                                                            value);

            //ASSERT
            Assert.True(uResult.EventHandlerStatuses.All(x => x.Success));
            Assert.Equal(docId, result.ArtifactId);
            Assert.Contains(result.FieldValues, (f) => f.Field.Guids.Contains(fieldGuid));
            Assert.Equal(obj, result[fieldGuid].ValueAsSingleObject().ArtifactId);
        }
        public Task <RelativityObject> ReadAsync(int workspaceId, RelativityObject obj, CallingContext context, CancellationToken token)
        {
            var objectTypeId = this.GetObjectTypeFromObject(workspaceId, obj);

            this.CheckObjectTypeSupported(objectTypeId);
            using (var client = _helper.GetClient(workspaceId))
            {
                client.APIOptions.WorkspaceID = workspaceId;
                if (objectTypeId == 10)
                {
                    var dto          = obj.ToDTODocument();
                    var result       = client.Repositories.Document.Read(dto).EnsureSuccess();
                    var resultObject = result.First().ToRelativityObject();
                    return(Task.FromResult(resultObject));
                }
                else if (objectTypeId >= 1_000_000)
                {
                    obj.ObjectType = new ObjectType(objectTypeId);
                    var dto          = obj.ToRDO();
                    var result       = client.Repositories.RDO.Read(dto).EnsureSuccess();
                    var resultObject = result.First().ToRelativityObject();
                    return(Task.FromResult(resultObject));
                }
                throw new NotSupportedException($"Object Type {objectTypeId} is not supported for Read.");
            }
        }
        public void ToDTODocument_FieldValueIsChoiceRefSerializedWithArtifactId_ResturnsValueAsRelativityChoice()
        {
            //ARRANGE
            var doc = new RelativityObject();

            doc.FieldValues = new List <FieldValuePair>()
            {
                new FieldValuePair
                {
                    Field = new FieldRef(123)
                    {
                        FieldType = "SingleChoice"
                    },
                    Value = Newtonsoft.Json.JsonConvert.SerializeObject(new ChoiceRef(456))
                }
            };

            //ACT
            var result = doc.ToDTODocument();

            //ASSERT
            Assert.NotEmpty(result.Fields);
            Assert.NotNull(result.Fields.FirstOrDefault());
            Assert.Equal(123, result.Fields.First().ArtifactID);
            Assert.Equal(456, result.Fields.First().ValueAsSingleChoice.ArtifactID);
        }
        private async Task <ObjectCreateResult> CreateInternalAsync(int workspaceId, RelativityObject obj, CallingContext context, CancellationToken token)
        {
            var request = RelativityObjectCreateRestPrep.Prep(obj);
            var result  = await _request.PostAsJsonAsync($"{BASE_PATH}/{workspaceId}/objects/create", new
            {
                RelativityObject = request,
                CallingContext   = context
            }, token);

            var error = await result.EnsureSuccessAsync();

            try
            {
                error.ThrowIfNotNull();
            }
            catch (EventHandlerFailedException ehfe)
            {
                return(new ObjectCreateResult(ehfe.Message));
            }
            var ret = await result.Content.ReadAsAsync <ReadResult>();

            return(new ObjectCreateResult
            {
                Object = ret.RelativityObject.ToCoreModel(),
                EventHandlerStatuses = ret.EventHandlerStatuses
            });
        }
示例#7
0
        public static RelativityObjectV1 FromCoreModel(RelativityObject obj)
        {
            var ret = new RelativityObjectV1();

            ret.ArtifactId      = obj.ArtifactId;
            ret.FieldValuePairs = obj.FieldValues.ToList();
            return(ret);
        }
 public static void ValidateObjectTypeForCreate(RelativityObject obj)
 {
     if (obj.ObjectType == null || obj.ObjectType.ArtifactTypeId == 0)
     {
         throw new ArgumentException(ObjectManager.Rest.Properties.Messages.Object_Type_Missing);
     }
     if (obj.ObjectType.ArtifactTypeId == 10)
     {
         throw new NotSupportedException(ObjectManager.Rest.Properties.Messages.Document_Type_Not_Supported_For_Create);
     }
 }
        public static Document ToDTODocument(this RelativityObject doc)
        {
            var retDoc = new Document();

            if (doc.ArtifactId > 0)
            {
                retDoc = new Document(doc.ArtifactId);
            }
            retDoc.Fields = doc.FieldValues.Select(x => ToFieldValue(x)).ToList();
            return(retDoc);
        }
        private async Task <ObjectCreateResult> CreateInternalAsync(int workspaceId, RelativityObject obj, CallingContext context, CancellationToken token)
        {
            var request = RelativityObjectRestCreatePrep.Prep(obj, context);
            var result  = await _request.PostAsJsonAsync($"/Relativity.REST/api/Relativity.Objects/workspace/{workspaceId}/object/create", request);

            var error = await result.EnsureSuccessAsync();

            error.ThrowIfNotNull();
            var ret = await result.Content.ReadAsAsync <ObjectCreateResult>();

            return(ret);
        }
示例#11
0
        public static RelativityObject ToRelativityObject(this Artifact doc)
        {
            var obj = new RelativityObject();

            obj.ArtifactId = doc.ArtifactID;
            if (doc.ArtifactTypeID.HasValue)
            {
                obj.ObjectType = new Interfaces.ObjectType(doc.ArtifactTypeID.Value);
            }
            obj.FieldValues = doc.Fields.Select(x => ToFieldPair(x)).ToList();
            return(obj);
        }
        public async Task <RelativityObject> ReadAsync(int workspaceId, RelativityObject obj, CallingContext context, CancellationToken token)
        {
            var request = RelativityObjectRestReadPrep.PrepareForReadRequst(obj, context);
            var result  = await _request.PostAsJsonAsync($"{BASE_PATH}/{workspaceId}/objects/{obj.ArtifactId}/read", request, token);

            var error = await result.EnsureSuccessAsync();

            error.ThrowIfNotNull();
            var ret = await result.Content.ReadAsAsync <ReadResult>();

            return(ret.RelativityObject.ToCoreModel());
        }
        public async Task <RelativityObject> ReadAsync(int workspaceId, RelativityObject obj, CallingContext context, CancellationToken token)
        {
            var request = RelativityObjectRestReadPrep.Prep(obj, context);
            var result  = await _request.PostAsJsonAsync($"/Relativity.REST/api/Relativity.Objects/workspace/{workspaceId}/object/read", request, token);

            var error = await result.EnsureSuccessAsync();

            error.ThrowIfNotNull();
            var ret = await result.Content.ReadAsAsync <ReadResult>();

            return(ret.Object);
        }
        public void ToDTODocument_ObjectArtifactIdSet_ReturnsArtifactIdSet()
        {
            //ARRANGE
            var doc = new RelativityObject();

            doc.ArtifactId = 123;

            //ACT
            var result = doc.ToDTODocument();

            //ASSERT
            Assert.Equal(123, result.ArtifactID);
        }
示例#15
0
        public static RelativityObjectUpdateRestPrep Prep(RelativityObject obj, CallingContext context)
        {
            var parser = new RestFieldParser();
            var ret    = new RelativityObjectUpdateRestPrep();

            ret.Request        = new RestRequest();
            ret.Request.Object = new RestObject(obj.ArtifactId);
            var fields = obj?.FieldValues?.Where(x => x.Field != null).Select(x => RestField.FromFieldRef(x.Field, x.Value, parser)).ToList();

            ret.Request.FieldValues = fields;
            ret.OperationOptions    = new OperationOptionsRequest {
                CallingContext = PrivateCallingContext.FromContext(context)
            };
            return(ret);
        }
        public void ParseValue_ValueIsSingleObject_ReturnsCorrectValue()
        {
            //ARRANGE
            var value = new RelativityObject
            {
                ArtifactId = 123
            };

            //ACT
            var result = _parser.ParseValue(value);

            //ASSERT
            Assert.IsType <RField.ArtifactIdRestField>(result);
            Assert.Equal(123, ((RField.ArtifactIdRestField)result).ArtifactID);
        }
示例#17
0
        public static RDO ToRDO(this RelativityObject obj)
        {
            var retDoc = new RDO();

            if (obj.ArtifactId > 0)
            {
                retDoc = new RDO(obj.ArtifactId);
            }
            if (obj.ObjectType == null)
            {
                throw new ArgumentNullException("Object type property cannot be null.");
            }
            retDoc.ArtifactTypeID = obj.ObjectType.ArtifactTypeId;
            retDoc.Fields         = obj.FieldValues.Select(x => ToFieldValue(x)).ToList();
            return(retDoc);
        }
示例#18
0
        private async Task <DocProperty> GetDocProperty(int workspaceArtifactID, int documentArtifactID)
        {
            DocProperty  doc = new DocProperty();
            const string fileNameFieldName = "File Name";

            try
            {
                using (IObjectManager manager = this.Helper.GetServicesManager().CreateProxy <IObjectManager>(Relativity.API.ExecutionIdentity.System))
                {
                    var fieldsToRead = new List <FieldRef>();
                    fieldsToRead.Add(new FieldRef()
                    {
                        Name = fileNameFieldName
                    });
                    var readRequest = new ReadRequest()
                    {
                        Object = new RelativityObjectRef {
                            ArtifactID = documentArtifactID
                        },
                        Fields = fieldsToRead
                    };
                    RelativityObject document = (await manager.ReadAsync(workspaceArtifactID, readRequest)).Object;
                    if (document != null)
                    {
                        doc.Begdoc   = document.Name;
                        doc.Filename = document.FieldValues.First(f => f.Field.Name == fileNameFieldName).Value.ToString();

                        string       sql = @"
															SELECT [Location] 
															FROM [EDDSDBO].[File]
															WHERE [Type] = 0
															AND [DocumentArtifactID] = @documentArtifactIDParam"                                                            ;
                        SqlParameter documentArtifactIDParam = new SqlParameter("@documentArtifactIDParam", SqlDbType.Int);
                        documentArtifactIDParam.Value = documentArtifactID;
                        doc.Path = Helper.GetDBContext(workspaceArtifactID).ExecuteSqlStatementAsScalar(sql, new SqlParameter[] { documentArtifactIDParam }).ToString() ?? string.Empty;
                    }
                    doc.Success = !string.IsNullOrEmpty(doc.Path) && !string.IsNullOrEmpty(doc.Filename);
                }
            }
            catch (Exception ex)
            {
                LogError(ex);
            }
            return(doc);
        }
        public static async Task UpdateAsync_UpdateUserByArtifactId_ReturnsSuccess(this IObjectManager manager, IHelper helper, int workspaceId, int docId, string userName)
        {
            //ARRANGE
            var fieldGuid = Guid.Parse(DocumentFieldDefinitions.User);
            var client    = helper.GetServicesManager().CreateProxy <IRSAPIClient>(Relativity.API.ExecutionIdentity.System);

            client.APIOptions.WorkspaceID = -1;

            var q = new Query <Group>();

            q.ArtifactTypeID = (int)kCura.Relativity.Client.ArtifactType.Group;
            q.Condition      = new kCura.Relativity.Client.CompositeCondition(new kCura.Relativity.Client.WholeNumberCondition(GroupFieldNames.GroupType, kCura.Relativity.Client.NumericConditionEnum.EqualTo, 2),
                                                                              kCura.Relativity.Client.CompositeConditionEnum.And,
                                                                              new kCura.Relativity.Client.ObjectsCondition(GroupFieldNames.Workspaces, kCura.Relativity.Client.ObjectsConditionEnum.AnyOfThese, new int[] { workspaceId }));
            var res = client.Repositories.Group.Query(q);

            var userQ = new Query <kCura.Relativity.Client.DTOs.User>();

            userQ.Condition = new ObjectsCondition(UserFieldNames.Groups, ObjectsConditionEnum.AnyOfThese, res.Results.Select(x => x.Artifact.ArtifactID).ToList());
            var userRes = client.Repositories.User.Query(userQ);

            if (userRes.TotalCount < 1)
            {
                //ideally you'd create a user in this but that's too much for the scope of this work
                throw new NotSupportedException("No user to run this test, please create a non system admin and ensure the group is assigned to the workspace.");
            }
            var userId = userRes.Results.First().Artifact.ArtifactID;
            //ACT
            var value = new RelativityObject()
            {
                ArtifactId = userId
            };

            var(uResult, result) = await SharedTestCases.RunUpdateTestAsync(manager,
                                                                            workspaceId,
                                                                            docId,
                                                                            new FieldRef(fieldGuid),
                                                                            value);

            //ASSERT
            Assert.True(uResult.EventHandlerStatuses.All(x => x.Success));
            Assert.Equal(docId, result.ArtifactId);
            Assert.Contains(result.FieldValues, (f) => f.Field.Guids.Contains(fieldGuid));
            Assert.Equal(userId, result[fieldGuid].ValueAsSingleObject().ArtifactId);
        }
        public async Task <ObjectUpdateResult> UpdateAsync(int workspaceId, RelativityObject obj, CallingContext context, CancellationToken token)
        {
            var request = RelativityObjectUpdateRestPrep.Prep(obj, context);
            var result  = await _request.PostAsJsonAsync($"/Relativity.REST/api/Relativity.Objects/workspace/{workspaceId}/object/update", request, token);

            var error = await result.EnsureSuccessAsync();

            try
            {
                error.ThrowIfNotNull();
            }
            catch (EventHandlerFailedException ehfe)
            {
                return(new ObjectUpdateResult(ehfe.Message));
            }
            var ret = await result.Content.ReadAsAsync <ObjectUpdateResult>();

            return(ret);
        }
        public void ToDTODocument_FieldValueHasName_ReturnsNameSet()
        {
            //ARRANGE
            var doc = new RelativityObject();

            doc.FieldValues = new List <FieldValuePair>()
            {
                new FieldValuePair
                {
                    Field = new FieldRef("field Name")
                }
            };

            //ACT
            var result = doc.ToDTODocument();

            //ASSERT
            Assert.NotEmpty(result.Fields);
            Assert.NotNull(result.Fields.FirstOrDefault());
            Assert.Equal("field Name", result.Fields.First().Name);
        }
        public void ToDTODocument_FieldValueHasArtifactId_ReturnsArtifactIdSet()
        {
            //ARRANGE
            var doc = new RelativityObject();

            doc.FieldValues = new List <FieldValuePair>()
            {
                new FieldValuePair
                {
                    Field = new FieldRef(123)
                }
            };

            //ACT
            var result = doc.ToDTODocument();

            //ASSERT
            Assert.NotEmpty(result.Fields);
            Assert.NotNull(result.Fields.FirstOrDefault());
            Assert.Equal(123, result.Fields.First().ArtifactID);
        }
        public Task <ObjectUpdateResult> UpdateAsync(int workspaceId, RelativityObject obj, CallingContext context, CancellationToken token)
        {
            var objectTypeId = this.GetObjectTypeFromObject(workspaceId, obj);

            this.CheckObjectTypeSupported(objectTypeId);
            using (var client = _helper.GetClient(workspaceId))
            {
                client.APIOptions.WorkspaceID = workspaceId;
                if (objectTypeId == 10)
                {
                    var dto = obj.ToDTODocument();
                    client.Repositories.Document.UpdateSingle(dto);
                }
                else if (objectTypeId >= 1_000_000)
                {
                    obj.ObjectType = new ObjectType(objectTypeId);
                    var dto = obj.ToRDO();
                    client.Repositories.RDO.UpdateSingle(dto);
                }
                return(Task.FromResult(new ObjectUpdateResult()));
            }
        }
        public void ToDTODocument_FieldValueHasGuid_ReturnsGuidSet()
        {
            //ARRANGE
            var fieldGuid = Guid.NewGuid();
            var doc       = new RelativityObject();

            doc.FieldValues = new List <FieldValuePair>()
            {
                new FieldValuePair
                {
                    Field = new FieldRef(fieldGuid)
                }
            };

            //ACT
            var result = doc.ToDTODocument();

            //ASSERT
            Assert.NotEmpty(result.Fields);
            Assert.NotNull(result.Fields.FirstOrDefault());
            Assert.Equal(fieldGuid, result.Fields.First().Guids.Single());
        }
        public void ToDTODocument_FieldValueIsChoiceWithName_ResturnsValueAsRelativityChoice()
        {
            //ARRANGE
            var doc   = new RelativityObject();
            var cGuid = Guid.NewGuid();

            doc.FieldValues = new List <FieldValuePair>()
            {
                new FieldValuePair
                {
                    Field = new FieldRef(123),
                    Value = new ChoiceRef("choice name")
                }
            };

            //ACT
            var result = doc.ToDTODocument();

            //ASSERT
            Assert.NotEmpty(result.Fields);
            Assert.NotNull(result.Fields.FirstOrDefault());
            Assert.Equal("choice name", result.Fields.First().ValueAsSingleChoice.Name);
        }
        public async Task <ObjectUpdateResult> UpdateAsync(int workspaceId, RelativityObject obj, CallingContext context, CancellationToken token)
        {
            var request = RelativityObjectUpdateRestPrep.PrepareForUpdateRequst(obj);
            var result  = await _request.PostAsJsonAsync($"{BASE_PATH}/{workspaceId}/objects/{obj.ArtifactId}", new
            {
                RelativityObject = request,
                CallingContext   = context
            }, token);

            var error = await result.EnsureSuccessAsync();

            try
            {
                error.ThrowIfNotNull();
            }
            catch (EventHandlerFailedException ehfe)
            {
                return(new ObjectUpdateResult(ehfe.Message));
            }
            var ret = await result.Content.ReadAsAsync <ObjectUpdateResult>();

            return(ret);
        }
 private int GetObjectTypeFromObject(int workspaceId, RelativityObject obj)
 {
     if (obj == null)
     {
         throw new ArgumentNullException(nameof(obj));
     }
     if (obj.ObjectType != null && obj.ObjectType.ArtifactTypeId > 0)
     {
         return(obj.ObjectType.ArtifactTypeId);
     }
     else if (obj.ArtifactId > 0)
     {
         var dbContext    = _helper.GetDBContext(workspaceId);
         var sql          = @"SELECT ArtifactTypeId from [EDDSDBO].[Artifact] a with (nolock)
                     WHERE a.ArtifactID = @aId";
         var objectTypeId = dbContext.ExecuteSqlStatementAsScalar <int?>(sql, new[] { new SqlParameter("@aId", obj.ArtifactId) });
         if (!objectTypeId.HasValue)
         {
             throw new NotSupportedException($"Could not find objectType for artifact Id {obj.ArtifactId}");
         }
         return(objectTypeId.Value);
     }
     throw new NotSupportedException("Object type cannot be determined on object by either ArtifactId or ObjectType properties, please ensure one of those are loaded");
 }
        private Task <ObjectCreateResult> CreateInternalAsync(int workspaceId, RelativityObject obj, CallingContext context, CancellationToken token)
        {
            var objectTypeId = this.GetObjectTypeFromObject(workspaceId, obj);

            this.CheckObjectTypeSupported(objectTypeId);
            using (var client = _helper.GetClient(workspaceId))
            {
                client.APIOptions.WorkspaceID = workspaceId;
                if (objectTypeId >= 1_000_000)
                {
                    var dto      = obj.ToRDO();
                    var resultId = client.Repositories.RDO.CreateSingle(dto);
                    obj.ArtifactId = resultId;
                }
                else
                {
                    throw new NotSupportedException($"Object Type Id {objectTypeId} is not supported for create.");
                }
                return(Task.FromResult(new ObjectCreateResult
                {
                    Object = obj
                }));
            }
        }
		internal int GetAuditId(RelativityObject obj)
		{
			return int.Parse(obj.Name);
		}
 public Task <ObjectUpdateResult> UpdateAsync(int workspaceId, RelativityObject obj, CallingContext context)
 {
     return(this.UpdateAsync(workspaceId, obj, context, default(CancellationToken)));
 }