public JObject GetQuotas()
        {
            JObject ret = new JObject();

            Dictionary <Int32, Int32> NodeCountsForNodeType;
            Dictionary <Int32, Int32> NodeCountsForObjectClass;

            _CswNbtActQuotas.GetNodeCounts(out NodeCountsForNodeType, out NodeCountsForObjectClass);

            ret["canedit"]       = _CanEditQuotas.ToString().ToLower();
            ret["objectclasses"] = new JObject();
            foreach (CswNbtMetaDataObjectClass ObjectClass in from _ObjectClass in _CswNbtResources.MetaData.getObjectClasses() orderby _ObjectClass.ObjectClass select _ObjectClass)
            {
                string OCId = "oc_" + ObjectClass.ObjectClassId.ToString();
                ret["objectclasses"][OCId] = new JObject();
                ret["objectclasses"][OCId]["objectclass"]   = ObjectClass.ObjectClass.ToString();
                ret["objectclasses"][OCId]["objectclassid"] = ObjectClass.ObjectClassId.ToString();
                if (NodeCountsForObjectClass.ContainsKey(ObjectClass.ObjectClassId))
                {
                    ret["objectclasses"][OCId]["currentusage"] = NodeCountsForObjectClass[ObjectClass.ObjectClassId];
                }
                else
                {
                    ret["objectclasses"][OCId]["currentusage"] = "0";
                }
                if (ObjectClass.Quota != Int32.MinValue)
                {
                    ret["objectclasses"][OCId]["quota"] = ObjectClass.Quota;
                }
                else
                {
                    ret["objectclasses"][OCId]["quota"] = "";
                }
                ret["objectclasses"][OCId]["nodetypecount"]     = ObjectClass.getNodeTypes().Count().ToString();
                ret["objectclasses"][OCId]["excludeinquotabar"] = ObjectClass.ExcludeInQuotaBar;
                bool readOnly = ObjectClass.ObjectClass == CswEnumNbtObjectClass.InventoryGroupClass &&
                                false == _CswNbtResources.Modules.IsModuleEnabled(CswEnumNbtModuleName.MultiInventoryGroup); //case 29298
                ret["objectclasses"][OCId]["readonly"] = readOnly;

                ret["objectclasses"][OCId]["nodetypes"] = new JObject();
                foreach (CswNbtMetaDataNodeType NodeType in from _NodeType in ObjectClass.getNodeTypes() orderby _NodeType.NodeTypeName select _NodeType)
                {
                    if (NodeType.IsLatestVersion())
                    {
                        Int32  NodeTypeId   = NodeType.FirstVersionNodeTypeId;
                        string NodeTypeName = NodeType.NodeTypeName;
                        Int32  Quota        = NodeType.getFirstVersionNodeType().Quota;
                        string NTId         = "nt_" + NodeType.FirstVersionNodeTypeId.ToString();

                        ret["objectclasses"][OCId]["nodetypes"][NTId] = new JObject();
                        ret["objectclasses"][OCId]["nodetypes"][NTId]["nodetypename"]      = NodeTypeName;
                        ret["objectclasses"][OCId]["nodetypes"][NTId]["nodetypeid"]        = NodeTypeId;
                        ret["objectclasses"][OCId]["nodetypes"][NTId]["excludeinquotabar"] = NodeType.ExcludeInQuotaBar;
                        ret["objectclasses"][OCId]["nodetypes"][NTId]["readonly"]          = readOnly ||
                                                                                             (NodeTypeName.Equals("Site") && false == _CswNbtResources.Modules.IsModuleEnabled(CswEnumNbtModuleName.MultiSite)); //case 29298

                        if (NodeCountsForNodeType.ContainsKey(NodeTypeId))
                        {
                            ret["objectclasses"][OCId]["nodetypes"][NTId]["currentusage"] = NodeCountsForNodeType[NodeTypeId];
                        }
                        else
                        {
                            ret["objectclasses"][OCId]["nodetypes"][NTId]["currentusage"] = "0";
                        }
                        if (Quota != Int32.MinValue)
                        {
                            ret["objectclasses"][OCId]["nodetypes"][NTId]["quota"] = Quota;
                        }
                        else
                        {
                            ret["objectclasses"][OCId]["nodetypes"][NTId]["quota"] = "";
                        }
                    } // if( NodeType.IsLatestVersion )
                }     // foreach( CswNbtMetaDataNodeType NodeType in ObjectClass.NodeTypes )
            }         // foreach( CswNbtMetaDataObjectClass ObjectClass in _CswNbtResources.MetaData.ObjectClasses )

            return(ret);
        } // GetQuotas()