Example #1
0
        public static CswNbtView LocationPropertyView(CswNbtResources CswNbtResources, CswNbtMetaDataNodeTypeProp Prop, CswPrimaryKey NodeId = null, IEnumerable <CswPrimaryKey> InventoryGroupIds = null, CswEnumNbtFilterResultMode ResultMode = null, string FullPathFilter = "")
        {
            CswNbtMetaDataObjectClass ContainerOC   = CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.ContainerClass);
            CswNbtMetaDataObjectClass UserOC        = CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.UserClass);
            CswNbtMetaDataObjectClass RequestItemOC = CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.RequestItemClass);

            //TODO (Case 31016): This is pretty hack-a-delic - we should convert these into prop attributes (like RespectAllowInventory, DisableLowestLevel, and IncludeRoot)
            bool IsLocationNode    = (null != Prop && Prop.getNodeType().getObjectClass().ObjectClass == CswEnumNbtObjectClass.LocationClass);
            bool IsContainerNode   = (null != Prop && null != ContainerOC && Prop.getNodeType().ObjectClassId == ContainerOC.ObjectClassId);
            bool IsUserNode        = (null != Prop && null != UserOC && Prop.getNodeType().ObjectClassId == UserOC.ObjectClassId);
            bool IsRequestItemNode = (null != Prop && null != RequestItemOC && Prop.getNodeType().ObjectClassId == RequestItemOC.ObjectClassId);

            CswNbtView Ret = new CswNbtView(CswNbtResources);

            Ret.ViewName      = GetTopLevelName(CswNbtResources);
            Ret.Root.Included = IsLocationNode;
            CswNbtObjClassLocation.makeLocationsTreeView(ref Ret, CswNbtResources,
                                                         NodeIdToFilterOut: NodeId,
                                                         RequireAllowInventory: (CswNbtResources.Modules.IsModuleEnabled(CswEnumNbtModuleName.Containers) && (IsContainerNode || IsUserNode || IsRequestItemNode)),
                                                         InventoryGroupIds: InventoryGroupIds,
                                                         DisableLowestLevel: IsLocationNode,
                                                         ResultMode: ResultMode,
                                                         FullPathFilter: FullPathFilter);
            return(Ret);
        }
Example #2
0
        public CswViewBuilderProp(CswNbtMetaDataNodeTypeProp NodeTypeProp)
        {
            CswNbtMetaDataNodeType nt = NodeTypeProp.getNodeType();

            if (null != nt)
            {
                OwnerName = nt.NodeTypeName;
            }
            FieldType = NodeTypeProp.getFieldTypeValue();
            //ListOptions.FromString( NodeTypeProp.ListOptions );
            ListOptions.FromString(NodeTypeProp.DesignNode.AttributeProperty[CswEnumNbtPropertyAttributeName.Options].AsText.Text);
            RelatedIdType = CswEnumNbtViewRelatedIdType.NodeTypeId;
            MetaDataPropNameWithQuestionNo = NodeTypeProp.PropNameWithQuestionNo;
            MetaDataPropId   = NodeTypeProp.FirstPropVersionId;
            MetaDataPropName = NodeTypeProp.PropName;
            MetaDataTypeName = NodeTypeProp.getNodeType().NodeTypeName;
            FieldTypeRule    = NodeTypeProp.getFieldTypeRule();
            Type             = CswEnumNbtViewPropType.NodeTypePropId;
            PropName         = MetaDataPropName;
            AssociatedPropIds.Add(MetaDataPropId.ToString());
            if (NodeTypeProp.ObjectClassPropId != Int32.MinValue)
            {
                AssociatedPropIds.Add(NodeTypeProp.ObjectClassPropId.ToString());
            }
        } //ctor Ntp
Example #3
0
        public void addSingleNodeProp(CswNbtNode Node, JObject PropObj, CswNbtMetaDataNodeTypeTab Tab)
        {
            CswPropIdAttr PropIdAttr = new CswPropIdAttr(CswConvert.ToString(PropObj["id"]));

            CswNbtMetaDataNodeTypeProp MetaDataProp = _CswNbtResources.MetaData.getNodeTypeProp(PropIdAttr.NodeTypePropId);

            if (null != MetaDataProp)
            {
                CswNbtMetaDataNodeType NodeType = MetaDataProp.getNodeType();

                if (_CswNbtResources.Permit.canNodeType(Security.CswEnumNbtNodeTypePermission.Edit, NodeType) ||
                    _CswNbtResources.Permit.canTab(Security.CswEnumNbtNodeTypePermission.Edit, NodeType, Tab) ||
                    _CswNbtResources.Permit.isPropWritable(Security.CswEnumNbtNodeTypePermission.Edit, MetaDataProp, Tab))
                {
                    Node.Properties[MetaDataProp].ReadJSON(PropObj, null, null);

                    // Recurse on sub-props
                    if (null != PropObj["subprops"])
                    {
                        JObject SubPropsObj = (JObject)PropObj["subprops"];
                        if (SubPropsObj.HasValues)
                        {
                            foreach (JObject ChildPropObj in SubPropsObj.Properties()
                                     .Where(ChildProp => null != ChildProp.Value && ChildProp.Value.HasValues)
                                     .Select(ChildProp => (JObject)ChildProp.Value)
                                     .Where(ChildPropObj => ChildPropObj.HasValues))
                            {
                                addSingleNodeProp(Node, ChildPropObj, Tab);
                            }
                        }
                    }
                } //if user has permission to edit the property
            }     //if not null
        }         // addSingleNodeProp()
        private bool _canViewProp(int NodeTypePropId, CswPrimaryKey PermissionGroupId)
        {
            CswNbtMetaDataNodeTypeProp NTProp = _CswNbtResources.MetaData.getNodeTypeProp(NodeTypePropId);

            // Must have permission to at least one tab where this property appears
            Dictionary <Int32, CswNbtMetaDataNodeTypeLayoutMgr.NodeTypeLayout> EditLayouts = NTProp.getEditLayouts();
            bool canView = EditLayouts.Values.Aggregate(false,
                                                        (current, EditLayout) => current || _CswNbtResources.Permit.canTab(
                                                            CswEnumNbtNodeTypePermission.View,
                                                            NTProp.getNodeType(),
                                                            _CswNbtResources.MetaData.getNodeTypeTab(EditLayout.TabId)));

            #region Container Request Button Inventory Group Permission

            if (canView)
            {
                CswNbtMetaDataObjectClass ContainerClass = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.ContainerClass);
                if (null != ContainerClass)
                {
                    CswNbtMetaDataObjectClassProp RequestProp = _CswNbtResources.MetaData.getObjectClassProp(ContainerClass.ObjectClassId, CswNbtObjClassContainer.PropertyName.Request);
                    if (NTProp.ObjectClassPropId == RequestProp.PropId)
                    {
                        if (_CswNbtResources.Modules.IsModuleEnabled(CswEnumNbtModuleName.Requesting))
                        {
                            canView = CswNbtObjClassContainer.canContainer(_CswNbtResources, _CswNbtResources.Actions[CswEnumNbtActionName.Submit_Request], PermissionGroupId);
                        }
                        else
                        {
                            canView = false; // case 31851
                        }
                    }
                }
            }

            #endregion

            #region Material Receive Button View Permission

            if (canView)
            {
                CswNbtMetaDataObjectClass MaterialClass = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.ChemicalClass);
                if (null != MaterialClass)
                {
                    CswNbtMetaDataObjectClassProp RequestProp = _CswNbtResources.MetaData.getObjectClassProp(MaterialClass.ObjectClassId, CswNbtPropertySetMaterial.PropertyName.Receive);
                    if (NTProp.ObjectClassPropId == RequestProp.PropId)
                    {
                        canView = _CswNbtResources.Permit.can(CswEnumNbtActionName.Receiving);
                    }
                }
            }

            #endregion

            return(canView);
        }
Example #5
0
        }     //isPropWritable

        /// <summary>
        /// Determines if the Property is editable
        /// </summary>
        public bool isPropWritable(CswEnumNbtNodeTypePermission Permission, CswNbtMetaDataNodeTypeProp MetaDataProp, CswNbtMetaDataNodeTypeTab MetaDataTab, CswNbtNodePropWrapper NodePropWrapper, CswNbtObjClassRole Role)
        {
            bool ret = false;

            if (null != MetaDataProp)
            {
                _initPermissionInfo(Role, null, MetaDataProp.getNodeType(), Permission, ((null != NodePropWrapper) ? NodePropWrapper.NodeId : null), MetaDataProp);
                ret = _isPropWritableImpl(MetaDataTab, MetaDataProp, NodePropWrapper);
            } //if-else we have metadata prop
            return(ret);
        }     //isPropWritable
        } // updatePropLayout()

        public void updatePropLayout(CswEnumNbtLayoutType LayoutType, CswNbtMetaDataNodeTypeProp Prop, CswNbtMetaDataNodeTypeProp InsertAfterProp, bool DoMove)
        {
            bool Added = false;

            if (DoMove)
            {
                removePropFromLayout(LayoutType, Prop, Int32.MinValue);
            }
            if (InsertAfterProp != null)
            {
                Dictionary <Int32, NodeTypeLayout> InsertAfterPropLayouts = getLayout(LayoutType, InsertAfterProp, null);
                if (InsertAfterPropLayouts.Values.Count > 0)
                {
                    foreach (Int32 TabId in InsertAfterPropLayouts.Keys)
                    {
                        NodeTypeLayout InsertAfterPropLayout = InsertAfterPropLayouts[TabId];

                        // Make space for the new prop
                        CswTableUpdate LayoutUpdate = _CswNbtMetaDataResources.CswNbtResources.makeCswTableUpdate("makeSpaceForProp_Update", "nodetype_layout");
                        string         WhereClause  = "where layouttype = '" + LayoutType.ToString() + "' and nodetypeid = " + InsertAfterProp.NodeTypeId.ToString();
                        if (TabId != Int32.MinValue && LayoutType == CswEnumNbtLayoutType.Edit)
                        {
                            WhereClause += " and nodetypetabsetid = " + TabId.ToString();
                        }
                        DataTable LayoutTable = LayoutUpdate.getTable(WhereClause);

                        foreach (DataRow Row in LayoutTable.Rows)
                        {
                            if (CswConvert.ToInt32(Row["display_column"]) == InsertAfterPropLayout.DisplayColumn &&
                                CswConvert.ToInt32(Row["display_row"]) > InsertAfterPropLayout.DisplayRow)
                            {
                                Row["display_row"] = CswConvert.ToDbVal(CswConvert.ToInt32(Row["display_row"]) + 1);
                            }
                        }
                        LayoutUpdate.update(LayoutTable);

                        // Add new prop to the layout
                        updatePropLayout(LayoutType, Prop.NodeTypeId, Prop, false, TabId, InsertAfterPropLayout.DisplayRow + 1, InsertAfterPropLayout.DisplayColumn, InsertAfterPropLayout.TabGroup);
                        Added = true;
                    } // foreach( Int32 TabId in InsertAfterPropLayouts.Keys )
                }     // if( InsertAfterPropLayouts.Values.Count > 0 )
            }         // if( InsertAfterProp != null )

            if (false == Added)
            {
                // Just add it somewhere
                updatePropLayout(LayoutType, Prop.NodeTypeId, Prop, false, Prop.getNodeType().getFirstNodeTypeTab().TabId);
            }

            if (_Cache.ContainsKey(Prop.NodeTypeId))
            {
                _Cache.Remove(Prop.NodeTypeId);
            }
        } // updatePropLayout()
Example #7
0
        public void afterCreateNodeTypeProp(CswNbtMetaDataNodeTypeProp NodeTypeProp)
        {
            //Case 53001 - grid properties need to have the the current NT set as the root
            CswNbtView propView = _CswNbtFieldResources.CswNbtResources.ViewSelect.restoreView(NodeTypeProp.ViewId);

            propView.SetViewMode(CswEnumNbtViewRenderingMode.Grid);
            propView.AddViewRelationship(NodeTypeProp.getNodeType(), true);
            propView.save();

            _CswNbtFieldTypeRuleDefault.afterCreateNodeTypeProp(NodeTypeProp);
        }
Example #8
0
        public CswNbtNodePropWrapper this[CswNbtMetaDataNodeTypeProp NodeTypeProp]
        {
            get
            {
                CswNbtMetaDataNodeType NodeType = _CswNbtNode.getNodeType();
                if (NodeTypeProp == null)
                {
                    throw new CswDniException(CswEnumErrorType.Error, "Invalid Property", "CswNbtNodePropColl[] was passed a null CswNbtMetaDataNodeTypeProp object");
                }
                if (NodeTypeProp.getNodeType().FirstVersionNodeTypeId != NodeType.FirstVersionNodeTypeId)
                {
                    throw new CswDniException(CswEnumErrorType.Error, "Invalid Property", "CswNbtNodePropColl[] on nodetype " + NodeType.NodeTypeName + " (" + NodeType.NodeTypeId + ") was passed a CswNbtMetaDataNodeTypeProp: " + NodeTypeProp.PropName + " (" + NodeTypeProp.PropId + ") of the wrong nodetype: " + NodeTypeProp.getNodeType().NodeTypeName + " (" + NodeTypeProp.NodeTypeId + ")");
                }
                if (false == _PropsIndexByFirstVersionPropId.ContainsKey(NodeTypeProp.FirstPropVersionId))
                {
                    throw new CswDniException(CswEnumErrorType.Error, "Invalid Property", "There is no property with this firstpropversionid " + NodeTypeProp.FirstPropVersionId.ToString() + " on nodetypeid " + NodeType.NodeTypeId.ToString());
                }

                return(_Props[_PropsIndexByFirstVersionPropId[NodeTypeProp.FirstPropVersionId]]);
            } //get
        }     //this[NodeTypeProp]
        /// <summary>
        /// Returns true if the relationship is invalid
        /// </summary>
        private bool _isInvalidRelationship(CswEnumNbtViewRelatedIdType RelatedIdType, Int32 FkValue, CswEnumNbtViewPropIdType inValuePropType, Int32 inValuePropId)
        {
            bool RetIsInvalid = false;

            //if( RelatedIdType == NbtViewRelatedIdType.NodeTypeId )
            //{
            //    CswNbtMetaDataNodeType FkRelationshipTargetNt = _CswNbtFieldResources.CswNbtResources.MetaData.getNodeType( FkValue );
            //    RetIsInvalid = ( null == FkRelationshipTargetNt );
            //    if( false == RetIsInvalid )
            //    {
            //        CswNbtMetaDataNodeTypeProp ValueNtp = _CswNbtFieldResources.CswNbtResources.MetaData.getNodeTypeProp( inValuePropId );
            //        RetIsInvalid = ( null == ValueNtp ||
            //                         _CswNbtFieldResources.CswNbtResources.MetaData.getNodeTypeFirstVersion( ValueNtp.NodeTypeId ) != FkRelationshipTargetNt.getFirstVersionNodeType() );
            //    }
            //}
            //else if( RelatedIdType == NbtViewRelatedIdType.ObjectClassId )
            //{
            //    CswNbtMetaDataObjectClass FkRelationshipTargetOc = _CswNbtFieldResources.CswNbtResources.MetaData.getObjectClass( FkValue );
            //    RetIsInvalid = ( null == FkRelationshipTargetOc );

            //    if( false == RetIsInvalid )
            //    {
            //        CswNbtMetaDataObjectClassProp ValueOcp = _CswNbtFieldResources.CswNbtResources.MetaData.getObjectClassProp( inValuePropId );
            //        RetIsInvalid = ( null == ValueOcp || ( ValueOcp.getObjectClass().ObjectClass != FkRelationshipTargetOc.ObjectClass ) );
            //    }
            //}
            //else if( RelatedIdType == NbtViewRelatedIdType.PropertySetId )
            //{
            //    CswNbtMetaDataPropertySet FkRelationshipTargetPs = _CswNbtFieldResources.CswNbtResources.MetaData.getPropertySet( FkValue );
            //    RetIsInvalid = ( null == FkRelationshipTargetPs );

            //    if( false == RetIsInvalid )
            //    {
            //        CswNbtMetaDataObjectClassProp ValueOcp = _CswNbtFieldResources.CswNbtResources.MetaData.getObjectClassProp( inValuePropId );
            //        RetIsInvalid = ( null == ValueOcp ||
            //                         null == ValueOcp.getObjectClass().getPropertySet() ||
            //                         ValueOcp.getObjectClass().getPropertySet().Name != FkRelationshipTargetPs.Name );
            //    }
            //}

            if (inValuePropType == CswEnumNbtViewPropIdType.NodeTypePropId)
            {
                CswNbtMetaDataNodeTypeProp ValuePropNTP = _CswNbtFieldResources.CswNbtResources.MetaData.getNodeTypeProp(inValuePropId);
                RetIsInvalid = false == (CswNbtViewRelationship.Matches(_CswNbtFieldResources.CswNbtResources, RelatedIdType, FkValue, ValuePropNTP.getNodeType()));
            }
            else if (inValuePropType == CswEnumNbtViewPropIdType.ObjectClassPropId)
            {
                CswNbtMetaDataObjectClassProp ValuePropOCP = _CswNbtFieldResources.CswNbtResources.MetaData.getObjectClassProp(inValuePropId);
                RetIsInvalid = false == (CswNbtViewRelationship.Matches(_CswNbtFieldResources.CswNbtResources, RelatedIdType, FkValue, ValuePropOCP.getObjectClass()));
            }

            return(RetIsInvalid);
        }
        public static void getBlob(ICswResources CswResources, BlobDataReturn Return, BlobDataParams Request)
        {
            CswNbtResources NbtResources = (CswNbtResources)CswResources;

            DataTable blobDataTbl;
            int       BlobDataId = CswConvert.ToInt32(Request.Blob.BlobDataId);
            int       PropId     = _getNodeTypePropIdFromJctNodePropId(NbtResources, CswConvert.ToInt32(Request.propid));
            CswNbtMetaDataNodeTypeProp MetaDataProp = NbtResources.MetaData.getNodeTypeProp(PropId);

            if (NbtResources.Permit.canNodeType(CswEnumNbtNodeTypePermission.View, MetaDataProp.getNodeType(), NbtResources.CurrentNbtUser))
            {
                //Get the file from blob_data
                if (String.IsNullOrEmpty(Request.date))
                {
                    CswTableSelect blobDataSelect = NbtResources.makeCswTableSelect("getBlob", "blob_data");
                    string         whereClause    = "where jctnodepropid = " + Request.propid;
                    if (Int32.MinValue != BlobDataId)
                    {
                        whereClause += " and blobdataid = " + Request.Blob.BlobDataId;
                    }
                    blobDataTbl = blobDataSelect.getTable(whereClause);
                }
                else //get the audited record
                {
                    int jctnodepropid = CswConvert.ToInt32(Request.propid);
                    CswArbitrarySelect blobDataAuditSelect = CswNbtSdBlobData.GetBlobAuditSelect(NbtResources, Request.date, jctnodepropid, BlobDataId);
                    blobDataTbl = blobDataAuditSelect.getTable();
                }

                foreach (DataRow row in blobDataTbl.Rows)
                {
                    Request.data             = row["blobdata"] as byte[];
                    Request.Blob.FileName    = row["filename"].ToString();
                    Request.Blob.ContentType = row["contenttype"].ToString();
                }

                if (null == Request.data || Request.data.Length == 0)
                {
                    bool UseNTPlaceHolder = CswConvert.ToBoolean(Request.usenodetypeasplaceholder);
                    if (UseNTPlaceHolder)
                    {
                        CswPrimaryKey NodeId = CswConvert.ToPrimaryKey(Request.nodeid);
                        CswNbtNode    Node   = NbtResources.Nodes[NodeId];
                        if (null != Node)
                        {
                            CswNbtMetaDataNodeType NodeType = Node.getNodeType();
                            if (null != NodeType && NodeType.IconFileName != string.Empty)
                            {
                                Request.Blob.FileName    = NodeType.IconFileName;
                                Request.Blob.ContentType = "image/png";
                                Request.data             = File.ReadAllBytes(Request.appPath + CswNbtMetaDataObjectClass.IconPrefix100 + NodeType.IconFileName);
                            }
                        }
                    }
                    else
                    {
                        Request.data             = File.ReadAllBytes(Request.appPath + "/Images/icons/300/_placeholder.gif");
                        Request.Blob.ContentType = "image/gif";
                        Request.Blob.FileName    = "empty.gif";
                    }
                }

                Return.Data = Request;
            } // NbtResources.Permit.canNodeType()
            else
            {
                throw new CswDniException(CswEnumErrorType.Warning, "You do no have sufficient priveledges to fetch this file.", "User " + NbtResources.CurrentNbtUser.UserId + " tried to fetch a file " + PropId + " they do not have permission on.");
            }
        }
        public static void clearBlob(ICswResources CswResources, BlobDataReturn Return, BlobDataParams Request)
        {
            CswNbtResources NbtResources = (CswNbtResources)CswResources;
            CswPropIdAttr   PropId       = new CswPropIdAttr(Request.propid);
            CswNbtNode      Node         = NbtResources.Nodes[PropId.NodeId];

            if (null != Node)
            {
                CswNbtMetaDataNodeTypeProp MetaDataProp = NbtResources.MetaData.getNodeTypeProp(PropId.NodeTypePropId);
                if (null != MetaDataProp)
                {
                    CswNbtNodePropWrapper FileProp = Node.Properties[MetaDataProp];
                    if (NbtResources.Permit.canNodeType(CswEnumNbtNodeTypePermission.Edit, MetaDataProp.getNodeType(), NbtResources.CurrentNbtUser) &&
                        NbtResources.Permit.isPropWritable(CswEnumNbtNodeTypePermission.Edit, MetaDataProp, null, FileProp))
                    {
                        CswNbtSdTabsAndProps tabsandprops = new CswNbtSdTabsAndProps(NbtResources);
                        tabsandprops.ClearPropValue(Request.propid, true);

                        Request.Blob    = new CswNbtSdBlobData.CswNbtBlob();
                        Request.success = true;

                        Return.Data = Request;
                    }
                    else
                    {
                        throw new CswDniException(CswEnumErrorType.Warning, "You do not have sufficient priveledges to clear this File property", "User " + NbtResources.CurrentNbtUser.UserId + " attempted to call clearBlob without sufficient priviledges.");
                    }
                }
            }
        }
        public static void clearImage(ICswResources CswResources, NodePropImageReturn Return, BlobDataParams Request)
        {
            CswNbtResources NbtResources = (CswNbtResources)CswResources;
            CswPropIdAttr   PropId       = new CswPropIdAttr(Request.propid);
            CswNbtNode      Node         = NbtResources.Nodes[PropId.NodeId];

            if (null != Node)
            {
                CswNbtMetaDataNodeTypeProp MetaDataProp = NbtResources.MetaData.getNodeTypeProp(PropId.NodeTypePropId);
                if (null != MetaDataProp)
                {
                    CswNbtNodePropWrapper FileProp = Node.Properties[MetaDataProp];
                    if (NbtResources.Permit.canNodeType(CswEnumNbtNodeTypePermission.Edit, MetaDataProp.getNodeType(), NbtResources.CurrentNbtUser) &&
                        NbtResources.Permit.isPropWritable(CswEnumNbtNodeTypePermission.Edit, MetaDataProp, null, FileProp))
                    {
                        int BlobDataId = Request.Blob.BlobDataId;

                        CswTableUpdate blobDataTS  = NbtResources.makeCswTableUpdate("clearImage", "blob_data");
                        DataTable      blobDataTbl = blobDataTS.getTable("where blobdataid = " + BlobDataId);
                        foreach (DataRow row in blobDataTbl.Rows)
                        {
                            row.Delete();
                        }
                        blobDataTS.update(blobDataTbl);

                        Request.Blob    = new CswNbtSdBlobData.CswNbtBlob();
                        Request.success = true;

                        getImageProp(CswResources, Return, Request);
                    }
                }
            }
            else
            {
                throw new CswDniException(CswEnumErrorType.Warning, "You do not have sufficient priveledges to clear this Image property", "User " + NbtResources.CurrentNbtUser.UserId + " attempted to call clearImg without sufficient priviledges.");
            }
        }
Example #13
0
        }// this[ string ObjectClassPropName ]


        public bool Contains(CswNbtMetaDataNodeTypeProp NodeTypeProp)
        {
            return(NodeTypeProp != null &&
                   NodeTypeProp.getNodeType().FirstVersionNodeTypeId == _CswNbtNode.getNodeType().FirstVersionNodeTypeId&&
                   _PropsIndexByFirstVersionPropId.ContainsKey(NodeTypeProp.FirstPropVersionId));
        }
Example #14
0
        public int saveFile(string PropIdAttr, byte[] BlobData, string ContentType, string FileName, out string Href, int BlobDataId = Int32.MinValue, bool PostChanges = true, CswNbtNode Node = null)
        {
            CswPropIdAttr PropId = new CswPropIdAttr(PropIdAttr);

            CswNbtMetaDataNodeTypeProp MetaDataProp = _CswNbtResources.MetaData.getNodeTypeProp(PropId.NodeTypePropId);

            if (null == Node)
            {
                Node = _CswNbtResources.Nodes[PropId.NodeId];
            }
            CswNbtNodePropWrapper FileProp = Node.Properties[MetaDataProp];

            if (_CswNbtResources.Permit.canNodeType(CswEnumNbtNodeTypePermission.Edit, MetaDataProp.getNodeType(), _CswNbtResources.CurrentNbtUser) &&
                _CswNbtResources.Permit.isPropWritable(CswEnumNbtNodeTypePermission.Edit, MetaDataProp, null, FileProp))
            {
                if (Int32.MinValue == FileProp.JctNodePropId)
                {
                    FileProp.makePropRow(); //if we don't have a jct_node_prop row for this prop, we do now
                    if (PostChanges)
                    {
                        Node.postChanges(true);
                    }
                }

                if (FileProp.getFieldType().FieldType == CswEnumNbtFieldType.Image)
                {
                    //case 29692: support EXIF image rotation metadata to properly orient photos
                    bool         img_ok = false;
                    MemoryStream ms     = new MemoryStream(BlobData, 0, BlobData.Length);
                    ms.Write(BlobData, 0, BlobData.Length);
                    System.Drawing.Image img = null;

                    try
                    {
                        img    = Image.FromStream(ms, true);
                        img_ok = true;
                    }
                    catch
                    {
                    }

                    if (img_ok == true)
                    {
                        FixOrientation(ref img);
                        ImageConverter converter = new ImageConverter();
                        BlobData = (byte[])converter.ConvertTo(img, typeof(byte[]));
                    }
                }



                //Save the file to blob_data
                CswTableUpdate BlobUpdate  = _CswNbtResources.makeCswTableUpdate("saveBlob", "blob_data");
                string         whereClause = "where jctnodepropid = " + FileProp.JctNodePropId;
                if (Int32.MinValue != BlobDataId)
                {
                    whereClause += " and blobdataid = " + BlobDataId;
                }
                DataTable BlobTbl = BlobUpdate.getTable(whereClause);
                if (BlobTbl.Rows.Count > 0 &&
                    (Int32.MinValue != BlobDataId ||
                     FileProp.getFieldTypeValue() == CswEnumNbtFieldType.File ||
                     FileProp.getFieldTypeValue() == CswEnumNbtFieldType.MOL))
                {
                    BlobTbl.Rows[0]["blobdata"]    = BlobData;
                    BlobTbl.Rows[0]["contenttype"] = ContentType;
                    BlobTbl.Rows[0]["filename"]    = FileName;
                    BlobTbl.Rows[0]["auditlevel"]  = MetaDataProp.AuditLevel;
                    BlobDataId = CswConvert.ToInt32(BlobTbl.Rows[0]["blobdataid"]);
                }
                else
                {
                    DataRow NewRow = BlobTbl.NewRow();
                    NewRow["jctnodepropid"] = FileProp.JctNodePropId;
                    NewRow["blobdata"]      = BlobData;
                    NewRow["contenttype"]   = ContentType;
                    NewRow["filename"]      = FileName;
                    NewRow["auditlevel"]    = MetaDataProp.AuditLevel;
                    BlobDataId = CswConvert.ToInt32(NewRow["blobdataid"]);
                    BlobTbl.Rows.Add(NewRow);
                }
                BlobUpdate.update(BlobTbl);

                if (Node.getObjectClass().ObjectClass == CswEnumNbtObjectClass.ReportClass)
                {
                    CswNbtObjClassReport Report        = Node;
                    CswFilePath          FilePathTools = new CswFilePath(_CswNbtResources);
                    string ReportPath = FilePathTools.getFullReportFilePath(Report.RPTFile.JctNodePropId.ToString());
                    _createReportFile(ReportPath, Report.RPTFile.JctNodePropId, BlobData);
                }

                if (CswEnumNbtFieldType.File == FileProp.getFieldTypeValue())
                {
                    SetLastModified(FileProp);
                }

                FileProp.SyncGestalt();
                if (PostChanges)
                {
                    Node.postChanges(false);
                }

                Href = CswNbtNodePropBlob.getLink(FileProp.JctNodePropId, PropId.NodeId, BlobDataId);
            } //canNodeType() && isPropWritable()
            else
            {
                Href = string.Empty; //To satifsy the "ref string Href"
                throw new CswDniException(CswEnumErrorType.Error, "You do not have sufficient priveledges to save files", "User " + _CswNbtResources.CurrentNbtUser.UserId + " attemped to save blobdata on JctNodeProp " + FileProp.JctNodePropId);
            }
            return(BlobDataId);
        }
Example #15
0
        }             // _getOptions()

        #endregion Relationship Properties and Functions

        #region Serialization

        public override void ToJSON(JObject ParentObject)
        {
            bool allowAdd = false;

            ParentObject["nodetypeid"]    = string.Empty;
            ParentObject["objectclassid"] = string.Empty;

            if (RelationshipType == CswEnumNbtViewPropIdType.NodeTypePropId)
            {
                CswNbtMetaDataNodeTypeProp RelationshipNTP = _CswNbtResources.MetaData.getNodeTypeProp(RelationshipId);
                CswNbtMetaDataNodeType     RelationshipNT  = RelationshipNTP.getNodeType();
                if (null != RelationshipNT)
                {
                    ParentObject["nodetypeid"] = RelationshipNT.NodeTypeId;
                    CswNbtMetaDataObjectClass RelationshipOC = RelationshipNT.getObjectClass();
                    if (null != RelationshipOC)
                    {
                        ParentObject["objectclassid"] = RelationshipOC.ObjectClassId;
                        allowAdd = (RelationshipOC.CanAdd &&
                                    _CswNbtResources.Permit.canNodeType(CswEnumNbtNodeTypePermission.Create, RelationshipNT));
                    }
                }
            }
            else if (RelationshipType == CswEnumNbtViewPropIdType.ObjectClassPropId)
            {
                CswNbtMetaDataObjectClassProp RelationshipOCP = _CswNbtResources.MetaData.getObjectClassProp(RelationshipId);
                CswNbtMetaDataObjectClass     RelationshipOC  = RelationshipOCP.getObjectClass();
                if (null != RelationshipOC)
                {
                    ParentObject["objectclassid"] = RelationshipOC.ObjectClassId;
                    allowAdd = RelationshipOC.CanAdd;
                    if (allowAdd)
                    {
                        foreach (CswNbtMetaDataNodeType NodeType in RelationshipOC.getLatestVersionNodeTypes())
                        {
                            allowAdd = _CswNbtResources.Permit.canNodeType(CswEnumNbtNodeTypePermission.Create, NodeType);
                            if (allowAdd)
                            {
                                break;
                            }
                        }
                    }
                }
            }
            ParentObject["allowadd"] = allowAdd;

            JArray JOptions = new JArray();

            ParentObject["options"]         = JOptions;
            ParentObject["relatednodeid"]   = string.Empty;
            ParentObject["relatednodename"] = string.Empty;

            Dictionary <CswPrimaryKey, string> Options = _getOptions();
            CswPrimaryKey SelectedNodeId = null;

            if (null != SetSelected)
            {
                SelectedNodeId = SetSelected();
            }
            bool first = true;

            foreach (CswPrimaryKey NodePk in Options.Keys)
            {
                if (first || (null != NodePk && NodePk == SelectedNodeId))
                {
                    // Choose first option by default
                    ParentObject["relatednodeid"]   = NodePk.ToString();
                    ParentObject["relatednodename"] = Options[NodePk];
                    first = false;
                }
                if (NodePk != null && NodePk.PrimaryKey != Int32.MinValue)
                {
                    JObject JOption = new JObject();
                    JOption["id"]    = NodePk.ToString();
                    JOption["value"] = Options[NodePk];
                    JOptions.Add(JOption);
                }
            }
        } // ToJson()
Example #16
0
        /// <summary>
        /// Create a dictionary of the unique key values of related nodes
        /// As a side effect, also populate MergeInfoData.NodePair.NodeReferences
        /// </summary>
        private Dictionary <CswDelimitedString, CswPrimaryKey> _getUniqueKeysDict(MergeInfoData.MergeInfoNodePair NodePair, CswNbtNode Node, CswNbtMetaDataNodeTypeProp NodeReferenceProp)
        {
            Dictionary <CswDelimitedString, CswPrimaryKey> ret = new Dictionary <CswDelimitedString, CswPrimaryKey>();
            char delimiter = '|';

            // Find unique properties for this reference's nodetype
            IEnumerable <CswNbtMetaDataNodeTypeProp> UniqueProps = NodeReferenceProp.getNodeType().getUniqueProps();

            // Create a view of nodes that point to the target node via this reference
            CswNbtView             view = new CswNbtView(_CswNbtResources);
            CswNbtViewRelationship rel1 = view.AddViewRelationship(Node.getNodeType(), false);

            rel1.NodeIdsToFilterIn.Add(Node.NodeId);
            CswNbtViewRelationship rel2 = view.AddViewRelationship(rel1, CswEnumNbtViewPropOwnerType.Second, NodeReferenceProp, false);

            foreach (CswNbtMetaDataNodeTypeProp uniqueProp in UniqueProps)
            {
                view.AddViewProperty(rel2, uniqueProp);
            }

            // Iterate children and store unique property values in a dictionary key
            ICswNbtTree tree = _CswNbtResources.Trees.getTreeFromView(view, RequireViewPermissions: false, IncludeHiddenNodes: true, IncludeSystemNodes: true);

            if (tree.getChildNodeCount() > 0)
            {
                tree.goToNthChild(0);
                for (Int32 c = 0; c < tree.getChildNodeCount(); c++)
                {
                    tree.goToNthChild(c);
                    CswPrimaryKey thisNodeId = tree.getNodeIdForCurrentPosition();

                    // Populate MergeInfoData.NodePair.NodeReferences while we're here
                    NodePair.NodeReferences.Add(new MergeInfoData.MergeInfoNodeReference()
                    {
                        NodeId         = thisNodeId.ToString(),
                        NodeTypePropId = NodeReferenceProp.PropId
                    });

                    CswDelimitedString key;
                    if (_AllUniqueKeys.ContainsKey(thisNodeId))
                    {
                        // If we've seen this node before, use the existing key but override the merge property
                        // (this will allow us to merge correctly if a nodetype has
                        //  multiple compound unique references that are all involved in the merge)
                        key = _AllUniqueKeys[thisNodeId];
                        for (Int32 u = 0; u < UniqueProps.Count(); u++)
                        {
                            if (UniqueProps.ElementAt(u).PropId == NodeReferenceProp.PropId)
                            {
                                // This value will be equal after the merge
                                key[u] = "[mergeresult]";
                            }
                        } // foreach( CswNbtMetaDataNodeTypeProp uniqueProp in UniqueProps )
                    }     // if( _AllUniqueKeys.ContainsKey( thisNodeId ) )
                    else
                    {
                        // generate a new key
                        key = new CswDelimitedString(delimiter);
                        foreach (CswNbtMetaDataNodeTypeProp uniqueProp in UniqueProps)
                        {
                            CswNbtTreeNodeProp prop = tree.getChildNodePropsOfNode().FirstOrDefault(p => p.NodeTypePropId == uniqueProp.PropId);
                            if (null != prop)
                            {
                                if (prop.NodeTypePropId == NodeReferenceProp.PropId)
                                {
                                    // This value will be equal after the merge
                                    key.Add("[mergeresult]");
                                }
                                else
                                {
                                    key.Add(prop.Gestalt);
                                }
                            }
                            else
                            {
                                key.Add("");
                            }
                        } // foreach( CswNbtMetaDataNodeTypeProp uniqueProp in UniqueProps )
                    }     // if-else( _AllUniqueKeys.ContainsKey( thisNodeId ) )

                    if (key.Count > 0)
                    {
                        ret.Add(key, thisNodeId);
                        _AllUniqueKeys[thisNodeId] = key;
                    }

                    tree.goToParentNode();
                } // for( Int32 c = 0; c < tree.getChildNodeCount(); c++ )
            }     // if( tree.getChildNodeCount() > 0 )
            return(ret);
        }         // _getUniqueKeysDict()
Example #17
0
        /// <summary>
        /// Sets up the Add menu and the Edit View menu item
        /// </summary>
        void CswMainMenu_DataBinding(object sender, EventArgs e)
        {
            try
            {
                EnsureChildControls();

                if (BatchEnabled)
                {
                    _BatchOpsMenuItem.Text = "Single-Edit";
                }
                else
                {
                    _BatchOpsMenuItem.Text = "Multi-Edit";
                }


                // Setup Export Menu
                ExportMenuItem.Visible = false;
                if (AllowExport)
                {
                    if (_View != null)
                    {
                        ExportMenuItem.Visible = true;
                        ExportMenuItem.Items.Clear();
                        if (CswEnumNbtViewRenderingMode.Grid == NbtViewRenderingMode)
                        {
                            foreach (ExportOutputFormat FormatType in Enum.GetValues(typeof(ExportOutputFormat)))
                            {
                                if (ExportOutputFormat.MobileXML != FormatType || _CswNbtResources.Modules.IsModuleEnabled(CswEnumNbtModuleName.SI))
                                {
                                    _addExportMenuItem(_View, FormatType, NbtViewRenderingMode);
                                }
                            }
                        }
                        else // tree or list
                        {
                            _addExportMenuItem(_View, ExportOutputFormat.ReportXML, NbtViewRenderingMode);
                            if (_CswNbtResources.Modules.IsModuleEnabled(CswEnumNbtModuleName.SI))
                            {
                                _addExportMenuItem(_View, ExportOutputFormat.MobileXML, NbtViewRenderingMode);
                            }
                        }
                    }
                    else if (IsDesignMode && _CswNbtResources.Modules.IsModuleEnabled(CswEnumNbtModuleName.SI))
                    {
                        ExportMenuItem.Visible = false;
                        CswNbtMetaDataNodeType NodeType = null;
                        switch (DesignSelectedType)
                        {
                        case CswNodeTypeTree.NodeTypeTreeSelectedType.NodeType:
                            NodeType = _CswNbtResources.MetaData.getNodeType(Convert.ToInt32(DesignSelectedValue));
                            break;

                        case CswNodeTypeTree.NodeTypeTreeSelectedType.Property:
                            CswNbtMetaDataNodeTypeProp NodeTypeProp = _CswNbtResources.MetaData.getNodeTypeProp(Convert.ToInt32(DesignSelectedValue));
                            NodeType = NodeTypeProp.getNodeType();
                            break;

                        case CswNodeTypeTree.NodeTypeTreeSelectedType.Tab:
                            CswNbtMetaDataNodeTypeTab NodeTypeTab = _CswNbtResources.MetaData.getNodeTypeTab(Convert.ToInt32(DesignSelectedValue));
                            NodeType = NodeTypeTab.getNodeType();
                            break;
                        }

                        ExportMenuItem.Visible = true;
                        ExportMenuItem.Items.Clear();
                        if (NodeType != null)
                        {
                            RadMenuItem DesignExportItem = new RadMenuItem();
                            DesignExportItem.Text     = "Export NodeType XML";
                            DesignExportItem.Value    = "export_" + ExportOutputFormat.MobileXML.ToString().ToLower();
                            DesignExportItem.CssClass = SubMenuGroupCssClass;
                            DesignExportItem.Attributes.Add("onclick", "openExportPopup('nodetypeid=" + NodeType.NodeTypeId.ToString() + "&format=" + ExportOutputFormat.MobileXML.ToString().ToLower() + "&renderingmode=" + NbtViewRenderingMode.ToString() + "');");
                            ExportMenuItem.Items.Add(DesignExportItem);
                        }
                    }
                } // if( AllowExport )

                if (AllowMobile && _View != null && _CswNbtResources.Modules.IsModuleEnabled(CswEnumNbtModuleName.SI))
                {
                    _MobileMenuItem.Visible = true;
                    _MobileMenuItem.Items.Clear();

                    RadMenuItem MobileExportItem = new RadMenuItem();
                    MobileExportItem.Text     = "Export Mobile XML";
                    MobileExportItem.Value    = "export_" + ExportOutputFormat.MobileXML.ToString().ToLower();
                    MobileExportItem.CssClass = SubMenuGroupCssClass;
                    MobileExportItem.Attributes.Add("onclick", "openExportPopup('sessionviewid=" + _View.SessionViewId + "&format=" + ExportOutputFormat.MobileXML.ToString().ToLower() + "&renderingmode=" + NbtViewRenderingMode.ToString() + "');");
                    _MobileMenuItem.Items.Add(MobileExportItem);
                }
                else
                {
                    _MobileMenuItem.Visible = false;
                }

                // Setup Add Menu
                _AddMenuItem.Visible = false;
                if (ParentNodeKey != null)
                {
                    if (ParentNodeKey.NodeSpecies == CswEnumNbtNodeSpecies.Plain)
                    {
                        _Node = _CswNbtResources.Nodes[ParentNodeKey];
                    }

                    if (AllowAdd)
                    {
                        if (ParentNodeKeyViewNode != null)
                        {
                            bool LimitToFirstGeneration = (View.ViewMode == CswEnumNbtViewRenderingMode.Grid);
                            Collection <CswNbtViewNode.CswNbtViewAddNodeTypeEntry> AllowedChildNodeTypes = ParentNodeKeyViewNode.AllowedChildNodeTypes(LimitToFirstGeneration);
                            if (AllowedChildNodeTypes.Count > 0)
                            {
                                _AddMenuItem.Visible = true;
                                _AddMenuItem.Items.Clear();

                                string AddMenuDoesntChangeViewString = "0";
                                if (AddMenuDoesntChangeView)
                                {
                                    AddMenuDoesntChangeViewString = "1";
                                }
                                string AddMenuDoesntChangeSelectedNodeString = "0";
                                if (AddMenuDoesntChangeSelectedNode)
                                {
                                    AddMenuDoesntChangeSelectedNodeString = "1";
                                }

                                foreach (CswNbtViewNode.CswNbtViewAddNodeTypeEntry Entry in AllowedChildNodeTypes)
                                {
                                    RadMenuItem TypeMenuItem = new RadMenuItem();
                                    TypeMenuItem.Text     = Entry.NodeType.NodeTypeName;
                                    TypeMenuItem.Value    = "addnode_" + Entry.NodeType.NodeTypeId.ToString();
                                    TypeMenuItem.CssClass = SubMenuGroupCssClass;
                                    //TypeMenuItem.Attributes.Add( "onclick", "openNewNodePopup('" + Entry.NodeType.NodeTypeId.ToString() + "', '" + ParentNodeKey.ToJavaScriptParam() + "', '" + ParentNodeKeyViewNode.View.SessionViewId.ToString() + "', '" + Entry.ViewRelationship.UniqueId + "', '" + AddMenuDoesntChangeViewString + "', '" + AddMenuDoesntChangeSelectedNodeString + "');" );
                                    // Case 20544 - Add viewid to querystring
                                    TypeMenuItem.Attributes.Add("onclick", "openNewNodePopup('" + Entry.NodeType.NodeTypeId.ToString() + "', '" + ParentNodeKey.ToString() + "', '" + ParentNodeKeyViewNode.View.SessionViewId.ToString() + "', '" + AddMenuDoesntChangeViewString + "', '" + AddMenuDoesntChangeSelectedNodeString + "', '" + _View.ViewId.ToString() + "');");
                                    _AddMenuItem.Items.Add(TypeMenuItem);
                                }
                            }
                        }
                    }
                }
                else if (IsDesignMode)
                {
                    _AddMenuItem.Items.Clear();

                    if (DesignSelectedType == CswNodeTypeTree.NodeTypeTreeSelectedType.Property ||
                        DesignSelectedType == CswNodeTypeTree.NodeTypeTreeSelectedType.NodeTypeBaseVersion ||
                        DesignSelectedType == CswNodeTypeTree.NodeTypeTreeSelectedType.PropertyFilter)
                    {
                        // No Add Menu
                    }
                    else if (DesignSelectedType == CswNodeTypeTree.NodeTypeTreeSelectedType.Tab)
                    {
                        CswNbtMetaDataNodeTypeTab SelectedTab = CswNbtResources.MetaData.getNodeTypeTab(Convert.ToInt32(DesignSelectedValue));
                        if (_CswNbtResources.Permit.canNodeType(CswEnumNbtNodeTypePermission.Create, SelectedTab.getNodeType()))
                        {
                            if (SelectedTab.getNodeType().IsLatestVersion())
                            {
                                _AddMenuItem.Visible = true;
                                RadMenuItem AddPropMenuItem = new RadMenuItem();
                                if (DesignMode == NbtDesignMode.Inspection)
                                {
                                    AddPropMenuItem.Text = "Question";
                                }
                                else
                                {
                                    AddPropMenuItem.Text = "Property";
                                }
                                AddPropMenuItem.Value    = "addprop_" + DesignSelectedValue;
                                AddPropMenuItem.CssClass = SubMenuGroupCssClass;
                                string js = string.Empty;
                                if (DesignMode == NbtDesignMode.Inspection)
                                {
                                    js = "openDesignAddPopup('" + CswNodeTypeTree.NodeTypeTreeSelectedType.Property + "','" + CswNodeTypeTree.NodeTypeTreeSelectedType.Tab + "','" + DesignSelectedValue + "', 'i');";
                                }
                                else
                                {
                                    js = "openDesignAddPopup('" + CswNodeTypeTree.NodeTypeTreeSelectedType.Property + "','" + CswNodeTypeTree.NodeTypeTreeSelectedType.Tab + "','" + DesignSelectedValue + "', '');";
                                }
                                AddPropMenuItem.Attributes.Add("onclick", js);
                                AddPropMenuItem.PostBack = false;
                                _AddMenuItem.Items.Add(AddPropMenuItem);
                            }
                        }
                    }
                    else if (DesignSelectedType == CswNodeTypeTree.NodeTypeTreeSelectedType.NodeType)
                    {
                        CswNbtMetaDataNodeType SelectedNodeType = CswNbtResources.MetaData.getNodeType(Convert.ToInt32(DesignSelectedValue));
                        if (_CswNbtResources.Permit.canNodeType(CswEnumNbtNodeTypePermission.Create, SelectedNodeType))
                        {
                            if (SelectedNodeType != null && SelectedNodeType.IsLatestVersion())
                            {
                                _AddMenuItem.Visible = true;
                                RadMenuItem AddTabMenuItem = new RadMenuItem();
                                if (DesignMode == NbtDesignMode.Inspection)
                                {
                                    AddTabMenuItem.Text = "Section";
                                }
                                else
                                {
                                    AddTabMenuItem.Text = "Tab";
                                }
                                AddTabMenuItem.Value    = "addtab_" + DesignSelectedValue;
                                AddTabMenuItem.CssClass = SubMenuGroupCssClass;
                                string js = string.Empty;
                                if (DesignMode == NbtDesignMode.Inspection)
                                {
                                    js = "openDesignAddPopup('" + CswNodeTypeTree.NodeTypeTreeSelectedType.Tab + "','" + CswNodeTypeTree.NodeTypeTreeSelectedType.NodeType + "','" + DesignSelectedValue + "', 'i');";
                                }
                                else
                                {
                                    js = "openDesignAddPopup('" + CswNodeTypeTree.NodeTypeTreeSelectedType.Tab + "','" + CswNodeTypeTree.NodeTypeTreeSelectedType.NodeType + "','" + DesignSelectedValue + "', '');";
                                }
                                AddTabMenuItem.Attributes.Add("onclick", js);
                                AddTabMenuItem.PostBack = false;
                                _AddMenuItem.Items.Add(AddTabMenuItem);
                            }
                        }
                    }
                    else
                    {
                        _AddMenuItem.Visible = true;
                        RadMenuItem AddTypeMenuItem = new RadMenuItem();
                        if (DesignMode == NbtDesignMode.Inspection)
                        {
                            AddTypeMenuItem.Text = "Inspection Design";
                        }
                        else
                        {
                            AddTypeMenuItem.Text = "NodeType";
                        }
                        AddTypeMenuItem.Value    = "addtype";
                        AddTypeMenuItem.CssClass = SubMenuGroupCssClass;
                        string js = string.Empty;
                        if (DesignSelectedType == CswNodeTypeTree.NodeTypeTreeSelectedType.Category)
                        {
                            if (DesignMode == NbtDesignMode.Inspection)
                            {
                                js = "openDesignAddPopup('" + CswNodeTypeTree.NodeTypeTreeSelectedType.NodeType.ToString() + "','" + CswNodeTypeTree.NodeTypeTreeSelectedType.Category.ToString() + "','" + DesignSelectedValue + "', 'i');";
                            }
                            else
                            {
                                js = "openDesignAddPopup('" + CswNodeTypeTree.NodeTypeTreeSelectedType.NodeType.ToString() + "','" + CswNodeTypeTree.NodeTypeTreeSelectedType.Category.ToString() + "','" + DesignSelectedValue + "', '');";
                            }
                        }
                        else
                        {
                            if (DesignMode == NbtDesignMode.Inspection)
                            {
                                js = "openDesignAddPopup('" + CswNodeTypeTree.NodeTypeTreeSelectedType.NodeType.ToString() + "','" + CswNodeTypeTree.NodeTypeTreeSelectedType.Root.ToString() + "','', 'i');";
                            }
                            else
                            {
                                js = "openDesignAddPopup('" + CswNodeTypeTree.NodeTypeTreeSelectedType.NodeType.ToString() + "','" + CswNodeTypeTree.NodeTypeTreeSelectedType.Root.ToString() + "','', '');";
                            }
                        }
                        AddTypeMenuItem.Attributes.Add("onclick", js);
                        AddTypeMenuItem.PostBack = false;
                        _AddMenuItem.Items.Add(AddTypeMenuItem);
                    }
                }

                // Edit View
                if (AllowEditView && _EditViewMenuItem != null && View != null)
                {
                    _EditViewMenuItem.NavigateUrl = "EditView.aspx?viewid=" + View.ViewId.ToString();
                    if (View.Visibility == CswEnumNbtViewVisibility.Property ||
                        View.Visibility == CswEnumNbtViewVisibility.Hidden)
                    {
                        _EditViewMenuItem.NavigateUrl += "&step=2";
                    }
                }
                else
                {
                    _EditViewMenuItem.NavigateUrl = "EditView.aspx";
                }

                // Search
                //if( View is CswNbtView && View != null && View.IsSearchable() )
                //{
                _SearchMenuItem.Visible = true;
                // Handle searching from grid properties:
                if (View != null && ParentNodeKey != null)
                {
                    // Case 20715 - need to check NodeSpecies first
                    if (ParentNodeKey.NodeSpecies == CswEnumNbtNodeSpecies.Plain && null != ParentNodeKey.NodeId)
                    {
                        _SearchMenuItem.NavigateUrl = "Search.aspx?nodeid=" + ParentNodeKey.NodeId.ToString() + "&viewid=" + View.ViewId.ToString();
                    }
                    else
                    {
                        _SearchMenuItem.NavigateUrl = "Search.aspx?nodeid=" + "&viewid=" + View.ViewId.ToString();
                    }
                }
                else
                {
                    _SearchMenuItem.NavigateUrl = "Search.aspx";
                }
                //}
                //else
                //{
                //    _SearchMenuItem.Visible = false;
                //}


                // Copy
                if (AllowCopy && SelectedNodeKey != null &&
                    SelectedNodeKey.NodeSpecies == CswEnumNbtNodeSpecies.Plain &&
                    _CswNbtResources.Permit.canNodeType(Nbt.Security.CswEnumNbtNodeTypePermission.Create, _CswNbtResources.MetaData.getNodeType(SelectedNodeKey.NodeTypeId)))
                {
                    if (SelectedNodeKeyViewNode != null && SelectedNodeKeyViewNode is CswNbtViewRelationship &&
                        ((CswNbtViewRelationship)SelectedNodeKeyViewNode).NodeIdsToFilterIn.Count == 0)     // BZ 8022
                    {
                        CswNbtMetaDataNodeType CopyNodeType = _CswNbtResources.MetaData.getNodeType(SelectedNodeKey.NodeTypeId);
                        string badproperty = string.Empty;
                        if (!CopyNodeType.IsUniqueAndRequired(ref badproperty))
                        {
                            _CopyMenuItem.Visible = true;
                            _CopyMenuItem.Attributes.Add("onclick", "openCopyPopup('" + SelectedNodeKey.ToString() + "');");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        } // CswMainMenu_DataBinding()