示例#1
0
        private void IntTblWiz2_Load(object sender, System.EventArgs e)
        {
            Frame.Description = "Choose, if the relation is directed or bidirectional.";

            RelatedTableInfo rti1 = model.IntermediateTableNode.IntermediateTable[0];
            RelatedTableInfo rti2 = model.IntermediateTableNode.IntermediateTable[1];

            RelationDirection dir = rti1.RelationDirection;

            if (dir == RelationDirection.Bidirectional)
            {
                radioBi.Checked = true;
            }
            else if (dir == RelationDirection.DirectedFromMe)
            {
                radioFromMe.Checked = true;
            }
            else
            {
                radioToMe.Checked = true;
            }
            this.lblBi.Text     = rti1.Table + " <-> " + rti2.Table;
            this.lblFromMe.Text = rti1.Table + " -> " + rti2.Table;
            this.lblToMe.Text   = rti1.Table + " <- " + rti2.Table;

            // This would be the right view to specify a relation name.
            // But we don't implement it, because it doesn't make much sense,
            // as long as a mapping table can't be mapped twice.
        }
示例#2
0
        public override void OnLeaveView()
        {
            RelatedTableInfo rti = model.IntermediateTableNode.IntermediateTable[model.Index];

            rti.IsElement   = radioElement.Checked;
            rti.IsComposite = radioComposite.Checked;
            if (rti.RelationDirection == RelationDirection.Bidirectional &&
                model.Index == 1 && rti.IsComposite)
            {
                RelatedTableInfo rti2 = model.IntermediateTableNode.IntermediateTable[0];
                if (rti2.IsComposite)
                {
                    MessageBox.Show("Only one side of a bidirectional relation can be a composite. Setting '"
                                    + rti2.Type + "." + rti2.FieldName + "' to Assoziation.");
                }
                rti2.IsComposite = false;
            }
            if (radioArrayList.Checked)
            {
                rti.CodingStyle = CodingStyle.ArrayList;
            }
            if (radioIList.Checked)
            {
                rti.CodingStyle = CodingStyle.IList;
            }
            if (radioNDOArrayList.Checked)
            {
                rti.CodingStyle = CodingStyle.NDOArrayList;
            }
        }
示例#3
0
        public override void FromXml(XmlElement element)
        {
            base.FromXml(element);
            this.tableName        = element.Attributes["TableName"].Value;
            this.relatedTableInfo = new RelatedTableInfo();
            XmlElement tiElement = (XmlElement)element.SelectSingleNode("RelatedTableInfo");

            this.relatedTableInfo.FromXml(tiElement);
        }
示例#4
0
 public void FromXml(XmlElement element)
 {
     this.name = element.Attributes["Name"].Value;
     for (int i = 0; i < 2; i++)
     {
         XmlElement tiElement = (XmlElement)element.SelectSingleNode("TableInfo" + i);
         tableInfo[i] = new RelatedTableInfo();
         tableInfo[i].FromXml(tiElement);
     }
 }
示例#5
0
        public void UnmapIntermediateTable(IntermediateTableNode itn)
        {
            TableNode tn    = itn.OriginalTableNode;
            int       index = databaseNode.Nodes.IndexOf(itn);

            tn.Remove();             // Was inserted as node in itn.
            itn.Remove();
            databaseNode.Nodes.Insert(index, tn);
            tn.TreeView.SelectedNode = tn;
            for (int tableNr = 0; tableNr < 2; tableNr++)
            {
                RelatedTableInfo rti = itn.IntermediateTable[tableNr];
                RemoveRelationNodeFromTable(rti.Table, rti.ForeignKeyColumnName);
            }
        }
示例#6
0
        public override void OnLeaveView()
        {
            RelatedTableInfo rti1 = model.IntermediateTableNode.IntermediateTable[0];
            RelatedTableInfo rti2 = model.IntermediateTableNode.IntermediateTable[1];

            if (radioBi.Checked)
            {
                rti1.RelationDirection = RelationDirection.Bidirectional;
            }
            else if (radioFromMe.Checked)
            {
                rti1.RelationDirection = RelationDirection.DirectedFromMe;
            }
            else
            {
                rti1.RelationDirection = RelationDirection.DirectedToMe;
            }
            rti2.RelationDirection = RelationDirectionClass.Reverse(rti1.RelationDirection);
        }
示例#7
0
 public ForeignIntermediateTableRelation(RelatedTableInfo relatedTableInfo, string tableName)
 {
     this.relatedTableInfo = relatedTableInfo;
     this.tableName        = tableName;
     base.IsForeign        = true;
 }
示例#8
0
        public void MapIntermediateTable(TableNode tn)
        {
            IntermediateTable     it  = new IntermediateTable(tn.Text);
            IntermediateTableNode itn = new IntermediateTableNode(it, tn);

            IList tableNodes = databaseNode.TableNodes;

            tableNodes.Remove(tn);

            IntermediateTableWizardModel model = new IntermediateTableWizardModel(itn, tableNodes);

            IWizardController controller = ApplicationController.wizardControllerFactory.Create
                                               ("IntermediateTableWizController", "IntTblWiz", "Intermediate Table Wizard");
            //controller.FrameSize = new Size(544, 416);
            DialogResult r = controller.Run(model);

            if (r == DialogResult.OK)
            {
                DatabaseNode parent = (DatabaseNode)tn.Parent;
                //tn.Parent.Nodes. Remove(tn);
                int index = parent.Nodes.IndexOf(tn);
                tn.Remove();
                tn.Parent.Nodes.Insert(index, itn);
                itn.TreeView.SelectedNode = itn;
                itn.Nodes.Add(tn);                  // This ensures persisting the column nodes with file/save.
                RelatedTableInfo rti0     = it[0];
                RelatedTableInfo rti1     = it[1];
                TableNode        relTn0   = null;
                TableNode        relTn1   = null;
                RelationNode     relNode0 = null;
                RelationNode     relNode1 = null;
                foreach (TableNode loopTn in tableNodes)
                {
                    if (loopTn.Text == rti0.Table)
                    {
                        relTn0 = loopTn;
                        if (rti0.RelationDirection != RelationDirection.DirectedToMe)
                        {
                            ForeignIntermediateTableRelation fitr = new ForeignIntermediateTableRelation(rti0, tn.Text);
                            relNode0 = new RelationNode(fitr, relTn0);
                            relTn0.Nodes.Add(relNode0);
                        }
                    }
                    if (loopTn.Text == rti1.Table)
                    {
                        relTn1 = loopTn;
                        if (rti1.RelationDirection != RelationDirection.DirectedToMe)
                        {
                            ForeignIntermediateTableRelation fitr = new ForeignIntermediateTableRelation(rti1, tn.Text);
                            relNode1 = new RelationNode(fitr, relTn1);
                            relTn1.Nodes.Add(relNode1);
                        }
                    }
                }
                if (relNode0 != null)
                {
                    relNode0.RelatedTableNode = relTn1;
                }
                if (relNode1 != null)
                {
                    relNode1.RelatedTableNode = relTn0;
                }
            }
        }
示例#9
0
 public IntermediateTable(string name)
 {
     tableInfo[0] = new RelatedTableInfo();
     tableInfo[1] = new RelatedTableInfo();
     this.name    = name;
 }
示例#10
0
        private void IntTblWiz3_Load(object sender, System.EventArgs e)
        {
            RelatedTableInfo rti         = model.IntermediateTableNode.IntermediateTable[model.Index];
            string           description = "Enter the field name of the relation in the class '" + rti.Type + "'. ";

            description      += "The relation type Composite couples the life cycle of the related object to the life cycle of the parent.\n\n";
            description      += "If the cardinality is n, the coding style determines, which type is used for the relation variable. Otherwise the type of the relation variable is the related class.";
            Frame.Description = description;

            lblClass.Text = rti.Type;
            if (rti.FieldName == string.Empty)
            {
                RelatedTableInfo otherRti = model.IntermediateTableNode.IntermediateTable[(model.Index + 1) % 2];
                string           name;
                if (rti.IsElement)
                {
                    name = model.FindTable(rti.Table).Table.ClassName;
                }
                else
                {
                    name = otherRti.Table.Replace(" ", string.Empty);
                }
                rti.FieldName = name.Substring(0, 1).ToLower() + name.Substring(1);
            }
            if (rti.IsElement)
            {
                radioElement.Checked = true;
            }
            else
            {
                radioList.Checked = true;
            }

            if (rti.IsComposite)
            {
                radioComposite.Checked = true;
            }
            else
            {
                radioAssoziation.Checked = true;
            }

            gbCodingStyle.Enabled = !rti.IsElement;

            if (rti.CodingStyle == CodingStyle.ArrayList)
            {
                radioArrayList.Checked = true;
            }
            else if (rti.CodingStyle == CodingStyle.IList)
            {
                radioIList.Checked = true;
            }
            else
            {
                radioNDOArrayList.Checked = true;
            }

#if !NDO11
            radioArrayList.Text       = "List<T>";
            radioIList.Text           = "IList<T>";
            radioNDOArrayList.Visible = false;
#endif


            this.txtFieldName.DataBindings.Add("Text", rti, "FieldName");
        }