/// <summary> /// initializes the wiazrd pages based on "systemMustContain" attribute value list for the selected objectclass /// Adds the wizard pages to the wizard dialog /// </summary> /// <param name="nodeText"></param> /// <param name="mandatoryAttributes"></param> private void AddWizardPages(string nodeText, String[] mandatoryAttributes) { treeView1.HideSelection = false; _objectAddDlg.choosenClass = nodeText; _objectAddDlg.objectInfo.htMandatoryAttrList = new Hashtable(); List <string> attrlist = new List <string>(); _objectAddDlg.ClassAttributeList = new List <LdapAttributeType>(); attrlist.Add("instanceType"); attrlist.Add("objectCategory"); attrlist.Add("objectClass"); if (_objectAddDlg.choosenClass.Trim().Equals("user", StringComparison.InvariantCultureIgnoreCase) || _objectAddDlg.choosenClass.Trim().Equals("group", StringComparison.InvariantCultureIgnoreCase) || _objectAddDlg.choosenClass.Trim().Equals("computer", StringComparison.InvariantCultureIgnoreCase)) { attrlist.Add("objectSid"); attrlist.Add("sAMAccountName"); if (!attrlist.Contains("cn")) { attrlist.Add("cn"); } if (mandatoryAttributes != null) { foreach (string attr in mandatoryAttributes) { if (!attrlist.Contains(attr)) { attrlist.Add(attr); } } } } LdapClassType classtype = _objectAddDlg.schemaCache.GetSchemaTypeByObjectClass(_objectAddDlg.choosenClass) as LdapClassType; AttributeMap attr_map = classtype.Tag as AttributeMap; LdapEntry ldapentry = attr_map.Tag as LdapEntry; string DN = ldapentry.GetDN(); string[] attrs = { "name", "allowedAttributes", null }; List <LdapEntry> innerLdapEntries = null; int ret = dirnode.LdapContext.ListChildEntriesSynchronous (dirnode.DistinguishedName, LdapAPI.LDAPSCOPE.BASE, "(objectClass=*)", attrs, false, out innerLdapEntries); ldapentry = innerLdapEntries[0]; LdapValue[] ldapValues = ldapentry.GetAttributeValues("allowedAttributes", dirnode.LdapContext); if (ldapValues != null && ldapValues.Length > 0) { string[] optionalAttrs = new string[ldapValues.Length]; foreach (LdapValue Oclass in ldapValues) { string attrValue = Oclass.stringData; SchemaType schematype = _objectAddDlg.schemaCache.GetSchemaTypeByDisplayName(attrValue) as SchemaType; if (schematype != null) { schematype.AttributeType = "Optional"; _objectAddDlg.ClassAttributeList.Add(schematype as LdapAttributeType); } } foreach (string strValue in attrlist) { SchemaType schematype = _objectAddDlg.schemaCache.GetSchemaTypeByDisplayName(strValue) as SchemaType; if (schematype != null) { schematype.AttributeType = "Mandatory"; _objectAddDlg.ClassAttributeList.Add(schematype as LdapAttributeType); } } } if (_objectAddDlg.ClassAttributeList != null && _objectAddDlg.ClassAttributeList.Count != 0) { foreach (LdapAttributeType Attribute in _objectAddDlg.ClassAttributeList) { AttributeInfo attributeInfo = new AttributeInfo(); attributeInfo.sAttributename = Attribute.AttributeDisplayName; attributeInfo.sAttributeValue = "<not set>"; attributeInfo.sAttributeType = Attribute.AttributeType; attributeInfo.schemaInfo = _objectAddDlg.schemaCache.GetSchemaTypeByCommonName(Attribute.CName); if (!_objectAddDlg.objectInfo._AttributesList.ContainsKey(Attribute.AttributeDisplayName)) { _objectAddDlg.objectInfo._AttributesList.Add(Attribute.AttributeDisplayName, attributeInfo); } } } ObjectAddSinglePage ObjectAddSinglePage = null; _objectAddDlg.objectInfo.addedPages = new List <string>(); ObjectInfo.PageIndex = 0; //for all objects we should prompt to ask for their cn if (nodeText.Equals("organizationalUnit", StringComparison.InvariantCultureIgnoreCase)) { ObjectAddSinglePage = new ObjectAddSinglePage(_objectAddDlg, "ou"); _objectAddDlg.AddPage(ObjectAddSinglePage); _objectAddDlg.objectInfo.addedPages.Add("ou"); } else { ObjectAddSinglePage = new ObjectAddSinglePage(_objectAddDlg, "cn"); _objectAddDlg.AddPage(ObjectAddSinglePage); _objectAddDlg.objectInfo.addedPages.Add("cn"); } if (mandatoryAttributes != null && mandatoryAttributes.Length != 0) { for (int i = 0; i < mandatoryAttributes.Length; i++) { if (!((mandatoryAttributes[i].Trim().ToLower().Equals("cn")) || (mandatoryAttributes[i].Trim().ToLower().Equals("ou")))) { ObjectAddSinglePage = new ObjectAddSinglePage(_objectAddDlg, mandatoryAttributes[i].Trim()); _objectAddDlg.AddPage(ObjectAddSinglePage); _objectAddDlg.objectInfo.addedPages.Add(mandatoryAttributes[i].Trim()); } } } if (_objectAddDlg.choosenClass.Equals("computer", StringComparison.InvariantCultureIgnoreCase) || _objectAddDlg.choosenClass.Equals("user", StringComparison.InvariantCultureIgnoreCase) || _objectAddDlg.choosenClass.Equals("group", StringComparison.InvariantCultureIgnoreCase)) { ObjectAddSinglePage = new ObjectAddSinglePage(_objectAddDlg, "sAMAccountName"); _objectAddDlg.AddPage(ObjectAddSinglePage); _objectAddDlg.objectInfo.addedPages.Add("sAMAccountName"); } //for all objects they all come to the end of final page _objectAddDlg.AddPage(new ObjectAddFinalPage(_objectAddDlg, _container, _parentPage)); Wizard.enableButton(WizardDialog.WizardButton.Start); }