/// <summary>
        /// Creates a dyntaxa revision reference relation..
        /// </summary>
        /// <param name="context">Web service request context.</param>
        /// <param name="dyntaxaRevisionReferenceRelation">The dyntaxa revision reference relation.</param>
        /// <returns></returns>
        public static WebDyntaxaRevisionReferenceRelation CreateDyntaxaRevisionReferenceRelation(
            WebServiceContext context,
            WebDyntaxaRevisionReferenceRelation dyntaxaRevisionReferenceRelation)
        {
            // Check authority - AuthorityIdentifier.DyntaxaTaxonEditation
            WebServiceData.AuthorizationManager.CheckAuthorization(context, AuthorityIdentifier.DyntaxaTaxonEditation);
            if (!WebServiceData.AuthorizationManager.IsIdentiferInCurrentRole(context, Settings.Default.TaxonRevisionGuidPrefix))
            {
                throw new ApplicationException("User:"******" is not editor of revision in current role.");
            }

            // Check arguments.
            context.CheckTransaction();

            var id = context.GetTaxonDatabase().CreateDyntaxaRevisionReferenceRelation(
                dyntaxaRevisionReferenceRelation.RevisionId,
                dyntaxaRevisionReferenceRelation.Action,
                dyntaxaRevisionReferenceRelation.RelatedObjectGUID,
                dyntaxaRevisionReferenceRelation.ReferenceId,
                dyntaxaRevisionReferenceRelation.ReferenceType,
                dyntaxaRevisionReferenceRelation.OldReferenceType,
                dyntaxaRevisionReferenceRelation.ReferenceRelationId,
                dyntaxaRevisionReferenceRelation.CreatedDate,
                dyntaxaRevisionReferenceRelation.CreatedBy,
                dyntaxaRevisionReferenceRelation.RevisionEventId);

            WebDyntaxaRevisionReferenceRelation newDyntaxaReferenceRelation = GetDyntaxaRevisionReferenceRelationById(context, id);

            return(newDyntaxaReferenceRelation);
        }
        public void GetDyntaxaRevisionReferenceRelationById_WhenDyntaxaRevisionReferenceRelationCreated_ThenCreatedRevisionReferenceRelationIsReturned()
        {
            // Arrange
            const int    revisionId        = 24;
            const string relatedObjectGUID = "urn:lsid:dyntaxa.se:Taxon:6010174";
            const string action            = "Add";
            const int    referenceId       = 252;
            WebDyntaxaRevisionReferenceRelation dyntaxaReferenceRelation = WebDyntaxaRevisionReferenceRelationTestFactory.Create(
                revisionId, relatedObjectGUID, action);

            dyntaxaReferenceRelation.ReferenceId = referenceId;

            // Act
            using (IWebServiceTransaction transaction = new WebServiceTransaction(GetRevisionClientInformation(), WebServiceProxy.TaxonService))
            {
                var newReferenceRelations = WebServiceProxy.DyntaxaInternalService.CreateDyntaxaRevisionReferenceRelation(
                    GetClientInformation(), dyntaxaReferenceRelation);

                WebDyntaxaRevisionReferenceRelation getReferenceRelations = WebServiceProxy.DyntaxaInternalService
                                                                            .GetDyntaxaRevisionReferenceRelationById(
                    GetClientInformation(), newReferenceRelations.Id);

                // Assert
                Assert.IsNotNull(getReferenceRelations);
                Assert.AreEqual(relatedObjectGUID, getReferenceRelations.RelatedObjectGUID);
                Assert.AreEqual(action, getReferenceRelations.Action);
                Assert.AreEqual(referenceId, getReferenceRelations.ReferenceId);
            }
        }
        public static WebDyntaxaRevisionReferenceRelation CreateModifyAction(
            int revisionId,
            int revisionEventId,
            string relatedObjectGUID,
            int referenceId,
            int typeId,
            int oldTypeId)
        {
            WebDyntaxaRevisionReferenceRelation refReferenceRelation = new WebDyntaxaRevisionReferenceRelation();

            refReferenceRelation.RelatedObjectGUID = relatedObjectGUID;
            refReferenceRelation.RevisionId        = revisionId;
            refReferenceRelation.RevisionEventId   = revisionEventId;
            refReferenceRelation.ReferenceId       = referenceId;
            refReferenceRelation.ReferenceType     = typeId;
            refReferenceRelation.OldReferenceType  = oldTypeId;
            refReferenceRelation.Action            = "Modify";

            refReferenceRelation.ReferenceRelationId        = 1;
            refReferenceRelation.CreatedBy                  = Settings.Default.TestUserId;
            refReferenceRelation.CreatedDate                = DateTime.Now;
            refReferenceRelation.IsRevisionEventIdSpecified = true;

            refReferenceRelation.IsChangedInRevisionEventIdSpecified = true;
            refReferenceRelation.ChangedInRevisionEventId            = 1;
            refReferenceRelation.IsPublished = false;

            return(refReferenceRelation);
        }
Пример #4
0
        public void TestModifyReferenceRelationAndThenModifyBackToOriginalStateInSameRevisionEventAndThenUndo()
        {
            // Consts
            const int    TestRevisionId  = 24;
            const string TestObjectGUID  = "urn:lsid:dyntaxa.se:Taxon:6010174";
            const int    TestReferenceId = 1030;

            // Step 1 - change original artfaktaReferenceRelation from TypeId = 1 to TypeId = 2
            WebTaxonRevisionEvent revisionEvent1 = DyntaxaManager.CreateCompleteRevisionEvent(GetRevisionContext(),
                                                                                              new WebTaxonRevisionEvent()
            {
                CreatedBy    = 2,
                CreatedDate  = DateTime.Now,
                TypeId       = 19,
                RevisionId   = TestRevisionId,
                AffectedTaxa = "Taxon' [6010174]",
                OldValue     = "Type='1",
                NewValue     = "Type='2"
            });
            WebDyntaxaRevisionReferenceRelation revisionReferenceRelationStep1 = DyntaxaManager.CreateDyntaxaRevisionReferenceRelation(
                GetRevisionContext(),
                WebDyntaxaReferenceRelationTestFactory.CreateModifyAction(
                    TestRevisionId,
                    revisionEvent1.Id,
                    TestObjectGUID,
                    TestReferenceId,
                    2,
                    1));

            // Step 2 - change from TypeId = 2 to TypeId = 1
            WebDyntaxaRevisionReferenceRelation revisionReferenceRelationStep2 = DyntaxaManager.CreateDyntaxaRevisionReferenceRelation(
                GetRevisionContext(),
                WebDyntaxaReferenceRelationTestFactory.CreateModifyAction(
                    TestRevisionId,
                    revisionEvent1.Id,
                    TestObjectGUID,
                    TestReferenceId,
                    1,
                    2));

            // Get reference relations for current revision and object GUID.
            List <WebDyntaxaRevisionReferenceRelation> referenceRelations =
                DyntaxaManager.GetDyntaxaRevisionReferenceRelation(
                    GetRevisionContext(),
                    TestRevisionId,
                    TestObjectGUID);

            Assert.AreEqual(1, referenceRelations.Count);
            Assert.AreEqual(1, referenceRelations[0].ReferenceType);


            // undo last revision event
            TaxonManager.DeleteTaxonRevisionEvent(GetRevisionContext(), revisionEvent1.Id);
            referenceRelations =
                DyntaxaManager.GetDyntaxaRevisionReferenceRelation(
                    GetRevisionContext(),
                    TestRevisionId,
                    TestObjectGUID);
            Assert.AreEqual(0, referenceRelations.Count);
        }
Пример #5
0
        /// <summary>
        /// Load data into the WebDyntaxaReferenceRelation instance.
        /// </summary>
        /// <param name="dyntaxaReferenceRelation">Dyntaxa reference relation.</param>
        /// <param name='dataReader'>An open data reader.</param>
        public static void LoadData(this WebDyntaxaRevisionReferenceRelation dyntaxaReferenceRelation, DataReader dataReader)
        {
            dyntaxaReferenceRelation.Id                  = dataReader.GetInt32(TaxonCommon.ID);
            dyntaxaReferenceRelation.RevisionId          = dataReader.GetInt32(TaxonCommon.REVISON_ID);
            dyntaxaReferenceRelation.Action              = dataReader.GetString(DyntaxaRevisionReferenceRelation.ACTION);
            dyntaxaReferenceRelation.RelatedObjectGUID   = dataReader.GetString(DyntaxaRevisionReferenceRelation.RELATED_OBJECT_GUID);
            dyntaxaReferenceRelation.ReferenceId         = dataReader.GetInt32(DyntaxaRevisionReferenceRelation.REFERENCE_ID);
            dyntaxaReferenceRelation.ReferenceType       = dataReader.GetInt32(DyntaxaRevisionReferenceRelation.REFERENCE_TYPE);
            dyntaxaReferenceRelation.OldReferenceType    = dataReader.GetNullableInt32(DyntaxaRevisionReferenceRelation.OLD_REFERENCE_TYPE);
            dyntaxaReferenceRelation.ReferenceRelationId = dataReader.GetNullableInt32(DyntaxaRevisionReferenceRelation.REFERENCE_RELATION_ID);

            dyntaxaReferenceRelation.IsPublished  = dataReader.GetBoolean(TaxonCommon.IS_PUBLISHED);
            dyntaxaReferenceRelation.ModifiedBy   = dataReader.GetInt32(TaxonCommon.MODIFIED_BY);
            dyntaxaReferenceRelation.ModifiedDate = dataReader.GetDateTime(TaxonCommon.MODIFIED_DATE);
            dyntaxaReferenceRelation.CreatedBy    = dataReader.GetInt32(TaxonCommon.CREATED_BY);
            dyntaxaReferenceRelation.CreatedDate  = dataReader.GetDateTime(TaxonCommon.CREATED_DATE);
            dyntaxaReferenceRelation.IsRevisionEventIdSpecified = dataReader.IsNotDbNull(TaxonCommon.REVISON_EVENT_ID);
            if (dyntaxaReferenceRelation.IsRevisionEventIdSpecified)
            {
                dyntaxaReferenceRelation.RevisionEventId = dataReader.GetInt32(TaxonCommon.REVISON_EVENT_ID);
            }
            dyntaxaReferenceRelation.IsChangedInRevisionEventIdSpecified = dataReader.IsNotDbNull(TaxonCommon.CHANGED_IN_REVISON_EVENT_ID);
            if (dyntaxaReferenceRelation.IsChangedInRevisionEventIdSpecified)
            {
                dyntaxaReferenceRelation.ChangedInRevisionEventId = dataReader.GetInt32(TaxonCommon.CHANGED_IN_REVISON_EVENT_ID);
            }
        }
 /// <summary>
 /// Creates a dyntaxa revision reference relation..
 /// </summary>
 /// <param name="clientInformation">Client information.</param>
 /// <param name="dyntaxaRevisionReferenceRelation">The dyntaxa revision reference relation.</param>
 /// <returns></returns>
 public WebDyntaxaRevisionReferenceRelation CreateDyntaxaRevisionReferenceRelation(
     WebClientInformation clientInformation,
     WebDyntaxaRevisionReferenceRelation dyntaxaRevisionReferenceRelation)
 {
     using (ClientProxy client = new ClientProxy(this, 1))
     {
         return(client.Client.CreateDyntaxaRevisionReferenceRelation(clientInformation, dyntaxaRevisionReferenceRelation));
     }
 }
Пример #7
0
        public void TestAddTwoReferenceRelationsWithSameReferenceButDifferentType()
        {
            // Consts
            const int    TestRevisionId      = 24;
            const string TestObjectGUID      = "urn:lsid:dyntaxa.se:Taxon:6010174";
            const int    TestReferenceId3200 = 3200;

            // Arrange
            WebTaxonRevisionEvent revisionEvent1;

            // Act
            // Add new reference 3200 with type 1
            revisionEvent1 = DyntaxaManager.CreateCompleteRevisionEvent(GetRevisionContext(),
                                                                        new WebTaxonRevisionEvent()
            {
                CreatedBy    = 2,
                CreatedDate  = DateTime.Now,
                TypeId       = 19,
                RevisionId   = TestRevisionId,
                AffectedTaxa = "Taxon [6010174]",
                OldValue     = "NULL",
                NewValue     = "Reference3200, Type=1"
            });
            WebDyntaxaRevisionReferenceRelation revisionReferenceRelationStep1 = DyntaxaManager.CreateDyntaxaRevisionReferenceRelation(
                GetRevisionContext(),
                WebDyntaxaReferenceRelationTestFactory.CreateAddAction(
                    TestRevisionId,
                    revisionEvent1.Id,
                    TestObjectGUID,
                    TestReferenceId3200,
                    1));

            // Add new reference 3200 with type 2
            WebDyntaxaRevisionReferenceRelation revisionReferenceRelationStep2 = DyntaxaManager.CreateDyntaxaRevisionReferenceRelation(
                GetRevisionContext(),
                WebDyntaxaReferenceRelationTestFactory.CreateAddAction(
                    TestRevisionId,
                    revisionEvent1.Id,
                    TestObjectGUID,
                    TestReferenceId3200,
                    2));

            // Get reference relations for current revision and object GUID.
            List <WebDyntaxaRevisionReferenceRelation> referenceRelations =
                DyntaxaManager.GetDyntaxaRevisionReferenceRelation(
                    GetRevisionContext(),
                    TestRevisionId,
                    TestObjectGUID);

            Assert.AreEqual(2, referenceRelations.Count);
            Assert.AreEqual(TestReferenceId3200, referenceRelations[0].ReferenceId);
            Assert.AreEqual(1, referenceRelations[0].ReferenceType);
            Assert.AreEqual(TestReferenceId3200, referenceRelations[1].ReferenceId);
            Assert.AreEqual(2, referenceRelations[1].ReferenceType);
        }
        private IDyntaxaRevisionReferenceRelation GetDyntaxaRevisionReferenceRelation(
            IUserContext userContext,
            WebDyntaxaRevisionReferenceRelation webDyntaxaRevisionReferenceRelation)
        {
            // Vi kanske borde skapa en Factory istället?
            // DyntaxaRevisionReferenceRelation.Create(...)
            DyntaxaRevisionReferenceRelation referenceRelation = null;

            if (webDyntaxaRevisionReferenceRelation.IsNotNull())
            {
                referenceRelation = new DyntaxaRevisionReferenceRelation();
                UpdateDyntaxaRevisionReferenceRelation(userContext, referenceRelation, webDyntaxaRevisionReferenceRelation);
            }

            return(referenceRelation);
        }
 /// <summary>
 /// Creates a dyntaxa revision reference relation..
 /// </summary>
 /// <param name="clientInformation">Client information.</param>
 /// <param name="dyntaxaRevisionReferenceRelation">The dyntaxa revision reference relation.</param>
 /// <returns></returns>
 public WebDyntaxaRevisionReferenceRelation CreateDyntaxaRevisionReferenceRelation(
     WebClientInformation clientInformation,
     WebDyntaxaRevisionReferenceRelation dyntaxaRevisionReferenceRelation)
 {
     using (WebServiceContext context = new WebServiceContext(clientInformation))
     {
         try
         {
             return(DyntaxaManager.CreateDyntaxaRevisionReferenceRelation(context, dyntaxaRevisionReferenceRelation));
         }
         catch (Exception exception)
         {
             WebServiceData.LogManager.LogError(context, exception);
             throw;
         }
     }
 }
        /// <summary>
        /// Get all Dyntaxa Revision Reference relation items.
        /// </summary>
        /// <param name="context"></param>
        /// <param name="revisionId"></param>
        /// <returns></returns>
        public static List <WebDyntaxaRevisionReferenceRelation> GetAllDyntaxaRevisionReferenceRelations(
            WebServiceContext context,
            int revisionId)
        {
            List <WebDyntaxaRevisionReferenceRelation> referenceRelations = new List <WebDyntaxaRevisionReferenceRelation>();

            // Get information from database.
            using (DataReader dataReader = context.GetTaxonDatabase().GetAllDyntaxaRevisionReferenceRelations(revisionId))
            {
                while (dataReader.Read())
                {
                    var referenceRelation = new WebDyntaxaRevisionReferenceRelation();
                    referenceRelation.LoadData(dataReader);
                    referenceRelations.Add(referenceRelation);
                }
            }

            return(referenceRelations);
        }
        /// <summary>
        /// Get dyntaxa revision reference relation item(s).
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="revisionId">The revision identifier.</param>
        /// <param name="relatedObjectGUID">The related object unique identifier.</param>
        /// <returns>
        /// A List of WebDyntaxaRevisionReferenceRelation if any revision steps have been
        /// made for specified (revisionId,relatedObjectGUID); otherwise null.
        /// </returns>
        public static List <WebDyntaxaRevisionReferenceRelation> GetDyntaxaRevisionReferenceRelation(
            WebServiceContext context,
            int revisionId,
            string relatedObjectGUID)
        {
            List <WebDyntaxaRevisionReferenceRelation> referenceRelations = new List <WebDyntaxaRevisionReferenceRelation>();

            // Get information from database.
            relatedObjectGUID.CheckNotEmpty("relatedObjectGUID");
            relatedObjectGUID = relatedObjectGUID.CheckInjection();
            using (DataReader dataReader = context.GetTaxonDatabase().GetDyntaxaRevisionReferenceRelation(revisionId, relatedObjectGUID))
            {
                while (dataReader.Read())
                {
                    var referenceRelation = new WebDyntaxaRevisionReferenceRelation();
                    referenceRelation.LoadData(dataReader);
                    referenceRelations.Add(referenceRelation);
                }
            }

            return(referenceRelations);
        }
        /// <summary>
        /// Gets the dyntaxa revision reference relation by identifier.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="id">The identifier.</param>
        /// <returns></returns>
        public static WebDyntaxaRevisionReferenceRelation GetDyntaxaRevisionReferenceRelationById(
            WebServiceContext context,
            int id)
        {
            WebDyntaxaRevisionReferenceRelation dyntaxaReferenceRelation;

            // Get information from database.
            using (DataReader dataReader = context.GetTaxonDatabase().GetDyntaxaRevisionReferenceRelationById(id))
            {
                if (dataReader.Read())
                {
                    dyntaxaReferenceRelation = new WebDyntaxaRevisionReferenceRelation();
                    dyntaxaReferenceRelation.LoadData(dataReader);
                }
                else
                {
                    return(null);
                }
            }

            return(dyntaxaReferenceRelation);
        }
Пример #13
0
        public void TestModifyReferenceRelationOneTime()
        {
            // Consts
            const int    TestRevisionId  = 24;
            const string TestObjectGUID  = "urn:lsid:dyntaxa.se:Taxon:6010174";
            const int    TestReferenceId = 1030;


            // Step 1 - change original artfaktaReferenceRelation from TypeId = 1 to TypeId = 2
            WebDyntaxaRevisionReferenceRelation revisionReferenceRelation = DyntaxaManager.CreateDyntaxaRevisionReferenceRelation(
                GetRevisionContext(),
                WebDyntaxaReferenceRelationTestFactory.CreateModifyAction(
                    TestRevisionId,
                    5000,
                    TestObjectGUID,
                    TestReferenceId,
                    2,
                    1));

            // Get reference relations for current revision and object GUID.
            List <WebDyntaxaRevisionReferenceRelation> referenceRelations =
                DyntaxaManager.GetDyntaxaRevisionReferenceRelation(
                    GetRevisionContext(),
                    TestRevisionId,
                    TestObjectGUID);

            Assert.AreEqual(1, referenceRelations.Count);
            Assert.AreEqual(2, referenceRelations[0].ReferenceType);

            // Test with character ' in GUID.
            referenceRelations =
                DyntaxaManager.GetDyntaxaRevisionReferenceRelation(
                    GetRevisionContext(),
                    TestRevisionId,
                    "urn:lsid:dyntaxa.se:Taxon:'6010174");
            Assert.IsTrue(referenceRelations.IsEmpty());
        }
        public void GetDyntaxaRevisionReferenceRelationById_WhenDyntaxaRevisionReferenceRelationCreated_ThenCreatedRevisionReferenceRelationIsReturned()
        {
            // Arrange
            const int    revisionId        = 24;
            const string relatedObjectGUID = "urn:lsid:dyntaxa.se:Taxon:6010174";
            const string action            = "Add";
            const int    referenceId       = 252;
            WebDyntaxaRevisionReferenceRelation dyntaxaReferenceRelation = WebDyntaxaReferenceRelationTestFactory.Create(
                revisionId, relatedObjectGUID, action);

            dyntaxaReferenceRelation.ReferenceId = referenceId;
            var newReferenceRelations = DyntaxaManager.CreateDyntaxaRevisionReferenceRelation(
                GetRevisionContext(), dyntaxaReferenceRelation);

            // Act
            WebDyntaxaRevisionReferenceRelation getReferenceRelations = DyntaxaManager.GetDyntaxaRevisionReferenceRelationById(
                GetRevisionContext(), newReferenceRelations.Id);

            // Assert
            Assert.IsNotNull(getReferenceRelations);
            Assert.AreEqual(relatedObjectGUID, getReferenceRelations.RelatedObjectGUID);
            Assert.AreEqual(action, getReferenceRelations.Action);
            Assert.AreEqual(referenceId, getReferenceRelations.ReferenceId);
        }
Пример #15
0
        public void TestDeleteReferenceAndThenAddItAgainAndThenUndo()
        {
            // Consts
            const int    TestRevisionId      = 24;
            const string TestObjectGUID      = "urn:lsid:dyntaxa.se:Taxon:6010174";
            const int    TestReferenceId3200 = 3200;

            WebTaxonRevisionEvent revisionEvent1;
            WebTaxonRevisionEvent revisionEvent2;

            // Act

            // Step 1 - Delete reference 3200, Type=2
            revisionEvent1 = DyntaxaManager.CreateCompleteRevisionEvent(GetRevisionContext(),
                                                                        new WebTaxonRevisionEvent()
            {
                CreatedBy    = 2,
                CreatedDate  = DateTime.Now,
                TypeId       = 19,
                RevisionId   = TestRevisionId,
                AffectedTaxa = "Taxon [6010174]",
                OldValue     = "Ref3200,Typ1",
                NewValue     = "Deleted"
            });
            WebDyntaxaRevisionReferenceRelation revisionReferenceRelationStep1 = DyntaxaManager.CreateDyntaxaRevisionReferenceRelation(
                GetRevisionContext(),
                WebDyntaxaReferenceRelationTestFactory.CreateDeleteAction(
                    TestRevisionId,
                    revisionEvent1.Id,
                    TestObjectGUID,
                    TestReferenceId3200,
                    2,
                    2));

            // Get reference relations for current revision and object GUID.
            List <WebDyntaxaRevisionReferenceRelation> referenceRelations =
                DyntaxaManager.GetDyntaxaRevisionReferenceRelation(
                    GetRevisionContext(),
                    TestRevisionId,
                    TestObjectGUID);

            Assert.AreEqual(1, referenceRelations.Count);
            Assert.AreEqual(TestReferenceId3200, referenceRelations[0].ReferenceId);
            Assert.AreEqual("Delete", referenceRelations[0].Action);


            // Step 2 - Add reference 3200, Type=1
            revisionEvent2 = DyntaxaManager.CreateCompleteRevisionEvent(GetRevisionContext(),
                                                                        new WebTaxonRevisionEvent()
            {
                CreatedBy    = 2,
                CreatedDate  = DateTime.Now,
                TypeId       = 19,
                RevisionId   = TestRevisionId,
                AffectedTaxa = "Taxon [6010174]",
                OldValue     = "Deleted",
                NewValue     = "Ref3200"
            });
            WebDyntaxaRevisionReferenceRelation revisionReferenceRelationStep2 = DyntaxaManager.CreateDyntaxaRevisionReferenceRelation(
                GetRevisionContext(),
                WebDyntaxaReferenceRelationTestFactory.CreateAddAction(
                    TestRevisionId,
                    revisionEvent2.Id,
                    TestObjectGUID,
                    TestReferenceId3200,
                    2));

            // Get reference relations for current revision and object GUID.
            referenceRelations =
                DyntaxaManager.GetDyntaxaRevisionReferenceRelation(
                    GetRevisionContext(),
                    TestRevisionId,
                    TestObjectGUID);
            Assert.AreEqual(1, referenceRelations.Count);
            Assert.AreEqual(TestReferenceId3200, referenceRelations[0].ReferenceId);
            Assert.AreEqual("Add", referenceRelations[0].Action);
        }
Пример #16
0
        public void TestAddTwoReferenceRelationsToOneObjectGUIDAndThenModifyTypeOfOneOfTheReferences()
        {
            // Consts
            const int    TestRevisionId      = 24;
            const string TestObjectGUID      = "urn:lsid:dyntaxa.se:Taxon:6010174";
            const int    TestReferenceId3200 = 3200;
            const int    TestReferenceId1500 = 1500;

            // Arrange
            WebTaxonRevisionEvent revisionEvent1;
            WebTaxonRevisionEvent revisionEvent2;

            // Act
            // Add new reference 3200 with type 2
            revisionEvent1 = DyntaxaManager.CreateCompleteRevisionEvent(GetRevisionContext(),
                                                                        new WebTaxonRevisionEvent()
            {
                CreatedBy    = 2,
                CreatedDate  = DateTime.Now,
                TypeId       = 19,
                RevisionId   = TestRevisionId,
                AffectedTaxa = "Taxon [6010174]",
                OldValue     = "NULL",
                NewValue     = "Reference3200"
            });
            WebDyntaxaRevisionReferenceRelation revisionReferenceRelationStep1 = DyntaxaManager.CreateDyntaxaRevisionReferenceRelation(
                GetRevisionContext(),
                WebDyntaxaReferenceRelationTestFactory.CreateAddAction(
                    TestRevisionId,
                    revisionEvent1.Id,
                    TestObjectGUID,
                    TestReferenceId3200,
                    2));

            // Add new reference 1500 with type 1
            WebDyntaxaRevisionReferenceRelation revisionReferenceRelationStep2 = DyntaxaManager.CreateDyntaxaRevisionReferenceRelation(
                GetRevisionContext(),
                WebDyntaxaReferenceRelationTestFactory.CreateAddAction(
                    TestRevisionId,
                    revisionEvent1.Id,
                    TestObjectGUID,
                    TestReferenceId1500,
                    1));

            // Get reference relations for current revision and object GUID.
            List <WebDyntaxaRevisionReferenceRelation> referenceRelations =
                DyntaxaManager.GetDyntaxaRevisionReferenceRelation(
                    GetRevisionContext(),
                    TestRevisionId,
                    TestObjectGUID);

            Assert.AreEqual(2, referenceRelations.Count);
            Assert.AreEqual(TestReferenceId3200, referenceRelations[0].ReferenceId);
            Assert.AreEqual(2, referenceRelations[0].ReferenceType);
            Assert.AreEqual(TestReferenceId1500, referenceRelations[1].ReferenceId);



            // Change type of Reference 3200 to type 1
            revisionEvent2 = DyntaxaManager.CreateCompleteRevisionEvent(GetRevisionContext(),
                                                                        new WebTaxonRevisionEvent()
            {
                CreatedBy    = 2,
                CreatedDate  = DateTime.Now,
                TypeId       = 19,
                RevisionId   = TestRevisionId,
                AffectedTaxa = "Taxon [6010174]",
                OldValue     = "Type=2",
                NewValue     = "Type=1"
            });
            // Add eller Modify?
            //WebDyntaxaRevisionReferenceRelation revisionReferenceRelationStep3 = DyntaxaManager.CreateDyntaxaRevisionReferenceRelation(
            //    GetRevisionContext(),
            //    WebDyntaxaReferenceRelationTestFactory.CreateAddAction(
            //        TestRevisionId,
            //        revisionEvent2.Id,
            //        TestObjectGUID,
            //        TestReferenceId3200,
            //        1));
            WebDyntaxaRevisionReferenceRelation revisionReferenceRelationStep3 = DyntaxaManager.CreateDyntaxaRevisionReferenceRelation(
                GetRevisionContext(),
                WebDyntaxaReferenceRelationTestFactory.CreateModifyAction(
                    TestRevisionId,
                    revisionEvent2.Id,
                    TestObjectGUID,
                    TestReferenceId3200,
                    1,
                    2)); // 2 eller null?

            // Get reference relations for current revision and object GUID.
            referenceRelations =
                DyntaxaManager.GetDyntaxaRevisionReferenceRelation(
                    GetRevisionContext(),
                    TestRevisionId,
                    TestObjectGUID);

            Assert.AreEqual(2, referenceRelations.Count);
            Assert.AreEqual(TestReferenceId1500, referenceRelations[0].ReferenceId);
            Assert.AreEqual(TestReferenceId3200, referenceRelations[1].ReferenceId);
            Assert.AreEqual(1, referenceRelations[1].ReferenceType);



            // undo last revision event
            TaxonManager.DeleteTaxonRevisionEvent(GetRevisionContext(), revisionEvent2.Id);
            referenceRelations =
                DyntaxaManager.GetDyntaxaRevisionReferenceRelation(
                    GetRevisionContext(),
                    TestRevisionId,
                    TestObjectGUID);
            Assert.AreEqual(2, referenceRelations[0].ReferenceType);

            // Get reference relations for current revision and object GUID.
            referenceRelations =
                DyntaxaManager.GetDyntaxaRevisionReferenceRelation(
                    GetRevisionContext(),
                    TestRevisionId,
                    TestObjectGUID);

            Assert.AreEqual(2, referenceRelations.Count);
            Assert.AreEqual(TestReferenceId3200, referenceRelations[0].ReferenceId);
            Assert.AreEqual(2, referenceRelations[0].ReferenceType);
            Assert.AreEqual(TestReferenceId1500, referenceRelations[1].ReferenceId);

            // undo last revision event once more
            TaxonManager.DeleteTaxonRevisionEvent(GetRevisionContext(), revisionEvent1.Id);
            referenceRelations =
                DyntaxaManager.GetDyntaxaRevisionReferenceRelation(
                    GetRevisionContext(),
                    TestRevisionId,
                    TestObjectGUID);
            Assert.AreEqual(0, referenceRelations.Count);
        }
        private void UpdateDyntaxaRevisionReferenceRelation(IUserContext userContext, DyntaxaRevisionReferenceRelation referenceRelation, WebDyntaxaRevisionReferenceRelation webReferenceRelation)
        {
            if (webReferenceRelation.IsNull())
            {
                return;
            }
            referenceRelation.Id          = webReferenceRelation.Id;
            referenceRelation.CreatedBy   = webReferenceRelation.CreatedBy;
            referenceRelation.CreatedDate = webReferenceRelation.CreatedDate;
            referenceRelation.DataContext = GetDataContext(userContext);

            if (webReferenceRelation.IsChangedInRevisionEventIdSpecified)
            {
                referenceRelation.ChangedInRevisionEventId = webReferenceRelation.ChangedInRevisionEventId;
            }
            else
            {
                referenceRelation.ChangedInRevisionEventId = null;
            }

            referenceRelation.RevisionEventId     = webReferenceRelation.RevisionEventId;
            referenceRelation.IsPublished         = webReferenceRelation.IsPublished;
            referenceRelation.ModifiedBy          = webReferenceRelation.ModifiedBy;
            referenceRelation.ModifiedDate        = webReferenceRelation.ModifiedDate;
            referenceRelation.RevisionId          = webReferenceRelation.RevisionId;
            referenceRelation.OldReferenceType    = webReferenceRelation.OldReferenceType;
            referenceRelation.RelatedObjectGUID   = webReferenceRelation.RelatedObjectGUID;
            referenceRelation.ReferenceType       = webReferenceRelation.ReferenceType;
            referenceRelation.ReferenceRelationId = webReferenceRelation.ReferenceRelationId;
            referenceRelation.ReferenceId         = webReferenceRelation.ReferenceId;

            switch (webReferenceRelation.Action)
            {
            case ReferenceEditActionStringAdd:
                referenceRelation.Action = ReferenceRelationEditAction.Add;
                break;

            case ReferenceEditActionStringDelete:
                referenceRelation.Action = ReferenceRelationEditAction.Delete;
                break;

            case ReferenceEditActionStringModify:
                referenceRelation.Action = ReferenceRelationEditAction.Modify;
                break;

            default:
                referenceRelation.Action = ReferenceRelationEditAction.Unknown;
                break;
            }
        }