Exemple #1
0
        public override CswNbtNode CopyNode(bool IsNodeTemp = false, Action <CswNbtNode> OnCopy = null)
        {
            // Copy NodeType
            string NewNodeTypeName = "Copy Of " + NodeTypeName.Text;
            Int32  CopyInt         = 1;

            while (null != _CswNbtResources.MetaData.getNodeType(NewNodeTypeName))
            {
                CopyInt++;
                NewNodeTypeName = "Copy " + CopyInt.ToString() + " Of " + NodeTypeName.Text;
            }

            CswNbtObjClassDesignNodeType NodeTypeCopy = base.CopyNodeImpl(IsNodeTemp, delegate(CswNbtNode NewNode)
            {
                ((CswNbtObjClassDesignNodeType)NewNode).InternalCreate    = true;
                ((CswNbtObjClassDesignNodeType)NewNode).NodeTypeName.Text = NewNodeTypeName;
                if (null != OnCopy)
                {
                    OnCopy(NewNode);
                }
            });

            // Copy Tabs
            Dictionary <Int32, CswNbtObjClassDesignNodeTypeTab> TabMap = new Dictionary <Int32, CswNbtObjClassDesignNodeTypeTab>();

            foreach (CswNbtObjClassDesignNodeTypeTab TabNode in getTabNodes())
            {
                CswNbtObjClassDesignNodeTypeTab TabCopy = TabNode.CopyNode(IsNodeTemp, delegate(CswNbtNode CopiedNode)
                {
                    ((CswNbtObjClassDesignNodeTypeTab)CopiedNode).NodeTypeValue.RelatedNodeId = NodeTypeCopy.NodeId;
                    ((CswNbtObjClassDesignNodeTypeTab)CopiedNode).TabName.Text = TabNode.TabName.Text;
                });

                TabMap.Add(TabNode.RelationalId.PrimaryKey, TabCopy);
            }

            // case 31518 - props won't be able to see the tab if we don't do this
            _CswNbtResources.MetaData.refreshAll();

            // Copy Props
            Collection <CswNbtObjClassDesignNodeTypeProp>        PropNodes = getPropNodes();
            Dictionary <Int32, CswNbtObjClassDesignNodeTypeProp> PropMap   = new Dictionary <Int32, CswNbtObjClassDesignNodeTypeProp>();

            foreach (CswNbtObjClassDesignNodeTypeProp PropNode in PropNodes)
            {
                CswNbtObjClassDesignNodeTypeProp PropCopy = PropNode.CopyNode(IsNodeTemp, delegate(CswNbtNode CopiedNode)
                {
                    ((CswNbtObjClassDesignNodeTypeProp)CopiedNode).NodeTypeValue.RelatedNodeId = NodeTypeCopy.NodeId;
                    ((CswNbtObjClassDesignNodeTypeProp)CopiedNode).PropName.Text = PropNode.PropName.Text;
                });
                PropMap.Add(PropNode.RelationalId.PrimaryKey, PropCopy);

                // Fix layout
                if (PropCopy.PropName.Text.Equals(CswNbtObjClass.PropertyName.Save))
                {
                    foreach (CswNbtObjClassDesignNodeTypeTab NewTab in TabMap.Values)
                    {
                        //Case 29181 - Save prop on all tabs except identity
                        if (NewTab.RelationalId.PrimaryKey != NodeTypeCopy.RelationalNodeType.getIdentityTab().TabId)
                        {
                            _CswNbtResources.MetaData.NodeTypeLayout.updatePropLayout(CswEnumNbtLayoutType.Edit, NodeTypeCopy.RelationalId.PrimaryKey, PropCopy.RelationalNodeTypeProp, false, NewTab.RelationalId.PrimaryKey, Int32.MaxValue, 1);
                        }
                    }
                }
                else
                {
                    foreach (CswEnumNbtLayoutType LayoutType in CswEnumNbtLayoutType._All)
                    {
                        Dictionary <Int32, CswNbtMetaDataNodeTypeLayoutMgr.NodeTypeLayout> OriginalLayouts = _CswNbtResources.MetaData.NodeTypeLayout.getLayout(LayoutType, PropNode.RelationalNodeTypeProp, null);
                        foreach (CswNbtMetaDataNodeTypeLayoutMgr.NodeTypeLayout OriginalLayout in OriginalLayouts.Values)
                        {
                            if (OriginalLayout != null)
                            {
                                Int32 NewTabId = Int32.MinValue;
                                if (LayoutType == CswEnumNbtLayoutType.Edit)
                                {
                                    NewTabId = TabMap[OriginalLayout.TabId].RelationalId.PrimaryKey;
                                }
                                _CswNbtResources.MetaData.NodeTypeLayout.updatePropLayout(LayoutType, NodeTypeCopy.RelationalId.PrimaryKey, PropCopy.RelationalNodeTypeProp, true, NewTabId, OriginalLayout.DisplayRow, OriginalLayout.DisplayColumn);
                            }
                        }
                    } // foreach( CswEnumNbtLayoutType LayoutType in CswEnumNbtLayoutType._All )
                }
            }         // foreach( CswNbtObjClassDesignNodeTypeProp PropNode in getPropNodes() )


            // Fix Conditional Props (case 22328)
            foreach (CswNbtObjClassDesignNodeTypeProp PropNode in PropNodes)
            {
                if (CswTools.IsPrimaryKey(PropNode.DisplayConditionProperty.RelatedNodeId))
                {
                    CswNbtObjClassDesignNodeTypeProp PropCopy             = PropMap[PropNode.RelationalId.PrimaryKey];
                    CswNbtObjClassDesignNodeTypeProp DisplayConditionProp = PropNodes.FirstOrDefault(p => p.NodeId == PropNode.DisplayConditionProperty.RelatedNodeId);
                    if (null != DisplayConditionProp)
                    {
                        CswNbtObjClassDesignNodeTypeProp DisplayConditionPropCopy = PropMap[DisplayConditionProp.RelationalId.PrimaryKey];
                        PropCopy.DisplayConditionProperty.RelatedNodeId = DisplayConditionPropCopy.NodeId;
                    }
                }
            }

            // Fix the name template, now that properties are in place
            NodeTypeCopy.postChanges(true);

            //if( OnCopyNodeType != null )
            //    OnCopyNodeType( OldNodeType, NewNodeType );

            return(NodeTypeCopy.Node);
        } // CopyNode()