Example #1
0
        private void _removeProp(ICswNbtMetaDataProp prop)
        {
            if (null != prop)
            {
                CurrentView.removeViewProperty(prop);

                Collection <string> doomedRels = new Collection <string>();
                CswNbtViewRoot.forEachRelationship eachRelationship = relationship =>
                {
                    if (relationship.Properties.Count == 0 && relationship.ChildRelationships.Count == 0)
                    {
                        doomedRels.Add(relationship.ArbitraryId);
                    }
                };
                CurrentView.Root.eachRelationship(eachRelationship, null);

                foreach (string doomedRelId in doomedRels)
                {
                    CswNbtViewRelationship doomedRel = (CswNbtViewRelationship)CurrentView.FindViewNodeByArbitraryId(doomedRelId);
                    if (null != doomedRel)
                    {
                        CswNbtViewNode doomedRelsParent = CurrentView.FindViewNodeByArbitraryId(doomedRel.ParentArbitraryId);
                        if (doomedRelsParent is CswNbtViewRelationship)
                        {
                            CswNbtViewRelationship AsRelationship = (CswNbtViewRelationship)doomedRelsParent;
                            AsRelationship.removeChildRelationship(doomedRel);
                        }
                    }
                }
            }
        }
        public override CswNbtViewEditorData GetStepData()
        {
            CswNbtViewEditorData Return = new CswNbtViewEditorData();

            _getFilters(Return, CurrentView);

            HashSet <string> seenRels = new HashSet <string>();

            CswNbtViewRoot.forEachRelationship eachRelationship = relationship =>
            {
                string label = _getRelationshipOwnerName(relationship);

                if (false == seenRels.Contains(label))
                {
                    seenRels.Add(label);
                    Return.Step4.Relationships.Add(relationship);
                }
            };
            CurrentView.Root.eachRelationship(eachRelationship, null);

            Return.Step4.ViewJson = CswConvert.ToString(CurrentView.ToJson());

            base.Finalize(Return);
            return(Return);
        }
 protected void _addViewNodeViews(CswNbtView View)
 {
     CswNbtViewRoot.forEachProperty eachProperty = property =>
     {
         property.SetViewRootView(View);
         foreach (CswNbtViewPropertyFilter filter in property.Filters)
         {
             filter.Parent = property;
             filter.SetViewRootView(View);
         }
     };
     CswNbtViewRoot.forEachRelationship eachRelationship = relationship =>
     {
         if (null == relationship.Parent)
         {
             relationship.Parent = View.Root;
         }
         relationship.SetViewRootView(View);
         foreach (CswNbtViewRelationship childRel in relationship.ChildRelationships)
         {
             if (null == childRel.Parent)
             {
                 childRel.Parent = relationship;
             }
         }
         foreach (CswNbtViewProperty viewProp in relationship.Properties)
         {
             if (null == viewProp.Parent)
             {
                 viewProp.Parent = relationship;
             }
         }
     };
     View.Root.eachRelationship(eachRelationship, eachProperty);
 }
        private void _addFilter(CswNbtViewEditorData Return)
        {
            CswNbtViewRelationship parent = (CswNbtViewRelationship)CurrentView.FindViewNodeByArbitraryId(Request.Property.ParentArbitraryId);

            CswNbtViewRoot.forEachRelationship eachRel = relationship =>
            {
                if (parent.SecondId == relationship.SecondId)
                {
                    CswNbtViewProperty viewProp = relationship.Properties.FirstOrDefault(vp => vp.Name == Request.Property.Name);
                    if (null != viewProp)
                    {
                        if (false == _hasFilter(viewProp))
                        {
                            CurrentView.AddViewPropertyFilter(viewProp,
                                                              Conjunction: (CswEnumNbtFilterConjunction)Request.FilterConjunction,
                                                              SubFieldName: (CswEnumNbtSubFieldName)Request.FilterSubfield,
                                                              FilterMode: (CswEnumNbtFilterMode)Request.FilterMode,
                                                              Value: Request.FilterValue);
                        }
                    }
                    else
                    {
                        ICswNbtMetaDataProp Prop = null;
                        if (Request.Property.Type.Equals(CswEnumNbtViewPropType.NodeTypePropId))
                        {
                            Prop = _CswNbtResources.MetaData.getNodeTypeProp(Request.Property.NodeTypePropId);
                        }
                        else if (Request.Property.Type.Equals(CswEnumNbtViewPropType.ObjectClassPropId))
                        {
                            Prop = _CswNbtResources.MetaData.getObjectClassProp(Request.Property.ObjectClassPropId);
                        }

                        CurrentView.AddViewPropertyAndFilter(relationship, Prop,
                                                             Value: Request.FilterValue,
                                                             Conjunction: Request.FilterConjunction,
                                                             SubFieldName: (CswEnumNbtSubFieldName)Request.FilterSubfield,
                                                             FilterMode: (CswEnumNbtFilterMode)Request.FilterMode,
                                                             ShowInGrid: false       // the user is filtering on a prop not in the grid, don't show it in the grid
                                                             );
                    }
                }
            };
            CurrentView.Root.eachRelationship(eachRel, null);

            _getFilters(Return, CurrentView);
            HashSet <string> seenRels = new HashSet <string>();

            CswNbtViewRoot.forEachRelationship eachRelationship = relationship =>
            {
                if (false == seenRels.Contains(relationship.TextLabel))
                {
                    seenRels.Add(relationship.TextLabel);
                    Return.Step4.Relationships.Add(relationship);
                }
            };
            CurrentView.Root.eachRelationship(eachRelationship, null);

            Return.Step4.ViewJson = CswConvert.ToString(CurrentView.ToJson());
        }
        public override void update()
        {
            // Add Regulatory List and Chemical to the add layout of RegulatoryListMember
            CswNbtMetaDataObjectClass RegListMemberOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.RegulatoryListMemberClass );
            foreach( CswNbtMetaDataNodeType RegListMemberNT in RegListMemberOC.getNodeTypes() )
            {
                foreach( CswNbtMetaDataNodeTypeProp PropNTP in RegListMemberNT.getNodeTypeProps().Where( p => Int32.MinValue != p.ObjectClassPropId ) )
                {
                    switch( PropNTP.getObjectClassPropName() )
                    {
                        case CswNbtObjClassRegulatoryListMember.PropertyName.RegulatoryList:
                            PropNTP.updateLayout( CswEnumNbtLayoutType.Add, true, DisplayRow: 1, DisplayColumn: 1 );
                            break;
                        case CswNbtObjClassRegulatoryListMember.PropertyName.Chemical:
                            PropNTP.updateLayout( CswEnumNbtLayoutType.Add, true, DisplayRow: 2, DisplayColumn: 1 );
                            break;
                    }
                }
            }

            // Remove ability to add Regulatory List Members from Chemicals tab on Regulatory List
            CswNbtMetaDataObjectClass RegListMemOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.RegulatoryListMemberClass );
            CswNbtMetaDataObjectClass RegListOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.RegulatoryListClass );
            foreach( CswNbtMetaDataNodeType Nodetype in RegListOC.getNodeTypes() )
            {
                CswNbtMetaDataNodeTypeProp ChemicalsNTP = Nodetype.getNodeTypePropByObjectClassProp( CswNbtObjClassRegulatoryList.PropertyName.Chemicals );
                CswNbtView ChemicalsView = _CswNbtSchemaModTrnsctn.restoreView( ChemicalsNTP.ViewId );
                CswNbtViewRoot.forEachRelationship EachRelationship = delegate( CswNbtViewRelationship Relationship )
                {
                    if( Relationship.SecondId == RegListMemOC.ObjectClassId )
                    {
                        Relationship.AllowAdd = false;
                    }
                };
                ChemicalsView.Root.eachRelationship( EachRelationship, null );
                ChemicalsView.save();
            }

        } // update()
        private void _removeFilter(CswNbtViewEditorData Return)
        {
            Dictionary <string, CswNbtViewPropertyFilter> filtersToRemove = new Dictionary <string, CswNbtViewPropertyFilter>();
            Collection <ICswNbtMetaDataProp> propsToRemove = new Collection <ICswNbtMetaDataProp>();

            CswNbtViewRoot.forEachProperty eachProperty = prop =>
            {
                foreach (CswNbtViewPropertyFilter filter in prop.Filters)
                {
                    if (filter.TextLabel == Request.FilterToRemove.TextLabel)
                    {
                        if (prop.ShowInGrid || prop.Filters.Count > 1)  //if ShowInGrid == true, just remove the filter
                        {
                            filtersToRemove.Add(prop.UniqueId, filter);
                        }
                        else //otherwise, remove the property as well
                        {
                            ICswNbtMetaDataProp propToRemove;
                            if (prop.Type.Equals(CswEnumNbtViewPropType.ObjectClassPropId))
                            {
                                propToRemove = _CswNbtResources.MetaData.getObjectClassProp(prop.ObjectClassPropId);
                            }
                            else
                            {
                                propToRemove = _CswNbtResources.MetaData.getNodeTypeProp(prop.NodeTypePropId);
                            }

                            if (null != propToRemove)
                            {
                                propsToRemove.Add(propToRemove);
                            }
                        }
                    }
                }
            };
            CurrentView.Root.eachRelationship(null, eachProperty);

            foreach (var propAndFilter in filtersToRemove)
            {
                CswNbtViewProperty prop = (CswNbtViewProperty)CurrentView.FindViewNodeByUniqueId(propAndFilter.Key);
                prop.removeFilter(propAndFilter.Value);
            }
            foreach (ICswNbtMetaDataProp propToRemove in propsToRemove)
            {
                CurrentView.removeViewProperty(propToRemove);
            }

            _getFilters(Return, CurrentView);

            HashSet <string> seenRels = new HashSet <string>();

            CswNbtViewRoot.forEachRelationship eachRelationship = relationship =>
            {
                if (false == seenRels.Contains(relationship.TextLabel))
                {
                    seenRels.Add(relationship.TextLabel);
                    Return.Step4.Relationships.Add(relationship);
                }
            };
            CurrentView.Root.eachRelationship(eachRelationship, null);

            Return.Step4.ViewJson = CswConvert.ToString(CurrentView.ToJson());
        }
Example #7
0
        public override CswNbtViewEditorData GetStepData()
        {
            CswNbtViewEditorData Return = new CswNbtViewEditorData();

            Return.Step3 = new CswNbtViewEditorStep3();

            string     ViewStr  = CurrentView.ToString();
            CswNbtView TempView = _CswNbtResources.ViewSelect.restoreView(ViewStr);

            HashSet <string> seenProps = new HashSet <string>();
            Collection <CswNbtViewProperty> relatedProps = new Collection <CswNbtViewProperty>();

            if (CurrentView.ViewMode.Equals(CswEnumNbtViewRenderingMode.Grid) || CurrentView.ViewMode.Equals(CswEnumNbtViewRenderingMode.Table))
            {
                CswNbtViewRoot.forEachRelationship forEachRelationship = relationship =>
                {
                    //For property views, we ignore the top lvl relationship
                    if ((false == (relationship.Parent is CswNbtViewRoot) && CurrentView.Visibility == CswEnumNbtViewVisibility.Property) ||
                        CurrentView.Visibility != CswEnumNbtViewVisibility.Property)
                    {
                        foreach (CswNbtViewProperty ExistingViewProp in relationship.Properties)
                        {
                            if (false == seenProps.Contains(ExistingViewProp.TextLabel))
                            {
                                seenProps.Add(ExistingViewProp.TextLabel);
                                Return.Step3.Properties.Add(ExistingViewProp);
                            }
                        }

                        _populatePropsCollection(relationship, TempView, Return.Step3.Properties, seenProps);

                        //Get all props related to this relationship
                        if (CurrentView.ViewMode == CswEnumNbtViewRenderingMode.Grid)
                        {
                            Collection <CswNbtViewRelationship> rels = getViewChildRelationshipOptions(TempView, relationship.ArbitraryId);
                            foreach (CswNbtViewRelationship relatedRelationship in rels)
                            {
                                if (false == seenProps.Contains(relatedRelationship.TextLabel))
                                {
                                    relatedRelationship.Parent = relationship;
                                    Return.Step3.SecondRelationships.Add(relatedRelationship);
                                    _populatePropsCollection(relatedRelationship, TempView, relatedProps, seenProps, true, true, false);
                                    relatedRelationship.Properties = new Collection <CswNbtViewProperty>(); //otherwise this has every prop
                                    seenProps.Add(relatedRelationship.TextLabel);
                                }
                            }
                        }
                    }
                };
                TempView.Root.eachRelationship(forEachRelationship, null);

                HashSet <string> seenRelated = new HashSet <string>();
                foreach (CswNbtViewProperty vp in relatedProps)
                {
                    if (false == seenRelated.Contains(vp.TextLabel))
                    {
                        seenRelated.Add(vp.TextLabel);
                        Return.Step3.Properties.Add(vp);
                    }
                }
            }
            else if (CurrentView.ViewMode.Equals(CswEnumNbtViewRenderingMode.Tree))
            {
                CswNbtViewRoot.forEachRelationship forEachRelationship = relationship =>
                {
                    foreach (CswNbtViewRelationship related in getViewChildRelationshipOptions(CurrentView, relationship.ArbitraryId))
                    {
                        ICswNbtMetaDataProp prop;
                        if (related.PropType.Equals(CswEnumNbtViewPropIdType.ObjectClassPropId))
                        {
                            prop = _CswNbtResources.MetaData.getObjectClassProp(related.PropId);
                        }
                        else
                        {
                            prop = _CswNbtResources.MetaData.getNodeTypeProp(related.PropId);
                        }

                        CswNbtViewRelationship tempRel = (CswNbtViewRelationship)TempView.FindViewNodeByArbitraryId(relationship.ArbitraryId);
                        Return.Step3.SecondRelationships.Add(TempView.AddViewRelationship(tempRel, related.PropOwner, prop, true));
                    }
                };
                CurrentView.Root.eachRelationship(forEachRelationship, null);
            }

            base.Finalize(Return);
            return(Return);
        }
Example #8
0
        private void _addProp(ICswNbtMetaDataProp prop)
        {
            CswNbtViewRoot.forEachRelationship eachRelationship = relationship =>
            {
                //we have to iterate a temp view, but use the relationships on the "real" view
                relationship = (CswNbtViewRelationship)CurrentView.FindViewNodeByArbitraryId(relationship.ArbitraryId);

                //For property views, we ignore the top lvl relationship
                if ((false == (relationship.Parent is CswNbtViewRoot) && CurrentView.Visibility == CswEnumNbtViewVisibility.Property) ||
                    CurrentView.Visibility != CswEnumNbtViewVisibility.Property)
                {
                    int Id = relationship.SecondId;
                    CswEnumNbtViewRelatedIdType type = relationship.SecondType;
                    if (relationship.PropOwner.Equals(CswEnumNbtViewPropOwnerType.First) && Int32.MinValue != relationship.FirstId && CurrentView.Visibility == CswEnumNbtViewVisibility.Property)
                    {
                        Id   = relationship.FirstId;
                        type = relationship.FirstType;
                    }

                    CswNbtViewProperty existingViewProp = relationship.findPropertyByName(prop.PropName);
                    if (null != existingViewProp)
                    {
                        existingViewProp.ShowInGrid = true;
                    }
                    else
                    {
                        if (null != Request.Relationship)
                        {
                            int ownerTargetId = Request.Relationship.SecondId;

                            Collection <CswNbtViewRelationship> relations = getViewChildRelationshipOptions(CurrentView, relationship.ArbitraryId);
                            foreach (CswNbtViewRelationship related in relations)
                            {
                                ICswNbtMetaDataProp relProp = related.getProp();
                                int relatedTargetId         = related.SecondId;

                                if (ownerTargetId == relatedTargetId && Request.Relationship.getRelatedType() == related.getRelatedType())
                                {
                                    if (related.getRelatedType() == CswEnumNbtViewRelatedIdType.NodeTypeId)
                                    {
                                        CswNbtMetaDataNodeType ownerNT = _CswNbtResources.MetaData.getNodeType(relatedTargetId);
                                        foreach (CswNbtMetaDataNodeTypeProp ntp in ownerNT.getNodeTypeProps().Where(ntp => ntp.PropName == prop.PropName))
                                        {
                                            CswNbtViewRelationship parentRel      = (CswNbtViewRelationship)CurrentView.FindViewNodeByArbitraryId(related.ParentArbitraryId);
                                            CswNbtViewRelationship relToAddPropTo = relationship.findChildRelationshipByNodeTypeId(relatedTargetId);
                                            if (null == relToAddPropTo)
                                            {
                                                relToAddPropTo = CurrentView.AddViewRelationship(parentRel, related.PropOwner, relProp, false);
                                            }
                                            CurrentView.AddViewProperty(relToAddPropTo, ntp);
                                        }
                                    }
                                    else if (related.getRelatedType() == CswEnumNbtViewRelatedIdType.ObjectClassId)
                                    {
                                        CswNbtMetaDataObjectClass ownerOC = _CswNbtResources.MetaData.getObjectClass(relatedTargetId);
                                        foreach (CswNbtMetaDataObjectClassProp ocp in ownerOC.getObjectClassProps().Where(ocp => ocp.PropName == prop.PropName))
                                        {
                                            CswNbtViewRelationship parentRel      = (CswNbtViewRelationship)CurrentView.FindViewNodeByArbitraryId(related.ParentArbitraryId);
                                            CswNbtViewRelationship relToAddPropTo = relationship.findChildRelationshipByObjClassId(relatedTargetId);
                                            if (null == relToAddPropTo)
                                            {
                                                relToAddPropTo = CurrentView.AddViewRelationship(parentRel, related.PropOwner, relProp, false);
                                            }
                                            CurrentView.AddViewProperty(relToAddPropTo, ocp);
                                        }
                                    }
                                    else
                                    {
                                        CswNbtMetaDataPropertySet ownerPS = _CswNbtResources.MetaData.getPropertySet(relatedTargetId);
                                        foreach (CswNbtMetaDataObjectClass oc in ownerPS.getObjectClasses())
                                        {
                                            foreach (CswNbtMetaDataNodeType nt in oc.getNodeTypes())
                                            {
                                                foreach (CswNbtMetaDataNodeTypeProp ntp in nt.getNodeTypeProps())
                                                {
                                                    if (ntp.PropName == prop.PropName)
                                                    {
                                                        CswNbtViewRelationship parentRel      = (CswNbtViewRelationship)CurrentView.FindViewNodeByArbitraryId(related.ParentArbitraryId);
                                                        CswNbtViewRelationship relToAddPropTo = relationship.findChildRelationshipByPropSetId(relatedTargetId);
                                                        if (null == relToAddPropTo)
                                                        {
                                                            relToAddPropTo = CurrentView.AddViewRelationship(parentRel, related.PropOwner, relProp, false);
                                                        }
                                                        CurrentView.AddViewProperty(relToAddPropTo, ntp);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            CswNbtViewRelationship realRelationship = (CswNbtViewRelationship)CurrentView.FindViewNodeByArbitraryId(relationship.ArbitraryId);

                            if (type.Equals(CswEnumNbtViewRelatedIdType.NodeTypeId))
                            {
                                CswNbtMetaDataNodeType     nt  = _CswNbtResources.MetaData.getNodeType(Id);
                                CswNbtMetaDataNodeTypeProp ntp = nt.getNodeTypeProp(prop.PropName);
                                if (null != ntp)
                                {
                                    CurrentView.AddViewProperty(realRelationship, ntp);
                                }
                            }
                            else if (type.Equals(CswEnumNbtViewRelatedIdType.ObjectClassId))
                            {
                                CswNbtMetaDataObjectClass     oc  = _CswNbtResources.MetaData.getObjectClass(Id);
                                CswNbtMetaDataObjectClassProp ocp = oc.getObjectClassProp(prop.PropName);
                                if (null != ocp)
                                {
                                    CurrentView.AddViewProperty(realRelationship, prop);
                                }
                                else
                                {
                                    foreach (CswNbtMetaDataNodeType nt in oc.getNodeTypes())
                                    {
                                        CswNbtMetaDataNodeTypeProp ntp = nt.getNodeTypeProp(prop.PropName);
                                        if (null != ntp)
                                        {
                                            CurrentView.AddViewProperty(realRelationship, prop);
                                        }
                                    }
                                }
                            }
                            else
                            {
                                CswNbtMetaDataPropertySet     ps  = _CswNbtResources.MetaData.getPropertySet(Id);
                                CswNbtMetaDataObjectClassProp ocp = ps.getPropertySetProps().FirstOrDefault(PropSetProp => PropSetProp.PropName == prop.PropName);
                                if (null != ocp)
                                {
                                    CurrentView.AddViewProperty(realRelationship, prop);
                                }
                                else
                                {
                                    foreach (CswNbtMetaDataObjectClass oc in ps.getObjectClasses())
                                    {
                                        foreach (CswNbtMetaDataNodeType nt in oc.getNodeTypes())
                                        {
                                            CswNbtMetaDataNodeTypeProp ntp = nt.getNodeTypeProp(prop.PropName);
                                            if (null != ntp)
                                            {
                                                CurrentView.AddViewProperty(realRelationship, prop);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            };
            CswNbtView tempView = _CswNbtResources.ViewSelect.restoreView(CurrentView.ToString());

            tempView.Root.eachRelationship(eachRelationship, null);
        }