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()); }
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); }
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); }