Wednesday, June 02, 2004

MyGeneration SharpDevelop Project Template (C# version)

C# version of my previous template for MyGeneration. Save in the same directory as generated C# dOOdads entities. Set namespace to same one that was used to generate the dOOdads entities. Also MyGeneration.dOOdads.dll has to be placed in the bin\Release subfolder - i.e. My Documents\SharpDevelop Projects\My Project\bin\Release

Interface Code:

Dim cmbDatabases
Dim lstTables

Sub setup()

	If Not input.Contains("lstTables") Or Not input.Contains("txtPath") Then

		ui.Title = "Generate C# SharpDevelop Project"
		ui.Width  = 330
		ui.Height = 450

		' Grab default output path
		Dim sOutputPath
		sOutputPath = ""
		If input.Contains("defaultOutputPath") Then 
			sOutputPath = input.Item("defaultOutputPath")
		End If

		ui.AddLabel "lblPath", "Output file path: ",  "Select the output path."
		ui.AddTextBox "txtPath", sOutputPath, "Select the Output Path."
		ui.AddFilePicker "btnPath", "Select Path", "Select the Output Path.", "txtPath", true
		
		ui.AddLabel "lblNamespace", "Namespace: ",  "Provide your objects namespace."
		ui.AddTextBox "txtNamespace", "Your.Namespace", "Provide your objects namespace."

		' List Databases in a ComboBox
		ui.AddLabel "lblDatabases", "Select a database:", "Select a database in the dropdown below."
		Set cmbDatabases = ui.AddComboBox("cmbDatabase", "Select a database.")

		' List Tables in a listbox
		ui.AddLabel "lblTables", "Select tables:", "Select tables from the listbox below."
		Set lstTables = ui.AddListBox ("lstTables", "Select tables:")
		lstTables.Height = 150

		' Attach the onchange event to the cmbDatabases control.
		setupDatabaseDropdown cmbDatabases
		cmbDatabases.AttachEvent "onchange", "cmbDatabases_onchange"
		
		ui.ShowGUI = true
	Else 
		ui.ShowGUI = false
	End if

End Sub

Sub setupDatabaseDropdown(cmbDatabases)
	cmbDatabases.BindData MyMeta.Databases

	If Not MyMeta.DefaultDatabase Is Nothing Then
		cmbDatabases.SelectedValue = MyMeta.DefaultDatabase.Name
		bindTables cmbDatabases.SelectedValue
	End If
End Sub

Sub bindTables(sDatabase)
	Set db = MyMeta.Databases.Item(sDatabase)
	lstTables.BindData(db.Tables)
End Sub

' Event Handler
Sub cmbDatabases_onchange(control)
	Set cmbDatabases = ui.item("cmbDatabase")
	bindTables cmbDatabases.SelectedText
End Sub

Template Code:

<%
'------------------------------------------------------------------------------
' SharpDevelopC#.vbgen
' Last Updated: 2 June 2004
' Author: Sam Collett
' Creates SharpDevelop project file. Save to same directory as generated business entities
' Place MyGeneration.dOOdads.dll to bin\Release sub folder
'
'------------------------------------------------------------------------------

Dim objTable
Dim objColumn
Dim intLp
Dim bInFirst
Dim tableNames
Dim tableName
Dim namespace
Dim buffer
' Grab the namespace
namespace = input.Item("txtNamespace")
Dim databaseName
databaseName  = input.Item("cmbDatabase")
Set database = MyMeta.Databases.Item(databaseName)

Set tableNames = input.Item("lstTables")
%>
<Project name="<%=database.Alias%>" standardNamespace="<%=namespace%>" description="" newfilesearch="None" enableviewstate="True" version="1.1" projecttype="C#">
	<Contents>
  <%
' Loop through tables in db
For intLp = 0 To tableNames.Count - 1
	tableName = tableNames(intLp)
	Set objTable = database.Tables.Item(tableName)
	If objTable.Name = tableName Then
%>
		<File name=".\<%=objTable.Alias%>.cs" subtype="Code" buildaction="Compile" dependson="" data="" /><%
	End If
Next
%>
		<File name=".\AssemblyInfo.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
	</Contents>
	<References>
		<Reference type="Assembly" refto=".\bin\Release\MyGeneration.dOOdads.dll" localcopy="True" />
	</References>
	<DeploymentInformation target="" script="" strategy="File" />
	<Configuration runwithwarnings="True" name="Release">
		<CodeGeneration includedebuginformation="False" optimize="True" generateoverflowchecks="False" rootnamespace="" mainclass="" target="Library" definesymbols="" generatexmldocumentation="False" win32Icon="" imports="" />
		<VBDOC outputfile="" enablevbdoc="False" filestoparse="" commentprefix="" />
		<Execution consolepause="True" commandlineparameters="" />
		<Output directory=".\bin\Release" assembly="<%=database.Alias%>" executeScript="" executeBeforeBuild="" executeAfterBuild="" />
	</Configuration>
	<Configurations active="Debug">
		<Configuration runwithwarnings="False" name="Debug">
			<CodeGeneration includedebuginformation="True" optimize="True" generateoverflowchecks="True" rootnamespace="" mainclass="" target="Library" definesymbols="" generatexmldocumentation="False" win32Icon="" imports="" />
			<VBDOC outputfile="" enablevbdoc="False" filestoparse="" commentprefix="" />
			<Execution consolepause="True" commandlineparameters="" />
			<Output directory=".\bin\Debug" assembly="<%=database.Alias%>" executeScript="" executeBeforeBuild="" executeAfterBuild="" />
		</Configuration>
		<Configuration runwithwarnings="True" name="Release">
			<CodeGeneration includedebuginformation="False" optimize="True" generateoverflowchecks="False" rootnamespace="" mainclass="" target="Library" definesymbols="" generatexmldocumentation="False" win32Icon="" imports="" />
			<VBDOC outputfile="" enablevbdoc="False" filestoparse="" commentprefix="" />
			<Execution consolepause="True" commandlineparameters="" />
			<Output directory=".\bin\Release" assembly="<%=database.Alias%>" executeScript="" executeBeforeBuild="" executeAfterBuild="" />
		</Configuration>
	</Configurations>
</Project>
<% 
' save project file
SaveOutput database.Alias, "prjx"
' assembly file %>
using System;
using System.Reflection;
using System.Runtime.InteropServices;

// General Information about an assembly is controlled through the following 
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.

// Review the values of the assembly attributes

[assembly: AssemblyTitle("<%=database.Alias%>")]
[assembly: AssemblyDescription("C# Class Library")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
// Version information for an assembly consists of the following four values:

//      Major Version
//      Minor Version 
//      Build Number
//      Revision

// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below:

[assembly: AssemblyVersion("1.0.*")]
<%
SaveOutput "AssemblyInfo", "cs"
' this function saves the output to disk
Function SaveOutput(filename, ext)
	' Save the output file for this Table
	Dim filepath
	filepath = input.item("txtPath")
	' length of file path
	Dim length
	' position of last 	Dim pos
	' get length from input
	length = Len(filepath)
	' get position of last 	pos = InStrRev(filepath, "\")
	' if last \ is not at the end of the file path, it needs adding
	If Not pos = length Then
		' append \ to path
		filepath = filepath & "\"
	End If
	' filename is generated from table alias, removing invalid filename characters
	filename = filepath & filename & "." & ext
	' save output to file
	output.save filename, false
	buffer = buffer & output.text
	output.clear
End Function

output.write buffer

 %>

<%

Function TrimSpaces(str)

	Dim tname
	Dim name
	Dim char
	Dim l

	name = ""
	tname = str
	l = Len(tname)

	For j = 1 To l
		char = Mid(tname, j, 1)
		If Not char = " " Then
			name = name & char
		End If
	Next

	TrimSpaces = name
End Function
%>

No comments: