About the Simple point plug-in data source Sample
[C#]
SimplePointWkspFact.cs
using System;
using System.Runtime.InteropServices;
using Microsoft.Win32;
using ESRI.ArcGIS.ADF.CATIDs;
using ESRI.ArcGIS.ADF;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geodatabase;
namespace ESRI.ArcGIS.Samples.SimplePointPlugin
{
/// <summary>
/// Summary description for SimplePointWkspFact.
/// </summary>
///
[ClassInterface(ClassInterfaceType.None)]
[Guid("6e167940-6d49-485b-a2b8-061c144d805f")]
[ProgId("SimplePointPlugin.SimplePointWFHelper")]
[ComVisible(true)]
public sealed class SimplePointWkspFact : IPlugInWorkspaceFactoryHelper
{
#region "Component Category Registration"
[ComRegisterFunction()]
public static void RegisterFunction(String regKey)
{
PlugInWorkspaceFactoryHelpers.Register(regKey);
}
[ComUnregisterFunction()]
public static void UnregisterFunction(String regKey)
{
PlugInWorkspaceFactoryHelpers.Unregister(regKey);
}
#endregion
#region class constructor
public SimplePointWkspFact()
{
}
#endregion
#region IPlugInWorkspaceFactoryHelper Members
public string get_DatasetDescription(esriDatasetType DatasetType)
{
switch (DatasetType)
{
case esriDatasetType.esriDTTable:
return "SimplePoint Table";
case esriDatasetType.esriDTFeatureClass:
return "SimplePoint Feature Class";
case esriDatasetType.esriDTFeatureDataset:
return "SimplePoint Feature Dataset";
default:
return null;
}
}
public string get_WorkspaceDescription(bool plural)
{
if (plural)
return "Simple Points";
else
return "Simple Point";
}
public bool CanSupportSQL
{
get { return false; }
}
public string DataSourceName
{
//HIGHLIGHT: ProgID = esriGeoDatabase.<DataSourceName>WorkspaceFactory
get { return "SimplePointPlugin"; }
}
public bool ContainsWorkspace(string parentDirectory, IFileNames fileNames)
{
if (fileNames == null)
return this.IsWorkspace(parentDirectory);
if (!System.IO.Directory.Exists(parentDirectory))
return false;
string sFileName;
while ((sFileName = fileNames.Next()) != null)
{
if (fileNames.IsDirectory())
continue;
if (System.IO.Path.GetExtension(sFileName).Equals(".csp"))
return true;
}
return false;
}
public UID WorkspaceFactoryTypeID
{
//HIGHLIGHT: Generate a new GUID to identify the workspace factory
get
{
UID wkspFTypeID = new UIDClass();
wkspFTypeID.Value = "{b8a25f89-2adc-43c0-ac2e-16b3a88e3915}"; //proxy
return wkspFTypeID;
}
}
public bool IsWorkspace(string wksString)
{
//TODO: IsWorkspace is True when folder contains csp files
if (System.IO.Directory.Exists(wksString))
return System.IO.Directory.GetFiles(wksString, "*.csp").Length > 0;
return false;
}
public esriWorkspaceType WorkspaceType
{
//HIGHLIGHT: WorkspaceType - FileSystem type strongly recommended
get
{
return esriWorkspaceType.esriFileSystemWorkspace;
}
}
public IPlugInWorkspaceHelper OpenWorkspace(string wksString)
{
//HIGHLIGHT: OpenWorkspace
//Don't have to check if wksString contains valid data file.
//Any valid folder path is fine since we want paste to work in any folder
if (System.IO.Directory.Exists(wksString))
{
SimplePointWksp openWksp = new SimplePointWksp(wksString);
return (IPlugInWorkspaceHelper)openWksp;
}
return null;
}
public string GetWorkspaceString(string parentDirectory, IFileNames fileNames)
{
//return the path to the workspace location if
if (!System.IO.Directory.Exists(parentDirectory))
return null;
if (fileNames == null) //don't have to check .csp file
return parentDirectory;
//HIGHLIGHT: GetWorkspaceString - claim and remove file names from list
string sFileName;
bool fileFound = false;
while ((sFileName = fileNames.Next()) != null)
{
if (fileNames.IsDirectory())
continue;
if (System.IO.Path.GetExtension(sFileName).Equals(".csp"))
{
fileFound = true;
fileNames.Remove();
}
}
if (fileFound)
return parentDirectory;
else
return null;
}
#endregion
}
}
[Visual Basic .NET]
SimplePointWkspFact.vb
Imports Microsoft.VisualBasic
Imports System
Imports System.Runtime.InteropServices
Imports Microsoft.Win32
Imports ESRI.ArcGIS.ADF.CATIDs
Imports ESRI.ArcGIS.ADF
Imports ESRI.ArcGIS.esriSystem
Imports ESRI.ArcGIS.Geodatabase
''' <summary>
''' Summary description for SimplePointWkspFact.
''' </summary>
'''
<ClassInterface(ClassInterfaceType.None), Guid("6e167940-6d49-485b-a2b8-061c144d805f"), ProgId("SimplePointPlugin.SimplePointWFHelper")> _
Public NotInheritable Class SimplePointWkspFact
Implements IPlugInWorkspaceFactoryHelper
#Region "Component Category Registration"
<ComRegisterFunction()> _
Public Shared Sub RegisterFunction(ByVal regKey As String)
'proxy PluginWorkspaceFactoryHelper
PlugInWorkspaceFactoryHelpers.Register(regKey)
End Sub
<ComUnregisterFunction()> _
Public Shared Sub UnregisterFunction(ByVal regKey As String)
PlugInWorkspaceFactoryHelpers.Unregister(regKey)
End Sub
#End Region
#Region "class constructor"
Public Sub New()
End Sub
#End Region
#Region "IPlugInWorkspaceFactoryHelper Members"
Public ReadOnly Property DatasetDescription(ByVal DatasetType As ESRI.ArcGIS.Geodatabase.esriDatasetType) As String Implements ESRI.ArcGIS.Geodatabase.IPlugInWorkspaceFactoryHelper.DatasetDescription
Get
Select Case DatasetType
Case esriDatasetType.esriDTTable
Return "SimplePoint Table"
Case esriDatasetType.esriDTFeatureClass
Return "SimplePoint Feature Class"
Case esriDatasetType.esriDTFeatureDataset
Return "SimplePoint Feature Dataset"
Case Else
Return Nothing
End Select
End Get
End Property
Public ReadOnly Property WorkspaceDescription(ByVal plural As Boolean) As String Implements ESRI.ArcGIS.Geodatabase.IPlugInWorkspaceFactoryHelper.WorkspaceDescription
Get
If plural Then
Return "Simple Points"
Else
Return "Simple Point"
End If
End Get
End Property
Public ReadOnly Property CanSupportSQL() As Boolean Implements IPlugInWorkspaceFactoryHelper.CanSupportSQL
Get
Return False
End Get
End Property
Public ReadOnly Property DataSourceName() As String Implements IPlugInWorkspaceFactoryHelper.DataSourceName
'HIGHLIGHT: ProgID = esriGeoDatabase.<DataSourceName>WorkspaceFactory
Get
Return "SimplePointPlugin"
End Get
End Property
Public Function ContainsWorkspace(ByVal parentDirectory As String, ByVal fileNames As IFileNames) As Boolean Implements IPlugInWorkspaceFactoryHelper.ContainsWorkspace
If fileNames Is Nothing Then
Return Me.IsWorkspace(parentDirectory)
End If
If (Not System.IO.Directory.Exists(parentDirectory)) Then
Return False
End If
Dim sFileName As String
sFileName = fileNames.Next()
Do While Not sFileName Is Nothing
If Not fileNames.IsDirectory() Then
If System.IO.Path.GetExtension(sFileName).Equals(".csp") Then
Return True
End If
End If
sFileName = fileNames.Next()
Loop
Return False
End Function
Public ReadOnly Property WorkspaceFactoryTypeID() As UID Implements IPlugInWorkspaceFactoryHelper.WorkspaceFactoryTypeID
'HIGHLIGHT: Generate a new GUID to identify the workspace factory
Get
Dim wkspFTypeID As UID = New UIDClass()
wkspFTypeID.Value = "{b8a25f89-2adc-43c0-ac2e-16b3a88e3915}" 'proxy
Return wkspFTypeID
End Get
End Property
Public Function IsWorkspace(ByVal wksString As String) As Boolean Implements ESRI.ArcGIS.Geodatabase.IPlugInWorkspaceFactoryHelper.IsWorkspace
'IsWorkspace is True when the folder contains csp files
If System.IO.Directory.Exists(wksString) Then
Return System.IO.Directory.GetFiles(wksString, "*.csp").Length > 0
End If
Return False
End Function
Public ReadOnly Property WorkspaceType() As esriWorkspaceType Implements IPlugInWorkspaceFactoryHelper.WorkspaceType
'HIGHLIGHT: WorkspaceType - FileSystem type strongly recommended
Get
Return esriWorkspaceType.esriFileSystemWorkspace
End Get
End Property
Public Function OpenWorkspace(ByVal wksString As String) As IPlugInWorkspaceHelper Implements IPlugInWorkspaceFactoryHelper.OpenWorkspace
'HIGHLIGHT: OpenWorkspace
'Don't have to check if wksString contains valid data file.
'Any valid folder path is fine since we want paste to work in any folder
If System.IO.Directory.Exists(wksString) Then
Dim openWksp As SimplePointWksp = New SimplePointWksp(wksString)
Return CType(openWksp, IPlugInWorkspaceHelper)
End If
Return Nothing
End Function
Public Function GetWorkspaceString(ByVal parentDirectory As String, ByVal fileNames As IFileNames) As String Implements IPlugInWorkspaceFactoryHelper.GetWorkspaceString
'return the path to the workspace location if
If (Not System.IO.Directory.Exists(parentDirectory)) Then
Return Nothing
End If
If fileNames Is Nothing Then 'don't have to check.csp file
Return parentDirectory
End If
'HIGHLIGHT: GetWorkspaceString - claim and remove file names from list
Dim sFileName As String
Dim fileFound As Boolean = False
sFileName = fileNames.Next()
Do While Not sFileName Is Nothing
If Not fileNames.IsDirectory() Then
If System.IO.Path.GetExtension(sFileName).Equals(".csp") Then
fileFound = True
fileNames.Remove()
End If
End If
sFileName = fileNames.Next()
Loop
If fileFound Then
Return parentDirectory
Else
Return Nothing
End If
End Function
#End Region
End Class