From 3dc48ab1c026601d90fa34343325fcb6213b8f92 Mon Sep 17 00:00:00 2001 From: Per Samuelsson Date: Mon, 13 Mar 2017 17:48:51 +0100 Subject: [PATCH 01/18] Updated application- and class library project files to reflect how such projects should be configued in 2.4 and beyond. --- .../ApplicationProjectTemplate.csproj | 22 +++++++++---------- .../ClassLibraryProjectTemplate.csproj | 20 ++++++++--------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/Starcounter.VS.CSApplicationProjectTemplate/ApplicationProjectTemplate.csproj b/src/Starcounter.VS.CSApplicationProjectTemplate/ApplicationProjectTemplate.csproj index ad540c6..ca2ea50 100644 --- a/src/Starcounter.VS.CSApplicationProjectTemplate/ApplicationProjectTemplate.csproj +++ b/src/Starcounter.VS.CSApplicationProjectTemplate/ApplicationProjectTemplate.csproj @@ -47,18 +47,18 @@ 4.0 - - False - + + True + + + True + - False - - - False - + True + - False - + True + @@ -73,4 +73,4 @@ --> - + \ No newline at end of file diff --git a/src/Starcounter.VS.CSClassLibraryProjectTemplate/ClassLibraryProjectTemplate.csproj b/src/Starcounter.VS.CSClassLibraryProjectTemplate/ClassLibraryProjectTemplate.csproj index dd837dc..687412c 100644 --- a/src/Starcounter.VS.CSClassLibraryProjectTemplate/ClassLibraryProjectTemplate.csproj +++ b/src/Starcounter.VS.CSClassLibraryProjectTemplate/ClassLibraryProjectTemplate.csproj @@ -43,17 +43,17 @@ - False - + True + + + True + - False - - - False - + True + - False - + True + @@ -68,4 +68,4 @@ --> - + \ No newline at end of file From 8596c6843161f5e83279e1c0fe9d0fb0985d3499 Mon Sep 17 00:00:00 2001 From: Per Samuelsson Date: Tue, 14 Mar 2017 10:59:59 +0100 Subject: [PATCH 02/18] Made application- and class library project templates specify StarcounterVersionCompatibility: 2.4. --- .../ApplicationProjectTemplate.csproj | 1 + .../ClassLibraryProjectTemplate.csproj | 1 + 2 files changed, 2 insertions(+) diff --git a/src/Starcounter.VS.CSApplicationProjectTemplate/ApplicationProjectTemplate.csproj b/src/Starcounter.VS.CSApplicationProjectTemplate/ApplicationProjectTemplate.csproj index ca2ea50..255dde1 100644 --- a/src/Starcounter.VS.CSApplicationProjectTemplate/ApplicationProjectTemplate.csproj +++ b/src/Starcounter.VS.CSApplicationProjectTemplate/ApplicationProjectTemplate.csproj @@ -15,6 +15,7 @@ 512 false $(MSBuildProjectDirectory) + 2.4 true diff --git a/src/Starcounter.VS.CSClassLibraryProjectTemplate/ClassLibraryProjectTemplate.csproj b/src/Starcounter.VS.CSClassLibraryProjectTemplate/ClassLibraryProjectTemplate.csproj index 687412c..f6129f7 100644 --- a/src/Starcounter.VS.CSClassLibraryProjectTemplate/ClassLibraryProjectTemplate.csproj +++ b/src/Starcounter.VS.CSClassLibraryProjectTemplate/ClassLibraryProjectTemplate.csproj @@ -14,6 +14,7 @@ v4.5 512 false + 2.4 true From 73b506b7cca4f2ede7a255b0793a805017992dd8 Mon Sep 17 00:00:00 2001 From: Per Samuelsson Date: Tue, 14 Mar 2017 11:06:23 +0100 Subject: [PATCH 03/18] Bumped version of extension for 2.4 / develop to 2.0.0-RC1 --- build/version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/version.txt b/build/version.txt index afaf360..4f857da 100644 --- a/build/version.txt +++ b/build/version.txt @@ -1 +1 @@ -1.0.0 \ No newline at end of file +2.0.0-RC1 \ No newline at end of file From 7370339f56c85e0c143cd19a27c32914d383099a Mon Sep 17 00:00:00 2001 From: Per Samuelsson Date: Wed, 15 Mar 2017 12:07:23 +0100 Subject: [PATCH 04/18] Updated version of VSIX package and description of that and NuGet package, indicating version for Starcounter 2.4. --- build/Starcounter.VisualStudio.nuspec | 2 +- src/Starcounter.VS.VSIX/source.extension.vsixmanifest | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build/Starcounter.VisualStudio.nuspec b/build/Starcounter.VisualStudio.nuspec index 96aab88..e5dba36 100644 --- a/build/Starcounter.VisualStudio.nuspec +++ b/build/Starcounter.VisualStudio.nuspec @@ -7,7 +7,7 @@ Starcounter https://github.com/Starcounter/Starcounter.VisualStudio false - Starcounter Visual Studio extension wrapped up in a NuGet package. Use this version for Starcounter versions up until, and including, 2.3.x. + Starcounter Visual Studio extension wrapped up in a NuGet package. Use this version for Starcounter versions 2.4.x and higher. Starcounter VisualStudio diff --git a/src/Starcounter.VS.VSIX/source.extension.vsixmanifest b/src/Starcounter.VS.VSIX/source.extension.vsixmanifest index 0023134..075c7a8 100644 --- a/src/Starcounter.VS.VSIX/source.extension.vsixmanifest +++ b/src/Starcounter.VS.VSIX/source.extension.vsixmanifest @@ -1,9 +1,9 @@ - + Starcounter for Visual Studio - A Visual Studio extension aiding developers of Starcounter applications to easily build and debug their projects. Use version 1.x of the extension for Starcounter versions up until, and including, 2.3.x. + A Visual Studio extension aiding developers of Starcounter applications to easily build and debug their projects. Use version 2.x of the extension for Starcounter versions 2.4.x and higher. https://docs.starcounter.io/guides/working-with-starcounter/visual-studio-extension/ https://docs.starcounter.io/tutorial StarcounterIcon.png From a58032473c26b4c75c4796ae1b18b2387d2c5883 Mon Sep 17 00:00:00 2001 From: Per Samuelsson Date: Wed, 15 Mar 2017 13:52:01 +0100 Subject: [PATCH 05/18] Update README.md --- README.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 7e14cae..6a73b7a 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,9 @@ A Visual Studio extension that assist in development and debugging of Starcounte # Build Build `src\Starcounter.VisualStudio.sln`. +# Install / uninstall locally +After building, go to `bin\[Configuration]\`. Double-click `Starcounter.VS.vsix`. + # Pack The package version is maintained in `build\version.txt`. @@ -15,8 +18,8 @@ cd pack A new package will be created in `artifacts\`. -# Pushing to nuget.org -The package version is maintained in `build\version.txt`. Make sure to increase that (and commit) before publishing a new version upstream. +# Publishing to nuget.org +The package version is maintained in `build\version.txt`. Make sure to increase that (and commit) before publishing a new version upstream. Also keep that version in sync with the VS package version in `src\Starcounter.VS.VSIX\source.extension.vsixmanifest`. The version is on the `PackageManifest\Metadata\Identity` element. ``` cd build @@ -25,10 +28,12 @@ cd pack_and_push You will need to make sure the Starcounter API key with proper access rights is available through `%StarcounterNuGetKeyFull%`, or pushing will fail. -# Install / uninstall locally -After building, go to `bin\[Configuration]\`. Double-click `Starcounter.VS.vsix`. +# Publishing on Visual Studio marketplace +1. Go to https://marketplace.visualstudio.com/items?itemName=Starcounter.StarcounterforVisualStudio +2. Choose `Edit extension` +3. Use `Upload | Change` to upload a new version. # Resources -* Home on [Visual Studio marketplace]( https://marketplace.visualstudio.com/items?itemName=Starcounter.StarcounterforVisualStudio). +* Home on [Visual Studio marketplace](https://marketplace.visualstudio.com/items?itemName=Starcounter.StarcounterforVisualStudio). * Home for package on [nuget.org](https://www.nuget.org/packages/Starcounter.VisualStudio/). - +* [Version compatibility](https://github.com/Starcounter/Starcounter.VisualStudio/wiki/Version-compatibility) From 75669dc8df0de905dca26c67e81659d89a42934f Mon Sep 17 00:00:00 2001 From: Per Samuelsson Date: Wed, 15 Mar 2017 14:10:54 +0100 Subject: [PATCH 06/18] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6a73b7a..aad0454 100644 --- a/README.md +++ b/README.md @@ -37,3 +37,4 @@ You will need to make sure the Starcounter API key with proper access rights is * Home on [Visual Studio marketplace](https://marketplace.visualstudio.com/items?itemName=Starcounter.StarcounterforVisualStudio). * Home for package on [nuget.org](https://www.nuget.org/packages/Starcounter.VisualStudio/). * [Version compatibility](https://github.com/Starcounter/Starcounter.VisualStudio/wiki/Version-compatibility) +* [Development cheat sheet](https://github.com/Starcounter/Starcounter.VisualStudio/wiki/Development-cheat-sheet) From eea54bcdb61b67771e8d5e37d37b4f571949640f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20B=C3=B6ndergaard?= Date: Mon, 20 Mar 2017 16:49:59 +0100 Subject: [PATCH 07/18] Added a new Starcounter Template The template contains boilerplate code for a new Starcounter app with the folder structure and basic handlers and viewmodels. --- .../Api/CommitHooks.cs | 12 +++ .../Api/MainHandlers.cs | 31 ++++++ .../Api/OntologyHooks.cs | 12 +++ .../Api/PartialHandlers.cs | 12 +++ .../Database/GuestBook.cs | 13 +++ .../HelloStarcounter.csproj | 98 ++++++++++++++++++ .../Helpers/iHandler.cs | 7 ++ .../MyTemplate.vstemplate | 49 +++++++++ .../Program.cs | 25 +++++ .../Properties/AssemblyInfo.cs | 42 ++++++++ .../ViewModels/HelloStarcounterPage.json | 13 +++ .../ViewModels/HelloStarcounterPage.json.cs | 26 +++++ .../__TemplateIcon.ico | Bin 0 -> 148984 bytes .../viewmodels/HelloStarcounterPage.html | 30 ++++++ 14 files changed, 370 insertions(+) create mode 100644 src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/CommitHooks.cs create mode 100644 src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/MainHandlers.cs create mode 100644 src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/OntologyHooks.cs create mode 100644 src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/PartialHandlers.cs create mode 100644 src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Database/GuestBook.cs create mode 100644 src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/HelloStarcounter.csproj create mode 100644 src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Helpers/iHandler.cs create mode 100644 src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/MyTemplate.vstemplate create mode 100644 src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Program.cs create mode 100644 src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Properties/AssemblyInfo.cs create mode 100644 src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/ViewModels/HelloStarcounterPage.json create mode 100644 src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/ViewModels/HelloStarcounterPage.json.cs create mode 100644 src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/__TemplateIcon.ico create mode 100644 src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/wwwroot/HelloStarcounter/viewmodels/HelloStarcounterPage.html diff --git a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/CommitHooks.cs b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/CommitHooks.cs new file mode 100644 index 0000000..db75af3 --- /dev/null +++ b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/CommitHooks.cs @@ -0,0 +1,12 @@ +using $safeprojectname$.Helpers; + +namespace $safeprojectname$.Api +{ + internal class CommitHooks : IHandler + { + public void Register() + { + + } + } +} \ No newline at end of file diff --git a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/MainHandlers.cs b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/MainHandlers.cs new file mode 100644 index 0000000..e974775 --- /dev/null +++ b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/MainHandlers.cs @@ -0,0 +1,31 @@ +using $safeprojectname$.Helpers; +using $safeprojectname$.ViewModels; +using Starcounter; + +namespace $safeprojectname$.Api +{ + internal class MainHandlers : IHandler + { + public void Register() + { + Application.Current.Use(new HtmlFromJsonProvider()); + Application.Current.Use(new PartialToStandaloneHtmlProvider()); + + Handle.GET("/$safeprojectname$", () => + { + var page = new HelloStarcounterPage(); + + page.Visitors.Data = Db.SQL("SELECT g FROM GuestBook g"); + + if (Session.Current == null) + { + Session.Current = new Session(SessionOptions.PatchVersioning); + } + + page.Session = Session.Current; + + return page; + }); + } + } +} \ No newline at end of file diff --git a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/OntologyHooks.cs b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/OntologyHooks.cs new file mode 100644 index 0000000..196069e --- /dev/null +++ b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/OntologyHooks.cs @@ -0,0 +1,12 @@ +using $safeprojectname$.Helpers; + +namespace $safeprojectname$.Api +{ + internal class OntologyHooks : IHandler + { + public void Register() + { + + } + } +} \ No newline at end of file diff --git a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/PartialHandlers.cs b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/PartialHandlers.cs new file mode 100644 index 0000000..c369e15 --- /dev/null +++ b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/PartialHandlers.cs @@ -0,0 +1,12 @@ +using $safeprojectname$.Helpers; + +namespace $safeprojectname$.Api +{ + internal class PartialHandlers : IHandler + { + public void Register() + { + + } + } +} \ No newline at end of file diff --git a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Database/GuestBook.cs b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Database/GuestBook.cs new file mode 100644 index 0000000..8120fa6 --- /dev/null +++ b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Database/GuestBook.cs @@ -0,0 +1,13 @@ +using System; +using Starcounter; + +namespace $safeprojectname$ +{ + [Database] + public class GuestBook + { + public string FirstName { get; set; } + public string LastName { get; set; } + public string Visited { get; set; } + } +} diff --git a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/HelloStarcounter.csproj b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/HelloStarcounter.csproj new file mode 100644 index 0000000..cf34b21 --- /dev/null +++ b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/HelloStarcounter.csproj @@ -0,0 +1,98 @@ + + + + Debug + x64 + 9.0.20706 + 2.0 + {C86118D7-451E-4933-BFEE-A1EFDB162FD7};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {$guid1$} + Exe + Properties + $safeprojectname$ + $safeprojectname$ + v4.5 + 512 + false + $(MSBuildProjectDirectory) + 2.3 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + false + true + x64 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + false + true + x64 + + + + + 4.0 + + + + False + + + False + + + False + + + False + + + + + + + + + + + + + HelloStarcounterPage.json + + + + + + + + + MsBuild:Compile + + + + + + + + + \ No newline at end of file diff --git a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Helpers/iHandler.cs b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Helpers/iHandler.cs new file mode 100644 index 0000000..8bb5dec --- /dev/null +++ b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Helpers/iHandler.cs @@ -0,0 +1,7 @@ +namespace $safeprojectname$.Helpers +{ + internal interface IHandler + { + void Register(); + } +} diff --git a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/MyTemplate.vstemplate b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/MyTemplate.vstemplate new file mode 100644 index 0000000..9bccdcc --- /dev/null +++ b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/MyTemplate.vstemplate @@ -0,0 +1,49 @@ + + + Starcounter Boilerplate Application + A boilerplate project for creating a C# application that executes inside Starcounter + CSharp + + + 1000 + true + Starcounter Boilerplate Application + true + Enabled + true + __TemplateIcon.ico + + + + + CommitHooks.cs + MainHandlers.cs + OntologyHooks.cs + PartialHandlers.cs + + + GuestBook.cs + + + iHandler.cs + + Program.cs + + AssemblyInfo.cs + + + HelloStarcounterPage.json + HelloStarcounterPage.json.cs + + + + + + + HelloStarcounterPage.html + + + + + + \ No newline at end of file diff --git a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Program.cs b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Program.cs new file mode 100644 index 0000000..446254c --- /dev/null +++ b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Program.cs @@ -0,0 +1,25 @@ +using System; +using $safeprojectname$.Api; +using $safeprojectname$.Helpers; +using Starcounter; + +namespace $safeprojectname$ +{ + internal class Program + { + private static void Main() + { + IHandler[] handlers = { + new MainHandlers(), + new CommitHooks(), + new PartialHandlers(), + new OntologyHooks() + }; + + foreach (var handler in handlers) + { + handler.Register(); + } + } + } +} \ No newline at end of file diff --git a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Properties/AssemblyInfo.cs b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..9fce633 --- /dev/null +++ b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Properties/AssemblyInfo.cs @@ -0,0 +1,42 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using Starcounter.Internal; + +// 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. +[assembly: AssemblyTitle("$safeprojectname$")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("$safeprojectname$")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("526edd06-b4f0-469f-a4d4-e95b3c94f5ac")] + +// 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.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] + +// Assures the current assembly has a reference to the Starcounter +// assembly. A reference to Starcounter is currently required for +// Starcounter to detect that an assembly should be hosted. +[assembly: StarcounterAssembly()] diff --git a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/ViewModels/HelloStarcounterPage.json b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/ViewModels/HelloStarcounterPage.json new file mode 100644 index 0000000..0f32fc6 --- /dev/null +++ b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/ViewModels/HelloStarcounterPage.json @@ -0,0 +1,13 @@ +{ + "Html": "/$safeprojectname$/viewmodels/HelloStarcounterPage.html", + "Visitors": [ + { + "FirstName": "", + "LastName": "", + "Visited": "" + } + ], + "NewFirstName$": "", + "NewLastName$": "", + "AddVisitorTrigger$": 0 +} diff --git a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/ViewModels/HelloStarcounterPage.json.cs b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/ViewModels/HelloStarcounterPage.json.cs new file mode 100644 index 0000000..8843564 --- /dev/null +++ b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/ViewModels/HelloStarcounterPage.json.cs @@ -0,0 +1,26 @@ +using System; +using Starcounter; + +namespace $safeprojectname$.ViewModels +{ + partial class HelloStarcounterPage : Json + { + void Handle(Input.AddVisitorTrigger trigger) + { + if (string.IsNullOrEmpty(this.NewFirstName)) + return; + + Db.Transact(() => + { + new GuestBook + { + FirstName = this.NewFirstName, + LastName = this.NewLastName, + Visited = DateTime.Now.ToString("yyyy-MM-dd HH:mm") + }; + }); + + this.Visitors = Db.SQL("SELECT g FROM GuestBook g"); + } + } +} diff --git a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/__TemplateIcon.ico b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/__TemplateIcon.ico new file mode 100644 index 0000000000000000000000000000000000000000..15e90c1d0f3995824d40e8a5b60d0d260ff538c5 GIT binary patch literal 148984 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 + + \ No newline at end of file From 27f5ff05d79e3d5e713c65cc59b68324ecdb44fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20B=C3=B6ndergaard?= Date: Tue, 21 Mar 2017 08:56:41 +0100 Subject: [PATCH 08/18] Removed interface and changed to static classes --- .../Api/CommitHooks.cs | 8 +++----- .../Api/MainHandlers.cs | 14 +++++++------- .../Api/PartialHandlers.cs | 8 +++----- .../Helpers/iHandler.cs | 7 ------- .../Program.cs | 15 +++------------ 5 files changed, 16 insertions(+), 36 deletions(-) delete mode 100644 src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Helpers/iHandler.cs diff --git a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/CommitHooks.cs b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/CommitHooks.cs index db75af3..f7c76d0 100644 --- a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/CommitHooks.cs +++ b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/CommitHooks.cs @@ -1,10 +1,8 @@ -using $safeprojectname$.Helpers; - -namespace $safeprojectname$.Api +namespace $safeprojectname$.Api { - internal class CommitHooks : IHandler + internal static class CommitHooks { - public void Register() + public static void Register() { } diff --git a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/MainHandlers.cs b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/MainHandlers.cs index e974775..c79c0e2 100644 --- a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/MainHandlers.cs +++ b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/MainHandlers.cs @@ -1,21 +1,21 @@ -using $safeprojectname$.Helpers; -using $safeprojectname$.ViewModels; +using $safeprojectname$.ViewModels; using Starcounter; namespace $safeprojectname$.Api { - internal class MainHandlers : IHandler + internal static class MainHandlers { - public void Register() + public static void Register() { Application.Current.Use(new HtmlFromJsonProvider()); Application.Current.Use(new PartialToStandaloneHtmlProvider()); Handle.GET("/$safeprojectname$", () => { - var page = new HelloStarcounterPage(); - - page.Visitors.Data = Db.SQL("SELECT g FROM GuestBook g"); + var page = new HelloStarcounterPage + { + Visitors = {Data = Db.SQL("SELECT g FROM GuestBookEntry g")} + }; if (Session.Current == null) { diff --git a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/PartialHandlers.cs b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/PartialHandlers.cs index c369e15..fb6afbf 100644 --- a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/PartialHandlers.cs +++ b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/PartialHandlers.cs @@ -1,10 +1,8 @@ -using $safeprojectname$.Helpers; - -namespace $safeprojectname$.Api +namespace $safeprojectname$.Api { - internal class PartialHandlers : IHandler + internal static class PartialHandlers { - public void Register() + public static void Register() { } diff --git a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Helpers/iHandler.cs b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Helpers/iHandler.cs deleted file mode 100644 index 8bb5dec..0000000 --- a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Helpers/iHandler.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace $safeprojectname$.Helpers -{ - internal interface IHandler - { - void Register(); - } -} diff --git a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Program.cs b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Program.cs index 446254c..17cac60 100644 --- a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Program.cs +++ b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Program.cs @@ -1,6 +1,5 @@ using System; using $safeprojectname$.Api; -using $safeprojectname$.Helpers; using Starcounter; namespace $safeprojectname$ @@ -9,17 +8,9 @@ internal class Program { private static void Main() { - IHandler[] handlers = { - new MainHandlers(), - new CommitHooks(), - new PartialHandlers(), - new OntologyHooks() - }; - - foreach (var handler in handlers) - { - handler.Register(); - } + MainHandlers.Register(); + CommitHooks.Register(); + PartialHandlers.Register(); } } } \ No newline at end of file From b482956d28d73275ff4ad2ed789a7b2deaed4884 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20B=C3=B6ndergaard?= Date: Tue, 21 Mar 2017 08:58:22 +0100 Subject: [PATCH 09/18] Removed the Ontology hook class due to it being deprecate --- .../Api/OntologyHooks.cs | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/OntologyHooks.cs diff --git a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/OntologyHooks.cs b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/OntologyHooks.cs deleted file mode 100644 index 196069e..0000000 --- a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Api/OntologyHooks.cs +++ /dev/null @@ -1,12 +0,0 @@ -using $safeprojectname$.Helpers; - -namespace $safeprojectname$.Api -{ - internal class OntologyHooks : IHandler - { - public void Register() - { - - } - } -} \ No newline at end of file From 64d2506f0fa20707e2c0b8c544ba3021afdee48d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20B=C3=B6ndergaard?= Date: Tue, 21 Mar 2017 08:59:35 +0100 Subject: [PATCH 10/18] Changed the name of the database and updated the names on its properties --- .../Database/GuestBook.cs | 13 ------------- .../Database/GuestBookEntry.cs | 12 ++++++++++++ .../ViewModels/HelloStarcounterPage.json | 8 +++----- .../viewmodels/HelloStarcounterPage.html | 14 ++++++-------- 4 files changed, 21 insertions(+), 26 deletions(-) delete mode 100644 src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Database/GuestBook.cs create mode 100644 src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Database/GuestBookEntry.cs diff --git a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Database/GuestBook.cs b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Database/GuestBook.cs deleted file mode 100644 index 8120fa6..0000000 --- a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Database/GuestBook.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using Starcounter; - -namespace $safeprojectname$ -{ - [Database] - public class GuestBook - { - public string FirstName { get; set; } - public string LastName { get; set; } - public string Visited { get; set; } - } -} diff --git a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Database/GuestBookEntry.cs b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Database/GuestBookEntry.cs new file mode 100644 index 0000000..d97b86c --- /dev/null +++ b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/Database/GuestBookEntry.cs @@ -0,0 +1,12 @@ +using System; +using Starcounter; + +namespace $safeprojectname$ +{ + [Database] + public class GuestBookEntry + { + public string VisitorName { get; set; } + public string DateVisited { get; set; } + } +} diff --git a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/ViewModels/HelloStarcounterPage.json b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/ViewModels/HelloStarcounterPage.json index 0f32fc6..21c6ab6 100644 --- a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/ViewModels/HelloStarcounterPage.json +++ b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/ViewModels/HelloStarcounterPage.json @@ -2,12 +2,10 @@ "Html": "/$safeprojectname$/viewmodels/HelloStarcounterPage.html", "Visitors": [ { - "FirstName": "", - "LastName": "", - "Visited": "" + "VisitorName": "", + "DateVisited": "" } ], - "NewFirstName$": "", - "NewLastName$": "", + "NewName$": "", "AddVisitorTrigger$": 0 } diff --git a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/wwwroot/HelloStarcounter/viewmodels/HelloStarcounterPage.html b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/wwwroot/HelloStarcounter/viewmodels/HelloStarcounterPage.html index b95b4b8..e652da7 100644 --- a/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/wwwroot/HelloStarcounter/viewmodels/HelloStarcounterPage.html +++ b/src/Starcounter.VS.CSBoilerplateApplicationProjectTemplate/wwwroot/HelloStarcounter/viewmodels/HelloStarcounterPage.html @@ -3,25 +3,23 @@