private bool doViewReportsWithSubElements(contentManagerService1 cCMS, ref List<CogObject> reports, string cogVersion, string baseReportPath)
        {
            if (cCMS == null)
            {
                reports = null;
                return false;
            }

            // Declare query properties array for report
            propEnum[] reportProps = new propEnum[] { propEnum.searchPath, propEnum.defaultName,
                                                propEnum.owner, propEnum.storeID, propEnum.connectionString, propEnum.creationTime,
                                                propEnum.metadataModelPackage, propEnum.ancestors, propEnum.disabled};

            // Declare properties to retrieve for package object internal to report object
            refProp packageProps = new refProp();
            packageProps.refPropName = propEnum.metadataModelPackage;
            packageProps.properties = new propEnum[] { propEnum.searchPath, propEnum.storeID,
                                                       propEnum.defaultName, propEnum.disabled,
                                                       propEnum.ancestors };

            // Declare sort properties for reports and users
            //reports
            sort[] reportSort = new sort[] { new sort() };
            reportSort[0].order = orderEnum.ascending;
            reportSort[0].propName = propEnum.defaultName;

            // Set up query options for the call. Adding the packageProps
            // will cause all requested subproperties to be retrieved for
            // the properties listed that refer to other objects.
            queryOptions qo = new queryOptions();
            qo.refProps= new refProp[] { packageProps };

            // Declare search path for reports and for a single user, based on CAMID
            searchPathMultipleObject reportsPath = new searchPathMultipleObject();
            searchPathMultipleObject userPath = new searchPathMultipleObject();
            //Set search paths to get reports. Userpath must be set
            //separately for each individual based on CAMID
            reportsPath.Value = "/content//report";

            // Run query to get all reports. Users will be queried as part of this
            // process, one for each report.
            baseClass[] bc = cCMS.query(reportsPath, reportProps, reportSort, qo);
            if (bc.Length > 0)
            {
                foreach (baseClass report_item in bc)
                {
                    // Cast base class object to more specific report object for access to more
                    // properties

                    cognosdotnet_2_0.report report = (cognosdotnet_2_0.report)report_item;
                    CogObject rpt = new CogObject();
                    rpt.ID = report_item.storeID.value.Value;
                    rpt.AddAttribute("ID", rpt.ID);
                    rpt.AddAttribute("Name", report_item.defaultName.value);
                    rpt.AddAttribute("CreationTime", report_item.creationTime.value.ToString());
                    rpt.AddAttribute("Type", "Report");
                    rpt.AddAttribute("Disabled", report.disabled.value.ToString());

                    // Make sure package or model is not null
                    if (report.metadataModelPackage.value!= null)
                    {
                        cognosdotnet_2_0.package package = (cognosdotnet_2_0.package)report.metadataModelPackage.value[0];
                        rpt.AddAttribute("Package_Path", report.metadataModelPackage.value[0].searchPath.value);
                        rpt.AddAttribute("Package_Name", getPackageName(rpt.getAttributeValue("Package_Path")));
                        rpt.AddAttribute("Package_Disabled", package.disabled.value.ToString());
                    }
                    else
                    {
                        rpt.AddAttribute("Package_Path", "null");
                        rpt.AddAttribute("Package_Name", "null");
                        rpt.AddAttribute("Package_Disabled", "null");
                    }
                    // Make sure owner is not null
                    if (report_item.owner.value != null)
                    {
                        getUserAccount(cCMS, report_item.owner.value[0].searchPath.value, ref rpt);
                        rpt.AddAttribute("Author_CAMID", report_item.owner.value[0].searchPath.value);
                    }
                    else
                    {
                        rpt.AddAttribute("Author_CAMID", "Unknown");
                    }
                    String version = cogVersion;
                    rpt.AddAttribute("Version", cogVersion);
                    rpt.AddAttribute("Path", report_item.searchPath.value);
                    rpt.AddAttribute("URL", baseReportPath + report_item.searchPath.value);
                    getSubElements(cCMS, report_item.searchPath.value, ref rpt);
                    /* This gets some limited auditing information. Most of this can be found
                     * more easily in the Raw Usage report of the Business Intelligence Dashboard
                     * package on perform-dev.tyson.com. Uncommenting the following line will
                     * cause a dramatic increase in runtime for this program
                     */
                    //getAuditInfo(ref cog);
                    reports.Add(rpt);
                }
            }
            else
            {
                reports = null;
            }
            return true;
        }
        private bool doViewQueriesWithSubElements(contentManagerService1 cCMS, ref List<CogObject> queries, string cogVersion, string baseQueryPath)
        {
            if (cCMS == null)
            {
                queries = null;
                return false;
            }

            //queries
            propEnum[] queryProps = new propEnum[] { propEnum.searchPath, propEnum.defaultName,
                                                propEnum.owner, propEnum.storeID, propEnum.connectionString, propEnum.creationTime,
                                                propEnum.metadataModelPackage, propEnum.ancestors, propEnum.disabled};

            // Declare properties to retrieve for package object internal to report object
            refProp packageProps = new refProp();
            packageProps.refPropName = propEnum.metadataModelPackage;
            packageProps.properties = new propEnum[] { propEnum.searchPath, propEnum.storeID,
                                                       propEnum.defaultName, propEnum.disabled,
                                                       propEnum.ancestors };

            //queries
            sort[] querySort = new sort[] { new sort() };
            querySort[0].order = orderEnum.ascending;
            querySort[0].propName = propEnum.defaultName;

            // Set up query options for the call. Adding the packageProps
            // will cause all requested subproperties to be retrieved for
            // the properties listed that refer to other objects.
            queryOptions qo = new queryOptions();
            qo.refProps = new refProp[] { packageProps };

            searchPathMultipleObject userPath = new searchPathMultipleObject();
            searchPathMultipleObject queriesPath = new searchPathMultipleObject();
            queriesPath.Value = "/content//query";

            // Make call to get all queries. Get each author for each query during this process
            // by making a separate call, based on CAMID; the same as above when pulling the reports.
            baseClass[] bcQueries = cCMS.query(queriesPath, queryProps, querySort, qo);
            if (bcQueries.Length > 0)
            {
                foreach (baseClass query_item in bcQueries)
                {
                    // Cast base class object to more specific report object for access to more
                    // properties
                    cognosdotnet_2_0.query query = (cognosdotnet_2_0.query)query_item;
                    CogObject qry = new CogObject();
                    qry.ID = query_item.storeID.value.Value;
                    qry.AddAttribute("ID", qry.ID);
                    qry.AddAttribute("Name", query_item.defaultName.value);
                    qry.AddAttribute("CreationTime", query_item.creationTime.value.ToString());
                    qry.AddAttribute("Type", "Query");
                    qry.AddAttribute("Disabled", query.disabled.value.ToString());

                    // Make sure package or package is not null
                    if (query.metadataModelPackage.value != null)
                    {
                        cognosdotnet_2_0.package package = (cognosdotnet_2_0.package)query.metadataModelPackage.value[0];
                        qry.AddAttribute("Package_Path", query.metadataModelPackage.value[0].searchPath.value);
                        qry.AddAttribute("Package_Name", getPackageName(qry.getAttributeValue("Package_Path")));
                        qry.AddAttribute("Package_Disabled", package.disabled.value.ToString());
                    }
                    else
                    {
                        qry.AddAttribute("Package_Path", "null");
                        qry.AddAttribute("Package_Name", "null");
                        qry.AddAttribute("Package_Disabled", "null");
                    }
                    // Make sure owner is not null
                    if (query_item.owner.value != null)
                    {
                        getUserAccount(cCMS, query_item.owner.value[0].searchPath.value, ref qry);
                        qry.AddAttribute("Author_CAMID", query_item.owner.value[0].searchPath.value);
                    }
                    else
                    {
                        qry.AddAttribute("Author_CAMID", "Unknown");
                    }
                    qry.AddAttribute("Version", cogVersion);
                    qry.AddAttribute("Path", query_item.searchPath.value);
                    qry.AddAttribute("URL", baseQueryPath + query_item.searchPath.value);
                    getSubElements(cCMS, query_item.searchPath.value, ref qry);
                    /* This gets some limited auditing information. Most of this can be found
                     * more easily in the Raw Usage report of the Business Intelligence Dashboard
                     * package on perform-dev.tyson.com. Uncommenting the following line will
                     * cause a dramatic increase in runtime for this program
                     */
                    //getAuditInfo(ref cog);
                    queries.Add(qry);
                }
            }
            else
            {
                queries = null;
            }
            return true;
        }
        private bool getQueriesForPackage(contentManagerService1 cCMS, ref List<CogObject> queries, string cogVersion,
                                          string baseQueryPath, string pathToQueriesInPackage)
        {
            if (cCMS == null)
            {
                queries = null;
                return false;
            }

            // Same query options used for all calls
            queryOptions qo = new queryOptions();

            //queries
            propEnum[] queryProps = new propEnum[] { propEnum.searchPath, propEnum.defaultName,
                                                propEnum.owner, propEnum.storeID, propEnum.connectionString,
                                                propEnum.metadataModelPackage};
            //users
            propEnum[] userProps = new propEnum[] { propEnum.userName, propEnum.name, propEnum.user };

            //queries
            sort[] querySort = new sort[] { new sort() };
            querySort[0].order = orderEnum.ascending;
            querySort[0].propName = propEnum.defaultName;
            //users
            sort[] userSort = new sort[] { new sort() };
            userSort[0].order = orderEnum.ascending;
            userSort[0].propName = propEnum.userName;

            searchPathMultipleObject userPath = new searchPathMultipleObject();
            searchPathMultipleObject queriesPath = new searchPathMultipleObject();
            queriesPath.Value = pathToQueriesInPackage;

            // Make call to get all queries. Get each author for each query during this process
            // by making a separate call, based on CAMID; the same as above when pulling the reports.
            baseClass[] bcQueries = cCMS.query(queriesPath, queryProps, querySort, qo);
            if (bcQueries.Length > 0)
            {
                foreach (baseClass query_item in bcQueries)
                {
                    // Cast base class object to more specific report object for access to more
                    // properties
                    cognosdotnet_2_0.query query = (cognosdotnet_2_0.query)query_item;
                    CogObject qry = new CogObject();
                    qry.ID = query_item.storeID.value.Value;
                    qry.AddAttribute("ID", qry.ID);
                    qry.AddAttribute("Name", query_item.defaultName.value);
                    qry.AddAttribute("Type", "AdHoc");
                    qry.AddAttribute("Package_Path", query.metadataModelPackage.value[0].searchPath.value);
                    qry.AddAttribute("Package_Name", getPackageName(qry.getAttributeValue("Package_Path")));

                    if (query_item.owner.value != null)
                    {
                        getUserAccount(cCMS, query_item.owner.value[0].searchPath.value, ref qry);
                        qry.AddAttribute("Author_CAMID", query_item.owner.value[0].searchPath.value);
                    }
                    else
                    {
                        qry.AddAttribute("Author_CAMID", "Unknown");
                    }
                    qry.AddAttribute("Version", cogVersion);
                    qry.AddAttribute("URL", baseQueryPath + query_item.searchPath.value);
                    queries.Add(qry);
                }
            }
            else
            {
                queries = null;
            }
            return true;
        }
        private bool getObjectsForPackage(contentManagerService1 cCMS, ref List<CogObject> objects, string cogVersion, 
                                          string basePath, string pathToObjectsInPackage)
        {
            if (cCMS == null)
            {
                objects = null;
                return false;
            }
            // Declare query properties array for reports, queries and for users
            propEnum[] cogProps = new propEnum[] { propEnum.searchPath, propEnum.defaultName,
                                                propEnum.owner, propEnum.storeID, propEnum.connectionString,
                                                propEnum.metadataModelPackage, propEnum.user,propEnum.actualExecutionTime,
                                                propEnum.policies};

            // Declare sort properties for reports
            sort[] cogSort = new sort[] { new sort() };
            cogSort[0].order = orderEnum.ascending;
            cogSort[0].propName = propEnum.defaultName;

            // Same query options used for all calls
            queryOptions qo = new queryOptions();

            searchPathMultipleObject objectsPath = new searchPathMultipleObject();

            // Declare search path for reports and for a single user, based on CAMID
            objectsPath.Value = pathToObjectsInPackage;

            // Run query to get all objects in package. Users will be queried as part of this
            // process, one for each report.
            baseClass[] bc = cCMS.query(objectsPath, cogProps, cogSort, qo);
            if (bc.Length > 0)
            {
                foreach (baseClass cog_item in bc)
                {

                    CogObject cog = new CogObject();
                    cog.ID = cog_item.storeID.value.Value;
                    cog.Name = cog_item.defaultName.value;
                    cog.AddAttribute("ID", cog.ID);
                    cog.AddAttribute("Name", cog_item.defaultName.value);
                    cog.AddAttribute("Version", cogVersion);
                    cog.AddAttribute("URL", basePath + cog_item.searchPath.value);
                    addSecurityPolicies(ref cog, cog_item);

                    /* Get owner/author information for this object
                     */
                    if (cog_item.owner.value != null)
                    {
                        getUserAccount(cCMS, cog_item.owner.value[0].searchPath.value, ref cog);
                        cog.AddAttribute("Author_CAMID", cog_item.owner.value[0].searchPath.value);
                    }
                    else
                    {
                        cog.AddAttribute("Author_CAMID", "Unknown");
                    }

                    /*
                     * Check whether object is a more specific type (e.g. query or report)
                     */
                    if (cog_item is report)
                    {
                        // Cast base class object to more specific report object for access to more
                        // properties
                        cognosdotnet_2_0.report report = (cognosdotnet_2_0.report)cog_item;
                        cog.AddAttribute("Type", "Report");
                        // Make sure package or Package is not null
                        if (report.metadataModelPackage.value != null)
                        {
                            cog.AddAttribute("Package_Path", report.metadataModelPackage.value[0].searchPath.value);
                            cog.AddAttribute("Package_Name", getPackageName(cog.getAttributeValue("Package_Path")));
                        }
                        else
                        {
                            cog.AddAttribute("Package_Path", "null");
                            cog.AddAttribute("Package_Name", "null");
                        }
                    }
                    else if (cog_item is query)
                    {
                        // Cast base class object to more specific report object for access to more
                        // properties
                        cognosdotnet_2_0.query query = (cognosdotnet_2_0.query)cog_item;
                        cog.AddAttribute("Type", "Query");
                        // Make sure package or Package is not null
                        if (query.metadataModelPackage.value != null)
                        {
                            cog.AddAttribute("Package_Path", query.metadataModelPackage.value[0].searchPath.value);
                            cog.AddAttribute("Package_Name", getPackageName(cog.getAttributeValue("Package_Path")));
                        }
                        else
                        {
                            cog.AddAttribute("Package_Path", "null");
                            cog.AddAttribute("Package_Name", "null");
                        }
                    }
                    else if (cog_item is reportView)
                    {
                        // Cast base class object to more specific report object for access to more
                        // properties
                        cognosdotnet_2_0.reportView reportView = (cognosdotnet_2_0.reportView)cog_item;
                        cog.AddAttribute("Type", "ReportView");
                        // Make sure package or Package is not null
                        if (reportView.packageBase != null)
                        {
                            cog.AddAttribute("Package_Path", reportView.packageBase.value);
                            cog.AddAttribute("Package_Name", getPackageName(cog.getAttributeValue("Package_Path")));
                        }
                        else
                        {
                            cog.AddAttribute("Package_Path", "null");
                            cog.AddAttribute("Package_Name", "null");
                        }
                    }

                    getSubElements(cCMS, cog_item.searchPath.value, ref cog);

                    // Add the object to the list
                    objects.Add(cog);
                }
            }
            return true;
        }
        // Method to take a reference to a Cog object and make queries to the Cognos
        // content audit database to retrieve auditing information for the report, query,
        // or report_view based on the unique searchpath for the object.
        private void getAuditInfo(ref CogObject cog)
        {
            string timesRun3Months = "";
            string timesRun6Months = "";
            string timesRun1Year = "";
            string numUsers3Months = "";
            string numUsers6Months = "";
            string numUsers1Year = "";
            string lastUser = "";
            string lastTime = "";

            try
            {

                // Set up times-run query
                string timesRunQry = @"SELECT COUNT(DISTINCT(r.cogipf_localtimestamp)) AS TIMESRUN
                                       FROM content_audit.cogipf_runreport r
                                       WHERE
                                       r.COGIPF_REPORTPATH = :reportPath
                                       AND
                                       r.COGIPF_LOCALTIMESTAMP >= SYSDATE - :timespan";

                Database db = DatabaseFactory.CreateDatabase("DBPTSN4");
                DbCommand dbCommand = db.GetSqlStringCommand(timesRunQry);
                db.AddInParameter(dbCommand, ":reportPath", DbType.String, cog.getAttributeValue("Path"));

                // Run for 3 months first.
                db.AddInParameter(dbCommand, ":timespan", DbType.Int32, 90);
                using (IDataReader dr = db.ExecuteReader(dbCommand))
                {
                    while (dr.Read())
                    {
                       System.Decimal temp = (System.Decimal)dr["TIMESRUN"];
                       timesRun3Months = temp.ToString();
                    }
                }

                // Now run for 6 months
                db.AddInParameter(dbCommand, ":timespan", DbType.Int32, 180);
                using (IDataReader dr = db.ExecuteReader(dbCommand))
                {
                    while (dr.Read())
                    {
                        System.Decimal temp = (System.Decimal)dr["TIMESRUN"];
                        timesRun6Months = temp.ToString();
                    }
                }

                // Finally, run for a year
                db.AddInParameter(dbCommand, ":timespan", DbType.Int32, 365);
                using (IDataReader dr = db.ExecuteReader(dbCommand))
                {
                    while (dr.Read())
                    {
                        System.Decimal temp = (System.Decimal)dr["TIMESRUN"];
                        timesRun1Year = temp.ToString();
                    }
                }

                // Set up query for users run over timespan
                string usersRunQuery = @"SELECT COUNT(DISTINCT(u.cogipf_username)) AS DistinctUsers
                                        FROM content_audit.cogipf_runreport r, content_audit.cogipf_userlogon u
                                        WHERE
                                        r.COGIPF_REPORTPATH = :reportPath
                                        AND
                                        r.COGIPF_LOCALTIMESTAMP >= SYSDATE - :timespan
                                        AND
                                        u.cogipf_sessionid = r.cogipf_sessionid";

                dbCommand = db.GetSqlStringCommand(usersRunQuery);
                db.AddInParameter(dbCommand, ":reportPath", DbType.String, cog.getAttributeValue("Path"));

                // Run query for 3 months

                db.AddInParameter(dbCommand, ":timespan", DbType.Int32, 90);
                using (IDataReader dr = db.ExecuteReader(dbCommand))
                {
                    while (dr.Read())
                    {
                        System.Decimal temp = (System.Decimal)dr["DistinctUsers"];
                        numUsers3Months = temp.ToString();
                    }
                }

                // Run query for 6 months
                db.AddInParameter(dbCommand, ":timespan", DbType.Int32, 180);
                using (IDataReader dr = db.ExecuteReader(dbCommand))
                {
                    while (dr.Read())
                    {
                        System.Decimal temp = (System.Decimal)dr["DistinctUsers"];
                        numUsers6Months = temp.ToString();
                    }
                }

                // Run query for 1 year
                db.AddInParameter(dbCommand, ":timespan", DbType.Int32, 365);
                using (IDataReader dr = db.ExecuteReader(dbCommand))
                {
                    while (dr.Read())
                    {
                        System.Decimal temp = (System.Decimal)dr["DistinctUsers"];
                        numUsers1Year = temp.ToString();
                    }
                }

                // Set up query for last user and time run
                string lastUserAndTimeQry = @"SELECT distinct(r.COGIPF_LOCALTIMESTAMP) AS LastTimeRun,
                                                 u.cogipf_username AS LastUserRun
                                            FROM content_audit.cogipf_runreport r, content_audit.cogipf_userlogon u,
                                                 (SELECT max(ir.COGIPF_LOCALTIMESTAMP) as maxdate
                                                  FROM content_audit.cogipf_runreport ir
                                                  WHERE ir.COGIPF_REPORTPATH = :reportPath) maxresults
                                            WHERE r.COGIPF_LOCALTIMESTAMP = maxresults.maxdate
                                            AND r.COGIPF_SESSIONID = u.COGIPF_SESSIONID
                                            AND u.COGIPF_USERNAME like '%'";

                dbCommand = db.GetSqlStringCommand(lastUserAndTimeQry);
                db.AddInParameter(dbCommand, ":reportPath", DbType.String, cog.getAttributeValue("Path"));

                using (IDataReader dr = db.ExecuteReader(dbCommand))
                {
                    while (dr.Read())
                    {
                        System.DateTime temp = (System.DateTime)dr["LastTimeRun"];
                        lastTime = temp.ToString();
                        lastUser = (string)dr["LastUserRun"];
                    }
                }

                cog.AddAttribute("timesRun3Months", timesRun3Months);
                cog.AddAttribute("timesRun6Months", timesRun6Months);
                cog.AddAttribute("timesRun1Year", timesRun1Year);
                cog.AddAttribute("numUsers3Months", numUsers3Months);
                cog.AddAttribute("numUsers6Months", numUsers6Months);
                cog.AddAttribute("lastTime", lastTime);
                cog.AddAttribute("lastUser", lastUser);

                cog.AddAttribute("numUsers1Year", numUsers1Year);
            }
            catch (Exception ex)
            {

            }
        }
        /* Does the bulk of the work to extract information on Users' MyFolder objects
         */
        private bool doViewUsersMyFolderContentsWithSubElements(contentManagerService1 cCMS, ref List<CogObject> cogs, string cogVersion, string baseReportPath)
        {
            string camid = "//account"; //this is the search path for all user accounts
            string userSearchPaths = "";
            // We will display My Folders and My Pages for all users in namespace
            propEnum[] props = new propEnum[]{propEnum.searchPath,
                    propEnum.objectClass,propEnum.defaultName,propEnum.portalPages,
                    propEnum.ancestors, propEnum.owner};

            // Same query options used for all calls
            queryOptions qo = new queryOptions();
            // Create sort object
            sort[] accountSort = new sort[] { new sort() };
            accountSort[0].order = orderEnum.ascending;
            accountSort[0].propName = propEnum.defaultName;

            //query for all accounts
            searchPathMultipleObject spMulti = new searchPathMultipleObject();
            spMulti.Value = camid;
            baseClass[] bc = cCMS.query(spMulti, props, accountSort, qo);

            if (bc != null && bc.Length > 0)
            {
                // Set different properties to grab for the reports, queries, or report views
                props = new propEnum[]{propEnum.searchPath, propEnum.defaultName,
                                       propEnum.owner, propEnum.storeID, propEnum.connectionString, propEnum.creationTime,
                                       propEnum.metadataModelPackage, propEnum.ancestors, propEnum.disabled};
                // Declare properties to retrieve for package object internal to report object
                refProp packageProps = new refProp();
                packageProps.refPropName = propEnum.metadataModelPackage;
                packageProps.properties = new propEnum[] { propEnum.searchPath, propEnum.storeID,
                                                       propEnum.defaultName, propEnum.disabled,
                                                       propEnum.ancestors };
                // Properties used to get base class information if the object is a report view
                refProp reportProps = new refProp();
                reportProps.refPropName = propEnum.@base;
                reportProps.properties = new propEnum[] { propEnum.metadataModelPackage, propEnum.storeID,
                                                      propEnum.searchPath, propEnum.disabled };
                qo.refProps = new refProp[] { packageProps, reportProps };

                for (int i = 0; i < bc.Length; i++)
                {
                    //Query the Content Store for all objects in My Folders for user bc[i]
                    userSearchPaths = bc[i].searchPath.value + "/folder[@name='My Folders']//report |" +
                                      bc[i].searchPath.value + "/folder[@name='My Folders']//query |" +
                                      bc[i].searchPath.value + "/folder[@name='My Folders']//reportView";

                    spMulti.Value = userSearchPaths;
                    baseClass[] contents = cCMS.query(spMulti, props, new sort[] { }, qo);
                    if (contents != null && contents.Length > 0)
                    {
                        //Display all objects in My Folders for user bc[i]
                        for (int j = 0; j < contents.Length; j++)
                        {
                            CogObject cog = new CogObject();
                            /*
                             * Check whether object is a more specific type (e.g. query or report)
                             */
                            if (contents[j] is report)
                            {
                                // Cast base class object to more specific report object for access to more
                                // properties
                                cognosdotnet_2_0.report report = (cognosdotnet_2_0.report)contents[j];
                                cog.AddAttribute("Type", "Report");
                                cog.AddAttribute("CreationTime", contents[j].creationTime.value.ToString());
                                // Make sure package or Package is not null
                                if (report.metadataModelPackage.value != null)
                                {
                                    cognosdotnet_2_0.package package = (cognosdotnet_2_0.package)report.metadataModelPackage.value[0];
                                    cog.AddAttribute("Package_Path", report.metadataModelPackage.value[0].searchPath.value);
                                    cog.AddAttribute("Package_Name", getPackageName(cog.getAttributeValue("Package_Path")));
                                    cog.AddAttribute("Package_Disabled", package.disabled.value.ToString());
                                }
                                else
                                {
                                    cog.AddAttribute("Package_Path", "null");
                                    cog.AddAttribute("Package_Name", "null");
                                    cog.AddAttribute("Package_Disabled", "null");
                                }
                                cog.AddAttribute("Disabled", report.disabled.value.ToString());
                            }
                            else if (contents[j] is query)
                            {
                                // Cast base class object to more specific report object for access to more
                                // properties
                                cognosdotnet_2_0.query query = (cognosdotnet_2_0.query)contents[j];
                                cog.AddAttribute("Type", "Query");
                                // Make sure package or Package is not null
                                if (query.metadataModelPackage.value != null)
                                {
                                    cognosdotnet_2_0.package package = (cognosdotnet_2_0.package)query.metadataModelPackage.value[0];
                                    cog.AddAttribute("Package_Path", query.metadataModelPackage.value[0].searchPath.value);
                                    cog.AddAttribute("Package_Name", getPackageName(cog.getAttributeValue("Package_Path")));
                                    cog.AddAttribute("Package_Disabled", package.disabled.value.ToString());
                                }
                                else
                                {
                                    cog.AddAttribute("Package_Path", "null");
                                    cog.AddAttribute("Package_Name", "null");
                                    cog.AddAttribute("Package_Disabled", "null");
                                }
                                cog.AddAttribute("Disabled", query.disabled.value.ToString());
                            }
                            else if (contents[j] is reportView)
                            {
                                // Cast base class object to more specific report object for access to more
                                // properties
                                cognosdotnet_2_0.reportView reportView = (cognosdotnet_2_0.reportView)contents[j];
                                cog.AddAttribute("Type", "ReportView");
                                // Make sure package or Package is not null
                                if (reportView.packageBase != null)
                                {
                                    cog.AddAttribute("Package_Path", reportView.packageBase.value);
                                    cog.AddAttribute("Package_Name", getPackageName(cog.getAttributeValue("Package_Path")));
                                }
                                else
                                {
                                    cog.AddAttribute("Package_Path", "null");
                                    cog.AddAttribute("Package_Name", "null");
                                }

                                if ([email protected] != null)
                                {
                                    cog.AddAttribute("BaseID", [email protected][0].storeID.value.Value);
                                    cog.AddAttribute("BasePath", [email protected][0].searchPath.value);

                                    if ([email protected][0] is report)
                                    {
                                        report tempReport = (report)[email protected][0];
                                        if (tempReport.metadataModelPackage.value[0] != null)
                                        {
                                            cog.AddAttribute("BasePackage_Path", tempReport.metadataModelPackage.value[0].searchPath.value);
                                            cog.AddAttribute("BasePackage_Name", getPackageName(cog.getAttributeValue("BasePackage_Path")));
                                        }
                                    }
                                    else if ([email protected][0] is query)
                                    {
                                        query tempQuery = (query)[email protected][0];
                                        if (tempQuery.metadataModelPackage.value[0] != null)
                                        {
                                            cog.AddAttribute("BasePackage_Path", tempQuery.metadataModelPackage.value[0].searchPath.value);
                                            cog.AddAttribute("BasePackage_Name", getPackageName(cog.getAttributeValue("BasePackage_Path")));
                                        }
                                    }
                                    cog.AddAttribute("Disabled", reportView.disabled.value.ToString());

                                }
                            }

                            // Make sure owner is not null
                            if (contents[j].owner.value != null)
                            {
                                /* We will get the author based on who's folder the report is in. This may
                                * not be strictly true. Uncomment the following line to get the old method.
                                * Also comment out or remove the line farther below that sets the Author_Name
                                * attribute*/
                                //getUserAccount(cCMS, contents[j].owner.value[0].searchPath.value, ref cog);
                                cog.AddAttribute("Author_CAMID", contents[j].owner.value[0].searchPath.value);
                            }
                            else
                            {
                                cog.AddAttribute("Author_CAMID", "Unknown");
                            }

                            cog.AddAttribute("Author_Name", bc[i].defaultName.value);
                            cog.AddAttribute("Version", cogVersion);
                            cog.AddAttribute("Name", contents[j].defaultName.value);
                            cog.AddAttribute("Path", contents[j].searchPath.value);
                            cog.AddAttribute("URL", baseReportPath + contents[j].searchPath.value);
                            cog.AddAttribute("MyFolder", "TRUE");
                            getSubElements(cCMS, contents[j].searchPath.value, ref cog);

                            /* This gets some limited auditing information. Most of this can be found
                             * more easily in the Raw Usage report of the Business Intelligence Dashboard
                             * package on perform-dev.tyson.com. Uncommenting the following line will
                             * cause a dramatic increase in runtime for this program
                             */
                            //getAuditInfo(ref cog);
                            cogs.Add(cog);
                        }
                    }
                }
            }
            else
            {
                cogs = null;
            }
            return true;
        }