public IExplorerObject CreateInstanceByFullName(string FullName, ISerializableExplorerObjectCache cache)
        {
            if (cache.Contains(FullName))
            {
                return(cache[FullName]);
            }

            FullName = FullName.Replace("/", @"\");
            int lastIndex = FullName.LastIndexOf(@"\");

            if (lastIndex == -1)
            {
                return(null);
            }

            string dsName = FullName.Substring(0, lastIndex);
            string fcName = FullName.Substring(lastIndex + 1, FullName.Length - lastIndex - 1);

            AccessFDBDatasetExplorerObject dsObject = new AccessFDBDatasetExplorerObject();

            dsObject = dsObject.CreateInstanceByFullName(dsName, cache) as AccessFDBDatasetExplorerObject;
            if (dsObject == null || dsObject.ChildObjects == null)
            {
                return(null);
            }

            foreach (IExplorerObject exObject in dsObject.ChildObjects)
            {
                if (exObject.Name == fcName)
                {
                    cache.Append(exObject);
                    return(exObject);
                }
            }
            return(null);
        }
        public AccessFDBFeatureClassExplorerObject(AccessFDBDatasetExplorerObject parent, string filename, string dsname, IDatasetElement element)
            : base(parent, typeof(FeatureClass))
        {
            if (element == null)
            {
                return;
            }

            _parent   = parent;
            _filename = filename;
            _dsname   = dsname;
            _fcname   = element.Title;

            string typePrefix = String.Empty;
            bool   isLinked   = false;

            if (element.Class is LinkedFeatureClass)
            {
                typePrefix = "Linked ";
                isLinked   = true;
            }

            if (element.Class is IRasterCatalogClass)
            {
                _icon = new AccessFDBRasterIcon();
                _type = typePrefix + "Raster Catalog Layer";
                _rc   = (IRasterClass)element.Class;
            }
            else if (element.Class is IRasterClass)
            {
                _icon = new AccessFDBRasterIcon();
                _type = typePrefix + "Raster Layer";
                _rc   = (IRasterClass)element.Class;
            }
            else if (element.Class is IFeatureClass)
            {
                _fc = (IFeatureClass)element.Class;
                switch (_fc.GeometryType)
                {
                case geometryType.Envelope:
                case geometryType.Polygon:
                    if (isLinked)
                    {
                        _icon = new AccessFDBLinkedPolygonIcon();
                    }
                    else
                    {
                        _icon = new AccessFDBPolygonIcon();
                    }
                    _type = typePrefix + "Polygon Featureclass";
                    break;

                case geometryType.Multipoint:
                case geometryType.Point:
                    if (isLinked)
                    {
                        _icon = new AccessFDBLinkedPointIcon();
                    }
                    else
                    {
                        _icon = new AccessFDBPointIcon();
                    }
                    _type = typePrefix + "Point Featureclass";
                    break;

                case geometryType.Polyline:
                    if (isLinked)
                    {
                        _icon = new AccessFDBLinkedLineIcon();
                    }
                    else
                    {
                        _icon = new AccessFDBLineIcon();
                    }
                    _type = typePrefix + "Polyline Featureclass";
                    break;
                }
            }

            _contextItems    = new ToolStripItem[1];
            _contextItems[0] = new ToolStripMenuItem("Tasks");

            //_contextItems = new ToolStripItem[1];
            //_contextItems[0] = new ToolStripMenuItem("Rebuild Spatial Index...");
            //_contextItems[0].Click += new EventHandler(RebuildSpatialIndex_Click);
            ToolStripMenuItem item = new ToolStripMenuItem("Shrink Spatial Index...");

            item.Click += new EventHandler(ShrinkSpatialIndex_Click);
            ((ToolStripMenuItem)_contextItems[0]).DropDownItems.Add(item);
            item        = new ToolStripMenuItem("Spatial Index Definition...");
            item.Click += new EventHandler(SpatialIndexDef_Click);
            ((ToolStripMenuItem)_contextItems[0]).DropDownItems.Add(item);
            item        = new ToolStripMenuItem("Repair Spatial Index...");
            item.Click += new EventHandler(RepairSpatialIndex_Click);
            ((ToolStripMenuItem)_contextItems[0]).DropDownItems.Add(item);
            ((ToolStripMenuItem)_contextItems[0]).DropDownItems.Add(new ToolStripSeparator());
            item        = new ToolStripMenuItem("Truncate");
            item.Click += new EventHandler(Truncate_Click);
            ((ToolStripMenuItem)_contextItems[0]).DropDownItems.Add(item);
        }