private IDirectAccessIterator<IdentificationUnit> _identificationUnitIterator; //Dieser iteriert im Gegensatz zu den anderen KLassen in Datamanagement nur auf dem TopLevel

        #endregion Fields

        #region Constructors

        internal IdentificationUnits(CollectionSpecimen cs)
        {
            if (cs != null)
            {
                this._collectionSpecimen = cs;
                _identificationUnitIterator = cs.IdentificationUnits;
                _identificationUnitIterator.Reset();
                this._currentIdentificationUnit = _identificationUnitIterator.First();
                if (this._currentIdentificationUnit != null)
                {
                    while (this._currentIdentificationUnit.RelatedUnitID != null)
                    {
                        try
                        {
                            this._currentIdentificationUnit = this.Next;
                        }
                        catch (DataFunctionsException)
                        {
                            this._currentIdentificationUnit = null;
                        }
                    }
                }
                //this._identificationUnitBrotherIterator = this._identificationUnitIterator;
            }
        }
 public IdentificationUnitVM(IdentificationUnit iu)
     : base(iu)
 {
 }
        private bool saveIU()
        {
            Cursor.Current = Cursors.WaitCursor;
            IdentificationUnit iu=null;
            try
            {
                if (this.parent == null)
                    iu = this._ius.CreateTopLevelIdentificationUnit(Identification);
                else
                    iu = this._ius.CreateIdentificationUnit(Identification);
            }
            catch (DataFunctionsException ex)
            {
                Cursor.Current = Cursors.Default;
                MessageBox.Show(ex.Message + " Identification and Identification Unit couldn't be saved.", "Exception", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                return false;
            }

            if (iu != null)
            {
                this.current = iu;
                this._lastIdentification = iu.LastIdentificationCache;
                iu.TaxonomicGroup = this._taxGroup = TaxonomicGroup;

                // Create Identification for new IU
                try
                {
                    DataFunctions.Instance.CreateIdentificationWithCheck(iu);
                }
                catch (Exception ex)
                {
                    Cursor.Current = Cursors.Default;
                    MessageBox.Show(ex.Message + " Identification and Identification Unit couldn't be saved.", "Exception", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    try
                    {
                        if (this.parent == null)
                        {
                            this._ius.RemoveTopLevelIU();
                        }
                        else
                            this._ius.Remove(iu);
                    }
                    catch (DataFunctionsException) { }

                    return false;
                }

                if (UnitDescription != null && !UnitDescription.Equals(String.Empty))
                    iu.UnitDescription = UnitDescription;

                if (Family != null && !Family.Equals(String.Empty))
                    iu.FamilyCache = Family;

                if (Order != null && !Order.Equals(String.Empty))
                    iu.OrderCache = Order;

                if (UnitIdentifier != null && !UnitIdentifier.Equals(String.Empty))
                    iu.UnitIdentifier = UnitIdentifier;

                iu.CollectionSpecimenID = cs.CollectionSpecimenID;

                iu.DisplayOrder = DisplayOrder;

                if (this.parent != null)//hat einen parent
                {
                    iu.RelatedUnitID = parent.IdentificationUnitID;
                    iu.RelationType = Relation;
                }
                try
                {
                    DataFunctions.Instance.Update(iu);
                }
                catch (Exception ex)
                {
                    Cursor.Current = Cursors.Default;
                    MessageBox.Show("Identification Unit Data couldn't be saved. (" + ex.Message + ")", "Database Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    return false;
                }

                if (UserProfiles.Instance.Current.DefaultIUGeographyAnalysis == true)
                {
                    try
                    {
                        // Create new IUGeographyAnalysis automatically
                        if (this.InvokeRequired)
                        {
                            newGeoAnalysisDelegate geoDelegate = new newGeoAnalysisDelegate(newGeoAnalysis);
                            this.Invoke(geoDelegate, iu);
                        }
                        else
                        {
                            this.newGeoAnalysis(iu);
                        }
                    }
                    catch (DataFunctionsException ex)
                    {
                        Cursor.Current = Cursors.Default;
                        MessageBox.Show("Associated GeoAnalysis with IU couldn't be automatically created. (" + ex.Message + ")", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                }
            }
            Cursor.Current = Cursors.Default;
            return true;
        }
        private void newGeoAnalysis(IdentificationUnit iu)
        {
            if (iu != null)
            {
                IdentificationUnitGeoAnalysis iuGeoAnalysis = null;

                try
                {
                    if (UserProfiles.Instance.Current != null && (bool)UserProfiles.Instance.Current.DefaultIUGeographyAnalysis)
                    {
                        try
                        {
                            iuGeoAnalysis = DataFunctions.Instance.CreateIdentificationUnitGeoAnalysis(iu, iu.CollectionSpecimen);
                        }
                        catch (DataFunctionsException ex)
                        {
                            throw ex;
                        }

                        if (StaticGPS.isOpened())
                        {
                            if (StaticGPS.position != null)
                            {
                                try
                                {
                                    float latitude = float.Parse(StaticGPS.position.Latitude.ToString());
                                    float longitude = float.Parse(StaticGPS.position.Longitude.ToString());
                                    float altitude = float.Parse(StaticGPS.position.SeaLevelAltitude.ToString());
                                    iuGeoAnalysis.setGeography(48.2, 11.8, 230.12);
                                }
                                catch (Exception)
                                {
                                    Cursor.Current = Cursors.Default;
                                    throw new DataFunctionsException("GPS-Data couldn`t be read. Data will be set to default values.");
                                }
                            }
                        }
                        try
                        {
                            if (UserProfiles.Instance.Current != null)
                            {
                                iuGeoAnalysis.ResponsibleName = UserProfiles.Instance.Current.CombinedNameCache;
                                iuGeoAnalysis.ResponsibleAgentURI = UserProfiles.Instance.Current.AgentURI;
                            }
                        }
                        catch (ConnectionCorruptedException) { }

                        try
                        {
                            DataFunctions.Instance.Update(iuGeoAnalysis);
                        }
                        catch (DataFunctionsException ex)
                        {
                            Cursor.Current = Cursors.Default;
                            DataFunctions.Instance.Remove(iuGeoAnalysis);
                            throw ex;
                        }
                    }
                }
                catch (ConnectionCorruptedException ex)
                {
                    throw new DataFunctionsException(ex.Message);
                }
            }
        }
        public NewIdentificationUnitDialog(CollectionSpecimen spec, IdentificationUnit parentUnit, IdentificationUnits ius)
            : this(spec, ius)
        {
            try
            {
                this.parent = parentUnit;
                if (this.parent != null)
                {
                    this.comboBoxTaxonomicGroup.SelectedItem = this._taxGroup = parent.TaxonomicGroup;

                    if (parent.LastIdentificationCache != null)
                    {
                        this.comboBoxIdentification.Items.Add(parent.LastIdentificationCache);
                        this.comboBoxIdentification.SelectedItem = this._lastIdentification = parent.LastIdentificationCache;
                        TaxonNames taxparent = DataFunctions.Instance.RetrieveTaxon(parent.LastIdentificationCache, parent.TaxonomicGroup);
                        if (taxparent != null)
                            tax = taxparent;
                        else
                            tax.TaxonNameCache = parent.LastIdentificationCache;
                        setSynonym(tax);
                    }
                }

                fillRelationList();

                this.comboBoxRelation.Enabled = true;

                short order = (short)DataFunctions.Instance.RetrieveMaxDisplayOrderCollectionSpecimenIdentificationUnit(spec);
                if (order > 0)
                    this.displayOrder = (short)(order + 1);
                else
                    this.displayOrder = 1;

                this.buttonOk.Enabled = this.setOkButton();
                this.buttonNewAnalysis.Enabled = this.setOkButton();
            }
            catch (ConnectionCorruptedException ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                this.Close();
            }
        }
        public bool FindTopLevelIU(int id)
        {
            try
            {
                IRestriction r1 = RestrictionFactory.Eq(typeof(IdentificationUnit), "_IdentificationUnitID", id);
                IRestriction r2 = RestrictionFactory.Eq(typeof(IdentificationUnit), "_RelatedUnitID", null);
                IRestriction restrict = RestrictionFactory.And().Add(r1).Add(r2);
                this._currentIdentificationUnit = con.Load<IdentificationUnit>(restrict);

                if (this._currentIdentificationUnit == null)
                {
                    return false;
                }
                else
                {
                    this._identificationUnitIterator.SetIteratorTo(this._currentIdentificationUnit);
                    return true;
                }
            }
            catch (Exception)
            {
                return false;
            }
        }
        public IList<IdentificationUnitGeoAnalysis> RetrieveIdentificationUnitGeoAnalysisForIdentificationUnit(IdentificationUnit iu)
        {
            IList<IdentificationUnitGeoAnalysis> iuGeoAnalysisList;

            try
            {
                IRestriction restrict = RestrictionFactory.Eq(typeof(IdentificationUnitGeoAnalysis), "_IdentificationUnitID", iu.IdentificationUnitID);
                iuGeoAnalysisList = con.LoadList<IdentificationUnitGeoAnalysis>(restrict);
            }
            catch (Exception)
            {
                iuGeoAnalysisList = new List<IdentificationUnitGeoAnalysis>();
            }

            return iuGeoAnalysisList;
        }
        public void CreateIdentificationWithCheck(IdentificationUnit iu)
        {
            try
            {
                Identification ident = SERIALIZER.CreateISerializableObject<Identification>();
                SERIALIZER.ConnectOneToMany(iu, ident);
                ident.CollectionSpecimenID = iu.CollectionSpecimenID;
                ident.IdentificationUnitID = iu.IdentificationUnitID;

                if (iu.LastIdentificationCache != null)
                {
                    ident.TaxonomicName = iu.LastIdentificationCache;
                }
                ident.IdentificationCategory = "determination";

                try
                {
                    // Current User as responsible agent
                    if (UserProfiles.Instance.Current != null)
                    {
                        ident.ResponsibleName = UserProfiles.Instance.Current.CombinedNameCache;

                        if (UserProfiles.Instance.Current.AgentURI != null)
                            ident.ResponsibleAgentURI = UserProfiles.Instance.Current.AgentURI;
                    }
                }
                catch (ConnectionCorruptedException)
                { }

                short sequence = 0;
                IList<Identification> identList = RetrieveIdentificationsForIU(iu.IdentificationUnitID);

                foreach (Identification item in identList)
                {
                    if (item != null)
                    {
                        if (item.IdentificationSequence > sequence)
                            sequence = (short)item.IdentificationSequence;
                    }
                }

                ident.IdentificationSequence = ++sequence;
                con.Save(ident);
            }
            catch (Exception)
            {
                throw new DataFunctionsException("New Identification couldn't be created");
            }
        }
 public TreeNode displayTopDownIdentificationUnit(IdentificationUnit iUnit)
 {
     TreeNode iuNode = new TreeNode();
     if (iUnit != null)
     {
         parametrizeIUNode(iUnit, iuNode);
         if (iUnit.ChildUnits.First() != null)
         {
             iuNode.Nodes.Add(displayTopDownIdentificationUnit(iUnit.ChildUnits.First()));
             while (iUnit.ChildUnits.HasNext())
             {
                 IdentificationUnit next = iUnit.ChildUnits.Next();
                 iuNode.Nodes.Add(displayTopDownIdentificationUnit(next));
             }
         }
     }
     return iuNode;
 }
        public TreeNode displayIdentificationUnit(IdentificationUnit iu)
        {
            TreeNode iuNode = new TreeNode();
            if(iu != null)
                iuNode = displayTopDownIdentificationUnit(iu);

            return iuNode;
        }
        public TreeNode displayBottomUpIdentificationUnit(IdentificationUnit iu, TreeNode childNode)
        {
            TreeNode iuNode = new TreeNode();
            TreeNode subRootNode = null;
            if (iu != null)
            {
                parametrizeIUNode(iu, iuNode);
                IdentificationUnit parent = iu.RelatedUnit;

                if(childNode != null)
                    iuNode.Nodes.Add(childNode);

                if (parent != null)
                {
                    subRootNode = displayBottomUpIdentificationUnit(parent, iuNode);
                }
                else
                {
                    CollectionSpecimen spec = iu.CollectionSpecimen;
                    subRootNode = displayBottomUpSpecimen(spec, iuNode);
                }
                if (subRootNode != null)
                {
                    return subRootNode;
                }
            }
            return iuNode;
        }
        public void parametrizeOnlyIUNode(IdentificationUnit iu, TreeNode iuNode)
        {
            if (iu != null && iuNode != null)
            {
                StringBuilder sb = new StringBuilder();
                if (iu.UnitIdentifier != null)
                {
                    sb.Append("(");
                    sb.Append(iu.UnitIdentifier);
                    sb.Append(") ");
                }
                if (iu.UnitDescription != null)
                    sb.Append(iu.UnitDescription).Append(", ");
                if (iu.LastIdentificationCache != null)
                    sb.Append(iu.LastIdentificationCache);
                iuNode.Text = sb.ToString();

                iuNode.Tag = new TreeViewNodeData((int)iu.IdentificationUnitID, TreeViewNodeTypes.IdentificationUnitNode);
                iuNode.ImageIndex = 0;
                iuNode.SelectedImageIndex = 0;

                if (iu.TaxonomicGroup != null)
                {
                    switch (iu.TaxonomicGroup.ToLower())
                    {
                        case "plant":
                            if (iu.UnitDescription != null)
                            {
                                switch (iu.UnitDescription.ToLower())
                                {
                                    case "tree":
                                        iuNode.ImageIndex = (int)TreeViewIconIndex.Tree;
                                        iuNode.SelectedImageIndex = (int)TreeViewIconIndex.Tree;
                                        break;
                                    case "branch":
                                        iuNode.ImageIndex = (int)TreeViewIconIndex.Branch;
                                        iuNode.SelectedImageIndex = (int)TreeViewIconIndex.Branch;
                                        break;
                                    case "leaf":
                                        iuNode.ImageIndex = (int)TreeViewIconIndex.Plant;
                                        iuNode.SelectedImageIndex = (int)TreeViewIconIndex.Plant;
                                        break;
                                    case "gall":
                                        iuNode.ImageIndex = (int)TreeViewIconIndex.Other;
                                        iuNode.SelectedImageIndex = (int)TreeViewIconIndex.Other;
                                        break;
                                    default:
                                        iuNode.ImageIndex = (int)TreeViewIconIndex.Plant;
                                        iuNode.SelectedImageIndex = (int)TreeViewIconIndex.Plant;
                                        break;
                                }
                            }
                            else
                            {
                                iuNode.ImageIndex = (int)TreeViewIconIndex.Plant;
                                iuNode.SelectedImageIndex = (int)TreeViewIconIndex.Plant;
                            }
                            break;
                        default:
                            int index;
                            try
                            {
                                index = (int)Enum.Parse(typeof(TreeViewIconIndex), iu.TaxonomicGroup.ToLower(), true);
                            }
                            catch (Exception)
                            {
                                index = (int)TreeViewIconIndex.Unknown;
                            }
                            iuNode.ImageIndex = index;
                            iuNode.SelectedImageIndex = index;
                            break;
                    }
                }
                if(this.expandLvl==ExpandLevel.IdentificationUnit&&iu.RelatedUnit==null)
                    iuNode.BackColor = System.Drawing.Color.BlanchedAlmond;
            }
        }
 public void parametrizeIUNode(IdentificationUnit iu, TreeNode iuNode)
 {
     if (iu != null && iuNode != null)
     {
         parametrizeOnlyIUNode(iu, iuNode);
         IdentificationUnitGeoAnalysis iugae = iu.IdentificationUnitGeoAnalysis.First();
         Identification id = iu.Identifications.First();
         IdentificationUnit firstBorn = iu.ChildUnits.First();
         IdentificationUnitAnalysis iuana = iu.IdentificationUnitAnalysis.First();
          if (iu.IdentificationUnitGeoAnalysis.First() != null)
         {
             IdentificationUnitGeoAnalysis iuga = iu.IdentificationUnitGeoAnalysis.First();
             TreeNode iugaNode = new TreeNode();
             parameterizeIUGeoANode(iuga, iugaNode);
             iuNode.Nodes.Add(iugaNode);
             while (iu.IdentificationUnitGeoAnalysis.HasNext())
             {
                 iuga = iu.IdentificationUnitGeoAnalysis.Next();
                 iugaNode = new TreeNode();
                 this.parameterizeIUGeoANode(iuga, iugaNode);
                 iuNode.Nodes.Add(iugaNode);
             }
         }
         IdentificationUnitAnalysis ana = iu.IdentificationUnitAnalysis.First();
         if (iu.IdentificationUnitAnalysis.First() != null)
         {
             IdentificationUnitAnalysis iua = iu.IdentificationUnitAnalysis.First();
             TreeNode iuaNode = new TreeNode();
             parametrizeIUANode(iua, iuaNode);
             iuNode.Nodes.Add(iuaNode);
             while (iu.IdentificationUnitAnalysis.HasNext())
             {
                 iua = iu.IdentificationUnitAnalysis.Next();
                 iuaNode = new TreeNode();
                 parametrizeIUANode(iua, iuaNode);
                 iuNode.Nodes.Add(iuaNode);
             }
         }
     }
 }
        public void Remove(IdentificationUnit identificationUnit)
        {
            if (identificationUnit != null)
            {
                //IU-Children und Analysen werden durch Cascade gelöscht.

                //// Remove all IdentificationUnitAnalysis assigned to IdentificationUnit
                //IList<IdentificationUnitAnalysis> iuaList;
                //IRestriction restrict = RestrictionFactory.Eq(typeof(IdentificationUnitAnalysis), "_IdentificationUnitID", identificationUnit.IdentificationUnitID);
                //iuaList = con.LoadList<IdentificationUnitAnalysis>(restrict);
                //foreach (IdentificationUnitAnalysis iuaTemp in iuaList)
                //{
                //    DataFunctions.Instance.Remove(iuaTemp);
                //}
                //// Remove all IdentificationUnitGeoAnalysis assigned to IdentificationUnit
                //IList<IdentificationUnitGeoAnalysis> iuGeoAnalysisList;
                //restrict = RestrictionFactory.Eq(typeof(IdentificationUnitGeoAnalysis), "_IdentificationUnitID", identificationUnit.IdentificationUnitID);
                //iuGeoAnalysisList = con.LoadList<IdentificationUnitGeoAnalysis>(restrict);
                //foreach (IdentificationUnitGeoAnalysis iuGeoAnalysisTemp in iuGeoAnalysisList)
                //{
                //    DataFunctions.Instance.Remove(iuGeoAnalysisTemp);
                //}
                try
                {
                    con.Delete(identificationUnit);
                }
                catch (Exception)
                {
                    throw new DataFunctionsException("Identification Unit ("+identificationUnit.IdentificationUnitID+") couldn't be removed.");
                }
            }
        }
        public IdentificationUnitAnalysis CreateIdentificationUnitAnalysis(IdentificationUnit iu, int analysisId, String value, DateTime analysisDate)
        {
            try
            {
                IdentificationUnitAnalysis iua = SERIALIZER.CreateISerializableObject<IdentificationUnitAnalysis>();

                SERIALIZER.ConnectOneToMany(iu, iua);

                iua.AnalysisID = analysisId;
                iua.AnalysisNumber = DateTime.Now.ToString();
                iua.AnalysisResult = value;
                iua.AnalysisDate = analysisDate.ToShortDateString();
                iua.IdentificationUnitID = iu.IdentificationUnitID;
                iua.CollectionSpecimenID = iu.CollectionSpecimenID;
                //Das Datum der Analyse wird gespeichert
                iua.AnalysisDate = System.DateTime.Now.ToShortDateString();

                // Current User as responsible agent
                try
                {
                    if (UserProfiles.Instance.Current != null)
                    {
                        iua.ResponsibleName = UserProfiles.Instance.Current.CombinedNameCache;

                        if (UserProfiles.Instance.Current.AgentURI != null)
                            iua.ResponsibleAgentURI = UserProfiles.Instance.Current.AgentURI;
                    }
                }
                catch (ConnectionCorruptedException)
                { }

                con.Save(iua);
                return iua;
            }
            catch (Exception)
            {
                throw new DataFunctionsException("New IdentificationUnitAnalysis couldn't be created.");
            }
        }
        private int findIUTopLevelID(IdentificationUnit iu)
        {
            if (iu == null)
                return -1;

            if (iu.RelatedUnit == null)
                return iu.IdentificationUnitID;

            while (iu.RelatedUnit != null)
            {
                iu = iu.RelatedUnit;
            }
            return iu.IdentificationUnitID;
        }
        public IdentificationUnitGeoAnalysis CreateIdentificationUnitGeoAnalysis(IdentificationUnit iu, CollectionSpecimen cs)
        {
            try
            {
                IdentificationUnitGeoAnalysis iuGeoAnalysis = SERIALIZER.CreateISerializableObject<IdentificationUnitGeoAnalysis>();
                SERIALIZER.ConnectOneToMany(iu, iuGeoAnalysis);
                iuGeoAnalysis.IdentificationUnitID = iu.IdentificationUnitID;
                iuGeoAnalysis.CollectionSpecimenID = cs.CollectionSpecimenID;

                try
                {
                    if (UserProfiles.Instance.Current != null)
                    {
                        iuGeoAnalysis.ResponsibleName = UserProfiles.Instance.Current.CombinedNameCache;
                        if (UserProfiles.Instance.Current.AgentURI != null)
                            iuGeoAnalysis.ResponsibleAgentURI = UserProfiles.Instance.Current.AgentURI;
                    }
                }
                catch (ConnectionCorruptedException)
                { }

                con.Save(iuGeoAnalysis);
                return iuGeoAnalysis;
            }
            catch (Exception)
            {
                throw new DataFunctionsException("New IdentificationUnit GeoAnalysis couldn't be created.");
            }
        }
        private void displayIdentificationUnit(IdentificationUnit iu)
        {
            if (iu != null)
            {
                TreeNode parent = treeViewFieldData.SelectedNode.Parent;
                TreeNode node = treeViewFieldData.SelectedNode;
                try
                {
                    Cursor.Current = Cursors.WaitCursor;
                    this.treeViewFieldData.BeginUpdate();
                    this.treeViewFieldData.SuspendLayout();
                    treeViewFieldData.SelectedNode = null;
                    TreeNode iuNode = new TreeNode();
                    treeViewFieldData.SelectedNode = null;
                    IList<TreeNode> removeNodes = new List<TreeNode>();
                    int i = 0;
                    if (this._tvOperations.expandLvl <= ExpandLevel.Specimen)
                    {
                        removeNodes.Add(node);
                        i = node.Index;
                    }
                    else
                    {
                        foreach (TreeNode tn in parent.Nodes)
                        {
                            TreeViewNodeData td = tn.Tag as TreeViewNodeData;
                            if (td.NodeType == TreeViewNodeTypes.IdentificationUnitNode)
                                removeNodes.Add(tn);
                            else
                                i++;
                        }
                    }

                    iuNode = _tvOperations.displayIdentificationUnit(iu);
                    foreach (TreeNode rem in removeNodes)
                    {
                        parent.Nodes.Remove(rem);
                    }
                    parent.Nodes.Insert(i, iuNode);
                    this.treeViewFieldData.SelectedNode = iuNode;
                    this._expandTrigger = false;
                    iuNode.ExpandAll();
                    this._expandTrigger = true;
                    this._actualLvl = TreeViewNodeTypes.IdentificationUnitNode;
                    this.enableDisableButtons(TreeViewNodeTypes.IdentificationUnitNode);
                    this.treeViewFieldData.Refresh();
                }
                catch (Exception ex)
                {
                    this.treeViewFieldData.SelectedNode = null;
                    this.treeViewFieldData.ResumeLayout();
                    this.treeViewFieldData.EndUpdate();
                    Cursor.Current = Cursors.Default;
                    MessageBox.Show("DisplayError: " + ex.Message);
                    return;
                }

                this.treeViewFieldData.ResumeLayout();
                this.treeViewFieldData.EndUpdate();
                this.treeViewFieldData.Refresh();
                Cursor.Current = Cursors.Default;
            }
        }
 public IEnumerable<IdentificationUnitAnalysis> RetrieveIdentificationUnitAnalysisForIdentificationUnit(IdentificationUnit iu)
 {
     if (iu != null)
         return iu.IdentificationUnitAnalysis;
     else
         return new List<IdentificationUnitAnalysis>();
 }
        public NewIdentificationUnitDialog(CollectionSpecimen spec, IdentificationUnits ius)
            : this(true)
        {
            if (ius != null && spec != null)
            {
                this.cs = spec;
                this._ius = ius;

                this.comboBoxTaxonomicGroup_TextChanged(null, null);

                this.parent = null;
                try
                {
                    tax = DataFunctions.Instance.CreateTaxonNames();
                    this.buttonOk.Enabled = false;
                    this.buttonNewAnalysis.Enabled = false;
                    this.comboBoxRelation.Enabled = false;
                    this.fillTaxonomicGroupList();
                    if (this.comboBoxTaxonomicGroup.Items.Count > 0)
                    {
                        this.comboBoxTaxonomicGroup.SelectedItem = this.comboBoxTaxonomicGroup.Items[0];
                    }

                    // Liste aller IdentificationUnits des aktuellen Specimen, um DiplayOrder zu finden
                    short order = (short)DataFunctions.Instance.RetrieveMaxDisplayOrderCollectionSpecimenIdentificationUnit(spec);
                    if (order > 0)
                        this.displayOrder = (short)(order + 1);
                    else
                        this.displayOrder = 1;
                }
                catch (ConnectionCorruptedException ex)
                {
                    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    this.Close();
                }
            }
            else
                this.Close();
        }
        public IdentificationUnitForm(IdentificationUnit currentIU)
            : this(true)
        {
            if (currentIU != null)
            {
                this._iu = currentIU;

                try
                {
                    Cursor.Current = Cursors.WaitCursor;
                    this.fillIUData();
                    this._oldIdentificationCache = currentIU.LastIdentificationCache;
                    Cursor.Current = Cursors.Default;
                }
                catch (ConnectionCorruptedException ex)
                {
                    Cursor.Current = Cursors.Default;
                    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    this.Close();
                }
            }
        }
 public IdentificationUnit CreateTopLevelIdentificationUnit(String lastIdentificationCache)
 {
     try
     {
         IdentificationUnit iu = SERIALIZER.CreateISerializableObject<IdentificationUnit>();
         iu.CollectionSpecimenID = this._collectionSpecimen.CollectionSpecimenID;
         iu.LastIdentificationCache = lastIdentificationCache;
         SERIALIZER.ConnectOneToMany(this._collectionSpecimen, iu);
         SERIALIZER.Connector.Save(iu);
         this._currentIdentificationUnit = this._identificationUnitIterator.Last();
         return iu;
     }
     catch (Exception)
     {
         throw new DataFunctionsException("New TopLevel Identification Unit couldn't be created");
     }
 }