You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
(2) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(2) |
Aug
(21) |
Sep
(25) |
Oct
(13) |
Nov
|
Dec
|
2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(6) |
Sep
(1) |
Oct
(1) |
Nov
(8) |
Dec
(3) |
2009 |
Jan
(5) |
Feb
(3) |
Mar
(10) |
Apr
(6) |
May
(3) |
Jun
(4) |
Jul
(1) |
Aug
(3) |
Sep
(5) |
Oct
(1) |
Nov
(2) |
Dec
(2) |
2010 |
Jan
|
Feb
(3) |
Mar
(2) |
Apr
(1) |
May
(1) |
Jun
(2) |
Jul
(2) |
Aug
|
Sep
(3) |
Oct
(2) |
Nov
|
Dec
|
2011 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
(3) |
Jul
(1) |
Aug
|
Sep
|
Oct
(2) |
Nov
(1) |
Dec
|
2012 |
Jan
(1) |
Feb
|
Mar
(1) |
Apr
(1) |
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(4) |
Nov
(4) |
Dec
(2) |
2013 |
Jan
(1) |
Feb
(1) |
Mar
(1) |
Apr
(1) |
May
(2) |
Jun
|
Jul
(1) |
Aug
(1) |
Sep
|
Oct
(1) |
Nov
(3) |
Dec
(2) |
2014 |
Jan
|
Feb
|
Mar
|
Apr
(3) |
May
(1) |
Jun
|
Jul
(2) |
Aug
(1) |
Sep
|
Oct
|
Nov
(2) |
Dec
(5) |
2015 |
Jan
(3) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(3) |
Oct
|
Nov
|
Dec
|
2016 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <mcu...@us...> - 2016-01-30 09:32:47
|
Revision: 1564 http://sourceforge.net/p/orm/code/1564 Author: mcurland Date: 2016-01-30 09:32:44 +0000 (Sat, 30 Jan 2016) Log Message: ----------- * Fix build issues on standalone VS2015 machine * Remove extra predefinedDataType line from DCIL generator Modified Paths: -------------- trunk/README.txt trunk/Tools/NUBuildVS/Neumont.Build.VisualStudio.targets trunk/VS2015.bat trunk/VSIXInstall/VS2012/Readme.txt trunk/VSIXInstall/VS2013/Readme.txt trunk/VSIXInstall/VS2015/Readme.txt trunk/XML/ConceptualDBtoDCIL/ConceptualDBtoDCIL.xslt Added Paths: ----------- trunk/ORMPackage.VS2015.sln Added: trunk/ORMPackage.VS2015.sln =================================================================== (Binary files differ) Index: trunk/ORMPackage.VS2015.sln =================================================================== --- trunk/ORMPackage.VS2015.sln 2015-09-07 23:39:27 UTC (rev 1563) +++ trunk/ORMPackage.VS2015.sln 2016-01-30 09:32:44 UTC (rev 1564) Property changes on: trunk/ORMPackage.VS2015.sln ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Modified: trunk/README.txt =================================================================== --- trunk/README.txt 2015-09-07 23:39:27 UTC (rev 1563) +++ trunk/README.txt 2016-01-30 09:32:44 UTC (rev 1564) @@ -80,13 +80,15 @@ Notes on building and debugging with VS2008 through VS2015: The project files (.csproj, etc) are multitargeted to work correctly in Visual Studio 2005 and higher. However, the solution files (.sln) have slightly different formats in each VS version. If you open a VS2005 solution file in VS2008 then you will be prompted to upgrade. *.VS2008.sln files are provided as companions to all *.sln files for use in VS2008, and you will find corresponding .sln files for each successive version of VisualStudio. However, the *.VS2008.sln files are not sufficient for successfully building in VS2008 (etc). -You must set the TargetVisualStudioVersion to the correct version (listed above) before opening a NORMA project file from any of the Visual Studio IDE environments. There is also a registry that needs to be set so that the ToolsVersion setting the project files match the target environment. The easiest way to do this (after the initial batch files mentioned above have completed successfully) is with the following steps. You may want to put these steps into an easily accessible batch file. The example given is for Visual Studio 2008, but 2010, 2012, 2013, and 2015 work similarly. +You must set the TargetVisualStudioVersion to the correct version (listed above) before opening a NORMA project file from any of the Visual Studio IDE environments. There is also registry information that needs to be set so that the ToolsVersion setting the project files match the target environment. The easiest way to do this (after the initial batch files mentioned above have completed successfully) is with the following steps. You may want to put these steps into an easily accessible batch file. The example given is for Visual Studio 2008, but 2010, 2012, 2013, and 2015 work similarly. 1) Open a Visual Studio 2008 Command Prompt (as an Administrator) 2) Navigate to your NORMA root code directory -3) Execute the VS2008.bat batch file in the command prompt. Each of these batch files (matching the VS20xx environment you're opening) do two things. First, it sets the TargetVisualStudioVersion variable to the appropriate value. Second, it updates the registry to copy the contents of the tools version matching your system to the tools version 12.34. All of the NORMA .csproj files use ToolsVersion="12.34" (a fake number), and modifying the contents of the corresponding registry key allows the same .csproj file to be used for all of the visual studio versions. +3) Execute the VS2008.bat batch file in the command prompt. Each of these batch files (matching the VS20xx environment you're opening) do two things. First, it sets the TargetVisualStudioVersion variable to the appropriate value. Second, it updates the registry to copy the contents of the tools version matching your system to the tools version 12.34. All of the NORMA .csproj files use ToolsVersion="12.34" (a fake number), and modifying the contents of the corresponding registry key allows the same .csproj file to be used for all of the visual studio versions. 4) devenv ORMPackage.VS2008.sln +VS2015 builds are exhibiting an additional issue where the VSCT.exe file used during the build cannot load VSCTCompress.dll. The only current solution for this is to include the directory containing this file on your path. With the Visual Studio SDK installed you should have an environment variable call VSSDK140Install. The VSCT directory is %VSSDK140Install%\VisualStudioIntegration\Tools\Bin. The VS2015.bat file has been extended to automatically extend the path in your local command prompt as needed (be sure to run as an admin or the batch file will not complete). + To build from the command line for VS2008: 1) Open a 'Visual Studio 2008 Command Prompt' 2) Navigate to your NORMA root code directory Modified: trunk/Tools/NUBuildVS/Neumont.Build.VisualStudio.targets =================================================================== --- trunk/Tools/NUBuildVS/Neumont.Build.VisualStudio.targets 2015-09-07 23:39:27 UTC (rev 1563) +++ trunk/Tools/NUBuildVS/Neumont.Build.VisualStudio.targets 2016-01-30 09:32:44 UTC (rev 1564) @@ -55,9 +55,9 @@ <PropertyGroup> <!-- If we are building for Visual Studio 9.0, use VSCT v3.5, otherwise use VSCT v2.0. --> - <VsctAssemblyVersion Condition="'$(VsctAssemblyVersion)'=='' and '$(TargetVisualStudioVersion)'=='v14.0'">10.0.0.0</VsctAssemblyVersion> - <VsctAssemblyVersion Condition="'$(VsctAssemblyVersion)'=='' and '$(TargetVisualStudioVersion)'=='v12.0'">10.0.0.0</VsctAssemblyVersion> - <VsctAssemblyVersion Condition="'$(VsctAssemblyVersion)'=='' and '$(TargetVisualStudioVersion)'=='v11.0'">10.0.0.0</VsctAssemblyVersion> + <VsctAssemblyVersion Condition="'$(VsctAssemblyVersion)'=='' and '$(TargetVisualStudioVersion)'=='v14.0'">14.0.0.0</VsctAssemblyVersion> + <VsctAssemblyVersion Condition="'$(VsctAssemblyVersion)'=='' and '$(TargetVisualStudioVersion)'=='v12.0'">12.0.0.0</VsctAssemblyVersion> + <VsctAssemblyVersion Condition="'$(VsctAssemblyVersion)'=='' and '$(TargetVisualStudioVersion)'=='v11.0'">11.0.0.0</VsctAssemblyVersion> <VsctAssemblyVersion Condition="'$(VsctAssemblyVersion)'=='' and '$(TargetVisualStudioVersion)'=='v10.0'">10.0.0.0</VsctAssemblyVersion> <VsctAssemblyVersion Condition="'$(VsctAssemblyVersion)'=='' and '$(TargetVisualStudioVersion)'=='v9.0'">3.5.0.0</VsctAssemblyVersion> <VsctAssemblyVersion Condition="'$(VsctAssemblyVersion)'==''">2.0.0.0</VsctAssemblyVersion> Modified: trunk/VS2015.bat =================================================================== --- trunk/VS2015.bat 2015-09-07 23:39:27 UTC (rev 1563) +++ trunk/VS2015.bat 2016-01-30 09:32:44 UTC (rev 1564) @@ -1 +1,23 @@ @CALL "%~dp0VSVer.bat" 2015 + +@ECHO OFF +::Add SDK tools to path if vsct cannot be found, fails to compile in VS2015 otherwise +set SDKVSCT= +for %%i in (vsct.exe) do (set EXISTINGVSCT=%%~s$PATH:i) +if '%EXISTINGVSCT%'=='' ( + CALL:GETSHORTPATH "SDKVSCT" "%VSSDK140INSTALL%\VisualStudioIntegration\Tools\Bin" +) +if NOT '%SDKVSCT%'=='' ( + CALL:EXTENDPATH "%SDKVSCT%" +) +SET FOUNDVSCT= +SET SDKVSCT= +goto:EOF + +:GETSHORTPATH +SET %~1=%~s2 +GOTO:EOF + +:EXTENDPATH +SET PATH=%PATH%;%~1 +GOTO:EOF Modified: trunk/VSIXInstall/VS2012/Readme.txt =================================================================== --- trunk/VSIXInstall/VS2012/Readme.txt 2015-09-07 23:39:27 UTC (rev 1563) +++ trunk/VSIXInstall/VS2012/Readme.txt 2016-01-30 09:32:44 UTC (rev 1564) @@ -8,7 +8,7 @@ If menu or other packages changes are made and VS2012 does not recognize them, then the .vsixmanifest file can be modified in place as follows: 1) Shut down VS2012 Experimental Hive -2) Find the vsix install location for the package. Starting from the directory in the LocalAppData environment variable (or "%userprofile%\Local Settings\Application Data" if LocalAppData is not set), find the extension.vsixmanifest file in "Microsoft\VisualStudio\10.0Exp\Extensions\ORM Solutions\Natural ORM Architect\1.0". +2) Find the vsix install location for the package. Starting from the directory in the LocalAppData environment variable (or "%userprofile%\Local Settings\Application Data" if LocalAppData is not set), find the extension.vsixmanifest file in "Microsoft\VisualStudio\11.0Exp\Extensions\ORM Solutions\Natural ORM Architect\1.0". 3) Change the contents of the <InstalledByMsi> tag from true to false (this enables you to disable the extension below). 4) Delete any .cache files you find in the Extensions directory (three directories above the directory with the manifest file). 5) Relaunch VS2012 Experimental Hive (devenv /RootSuffix Exp) and open the Tools/Extension Manager dialog. Modified: trunk/VSIXInstall/VS2013/Readme.txt =================================================================== --- trunk/VSIXInstall/VS2013/Readme.txt 2015-09-07 23:39:27 UTC (rev 1563) +++ trunk/VSIXInstall/VS2013/Readme.txt 2016-01-30 09:32:44 UTC (rev 1564) @@ -8,7 +8,7 @@ If menu or other packages changes are made and VS2013 does not recognize them, then the .vsixmanifest file can be modified in place as follows: 1) Shut down VS2013 Experimental Hive -2) Find the vsix install location for the package. Starting from the directory in the LocalAppData environment variable (or "%userprofile%\Local Settings\Application Data" if LocalAppData is not set), find the extension.vsixmanifest file in "Microsoft\VisualStudio\10.0Exp\Extensions\ORM Solutions\Natural ORM Architect\1.0". +2) Find the vsix install location for the package. Starting from the directory in the LocalAppData environment variable (or "%userprofile%\Local Settings\Application Data" if LocalAppData is not set), find the extension.vsixmanifest file in "Microsoft\VisualStudio\12.0Exp\Extensions\ORM Solutions\Natural ORM Architect\1.0". 3) Change the contents of the <InstalledByMsi> tag from true to false (this enables you to disable the extension below). 4) Delete any .cache files you find in the Extensions directory (three directories above the directory with the manifest file). 5) Relaunch VS2013 Experimental Hive (devenv /RootSuffix Exp) and open the Tools/Extension Manager dialog. Modified: trunk/VSIXInstall/VS2015/Readme.txt =================================================================== --- trunk/VSIXInstall/VS2015/Readme.txt 2015-09-07 23:39:27 UTC (rev 1563) +++ trunk/VSIXInstall/VS2015/Readme.txt 2016-01-30 09:32:44 UTC (rev 1564) @@ -8,7 +8,7 @@ If menu or other packages changes are made and VS2015 does not recognize them, then the .vsixmanifest file can be modified in place as follows: 1) Shut down VS2015 Experimental Hive -2) Find the vsix install location for the package. Starting from the directory in the LocalAppData environment variable (or "%userprofile%\Local Settings\Application Data" if LocalAppData is not set), find the extension.vsixmanifest file in "Microsoft\VisualStudio\10.0Exp\Extensions\ORM Solutions\Natural ORM Architect\1.0". +2) Find the vsix install location for the package. Starting from the directory in the LocalAppData environment variable (or "%userprofile%\Local Settings\Application Data" if LocalAppData is not set), find the extension.vsixmanifest file in "Microsoft\VisualStudio\14.0Exp\Extensions\ORM Solutions\Natural ORM Architect\1.0". 3) Change the contents of the <InstalledByMsi> tag from true to false (this enables you to disable the extension below). 4) Delete any .cache files you find in the Extensions directory (three directories above the directory with the manifest file). 5) Relaunch VS2015 Experimental Hive (devenv /RootSuffix Exp) and open the Tools/Extension Manager dialog. Modified: trunk/XML/ConceptualDBtoDCIL/ConceptualDBtoDCIL.xslt =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2015-09-07 23:39:30
|
Revision: 1563 http://sourceforge.net/p/orm/code/1563 Author: mcurland Date: 2015-09-07 23:39:27 +0000 (Mon, 07 Sep 2015) Log Message: ----------- Remove office icon dependencies * Allows clean build on 2013 and 2015 without earlier VS versions * Set version to September 2015. refs #193 Modified Paths: -------------- trunk/ORMModel/ORMModel.csproj trunk/ORMModel/Shell/PackageResources/PkgCmd.vsct trunk/Setup/Readme.htm trunk/Tools/NUBuildVS/Neumont.Build.VisualStudio.targets trunk/VersionGenerator.exe.config Added Paths: ----------- trunk/ORMModel/Resources/Commands.ImageStrip.png Modified: trunk/ORMModel/ORMModel.csproj =================================================================== --- trunk/ORMModel/ORMModel.csproj 2015-09-07 20:50:14 UTC (rev 1562) +++ trunk/ORMModel/ORMModel.csproj 2015-09-07 23:39:27 UTC (rev 1563) @@ -663,6 +663,7 @@ <None Include="Resources\Toolbox.ModelNoteConnector.Bitmap.Id.bmp" /> <Content Include="ObjectModel\VerbalizationReportGenerator.xslt" /> <Content Include="ObjectModel\VerbalizationReportSnippets\VerbalizationReportSnippets.xml" /> + <None Include="Resources\Commands.ImageStrip.png" /> <Content Include="Resources\ResourceStringsGenerator.xml"> <Generator>NUPlixLoader</Generator> <LastGenOutput>ResourceStringsGenerator.cs</LastGenOutput> Added: trunk/ORMModel/Resources/Commands.ImageStrip.png =================================================================== (Binary files differ) Index: trunk/ORMModel/Resources/Commands.ImageStrip.png =================================================================== --- trunk/ORMModel/Resources/Commands.ImageStrip.png 2015-09-07 20:50:14 UTC (rev 1562) +++ trunk/ORMModel/Resources/Commands.ImageStrip.png 2015-09-07 23:39:27 UTC (rev 1563) Property changes on: trunk/ORMModel/Resources/Commands.ImageStrip.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Modified: trunk/ORMModel/Shell/PackageResources/PkgCmd.vsct =================================================================== --- trunk/ORMModel/Shell/PackageResources/PkgCmd.vsct 2015-09-07 20:50:14 UTC (rev 1562) +++ trunk/ORMModel/Shell/PackageResources/PkgCmd.vsct 2015-09-07 23:39:27 UTC (rev 1563) @@ -336,7 +336,7 @@ </Button> <Button guid="guidORMDesignerCommandSet" id="cmdIdMoveRoleSequenceUp" priority="0x0060" type="Button"> <Parent guid="guidORMDesignerCommandSet" id="groupIdConstraintEditContext"/> - <Icon guid="guidOfficeIcon" id="msotcidUpArrow2"/> + <Icon guid="guidCommandIcons" id="bmpIdUpArrow"/> <CommandFlag>DefaultInvisible</CommandFlag> <CommandFlag>DynamicVisibility</CommandFlag> <Strings> @@ -345,7 +345,7 @@ </Button> <Button guid="guidORMDesignerCommandSet" id="cmdIdMoveRoleSequenceDown" priority="0x0070" type="Button"> <Parent guid="guidORMDesignerCommandSet" id="groupIdConstraintEditContext"/> - <Icon guid="guidOfficeIcon" id="msotcidDownArrow2"/> + <Icon guid="guidCommandIcons" id="bmpIdDownArrow"/> <CommandFlag>DefaultInvisible</CommandFlag> <CommandFlag>DynamicVisibility</CommandFlag> <Strings> @@ -534,7 +534,7 @@ </Button> <Button guid="guidORMDesignerCommandSet" id="cmdIdReadingEditorDeleteReading" priority="0x0730" type="Button"> <Parent guid="guidORMDesignerCommandSet" id="groupIdReadingEditorContextAddDelete"/> - <Icon guid="guidOfficeIcon" id="msotcidDelete"/> + <Icon guid="guidCommandIcons" id="bmpIdDelete"/> <CommandFlag>DefaultInvisible</CommandFlag> <CommandFlag>DynamicVisibility</CommandFlag> <Strings> @@ -543,7 +543,7 @@ </Button> <Button guid="guidORMDesignerCommandSet" id="cmdIdReadingEditorPromoteReading" priority="0x0740" type="Button"> <Parent guid="guidORMDesignerCommandSet" id="groupIdReadingEditorContextReadingPromoteDemote"/> - <Icon guid="guidOfficeIcon" id="msotcidUpArrow2"/> + <Icon guid="guidCommandIcons" id="bmpIdUpArrow"/> <CommandFlag>DefaultInvisible</CommandFlag> <CommandFlag>DynamicVisibility</CommandFlag> <Strings> @@ -552,7 +552,7 @@ </Button> <Button guid="guidORMDesignerCommandSet" id="cmdIdReadingEditorDemoteReading" priority="0x0750" type="Button"> <Parent guid="guidORMDesignerCommandSet" id="groupIdReadingEditorContextReadingPromoteDemote"/> - <Icon guid="guidOfficeIcon" id="msotcidDownArrow2"/> + <Icon guid="guidCommandIcons" id="bmpIdDownArrow"/> <CommandFlag>DefaultInvisible</CommandFlag> <CommandFlag>DynamicVisibility</CommandFlag> <Strings> @@ -561,7 +561,7 @@ </Button> <Button guid="guidORMDesignerCommandSet" id="cmdIdReadingEditorPromoteReadingOrder" priority="0x0760" type="Button"> <Parent guid="guidORMDesignerCommandSet" id="groupIdReadingEditorContextOrderPromoteDemote"/> - <Icon guid="guidOfficeIcon" id="msotcidUpArrow2"/> + <Icon guid="guidCommandIcons" id="bmpIdUpArrow"/> <CommandFlag>DefaultInvisible</CommandFlag> <CommandFlag>DynamicVisibility</CommandFlag> <Strings> @@ -570,7 +570,7 @@ </Button> <Button guid="guidORMDesignerCommandSet" id="cmdIdReadingEditorDemoteReadingOrder" priority="0x0770" type="Button"> <Parent guid="guidORMDesignerCommandSet" id="groupIdReadingEditorContextOrderPromoteDemote"/> - <Icon guid="guidOfficeIcon" id="msotcidDownArrow2"/> + <Icon guid="guidCommandIcons" id="bmpIdDownArrow"/> <CommandFlag>DefaultInvisible</CommandFlag> <CommandFlag>DynamicVisibility</CommandFlag> <Strings> @@ -692,7 +692,7 @@ <Button guid="guidORMDesignerCommandSet" id="cmdIdCopyImage" priority="0x0200" type="Button"> <Parent guid="guidORMDesignerCommandSet" id="groupIdModelCommands"/> - <Icon guid="guidOfficeIcon" id="msotcidCamera"/> + <Icon guid="guidCommandIcons" id="bmpIdCamera"/> <CommandFlag>DefaultInvisible</CommandFlag> <CommandFlag>DynamicVisibility</CommandFlag> <Strings> @@ -726,7 +726,7 @@ </Button> <Button guid="guidORMDesignerCommandSet" id="cmdIdInsertRoleAfter" priority="0x030" type="Button"> <Parent guid="guidORMDesignerCommandSet" id="groupIdRoleCommands"/> - <Icon guid="guidOfficeIcon" id="msotcidShapeRightArrow"/> + <Icon guid="guidCommandIcons" id="bmpIdRightArrow"/> <CommandFlag>DefaultInvisible</CommandFlag> <CommandFlag>DynamicVisibility</CommandFlag> <Strings> @@ -735,7 +735,7 @@ </Button> <Button guid="guidORMDesignerCommandSet" id="cmdIdInsertRoleBefore" priority="0x040" type="Button"> <Parent guid="guidORMDesignerCommandSet" id="groupIdRoleCommands"/> - <Icon guid="guidOfficeIcon" id="msotcidShapeLeftArrow"/> + <Icon guid="guidCommandIcons" id="bmpIdLeftArrow"/> <CommandFlag>DefaultInvisible</CommandFlag> <CommandFlag>DynamicVisibility</CommandFlag> <Strings> @@ -986,6 +986,7 @@ <Bitmaps> <Bitmap guid="guidORMVerbalizationToolbarImages" href="../../Resources/VerbalizationToolbarImages.png" usedList="bmpIdShowNegativeVerbalization, bmpIdShowPositiveVerbalization, bmpIdVerbalizationHyperlinkToDiagramSpy"/> <Bitmap guid="guidORMToolWindowIcons" href="../../Resources/ToolWindowIcons.png" usedList="bmpIdToolWindowVerbalizationBrowser, bmpIdToolWindowReadingEditor, bmpIdToolWindowReferenceModeEditor, bmpIdToolWindowFactEditor, bmpIdToolWindowModelBrowser, bmpIdToolWindowNotesEditor, bmpIdToolWindowPopulationEditor, bmpIdToolWindowContextWindow, bmpIdToolWindowDescriptionEditor, bmpIdToolWindowDiagramSpy"/> + <Bitmap guid="guidCommandIcons" href="../../Resources/Commands.ImageStrip.png" usedList="bmpIdDelete, bmpIdCamera, bmpIdUpArrow, bmpIdDownArrow, bmpIdLeftArrow, bmpIdRightArrow"/> </Bitmaps> </Commands> @@ -1308,14 +1309,13 @@ <IDSymbol value="Extern" name="cmdidPropertiesWindow"/> </GuidSymbol> <GuidSymbol name="CMDSETID_StandardCommandSet2K" value="Extern"/> - <GuidSymbol name="guidOfficeIcon" value="Extern"> - <IDSymbol value="Extern" name="msotcidNoIcon"/> - <IDSymbol value="Extern" name="msotcidDelete"/> - <IDSymbol value="Extern" name="msotcidUpArrow2"/> - <IDSymbol value="Extern" name="msotcidDownArrow2"/> - <IDSymbol value="Extern" name="msotcidShapeLeftArrow"/> - <IDSymbol value="Extern" name="msotcidShapeRightArrow"/> - <IDSymbol value="Extern" name="msotcidCamera"/> + <GuidSymbol name="guidCommandIcons" value="{E590BC32-4910-429C-BFA7-24EB2FD63E0D}"> + <IDSymbol value="0x0001" name="bmpIdDelete"/> + <IDSymbol value="0x0002" name="bmpIdCamera"/> + <IDSymbol value="0x0003" name="bmpIdUpArrow"/> + <IDSymbol value="0x0004" name="bmpIdDownArrow"/> + <IDSymbol value="0x0005" name="bmpIdLeftArrow"/> + <IDSymbol value="0x0006" name="bmpIdRightArrow"/> </GuidSymbol> </Symbols> </CommandTable> Modified: trunk/Setup/Readme.htm =================================================================== --- trunk/Setup/Readme.htm 2015-09-07 20:50:14 UTC (rev 1562) +++ trunk/Setup/Readme.htm 2015-09-07 23:39:27 UTC (rev 1563) @@ -3,7 +3,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"/> -<title>NORMA January 2015 CTP Readme</title> +<title>NORMA September 2015 CTP Readme</title> <style type="text/css"> .new {font-size:x-small; background-color:Gold; color:Blue; } .toggle{font-size:larger;cursor:pointer;font-family: monospace; color:rgb(97, 133, 160); display:inline; padding-right:.15em;} @@ -35,9 +35,9 @@ <body> -<p><b><a id="The Top" style="font-family:Verdana;font-size:medium">NORMA January 2015 CTP Readme</a> </b></p> +<p><b><a id="The Top" style="font-family:Verdana;font-size:medium">NORMA September 2015 CTP Readme</a> </b></p> <p>This file supersedes the previous readme.txt and older readme.htm files. This readme has parallel indexing mechanisms: by topic, and by release date (starting with the October 2008 (2008-10) release). The file will be extended for future product releases.<br/><br/> -The January 2015 is primarily a bug fix release. Support has also been added for import from an Oracle database. See detailed change notes below for specifics.<br/><br/> +The September 2015 release adds support for Visual Studio 2015. See detailed change notes below for specifics.<br/><br/> </p> <h2><span class="toggle" onclick="toggleDisp(this,'contents')">-</span>Contents</h2> <div id="contents"> @@ -70,12 +70,32 @@ </div>--> <hr/> -<h2><span class="toggle" onclick="toggleDisp(this,'jan2015')">-</span>January 2015 CTP Changes</h2> -<div id="jan2015"> -<div>The January 2015 CTP release includes all modifications through changeset 1559. Full changeset descriptions can be found at the <a href="http://orm.svn.sourceforge.net/viewvc/orm/trunk/?view=log">sourceforge code repository</a> (be patient with this link, the page contains a full changeset history).</div> +<h2><span class="toggle" onclick="toggleDisp(this,'sep2015')">-</span>September 2015 CTP Changes</h2> +<div id="sep2015"> +<div>The September 2015 CTP release includes all modifications through changeset 1563. Full changeset descriptions can be found at the <a href="http://orm.svn.sourceforge.net/viewvc/orm/trunk/?view=log">sourceforge code repository</a>.</div> <ul> <li>Feature Changes: <ol> +<li>Added support for Visual Studio 2015.</li> +<li>Modified setup behavior to not use devenv /setup. NORMA now installs as a Visual Studio extension for version at or above VS2010. Setup will be much faster, but some slowdowns are expected when launching Visual Studio the first time after installation.</li> +</ol> +</li> +<li>Bug Fixes: +<ol> +<li>Removed all dependencies on Office icons, which are not available after VS2013 and displayed inconsistently in earlier releases. Development builds will now complete for VS2013 and VS2015 on machines without earlier Visual Studio installations.</li> +</ol> +</li> +</ul> +<hr/> +</div> +<h2><span class="toggle" onclick="toggleDisp(this,'oldChanges')">+</span>Previous Releases</h2> +<div style="display:none;" id="oldChanges"> +<h3><span class="toggle" onclick="toggleDisp(this,'jan2015')">+</span>January 2015 CTP Changes</h3> +<div style="display:none" id="jan2015"> +<div>The January 2015 CTP release includes all modifications through changeset 1559.</div> +<ul> +<li>Feature Changes: +<ol> <li>Added database import support for Oracle using the ODAC drivers (thanks to Jose Carlus).</li> <li>Data type verbalization now shows the scale/length/precision of a data type if these values are set.</li> <li>Allow the sample population editor to display recursive identifiers. Note that this will still crash other parts of the system (like relational generation), but can at least be viewed conceptually. The use of a surrogate identifier is recommended in this case.</li> @@ -101,8 +121,6 @@ </ul> <hr/> </div> -<h2><span class="toggle" onclick="toggleDisp(this,'oldChanges')">+</span>Previous Releases</h2> -<div style="display:none;" id="oldChanges"> <h3><span class="toggle" onclick="toggleDisp(this,'dec2013')">+</span>December 2013 CTP Changes</h3> <div style="display:none;" id="dec2013"> <div>The December 2013 CTP release includes all modifications through changeset 1540.</div> @@ -584,8 +602,9 @@ <hr /> <h3><a id="Setup">Installing NORMA</a></h3> <ol> -<li>Updating NORMA to the latest version requires Setup.bat to be run from the downloaded .zip file, which should be chosen based on whether you want to install for Visual Studio 2010, Visual Studio 2008, or Visual Studio 2005. NORMA does not share installation files between these two products, so you must choose your target when you download the installation package.</li> -<li>Any previous NORMA versions and any dependencies will be automatically uninstalled and reinstalled by the Setup.bat file. Make sure Visual Studio is not running during the installation pocess. Please be patient with the uninstall, which takes roughly the same amount of time as the install. Killing installation processes (the setup command prompt, msiexec, devenv) can leave you with a system that requires manual intervention to restore.</li> +<li>Updating NORMA to the latest version requires Setup.bat to be run from the downloaded .zip file, which should be chosen based on your Visual Studio version (2015, 2013, 2012, 2010, 2008, 2005). NORMA does not share installation files between versions, so you must choose your target when you download the installation package.</li> +<li>Any previous NORMA versions for the selected Visual Studio target will be automatically uninstalled and reinstalled by the Setup.bat file. Make sure Visual Studio is not running during the installation pocess. Please be patient with the uninstall, which takes roughly the same amount of time as the install. Killing installation processes (the setup command prompt, msiexec, devenv) can leave you with a system that requires manual intervention to restore.</li> +<li>Full Visual Studio studio configuration on version 2010 and higher will not be completed until after Visual Studio has restarted. Some slowdown should be expected on Visual Studio launch, the first time the 'File/New' dialog is opened, and the first time an .orm file is opened.</li> <li>First extract the files from the .zip file first unless you open them with the standard 'Compressed (zipped) Folders' viewer, in which case you can usually run Setup.bat without pre-expanding the zip file. Vista is likely to recommend expansion even with the standard viewer.</li> <li><a id="#Setup 2008-10" class="new" title="October 2008 CTP: SetupVistaOrLater.bat elevates install permissions on Vista, Windows7, and later operating systems.">2008-10</a> The setup process must be run with admistrative permissions on Vista, Windows7, and later operating systems. You can either right-click the Setup.bat file and choose 'Run as Administrator', or you can run SetupVistaOrLater.bat instead of Setup.bat and agree to the security warnings. [Note that SetupVistaOrLater.bat relies on a system where a .js extension is treated as an executable scripting file. Some other products (especially some from Adobe) may override this default system setting. If SetupVistaOrLater.bat does not appear to do anything, then explicitly run Setup.bat as an administrator.]</li> Modified: trunk/Tools/NUBuildVS/Neumont.Build.VisualStudio.targets =================================================================== --- trunk/Tools/NUBuildVS/Neumont.Build.VisualStudio.targets 2015-09-07 20:50:14 UTC (rev 1562) +++ trunk/Tools/NUBuildVS/Neumont.Build.VisualStudio.targets 2015-09-07 23:39:27 UTC (rev 1563) @@ -55,6 +55,9 @@ <PropertyGroup> <!-- If we are building for Visual Studio 9.0, use VSCT v3.5, otherwise use VSCT v2.0. --> + <VsctAssemblyVersion Condition="'$(VsctAssemblyVersion)'=='' and '$(TargetVisualStudioVersion)'=='v14.0'">10.0.0.0</VsctAssemblyVersion> + <VsctAssemblyVersion Condition="'$(VsctAssemblyVersion)'=='' and '$(TargetVisualStudioVersion)'=='v12.0'">10.0.0.0</VsctAssemblyVersion> + <VsctAssemblyVersion Condition="'$(VsctAssemblyVersion)'=='' and '$(TargetVisualStudioVersion)'=='v11.0'">10.0.0.0</VsctAssemblyVersion> <VsctAssemblyVersion Condition="'$(VsctAssemblyVersion)'=='' and '$(TargetVisualStudioVersion)'=='v10.0'">10.0.0.0</VsctAssemblyVersion> <VsctAssemblyVersion Condition="'$(VsctAssemblyVersion)'=='' and '$(TargetVisualStudioVersion)'=='v9.0'">3.5.0.0</VsctAssemblyVersion> <VsctAssemblyVersion Condition="'$(VsctAssemblyVersion)'==''">2.0.0.0</VsctAssemblyVersion> @@ -93,7 +96,7 @@ <VSCTCompiler NoLogo="true" IntermediateDirectory="$(MSBuildProjectDirectory)\$(IntermediateOutputPath)" - AdditionalIncludeDirectories="$(VsctIncludesDirs);$(VsSDKIncludesDir);$(VsSDKIncludesDir)\office10" + AdditionalIncludeDirectories="$(VsctIncludesDirs);$(VsSDKIncludesDir)" Definitions="$(DefineConstants)" Source="@(CompileVsct)" OutputFile="%(FileName).cto" Modified: trunk/VersionGenerator.exe.config =================================================================== --- trunk/VersionGenerator.exe.config 2015-09-07 20:50:14 UTC (rev 1562) +++ trunk/VersionGenerator.exe.config 2015-09-07 23:39:27 UTC (rev 1563) @@ -2,7 +2,7 @@ <configuration> <appSettings> <add key="RevisionStartYearMonth" value="2006-01"/> - <add key="ReleaseYearMonth" value="2015-08"/> + <add key="ReleaseYearMonth" value="2015-09"/> <add key="CountQuartersFromYearMonth" value="2011-01"/> <!-- ReleaseType: "CTP" or "RTM" --> <add key="ReleaseType" value="CTP"/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2015-09-07 20:50:17
|
Revision: 1562 http://sourceforge.net/p/orm/code/1562 Author: mcurland Date: 2015-09-07 20:50:14 +0000 (Mon, 07 Sep 2015) Log Message: ----------- Use VSIX installation with devenv /udateconfiguration for VS2012/2013/2015 Setup.sln * Shows NORMA as an installed extension in VS * /updateconfiguration will cause next VS launch to slow down and potentially file/new and opening the first .orm file. However, this is still much faster than devenv /setup, which has gotten significantly slower for each new VS version. * Adjust vsix manifest editions for VS2013 and VS2015 Modified Paths: -------------- trunk/Setup/Config.wxi trunk/Setup/Product.wxs trunk/Setup/Strings.wxl trunk/Setup/UI/ErrorProgressText.wxs trunk/VSIXInstall/VS2013/extension.vsixmanifest trunk/VSIXInstall/VS2015/extension.vsixmanifest Modified: trunk/Setup/Config.wxi =================================================================== --- trunk/Setup/Config.wxi 2015-09-07 07:40:51 UTC (rev 1561) +++ trunk/Setup/Config.wxi 2015-09-07 20:50:14 UTC (rev 1562) @@ -70,9 +70,10 @@ <?define RootSuffixVersion="11.0"?> <?define LinqSupport=1 ?> <?define HelpFileTargetCollection="MS.VSIPCC.v110"?> - <!--<?define VSIXInstall?>--> + <?define VSIXInstall?> <?define VSRegistryPackageOnly?> <?define NewORMFileViaNewFileItems?> + <!-- DoDevenvSetup modified by VSIXInstall, runs /updateconfiguration instead --> <?define DoDevenvSetup?> <?define FixedCSharpPackageGuid="{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}"?> <?define ModelingProjectSupport=1 ?> @@ -81,9 +82,10 @@ <?define RootSuffixVersion="12.0"?> <?define LinqSupport=1 ?> <?define HelpFileTargetCollection="MS.VSIPCC.v120"?> - <!--<?define VSIXInstall?>--> + <?define VSIXInstall?> <?define VSRegistryPackageOnly?> <?define NewORMFileViaNewFileItems?> + <!-- DoDevenvSetup modified by VSIXInstall, runs /updateconfiguration instead --> <?define DoDevenvSetup?> <?define FixedCSharpPackageGuid="{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}"?> <?define ModelingProjectSupport=1 ?> @@ -92,9 +94,10 @@ <?define RootSuffixVersion="14.0"?> <?define LinqSupport=1 ?> <?define HelpFileTargetCollection="MS.VSIPCC.v140"?> - <!--<?define VSIXInstall?>--> + <?define VSIXInstall?> <?define VSRegistryPackageOnly?> <?define NewORMFileViaNewFileItems?> + <!-- DoDevenvSetup modified by VSIXInstall, runs /updateconfiguration instead --> <?define DoDevenvSetup?> <?define FixedCSharpPackageGuid="{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}"?> <?define ModelingProjectSupport=1 ?> Modified: trunk/Setup/Product.wxs =================================================================== --- trunk/Setup/Product.wxs 2015-09-07 07:40:51 UTC (rev 1561) +++ trunk/Setup/Product.wxs 2015-09-07 20:50:14 UTC (rev 1562) @@ -135,7 +135,11 @@ </AdvertiseExecuteSequence> <CustomAction Id="ArpInstallLocationCustomAction" Property="ARPINSTALLLOCATION" Value="[$(var.DefaultShortProductDir)]"/> + <?ifdef VSIXInstall?> + <CustomAction Id="DevEnvSetupCustomAction" Property="VSENVIRONMENTPATH" ExeCommand="$(var.RootSuffixCmd)/updateconfiguration" Return="ignore" Impersonate="no" Execute="commit"/> + <?else?> <CustomAction Id="DevEnvSetupCustomAction" Property="VSENVIRONMENTPATH" ExeCommand="$(var.RootSuffixCmd)/Setup" Return="ignore" Impersonate="no" Execute="commit"/> + <?endif?> <InstallExecuteSequence> <RemoveExistingProducts Before="ArpInstallLocationCustomAction"/> <Custom Before="InstallInitialize" Action="ArpInstallLocationCustomAction"/> Modified: trunk/Setup/Strings.wxl =================================================================== --- trunk/Setup/Strings.wxl 2015-09-07 07:40:51 UTC (rev 1561) +++ trunk/Setup/Strings.wxl 2015-09-07 20:50:14 UTC (rev 1562) @@ -65,6 +65,7 @@ <!-- HACK: DevEnvSetupCustomAction runs as a commit custom action, which makes it hard to show UI for it. --> <!-- Instead, we hijack the ProgressTextRollbackCleanup string, since it is the last string normally shown before the custom action executes. --> <String Id="ProgressTextRollbackCleanup">Running Visual Studio "/Setup" command. This may take several minutes...</String> + <String Id="ProgressTextRollbackCleanupVSIX">Running Visual Studio "/UpdateConfiguration" command.</String> <String Id="ProgressTextExportTempHxDs">MSHelp2: Exporting temporary HxDs</String> <String Id="ProgressTextRollbackHelpTransaction">MSHelp2: Rolling back transaction</String> Modified: trunk/Setup/UI/ErrorProgressText.wxs =================================================================== --- trunk/Setup/UI/ErrorProgressText.wxs 2015-09-07 07:40:51 UTC (rev 1561) +++ trunk/Setup/UI/ErrorProgressText.wxs 2015-09-07 20:50:14 UTC (rev 1562) @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> + <?include ..\Config.wxi?> <Fragment> <UI Id="WixUI_ErrorProgressText"> <!-- action text --> @@ -70,7 +71,11 @@ <ProgressText Action="MsiPublishAssemblies" Template="!(loc.ProgressTextMsiPublishAssembliesTemplate)">!(loc.ProgressTextMsiPublishAssemblies)</ProgressText> <ProgressText Action="MsiUnpublishAssemblies" Template="!(loc.ProgressTextMsiUnpublishAssembliesTemplate)">!(loc.ProgressTextMsiUnpublishAssemblies)</ProgressText> <ProgressText Action="Rollback" Template="!(loc.ProgressTextRollbackTemplate)">!(loc.ProgressTextRollback)</ProgressText> - <ProgressText Action="RollbackCleanup" Template="!(loc.ProgressTextRollbackCleanupTemplate)">!(loc.ProgressTextRollbackCleanup)</ProgressText> + <?ifdef VSIXInstall?> + <ProgressText Action="RollbackCleanup" Template="!(loc.ProgressTextRollbackCleanupTemplate)">!(loc.ProgressTextRollbackCleanupVSIX)</ProgressText> + <?else?> + <ProgressText Action="RollbackCleanup" Template="!(loc.ProgressTextRollbackCleanupTemplate)">!(loc.ProgressTextRollbackCleanup)</ProgressText> + <?endif?> <ProgressText Action="UnmoveFiles" Template="!(loc.ProgressTextUnmoveFilesTemplate)">!(loc.ProgressTextUnmoveFiles)</ProgressText> <ProgressText Action="UnpublishProduct">!(loc.ProgressTextUnpublishProduct)</ProgressText> <!-- error text --> Modified: trunk/VSIXInstall/VS2013/extension.vsixmanifest =================================================================== --- trunk/VSIXInstall/VS2013/extension.vsixmanifest 2015-09-07 07:40:51 UTC (rev 1561) +++ trunk/VSIXInstall/VS2013/extension.vsixmanifest 2015-09-07 20:50:14 UTC (rev 1562) @@ -16,6 +16,7 @@ <Edition>Ultimate</Edition> <Edition>Premium</Edition> <Edition>Pro</Edition> + <Edition>Community</Edition> </VisualStudio> </SupportedProducts> <SupportedFrameworkRuntimeEdition MinVersion="4.5" MaxVersion="4.5" /> Modified: trunk/VSIXInstall/VS2015/extension.vsixmanifest =================================================================== --- trunk/VSIXInstall/VS2015/extension.vsixmanifest 2015-09-07 07:40:51 UTC (rev 1561) +++ trunk/VSIXInstall/VS2015/extension.vsixmanifest 2015-09-07 20:50:14 UTC (rev 1562) @@ -13,9 +13,9 @@ <InstalledByMsi>true</InstalledByMsi> <SupportedProducts> <VisualStudio Version="14.0"> - <Edition>Ultimate</Edition> - <Edition>Premium</Edition> + <Edition>Enterprise</Edition> <Edition>Pro</Edition> + <Edition>Community</Edition> </VisualStudio> </SupportedProducts> <SupportedFrameworkRuntimeEdition MinVersion="4.6" MaxVersion="4.6" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2015-09-07 07:40:54
|
Revision: 1561 http://sourceforge.net/p/orm/code/1561 Author: mcurland Date: 2015-09-07 07:40:51 +0000 (Mon, 07 Sep 2015) Log Message: ----------- VS2015 setup not installing ORMCustomTool or ORMGeneratorSettings for C# project * Also added missing .pdb for DatabaseImport tool Modified Paths: -------------- trunk/Setup/Components.wxs trunk/Setup/Config.wxi trunk/Setup/Product.wxs Modified: trunk/Setup/Components.wxs =================================================================== --- trunk/Setup/Components.wxs 2015-08-30 06:53:06 UTC (rev 1560) +++ trunk/Setup/Components.wxs 2015-09-07 07:40:51 UTC (rev 1561) @@ -159,6 +159,8 @@ <Component Id="NORMADBImportComponent" Guid="0B49C0D1-EB3A-4E6E-$(var.VersionGuidSuffix)" DiskId="1" Win64="$(var.Win64)"> <File Id="ORMSolutions.ORMArchitect.DatabaseImport$(var.VSExt).dll" ShortName="DBImport.dll" Name="ORMSolutions.ORMArchitect.DatabaseImport$(var.VSExt).dll" Source="..\Tools\DatabaseImport\bin\$(var.BuildConfiguration)\ORMSolutions.ORMArchitect.DatabaseImport$(var.VSExt).dll" DefaultVersion="$(var.ProductVersion)" DefaultLanguage="0" KeyPath="yes" Assembly=".net" AssemblyManifest="ORMSolutions.ORMArchitect.DatabaseImport$(var.VSExt).dll" ProcessorArchitecture="msil" AssemblyApplication="ORMSolutions.ORMArchitect.DatabaseImport$(var.VSExt).dll"/> + <File Id="ORMSolutions.ORMArchitect.DatabaseImport$(var.VSExt).pdb" ShortName="DBImport.pdb" Name="ORMSolutions.ORMArchitect.DatabaseImport$(var.VSExt).pdb" Source="..\Tools\DatabaseImport\bin\$(var.BuildConfiguration)\ORMSolutions.ORMArchitect.DatabaseImport$(var.VSExt).pdb" + DefaultLanguage="0" CompanionFile="ORMSolutions.ORMArchitect.DatabaseImport$(var.VSExt).dll"/> </Component> <Component Id="ORMCustomToolVBasicComponent" Guid="0B8DF8D8-7418-47F3-$(var.VersionGuidSuffix)" DiskId="1" Win64="$(var.Win64)"> <CreateFolder/> Modified: trunk/Setup/Config.wxi =================================================================== --- trunk/Setup/Config.wxi 2015-08-30 06:53:06 UTC (rev 1560) +++ trunk/Setup/Config.wxi 2015-09-07 07:40:51 UTC (rev 1561) @@ -74,7 +74,6 @@ <?define VSRegistryPackageOnly?> <?define NewORMFileViaNewFileItems?> <?define DoDevenvSetup?> - <?define CSharpPackageKeyThroughLanguageService?> <?define FixedCSharpPackageGuid="{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}"?> <?define ModelingProjectSupport=1 ?> <?elseif $(var.VSVer) = v12.0?> @@ -86,7 +85,6 @@ <?define VSRegistryPackageOnly?> <?define NewORMFileViaNewFileItems?> <?define DoDevenvSetup?> - <?define CSharpPackageKeyThroughLanguageService?> <?define FixedCSharpPackageGuid="{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}"?> <?define ModelingProjectSupport=1 ?> <?elseif $(var.VSVer) = v14.0?> @@ -98,7 +96,6 @@ <?define VSRegistryPackageOnly?> <?define NewORMFileViaNewFileItems?> <?define DoDevenvSetup?> - <?define CSharpPackageKeyThroughLanguageService?> <?define FixedCSharpPackageGuid="{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}"?> <?define ModelingProjectSupport=1 ?> <?endif?> Modified: trunk/Setup/Product.wxs =================================================================== --- trunk/Setup/Product.wxs 2015-08-30 06:53:06 UTC (rev 1560) +++ trunk/Setup/Product.wxs 2015-09-07 07:40:51 UTC (rev 1561) @@ -86,13 +86,13 @@ <Condition Message="!(loc.PLiXRequired)">(PLIXSCHEMAVERSION >= $(var.PLiXMinimumSchemaVersion)) OR Installed</Condition> <!-- Get the package GUIDs for the various VS packages. --> - <Property Id="VCSHARPPACKAGEGUID"> - <?ifdef CSharpPackageKeyThroughLanguageService?> - <RegistrySearch Id="VCSharpPackageGUIDRegistrySearch" Root="HKLM" Key="$(var.VSRegRoot)\Languages\Language Services\CSharp" Name="Package" Type="raw" Win64="$(var.Win64)"/> - <?else?> + <?ifdef FixedCSharpPackageGuid?> + <Property Id="VCSHARPPACKAGEGUID" Value="$(var.FixedCSharpPackageGuid)"/> + <?else?> + <Property Id="VCSHARPPACKAGEGUID"> <RegistrySearch Id="VCSharpPackageGUIDRegistrySearch" Root="HKLM" Key="$(var.VSRegRoot)\InstalledProducts\Microsoft Visual C#" Name="Package" Type="raw" Win64="$(var.Win64)"/> - <?endif?> - </Property> + </Property> + <?endif?> <Property Id="VBASICPACKAGEGUID"> <RegistrySearch Id="VBasicPackageGUIDRegistrySearch" Root="HKLM" Key="$(var.VSRegRoot)\InstalledProducts\Microsoft Visual Basic" Name="Package" Type="raw" Win64="$(var.Win64)"/> </Property> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2015-01-09 21:01:21
|
Revision: 1559 http://sourceforge.net/p/orm/code/1559 Author: mcurland Date: 2015-01-09 21:01:18 +0000 (Fri, 09 Jan 2015) Log Message: ----------- Fix some verbalization crushes with difficult subquery scenarios by checking for null returns on all uses of GetRolePlayerVariableUse. Most of this is defensive: I don't have scenarios for all of these cases, but triggered one of these cases with a partial binding to an incomplete subquery definition. Modified Paths: -------------- trunk/ORMModel/ObjectModel/Verbalization.cs trunk/Setup/Readme.htm Modified: trunk/ORMModel/ObjectModel/Verbalization.cs =================================================================== --- trunk/ORMModel/ObjectModel/Verbalization.cs 2015-01-08 02:17:32 UTC (rev 1558) +++ trunk/ORMModel/ObjectModel/Verbalization.cs 2015-01-09 21:01:18 UTC (rev 1559) @@ -7984,7 +7984,8 @@ { // Continue with another reading starting with the lead role of the // preceding fact type. - if (localContextLeadVariable == GetRolePlayerVariableUse(new RolePathNode(factTypeEntry, pathContext)).Value.PrimaryRolePlayerVariable) + RolePlayerVariableUse? entryVariableUse; + if (localContextLeadVariable == ((entryVariableUse = GetRolePlayerVariableUse(new RolePathNode(factTypeEntry, pathContext))).HasValue ? entryVariableUse.Value.PrimaryRolePlayerVariable : null)) { // Optimization of next branch to test the entry variable without invoking the delegate reading = factType.GetMatchingReading(readingOrders, null, entryRoleBase, null, null, MatchingReadingOptions.NoFrontText | MatchingReadingOptions.LeadRolesNotHyphenBound); @@ -8810,7 +8811,8 @@ RolePlayerVariable newVariable = useMap[queryRoleKey].PrimaryRolePlayerVariable; RolePlayerVariableUse correlatedUse = useMap[new RolePathNode(factTypeEntry, pathContext)]; object correlationRoot = correlatedUse.CorrelationRoot; - foreach (RolePlayerVariable variable in (correlationRoot != null ? useMap[correlationRoot] : correlatedUse).GetCorrelatedVariables(true)) + RolePlayerVariableUse rootCorrelatedUse; + foreach (RolePlayerVariable variable in (correlationRoot != null ? (useMap.TryGetValue(correlationRoot, out rootCorrelatedUse) ? rootCorrelatedUse : correlatedUse) : correlatedUse).GetCorrelatedVariables(true)) { CustomCorrelateVariables(variable, newVariable); } @@ -11557,10 +11559,12 @@ int usePhase = CurrentQuantificationUsePhase; object pathContext = node.PathContext; RolePlayerVariableUse? resolvedChildVariableUse; - if (testChildIndex >= childPathedRoles.Count || // Indicates a pure existential, we're here because the entry role can possibly be partnered. - ((resolvedChildVariableUse = GetRolePlayerVariableUse(new RolePathNode(childPathedRoles[testChildIndex], pathContext))).HasValue && !resolvedChildVariableUse.Value.PrimaryRolePlayerVariable.HasBeenUsed(usePhase, true))) + RolePlayerVariableUse? entryVariableUse; + if ((testChildIndex >= childPathedRoles.Count || // Indicates a pure existential, we're here because the entry role can possibly be partnered. + ((resolvedChildVariableUse = GetRolePlayerVariableUse(new RolePathNode(childPathedRoles[testChildIndex], pathContext))).HasValue && !resolvedChildVariableUse.Value.PrimaryRolePlayerVariable.HasBeenUsed(usePhase, true))) && + (entryVariableUse = GetRolePlayerVariableUse(new RolePathNode(entryPathedRole, pathContext))).HasValue) { - RolePlayerVariableUse variableUse = GetRolePlayerVariableUse(new RolePathNode(entryPathedRole, pathContext)).Value; + RolePlayerVariableUse variableUse = entryVariableUse.Value; RolePlayerVariable primaryVariable = variableUse.PrimaryRolePlayerVariable; object correlateWithKey = CorrelationRootToContextBoundKey(variableUse.CorrelationRoot, pathContext); if (null == GetUnpairedPartnerVariable( @@ -11625,6 +11629,7 @@ else { object correlationRoot = variableUse.CorrelationRoot; + RolePlayerVariableUse? rootVariableUse; if (correlationRoot == null) { if (variableUse.CorrelatedVariablesHead != null) @@ -11632,9 +11637,9 @@ partnerCorrelatedVariables = variableUse.GetCorrelatedVariables(false); // No reason to test the primary variable } } - else + else if ((rootVariableUse = GetRolePlayerVariableUse(CorrelationRootToContextBoundKey(correlationRoot, pathContext))).HasValue) { - partnerCorrelatedVariables = GetRolePlayerVariableUse(CorrelationRootToContextBoundKey(correlationRoot, pathContext)).Value.GetCorrelatedVariables(true); + partnerCorrelatedVariables = rootVariableUse.Value.GetCorrelatedVariables(true); } if (partnerCorrelatedVariables != null) { @@ -11775,6 +11780,7 @@ return true; } object correlationRoot; + RolePlayerVariableUse? rootVariableUse; if (variableUse.CorrelatedVariablesHead != null) { foreach (RolePlayerVariable testVariable in variableUse.GetCorrelatedVariables(false)) @@ -11785,9 +11791,10 @@ } } } - else if (null != (correlationRoot = variableUse.CorrelationRoot)) + else if (null != (correlationRoot = variableUse.CorrelationRoot) && + (rootVariableUse = GetRolePlayerVariableUse(CorrelationRootToContextBoundKey(correlationRoot, pathContext))).HasValue) { - foreach (RolePlayerVariable testVariable in GetRolePlayerVariableUse(CorrelationRootToContextBoundKey(correlationRoot, pathContext)).Value.GetCorrelatedVariables(true)) + foreach (RolePlayerVariable testVariable in rootVariableUse.Value.GetCorrelatedVariables(true)) { if (testVariable == variable) { @@ -11976,12 +11983,19 @@ return true; } object correlationRootKey = CorrelationRootToContextBoundKey(variableUse.CorrelationRoot, pathContext); - foreach (RolePlayerVariable correlatedVariable in (correlationRootKey != null) ? GetRolePlayerVariableUse(correlationRootKey).Value.GetCorrelatedVariables(true) : variableUse.GetCorrelatedVariables(false)) + RolePlayerVariableUse? rootVariableUse; + IEnumerable<RolePlayerVariable> variableIter; + if (null != (variableIter = (correlationRootKey != null) ? + ((rootVariableUse = GetRolePlayerVariableUse(correlationRootKey)).HasValue ? rootVariableUse.Value.GetCorrelatedVariables(true): null) : + variableUse.GetCorrelatedVariables(false))) { - if (correlatedVariable != primaryVariable && - correlatedVariable.HasBeenUsed(quantificationUsePhase, true)) + foreach (RolePlayerVariable correlatedVariable in variableIter) { - return true; + if (correlatedVariable != primaryVariable && + correlatedVariable.HasBeenUsed(quantificationUsePhase, true)) + { + return true; + } } } Dictionary<RolePlayerVariable, LinkedNode<RolePlayerVariable>> customCorrelations; Modified: trunk/Setup/Readme.htm =================================================================== --- trunk/Setup/Readme.htm 2015-01-08 02:17:32 UTC (rev 1558) +++ trunk/Setup/Readme.htm 2015-01-09 21:01:18 UTC (rev 1559) @@ -72,7 +72,7 @@ <hr/> <h2><span class="toggle" onclick="toggleDisp(this,'jan2015')">-</span>January 2015 CTP Changes</h2> <div id="jan2015"> -<div>The January 2015 CTP release includes all modifications through changeset 1558. Full changeset descriptions can be found at the <a href="http://orm.svn.sourceforge.net/viewvc/orm/trunk/?view=log">sourceforge code repository</a> (be patient with this link, the page contains a full changeset history).</div> +<div>The January 2015 CTP release includes all modifications through changeset 1559. Full changeset descriptions can be found at the <a href="http://orm.svn.sourceforge.net/viewvc/orm/trunk/?view=log">sourceforge code repository</a> (be patient with this link, the page contains a full changeset history).</div> <ul> <li>Feature Changes: <ol> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2015-01-08 02:17:36
|
Revision: 1558 http://sourceforge.net/p/orm/code/1558 Author: mcurland Date: 2015-01-08 02:17:32 +0000 (Thu, 08 Jan 2015) Log Message: ----------- * Make attaching a subset constraint to a subtype line more consistent with other editing actions by allowing a double-click commit on the constrained subtype line. * Updated constraint editing instructions to include directions for subtype lines. * Updated version and readme files pending January 2015 CTP refs #193 Modified Paths: -------------- trunk/ORMModel/ShapeModel/ExternalConstraintConnectAction.cs trunk/ORMModel/ShapeModel/ORMDiagram.resx trunk/Setup/Readme.htm trunk/VersionGenerator.exe.config Modified: trunk/ORMModel/ShapeModel/ExternalConstraintConnectAction.cs =================================================================== --- trunk/ORMModel/ShapeModel/ExternalConstraintConnectAction.cs 2015-01-02 06:08:27 UTC (rev 1557) +++ trunk/ORMModel/ShapeModel/ExternalConstraintConnectAction.cs 2015-01-08 02:17:32 UTC (rev 1558) @@ -95,11 +95,16 @@ if (sourceShapeElement is ExternalConstraintShape) { bool isFactTypeShape; - if ((isFactTypeShape = targetShapeElement is FactTypeShape) || targetShapeElement is SubtypeLink) + SubtypeLink subtypeLink = null; + if ((isFactTypeShape = targetShapeElement is FactTypeShape) || null != (subtypeLink = targetShapeElement as SubtypeLink)) { ExternalConstraintConnectAction action = (sourceShapeElement.Diagram as ORMDiagram).ExternalConstraintConnectAction; retVal = action != null && - ((action.mySubtypeConnection && !action.mySubtypeAnchoredSubset) || isFactTypeShape || action.myAllowSubtypeConnection); + ((action.mySubtypeConnection && !action.mySubtypeAnchoredSubset) || + isFactTypeShape || + action.myAllowSubtypeConnection || + // Allow a double-click commit on the anchor supertype for a subset constraint + (action.mySubtypeAnchoredSubset && subtypeLink != null && subtypeLink.AssociatedSubtypeFact.SupertypeRole == action.SelectedRoleCollection[0])); } else { Modified: trunk/ORMModel/ShapeModel/ORMDiagram.resx =================================================================== --- trunk/ORMModel/ShapeModel/ORMDiagram.resx 2015-01-02 06:08:27 UTC (rev 1557) +++ trunk/ORMModel/ShapeModel/ORMDiagram.resx 2015-01-08 02:17:32 UTC (rev 1558) @@ -333,18 +333,20 @@ </data> <data name="ExternalConstraintConnectAction.SetComparisonConstraint.Instructions"> <value xml:space="preserve">To select role sequences to populate the constraint: --Click a role to add it to the active role sequence --Control-Click a role to remove it from the active role sequence +-Click a role or subtype line to add it to the active role sequence +-Control-Click a role or subtype line to remove it from the active role sequence -Double-Click a role to commit the active role sequence and begin a new role sequence --Click the diagram background or press Escape to finish</value> +-Click the diagram background or press Escape to cancel an uncommitted role sequence + +If a subtype is constrained use single-click to add and double-click to commit.</value> <comment xml:space="preserve">The text shown to explain how to hook up an external constraint to its associated roles.</comment> </data> <data name="ExternalConstraintConnectAction.SetConstraint.Instructions"> <value xml:space="preserve">To select role sequences to populate the constraint: --Click a role to add it to the constraint --Control-Click a role to remove it from the constaint --Double-Click a role to commit --Click the diagram background or press Escape to finish</value> +-Click a role or subtype line to add it to the constraint +-Control-Click a role or subtype line to remove it from the constaint +-Double-Click a role or subtype line to commit +-Click the diagram background or press Escape to cancel</value> <comment xml:space="preserve">The text shown to explain how to hook up an external constraint to its associated roles.</comment> </data> <data name="ExternalConstraintConnectAction.TransactionName"> Modified: trunk/Setup/Readme.htm =================================================================== --- trunk/Setup/Readme.htm 2015-01-02 06:08:27 UTC (rev 1557) +++ trunk/Setup/Readme.htm 2015-01-08 02:17:32 UTC (rev 1558) @@ -3,7 +3,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"/> -<title>NORMA December 2013 CTP Readme</title> +<title>NORMA January 2015 CTP Readme</title> <style type="text/css"> .new {font-size:x-small; background-color:Gold; color:Blue; } .toggle{font-size:larger;cursor:pointer;font-family: monospace; color:rgb(97, 133, 160); display:inline; padding-right:.15em;} @@ -35,9 +35,9 @@ <body> -<p><b><a id="The Top" style="font-family:Verdana;font-size:medium">NORMA December 2013 CTP Readme</a> </b></p> +<p><b><a id="The Top" style="font-family:Verdana;font-size:medium">NORMA January 2015 CTP Readme</a> </b></p> <p>This file supersedes the previous readme.txt and older readme.htm files. This readme has parallel indexing mechanisms: by topic, and by release date (starting with the October 2008 (2008-10) release). The file will be extended for future product releases.<br/><br/> -The December 2013 release adds support for Visual Studio 2013, implements value comparison and cardinality constraints, adds validation checks for duplicate fact type reading signatures, adds new menu items for managing validation errors, and changes relational mapping defaults for entity types identified with an autocounter data type. See detailed change notes below for specifics.<br/><br/> +The January 2015 is primarily a bug fix release. Support has also been added for import from an Oracle database. See detailed change notes below for specifics.<br/><br/> </p> <h2><span class="toggle" onclick="toggleDisp(this,'contents')">-</span>Contents</h2> <div id="contents"> @@ -70,10 +70,43 @@ </div>--> <hr/> -<h2><span class="toggle" onclick="toggleDisp(this,'dec2013')">-</span>December 2013 CTP Changes</h2> -<div id="dec2013"> -<div>The December 2013 CTP release includes all modifications through changeset 1540. Full changeset descriptions can be found at the <a href="http://orm.svn.sourceforge.net/viewvc/orm/trunk/?view=log">sourceforge code repository</a> (be patient with this link, the page contains a full changeset history).</div> +<h2><span class="toggle" onclick="toggleDisp(this,'jan2015')">-</span>January 2015 CTP Changes</h2> +<div id="jan2015"> +<div>The January 2015 CTP release includes all modifications through changeset 1558. Full changeset descriptions can be found at the <a href="http://orm.svn.sourceforge.net/viewvc/orm/trunk/?view=log">sourceforge code repository</a> (be patient with this link, the page contains a full changeset history).</div> <ul> +<li>Feature Changes: +<ol> +<li>Added database import support for Oracle using the ODAC drivers (thanks to Jose Carlus).</li> +<li>Data type verbalization now shows the scale/length/precision of a data type if these values are set.</li> +<li>Allow the sample population editor to display recursive identifiers. Note that this will still crash other parts of the system (like relational generation), but can at least be viewed conceptually. The use of a surrogate identifier is recommended in this case.</li> +</ol> +</li> +<li>Bug Fixes: +<ol> +<li>Sample population mandatory errors display incorrectly for compatible but not equal role players. Errors should be displayed against the nearest supertype, not the subtype.</li> +<li>Sample population uniqueness errors do not need to display on the object type shape. Display on the fact type shape is sufficient.</li> +<li>Double clicking a role with an active error activates that error and the first error listed for the fact type, which might differ. The result is highly unpredictable.</li> +<li>F2 does not activate the object name name field of a fact type shape displayed as an object type.</li> +<li>Drawing code for displayed one-to-one link fact types continually asserts.</li> +<li>Pressing delete while renaming in a diagram tab deletes the current selection on the diagram.</li> +<li>The diagram reorder dialog (part of the Diagram Management extension) should initially select the current diagram.</li> +<li>Dragging fact type shapes off the model browser creates multiple identical role name and value constraint name shapes.</li> +<li>Modality needs to be considered when validating the intersection of single column subset constraints and simple mandatory constraints (fix targeted to subset constraints).</li> +<li>Cross-model drag of a fact type with multiple readings on a single order fails to cleanly undo. Drag/Undo/Repeat drag fails the second drag.</li> +<li>Cross-model drag crashes for unary objectifications with matching object type names but non-matching fact type signatures.</li> +<li>Redo diagram deletion where the diagram contains multiple shapes for a single item crashes hard.</li> +<li>Double-click of a subtype line connected to a subset constraint cancels the constraint edit. Double click should common on the constrained subtype.</li> +</ol> +</li> +</ul> +<hr/> +</div> +<h2><span class="toggle" onclick="toggleDisp(this,'oldChanges')">+</span>Previous Releases</h2> +<div style="display:none;" id="oldChanges"> +<h3><span class="toggle" onclick="toggleDisp(this,'dec2013')">+</span>December 2013 CTP Changes</h3> +<div style="display:none;" id="dec2013"> +<div>The December 2013 CTP release includes all modifications through changeset 1540.</div> +<ul> <li><a href="#ReadingSignatures 2013-12">Duplicate Reading Signature Validation</a> </li> <li><a href="#ValueComparisonConstraint 2013-12">Value Comparison Constraints</a> </li> <li><a href="#CardinalityConstraint 2013-12">Cardinality Constraints</a> </li> @@ -111,8 +144,6 @@ </ul> <hr/> </div> -<h2><span class="toggle" onclick="toggleDisp(this,'oldChanges')">+</span>Previous Releases</h2> -<div style="display:none;" id="oldChanges"> <h3><span class="toggle" onclick="toggleDisp(this,'may2013')">+</span>May 2013 CTP Changes</h3> <div style="display:none;" id="may2013"> <div>The May 2013 CTP release includes all modifications through changeset 1518.</div> Modified: trunk/VersionGenerator.exe.config =================================================================== --- trunk/VersionGenerator.exe.config 2015-01-02 06:08:27 UTC (rev 1557) +++ trunk/VersionGenerator.exe.config 2015-01-08 02:17:32 UTC (rev 1558) @@ -2,7 +2,7 @@ <configuration> <appSettings> <add key="RevisionStartYearMonth" value="2006-01"/> - <add key="ReleaseYearMonth" value="2013-12"/> + <add key="ReleaseYearMonth" value="2015-01"/> <add key="CountQuartersFromYearMonth" value="2011-01"/> <!-- ReleaseType: "CTP" or "RTM" --> <add key="ReleaseType" value="CTP"/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2015-01-02 06:08:29
|
Revision: 1557 http://sourceforge.net/p/orm/code/1557 Author: mcurland Date: 2015-01-02 06:08:27 +0000 (Fri, 02 Jan 2015) Log Message: ----------- Changes in [1556] incorrectly removed required variable quantification for uncorrelated path roots introduced in the middle of a derivation rule. Modified Paths: -------------- trunk/ORMModel/ObjectModel/Verbalization.cs Modified: trunk/ORMModel/ObjectModel/Verbalization.cs =================================================================== --- trunk/ORMModel/ObjectModel/Verbalization.cs 2014-12-31 03:54:52 UTC (rev 1556) +++ trunk/ORMModel/ObjectModel/Verbalization.cs 2015-01-02 06:08:27 UTC (rev 1557) @@ -9692,7 +9692,7 @@ /// with. The list of correlated variables is stored with the normalized root correlation /// variable. This may be the same instance as <paramref name="usedFor"/> and should not /// be pre-normalized before this call.</param> - /// <param name="variableAlreadyScoped">The returned variable was in used and scoped before this call.</param> + /// <param name="variableAlreadyScoped">The returned variable was in use and scoped before this call.</param> /// <returns>New or existing variable</returns> private RolePlayerVariable RegisterRolePlayerUse(ObjectType rolePlayer, RolePlayerVariable joinToVariable, object usedFor, RolePathNode correlateWithNode, out bool variableAlreadyScoped) { @@ -9702,6 +9702,7 @@ RolePlayerVariableUse correlationRootVariableUse = default(RolePlayerVariableUse); object correlateWith = null; variableAlreadyScoped = false; + bool lockVariableAlreadyScoped = false; if (!correlateWithNode.IsEmpty && null != (correlateWith = EnsureRolePathCache().GetCorrelationRoot(correlateWithNode))) { @@ -9809,7 +9810,8 @@ // Note that if joinToVariable is set here, then it comes from an external // correlation. Otherwise, the join would have the same correlation root // as the current pathed role. - RegisterRolePlayerUse(correlationRootRolePlayer, joinToVariable, correlateWithKey, RolePathNode.Empty); + RegisterRolePlayerUse(correlationRootRolePlayer, joinToVariable, correlateWithKey, RolePathNode.Empty, out variableAlreadyScoped); + lockVariableAlreadyScoped = true; correlationRootVariableUse = useMap[correlateWithKey]; if (correlationRootRolePlayer == rolePlayer) { @@ -9891,7 +9893,7 @@ } // Track use phase during registration to see if the root variable is // referenced by the path. - if (!UseVariable(existingVariable, myLatestUsePhase, false)) + if (!UseVariable(existingVariable, myLatestUsePhase, false) && !lockVariableAlreadyScoped) { variableAlreadyScoped = true; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2014-12-31 03:54:55
|
Revision: 1556 http://sourceforge.net/p/orm/code/1556 Author: mcurland Date: 2014-12-31 03:54:52 +0000 (Wed, 31 Dec 2014) Log Message: ----------- * Enhance verbalization support for subqueries by removing redundant 'exists' clauses whenever possible. Extra 'exists' would appear as part of the verbalized subquery expansion if a subquery result role or parameter was used in a function or value constraint but not in a fact type within the subquery. * Block the context window from attempting to render subqueries. These would render poorly in most case, but actually crashed in the case of a subquery with a single result role. Modified Paths: -------------- trunk/ORMModel/ObjectModel/Constraint.cs trunk/ORMModel/ObjectModel/FactType.cs trunk/ORMModel/ObjectModel/HierarchyContext.cs trunk/ORMModel/ObjectModel/ObjectType.cs trunk/ORMModel/ObjectModel/Role.cs trunk/ORMModel/ObjectModel/RolePath.cs trunk/ORMModel/ObjectModel/Verbalization.cs trunk/ORMModel/Shell/ORMContextWindow.cs Modified: trunk/ORMModel/ObjectModel/Constraint.cs =================================================================== --- trunk/ORMModel/ObjectModel/Constraint.cs 2014-12-20 18:36:14 UTC (rev 1555) +++ trunk/ORMModel/ObjectModel/Constraint.cs 2014-12-31 03:54:52 UTC (rev 1556) @@ -1772,6 +1772,23 @@ return ContinueWalkingHierarchyContext; } } + bool IHierarchyContextEnabled.HierarchyDisabled + { + get + { + return HierarchyDisabled; + } + } + /// <summary> + /// Implements <see cref="IHierarchyContextEnabled.HierarchyDisabled"/> + /// </summary> + protected static bool HierarchyDisabled + { + get + { + return false; + } + } #endregion } #endregion // SetConstraint class @@ -3386,6 +3403,23 @@ return ContinueWalkingHierarchyContext; } } + bool IHierarchyContextEnabled.HierarchyDisabled + { + get + { + return HierarchyDisabled; + } + } + /// <summary> + /// Implements <see cref="IHierarchyContextEnabled.HierarchyDisabled"/> + /// </summary> + protected static bool HierarchyDisabled + { + get + { + return false; + } + } #endregion } #endregion // SetComparisonConstraint class Modified: trunk/ORMModel/ObjectModel/FactType.cs =================================================================== --- trunk/ORMModel/ObjectModel/FactType.cs 2014-12-20 18:36:14 UTC (rev 1555) +++ trunk/ORMModel/ObjectModel/FactType.cs 2014-12-31 03:54:52 UTC (rev 1556) @@ -3749,6 +3749,23 @@ return ResolvedModel; } } + bool IHierarchyContextEnabled.HierarchyDisabled + { + get + { + return HierarchyDisabled; + } + } + /// <summary> + /// Implements <see cref="IHierarchyContextEnabled.HierarchyDisabled"/> + /// </summary> + protected static bool HierarchyDisabled + { + get + { + return false; + } + } #endregion // IHierarchyContextEnabled Implementation #region UnaryFactTypeFixupListener /// <summary> Modified: trunk/ORMModel/ObjectModel/HierarchyContext.cs =================================================================== --- trunk/ORMModel/ObjectModel/HierarchyContext.cs 2014-12-20 18:36:14 UTC (rev 1555) +++ trunk/ORMModel/ObjectModel/HierarchyContext.cs 2014-12-31 03:54:52 UTC (rev 1556) @@ -100,6 +100,10 @@ /// </summary> /// <value>The place priority.</value> HierarchyContextPlacementPriority HierarchyContextPlacementPriority { get;} + /// <summary> + /// Return <see langword="true"/> if hierarchy navigation to this element is disabled. + /// </summary> + bool HierarchyDisabled { get;} } /// <summary> /// Implement this interface on an <see cref="ElementLink"/> connected to elements that Modified: trunk/ORMModel/ObjectModel/ObjectType.cs =================================================================== --- trunk/ORMModel/ObjectModel/ObjectType.cs 2014-12-20 18:36:14 UTC (rev 1555) +++ trunk/ORMModel/ObjectModel/ObjectType.cs 2014-12-31 03:54:52 UTC (rev 1556) @@ -5099,6 +5099,23 @@ return ResolvedModel; } } + bool IHierarchyContextEnabled.HierarchyDisabled + { + get + { + return HierarchyDisabled; + } + } + /// <summary> + /// Implements <see cref="IHierarchyContextEnabled.HierarchyDisabled"/> + /// </summary> + protected static bool HierarchyDisabled + { + get + { + return false; + } + } #endregion // IHierarchyContextEnabled Implementation #region IVerbalizeCustomChildren Implementation /// <summary> Modified: trunk/ORMModel/ObjectModel/Role.cs =================================================================== --- trunk/ORMModel/ObjectModel/Role.cs 2014-12-20 18:36:14 UTC (rev 1555) +++ trunk/ORMModel/ObjectModel/Role.cs 2014-12-31 03:54:52 UTC (rev 1556) @@ -1731,6 +1731,23 @@ { get { return ContinueWalkingHierarchyContext; } } + bool IHierarchyContextEnabled.HierarchyDisabled + { + get + { + return HierarchyDisabled; + } + } + /// <summary> + /// Implements <see cref="IHierarchyContextEnabled.HierarchyDisabled"/> + /// </summary> + protected bool HierarchyDisabled + { + get + { + return FactType is QueryBase; + } + } #endregion } partial class RoleBase : IModelErrorDisplayContext Modified: trunk/ORMModel/ObjectModel/RolePath.cs =================================================================== --- trunk/ORMModel/ObjectModel/RolePath.cs 2014-12-20 18:36:14 UTC (rev 1555) +++ trunk/ORMModel/ObjectModel/RolePath.cs 2014-12-31 03:54:52 UTC (rev 1556) @@ -5501,7 +5501,7 @@ } #endregion // FactTypeDerivationRule class #region QueryBase class - partial class QueryBase + partial class QueryBase : IHierarchyContextEnabled { /// <summary> /// Each query type has a different path to the <see cref="ORMModel"/> @@ -5552,6 +5552,25 @@ } } #endregion // Rule Methods + #region IHierarchyContextEnabled Implementation + bool IHierarchyContextEnabled.HierarchyDisabled + { + get + { + return HierarchyDisabled; + } + } + /// <summary> + /// Implements <see cref="IHierarchyContextEnabled.HierarchyDisabled"/> + /// </summary> + protected static new bool HierarchyDisabled + { + get + { + return true; + } + } + #endregion // IHierarchyContextEnabled Implementation } #endregion // QueryBase class #region Subquery class Modified: trunk/ORMModel/ObjectModel/Verbalization.cs =================================================================== --- trunk/ORMModel/ObjectModel/Verbalization.cs 2014-12-20 18:36:14 UTC (rev 1555) +++ trunk/ORMModel/ObjectModel/Verbalization.cs 2014-12-31 03:54:52 UTC (rev 1556) @@ -5805,14 +5805,26 @@ /// <param name="pathContext">The path context for this node.</param> /// <param name="parentNode">The parent <see cref="VerbalizationPlanNode"/> for the new node.</param> /// <param name="rootNode">A reference to the root node of the chain.</param> + /// <param name="pendingRequiredVariableKeys">Current required variable keys. Scope before value constraint.</param> /// <returns>New <see cref="VerbalizationPlanNode"/></returns> - public static VerbalizationPlanNode AddValueConstraintNode(ValueConstraint valueConstraint, object pathContext, VerbalizationPlanNode parentNode, ref VerbalizationPlanNode rootNode) + public static VerbalizationPlanNode AddValueConstraintNode(ValueConstraint valueConstraint, object pathContext, VerbalizationPlanNode parentNode, ref VerbalizationPlanNode rootNode, ref LinkedNode<object> pendingRequiredVariableKeys) { if (parentNode == null) { parentNode = AddBranchNode(VerbalizationPlanBranchType.Chain, VerbalizationPlanBranchRenderingStyle.OperatorSeparated, pathContext, null, ref rootNode); + if (pendingRequiredVariableKeys != null) + { + parentNode.RequireContextVariables(pendingRequiredVariableKeys); + pendingRequiredVariableKeys = null; + } } - return new ValueConstraintNode(pathContext, parentNode, valueConstraint); + ValueConstraintNode newNode = new ValueConstraintNode(pathContext, parentNode, valueConstraint); + if (pendingRequiredVariableKeys != null) + { + newNode.RequireContextVariables(pendingRequiredVariableKeys); + pendingRequiredVariableKeys = null; + } + return newNode; } /// <summary> /// Create and attach a new calculated condition node. @@ -5823,14 +5835,26 @@ /// <param name="pathContext">The path context for this node.</param> /// <param name="parentNode">The parent <see cref="VerbalizationPlanNode"/> for the new node.</param> /// <param name="rootNode">A reference to the root node of the chain.</param> + /// <param name="pendingRequiredVariableKeys">Pending required variable keys.</param> /// <returns>New <see cref="VerbalizationPlanNode"/></returns> - public static VerbalizationPlanNode AddCalculatedConditionNode(CalculatedPathValue calculatedCondition, bool restrictsSingleFactType, object pathContext, VerbalizationPlanNode parentNode, ref VerbalizationPlanNode rootNode) + public static VerbalizationPlanNode AddCalculatedConditionNode(CalculatedPathValue calculatedCondition, bool restrictsSingleFactType, object pathContext, VerbalizationPlanNode parentNode, ref VerbalizationPlanNode rootNode, ref LinkedNode<object> pendingRequiredVariableKeys) { if (parentNode == null) { parentNode = AddBranchNode(VerbalizationPlanBranchType.Chain, VerbalizationPlanBranchRenderingStyle.OperatorSeparated, pathContext, null, ref rootNode); + if (pendingRequiredVariableKeys != null) + { + parentNode.RequireContextVariables(pendingRequiredVariableKeys); + pendingRequiredVariableKeys = null; + } } - return new CalculatedConditionNode(pathContext, parentNode, calculatedCondition, restrictsSingleFactType); + CalculatedConditionNode newNode = new CalculatedConditionNode(pathContext, parentNode, calculatedCondition, restrictsSingleFactType); + if (pendingRequiredVariableKeys != null) + { + newNode.RequireContextVariables(pendingRequiredVariableKeys); + pendingRequiredVariableKeys = null; + } + return newNode; } /// <summary> /// Create and attach a new projection calculation node. @@ -5891,14 +5915,26 @@ /// <param name="pathContext">The path context for this node.</param> /// <param name="parentNode">The parent <see cref="VerbalizationPlanNode"/> for the new node.</param> /// <param name="rootNode">A reference to the root node of the chain.</param> + /// <param name="pendingRequiredVariableKeys">Current required variable keys. Scope before variable equivalence.</param> /// <returns>New <see cref="VerbalizationPlanNode"/></returns> - public static VerbalizationPlanNode AddVariableEquivalenceNode(IList<object> equivalentVariableKeys, object pathContext, VerbalizationPlanNode parentNode, ref VerbalizationPlanNode rootNode) + public static VerbalizationPlanNode AddVariableEquivalenceNode(IList<object> equivalentVariableKeys, object pathContext, VerbalizationPlanNode parentNode, ref VerbalizationPlanNode rootNode, ref LinkedNode<object> pendingRequiredVariableKeys) { if (parentNode == null) { parentNode = AddBranchNode(VerbalizationPlanBranchType.Chain, VerbalizationPlanBranchRenderingStyle.OperatorSeparated, pathContext, null, ref rootNode); + if (pendingRequiredVariableKeys != null) + { + parentNode.RequireContextVariables(pendingRequiredVariableKeys); + pendingRequiredVariableKeys = null; + } } - return new VariableEquivalenceNode(pathContext, parentNode, equivalentVariableKeys); + VariableEquivalenceNode newNode = new VariableEquivalenceNode(pathContext, parentNode, equivalentVariableKeys); + if (pendingRequiredVariableKeys != null) + { + parentNode.RequireContextVariables(pendingRequiredVariableKeys); + pendingRequiredVariableKeys = null; + } + return newNode; } /// <summary> /// Create and attach a new chained root variable node. @@ -6530,9 +6566,10 @@ } } } - private sealed class ValueConstraintNode : VerbalizationPlanNode + private sealed class ValueConstraintNode : RequireContextVariableNode { private readonly ValueConstraint myValueConstraint; + private bool myRenderedRequiredContextVariable; public ValueConstraintNode(object pathContext, VerbalizationPlanNode parentNode, ValueConstraint valueConstraint) : base(pathContext, parentNode) { @@ -6559,16 +6596,29 @@ return myValueConstraint; } } + public override bool RenderedRequiredContextVariable + { + get + { + return myRenderedRequiredContextVariable; + } + set + { + myRenderedRequiredContextVariable = value; + } + } } - private sealed class CalculatedConditionNode : VerbalizationPlanNode + private sealed class CalculatedConditionNode : RequireContextVariableNode { private readonly CalculatedPathValue myCondition; - private readonly bool myRestrictsSingleFactType; + private const int RestrictsSingleFactTypeBit = 0x1; + private const int RenderedRequiredContextVariablesBit = 0x2; + private int myFlags; public CalculatedConditionNode(object pathContext, VerbalizationPlanNode parentNode, CalculatedPathValue condition, bool restrictsSingleFactType) : base(pathContext, parentNode) { myCondition = condition; - myRestrictsSingleFactType = restrictsSingleFactType; + myFlags = restrictsSingleFactType ? RestrictsSingleFactTypeBit : 0; } public override VerbalizationPlanNodeType NodeType { @@ -6587,9 +6637,27 @@ { // A calculated condition node that restricts a single fact type // is verbalized immediately after the fact type instance. - return myRestrictsSingleFactType; + return 0 != (myFlags & RestrictsSingleFactTypeBit); } } + public override bool RenderedRequiredContextVariable + { + get + { + return 0 != (myFlags & RenderedRequiredContextVariablesBit); + } + set + { + if (value) + { + myFlags |= RenderedRequiredContextVariablesBit; + } + else + { + myFlags &= ~RenderedRequiredContextVariablesBit; + } + } + } } private sealed class ProjectedCalculationNode : VerbalizationPlanNode { @@ -6782,9 +6850,10 @@ } } } - private sealed class VariableEquivalenceNode : VerbalizationPlanNode + private sealed class VariableEquivalenceNode : RequireContextVariableNode { private readonly IList<object> myEquivalentVariableKeys; + private bool myRenderedRequiredContextVariable; public VariableEquivalenceNode(object pathContext, VerbalizationPlanNode parentNode, IList<object> equivalentVariableKeys) : base(pathContext, parentNode) { @@ -6804,6 +6873,17 @@ return myEquivalentVariableKeys; } } + public override bool RenderedRequiredContextVariable + { + get + { + return myRenderedRequiredContextVariable; + } + set + { + myRenderedRequiredContextVariable = value; + } + } } #endregion // Node type specific types } @@ -7099,17 +7179,21 @@ { equivalentVariableKeysByPath.TryGetValue(filteredPath, out equivalentVariables); } - if (equivalentVariables != null) + bool pushedForEquivalentVariables; + if (pushedForEquivalentVariables = (equivalentVariables != null)) { PushSplit(outerContext, VerbalizationPlanBranchType.AndSplit, ref pendingRequiredVariableKeys); } - InitializeRolePath(pathContext, pathOwner, filteredPath, keyDecorator, ref pendingRequiredVariableKeys); - if (equivalentVariables != null) + InitializeRolePath(pathContext, pathOwner, filteredPath, keyDecorator, ref pendingRequiredVariableKeys, ref equivalentVariables); + if (pushedForEquivalentVariables) { - int equivalentVariableSetCount = equivalentVariables.Count; - for (int j = 0; j < equivalentVariableSetCount; ++j) + if (equivalentVariables != null) { - VerbalizationPlanNode.AddVariableEquivalenceNode(equivalentVariables[j], outerContext, myCurrentBranchNode, ref myRootPlanNode); + int equivalentVariableSetCount = equivalentVariables.Count; + for (int j = 0; j < equivalentVariableSetCount; ++j) + { + VerbalizationPlanNode.AddVariableEquivalenceNode(equivalentVariables[j], outerContext, myCurrentBranchNode, ref myRootPlanNode, ref pendingRequiredVariableKeys); + } } PopSplit(VerbalizationPlanBranchType.AndSplit); } @@ -7121,7 +7205,7 @@ } } } - private void InitializeRolePath(object initialPathContext, RolePathOwner pathOwner, LeadRolePath leadRolePath, VariableKeyDecorator keyDecorator, ref LinkedNode<object> requiredVariableKeys) + private void InitializeRolePath(object initialPathContext, RolePathOwner pathOwner, LeadRolePath leadRolePath, VariableKeyDecorator keyDecorator, ref LinkedNode<object> requiredVariableKeys, ref IList<IList<object>> equivalentVariableSets) { LinkedElementCollection<CalculatedPathValue> pathConditions = leadRolePath.CalculatedConditionCollection; int pathConditionCount = pathConditions.Count; @@ -7152,6 +7236,7 @@ PathedRole pendingForSameFactType = null; InlineSubqueryRole pendingForSameFactTypeQueryRoleKey = null; LinkedNode<object> pendingRequiredVariableKeys = requiredVariableKeys; + IList<IList<object>> pendingEquivalentVariableSets = equivalentVariableSets; // A list (acting like a stack) to get the full history of the parent pathed roles. List<ReadOnlyCollection<PathedRole>> contextPathedRoles = null; List<RolePathObjectTypeRoot> contextPathRoots = null; @@ -7293,7 +7378,7 @@ PathConditionRoleValueConstraint valueConstraint = processPathedRole.ValueConstraint; if (valueConstraint != null) { - VerbalizationPlanNode.AddValueConstraintNode(valueConstraint, pathContext, contextChainNode, ref myRootPlanNode); + VerbalizationPlanNode.AddValueConstraintNode(valueConstraint, pathContext, contextChainNode, ref myRootPlanNode, ref pendingRequiredVariableKeys); } } @@ -7373,7 +7458,7 @@ // Although this is a single fact type, it occurs as part of a split // after the fact type has been defined, so the fact type is not immediately // before this one and we can't set the restrictsSingleFactType parameter to true. - VerbalizationPlanNode.AddCalculatedConditionNode(calculation, false, pathContext, contextChainNode, ref myRootPlanNode); + VerbalizationPlanNode.AddCalculatedConditionNode(calculation, false, pathContext, contextChainNode, ref myRootPlanNode, ref pendingRequiredVariableKeys); } } } @@ -7459,6 +7544,25 @@ if (unwinding) { contextPathRoots.RemoveAt(contextPathRoots.Count - 1); + if (pendingRequiredVariableKeys != null) + { + LinkedNode<object> variableKeyIterator = pendingRequiredVariableKeys; + RolePathCache cache = EnsureRolePathCache(); + while (variableKeyIterator != null) + { + RolePlayerVariableUse pendingUse; + if (useMap.TryGetValue(variableKeyIterator.Value, out pendingUse)) + { + ScopeVariable(pendingUse.PrimaryRolePlayerVariable, true); + } + variableKeyIterator = variableKeyIterator.Next; + } + ChainNewlyCalculatableConditions(pathConditions, ref processedPathConditions, ref pendingRequiredVariableKeys); + } + if (pendingEquivalentVariableSets != null) + { + ChainNewlySatisfiedVariableEquivalentNodes(ref pendingEquivalentVariableSets, ref pendingRequiredVariableKeys); + } while (pendingRequiredVariableKeys != null) { myCurrentBranchNode = VerbalizationPlanNode.AddVariableExistenceNode(pendingRequiredVariableKeys.Value, pathContext, myCurrentBranchNode, ref myRootPlanNode).ParentNode; @@ -7498,10 +7602,11 @@ pendingForSameFactType = null; pendingPathedRoles = null; } + bool variableAlreadyScoped = false; if (currentPath != leadRolePath) // Handled earlier, see notes above { pathNode = new RolePathNode(currentPathRoot, pathContext); - RegisterRolePlayerUse(currentPathRoot.RootObjectType, null, pathNode, pathNode); + RegisterRolePlayerUse(currentPathRoot.RootObjectType, null, pathNode, pathNode, out variableAlreadyScoped); } if (currentPathRoot.IsNegated) @@ -7521,9 +7626,9 @@ ValueConstraint valueConstraint; if (null != (valueConstraint = currentPathRoot.ValueConstraint)) { - myCurrentBranchNode = VerbalizationPlanNode.AddValueConstraintNode(valueConstraint, pathContext, myCurrentBranchNode, ref myRootPlanNode).ParentNode; + myCurrentBranchNode = VerbalizationPlanNode.AddValueConstraintNode(valueConstraint, pathContext, myCurrentBranchNode, ref myRootPlanNode, ref pendingRequiredVariableKeys).ParentNode; } - else + else if (!variableAlreadyScoped) { if (pendingRequiredVariableKeys == null) { @@ -7556,6 +7661,15 @@ } }); + equivalentVariableSets = pendingEquivalentVariableSets; + if (null != equivalentVariableSets) + { + // Equivalent variables are treat the same as additional path conditions. These are used if one variable + // is projected on multiple roles, which is handled by keeping the variables separate and then equating them. + // This produces the same result as an 'equals' function, but does not have a corresponding 'equals' in the tree. + ChainNewlySatisfiedVariableEquivalentNodes(ref equivalentVariableSets, ref pendingRequiredVariableKeys); + } + // Chain unprocessed condition nodes at the end if (pathConditionCount != 0) { @@ -7574,7 +7688,7 @@ contextChainNode = VerbalizationPlanNode.AddBranchNode(VerbalizationPlanBranchType.Chain, VerbalizationPlanBranchRenderingStyle.OperatorSeparated, initialPathContext, contextChainNode, ref myRootPlanNode); } } - VerbalizationPlanNode.AddCalculatedConditionNode(pathConditions[i], false, initialPathContext, contextChainNode, ref myRootPlanNode); + VerbalizationPlanNode.AddCalculatedConditionNode(pathConditions[i], false, initialPathContext, contextChainNode, ref myRootPlanNode, ref pendingRequiredVariableKeys); } } } @@ -8489,7 +8603,7 @@ addedFactTypeEntry = true; contextChainNode = EnsureChainNodeForFactTypeConditions(pathContext, factType, factTypeEntry, ref pendingRequiredVariableKeys); } - VerbalizationPlanNode.AddValueConstraintNode(valueConstraint, pathContext, contextChainNode, ref myRootPlanNode); + VerbalizationPlanNode.AddValueConstraintNode(valueConstraint, pathContext, contextChainNode, ref myRootPlanNode, ref pendingRequiredVariableKeys); } } @@ -8535,7 +8649,7 @@ contextChainNode = EnsureChainNodeForFactTypeConditions(pathContext, factType, factTypeEntry, ref pendingRequiredVariableKeys); } processedConditions[i] = true; - VerbalizationPlanNode.AddCalculatedConditionNode(calculation, true, pathContext, contextChainNode, ref myRootPlanNode); + VerbalizationPlanNode.AddCalculatedConditionNode(calculation, true, pathContext, contextChainNode, ref myRootPlanNode, ref pendingRequiredVariableKeys); } } } @@ -8787,7 +8901,7 @@ PushSplit(pathContext, VerbalizationPlanBranchType.AndSplit, ref pendingRequiredVariableKeys); contextConditionNode = myCurrentBranchNode; } - VerbalizationPlanNode.AddValueConstraintNode(valueConstraint, pathContext, contextConditionNode, ref myRootPlanNode); + VerbalizationPlanNode.AddValueConstraintNode(valueConstraint, pathContext, contextConditionNode, ref myRootPlanNode, ref pendingRequiredVariableKeys); } } @@ -8835,7 +8949,7 @@ contextConditionNode = myCurrentBranchNode; } processedConditions[i] = true; - VerbalizationPlanNode.AddCalculatedConditionNode(calculation, false, pathContext, contextConditionNode, ref myRootPlanNode); + VerbalizationPlanNode.AddCalculatedConditionNode(calculation, false, pathContext, contextConditionNode, ref myRootPlanNode, ref pendingRequiredVariableKeys); } } } @@ -9214,6 +9328,20 @@ /// Used to track which conditions have been processed.</param> private void ChainNewlyCalculatableConditions(LinkedElementCollection<CalculatedPathValue> pathConditions, ref BitTracker processedConditions) { + LinkedNode<object> pendingRequiredVariableKeys = null; + ChainNewlyCalculatableConditions(pathConditions, ref processedConditions, ref pendingRequiredVariableKeys); + } + /// <summary> + /// Add conditions that can now be calculated for newly scoped variables. + /// </summary> + /// <param name="pathConditions">Conditions for the path currently being processed. If there + /// are newly scoped variables and all variables required for a condition are satisfied, then + /// chain the calculations onto the current node.</param> + /// <param name="processedConditions">A <see cref="BitTracker"/> with one bit for each of the <paramref name="pathConditions"/>. + /// <param name="pendingRequiredVariableKeys">Pending variables to add with the first chained condition.</param> + /// Used to track which conditions have been processed.</param> + private void ChainNewlyCalculatableConditions(LinkedElementCollection<CalculatedPathValue> pathConditions, ref BitTracker processedConditions, ref LinkedNode<object> pendingRequiredVariableKeys) + { // If we introduced any scoped variables that are used in a function that is not // already used as a path condition and the parent node does not consider variables // scoped here to also be scoped outside this context, then we need to either state @@ -9239,6 +9367,7 @@ if (conditionCount != 0) { RolePathCache rolePathCache = default(RolePathCache); + int currentUsePhase = 0; Dictionary<object, RolePlayerVariableUse> useMap = null; for (int i = 0; i < conditionCount; ++i) { @@ -9254,18 +9383,22 @@ { useMap = myUseToVariableMap; rolePathCache = EnsureRolePathCache(); + currentUsePhase = CurrentQuantificationUsePhase; } RolePlayerVariableUse variableUse; - if (useMap.TryGetValue(rolePathCache.GetCorrelationRoot(testPathNode), out variableUse) && - !variableUse.PrimaryRolePlayerVariable.IsDescopedDuringPathCreation) + if (useMap.TryGetValue(CorrelationRootToContextBoundKey(rolePathCache.GetCorrelationRoot(testPathNode), pathContext), out variableUse)) { - return true; + RolePlayerVariable usedVariable = variableUse.PrimaryRolePlayerVariable; + if (usedVariable.HasBeenUsed(currentUsePhase, false) && !usedVariable.IsDescopedDuringPathCreation) + { + return true; + } } return false; }).GetValueOrDefault(false)) { processedConditions[i] = true; - VerbalizationPlanNode.AddCalculatedConditionNode(calculation, false, pathContext, chainNode, ref myRootPlanNode); + VerbalizationPlanNode.AddCalculatedConditionNode(calculation, false, pathContext, chainNode, ref myRootPlanNode, ref pendingRequiredVariableKeys); } } } @@ -9273,6 +9406,77 @@ } } /// <summary> + /// Add equivalence nodes that can now be calculated for newly scoped variables. + /// </summary> + /// <param name="equivalentVariableSets">Equivalent variable sets, represented by lists of variable keys. + /// <param name="pendingRequiredVariableKeys">Pending required variable keys.</param> + /// This will be cleared if it is emptied.</param> + private void ChainNewlySatisfiedVariableEquivalentNodes(ref IList<IList<object>> equivalentVariableSets, ref LinkedNode<object> pendingRequiredVariableKeys) + { + VerbalizationPlanNode chainNode = myCurrentBranchNode; + if (chainNode == null) + { + return; + } + switch (chainNode.BranchType) + { + case VerbalizationPlanBranchType.Chain: + case VerbalizationPlanBranchType.NegatedChain: + case VerbalizationPlanBranchType.AndSplit: + break; + default: + return; + } + object pathContext = chainNode.PathContext; + int setCount = equivalentVariableSets.Count; + // We might need to remove from the list, but we don't want to run + // it backwards, so track what we have removed. + BitTracker removedTracker = new BitTracker(setCount); + int removedCount = 0; + for (int i = 0; i < setCount; ++i) + { + IList<object> keys = equivalentVariableSets[i]; + int currentUsePhase = CurrentQuantificationUsePhase; + Dictionary<object, RolePlayerVariableUse> useMap = myUseToVariableMap; + RolePlayerVariableUse variableUse; + int j = 0; + int keyCount = keys.Count; + for (; j < keyCount; ++j) + { + RolePlayerVariable usedVariable; + if (!useMap.TryGetValue(keys[j], out variableUse) || + !(usedVariable = variableUse.PrimaryRolePlayerVariable).HasBeenUsed(currentUsePhase, false) || + usedVariable.IsDescopedDuringPathCreation) + { + break; + } + } + if (j == keyCount) + { + removedTracker[i] = true; + ++removedCount; + VerbalizationPlanNode.AddVariableEquivalenceNode(keys, pathContext, myCurrentBranchNode, ref myRootPlanNode, ref pendingRequiredVariableKeys); + } + } + if (removedCount != 0) + { + if (removedCount == setCount) + { + equivalentVariableSets = null; + } + else + { + for (int i = setCount - 1; i >= 0; --i) + { + if (removedTracker[i]) + { + equivalentVariableSets.RemoveAt(i); + } + } + } + } + } + /// <summary> /// Push a new negated chain node. /// </summary> private void PushNegatedChainNode(object pathContext, PathedRole negatedEntryRole, ref LinkedNode<object> pendingRequiredVariableKeys) @@ -9471,11 +9675,33 @@ /// <returns>New or existing variable</returns> private RolePlayerVariable RegisterRolePlayerUse(ObjectType rolePlayer, RolePlayerVariable joinToVariable, object usedFor, RolePathNode correlateWithNode) { + bool variableAlreadyScoped; + return RegisterRolePlayerUse(rolePlayer, joinToVariable, usedFor, correlateWithNode, out variableAlreadyScoped); + } + /// <summary> + /// Register a use of an object type before verbalization. All uses + /// must be registered to ensure correct subscripting. + /// </summary> + /// <param name="rolePlayer">The object type to use. If this is null, then the variable + /// is tracked as a missing role player.</param> + /// <param name="joinToVariable">An existing variable to join to. Directly joined variables + /// of compatible but different types get priority over correlated variables.</param> + /// <param name="usedFor">The object use. If this is <see langword="null"/>, then + /// this is a fully existential use of the role player.</param> + /// <param name="correlateWithNode">The <see cref="RolePathNode"/> to correlate this variable + /// with. The list of correlated variables is stored with the normalized root correlation + /// variable. This may be the same instance as <paramref name="usedFor"/> and should not + /// be pre-normalized before this call.</param> + /// <param name="variableAlreadyScoped">The returned variable was in used and scoped before this call.</param> + /// <returns>New or existing variable</returns> + private RolePlayerVariable RegisterRolePlayerUse(ObjectType rolePlayer, RolePlayerVariable joinToVariable, object usedFor, RolePathNode correlateWithNode, out bool variableAlreadyScoped) + { Dictionary<object, RolePlayerVariableUse> useMap = myUseToVariableMap; RolePlayerVariable existingVariable = null; bool addNewVariableToCorrelationRoot = false; RolePlayerVariableUse correlationRootVariableUse = default(RolePlayerVariableUse); object correlateWith = null; + variableAlreadyScoped = false; if (!correlateWithNode.IsEmpty && null != (correlateWith = EnsureRolePathCache().GetCorrelationRoot(correlateWithNode))) { @@ -9665,9 +9891,16 @@ } // Track use phase during registration to see if the root variable is // referenced by the path. - UseVariable(existingVariable, myLatestUsePhase, false); + if (!UseVariable(existingVariable, myLatestUsePhase, false)) + { + variableAlreadyScoped = true; + } // Determine if this variable is reentering scope - ScopeVariable(existingVariable, false); + if (ScopeVariable(existingVariable, false)) + { + // Overrides the phase setting + variableAlreadyScoped = false; + } return existingVariable; } else @@ -9799,7 +10032,8 @@ /// </summary> /// <param name="variable">The variable to put into scope</param> /// <param name="newVariable">True if the variable is newly created.</param> - private void ScopeVariable(RolePlayerVariable variable, bool newVariable) + /// <returns><see langword="true"/> if scoping changes.</returns> + private bool ScopeVariable(RolePlayerVariable variable, bool newVariable) { VerbalizationPlanNode currentBranchNode; if ((newVariable || variable.IsDescopedDuringPathCreation) && @@ -9813,7 +10047,9 @@ newlyScoped.SetNext(existingNewlyScoped, ref newlyScoped); } currentBranchNode.FirstNewlyScopeVariableNode = newlyScoped; + return true; } + return false; } private void PropagateNewVariableScopingUp(VerbalizationPlanNode branchNode) { @@ -10298,7 +10534,10 @@ variable.MinimizeHeadSubscripting = true; } } - firstUse = UseVariable(variable, CurrentQuantificationUsePhase, false); + int currentUsePhase = CurrentQuantificationUsePhase; + // Don't call UseVariable until after we've checked variable partnering as this can have the + // side effect of 'using' a variable by partnering it with a used variable of the same type. + bool unused = !variable.HasBeenUsed(currentUsePhase, false); Dictionary<RolePlayerVariable, LinkedNode<RolePlayerVariable>> customCorrelations; LinkedNode<RolePlayerVariable> customCorrelationNode; @@ -10308,7 +10547,7 @@ { // If we haven't already been paired with a custom correlation // then pair up now. - RolePlayerVariable partnerWithVariable = GetUnpairedPartnerVariable(variable, firstUse, customCorrelationNode); + RolePlayerVariable partnerWithVariable = GetUnpairedPartnerVariable(variable, unused, customCorrelationNode); while (partnerWithVariable != null) { GetPartneredSubscriptedRolePlayerName(variable, ref partnerWithVariable, false); @@ -10324,6 +10563,9 @@ } } } + + // Use the variable after partnering is complete. + firstUse = UseVariable(variable, currentUsePhase, false); if (retVal == null) { retVal = GetSubscriptedRolePlayerName(variable); Modified: trunk/ORMModel/Shell/ORMContextWindow.cs =================================================================== --- trunk/ORMModel/Shell/ORMContextWindow.cs 2014-12-20 18:36:14 UTC (rev 1555) +++ trunk/ORMModel/Shell/ORMContextWindow.cs 2014-12-31 03:54:52 UTC (rev 1556) @@ -258,7 +258,14 @@ !element.IsDeleted && null != (hierarchyElement = element as IHierarchyContextEnabled)) { - break; + if (hierarchyElement.HierarchyDisabled) + { + hierarchyElement = null; + } + else + { + break; + } } } DrawDiagram(refresh, element, hierarchyElement); @@ -425,7 +432,7 @@ return; } IHierarchyContextEnabled contextableElement = EditorUtility.ResolveContextInstance(element, false) as IHierarchyContextEnabled; - if (contextableElement == null) + if (contextableElement == null || contextableElement.HierarchyDisabled) { return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2014-12-20 18:36:16
|
Revision: 1555 http://sourceforge.net/p/orm/code/1555 Author: mcurland Date: 2014-12-20 18:36:14 +0000 (Sat, 20 Dec 2014) Log Message: ----------- Redo deletion of diagram with a repeated shape triggers a delete closure with no current transaction, which isn't handled by the multi shape code. This is a hard crash. I have no idea why it wasn't caught years ago. Modified Paths: -------------- trunk/ORMModel/Framework/Diagrams/MultiShapeUtility.cs Modified: trunk/ORMModel/Framework/Diagrams/MultiShapeUtility.cs =================================================================== --- trunk/ORMModel/Framework/Diagrams/MultiShapeUtility.cs 2014-12-19 07:20:36 UTC (rev 1554) +++ trunk/ORMModel/Framework/Diagrams/MultiShapeUtility.cs 2014-12-20 18:36:14 UTC (rev 1555) @@ -535,12 +535,14 @@ NodeShape sourceShape; IReconfigureableLink reconfigurableLink; - if (walker != null) + Transaction currentTransaction; + if (walker != null && + null != (currentTransaction = sourceElement.Store.TransactionManager.CurrentTransaction)) { if (sourceRoleInfo != null && sourceRoleInfo.Id == PresentationViewsSubject.SubjectDomainRoleId) { - contextDictionary = sourceElement.Store.TransactionManager.CurrentTransaction.TopLevelTransaction.Context.ContextInfo; + contextDictionary = currentTransaction.TopLevelTransaction.Context.ContextInfo; if (contextDictionary.TryGetValue(subjectsKey = DeletingSubjectsKey, out subjectsDictionaryObject)) { deletingSubjectsDictionary = (Dictionary<ModelElement, object>)subjectsDictionaryObject; @@ -556,7 +558,7 @@ null != (sourceShape = sourceElement as NodeShape) && null != (reconfigurableLink = (targetRelationship as LinkConnectsToNode).Link as IReconfigureableLink) && null != (primaryShape = ResolvePrimaryShape(sourceShape)) && - (!sourceElement.Store.TransactionManager.CurrentTransaction.TopLevelTransaction.Context.ContextInfo.TryGetValue(DeletingSubjectsKey, out subjectsDictionaryObject) || + (!currentTransaction.TopLevelTransaction.Context.ContextInfo.TryGetValue(DeletingSubjectsKey, out subjectsDictionaryObject) || (null != (subject = primaryShape.ModelElement) && !((Dictionary<ModelElement, object>)subjectsDictionaryObject).ContainsKey(subject)))) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2014-12-19 07:20:38
|
Revision: 1554 http://sourceforge.net/p/orm/code/1554 Author: mcurland Date: 2014-12-19 07:20:36 +0000 (Fri, 19 Dec 2014) Log Message: ----------- Fixed cross-model drag silent crash for unary fact types on objectifications with different fact type signatures but same name. Missing a null check in this case. Modified Paths: -------------- trunk/ORMModel/ObjectModel/ORMCore.ElementEquivalence.cs Modified: trunk/ORMModel/ObjectModel/ORMCore.ElementEquivalence.cs =================================================================== --- trunk/ORMModel/ObjectModel/ORMCore.ElementEquivalence.cs 2014-12-02 22:16:48 UTC (rev 1553) +++ trunk/ORMModel/ObjectModel/ORMCore.ElementEquivalence.cs 2014-12-19 07:20:36 UTC (rev 1554) @@ -202,7 +202,7 @@ otherObjectType = null; } } - if (otherObjectType.IsValueType != isValueType) + if (otherObjectType != null && otherObjectType.IsValueType != isValueType) { otherObjectType = null; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2014-12-02 22:16:56
|
Revision: 1553 http://sourceforge.net/p/orm/code/1553 Author: mcurland Date: 2014-12-02 22:16:48 +0000 (Tue, 02 Dec 2014) Log Message: ----------- Cross-model constraint merging matched constraints that restricted the same roles irrespective of the join paths. However, separate join paths can lead to much different constraints, so this should be a primary requirement for matching, not a secondary consideration. Modified Paths: -------------- trunk/ORMModel/ObjectModel/ORMCore.ElementEquivalence.cs Modified: trunk/ORMModel/ObjectModel/ORMCore.ElementEquivalence.cs =================================================================== --- trunk/ORMModel/ObjectModel/ORMCore.ElementEquivalence.cs 2014-12-02 05:50:51 UTC (rev 1552) +++ trunk/ORMModel/ObjectModel/ORMCore.ElementEquivalence.cs 2014-12-02 22:16:48 UTC (rev 1553) @@ -1780,7 +1780,8 @@ break; } } - if (i == roleCount) + if (i == roleCount && + LeadRolePath.VerifyJoinPathMatch(this, testOtherSetConstraint, foreignStore, elementTracker)) { // We have a match if (testOtherSetConstraint.Modality == matchConstraintModality) @@ -1884,11 +1885,10 @@ // Now find matching sequences for each role bool matchSequenceOrder = 0 != (constraint.RoleSequenceStyles & RoleSequenceStyles.OrderedRoleSequences); - otherMatchingRoles = allOtherMatchingRoles[0]; // Match the first sequence first - roleCount = otherMatchingRoles.Length; - Role firstMatchingRole = otherMatchingRoles[0]; + Role firstMatchingRole = allOtherMatchingRoles[0][0]; foreach (ConstraintRoleSequence sequence in firstMatchingRole.ConstraintRoleSequenceCollection) { + roleCount = (otherMatchingRoles = allOtherMatchingRoles[0]).Length; // Match the first sequence first SetComparisonConstraintRoleSequence testOtherSequence; SetComparisonConstraint testOtherConstraint; LinkedElementCollection<SetComparisonConstraintRoleSequence> testOtherSequences; @@ -1976,20 +1976,36 @@ if (trailingSequenceIndex == sequenceCount) { - // We have a full constraint match on all sequences. - if (testOtherConstraint.Modality == matchConstraintModality) + // Sequence roles all match up. Make sure that the join paths are + // also a match before declaring success. It is possible to have constraints + // over the same roles with different join paths. Note that an overabundance + // of caution here will simply result in constraints over the same roles, which + // will result in validation errors displayed to the user. + i = 0; + for (; i < sequenceCount; ++i) { - otherSetComparisonConstraint = testOtherConstraint; - otherSetComparisonSequences = testOtherSequences; - break; // We won't find a better match + if (!LeadRolePath.VerifyJoinPathMatch(sequences[matchedOtherSequences[i] - 1], testOtherSequences[i], foreignStore, elementTracker)) + { + break; + } } - else if (otherSetComparisonConstraintMismatchedModality == null) + if (i == sequenceCount) { - otherSetComparisonConstraintMismatchedModality = testOtherConstraint; - otherSetComparisonSequencesMismatchedModality = testOtherSequences; - matchedOtherSequencesMismatchedModality = matchedOtherSequences; - matchedOtherSequences = null; - // Do not break, try to find a full modality match + // We have a full constraint match on all sequences. + if (testOtherConstraint.Modality == matchConstraintModality) + { + otherSetComparisonConstraint = testOtherConstraint; + otherSetComparisonSequences = testOtherSequences; + break; // We won't find a better match + } + else if (otherSetComparisonConstraintMismatchedModality == null) + { + otherSetComparisonConstraintMismatchedModality = testOtherConstraint; + otherSetComparisonSequencesMismatchedModality = testOtherSequences; + matchedOtherSequencesMismatchedModality = matchedOtherSequences; + matchedOtherSequences = null; + // Do not break, try to find a full modality match + } } } } @@ -2381,6 +2397,76 @@ return null; } /// <summary> + /// Helper function to verify matching paths during import. + /// </summary> + /// <param name="paths">The paths to check against.</param> + /// <param name="otherPaths">The paths to search.</param> + /// <param name="foreignStore">The store being copied from.</param> + /// <param name="elementTracker">The element tracker determining which elements are imported.</param> + /// <returns><see langword="true"/> if all paths have a match.</returns> + private static bool VerifyMatchingPaths(IList<LeadRolePath> paths, IList<LeadRolePath> otherPaths, Store foreignStore, IEquivalentElementTracker elementTracker) + { + int pathCount = paths.Count; + if (pathCount == 0) + { + return otherPaths.Count == 0; + } + else if (otherPaths.Count != pathCount) + { + return false; + } + if (pathCount != 1) + { + // Copy to writable collection so we can remove when processed. + LeadRolePath[] otherPathsArray = new LeadRolePath[pathCount]; + otherPaths.CopyTo(otherPathsArray, 0); + otherPaths = otherPathsArray; + } + Dictionary<ModelElement, ModelElement> matchedPathElements = new Dictionary<ModelElement, ModelElement>(); + for (int i = 0; i < pathCount; ++i) + { + LeadRolePath matchingPath; + if (null != (matchingPath = paths[i].GetMatchingPath(otherPaths, matchedPathElements, foreignStore, elementTracker))) + { + if (pathCount != 1) + { + otherPaths.Remove(matchingPath); + } + } + else + { + return false; + } + } + return true; + } + /// <summary> + /// Helper to determine if join paths match for role sequences. + /// </summary> + /// <param name="roleSequence">The role sequence from the current store.</param> + /// <param name="otherRoleSequence">The role sequence from the foreign store.</param> + /// <param name="foreignStore">The store being copied from.</param> + /// <param name="elementTracker">The element tracker determining which elements are imported.</param> + /// <returns><see langword="true"/> if the join paths are equivalent.</returns> + public static bool VerifyJoinPathMatch(ConstraintRoleSequence roleSequence, ConstraintRoleSequence otherRoleSequence, Store foreignStore, IEquivalentElementTracker elementTracker) + { + ConstraintRoleSequenceJoinPath sequenceJoinPath; + if (null != (sequenceJoinPath = roleSequence.JoinPath)) + { + ConstraintRoleSequenceJoinPath otherSequenceJoinPath; + if (null == (otherSequenceJoinPath = otherRoleSequence.JoinPath) || + !LeadRolePath.VerifyMatchingPaths(sequenceJoinPath.LeadRolePathCollection, otherSequenceJoinPath.LeadRolePathCollection, foreignStore, elementTracker)) + { + return false; + } + } + else if (otherRoleSequence.JoinPath != null) + { + return false; + } + return true; + } + /// <summary> /// Implements <see cref="IElementEquivalence.MapEquivalentElements"/> /// Match paths by roots, pathed roles, and conditional calculations. /// </summary> @@ -2627,7 +2713,7 @@ PathedRole otherPathedRole = otherPathedRoles[i]; if (pathedRole.PathedRolePurpose != otherPathedRole.PathedRolePurpose || pathedRole.IsNegated != otherPathedRole.IsNegated || - null == CopyMergeUtility.GetEquivalentElement(pathedRole.Role, foreignStore, elementTracker)) + otherPathedRole.Role != CopyMergeUtility.GetEquivalentElement(pathedRole.Role, foreignStore, elementTracker)) { return false; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2014-12-02 05:50:54
|
Revision: 1552 http://sourceforge.net/p/orm/code/1552 Author: mcurland Date: 2014-12-02 05:50:51 +0000 (Tue, 02 Dec 2014) Log Message: ----------- Fixed bug with cross model merge of shapes with multiple readings with same order. Repro steps: 1) Drag a fact type with two readings on same reading order into another model. 2) Undo the drop 3) Reapply the drag/drop operation Result: The second drop fails. Internally, the named element dictionary for the reading signatures is holding a reference to the previous (now deleted) reading item keyed by the signature of the second item. The dictionary event tracking code made a bad assumption about one-or-many-ness of a given relationship and overwrote the tracking information for the second reading. It is highly likely that this could also cause other bugs outside this scenario. Modified Paths: -------------- trunk/ORMModel/Framework/NamedElementDictionary.cs Modified: trunk/ORMModel/Framework/NamedElementDictionary.cs =================================================================== --- trunk/ORMModel/Framework/NamedElementDictionary.cs 2014-11-21 17:47:16 UTC (rev 1551) +++ trunk/ORMModel/Framework/NamedElementDictionary.cs 2014-12-02 05:50:51 UTC (rev 1552) @@ -980,7 +980,9 @@ protected bool RemoveElement(ModelElement element, string alternateElementName, DuplicateNameAction duplicateAction) { string elementName = alternateElementName; - if (string.IsNullOrEmpty(elementName)) + // Use null here. An empty name is natural during a rename (DSL initial properties are empty, not null), but there + // will be no corresponding entry to remove. + if (elementName == null) { elementName = DomainClassInfo.GetName(element); } @@ -1538,12 +1540,12 @@ DictionaryType = dictionaryType; } } - private static Dictionary<ModelElement, LinkAndDictionaryType> myDetachedLinksWithRemoteDictionary; + private static Dictionary<ModelElement, LinkedNode<LinkAndDictionaryType>> myDetachedLinksWithRemoteDictionary; private static Dictionary<ModelElement, INamedElementDictionaryLink> myDetachedRemoteDictionaryConnectorLinks; private static void ElementEventsEndedEvent(object sender, ElementEventsEndedEventArgs e) { Dictionary<ModelElement, DetachedElementRecord> changes = myDetachedElementRecords; - Dictionary<ModelElement, LinkAndDictionaryType> detachedRemotePrimaryLinks = myDetachedLinksWithRemoteDictionary; + Dictionary<ModelElement, LinkedNode<LinkAndDictionaryType>> detachedRemotePrimaryLinks = myDetachedLinksWithRemoteDictionary; Dictionary<ModelElement, INamedElementDictionaryLink> detachedRemoteConnectorLinks = myDetachedRemoteDictionaryConnectorLinks; // Toss unused tracked changes when events are finished @@ -1554,84 +1556,106 @@ if (detachedRemotePrimaryLinks != null && detachedRemoteConnectorLinks != null) { - foreach (KeyValuePair<ModelElement, LinkAndDictionaryType> primaryLinkPair in detachedRemotePrimaryLinks) + foreach (KeyValuePair<ModelElement, LinkedNode<LinkAndDictionaryType>> primaryLinkPair in detachedRemotePrimaryLinks) { ModelElement primaryParent = primaryLinkPair.Key; - LinkAndDictionaryType linkAndType = primaryLinkPair.Value; - INamedElementDictionaryLink primaryLink = linkAndType.Link; - Type dictionaryType = linkAndType.DictionaryType; - - // Go up the deleted chain as far as we can - ModelElement resolvedParent = primaryParent; + LinkedNode<LinkAndDictionaryType> linkAndTypeNode = primaryLinkPair.Value; INamedElementDictionary resolvedDictionary = null; - INamedElementDictionaryOwner dictionaryOwner; - for (; ; ) + Type previousDictionaryType = null; + while (linkAndTypeNode != null) { - INamedElementDictionaryLink deletedConnectingLink; - if (detachedRemoteConnectorLinks.TryGetValue(resolvedParent, out deletedConnectingLink)) + LinkAndDictionaryType linkAndType = linkAndTypeNode.Value; + Type dictionaryType = linkAndType.DictionaryType; + if (dictionaryType == previousDictionaryType) { - resolvedParent = (ModelElement)deletedConnectingLink.ParentRolePlayer; - if (null != (dictionaryOwner = resolvedParent as INamedElementDictionaryOwner) && - null != (resolvedDictionary = dictionaryOwner.FindNamedElementDictionary(dictionaryType))) + if (resolvedDictionary == null) { - break; + continue; } - resolvedParent = (ModelElement)deletedConnectingLink.ParentRolePlayer; - if (!(resolvedParent is INamedElementDictionaryRemoteChild)) - { - resolvedParent = null; // The next loop won't resolve, so don't bother. - break; - } - continue; } - else if (null != (dictionaryOwner = resolvedParent as INamedElementDictionaryOwner)) + else { - // Check current parent for a dictionary before going into the loop below. - resolvedDictionary = dictionaryOwner.FindNamedElementDictionary(dictionaryType); + // The dictionary types are usually the same, do some basic optimization + // so we only retrieve the dictionary one time. + previousDictionaryType = dictionaryType; + resolvedDictionary = null; } - break; - } - if (null == resolvedDictionary && - null != resolvedParent) - { - // We got as far up the parent stack as we could get using - // cached detached objects. We can now assume that the remainder - // of the links are still in the model. Use the available information - // on the named element dictionary interfaces to find the dictionary. - INamedElementDictionaryRemoteChild remoteChildInfo; - Guid parentRoleId; - DomainRoleInfo parentRoleInfo; - DomainDataDirectory dataDirectory = resolvedParent.Store.DomainDataDirectory; - while (null != resolvedParent && - !resolvedParent.IsDeleted && - null != (remoteChildInfo = resolvedParent as INamedElementDictionaryRemoteChild) && - (parentRoleId = remoteChildInfo.NamedElementDictionaryParentRole) != Guid.Empty && - null != (parentRoleInfo = dataDirectory.FindDomainRole(parentRoleId)) && - parentRoleInfo.IsOne && - null != (resolvedParent = parentRoleInfo.GetLinkedElement(resolvedParent))) + if (resolvedDictionary == null) { - if (null != (dictionaryOwner = resolvedParent as INamedElementDictionaryOwner) && - null != (resolvedDictionary = dictionaryOwner.FindNamedElementDictionary(dictionaryType))) + // Go up the deleted chain as far as we can + ModelElement resolvedParent = primaryParent; + INamedElementDictionaryOwner dictionaryOwner; + for (; ; ) { - resolvedParent = null; + INamedElementDictionaryLink deletedConnectingLink; + if (detachedRemoteConnectorLinks.TryGetValue(resolvedParent, out deletedConnectingLink)) + { + resolvedParent = (ModelElement)deletedConnectingLink.ParentRolePlayer; + if (null != (dictionaryOwner = resolvedParent as INamedElementDictionaryOwner) && + null != (resolvedDictionary = dictionaryOwner.FindNamedElementDictionary(dictionaryType))) + { + break; + } + resolvedParent = (ModelElement)deletedConnectingLink.ParentRolePlayer; + if (!(resolvedParent is INamedElementDictionaryRemoteChild)) + { + resolvedParent = null; // The next loop won't resolve, so don't bother. + break; + } + continue; + } + else if (null != (dictionaryOwner = resolvedParent as INamedElementDictionaryOwner)) + { + // Check current parent for a dictionary before going into the loop below. + resolvedDictionary = dictionaryOwner.FindNamedElementDictionary(dictionaryType); + } + break; } + + if (null == resolvedDictionary && + null != resolvedParent) + { + // We got as far up the parent stack as we could get using + // cached detached objects. We can now assume that the remainder + // of the links are still in the model. Use the available information + // on the named element dictionary interfaces to find the dictionary. + INamedElementDictionaryRemoteChild remoteChildInfo; + Guid parentRoleId; + DomainRoleInfo parentRoleInfo; + DomainDataDirectory dataDirectory = resolvedParent.Store.DomainDataDirectory; + while (null != resolvedParent && + !resolvedParent.IsDeleted && + null != (remoteChildInfo = resolvedParent as INamedElementDictionaryRemoteChild) && + (parentRoleId = remoteChildInfo.NamedElementDictionaryParentRole) != Guid.Empty && + null != (parentRoleInfo = dataDirectory.FindDomainRole(parentRoleId)) && + parentRoleInfo.IsOne && + null != (resolvedParent = parentRoleInfo.GetLinkedElement(resolvedParent))) + { + if (null != (dictionaryOwner = resolvedParent as INamedElementDictionaryOwner) && + null != (resolvedDictionary = dictionaryOwner.FindNamedElementDictionary(dictionaryType))) + { + resolvedParent = null; + } + } + } } - } - if (null != resolvedDictionary) - { - ModelElement namedChild = (ModelElement)primaryLink.ChildRolePlayer; - DetachedElementRecord changeRecord; - if (changes != null && - changes.TryGetValue(namedChild, out changeRecord)) + if (null != resolvedDictionary) { - changeRecord.AddDictionary(resolvedDictionary); - changes[namedChild] = changeRecord; + ModelElement namedChild = (ModelElement)linkAndType.Link.ChildRolePlayer; + DetachedElementRecord changeRecord; + if (changes != null && + changes.TryGetValue(namedChild, out changeRecord)) + { + changeRecord.AddDictionary(resolvedDictionary); + changes[namedChild] = changeRecord; + } + else + { + resolvedDictionary.RemoveElement(namedChild, null, DuplicateNameAction.RetrieveDuplicateCollection); + } } - else - { - resolvedDictionary.RemoveElement(namedChild, null, DuplicateNameAction.RetrieveDuplicateCollection); - } + linkAndTypeNode = linkAndTypeNode.Next; } } } @@ -1793,12 +1817,19 @@ // Cache the link keyed off the parent element. We also cache remote // connectors for events, which cache of the child element. The child // element in those cases matches the primary element here. - Dictionary<ModelElement, LinkAndDictionaryType> remoteLinks = myDetachedLinksWithRemoteDictionary; + Dictionary<ModelElement, LinkedNode<LinkAndDictionaryType>> remoteLinks = myDetachedLinksWithRemoteDictionary; if (remoteLinks == null) { - myDetachedLinksWithRemoteDictionary = remoteLinks = new Dictionary<ModelElement, LinkAndDictionaryType>(); + myDetachedLinksWithRemoteDictionary = remoteLinks = new Dictionary<ModelElement, LinkedNode<LinkAndDictionaryType>>(); } - remoteLinks[(ModelElement)parent] = new LinkAndDictionaryType(link, remoteType); + ModelElement linkKey = (ModelElement)parent; + LinkedNode<LinkAndDictionaryType> newNode = new LinkedNode<LinkAndDictionaryType>(new LinkAndDictionaryType(link, remoteType)); + LinkedNode<LinkAndDictionaryType> prevNode; + if (remoteLinks.TryGetValue(linkKey, out prevNode)) + { + newNode.SetNext(prevNode, ref newNode); + } + remoteLinks[linkKey] = newNode; } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2014-11-21 17:47:19
|
Revision: 1551 http://sourceforge.net/p/orm/code/1551 Author: mcurland Date: 2014-11-21 17:47:16 +0000 (Fri, 21 Nov 2014) Log Message: ----------- Bug fixes: * Fix sample population editor VS crash with recursive identifiers. * Allow test framework to run on 64-bit machines. Modified Paths: -------------- trunk/ORM2CommandLineTest/ReportViewer.csproj trunk/ORM2CommandLineTest/TestDriverApp.csproj trunk/ORM2CommandLineTest/install.bat trunk/ORMModel/ObjectModel/SamplePopulation.cs trunk/ORMModel/Shell/SamplePopulationEditor.cs Modified: trunk/ORM2CommandLineTest/ReportViewer.csproj =================================================================== --- trunk/ORM2CommandLineTest/ReportViewer.csproj 2014-11-21 16:29:21 UTC (rev 1550) +++ trunk/ORM2CommandLineTest/ReportViewer.csproj 2014-11-21 17:47:16 UTC (rev 1551) @@ -21,6 +21,7 @@ <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> <NoWarn>1607</NoWarn> + <PlatformTarget>x86</PlatformTarget> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <DebugType>pdbonly</DebugType> @@ -30,6 +31,7 @@ <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> <NoWarn>1607</NoWarn> + <PlatformTarget>x86</PlatformTarget> </PropertyGroup> <ItemGroup> <Reference Include="EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> @@ -135,4 +137,4 @@ <PropertyGroup> <PostBuildEvent>"$(ProjectDir)install.bat" "$(ProjectDir)" "$(OutDir)" "$(DevEnvDir)\..\..\" "$(TargetVisualStudioShortProductName)" "$(TargetVisualStudioLongProductName)"</PostBuildEvent> </PropertyGroup> -</Project> +</Project> \ No newline at end of file Modified: trunk/ORM2CommandLineTest/TestDriverApp.csproj =================================================================== --- trunk/ORM2CommandLineTest/TestDriverApp.csproj 2014-11-21 16:29:21 UTC (rev 1550) +++ trunk/ORM2CommandLineTest/TestDriverApp.csproj 2014-11-21 17:47:16 UTC (rev 1551) @@ -36,6 +36,7 @@ <OutputPath>bin\Debug\</OutputPath> <DefineConstants>$(DefineConstants);DEBUG;TRACE</DefineConstants> <NoWarn>1607</NoWarn> + <PlatformTarget>x86</PlatformTarget> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <DebugSymbols>false</DebugSymbols> @@ -43,6 +44,7 @@ <OutputPath>.\bin\Release\</OutputPath> <DefineConstants>$(DefineConstants);TRACE</DefineConstants> <NoWarn>1607</NoWarn> + <PlatformTarget>x86</PlatformTarget> </PropertyGroup> <ItemGroup> <Reference Include="Microsoft.VisualStudio.Modeling.Sdk, Version=$(TargetDslToolsAssemblyVersion), Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> @@ -94,4 +96,4 @@ <PropertyGroup> <PostBuildEvent>"$(ProjectDir)install.bat" "$(ProjectDir)" "$(OutDir)" "$(DevEnvDir)\..\..\" "$(TargetVisualStudioShortProductName)" "$(TargetVisualStudioLongProductName)"</PostBuildEvent> </PropertyGroup> -</Project> +</Project> \ No newline at end of file Modified: trunk/ORM2CommandLineTest/install.bat =================================================================== --- trunk/ORM2CommandLineTest/install.bat 2014-11-21 16:29:21 UTC (rev 1550) +++ trunk/ORM2CommandLineTest/install.bat 2014-11-21 17:47:16 UTC (rev 1551) @@ -9,9 +9,9 @@ ) if '%1'=='' ( -set rootPath=%~dp0 +CALL:SETVAR "rootPath" "%~dp0" ) else ( -set rootPath=%~dp1 +CALL:SETVAR "rootPath" "%~dp1" ) if '%2'=='' ( set outDir=bin\Debug\ @@ -19,9 +19,9 @@ set outDir=%~2 ) if '%3'=='' ( -set envPath=%ResolvedProgramFiles%\Microsoft Visual Studio 8\ +CALL:SETVAR "envPath" "%ResolvedProgramFiles%\Microsoft Visual Studio 8\" ) else ( -set envPath=%~dp3 +CALL:SETVAR "envPath" "%~dp3" ) if '%4'=='' ( set VSProduct=VS2005 @@ -89,3 +89,7 @@ SET WOWRegistryAdjust=\Wow6432Node ) GOTO:EOF + +:SETVAR +SET %~1=%~2 +GOTO:EOF Modified: trunk/ORMModel/ObjectModel/SamplePopulation.cs =================================================================== --- trunk/ORMModel/ObjectModel/SamplePopulation.cs 2014-11-21 16:29:21 UTC (rev 1550) +++ trunk/ORMModel/ObjectModel/SamplePopulation.cs 2014-11-21 17:47:16 UTC (rev 1551) @@ -3600,7 +3600,7 @@ valueNonTextFormat = null; } string listSeparator = null; - string retVal = (parentObjectType == null) ? "" : RecurseObjectTypeInstanceValue(objectInstance, parentObjectType, ignoreObjectification, false, null, null, ref listSeparator, ref outputText, formatProvider, valueTextFormat, valueNonTextFormat, false); + string retVal = (parentObjectType == null) ? "" : RecurseObjectTypeInstanceValue(objectInstance, parentObjectType, ignoreObjectification, false, null, null, ref listSeparator, ref outputText, formatProvider, valueTextFormat, valueNonTextFormat, false, null); retVal = (outputText != null) ? outputText.ToString() : retVal; return (retVal == null) ? "" : retVal.Trim(); } @@ -3627,12 +3627,12 @@ valueNonTextFormat = null; } string listSeparator = null; - string retVal = (parentFactType == null) ? "" : RecurseObjectTypeInstanceValue(null, null, false, false, factInstance, parentFactType, ref listSeparator, ref outputText, formatProvider, valueTextFormat, valueNonTextFormat, false); + string retVal = (parentFactType == null) ? "" : RecurseObjectTypeInstanceValue(null, null, false, false, factInstance, parentFactType, ref listSeparator, ref outputText, formatProvider, valueTextFormat, valueNonTextFormat, false, null); retVal = (outputText != null) ? outputText.ToString() : retVal; return (retVal == null) ? "" : retVal.Trim(); } - private static string RecurseObjectTypeInstanceValue(ObjectTypeInstance objectInstance, ObjectType parentObjectType, bool ignoreObjectification, bool nestedLeadValue, FactTypeInstance factInstance, FactType parentFactType, ref string listSeparator, ref StringBuilder outputText, IFormatProvider formatProvider, string valueTextFormat, string valueNonTextFormat, bool outerGrouping) + private static string RecurseObjectTypeInstanceValue(ObjectTypeInstance objectInstance, ObjectType parentObjectType, bool ignoreObjectification, bool nestedLeadValue, FactTypeInstance factInstance, FactType parentFactType, ref string listSeparator, ref StringBuilder outputText, IFormatProvider formatProvider, string valueTextFormat, string valueNonTextFormat, bool outerGrouping, Predicate<ObjectType> stackCheck) { string blankValueText = nestedLeadValue ? " " : ""; DataType dataType; @@ -3668,12 +3668,22 @@ } return valueText; } + else if (parentObjectType != null && objectInstance == null && stackCheck != null && stackCheck(parentObjectType)) + { + if (outputText != null) + { + outputText.Append(blankValueText); + return null; + } + return blankValueText; + } else { IList<Role> roles = null; int roleCount = 0; FactType objectifiedFactType = null; EntityTypeInstance entityInstance = null; + Predicate<ObjectType> recurseStackCheck = null; if (parentFactType != null) { // Just do the FactType tuple, without any identifier parts @@ -3712,7 +3722,8 @@ formatProvider, valueTextFormat, valueNonTextFormat, - outerGrouping); + outerGrouping, + stackCheck); } else if (preferredFor != null && preferredFor != parentObjectType) { @@ -3739,7 +3750,8 @@ formatProvider, valueTextFormat, valueNonTextFormat, - false); + false, + recurseStackCheck ?? (recurseStackCheck = CreateRecursiveIdentifierStackCheck(preferredFor, stackCheck))); outputText.Append(listSeparator ?? (listSeparator = GetListSeparator(formatProvider))); RecurseObjectTypeInstanceValue( null, @@ -3753,7 +3765,8 @@ formatProvider, valueTextFormat, valueNonTextFormat, - true); + true, + stackCheck); if (!outerGrouping) { outputText.Append(")"); @@ -3776,7 +3789,8 @@ formatProvider, valueTextFormat, valueNonTextFormat, - outerGrouping); + outerGrouping, + recurseStackCheck ?? (recurseStackCheck = CreateRecursiveIdentifierStackCheck(preferredFor, stackCheck))); } entityInstance = objectInstance as EntityTypeInstance; if (identifier != null) @@ -3826,9 +3840,10 @@ { roleInstance = factInstance.FindRoleInstance(role); } + ObjectType rolePlayer = role.RolePlayer; string retVal = RecurseObjectTypeInstanceValue( (roleInstance != null) ? roleInstance.ObjectTypeInstance : null, - role.RolePlayer, + rolePlayer, false, nestedLeadValue, null, @@ -3838,7 +3853,8 @@ formatProvider, valueTextFormat, valueNonTextFormat, - false); + false, + recurseStackCheck ?? (recurseStackCheck = CreateRecursiveIdentifierStackCheck(rolePlayer, stackCheck))); if (objectifiedFactType == null) { return retVal; @@ -3906,9 +3922,10 @@ } } } + ObjectType rolePlayer = role.RolePlayer; RecurseObjectTypeInstanceValue( (matchInstance != null) ? matchInstance.ObjectTypeInstance : null, - role.RolePlayer, + rolePlayer, false, i == 0 && !outerGrouping, null, @@ -3918,7 +3935,8 @@ formatProvider, valueTextFormat, valueNonTextFormat, - false); + false, + recurseStackCheck ?? (recurseStackCheck = CreateRecursiveIdentifierStackCheck(rolePlayer, stackCheck))); } if (!outerGrouping) { @@ -3941,7 +3959,8 @@ formatProvider, valueTextFormat, valueNonTextFormat, - true); + true, + stackCheck); if (!outerGrouping) { outputText.Append(")"); @@ -3950,6 +3969,22 @@ return null; } } + /// <summary> + /// Helper to create a delegate to determine if an identifier is recursively defined. If we have + /// a recursive identifier then we do not continue past an empty instance. + /// </summary> + /// <param name="rolePlayer">The current role player.</param> + /// <param name="contextStackCheck">A context delegate from higher up in the object tree.</param> + /// <returns>New stack check.</returns> + private static Predicate<ObjectType> CreateRecursiveIdentifierStackCheck(ObjectType rolePlayer, Predicate<ObjectType> contextStackCheck) + { + return rolePlayer == null ? + contextStackCheck : + delegate(ObjectType recursiveRolePlayer) + { + return rolePlayer == recursiveRolePlayer || (contextStackCheck != null && contextStackCheck(recursiveRolePlayer)); + }; + } private static string GetListSeparator(IFormatProvider formatProvider) { CultureInfo cultureInfo = formatProvider as CultureInfo ?? CultureInfo.CurrentCulture; Modified: trunk/ORMModel/Shell/SamplePopulationEditor.cs =================================================================== --- trunk/ORMModel/Shell/SamplePopulationEditor.cs 2014-11-21 16:29:21 UTC (rev 1550) +++ trunk/ORMModel/Shell/SamplePopulationEditor.cs 2014-11-21 17:47:16 UTC (rev 1551) @@ -3133,7 +3133,7 @@ public static string DeriveColumnName(Role role, bool ignoreObjectification) { StringBuilder outputText = null; - string retVal = (role == null || role.RolePlayer == null) ? ResourceStrings.ModelSamplePopulationEditorNullSelection : RecurseColumnIdentifier(role, null, ignoreObjectification, null, ref outputText); + string retVal = (role == null || role.RolePlayer == null) ? ResourceStrings.ModelSamplePopulationEditorNullSelection : RecurseColumnIdentifier(role, null, ignoreObjectification, null, null, ref outputText); return (outputText != null) ? outputText.ToString() : retVal; } public static string DeriveColumnName(ObjectType objectType) @@ -3143,7 +3143,7 @@ public static string DeriveColumnName(ObjectType objectType, bool ignoreObjectification) { StringBuilder outputText = null; - string retVal = (objectType == null) ? ResourceStrings.ModelSamplePopulationEditorNullSelection : RecurseColumnIdentifier(null, objectType, ignoreObjectification, null, ref outputText); + string retVal = (objectType == null) ? ResourceStrings.ModelSamplePopulationEditorNullSelection : RecurseColumnIdentifier(null, objectType, ignoreObjectification, null, null, ref outputText); return (outputText != null) ? outputText.ToString() : retVal; } protected static string GetRolePlayerTypeName(Role role, bool useRoleName) @@ -3158,7 +3158,7 @@ return retVal; } // UNDONE: This whole method needs to be localized - private static string RecurseColumnIdentifier(Role role, ObjectType rolePlayer, bool ignoreObjectification, string listSeparator, ref StringBuilder outputText) + private static string RecurseColumnIdentifier(Role role, ObjectType rolePlayer, bool ignoreObjectification, string listSeparator, Predicate<ObjectType> stackCheck, ref StringBuilder outputText) { if (rolePlayer == null) { @@ -3169,14 +3169,26 @@ if (outputText != null) { outputText.Append(" "); + return null; } return " "; } + if (stackCheck != null && stackCheck(rolePlayer)) + { + if (outputText != null) + { + outputText.Append(rolePlayer.Name); + outputText.Append(ResourceStrings.ReadingShapeEllipsis); + return null; + } + return rolePlayer.Name + ResourceStrings.ReadingShapeEllipsis; + } string roleName = (role != null) ? role.Name : ""; string derivedName = (roleName.Length != 0) ? roleName : rolePlayer.Name; UniquenessConstraint identifier = null; ObjectType supertypeRolePlayer = null; bool isValueType = rolePlayer.IsValueType; + Predicate<ObjectType> nextStackCheck = isValueType ? stackCheck : null; // The value type won't recurse over its preferred identifier. FactType nestedFactType = (ignoreObjectification || isValueType) ? null : rolePlayer.NestedFactType; bool useIdentifiedReferenceMode = false; if (isValueType) @@ -3221,11 +3233,12 @@ } outputText.Append(derivedName); outputText.Append("("); + bool identifierWritten = false; if (supertypeRolePlayer != null && supertypeRolePlayer != rolePlayer) { - RecurseColumnIdentifier(null, supertypeRolePlayer, false, listSeparator, ref outputText); + RecurseColumnIdentifier(null, supertypeRolePlayer, false, listSeparator, nextStackCheck ?? (nextStackCheck = CreateColumnIdentifierStackCheck(rolePlayer, stackCheck)), ref outputText); identifierWritten = true; } else @@ -3262,7 +3275,7 @@ { outputText.Append(listSeparator); } - RecurseColumnIdentifier(identifierRole, null, false, listSeparator, ref outputText); + RecurseColumnIdentifier(identifierRole, null, false, listSeparator, nextStackCheck ?? (nextStackCheck = CreateColumnIdentifierStackCheck(rolePlayer, stackCheck)), ref outputText); } } identifierWritten = true; @@ -3287,13 +3300,26 @@ { outputText.Append(listSeparator); } - RecurseColumnIdentifier(factRole, null, false, listSeparator, ref outputText); + RecurseColumnIdentifier(factRole, null, false, listSeparator, nextStackCheck ?? (nextStackCheck = CreateColumnIdentifierStackCheck(rolePlayer, stackCheck)), ref outputText); } } outputText.Append(")"); return null; } /// <summary> + /// Helper to create a delegate to determine if a role player is recursively defined. + /// </summary> + /// <param name="rolePlayer">The current role player.</param> + /// <param name="contextStackCheck">A context delegate from higher up in the object tree.</param> + /// <returns>New stack check.</returns> + private static Predicate<ObjectType> CreateColumnIdentifierStackCheck(ObjectType rolePlayer, Predicate<ObjectType> contextStackCheck) + { + return delegate(ObjectType recursiveRolePlayer) + { + return rolePlayer == recursiveRolePlayer || (contextStackCheck != null && contextStackCheck(recursiveRolePlayer)); + }; + } + /// <summary> /// Determine if the specified instance is empty. A <see cref="ValueTypeInstance"/> /// is never empty, an <see cref="EntityTypeInstance"/> is empty if it has not /// attached instances, and a <see cref="EntityTypeSubtypeInstance"/> is empty if This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2014-11-21 16:29:24
|
Revision: 1550 http://sourceforge.net/p/orm/code/1550 Author: mcurland Date: 2014-11-21 16:29:21 +0000 (Fri, 21 Nov 2014) Log Message: ----------- Bug fixes: * Dragging fact types shapes from the model browser with attached role names and constraint shapes was creating multiple instances of each shape. This was a bad side effect of changes introduced and [1508] and [1527]. The MultiShapeUtility.ForceMultipleShapes directive is now removed and replaced with MultiShapeUtility.AllowMultipleShapes between creation and fixup of a new child shape resulting from an object browser drag operation. * Added modality checks to the intersection of simple mandatory and single column subset constraints. There was no handling for this. This was a targeted fix and does not fix mandatory modality issues with other set comparison constraints. * Don't serialized references to roles in the orm:PlayedRoles element if those roles are defined in an alternate partition. Continuation of work on [1519]. Modified Paths: -------------- trunk/ORMModel/Framework/FrameworkServices.cs trunk/ORMModel/ObjectModel/Constraint.cs trunk/ORMModel/ObjectModel/ORMCore.SerializationExtensions.cs trunk/ORMModel/ObjectModel/ORMCore.SerializationExtensions.xml trunk/ORMModel/ShapeModel/ORMDiagram.cs trunk/ORMModel/Shell/ORMDocView.cs Modified: trunk/ORMModel/Framework/FrameworkServices.cs =================================================================== --- trunk/ORMModel/Framework/FrameworkServices.cs 2014-08-07 06:25:14 UTC (rev 1549) +++ trunk/ORMModel/Framework/FrameworkServices.cs 2014-11-21 16:29:21 UTC (rev 1550) @@ -380,9 +380,9 @@ #endregion // AutomatedElementFilterService class #region ICreateSignalTransactionItems /// <summary> - /// Some model changes are used solely trigger other behavior within + /// Some model changes are used solely to trigger other behavior within /// a transaction. However, the system does not distinguish between - /// these changes an normal changes. If a signal occurs without a normal + /// these changes and normal changes. If a signal occurs without a normal /// change, then a transaction may appear to be meaningful to the user /// by displaying in the undo/redo stack even when no significant changes /// have occurred. A domain model class can implement this interface to @@ -400,7 +400,7 @@ /// </summary> /// <returns>Enumeration of domain property id/callback function pairs. /// If a callback function is not provided, then all changes of this - /// type can be ignored. Otherwise, the return true from the registered + /// type can be ignored. Otherwise, return true from the registered /// predicate to support a change.</returns> IEnumerable<KeyValuePair<Guid, Predicate<ElementPropertyChangedEventArgs>>> GetSignalPropertyChanges(); } Modified: trunk/ORMModel/ObjectModel/Constraint.cs =================================================================== --- trunk/ORMModel/ObjectModel/Constraint.cs 2014-08-07 06:25:14 UTC (rev 1549) +++ trunk/ORMModel/ObjectModel/Constraint.cs 2014-11-21 16:29:21 UTC (rev 1550) @@ -1459,6 +1459,8 @@ { return; } + IHasAlternateOwner toAlternateOwner; + object constraintOwner = (null == (toAlternateOwner = setConstraint as IHasAlternateOwner)) ? null : toAlternateOwner.UntypedAlternateOwner; int validationCount = validations.Count; ConstraintModality modality = setConstraint.Modality; for (int iValidation = 0; iValidation < validationCount; ++iValidation) @@ -1493,7 +1495,8 @@ IConstraint eligibleConstraint = eligibleSequence.Constraint; if (eligibleConstraint.ConstraintStorageStyle == ConstraintStorageStyle.SetConstraint && (modalityChange || validationInfo.TestModality(eligibleConstraint.Modality, modality)) && - Array.IndexOf<ConstraintType>(validationInfo.ConstraintTypesInPotentialConflict, constraintType) != -1) + Array.IndexOf<ConstraintType>(validationInfo.ConstraintTypesInPotentialConflict, constraintType) != -1 && + constraintOwner == ((null == (toAlternateOwner = eligibleConstraint as IHasAlternateOwner)) ? null : toAlternateOwner.UntypedAlternateOwner)) { // The delayed validation mechanism automatically takes care of any duplicate requests FrameworkDomainModel.DelayValidateElement(eligibleSequence, DelayValidateSetConstraintSubsetPattern); @@ -1504,6 +1507,36 @@ } break; default: + if (modalityChange) + { + // must also be validated. + IList<Role> roles = setConstraint.RoleCollection; + int roleCount = roles.Count; + for (int i = 0; i < roleCount; ++i) + { + Role selectedRole = roles[i]; + LinkedElementCollection<ConstraintRoleSequence> sequences = selectedRole.ConstraintRoleSequenceCollection; + int sequenceCount = sequences.Count; + for (int j = 0; j < sequenceCount; ++j) + { + ConstraintRoleSequence eligibleSequence = sequences[j]; + IConstraint eligibleConstraint; + if (eligibleSequence != setConstraint && + -1 != Array.IndexOf<ConstraintType>(validationInfo.ConstraintTypesInPotentialConflict, (eligibleConstraint = eligibleSequence.Constraint).ConstraintType)) + { + if (validationInfo.DomainRoleToError.HasValue) { + DelayValidateConstraintPatternError(setConstraint); + } + if (validationInfo.IntersectingDomainRoleToError.HasValue && + constraintOwner == ((null == (toAlternateOwner = eligibleConstraint as IHasAlternateOwner)) ? null : toAlternateOwner.UntypedAlternateOwner)) + { + DelayValidateConstraintPatternError(eligibleConstraint); + } + } + + } + } + } // Isn't a SetConstraint, move on break; } @@ -1563,7 +1596,7 @@ { IConstraint intersectingConstraint = intersectingSequence.Constraint; if (validationInfo.TestModality(modality, intersectingConstraint.Modality) && - (validationInfo.ConstraintTypesInPotentialConflict as IList<ConstraintType>).Contains(intersectingConstraint.ConstraintType)) + -1 != Array.IndexOf(validationInfo.ConstraintTypesInPotentialConflict, intersectingConstraint.ConstraintType)) { SetConstraint intersectingSetConstraint = (SetConstraint)intersectingSequence; LinkedElementCollection<Role> intersectingRoles = intersectingSetConstraint.RoleCollection; @@ -4715,7 +4748,7 @@ if (intersectingConstraint != setComparisonConstraint && constraintOwner == ((null == (toAlternateOwner = intersectingConstraint as IHasAlternateOwner)) ? null : toAlternateOwner.UntypedAlternateOwner) && validationInfo.TestModality(currentModality, intersectingConstraint.Modality) && - (validationInfo.ConstraintTypesInPotentialConflict as IList<ConstraintType>).Contains(intersectingConstraint.ConstraintType)) + -1 != Array.IndexOf<ConstraintType>(validationInfo.ConstraintTypesInPotentialConflict, intersectingConstraint.ConstraintType)) { if (constraintsToCheck == null) { @@ -4936,6 +4969,8 @@ object constraintOwner = (null == (toAlternateOwner = setComparisonConstraint as IHasAlternateOwner)) ? null : toAlternateOwner.UntypedAlternateOwner; int validationCount = validations.Count; ConstraintModality constraintModality = setComparisonConstraint.Modality; + LinkedElementCollection<SetComparisonConstraintRoleSequence> comparisonConstraintSequences = null; + int comparisonConstraintSequencesCount = 0; for (int iValidation = 0; iValidation < validationCount; ++iValidation) { IntersectingConstraintValidation validationInfo = validations[iValidation]; @@ -4962,8 +4997,11 @@ } break; case IntersectingConstraintPattern.SetComparisonConstraintSuperset: - LinkedElementCollection<SetComparisonConstraintRoleSequence> comparisonConstraintSequences = setComparisonConstraint.RoleSequenceCollection; - int comparisonConstraintSequencesCount = comparisonConstraintSequences.Count; + if (comparisonConstraintSequences == null) + { + comparisonConstraintSequences = setComparisonConstraint.RoleSequenceCollection; + comparisonConstraintSequencesCount = comparisonConstraintSequences.Count; + } for (int i = 0; i < comparisonConstraintSequencesCount; ++i) { SetComparisonConstraintRoleSequence comparisonConstraintSequence = comparisonConstraintSequences[i]; @@ -4985,7 +5023,7 @@ if (eligibleConstraint != setComparisonConstraint && constraintOwner == ((null == (toAlternateOwner = eligibleConstraint as IHasAlternateOwner)) ? null : toAlternateOwner.UntypedAlternateOwner) && (modalityChange || validationInfo.TestModality(constraintModality, eligibleConstraint.Modality)) && - (validationInfo.ConstraintTypesInPotentialConflict as IList<ConstraintType>).Contains(eligibleConstraint.ConstraintType) && + -1 != Array.IndexOf<ConstraintType>(validationInfo.ConstraintTypesInPotentialConflict, eligibleConstraint.ConstraintType) && !matchCallback(eligibleConstraint)) { return; @@ -4994,6 +5032,48 @@ } } break; + default: + if (modalityChange) + { + if (comparisonConstraintSequences == null) + { + comparisonConstraintSequences = setComparisonConstraint.RoleSequenceCollection; + comparisonConstraintSequencesCount = comparisonConstraintSequences.Count; + } + for (int i = 0; i < comparisonConstraintSequencesCount; ++i) + { + SetComparisonConstraintRoleSequence comparisonConstraintSequence = comparisonConstraintSequences[i]; + LinkedElementCollection<Role> sequenceRoles = comparisonConstraintSequence.RoleCollection; + int sequenceRoleCount = sequenceRoles.Count; + for (int j = 0; j < sequenceRoleCount; ++j) + { + Role selectedRole = sequenceRoles[j]; + LinkedElementCollection<ConstraintRoleSequence> sequences = selectedRole.ConstraintRoleSequenceCollection; + int sequenceCount = sequences.Count; + for (int k = 0; k < sequenceCount; ++k) + { + ConstraintRoleSequence eligibleSequence = sequences[k]; + IConstraint eligibleConstraint = eligibleSequence.Constraint; + if (eligibleConstraint != setComparisonConstraint && + -1 != Array.IndexOf<ConstraintType>(validationInfo.ConstraintTypesInPotentialConflict, eligibleConstraint.ConstraintType)) + { + if (validationInfo.DomainRoleToError.HasValue && + !matchCallback(setComparisonConstraint)) + { + return; + } + if (validationInfo.IntersectingDomainRoleToError.HasValue && + constraintOwner == ((null == (toAlternateOwner = eligibleConstraint as IHasAlternateOwner)) ? null : toAlternateOwner.UntypedAlternateOwner) && + !matchCallback(eligibleConstraint)) + { + return; + } + } + } + } + } + } + break; } } } @@ -11771,7 +11851,7 @@ //Implication new IntersectingConstraintValidation( IntersectingConstraintPattern.SubsetImpliedByMandatory, - IntersectingConstraintPatternOptions.None, + IntersectingConstraintPatternOptions.IntersectingConstraintModalityNotStronger, null, SetComparisonConstraintHasEqualityOrSubsetImpliedByMandatoryError.SetComparisonConstraintDomainRoleId, ConstraintType.Subset), @@ -11787,7 +11867,7 @@ //Bad ORM new IntersectingConstraintValidation( IntersectingConstraintPattern.SubsetContradictsMandatory, - IntersectingConstraintPatternOptions.None, + IntersectingConstraintPatternOptions.IntersectingConstraintModalityNotStronger, MandatoryConstraintHasNotWellModeledSubsetAndMandatoryError.MandatoryConstraintDomainRoleId, // UNDONE: CONSTRAINTINTERSECTION: This should be a many relationship SubsetConstraintHasNotWellModeledSubsetAndMandatoryError.SubsetConstraintDomainRoleId, ConstraintType.Subset), @@ -11986,7 +12066,7 @@ //Implication new IntersectingConstraintValidation( IntersectingConstraintPattern.SubsetImpliedByMandatory, - IntersectingConstraintPatternOptions.None, + IntersectingConstraintPatternOptions.IntersectingConstraintModalityNotWeaker, SetComparisonConstraintHasEqualityOrSubsetImpliedByMandatoryError.SetComparisonConstraintDomainRoleId, null, ConstraintType.SimpleMandatory), @@ -11994,7 +12074,7 @@ //Bad ORM new IntersectingConstraintValidation( IntersectingConstraintPattern.SubsetContradictsMandatory, - IntersectingConstraintPatternOptions.IntersectingConstraintModalityIgnored, + IntersectingConstraintPatternOptions.IntersectingConstraintModalityNotWeaker, SubsetConstraintHasNotWellModeledSubsetAndMandatoryError.SubsetConstraintDomainRoleId, MandatoryConstraintHasNotWellModeledSubsetAndMandatoryError.MandatoryConstraintDomainRoleId, // UNDONE: CONSTRAINTINTERSECTION: This should be a many relationship ConstraintType.SimpleMandatory), Modified: trunk/ORMModel/ObjectModel/ORMCore.SerializationExtensions.cs =================================================================== --- trunk/ORMModel/ObjectModel/ORMCore.SerializationExtensions.cs 2014-08-07 06:25:14 UTC (rev 1549) +++ trunk/ORMModel/ObjectModel/ORMCore.SerializationExtensions.cs 2014-11-21 16:29:21 UTC (rev 1550) @@ -1619,15 +1619,21 @@ if (roleId == ObjectTypePlaysRole.PlayedRoleDomainRoleId) { string name = "Role"; - if (DomainRoleInfo.GetRolePlayer(elementLink, ObjectTypePlaysRole.PlayedRoleDomainRoleId) is SubtypeMetaRole) + CustomSerializedElementWriteStyle writeStyle = CustomSerializedElementWriteStyle.Element; + if (elementLink.Partition.AlternateId != null) { + name = ""; + writeStyle = CustomSerializedElementWriteStyle.NotWritten; + } + else if (DomainRoleInfo.GetRolePlayer(elementLink, ObjectTypePlaysRole.PlayedRoleDomainRoleId) is SubtypeMetaRole) + { name = "SubtypeMetaRole"; } else if (DomainRoleInfo.GetRolePlayer(elementLink, ObjectTypePlaysRole.PlayedRoleDomainRoleId) is SupertypeMetaRole) { name = "SupertypeMetaRole"; } - return new CustomSerializedElementInfo(null, name, null, CustomSerializedElementWriteStyle.Element, null); + return new CustomSerializedElementInfo(null, name, null, writeStyle, null); } if (roleId == EntityTypeHasPreferredIdentifier.PreferredIdentifierDomainRoleId) { Modified: trunk/ORMModel/ObjectModel/ORMCore.SerializationExtensions.xml =================================================================== --- trunk/ORMModel/ObjectModel/ORMCore.SerializationExtensions.xml 2014-08-07 06:25:14 UTC (rev 1549) +++ trunk/ORMModel/ObjectModel/ORMCore.SerializationExtensions.xml 2014-11-21 16:29:21 UTC (rev 1550) @@ -332,6 +332,24 @@ <se:Embed RelationshipName="ValueTypeHasValueConstraint" RoleName="ValueConstraint"/> </se:Container> <se:Link Name="Role" RelationshipName="ObjectTypePlaysRole" RoleName="PlayedRole"> + <se:ConditionalName Name="" WriteStyle="NotWritten"> + <plx:binaryOperator type="identityInequality"> + <plx:left> + <plx:callInstance name="AlternateId" type="property"> + <plx:callObject> + <plx:callInstance name="Partition" type="property"> + <plx:callObject> + <plx:nameRef name="elementLink" type="parameter"/> + </plx:callObject> + </plx:callInstance> + </plx:callObject> + </plx:callInstance> + </plx:left> + <plx:right> + <plx:nullKeyword/> + </plx:right> + </plx:binaryOperator> + </se:ConditionalName> <se:ConditionalName Name="SubtypeMetaRole"> <plx:binaryOperator type="typeEquality"> <plx:left> Modified: trunk/ORMModel/ShapeModel/ORMDiagram.cs =================================================================== --- trunk/ORMModel/ShapeModel/ORMDiagram.cs 2014-08-07 06:25:14 UTC (rev 1549) +++ trunk/ORMModel/ShapeModel/ORMDiagram.cs 2014-11-21 16:29:21 UTC (rev 1550) @@ -380,6 +380,7 @@ } Dictionary<object, object> topLevelContextInfo = null; object placementKey; + bool tightenPlacementKey = false; switch (placementOption) { case ORMPlacementOption.AllowMultipleShapes: @@ -387,6 +388,7 @@ break; case ORMPlacementOption.CreateNewShape: placementKey = MultiShapeUtility.ForceMultipleShapes; + tightenPlacementKey = true; break; default: placementKey = null; @@ -443,6 +445,12 @@ } if (shapeElement != null) { + if (tightenPlacementKey) + { + // We only want to force create the top level element, not its child elements. + topLevelContextInfo.Remove(placementKey); + topLevelContextInfo.Add(placementKey = MultiShapeUtility.AllowMultipleShapes, null); + } // Perform preliminary fixup if (null != beforeStandardFixupCallback) { @@ -450,7 +458,7 @@ } if (factType != null) { - FixupFactType(crossStoreCopy ? (FactType)element : factType, (FactTypeShape)shapeElement, false); + FixupFactType(crossStoreCopy ? (FactType)element : factType, shapeElement as FactTypeShape, false); } else if (objectType != null) { @@ -527,6 +535,7 @@ } Dictionary<object, object> topLevelContextInfo = null; object placementKey; + bool tightenPlacementKey = false; switch (placementOption) { case ORMPlacementOption.AllowMultipleShapes: @@ -534,6 +543,7 @@ break; case ORMPlacementOption.CreateNewShape: placementKey = MultiShapeUtility.ForceMultipleShapes; + tightenPlacementKey = true; break; default: placementKey = null; @@ -550,6 +560,12 @@ } if (shapeElement != null && fixupShapeCallback != null) { + if (tightenPlacementKey) + { + // We only want to force create the top level element, not its child elements. + topLevelContextInfo.Remove(placementKey); + topLevelContextInfo.Add(placementKey = MultiShapeUtility.AllowMultipleShapes, null); + } fixupShapeCallback(elementToPlace, shapeElement); } if (placementKey != null) @@ -585,12 +601,16 @@ } private void FixupFactType(FactType factType, FactTypeShape factTypeShape, bool childShapesMerged) { + if (factTypeShape == null) + { + return; + } bool duplicateShape = false; Objectification objectification = factType.Objectification; ObjectType nestingType = (objectification != null) ? objectification.NestingType : null; bool lookForNonDisplayedRelatedTypes = false; bool haveNonDisplayedRelatedTypes = false; - if (childShapesMerged && factTypeShape != null && IsMergingExternalStore) + if (childShapesMerged && IsMergingExternalStore) { // Override this setting if we're merging from an external store, which // can produce a merge of a shape that does not have all of the elements @@ -631,6 +651,13 @@ } } } + + // Make sure the role name shape visibility is correct. Visibility + // settings do not survive a merge operation, so we need to check + // this explicitly regardless of merge state. + factTypeShape.UpdateRoleNameDisplay(); + + // Handle other shapes related to roles. LinkedElementCollection<RoleBase> roleCollection = factType.RoleCollection; int roleCount = roleCollection.Count; int? unaryRoleIndex = FactType.GetUnaryRoleIndex(roleCollection); @@ -668,49 +695,19 @@ FixupRelatedLinks(DomainRoleInfo.GetElementLinks<ElementLink>(role, FactSetComparisonConstraint.FactTypeDomainRoleId)); } - // Make sure the role name shape visibility is correct. Visibility - // settings do not survive a merge operation, so we need to check - // this explicitly regardless of merge state. - factTypeShape.UpdateRoleNameDisplay(); - // Get the role value constraint and the link to it. RoleHasValueConstraint valueConstraintLink = RoleHasValueConstraint.GetLinkToValueConstraint(role); UnaryRoleCardinalityConstraint unaryRoleCardinality = (unaryRole == role) ? unaryRole.Cardinality : null; if (!childShapesMerged) { - // Pick up the role shape - //check if we have a specific shape or need to use the model element - if (factTypeShape == null) - { - FixUpLocalDiagram(factType, role); - } - else - { - FixUpLocalDiagram(factTypeShape as ShapeElement, role); - } - if (valueConstraintLink != null) { - if (factTypeShape == null) - { - FixUpLocalDiagram(factType, valueConstraintLink.ValueConstraint); - } - else - { - FixUpLocalDiagram(factTypeShape as ShapeElement, valueConstraintLink.ValueConstraint); - } + FixUpLocalDiagram(factTypeShape as ShapeElement, valueConstraintLink.ValueConstraint); } if (unaryRoleCardinality != null) { - if (factTypeShape == null) - { - FixUpLocalDiagram(factType, unaryRoleCardinality); - } - else - { - FixUpLocalDiagram(factTypeShape as ShapeElement, unaryRoleCardinality); - } + FixUpLocalDiagram(factTypeShape as ShapeElement, unaryRoleCardinality); } } // Role player links are not part of the merge hierarchy, add them for both @@ -725,14 +722,7 @@ LinkedElementCollection<ReadingOrder> orders = factType.ReadingOrderCollection; if (orders.Count != 0) { - if (factTypeShape == null) - { - FixUpLocalDiagram(factType, orders[0]); - } - else - { - FixUpLocalDiagram(factTypeShape as ShapeElement, orders[0]); - } + FixUpLocalDiagram(factTypeShape as ShapeElement, orders[0]); } } if (!duplicateShape) @@ -743,28 +733,10 @@ { if (!childShapesMerged) { - ObjectifiedFactTypeNameShape nameShape; ValueConstraint valueConstraint = nestingType.FindValueConstraint(false); ObjectTypeCardinalityConstraint cardinalityConstraint = nestingType.Cardinality; - if (factTypeShape == null) + if (factTypeShape.DisplayAsObjectType) { - foreach (ShapeElement newShape in FixUpLocalDiagram(factType, nestingType)) - { - if (null != (nameShape = newShape as ObjectifiedFactTypeNameShape)) - { - if (valueConstraint != null) - { - FixUpLocalDiagram(nameShape, valueConstraint); - } - if (cardinalityConstraint != null) - { - FixUpLocalDiagram(nameShape, cardinalityConstraint); - } - } - } - } - else if (factTypeShape.DisplayAsObjectType) - { if (valueConstraint != null) { FixUpLocalDiagram(factTypeShape, valueConstraint); @@ -774,16 +746,11 @@ FixUpLocalDiagram(factTypeShape, cardinalityConstraint); } } - else if (null != (nameShape = FixUpLocalDiagram(factTypeShape as ShapeElement, nestingType) as ObjectifiedFactTypeNameShape)) + else { - if (valueConstraint != null) - { - FixUpLocalDiagram(nameShape, valueConstraint); - } - if (cardinalityConstraint != null) - { - FixUpLocalDiagram(nameShape, cardinalityConstraint); - } + // If this creates an objectified fact type name shape it will fix up + // its own children. + FixUpLocalDiagram(factTypeShape as ShapeElement, nestingType); } } if (!duplicateShape || haveNonDisplayedRelatedTypes) @@ -794,6 +761,10 @@ } private void FixupObjectType(ObjectType objectType, ObjectTypeShape objectTypeShape, bool childShapesMerged) { + if (objectTypeShape == null) + { + return; + } bool duplicateShape = false; bool lookForNonDisplayedRelatedTypes = false; bool haveNonDisplayedRelatedTypes = false; @@ -828,7 +799,7 @@ { FixupObjectTypeLinks(objectType, haveNonDisplayedRelatedTypes); } - if (!childShapesMerged || (objectTypeShape != null && IsMergingExternalStore)) + if (!childShapesMerged || IsMergingExternalStore) { // If the shape comes from the local store the source shape should always be // in sync. However, if the shape comes from an external store, then it may not @@ -837,26 +808,11 @@ ObjectTypeCardinalityConstraint cardinalityConstraint; if (null != (valueConstraint = objectType.FindValueConstraint(false))) { - //check if we have a specific shape or need to use the model element - if (objectTypeShape == null) - { - FixUpLocalDiagram(objectType, valueConstraint); - } - else - { - FixUpLocalDiagram(objectTypeShape as ShapeElement, valueConstraint); - } + FixUpLocalDiagram(objectTypeShape as ShapeElement, valueConstraint); } if (null != (cardinalityConstraint = objectType.Cardinality)) { - if (objectTypeShape == null) - { - FixUpLocalDiagram(objectType, cardinalityConstraint); - } - else - { - FixUpLocalDiagram(objectTypeShape as ShapeElement, cardinalityConstraint); - } + FixUpLocalDiagram(objectTypeShape as ShapeElement, cardinalityConstraint); } } } Modified: trunk/ORMModel/Shell/ORMDocView.cs =================================================================== --- trunk/ORMModel/Shell/ORMDocView.cs 2014-08-07 06:25:14 UTC (rev 1549) +++ trunk/ORMModel/Shell/ORMDocView.cs 2014-11-21 16:29:21 UTC (rev 1550) @@ -685,6 +685,12 @@ /// </summary> protected override void OnSelectionChanged(EventArgs e) { + if (Store == null) + { + // This gets occasional calls during shutdown, especially if VS + // has been sitting for a while. Do a sanity check before proceeding. + return; + } base.OnSelectionChanged(e); CommandManager.UpdateCommandStatus(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2014-08-07 06:25:19
|
Revision: 1549 http://sourceforge.net/p/orm/code/1549 Author: mcurland Date: 2014-08-07 06:25:14 +0000 (Thu, 07 Aug 2014) Log Message: ----------- Minor miss from [1548]. Modified Paths: -------------- trunk/ORMModel/Shell/ORMDocData.cs Modified: trunk/ORMModel/Shell/ORMDocData.cs =================================================================== --- trunk/ORMModel/Shell/ORMDocData.cs 2014-08-06 07:21:12 UTC (rev 1548) +++ trunk/ORMModel/Shell/ORMDocData.cs 2014-08-07 06:25:14 UTC (rev 1549) @@ -454,6 +454,7 @@ ResourceStrings.ExtensionLoadFailureMessageLine, pair.Key, ex.Message); + ++i; } VsShellUtilities.ShowMessageBox( ServiceProvider, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2014-07-10 06:11:07
|
Revision: 1547 http://sourceforge.net/p/orm/code/1547 Author: mcurland Date: 2014-07-10 06:11:04 +0000 (Thu, 10 Jul 2014) Log Message: ----------- * Additional work on build files. The build helpers were not referencing the correct dll versions, so some of the utility files used in the build were not being found on some builds. Specifically, VS2008 build failed on machines without a simultaneous VS2005 development build. Devtools will need to be rebuilt before a normal build. * Fixed bug in relational view, which did not like other kinds of table shapes during a database refresh. Modified Paths: -------------- trunk/AlternateViews/RelationalView/ShapeModel/RelationalShape.cs trunk/SetupEnvironment.bat trunk/Tools/NUBuild/Install.bat trunk/Tools/NUBuild/NUBuild.csproj trunk/Tools/NUBuild/Neumont.Build.targets trunk/Tools/NUBuild/Properties/AssemblyInfo.cs trunk/Tools/NUBuild/Tasks/Ngen.cs trunk/Tools/NUBuildVS/NUBuildVS.csproj trunk/Tools/NUBuildVS/Neumont.Build.VisualStudio.Multitargeting.targets trunk/Tools/NUBuildVS/Neumont.Build.VisualStudio.targets trunk/Tools/NUBuildVS/Properties/AssemblyInfo.cs Modified: trunk/AlternateViews/RelationalView/ShapeModel/RelationalShape.cs =================================================================== --- trunk/AlternateViews/RelationalView/ShapeModel/RelationalShape.cs 2014-07-09 23:23:40 UTC (rev 1546) +++ trunk/AlternateViews/RelationalView/ShapeModel/RelationalShape.cs 2014-07-10 06:11:04 UTC (rev 1547) @@ -77,8 +77,8 @@ { foreach (PresentationElement pel in PresentationViewsSubject.GetPresentation(table)) { - TableShape shape = pel as TableShape; - if (pel != null) + TableShape shape; + if (null != (shape = pel as TableShape)) { Dictionary<object, object> context = objectType.Store.TransactionManager.CurrentTransaction.TopLevelTransaction.Context.ContextInfo; object tablePositionsObject; Modified: trunk/SetupEnvironment.bat =================================================================== --- trunk/SetupEnvironment.bat 2014-07-09 23:23:40 UTC (rev 1546) +++ trunk/SetupEnvironment.bat 2014-07-10 06:11:04 UTC (rev 1547) @@ -99,6 +99,8 @@ IF NOT DEFINED TargetVisualStudioShortProductName (SET TargetVisualStudioShortProductName=VS2005) IF NOT DEFINED TargetVisualStudioLongProductName (SET TargetVisualStudioLongProductName=Visual Studio 2005) IF NOT DEFINED TargetDslToolsAssemblyVersion (SET TargetDslToolsAssemblyVersion=8.2.0.0) +IF NOT DEFINED ProjectToolsVersion (SET ProjectToolsVersion=2.0) +IF NOT DEFINED ProjectToolsAssemblyVersion (SET ProjectToolsAssemblyVersion=2.0.0.0) IF NOT DEFINED VSRegistryConfigHive (SET VSRegistryConfigHive=HKLM) GOTO:EOF @@ -112,12 +114,14 @@ IF NOT DEFINED TargetVisualStudioShortProductName (SET TargetVisualStudioShortProductName=VS2008) IF NOT DEFINED TargetVisualStudioLongProductName (SET TargetVisualStudioLongProductName=Visual Studio 2008) IF NOT DEFINED TargetDslToolsAssemblyVersion (SET TargetDslToolsAssemblyVersion=9.0.0.0) +IF NOT DEFINED ProjectToolsVersion (SET ProjectToolsVersion=3.5) +IF NOT DEFINED ProjectToolsAssemblySuffix (SET ProjectToolsAssemblySuffix=.v3.5) +IF NOT DEFINED ProjectToolsAssemblyVersion (SET ProjectToolsAssemblyVersion=3.5.0.0) IF NOT DEFINED VSRegistryConfigHive (SET VSRegistryConfigHive=HKLM) GOTO:EOF :_SetupVersionVars_v10.0 IF NOT DEFINED TargetFrameworkVersion (SET TargetFrameworkVersion=v4.0) -IF NOT DEFINED TargetFrameworkVersionSuffix (SET TargetFrameworkVersionSuffix=.v4.0) IF NOT DEFINED TargetVisualStudioMajorMinorVersion (SET TargetVisualStudioMajorMinorVersion=10.0) IF NOT DEFINED TargetVisualStudioAssemblyVersion (SET TargetVisualStudioAssemblyVersion=10.0.0.0) IF NOT DEFINED TargetVisualStudioFrameworkAssemblyVersion (SET TargetVisualStudioFrameworkAssemblyVersion=4.0.0.0) @@ -126,6 +130,9 @@ IF NOT DEFINED TargetVisualStudioShortProductName (SET TargetVisualStudioShortProductName=VS2010) IF NOT DEFINED TargetVisualStudioLongProductName (SET TargetVisualStudioLongProductName=Visual Studio 2010) IF NOT DEFINED TargetDslToolsAssemblyVersion (SET TargetDslToolsAssemblyVersion=10.0.0.0) +IF NOT DEFINED ProjectToolsVersion (SET ProjectToolsVersion=4.0) +IF NOT DEFINED ProjectToolsAssemblySuffix (SET ProjectToolsAssemblySuffix=.v4.0) +IF NOT DEFINED ProjectToolsAssemblyVersion (SET ProjectToolsAssemblyVersion=4.0.0.0) IF NOT DEFINED VSRegistryConfigDecorator (SET VSRegistryConfigDecorator=_Config) IF NOT DEFINED VSRegistryConfigHive (SET VSRegistryConfigHive=HKCU) IF NOT DEFINED VSIXExtensionDir (SET VSIXExtensionDir=Extensions\ORM Solutions\Natural ORM Architect\1.0) @@ -133,7 +140,6 @@ :_SetupVersionVars_v11.0 IF NOT DEFINED TargetFrameworkVersion (SET TargetFrameworkVersion=v4.5) -IF NOT DEFINED TargetFrameworkVersionSuffix (SET TargetFrameworkVersionSuffix=.v4.0) IF NOT DEFINED TargetVisualStudioMajorMinorVersion (SET TargetVisualStudioMajorMinorVersion=11.0) IF NOT DEFINED TargetVisualStudioAssemblyVersion (SET TargetVisualStudioAssemblyVersion=11.0.0.0) IF NOT DEFINED TargetVisualStudioFrameworkAssemblyVersion (SET TargetVisualStudioFrameworkAssemblyVersion=4.5.0.0) @@ -142,6 +148,9 @@ IF NOT DEFINED TargetVisualStudioShortProductName (SET TargetVisualStudioShortProductName=VS2012) IF NOT DEFINED TargetVisualStudioLongProductName (SET TargetVisualStudioLongProductName=Visual Studio 2012) IF NOT DEFINED TargetDslToolsAssemblyVersion (SET TargetDslToolsAssemblyVersion=11.0.0.0) +IF NOT DEFINED ProjectToolsVersion (SET ProjectToolsVersion=4.0) +IF NOT DEFINED ProjectToolsAssemblySuffix (SET ProjectToolsAssemblySuffix=.v4.0) +IF NOT DEFINED ProjectToolsAssemblyVersion (SET ProjectToolsAssemblyVersion=4.0.0.0) IF NOT DEFINED VSRegistryConfigDecorator (SET VSRegistryConfigDecorator=_Config) IF NOT DEFINED VSRegistryConfigHive (SET VSRegistryConfigHive=HKCU) IF NOT DEFINED VSIXExtensionDir (SET VSIXExtensionDir=Extensions\ORM Solutions\Natural ORM Architect\1.0) @@ -149,7 +158,6 @@ :_SetupVersionVars_v12.0 IF NOT DEFINED TargetFrameworkVersion (SET TargetFrameworkVersion=v4.5) -IF NOT DEFINED TargetFrameworkVersionSuffix (SET TargetFrameworkVersionSuffix=.v4.0) IF NOT DEFINED TargetVisualStudioMajorMinorVersion (SET TargetVisualStudioMajorMinorVersion=12.0) IF NOT DEFINED TargetVisualStudioAssemblyVersion (SET TargetVisualStudioAssemblyVersion=12.0.0.0) IF NOT DEFINED TargetVisualStudioFrameworkAssemblyVersion (SET TargetVisualStudioFrameworkAssemblyVersion=4.5.0.0) @@ -158,6 +166,9 @@ IF NOT DEFINED TargetVisualStudioShortProductName (SET TargetVisualStudioShortProductName=VS2013) IF NOT DEFINED TargetVisualStudioLongProductName (SET TargetVisualStudioLongProductName=Visual Studio 2013) IF NOT DEFINED TargetDslToolsAssemblyVersion (SET TargetDslToolsAssemblyVersion=12.0.0.0) +IF NOT DEFINED ProjectToolsVersion (SET ProjectToolsVersion=12.0) +IF NOT DEFINED ProjectToolsAssemblySuffix (SET ProjectToolsAssemblySuffix=.v12.0) +IF NOT DEFINED ProjectToolsAssemblyVersion (SET ProjectToolsAssemblyVersion=12.0.0.0) IF NOT DEFINED VSRegistryConfigDecorator (SET VSRegistryConfigDecorator=_Config) IF NOT DEFINED VSRegistryConfigHive (SET VSRegistryConfigHive=HKCU) IF NOT DEFINED VSIXExtensionDir (SET VSIXExtensionDir=Extensions\ORM Solutions\Natural ORM Architect\1.0) Modified: trunk/Tools/NUBuild/Install.bat =================================================================== --- trunk/Tools/NUBuild/Install.bat 2014-07-09 23:23:40 UTC (rev 1546) +++ trunk/Tools/NUBuild/Install.bat 2014-07-10 06:11:04 UTC (rev 1547) @@ -13,7 +13,14 @@ FOR /F "usebackq skip=3 tokens=*" %%A IN (`REG QUERY "HKLM\%VSRegistryRootBase%"`) DO (REG QUERY "%%~A\MSBuild\SafeImports" 1>NUL 2>&1 && IF NOT ERRORLEVEL 1 (REG ADD "%%~A\MSBuild\SafeImports" /v "NUBuild1" /d "%MSBuildExtensionsPath%\Neumont\Neumont.Build.targets" /f)) -gacutil.exe /nologo /f /i "%RootDir%\bin\Neumont.Build.dll" -ngen.exe install "Neumont.Build, Version=1.0.0.0, Culture=neutral, PublicKeyToken=957d5b7d5e79e25f" /NoDependencies /nologo /verbose +::Remove legacy versions +gacutil.exe /nologo /u Neumont.Build,Version=1.0.0.0 1>NUL 2>&1 +gacutil.exe /nologo /u Neumont.Build.VisualStudio,Version=1.0.0.0 1>NUL 2>&1 +::Add new version. We can't do this in the project because we're building the utility that does it. +::Obviously, the utilities need to be on the path for this to work, which will happen automatically in +::a Visual Studio command prompt. +gacutil.exe /nologo /f /i "%RootDir%\bin\Neumont.Build%ProjectToolsAssemblySuffix%.dll" +ngen.exe install "Neumont.Build%ProjectToolsAssemblySuffix%, Version=%ProjectToolsAssemblyVersion%, Culture=neutral, PublicKeyToken=957d5b7d5e79e25f" /NoDependencies /nologo /verbose + GOTO:EOF Modified: trunk/Tools/NUBuild/NUBuild.csproj =================================================================== --- trunk/Tools/NUBuild/NUBuild.csproj 2014-07-09 23:23:40 UTC (rev 1546) +++ trunk/Tools/NUBuild/NUBuild.csproj 2014-07-10 06:11:04 UTC (rev 1547) @@ -11,7 +11,7 @@ <OutputType>Library</OutputType> <AppDesignerFolder>Properties</AppDesignerFolder> <RootNamespace>Neumont.Build</RootNamespace> - <AssemblyName>Neumont.Build</AssemblyName> + <AssemblyName>Neumont.Build$(ProjectToolsAssemblySuffix)</AssemblyName> <SignAssembly>true</SignAssembly> <AssemblyOriginatorKeyFile>..\..\ORMPackage.snk</AssemblyOriginatorKeyFile> <BaseAddress>1413349376</BaseAddress> @@ -30,15 +30,15 @@ <TreatWarningsAsErrors>true</TreatWarningsAsErrors> <UseVSHostingProcess>false</UseVSHostingProcess> <NoWarn>1607</NoWarn> - <DocumentationFile>bin\Neumont.Build.xml</DocumentationFile> + <DocumentationFile>bin\Neumont.Build$(ProjectToolsAssemblySuffix).xml</DocumentationFile> </PropertyGroup> <ItemGroup> <Reference Include="Accessibility"> <EmbedInteropTypes>True</EmbedInteropTypes> </Reference> - <Reference Include="Microsoft.Build.Framework" /> - <Reference Include="Microsoft.Build.Tasks$(TargetFrameworkVersionSuffix)" /> - <Reference Include="Microsoft.Build.Utilities$(TargetFrameworkVersionSuffix)" /> + <Reference Include="Microsoft.Build.Framework, Version=$(ProjectToolsAssemblyVersion), Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> + <Reference Include="Microsoft.Build.Tasks$(ProjectToolsAssemblySuffix), Version=$(ProjectToolsAssemblyVersion), Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> + <Reference Include="Microsoft.Build.Utilities$(ProjectToolsAssemblySuffix), Version=$(ProjectToolsAssemblyVersion), Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> <Reference Include="System" /> <Reference Include="System.Xml" /> </ItemGroup> @@ -47,9 +47,9 @@ <Compile Include="..\..\CommonAssemblyInfo.cs"> <Link>Properties\CommonAssemblyInfo.cs</Link> </Compile> - <Compile Include="..\..\Version.cs"> + <!--<Compile Include="..\..\Version.cs"> <Link>Properties\Version.cs</Link> - </Compile> + </Compile>--> <None Include="..\..\ORMPackage.snk"> <Link>Properties\ORMPackage.snk</Link> </None> @@ -70,7 +70,7 @@ </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <PropertyGroup> - <PreBuildEvent>"$(MSBuildProjectDirectory)\..\..\VersionGenerator.exe"</PreBuildEvent> + <!-- <PreBuildEvent>"$(MSBuildProjectDirectory)\..\..\VersionGenerator.exe"</PreBuildEvent> --> <PostBuildEvent>"$(MSBuildProjectDirectory)\Install.bat"</PostBuildEvent> </PropertyGroup> -</Project> \ No newline at end of file +</Project> Modified: trunk/Tools/NUBuild/Neumont.Build.targets =================================================================== --- trunk/Tools/NUBuild/Neumont.Build.targets 2014-07-09 23:23:40 UTC (rev 1546) +++ trunk/Tools/NUBuild/Neumont.Build.targets 2014-07-10 06:11:04 UTC (rev 1547) @@ -20,7 +20,7 @@ <PropertyGroup> <!-- The name of the assembly that contains the NUBuild tasks. --> - <NUBuildTasksAssemblyName>Neumont.Build, Version=1.0.0.0, Culture=neutral, PublicKeyToken=957d5b7d5e79e25f</NUBuildTasksAssemblyName> + <NUBuildTasksAssemblyName>Neumont.Build$(ProjectToolsAssemblySuffix), Version=$(ProjectToolsAssemblyVersion), Culture=neutral, PublicKeyToken=957d5b7d5e79e25f</NUBuildTasksAssemblyName> </PropertyGroup> <UsingTask TaskName="Gacutil" AssemblyName="$(NUBuildTasksAssemblyName)"/> Modified: trunk/Tools/NUBuild/Properties/AssemblyInfo.cs =================================================================== --- trunk/Tools/NUBuild/Properties/AssemblyInfo.cs 2014-07-09 23:23:40 UTC (rev 1546) +++ trunk/Tools/NUBuild/Properties/AssemblyInfo.cs 2014-07-10 06:11:04 UTC (rev 1547) @@ -3,20 +3,21 @@ using System.Runtime.InteropServices; [assembly: ComVisible(false)] -#if NET_4_0 -[assembly: AssemblyTitle("Neumont.Build.v4.0.dll")] -#else [assembly: AssemblyTitle("Neumont.Build.dll")] -#endif [assembly: AssemblyProduct("Neumont Build System")] [assembly: AssemblyDescription("Neumont Build System - Main DLL")] - -[assembly: Dependency("Microsoft.Build.Framework,", LoadHint.Always)] -#if NET_4_0 -[assembly: Dependency("Microsoft.Build.Utilities.v4.0,", LoadHint.Always)] -[assembly: Dependency("Microsoft.Build.Tasks.v4.0,", LoadHint.Always)] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyInformationalVersion("1.0.0.0")] +[assembly: AssemblyVersion( +#if TOOLS_2_0 +"2.0.0.0" +#elif TOOLS_3_5 +"3.5.0.0" +#elif TOOLS_4_0 +"4.0.0.0" +#elif TOOLS_12_0 +"12.0.0.0" #else -[assembly: Dependency("Microsoft.Build.Utilities,", LoadHint.Always)] -[assembly: Dependency("Microsoft.Build.Tasks,", LoadHint.Always)] +NEW_TOOLS_VERSION #endif -[assembly: Dependency("System.Xml,", LoadHint.Always)] +)] Modified: trunk/Tools/NUBuild/Tasks/Ngen.cs =================================================================== --- trunk/Tools/NUBuild/Tasks/Ngen.cs 2014-07-09 23:23:40 UTC (rev 1546) +++ trunk/Tools/NUBuild/Tasks/Ngen.cs 2014-07-10 06:11:04 UTC (rev 1547) @@ -41,7 +41,14 @@ /// <summary>See <see cref="ToolTask.GenerateFullPathToTool"/>.</summary> protected override string GenerateFullPathToTool() { - return ToolLocationHelper.GetPathToDotNetFrameworkFile(this.ToolName, TargetDotNetFrameworkVersion.VersionLatest); + // Be careful with location ngen doesn't install everywhere + TargetDotNetFrameworkVersion useVersion; +#if NET_4_0 + useVersion = TargetDotNetFrameworkVersion.Version40; +#else + useVersion = TargetDotNetFrameworkVersion.Version20; +#endif + return ToolLocationHelper.GetPathToDotNetFrameworkFile(this.ToolName, useVersion); } /// <summary>See <see cref="ToolTask.ToolName"/>.</summary> protected override string ToolName Modified: trunk/Tools/NUBuildVS/NUBuildVS.csproj =================================================================== --- trunk/Tools/NUBuildVS/NUBuildVS.csproj 2014-07-09 23:23:40 UTC (rev 1546) +++ trunk/Tools/NUBuildVS/NUBuildVS.csproj 2014-07-10 06:11:04 UTC (rev 1547) @@ -10,7 +10,7 @@ <OutputType>Library</OutputType> <AppDesignerFolder>Properties</AppDesignerFolder> <RootNamespace>Neumont.Build.VisualStudio</RootNamespace> - <AssemblyName>Neumont.Build.VisualStudio</AssemblyName> + <AssemblyName>Neumont.Build.VisualStudio$(ProjectToolsAssemblySuffix)</AssemblyName> <SignAssembly>true</SignAssembly> <AssemblyOriginatorKeyFile>..\..\ORMPackage.snk</AssemblyOriginatorKeyFile> <BaseAddress>1414397952</BaseAddress> @@ -32,8 +32,8 @@ <DocumentationFile>bin\Neumont.Build.VisualStudio.xml</DocumentationFile> </PropertyGroup> <ItemGroup> - <Reference Include="Microsoft.Build.Framework" /> - <Reference Include="Microsoft.Build.Utilities$(TargetFrameworkVersionSuffix)" /> + <Reference Include="Microsoft.Build.Framework, Version=$(ProjectToolsAssemblyVersion), Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> + <Reference Include="Microsoft.Build.Utilities$(ProjectToolsAssemblySuffix), Version=$(ProjectToolsAssemblyVersion), Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> <Reference Include="System" /> </ItemGroup> <ItemGroup> @@ -41,9 +41,9 @@ <Compile Include="..\..\CommonAssemblyInfo.cs"> <Link>Properties\CommonAssemblyInfo.cs</Link> </Compile> - <Compile Include="..\..\Version.cs"> + <!-- <Compile Include="..\..\Version.cs"> <Link>Properties\Version.cs</Link> - </Compile> + </Compile> --> <None Include="..\..\ORMPackage.snk"> <Link>Properties\ORMPackage.snk</Link> </None> @@ -57,7 +57,7 @@ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildExtensionsPath)\Neumont\Neumont.Build.targets" /> <PropertyGroup> - <PreBuildEvent>"$(MSBuildProjectDirectory)\..\..\VersionGenerator.exe"</PreBuildEvent> + <!-- <PreBuildEvent>"$(MSBuildProjectDirectory)\..\..\VersionGenerator.exe"</PreBuildEvent> --> <PostBuildEvent>"$(MSBuildProjectDirectory)\Install.bat"</PostBuildEvent> </PropertyGroup> </Project> Modified: trunk/Tools/NUBuildVS/Neumont.Build.VisualStudio.Multitargeting.targets =================================================================== --- trunk/Tools/NUBuildVS/Neumont.Build.VisualStudio.Multitargeting.targets 2014-07-09 23:23:40 UTC (rev 1546) +++ trunk/Tools/NUBuildVS/Neumont.Build.VisualStudio.Multitargeting.targets 2014-07-10 06:11:04 UTC (rev 1547) @@ -43,6 +43,7 @@ <TargetDslToolsAssemblyVersion Condition=" '$(TargetDslToolsAssemblyVersion)' == '' ">8.2.0.0</TargetDslToolsAssemblyVersion> <GeneratedDslFileSuffix Condition=" '$GeneratedDslFileSuffix)' == '' "></GeneratedDslFileSuffix> <ProjectToolsVersion Condition=" '$(ProjectToolsVersion)' == '' ">2.0</ProjectToolsVersion> + <ProjectToolsAssemblyVersion Condition=" '$(ProjectToolsAssemblyVersion)' == '' ">2.0.0.0</ProjectToolsAssemblyVersion> </PropertyGroup> </When> <When Condition=" '$(TargetVisualStudioVersion)' == 'v9.0' "> @@ -59,12 +60,13 @@ <TargetDslToolsAssemblyVersion Condition=" '$(TargetDslToolsAssemblyVersion)' == '' ">9.0.0.0</TargetDslToolsAssemblyVersion> <GeneratedDslFileSuffix Condition=" '$(GeneratedDslFileSuffix)' == '' "></GeneratedDslFileSuffix> <ProjectToolsVersion Condition=" '$(ProjectToolsVersion)' == '' ">3.5</ProjectToolsVersion> + <ProjectToolsAssemblySuffix Condition=" '$(ProjectToolsAssemblySuffix)' == '' ">.v3.5</ProjectToolsAssemblySuffix> + <ProjectToolsAssemblyVersion Condition=" '$(ProjectToolsAssemblyVersion)' == '' ">3.5.0.0</ProjectToolsAssemblyVersion> </PropertyGroup> </When> <When Condition=" '$(TargetVisualStudioVersion)' == 'v10.0' "> <PropertyGroup> <TargetFrameworkVersion Condition=" '$(TargetFrameworkVersion)' == '' ">v4.0</TargetFrameworkVersion> - <TargetFrameworkVersionSuffix Condition=" '$(TargetFrameworkVersionSuffix)' == '' ">.v4.0</TargetFrameworkVersionSuffix> <TargetVisualStudioAssemblyVersion Condition=" '$(TargetVisualStudioAssemblyVersion)' == '' ">10.0.0.0</TargetVisualStudioAssemblyVersion> <TargetVisualStudioAssemblySuffix Condition=" '$(TargetVisualStudioAssemblySuffix)' == '' ">.10.0</TargetVisualStudioAssemblySuffix> <TargetVisualStudioFrameworkAssemblyVersion Condition=" '$(TargetVisualStudioFrameworkAssemblyVersion)' == '' ">4.0.0.0</TargetVisualStudioFrameworkAssemblyVersion> @@ -76,6 +78,8 @@ <TargetDslToolsAssemblyVersion Condition=" '$(TargetDslToolsAssemblyVersion)' == '' ">10.0.0.0</TargetDslToolsAssemblyVersion> <TargetDslToolsVersionSuffix Condition=" '$(TargetDslToolsVersionSuffix)' == '' ">.10.0</TargetDslToolsVersionSuffix> <ProjectToolsVersion Condition=" '$(ProjectToolsVersion)' == '' ">4.0</ProjectToolsVersion> + <ProjectToolsAssemblySuffix Condition=" '$(ProjectToolsAssemblySuffix)' == '' ">.v4.0</ProjectToolsAssemblySuffix> + <ProjectToolsAssemblyVersion Condition=" '$(ProjectToolsAssemblyVersion)' == '' ">4.0.0.0</ProjectToolsAssemblyVersion> <GeneratedDslFileSuffix Condition=" '$(GeneratedDslFileSuffix)' == '' ">.VS2010</GeneratedDslFileSuffix> <DefineConstants>$(DefineConstants);NO_SECURITYPERMISSIONATTRIBUTE</DefineConstants> </PropertyGroup> @@ -83,7 +87,6 @@ <When Condition=" '$(TargetVisualStudioVersion)' == 'v11.0' "> <PropertyGroup> <TargetFrameworkVersion Condition=" '$(TargetFrameworkVersion)' == '' ">v4.5</TargetFrameworkVersion> - <TargetFrameworkVersionSuffix Condition=" '$(TargetFrameworkVersionSuffix)' == '' ">.v4.0</TargetFrameworkVersionSuffix> <TargetVisualStudioAssemblyVersion Condition=" '$(TargetVisualStudioAssemblyVersion)' == '' ">11.0.0.0</TargetVisualStudioAssemblyVersion> <TargetVisualStudioAssemblySuffix Condition=" '$(TargetVisualStudioAssemblySuffix)' == '' ">.11.0</TargetVisualStudioAssemblySuffix> <TargetVisualStudioFrameworkAssemblyVersion Condition=" '$(TargetVisualStudioFrameworkAssemblyVersion)' == '' ">4.5.0.0</TargetVisualStudioFrameworkAssemblyVersion> @@ -95,6 +98,8 @@ <TargetDslToolsAssemblyVersion Condition=" '$(TargetDslToolsAssemblyVersion)' == '' ">11.0.0.0</TargetDslToolsAssemblyVersion> <TargetDslToolsVersionSuffix Condition=" '$(TargetDslToolsVersionSuffix)' == '' ">.11.0</TargetDslToolsVersionSuffix> <ProjectToolsVersion Condition=" '$(ProjectToolsVersion)' == '' ">4.0</ProjectToolsVersion> + <ProjectToolsAssemblySuffix Condition=" '$(ProjectToolsAssemblySuffix)' == '' ">.v4.0</ProjectToolsAssemblySuffix> + <ProjectToolsAssemblyVersion Condition=" '$(ProjectToolsAssemblyVersion)' == '' ">4.0.0.0</ProjectToolsAssemblyVersion> <GeneratedDslFileSuffix Condition=" '$(GeneratedDslFileSuffix)' == '' ">.VS2010</GeneratedDslFileSuffix> <DefineConstants>$(DefineConstants);NO_SECURITYPERMISSIONATTRIBUTE</DefineConstants> </PropertyGroup> @@ -102,7 +107,6 @@ <When Condition=" '$(TargetVisualStudioVersion)' == 'v12.0' "> <PropertyGroup> <TargetFrameworkVersion Condition=" '$(TargetFrameworkVersion)' == '' ">v4.5</TargetFrameworkVersion> - <TargetFrameworkVersionSuffix Condition=" '$(TargetFrameworkVersionSuffix)' == '' ">.v4.0</TargetFrameworkVersionSuffix> <TargetVisualStudioAssemblyVersion Condition=" '$(TargetVisualStudioAssemblyVersion)' == '' ">12.0.0.0</TargetVisualStudioAssemblyVersion> <TargetVisualStudioAssemblySuffix Condition=" '$(TargetVisualStudioAssemblySuffix)' == '' ">.12.0</TargetVisualStudioAssemblySuffix> <TargetVisualStudioFrameworkAssemblyVersion Condition=" '$(TargetVisualStudioFrameworkAssemblyVersion)' == '' ">4.5.0.0</TargetVisualStudioFrameworkAssemblyVersion> @@ -114,6 +118,8 @@ <TargetDslToolsAssemblyVersion Condition=" '$(TargetDslToolsAssemblyVersion)' == '' ">12.0.0.0</TargetDslToolsAssemblyVersion> <TargetDslToolsVersionSuffix Condition=" '$(TargetDslToolsVersionSuffix)' == '' ">.12.0</TargetDslToolsVersionSuffix> <ProjectToolsVersion Condition=" '$(ProjectToolsVersion)' == '' ">12.0</ProjectToolsVersion> + <ProjectToolsAssemblySuffix Condition=" '$(ProjectToolsAssemblySuffix)' == '' ">.v12.0</ProjectToolsAssemblySuffix> + <ProjectToolsAssemblyVersion Condition=" '$(ProjectToolsAssemblyVersion)' == '' ">12.0.0.0</ProjectToolsAssemblyVersion> <GeneratedDslFileSuffix Condition=" '$(GeneratedDslFileSuffix)' == '' ">.VS2010</GeneratedDslFileSuffix> <DefineConstants>$(DefineConstants);NO_SECURITYPERMISSIONATTRIBUTE</DefineConstants> </PropertyGroup> @@ -181,8 +187,32 @@ </When> </Choose> + <!-- Set up conditional compilation constants for tools version. --> + <Choose> + <When Condition=" '$(ProjectToolsVersion)' == '2.0' "> + <PropertyGroup> + <DefineConstants>$(DefineConstants);TOOLS_2_0</DefineConstants> + </PropertyGroup> + </When> + <When Condition=" '$(ProjectToolsVersion)' == '3.5' "> + <PropertyGroup> + <DefineConstants>$(DefineConstants);TOOLS_3_5</DefineConstants> + </PropertyGroup> + </When> + <When Condition=" '$(ProjectToolsVersion)' == '4.0' "> + <PropertyGroup> + <DefineConstants>$(DefineConstants);TOOLS_4_0</DefineConstants> + </PropertyGroup> + </When> + <When Condition=" '$(ProjectToolsVersion)' == '12.0' "> + <PropertyGroup> + <DefineConstants>$(DefineConstants);TOOLS_12_0</DefineConstants> + </PropertyGroup> + </When> + </Choose> - <!-- This is here because the MSBuild schema requires at least one Target or Import to be present. --> + + <!-- This is here because the MSBuild schema requires at least one Target or Import to be present. --> <Target Name="_Neumont_Build_VisualStudio_Multitargeting_DummyTarget" Condition="'false'"/> Modified: trunk/Tools/NUBuildVS/Neumont.Build.VisualStudio.targets =================================================================== --- trunk/Tools/NUBuildVS/Neumont.Build.VisualStudio.targets 2014-07-09 23:23:40 UTC (rev 1546) +++ trunk/Tools/NUBuildVS/Neumont.Build.VisualStudio.targets 2014-07-10 06:11:04 UTC (rev 1547) @@ -20,7 +20,7 @@ <PropertyGroup> <!-- The name of the assembly that contains the NUBuildVS tasks. --> - <NUBuildVSTasksAssemblyName>Neumont.Build.VisualStudio, Version=1.0.0.0, Culture=neutral, PublicKeyToken=957d5b7d5e79e25f</NUBuildVSTasksAssemblyName> + <NUBuildVSTasksAssemblyName>Neumont.Build.VisualStudio$(ProjectToolsAssemblySuffix), Version=$(ProjectToolsAssemblyVersion), Culture=neutral, PublicKeyToken=957d5b7d5e79e25f</NUBuildVSTasksAssemblyName> </PropertyGroup> <UsingTask TaskName="VsSdkLocator" AssemblyName="$(NUBuildVSTasksAssemblyName)"/> Modified: trunk/Tools/NUBuildVS/Properties/AssemblyInfo.cs =================================================================== --- trunk/Tools/NUBuildVS/Properties/AssemblyInfo.cs 2014-07-09 23:23:40 UTC (rev 1546) +++ trunk/Tools/NUBuildVS/Properties/AssemblyInfo.cs 2014-07-10 06:11:04 UTC (rev 1547) @@ -7,5 +7,18 @@ [assembly: AssemblyProduct("Neumont Build System")] [assembly: AssemblyDescription("Neumont Build System - Visual Studio Targets DLL")] -[assembly: Dependency("Microsoft.Build.Framework,", LoadHint.Always)] -[assembly: Dependency("Microsoft.Build.Utilities,", LoadHint.Always)] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyInformationalVersion("1.0.0.0")] +[assembly: AssemblyVersion( +#if TOOLS_2_0 +"2.0.0.0" +#elif TOOLS_3_5 +"3.5.0.0" +#elif TOOLS_4_0 +"4.0.0.0" +#elif TOOLS_12_0 +"12.0.0.0" +#else +NEW_TOOLS_VERSION +#endif +)] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2014-07-09 23:23:50
|
Revision: 1546 http://sourceforge.net/p/orm/code/1546 Author: mcurland Date: 2014-07-09 23:23:40 +0000 (Wed, 09 Jul 2014) Log Message: ----------- The recent changes from 4.0 to 12.0 as the default ToolsVersion for all project files (as part of the VS2013 work in [1533]) stopped the project files from loading in Visual Studio 2008. The ToolsVersion for all project files is now set to a fake tools version (12.34), and this version needs to match the corresponding tool requirements for each VS version. To facilitate this, I've added a VSVer.bat to update the registry keys and set the TargetVisualStudioVersion for each VS release. The added version-specific batch files simply call VSVer (VS2008.bat runs VSVer 2008). These batch files need to be run from the corresponding 'Visual Studio 20xx Command Prompt' (opened as an Administrator) before launching a solutions in Visual Studio. Note that the toolsversion setting was usually provided for a command-line build, effectively overriding the value in the .csproj file. Build batch files have been updated so that this is always the case. However, VS cannot be persuaded to pay attention to any similar tools version setting, and the placement of this attribute on the root element of .csproj file means that it cannot be macroized, so some creativity was required to allow a single project file to open in all versions of VS. Modified Paths: -------------- trunk/AlternateViews/BarkerERView/BarkerERView.csproj trunk/AlternateViews/RelationalView/RelationalView.csproj trunk/BuildAllVS2010.bat trunk/BuildAllVS2013.bat trunk/BuildDevToolsVS2010.bat trunk/BuildDevToolsVS2013.bat trunk/BuildSetupVS2010.bat trunk/BuildSetupVS2013.bat trunk/BuildVS2010.bat trunk/BuildVS2013.bat trunk/CustomProperties/CustomProperties.csproj trunk/EntityRelationship/BarkerErModel/BarkerErModel.csproj trunk/EntityRelationship/OialBerBridge/OialBerBridge.csproj trunk/ExtensionExample/ExtensionExample.csproj trunk/FirstTimeBuildAllVS2008.bat trunk/FirstTimeBuildVS2010.bat trunk/FirstTimeBuildVS2013.bat trunk/OIALModel/OIALModel.csproj trunk/ORMModel/ORMModel.csproj trunk/Oial/ORMOialBridge/ORMOialBridge.csproj trunk/Oial/OialModel/OialModel.csproj trunk/README.txt trunk/RelationalModel/DcilModel/DcilModel.csproj trunk/RelationalModel/OialDcilBridge/OialDcilBridge.csproj trunk/Tools/DatabaseImport/DatabaseImport.csproj trunk/Tools/DisableRuleDirectiveProcessor/DisableRuleDirectiveProcessor.csproj trunk/Tools/NUBuild/NUBuild.csproj trunk/Tools/NUBuildVS/Install.bat trunk/Tools/NUBuildVS/NUBuildVS.csproj trunk/Tools/ORMCustomTool/ORMCustomTool.csproj trunk/Tools/VersionGenerator/VersionGenerator.csproj trunk/XML/GenerationSamples/GenerationSamples.csproj Added Paths: ----------- trunk/VS2005.bat trunk/VS2008.bat trunk/VS2010.bat trunk/VS2012.bat trunk/VS2013.bat trunk/VSVer.bat Modified: trunk/AlternateViews/BarkerERView/BarkerERView.csproj =================================================================== --- trunk/AlternateViews/BarkerERView/BarkerERView.csproj 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/AlternateViews/BarkerERView/BarkerERView.csproj 2014-07-09 23:23:40 UTC (rev 1546) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project ToolsVersion="12.34" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)\Neumont\VisualStudio\Neumont.Build.VisualStudio.Multitargeting.targets" /> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> Modified: trunk/AlternateViews/RelationalView/RelationalView.csproj =================================================================== --- trunk/AlternateViews/RelationalView/RelationalView.csproj 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/AlternateViews/RelationalView/RelationalView.csproj 2014-07-09 23:23:40 UTC (rev 1546) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project ToolsVersion="12.34" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)\Neumont\VisualStudio\Neumont.Build.VisualStudio.Multitargeting.targets" /> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> Modified: trunk/BuildAllVS2010.bat =================================================================== --- trunk/BuildAllVS2010.bat 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/BuildAllVS2010.bat 2014-07-09 23:23:40 UTC (rev 1546) @@ -7,6 +7,7 @@ SET DegradeToolsVersion=/toolsversion:3.5 ) ELSE ( SET TargetVisualStudioVersion=v10.0 + SET DegradeToolsVersion=/toolsversion:4.0 ) CALL "%~dp0BuildAll.bat" %* /consoleloggerparameters:DisableMPLogging %DegradeToolsVersion% Modified: trunk/BuildAllVS2013.bat =================================================================== --- trunk/BuildAllVS2013.bat 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/BuildAllVS2013.bat 2014-07-09 23:23:40 UTC (rev 1546) @@ -11,6 +11,7 @@ SET DegradeToolsVersion=/toolsversion:4.0 ) ELSE ( SET TargetVisualStudioVersion=v12.0 + SET DegradeToolsVersion=/toolsversion:12.0 ) CALL "%~dp0BuildAll.bat" %* /consoleloggerparameters:DisableMPLogging %DegradeToolsVersion% \ No newline at end of file Modified: trunk/BuildDevToolsVS2010.bat =================================================================== --- trunk/BuildDevToolsVS2010.bat 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/BuildDevToolsVS2010.bat 2014-07-09 23:23:40 UTC (rev 1546) @@ -7,6 +7,7 @@ SET DegradeToolsVersion=/toolsversion:3.5 ) ELSE ( SET TargetVisualStudioVersion=v10.0 + SET DegradeToolsVersion=/toolsversion:4.0 ) CALL "%~dp0BuildDevTools.bat" %* /consoleloggerparameters:DisableMPLogging %DegradeToolsVersion% \ No newline at end of file Modified: trunk/BuildDevToolsVS2013.bat =================================================================== --- trunk/BuildDevToolsVS2013.bat 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/BuildDevToolsVS2013.bat 2014-07-09 23:23:40 UTC (rev 1546) @@ -11,6 +11,7 @@ SET DegradeToolsVersion=/toolsversion:4.0 ) ELSE ( SET TargetVisualStudioVersion=v12.0 + SET DegradeToolsVersion=/toolsversion:12.0 ) CALL "%~dp0BuildDevTools.bat" %* /consoleloggerparameters:DisableMPLogging %DegradeToolsVersion% \ No newline at end of file Modified: trunk/BuildSetupVS2010.bat =================================================================== --- trunk/BuildSetupVS2010.bat 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/BuildSetupVS2010.bat 2014-07-09 23:23:40 UTC (rev 1546) @@ -7,6 +7,7 @@ SET DegradeToolsVersion=/toolsversion:3.5 ) ELSE ( SET TargetVisualStudioVersion=v10.0 + SET DegradeToolsVersion=/toolsversion:4.0 ) CALL "%~dp0BuildSetup.bat" %* /consoleloggerparameters:DisableMPLogging %DegradeToolsVersion% Modified: trunk/BuildSetupVS2013.bat =================================================================== --- trunk/BuildSetupVS2013.bat 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/BuildSetupVS2013.bat 2014-07-09 23:23:40 UTC (rev 1546) @@ -11,6 +11,7 @@ SET DegradeToolsVersion=/toolsversion:4.0 ) ELSE ( SET TargetVisualStudioVersion=v12.0 + SET DegradeToolsVersion=/toolsversion:12.0 ) CALL "%~dp0BuildSetup.bat" %* /consoleloggerparameters:DisableMPLogging %DegradeToolsVersion% Modified: trunk/BuildVS2010.bat =================================================================== --- trunk/BuildVS2010.bat 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/BuildVS2010.bat 2014-07-09 23:23:40 UTC (rev 1546) @@ -7,6 +7,7 @@ SET DegradeToolsVersion=/toolsversion:3.5 ) ELSE ( SET TargetVisualStudioVersion=v10.0 + SET DegradeToolsVersion=/toolsversion:4.0 ) CALL "%~dp0Build.bat" %* /consoleloggerparameters:DisableMPLogging %DegradeToolsVersion% \ No newline at end of file Modified: trunk/BuildVS2013.bat =================================================================== --- trunk/BuildVS2013.bat 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/BuildVS2013.bat 2014-07-09 23:23:40 UTC (rev 1546) @@ -11,6 +11,7 @@ SET DegradeToolsVersion=/toolsversion:4.0 ) ELSE ( SET TargetVisualStudioVersion=v12.0 + SET DegradeToolsVersion=/toolsversion:12.0 ) CALL "%~dp0Build.bat" %* /consoleloggerparameters:DisableMPLogging %DegradeToolsVersion% \ No newline at end of file Modified: trunk/CustomProperties/CustomProperties.csproj =================================================================== --- trunk/CustomProperties/CustomProperties.csproj 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/CustomProperties/CustomProperties.csproj 2014-07-09 23:23:40 UTC (rev 1546) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project ToolsVersion="12.34" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)\Neumont\VisualStudio\Neumont.Build.VisualStudio.Multitargeting.targets" /> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> Modified: trunk/EntityRelationship/BarkerErModel/BarkerErModel.csproj =================================================================== --- trunk/EntityRelationship/BarkerErModel/BarkerErModel.csproj 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/EntityRelationship/BarkerErModel/BarkerErModel.csproj 2014-07-09 23:23:40 UTC (rev 1546) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project ToolsVersion="12.34" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)\Neumont\VisualStudio\Neumont.Build.VisualStudio.Multitargeting.targets" /> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> Modified: trunk/EntityRelationship/OialBerBridge/OialBerBridge.csproj =================================================================== --- trunk/EntityRelationship/OialBerBridge/OialBerBridge.csproj 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/EntityRelationship/OialBerBridge/OialBerBridge.csproj 2014-07-09 23:23:40 UTC (rev 1546) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project ToolsVersion="12.34" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)\Neumont\VisualStudio\Neumont.Build.VisualStudio.Multitargeting.targets" /> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> Modified: trunk/ExtensionExample/ExtensionExample.csproj =================================================================== --- trunk/ExtensionExample/ExtensionExample.csproj 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/ExtensionExample/ExtensionExample.csproj 2014-07-09 23:23:40 UTC (rev 1546) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project ToolsVersion="12.34" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)\Neumont\VisualStudio\Neumont.Build.VisualStudio.Multitargeting.targets" /> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> Modified: trunk/FirstTimeBuildAllVS2008.bat =================================================================== --- trunk/FirstTimeBuildAllVS2008.bat 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/FirstTimeBuildAllVS2008.bat 2014-07-09 23:23:40 UTC (rev 1546) @@ -23,6 +23,7 @@ SET DegradeToolsVersion=/toolsversion:2.0 ) ELSE ( SET TargetVisualStudioVersion=v9.0 + SET DegradeToolsVersion=/toolsversion:3.5 ) CALL "%RootDir%\BuildDevTools.bat" %* /consoleloggerparameters:DisableMPLogging %DegradeToolsVersion% Modified: trunk/FirstTimeBuildVS2010.bat =================================================================== --- trunk/FirstTimeBuildVS2010.bat 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/FirstTimeBuildVS2010.bat 2014-07-09 23:23:40 UTC (rev 1546) @@ -8,6 +8,7 @@ SET DegradeToolsVersion=/toolsversion:3.5 ) ELSE ( SET TargetVisualStudioVersion=v10.0 + SET DegradeToolsVersion=/toolsversion:4.0 ) CALL "%RootDir%\BuildDevTools.bat" %* /consoleloggerparameters:DisableMPLogging %DegradeToolsVersion% Modified: trunk/FirstTimeBuildVS2013.bat =================================================================== --- trunk/FirstTimeBuildVS2013.bat 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/FirstTimeBuildVS2013.bat 2014-07-09 23:23:40 UTC (rev 1546) @@ -12,6 +12,7 @@ SET DegradeToolsVersion=/toolsversion:4.0 ) ELSE ( SET TargetVisualStudioVersion=v12.0 + SET DegradeToolsVersion=/toolsversion:12.0 ) CALL "%RootDir%\BuildDevTools.bat" %* /consoleloggerparameters:DisableMPLogging %DegradeToolsVersion% Modified: trunk/OIALModel/OIALModel.csproj =================================================================== --- trunk/OIALModel/OIALModel.csproj 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/OIALModel/OIALModel.csproj 2014-07-09 23:23:40 UTC (rev 1546) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project ToolsVersion="12.34" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)\Neumont\VisualStudio\Neumont.Build.VisualStudio.Multitargeting.targets" /> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> Modified: trunk/ORMModel/ORMModel.csproj =================================================================== --- trunk/ORMModel/ORMModel.csproj 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/ORMModel/ORMModel.csproj 2014-07-09 23:23:40 UTC (rev 1546) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project ToolsVersion="12.34" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)\Neumont\VisualStudio\Neumont.Build.VisualStudio.Multitargeting.targets" /> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> Modified: trunk/Oial/ORMOialBridge/ORMOialBridge.csproj =================================================================== --- trunk/Oial/ORMOialBridge/ORMOialBridge.csproj 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/Oial/ORMOialBridge/ORMOialBridge.csproj 2014-07-09 23:23:40 UTC (rev 1546) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project ToolsVersion="12.34" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)\Neumont\VisualStudio\Neumont.Build.VisualStudio.Multitargeting.targets" /> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> Modified: trunk/Oial/OialModel/OialModel.csproj =================================================================== --- trunk/Oial/OialModel/OialModel.csproj 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/Oial/OialModel/OialModel.csproj 2014-07-09 23:23:40 UTC (rev 1546) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project ToolsVersion="12.34" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)\Neumont\VisualStudio\Neumont.Build.VisualStudio.Multitargeting.targets" /> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> Modified: trunk/README.txt =================================================================== --- trunk/README.txt 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/README.txt 2014-07-09 23:23:40 UTC (rev 1546) @@ -20,7 +20,7 @@ Download (Visual Studio 2010): http://www.microsoft.com/en-us/download/details.aspx?id=2680 Download (Visual Studio 2012): http://www.microsoft.com/en-us/download/details.aspx?id=30668 Download (Visual Studio 2013): http://www.microsoft.com/en-us/download/details.aspx?id=40758 -IMPORTANT: You will need to establish the Visual Studio experimental hive before building NORMA by running Visual Studio once in this environment. Use the link provided by the VS SDK, or run 'devenv.exe /RootSuffix Exp' from a Visual Studio command prompt. +IMPORTANT: You will need to establish the Visual Studio experimental hive before building NORMA by running Visual Studio once in this environment. Use the link provided by the VS SDK, or run 'devenv.exe /RootSuffix Exp' from a Visual Studio command prompt. For Visual Studio 2008, make sure you use either the provided shortcut or add /RANU (run as normal user) to the command line. After running FirstTimeBuildVS2008.bat you should use 'devenv /rootsuffix Exp' instead of 'devenv /rootsuffix Exp /RANU'. Microsoft Visual Studio Modeling and Visualization Tools (DSL Tools SDK), installs after the primary SDK @@ -75,12 +75,13 @@ See the comments in SetupEnvironment.bat for additional details on how the options are used. Notes on building and debugging with VS2008 through VS2013: -The project files (.csproj, etc) are multitargeted to work correctly in Visual Studio 2005 and higher. However, the solution files (.sln) have slightly different formats in each VS version. If you open a VS2005 solution file in VS2008 then you will be prompted to upgrade. *.VS2008.sln files are provided as companions to all *.sln files for use in VS2008, and you will find corresponding .sln files for each successive version of VisualStudio. However, the *.VS2008.sln files are not sufficient for successfully building in VS2008. +The project files (.csproj, etc) are multitargeted to work correctly in Visual Studio 2005 and higher. However, the solution files (.sln) have slightly different formats in each VS version. If you open a VS2005 solution file in VS2008 then you will be prompted to upgrade. *.VS2008.sln files are provided as companions to all *.sln files for use in VS2008, and you will find corresponding .sln files for each successive version of VisualStudio. However, the *.VS2008.sln files are not sufficient for successfully building in VS2008 (etc). -You must set the TargetVisualStudioVersion to the correct version (listed above) before opening a NORMA project file from any of the Visual Studio IDE environments. The easiest way to do this is to (after the initial batch files mentioned above have completed successfully) is with the following steps. You may want to put these steps into an easily accessible batch file. The example given is for Visual Studio 2008, but 2010, 2012, and 2013 work similarly. -1) Open a Visual Studio 2008 Command Prompt -2) SET TargetVisualStudioVersion=v9.0 -3) Navigate to your NORMA root code directory +You must set the TargetVisualStudioVersion to the correct version (listed above) before opening a NORMA project file from any of the Visual Studio IDE environments. There is also a registry that needs to be set so that the ToolsVersion setting the project files match the target environment. The easiest way to do this (after the initial batch files mentioned above have completed successfully) is with the following steps. You may want to put these steps into an easily accessible batch file. The example given is for Visual Studio 2008, but 2010, 2012, and 2013 work similarly. + +1) Open a Visual Studio 2008 Command Prompt (as an Administrator) +2) Navigate to your NORMA root code directory +3) Execute the VS2008.bat batch file in the command prompt. Each of these batch files (matching the VS20xx environment you're opening) do two things. First, it sets the TargetVisualStudioVersion variable to the appropriate value. Second, it updates the registry to copy the contents of the tools version matching your system to the tools version 12.34. All of the NORMA .csproj files use ToolsVersion="12.34" (a fake number), and modifying the contents of the corresponding registry key allows the same .csproj file to be used for all of the visual studio versions. 4) devenv ORMPackage.VS2008.sln To build from the command line for VS2008: Modified: trunk/RelationalModel/DcilModel/DcilModel.csproj =================================================================== --- trunk/RelationalModel/DcilModel/DcilModel.csproj 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/RelationalModel/DcilModel/DcilModel.csproj 2014-07-09 23:23:40 UTC (rev 1546) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project ToolsVersion="12.34" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)\Neumont\VisualStudio\Neumont.Build.VisualStudio.Multitargeting.targets" /> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> Modified: trunk/RelationalModel/OialDcilBridge/OialDcilBridge.csproj =================================================================== --- trunk/RelationalModel/OialDcilBridge/OialDcilBridge.csproj 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/RelationalModel/OialDcilBridge/OialDcilBridge.csproj 2014-07-09 23:23:40 UTC (rev 1546) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project ToolsVersion="12.34" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)\Neumont\VisualStudio\Neumont.Build.VisualStudio.Multitargeting.targets" /> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> Modified: trunk/Tools/DatabaseImport/DatabaseImport.csproj =================================================================== --- trunk/Tools/DatabaseImport/DatabaseImport.csproj 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/Tools/DatabaseImport/DatabaseImport.csproj 2014-07-09 23:23:40 UTC (rev 1546) @@ -1,4 +1,4 @@ -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project ToolsVersion="12.34" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)\Neumont\VisualStudio\Neumont.Build.VisualStudio.Multitargeting.targets" /> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> Modified: trunk/Tools/DisableRuleDirectiveProcessor/DisableRuleDirectiveProcessor.csproj =================================================================== --- trunk/Tools/DisableRuleDirectiveProcessor/DisableRuleDirectiveProcessor.csproj 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/Tools/DisableRuleDirectiveProcessor/DisableRuleDirectiveProcessor.csproj 2014-07-09 23:23:40 UTC (rev 1546) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project ToolsVersion="12.34" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)\Neumont\VisualStudio\Neumont.Build.VisualStudio.Multitargeting.targets" /> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">DisableRuleDirectiveProcessor</Configuration> Modified: trunk/Tools/NUBuild/NUBuild.csproj =================================================================== --- trunk/Tools/NUBuild/NUBuild.csproj 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/Tools/NUBuild/NUBuild.csproj 2014-07-09 23:23:40 UTC (rev 1546) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project ToolsVersion="12.34" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <!-- Load multi-targeting support directly to bootstrap the build process. --> <Import Project="..\NUBuildVS\Neumont.Build.VisualStudio.Multitargeting.targets" /> <PropertyGroup> Modified: trunk/Tools/NUBuildVS/Install.bat =================================================================== --- trunk/Tools/NUBuildVS/Install.bat 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/Tools/NUBuildVS/Install.bat 2014-07-09 23:23:40 UTC (rev 1546) @@ -16,15 +16,14 @@ gacutil.exe /nologo /f /i "%VsSDKVsctDir%\VSCTLibrary.dll" gacutil.exe /nologo /f /i "%VsSDKVsctDir%\VSCT.exe" -IF /I "%TargetVisualStudioVersion%"=="v10.0" ( +IF /I "%TargetVisualStudioVersion%"=="v8.0" ( + CALL:VSCT_OLD +) ELSE IF /I "%TargetVisualStudioVersion%"=="v9.0" ( + CALL:VSCT_OLD +) ELSE ( ngen.exe install "VSCTCompress, Version=%TargetVisualStudioAssemblyVersion%, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /NoDependencies /nologo ngen.exe install "VSCTLibrary, Version=%TargetVisualStudioAssemblyVersion%, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /NoDependencies /nologo ngen.exe install "VSCT, Version=%TargetVisualStudioAssemblyVersion%, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /NoDependencies /nologo -) ELSE ( - :: As of the August 2007 release of the VsSDK, the VSCTCompress assembly is still versioned as 8.0.0.0. - ngen.exe install "VSCTCompress, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /NoDependencies /nologo - ngen.exe install "VSCTLibrary, Version=%TargetVisualStudioAssemblyVersion%, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /NoDependencies /nologo - ngen.exe install "VSCT, Version=%TargetVisualStudioFrameworkAssemblyVersion%, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /NoDependencies /nologo ) @@ -42,3 +41,10 @@ :SETVAR SET %~1=%~2 GOTO:EOF + +:VSCT_OLD +:: As of the August 2007 release of the VsSDK, the VSCTCompress assembly is still versioned as 8.0.0.0. +ngen.exe install "VSCTCompress, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /NoDependencies /nologo +ngen.exe install "VSCTLibrary, Version=%TargetVisualStudioAssemblyVersion%, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /NoDependencies /nologo +ngen.exe install "VSCT, Version=%TargetVisualStudioFrameworkAssemblyVersion%, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /NoDependencies /nologo +GOTO:EOF \ No newline at end of file Modified: trunk/Tools/NUBuildVS/NUBuildVS.csproj =================================================================== --- trunk/Tools/NUBuildVS/NUBuildVS.csproj 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/Tools/NUBuildVS/NUBuildVS.csproj 2014-07-09 23:23:40 UTC (rev 1546) @@ -1,7 +1,7 @@ -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <!-- Load multi-targeting support directly to bootstrap the build process. --> - <Import Project="Neumont.Build.VisualStudio.Multitargeting.targets" /> - <PropertyGroup> +<Project ToolsVersion="12.34" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <!-- Load multi-targeting support directly to bootstrap the build process. --> + <Import Project="Neumont.Build.VisualStudio.Multitargeting.targets" /> + <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">NUBuildVS</Configuration> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <ProductVersion>8.0.50727</ProductVersion> Modified: trunk/Tools/ORMCustomTool/ORMCustomTool.csproj =================================================================== --- trunk/Tools/ORMCustomTool/ORMCustomTool.csproj 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/Tools/ORMCustomTool/ORMCustomTool.csproj 2014-07-09 23:23:40 UTC (rev 1546) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project ToolsVersion="12.34" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)\Neumont\VisualStudio\Neumont.Build.VisualStudio.Multitargeting.targets" /> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> Modified: trunk/Tools/VersionGenerator/VersionGenerator.csproj =================================================================== --- trunk/Tools/VersionGenerator/VersionGenerator.csproj 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/Tools/VersionGenerator/VersionGenerator.csproj 2014-07-09 23:23:40 UTC (rev 1546) @@ -1,4 +1,4 @@ -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project ToolsVersion="12.34" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">VersionGenerator</Configuration> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> Added: trunk/VS2005.bat =================================================================== --- trunk/VS2005.bat (rev 0) +++ trunk/VS2005.bat 2014-07-09 23:23:40 UTC (rev 1546) @@ -0,0 +1 @@ +@CALL "%~dp0VSVer.bat" 2005 Added: trunk/VS2008.bat =================================================================== --- trunk/VS2008.bat (rev 0) +++ trunk/VS2008.bat 2014-07-09 23:23:40 UTC (rev 1546) @@ -0,0 +1 @@ +@CALL "%~dp0VSVer.bat" 2008 Added: trunk/VS2010.bat =================================================================== --- trunk/VS2010.bat (rev 0) +++ trunk/VS2010.bat 2014-07-09 23:23:40 UTC (rev 1546) @@ -0,0 +1 @@ +@CALL "%~dp0VSVer.bat" 2010 Added: trunk/VS2012.bat =================================================================== --- trunk/VS2012.bat (rev 0) +++ trunk/VS2012.bat 2014-07-09 23:23:40 UTC (rev 1546) @@ -0,0 +1 @@ +@CALL "%~dp0VSVer.bat" 2012 Added: trunk/VS2013.bat =================================================================== --- trunk/VS2013.bat (rev 0) +++ trunk/VS2013.bat 2014-07-09 23:23:40 UTC (rev 1546) @@ -0,0 +1 @@ +@CALL "%~dp0VSVer.bat" 2013 Added: trunk/VSVer.bat =================================================================== --- trunk/VSVer.bat (rev 0) +++ trunk/VSVer.bat 2014-07-09 23:23:40 UTC (rev 1546) @@ -0,0 +1,109 @@ +@ECHO OFF + +IF NOT "%~1"=="" ( + CALL:_VER_%~1 +) + +::We want the TargetVisualStudioVersion to be available outside this batch +::file, so establish it before calling SETLOCAL +SETLOCAL +IF "%ProgramFiles(X86)%"=="" ( + SET WOWRegistryAdjust= +) ELSE ( + CALL:SET6432 +) +SET UseToolsVersion= +CALL:_TOOLS_%TargetVisualStudioVersion% +IF "%UseToolsVersion%"=="" ( + @ECHO Visual studio version not recognized. + GOTO:EOF +) + +SET HackToolsVersion=12.34 + +REG DELETE "HKLM\Software%WOWRegistryAdjust%\Microsoft\MSBuild\ToolsVersions\%HackToolsVersion%" /f 1>NUL 2>&1 +::Ignore error state, delete fails if the key is not there. +REG ADD "HKLM\Software%WOWRegistryAdjust%\Microsoft\MSBuild\ToolsVersions\%HackToolsVersion%" 1>NUL 2>&1 +IF ERRORLEVEL 1 ( + @ECHO Registry write permissions are required for this file. + @ECHO Run from a Visual Studio 20xx Command Prompt opened as an Administrator. + @PAUSE + GOTO:EOF +) +REG COPY "HKLM\Software%WOWRegistryAdjust%\Microsoft\MSBuild\ToolsVersions\%UseToolsVersion%" "HKLM\Software%WOWRegistryAdjust%\Microsoft\MSBuild\ToolsVersions\%HackToolsVersion%" /s /f 1>NUL 2>&1 +::VS Doesn't like the empty state on the default value, which is how this ends up. Delete the default value. +REG DELETE "HKLM\Software%WOWRegistryAdjust%\Microsoft\MSBuild\ToolsVersions\%HackToolsVersion%" /ve /f 1>NUL 2>&1 +GOTO:EOF + + +:SET6432 +::If this batch file is already running under a 32 bit process, then the +::reg utility will choose the appropriate registry keys without our help. +::This also means that this file should not be called to pre-set environment +::variables before invoking 32-bit processes that use these variables. +IF DEFINED PROCESSOR_ARCHITEW6432 ( + SET WOWRegistryAdjust= +) ELSE ( + SET WOWRegistryAdjust=\Wow6432Node +) +GOTO:EOF + +:CLEAR64 +SET WOWRegistryAdjust= +GOTO:EOF + +:SETVAR +SET %~1=%~2 +GOTO:EOF + +:_VER_2005 +:_VER_8.0 +:_VER_v8.0 +:_VER_8 +CALL:SETVAR "TargetVisualStudioVersion" "v8.0" +GOTO:EOF + +:_VER_2008 +:_VER_9.0 +:_VER_v9.0 +:_VER_9 +CALL:SETVAR "TargetVisualStudioVersion" "v9.0" +GOTO:EOF + +:_VER_2010 +:_VER_10.0 +:_VER_v10.0 +:_VER_10 +CALL:SETVAR "TargetVisualStudioVersion" "v10.0" +GOTO:EOF + +:_VER_2012 +:_VER_11.0 +:_VER_v11.0 +:_VER_11 +CALL:SETVAR "TargetVisualStudioVersion" "v11.0" +GOTO:EOF + +:_VER_2013 +:_VER_12.0 +:_VER_v12.0 +:_VER_12 +CALL:SETVAR "TargetVisualStudioVersion" "v12.0" +GOTO:EOF + +:_TOOLS_v8.0 +CALL:SETVAR "UseToolsVersion" "2.0" +GOTO:EOF + +:_TOOLS_v9.0 +CALL:SETVAR "UseToolsVersion" "3.5" +GOTO:EOF + +:_TOOLS_v10.0 +:_TOOLS_v11.0 +CALL:SETVAR "UseToolsVersion" "4.0" +GOTO:EOF + +:_TOOLS_v12.0 +CALL:SETVAR "UseToolsVersion" "12.0" +GOTO:EOF Modified: trunk/XML/GenerationSamples/GenerationSamples.csproj =================================================================== --- trunk/XML/GenerationSamples/GenerationSamples.csproj 2014-05-09 03:57:29 UTC (rev 1545) +++ trunk/XML/GenerationSamples/GenerationSamples.csproj 2014-07-09 23:23:40 UTC (rev 1546) @@ -1,4 +1,4 @@ -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project ToolsVersion="12.34" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">GenerationSamples</Configuration> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2014-05-09 03:57:34
|
Revision: 1545 http://sourceforge.net/p/orm/code/1545 Author: mcurland Date: 2014-05-09 03:57:29 +0000 (Fri, 09 May 2014) Log Message: ----------- Fix a couple of diagram tab issues. * Pressing the delete key while renaming a diagram tab would delete the selection on the current diagram instead of the selection in the text box. * If the page reorder dialog is opened from a specific diagram tab then initially select that diagram. Modified Paths: -------------- trunk/ORMModel/Framework/Shell/DiagramOrderDialog.cs trunk/ORMModel/Framework/Shell/MultiDiagramDocView.cs trunk/ORMModel/Framework/Shell/MultiDiagramDocViewControl.cs trunk/ORMModel/Shell/ORMDocView.cs Modified: trunk/ORMModel/Framework/Shell/DiagramOrderDialog.cs =================================================================== --- trunk/ORMModel/Framework/Shell/DiagramOrderDialog.cs 2014-04-19 01:32:20 UTC (rev 1544) +++ trunk/ORMModel/Framework/Shell/DiagramOrderDialog.cs 2014-05-09 03:57:29 UTC (rev 1545) @@ -335,8 +335,9 @@ #endregion // DiagramBranch class private static Size LastFormSize; private Diagram[] myDiagramOrder; + private int myInitialSelectionIndex; private ImageList myImages; - private DiagramOrderDialog(IList<Diagram> startingOrder, ImageList images) + private DiagramOrderDialog(IList<Diagram> startingOrder, Diagram selectedDiagram, ImageList images) { int diagramCount = startingOrder.Count; Diagram[] order = startingOrder as Diagram[]; @@ -346,6 +347,7 @@ startingOrder.CopyTo(order, 0); } myDiagramOrder = order; + myInitialSelectionIndex = (selectedDiagram != null) ? Array.IndexOf<Diagram>(order, selectedDiagram) : -1; myImages = images; InitializeComponent(); DiagramsList.ImageList = images; @@ -357,10 +359,11 @@ /// <param name="serviceProvider">A <see cref="IServiceProvider"/> used to parent the dialog</param> /// <param name="docData">The owning <see cref="ModelingDocData"/> of the diagrams being reordered</param> /// <param name="diagrams">A list of <see cref="Diagram"/> elements to reorder</param> + /// <param name="selectedDiagram">A <see cref="Diagram"/> to select when the dialog is initially displayed.</param> /// <param name="images">The diagram images to display. Images are keyed off the Guid of the diagram type (format "N")</param> - public static void ShowDialog(IServiceProvider serviceProvider, ModelingDocData docData, IList<Diagram> diagrams, ImageList images) + public static void ShowDialog(IServiceProvider serviceProvider, ModelingDocData docData, IList<Diagram> diagrams, Diagram selectedDiagram, ImageList images) { - DiagramOrderDialog orderDialog = new DiagramOrderDialog(diagrams, images); + DiagramOrderDialog orderDialog = new DiagramOrderDialog(diagrams, selectedDiagram, images); if (orderDialog.ShowDialog(Utility.GetDialogOwnerWindow(serviceProvider)) == DialogResult.OK) { DiagramDisplay.UpdateDiagramDisplayOrder(docData.Store, orderDialog.myDiagramOrder); @@ -376,6 +379,11 @@ tree.Root = new DiagramBranch(this); VirtualTreeControl treeControl = DiagramsList; treeControl.Tree = tree; + int selectIndex; + if (-1 != (selectIndex = myInitialSelectionIndex)) + { + treeControl.CurrentIndex = selectIndex; + } treeControl.Select(); } private int[] SelectedIndices Modified: trunk/ORMModel/Framework/Shell/MultiDiagramDocView.cs =================================================================== --- trunk/ORMModel/Framework/Shell/MultiDiagramDocView.cs 2014-04-19 01:32:20 UTC (rev 1544) +++ trunk/ORMModel/Framework/Shell/MultiDiagramDocView.cs 2014-05-09 03:57:29 UTC (rev 1545) @@ -355,7 +355,7 @@ /// <summary> /// Reorder the diagram tab pages /// </summary> - public void ReorderDiagrams() + public void ReorderDiagrams(Diagram selectedDiagram) { MultiDiagramDocViewControl docViewControl; TabControl.TabPageCollection pages; @@ -368,7 +368,7 @@ { diagrams[i] = ((DiagramTabPage)pages[i]).Diagram; } - DiagramOrderDialog.ShowDialog(ServiceProvider, DocData, diagrams, myDocViewControl.ImageList); + DiagramOrderDialog.ShowDialog(ServiceProvider, DocData, diagrams, selectedDiagram, myDocViewControl.ImageList); } } /// <summary> Modified: trunk/ORMModel/Framework/Shell/MultiDiagramDocViewControl.cs =================================================================== --- trunk/ORMModel/Framework/Shell/MultiDiagramDocViewControl.cs 2014-04-19 01:32:20 UTC (rev 1544) +++ trunk/ORMModel/Framework/Shell/MultiDiagramDocViewControl.cs 2014-05-09 03:57:29 UTC (rev 1545) @@ -449,23 +449,41 @@ { if (tabPage != null) { - InlineTabRenameTextBox renamingTextBox = myRenamingTextBox; + InlineTabRenameTextBox renamingTextBox; - if (renamingTextBox != null) + if (null != (renamingTextBox = myRenamingTextBox) && + renamingTextBox.RenamingTabPage == tabPage) { - if (renamingTextBox.RenamingTabPage == tabPage) + // If we already have an InlineTabRenameTextBox for this tab page, do nothing + return; + } + new InlineTabRenameTextBox(this, tabPage); + base.Invalidate(false); + } + } + private InlineTabRenameTextBox RenamingTextBox + { + get + { + return myRenamingTextBox; + } + set + { + InlineTabRenameTextBox current = myRenamingTextBox; + myRenamingTextBox = value; + if (current != null) + { + // If we already have an InlineTabRenameTextBox for a different tab page, save the changes and close it + current.Close(true); + if (value == null) { - // If we already have an InlineTabRenameTextBox for this tab page, do nothing - return; + DocView.ActiveInPlaceEditWindow = null; } - else - { - // If we already have an InlineTabRenameTextBox for a different tab page, save the changes and close it - renamingTextBox.Close(true); - } } - myRenamingTextBox = new InlineTabRenameTextBox(this, tabPage); - base.Invalidate(false); + if (value != null) + { + DocView.ActiveInPlaceEditWindow = value; + } } } #endregion // RenameTab method @@ -701,6 +719,7 @@ public InlineTabRenameTextBox(MultiDiagramDocViewControl docViewControl, DiagramTabPage renamingTabPage) { myDocViewControl = docViewControl; + docViewControl.RenamingTextBox = null; // Close anything existing prior to initialization RenamingTabPage = renamingTabPage; base.Parent = docViewControl.Parent; base.Visible = false; @@ -711,13 +730,14 @@ base.TextAlign = HorizontalAlignment.Center; base.BringToFront(); base.Focus(); + docViewControl.RenamingTextBox = this; // Associate the existing tab } protected sealed override void Dispose(bool disposing) { if (disposing) { - myDocViewControl.myRenamingTextBox = null; + myDocViewControl.RenamingTextBox = null; base.Parent = null; } base.Dispose(disposing); @@ -732,8 +752,11 @@ if (!mySavedChanges && saveChanges && base.Modified) { RenamingTabPage.Text = base.Text; - mySavedChanges = true; } + // Always mark changes as saved so that we respect the saveChanges + // parameter from the first Close call. Additional Close calls are + // possible in response to other events. + mySavedChanges = true; if (base.Focused) { // Give focus back to the DocViewControl, which will give it back to the active designer @@ -760,7 +783,6 @@ return base.ProcessDialogKey(keyData); } } - protected sealed override Padding DefaultMargin { get Modified: trunk/ORMModel/Shell/ORMDocView.cs =================================================================== --- trunk/ORMModel/Shell/ORMDocView.cs 2014-04-19 01:32:20 UTC (rev 1544) +++ trunk/ORMModel/Shell/ORMDocView.cs 2014-05-09 03:57:29 UTC (rev 1545) @@ -503,7 +503,7 @@ } private void ContextMenuPageOrderClick(object sender, EventArgs e) { - base.ReorderDiagrams(); + base.ReorderDiagrams(ContextMenuStrip.SelectedDiagram); } #endregion // Context Menu This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2014-04-19 01:32:25
|
Revision: 1544 http://sourceforge.net/p/orm/code/1544 Author: mcurland Date: 2014-04-19 01:32:20 +0000 (Sat, 19 Apr 2014) Log Message: ----------- Added initial database import for Oracle. Code provided by ORMFoundation user Jose Carlus for use with the Oracle-provided ODAC drivers. Modified Paths: -------------- trunk/Tools/DatabaseImport/DatabaseImport.csproj trunk/Tools/DatabaseImport/DcilObjectModel.cs Added Paths: ----------- trunk/Tools/DatabaseImport/OracleDcilSchemaProvider.cs Modified: trunk/Tools/DatabaseImport/DatabaseImport.csproj =================================================================== --- trunk/Tools/DatabaseImport/DatabaseImport.csproj 2014-04-16 22:06:52 UTC (rev 1543) +++ trunk/Tools/DatabaseImport/DatabaseImport.csproj 2014-04-19 01:32:20 UTC (rev 1544) @@ -81,6 +81,7 @@ </ItemGroup> <ItemGroup> <Compile Include="DcilObjectModel.cs" /> + <Compile Include="OracleDcilSchemaProvider.cs" /> <Compile Include="SchemaSelector.cs"> <SubType>Form</SubType> </Compile> @@ -114,4 +115,4 @@ <PreBuildEvent>"$(TrunkDir)\VersionGenerator.exe"</PreBuildEvent> <PostBuildEvent>"$(MSBuildProjectDirectory)\Install.bat" "$(OutputPath)" "$(TargetVisualStudioVersion)"</PostBuildEvent> </PropertyGroup> -</Project> +</Project> \ No newline at end of file Modified: trunk/Tools/DatabaseImport/DcilObjectModel.cs =================================================================== --- trunk/Tools/DatabaseImport/DcilObjectModel.cs 2014-04-16 22:06:52 UTC (rev 1543) +++ trunk/Tools/DatabaseImport/DcilObjectModel.cs 2014-04-19 01:32:20 UTC (rev 1544) @@ -123,6 +123,10 @@ case "System.Data.SqlClient": provider = new SqlServer2005DcilSchemaProvider(connection); break; + case "Oracle.DataAccess.Client": + case "System.Data.OracleClient": + provider = new OracleDcilSchemaProvider(connection); + break; } if (provider == null) throw new NotSupportedException("The specified invariant name is not supported."); return provider; Added: trunk/Tools/DatabaseImport/OracleDcilSchemaProvider.cs =================================================================== --- trunk/Tools/DatabaseImport/OracleDcilSchemaProvider.cs (rev 0) +++ trunk/Tools/DatabaseImport/OracleDcilSchemaProvider.cs 2014-04-19 01:32:20 UTC (rev 1544) @@ -0,0 +1,405 @@ +#region Common Public License Copyright Notice +/**************************************************************************\ +* Natural Object-Role Modeling Architect for Visual Studio * +* * +* Copyright \xA9 ORM Solutions, LLC. All rights reserved. * +* * +* The use and distribution terms for this software are covered by the * +* Common Public License 1.0 (http://opensource.org/licenses/cpl) which * +* can be found in the file CPL.txt at the root of this distribution. * +* By using this software in any fashion, you are agreeing to be bound by * +* the terms of this license. * +* * +* You must not remove this notice, or any other, from this software. * +\**************************************************************************/ +#endregion + +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Data; +using System.Data.Common; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +namespace ORMSolutions.ORMArchitect.DatabaseImport +{ + /// <summary> + /// Provides an implementation of IDcilSchemaProvider for Oracle + /// </summary> + public class OracleDcilSchemaProvider : IDcilSchemaProvider + { + private IDbConnection _conn; + /// <summary> + /// Instantiates a new instance of ORMSolutions.ORMArchitect.DatabaseImport.OracleDcilSchemaProvider + /// </summary> + /// <param name="conn">The <see cref="System.Data.IDbConnection"/> object for the target Database</param> + public OracleDcilSchemaProvider(IDbConnection conn) + { + this._conn = conn; + } + /// <summary> + /// When implemented in a child class, retrieves a list of available schema names + /// </summary> + /// <returns>List of available schema names</returns> + public IList<string> GetAvailableSchemaNames() + { + IList<string> schemaNames = new List<string>(); + bool opened = false; + try + { + if (_conn.State != ConnectionState.Open) + { + _conn.Open(); + opened = true; + } + using (IDbCommand cmd = _conn.CreateCommand()) + { + cmd.CommandType = CommandType.Text; + cmd.CommandText = "select distinct owner from all_objects order by 1"; + using (IDataReader reader = cmd.ExecuteReader()) + { + while (reader.Read()) + { + schemaNames.Add(reader[0].ToString()); + } + } + } + } + finally + { + if (opened && _conn.State == ConnectionState.Open) + { + _conn.Close(); + } + } + return schemaNames; + } + /// <summary> + /// Loads the specified Oracle Schema into a <see cref="ORMSolutions.ORMArchitect.DatabaseImport.DcilSchema"/> object + /// </summary> + /// <param name="schemaName">Name of the Schema to load</param> + public DcilSchema LoadSchema(string schemaName) + { + return new DcilSchema(this, schemaName); + } + /// <summary> + /// Loads a generic list of <see cref="ORMSolutions.ORMArchitect.DatabaseImport.DcilTable"/> objects for the specified Oracle Schema + /// </summary> + /// <param name="schemaName">Name of the Schema from which to load the Tables</param> + /// <returns>Generic list of <see cref="ORMSolutions.ORMArchitect.DatabaseImport.DcilTable"/> objects for the specified Oracle Schema</returns> + public IList<DcilTable> LoadTables(string schemaName) + { + IList<DcilTable> tables = new List<DcilTable>(); + bool opened = false; + try + { + if (_conn.State != ConnectionState.Open) + { + _conn.Open(); + opened = true; + } + IDbCommand cmd = _conn.CreateCommand(); + cmd.CommandType = CommandType.Text; + bool haveSchema = !string.IsNullOrEmpty(schemaName); + string commandText = string.Format("select owner, table_name from all_tables {0}", + haveSchema ? "where owner = '" + schemaName + "'" : null); + + cmd.CommandText = commandText; + + using (IDataReader reader = cmd.ExecuteReader(CommandBehavior.Default)) + { + while (reader.Read()) + { + string schema = reader.GetString(0); + string table = reader.GetString(1); + tables.Add(new DcilTable(this, schema, table)); + } + } + return tables; + } + finally + { + if (opened && _conn.State == ConnectionState.Open) + { + _conn.Close(); + } + } + } + /// <summary> + /// Loads a generic list of <see cref="ORMSolutions.ORMArchitect.DatabaseImport.DcilColumn"/> objects for the specified Oracle Schema and Table + /// </summary> + /// <param name="schemaName">Name of the Oracle Schema for which the given Table resides in</param> + /// <param name="tableName">Name of the Table from which to load the Columns</param> + /// <returns>Generic list of <see cref="ORMSolutions.ORMArchitect.DatabaseImport.DcilColumn"/> objects for the specified Oracle Schema and Table</returns> + public IList<DcilColumn> LoadColumns(string schemaName, string tableName) + { + IList<DcilColumn> columns = new List<DcilColumn>(); + bool opened = false; + try + { + if (_conn.State != ConnectionState.Open) + { + _conn.Open(); + opened = true; + } + IDbCommand cmd = _conn.CreateCommand(); + cmd.CommandType = CommandType.Text; + bool haveSchema = !string.IsNullOrEmpty(schemaName); + string commandText = "select column_name, nullable, data_type, " + + "nvl2(char_used, char_length, data_length) length, data_precision, data_scale " + + "from all_tab_columns " + + "where 1 = 1 "; + + if (!string.IsNullOrEmpty(schemaName)) + { + commandText += "and owner = '" + schemaName + "' "; + } + if (!string.IsNullOrEmpty(tableName)) + { + commandText += "and table_name = '" + tableName + "' "; + } + + cmd.CommandText = commandText; + using (IDataReader reader = cmd.ExecuteReader(CommandBehavior.Default)) + { + while (reader.Read()) + { + string columnName = reader.GetString(0); + bool isNullable = (reader.GetString(1).ToUpperInvariant() == "Y"); + bool isIdentity = false; + DcilDataType.DCILType type = ConvertOracleDataType(reader.GetString(2)); + int size = Convert.ToInt32(reader[3]); + short precision = (reader.IsDBNull(4) ? (short)-1 : Convert.ToInt16(reader[4])); + int scale = (reader.IsDBNull(5) ? -1 : Convert.ToInt32(reader[5])); + columns.Add(new DcilColumn(columnName, new DcilDataType(type, size, scale, precision), isNullable, isIdentity)); + } + } + return columns; + } + finally + { + if (opened && _conn.State == ConnectionState.Open) + { + _conn.Close(); + } + } + } + /// <summary> + /// Converts the given string representation of an Oracle Data Type to its equivalent <see cref="ORMSolutions.ORMArchitect.DatabaseImport.DcilDataType.DCILType"/> + /// </summary> + private DcilDataType.DCILType ConvertOracleDataType(string dataType) + { + dataType = dataType.ToUpperInvariant(); + if (dataType.IndexOf("TIMESTAMP") != -1) + return DcilDataType.DCILType.Timestamp; + + switch (dataType) + { + case "BINARY_FLOAT": + case "BINARY_DOUBLE": + case "FLOAT": + return DcilDataType.DCILType.Float; + case "DATE": + return DcilDataType.DCILType.Date; + case "LONG": + case "VARCHAR2": + case "NVARCHAR2": + return DcilDataType.DCILType.CharacterVarying; + case "CHAR": + case "NCHAR": + return DcilDataType.DCILType.Character; + case "NUMBER": + return DcilDataType.DCILType.Decimal; + case "RAW": + case "LONG RAW": + case "BLOB": + return DcilDataType.DCILType.BinaryLargeObject; + case "CLOB": + case "NCLOB": + return DcilDataType.DCILType.CharacterLargeObject; + + default: + return DcilDataType.DCILType.CharacterVarying; + } + } + /// <summary> + /// Loads a generic list of <see cref="ORMSolutions.ORMArchitect.DatabaseImport.DcilUniquenessConstraint"/> objects (representing Uniqueness Constraints) for the specified Oracle Schema and Table + /// </summary> + /// <param name="schemaName">Name of the Oracle Schema for which the given Table resides in</param> + /// <param name="tableName">Name of the Table from which to load the Indexes</param> + /// <returns>Generic list of <see cref="ORMSolutions.ORMArchitect.DatabaseImport.DcilUniquenessConstraint"/> objects (representing Uniqueness Constraints) for the specified Oracle Schema and Table</returns> + public IList<DcilUniquenessConstraint> LoadIndexes(string schemaName, string tableName) + { + IList<DcilUniquenessConstraint> constraints = new List<DcilUniquenessConstraint>(); + bool opened = false; + try + { + if (_conn.State != ConnectionState.Open) + { + _conn.Open(); + opened = true; + } + IDbCommand cmd = _conn.CreateCommand(); + cmd.CommandType = CommandType.Text; + string commandText = "select owner, table_name, constraint_name, constraint_type " + + "from all_constraints " + + "where constraint_type in ('P', 'U') "; + + if (!String.IsNullOrEmpty(schemaName)) + { + commandText += " and owner = '" + schemaName + "'"; + } + if (!String.IsNullOrEmpty(tableName)) + { + commandText += " and table_name = '" + tableName + "'"; + } + cmd.CommandText = commandText; + using (IDataReader reader = cmd.ExecuteReader(CommandBehavior.Default)) + { + while (reader.Read()) + { + string constraintSchema = reader.GetString(0); + string table = reader.GetString(1); + string constraintName = reader.GetString(2); + string tableSchema = reader.GetString(0); + bool isPrimary = reader.GetString(3) == "P" ? true : false; + constraints.Add(new DcilUniquenessConstraint(constraintSchema, constraintName, tableSchema, table, new StringCollection(), isPrimary)); + } + } + + int constraintCount = constraints.Count; + for (int i = 0; i < constraintCount; ++i) + { + DcilUniquenessConstraint constraint = constraints[i]; + IDbCommand columns = _conn.CreateCommand(); + columns.CommandType = CommandType.Text; + columns.CommandText = string.Format("select column_name from all_cons_columns " + + "where owner = '{0}' and table_name = '{1}' and constraint_name = '{2}' " + + "order by position", constraint.Schema, constraint.ParentTable, constraint.Name); + + StringCollection columnList = new StringCollection(); + using (IDataReader columnReader = columns.ExecuteReader(CommandBehavior.Default)) + { + while (columnReader.Read()) + { + constraint.Columns.Add(columnReader.GetString(0)); + } + } + } + return constraints; + } + finally + { + if (opened && _conn.State == ConnectionState.Open) + { + _conn.Close(); + } + } + } + /// <summary> + /// When implemented in a child class, loads a generic list of <see cref="ORMSolutions.ORMArchitect.DatabaseImport.DcilReferenceConstraint"/> objects (representing Foreign Keys) for the specified Oracle Schema and Table + /// </summary> + /// <param name="schemaName">Name of the Oracle Schema for which the given Table resides in</param> + /// <param name="tableName">Name of the Table from which to load the Indexes</param> + /// <returns>Generic list of <see cref="ORMSolutions.ORMArchitect.DatabaseImport.DcilReferenceConstraint"/> objects (representing Foreign Keys) for the specified Oracle Schema and Table</returns> + public IList<DcilReferenceConstraint> LoadForeignKeys(string schemaName, string tableName) + { + IList<DcilReferenceConstraint> constraints = new List<DcilReferenceConstraint>(); + bool opened = false; + try + { + if (_conn.State != ConnectionState.Open) + { + _conn.Open(); + opened = true; + } + IDbCommand cmd = _conn.CreateCommand(); + cmd.CommandType = CommandType.Text; + string commandText = "select a.owner, a.table_name, a.constraint_name, a.r_owner, b.table_name r_table_name, a.r_constraint_name " + + "from all_constraints a " + + " join all_constraints b on (b.owner = a.r_owner and b.constraint_name = a.r_constraint_name) " + + "where a.constraint_type in ('R') "; + + if (!String.IsNullOrEmpty(schemaName)) + { + commandText += "and a.owner = '" + schemaName + "' "; + } + if (!String.IsNullOrEmpty(tableName)) + { + commandText += "and a.table_name = '" + tableName + "' "; + } + + cmd.CommandText = commandText; + IList<string> targetConstraintNames = new List<string>(); + using (IDataReader reader = cmd.ExecuteReader(CommandBehavior.Default)) + { + while (reader.Read()) + { + string constraintSchema = reader.GetString(0); + string sourceTableSchema = reader.GetString(0); + string sourceTable = reader.GetString(1); + string constraintName = reader.GetString(2); + string targetTableSchema = reader.GetString(3); + string targetTable = reader.GetString(4); + targetConstraintNames.Add(reader.GetString(5)); + constraints.Add(new DcilReferenceConstraint(constraintSchema, constraintName, sourceTableSchema, sourceTable, + targetTableSchema, targetTable, new StringCollection(), new StringCollection())); + } + } + int constraintCount = constraints.Count; + for (int i = 0; i < constraintCount; ++i) + { + DcilReferenceConstraint constraint = constraints[i]; + IDbCommand sourceColumns = _conn.CreateCommand(); + sourceColumns.CommandType = CommandType.Text; + sourceColumns.CommandText = string.Format("select column_name from all_cons_columns " + + "where owner = '{0}' and table_name = '{1}' and constraint_name = '{2}' " + + "order by position", constraint.Schema, constraint.SourceTable, constraint.Name); + + using (IDataReader sourceColumnReader = sourceColumns.ExecuteReader(CommandBehavior.Default)) + { + while (sourceColumnReader.Read()) + { + constraint.SourceColumns.Add(sourceColumnReader.GetString(0)); + } + } + + string targetConstraintName = targetConstraintNames[i]; + + IDbCommand targetColumns = _conn.CreateCommand(); + targetColumns.CommandType = CommandType.Text; + targetColumns.CommandText = string.Format("select column_name from all_cons_columns " + + "where owner = '{0}' and table_name = '{1}' and constraint_name = '{2}' " + + "order by position", constraint.TargetTableSchema, constraint.TargetTable, targetConstraintName); + + using (IDataReader targetColumnReader = targetColumns.ExecuteReader(CommandBehavior.Default)) + { + while (targetColumnReader.Read()) + { + constraint.TargetColumns.Add(targetColumnReader.GetString(0)); + } + } + } + return constraints; + } + finally + { + if (opened && _conn.State == ConnectionState.Open) + { + _conn.Close(); + } + } + } + /// <summary> + /// Loads a generic list of <see cref="ORMSolutions.ORMArchitect.DatabaseImport.DcilProcedure"/> objects for the specified Oracle Schema + /// </summary> + /// <param name="schemaName">Name of the Oracle Schema from which to load the Stored Procedures</param> + /// <returns>Generic list of <see cref="ORMSolutions.ORMArchitect.DatabaseImport.DcilProcedure"/> objects for the specified Oracle Schema</returns> + public IList<DcilProcedure> LoadProcedures(string schemaName) + { + return new List<DcilProcedure>().AsReadOnly(); + } + } +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2014-04-16 22:06:58
|
Revision: 1543 http://sourceforge.net/p/orm/code/1543 Author: mcurland Date: 2014-04-16 22:06:52 +0000 (Wed, 16 Apr 2014) Log Message: ----------- Fix assertion drawing 1-1 link fact type shape, broken by selection changes in 1539. Modified Paths: -------------- trunk/ORMModel/ShapeModel/FactTypeShape.cs Modified: trunk/ORMModel/ShapeModel/FactTypeShape.cs =================================================================== --- trunk/ORMModel/ShapeModel/FactTypeShape.cs 2014-04-16 22:05:24 UTC (rev 1542) +++ trunk/ORMModel/ShapeModel/FactTypeShape.cs 2014-04-16 22:06:52 UTC (rev 1543) @@ -1999,7 +1999,14 @@ { if (selection != null) { - FactSetConstraint constraintLink = FactSetConstraint.GetLink((UniquenessConstraint)constraintElement, factType ?? factShape.AssociatedFactType); + UniquenessConstraint uc = (UniquenessConstraint)constraintElement; + FactSetConstraint constraintLink = FactSetConstraint.GetLink(uc, factType ?? (factType = factShape.AssociatedFactType)); + Objectification objectification; + if (constraintLink == null && + null != (objectification = factType.ImpliedByObjectification)) + { + constraintLink = FactSetConstraint.GetLink(uc, objectification.NestedFactType); + } if (testSubField == null) { testSubField = new ConstraintSubField(constraintLink); @@ -5780,7 +5787,17 @@ public DiagramItem GetDiagramItem(UniquenessConstraint constraint) { Debug.Assert(constraint.IsInternal); - return new DiagramItem(this, InternalConstraintShapeField, new ConstraintSubField(FactSetConstraint.GetLink(constraint, AssociatedFactType))); + FactType factType = AssociatedFactType; + FactSetConstraint constraintLink; + if (null == (constraintLink = FactSetConstraint.GetLink(constraint, factType))) + { + Objectification objectification; + if (null != (objectification = factType.ImpliedByObjectification)) + { + constraintLink = FactSetConstraint.GetLink(constraint, factType); + } + } + return new DiagramItem(this, InternalConstraintShapeField, new ConstraintSubField(constraintLink)); } /// <summary> /// Get a diagram item for a role on the associated fact. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2014-04-16 22:05:28
|
Revision: 1542 http://sourceforge.net/p/orm/code/1542 Author: mcurland Date: 2014-04-16 22:05:24 +0000 (Wed, 16 Apr 2014) Log Message: ----------- Fix bug from [1541] with overly aggressive element deletion in model browser involving references. Deleting a reference to a floating element (meaning an element without a primary display location) would remove all references to that element. Fixed by returning the correct value (preserveElement instead of preserveExpansion) from SurveyTree.ReferencePreservesElement. Modified Paths: -------------- trunk/ORMModel/Framework/Shell/DynamicSurveyTreeGrid/SurveyClasses.cs Modified: trunk/ORMModel/Framework/Shell/DynamicSurveyTreeGrid/SurveyClasses.cs =================================================================== --- trunk/ORMModel/Framework/Shell/DynamicSurveyTreeGrid/SurveyClasses.cs 2014-02-20 21:30:51 UTC (rev 1541) +++ trunk/ORMModel/Framework/Shell/DynamicSurveyTreeGrid/SurveyClasses.cs 2014-04-16 22:05:24 UTC (rev 1542) @@ -886,7 +886,7 @@ preserveExpansion = true; } } - return preserveExpansion; + return preserveReference; } void INotifySurveyElementChanged.ElementDeleted(object element) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2013-12-21 06:26:47
|
Revision: 1540 http://sourceforge.net/p/orm/code/1540 Author: mcurland Date: 2013-12-21 06:26:43 +0000 (Sat, 21 Dec 2013) Log Message: ----------- Patch app missed some data type generator files from [1539] Modified Paths: -------------- trunk/Setup/Readme.htm trunk/XML/ConceptualDBtoDCIL/ConceptualDBtoDCIL.xslt trunk/XML/DILtoSQL/DCILtoDDIL.xslt trunk/XML/DILtoSQL/DDILtoMySQL.xslt trunk/XML/DILtoSQL/DDILtoSQLServer.xslt trunk/XML/DILtoSQL/DDILtoSQLServer_ANSITypes.xslt trunk/XML/DILtoSQL/DDILtoSQLStandard.xslt Modified: trunk/Setup/Readme.htm =================================================================== --- trunk/Setup/Readme.htm 2013-12-21 06:12:31 UTC (rev 1539) +++ trunk/Setup/Readme.htm 2013-12-21 06:26:43 UTC (rev 1540) @@ -72,7 +72,7 @@ <hr/> <h2><span class="toggle" onclick="toggleDisp(this,'dec2013')">-</span>December 2013 CTP Changes</h2> <div id="dec2013"> -<div>The December 2013 CTP release includes all modifications through changeset 1539. Full changeset descriptions can be found at the <a href="http://orm.svn.sourceforge.net/viewvc/orm/trunk/?view=log">sourceforge code repository</a> (be patient with this link, the page contains a full changeset history).</div> +<div>The December 2013 CTP release includes all modifications through changeset 1540. Full changeset descriptions can be found at the <a href="http://orm.svn.sourceforge.net/viewvc/orm/trunk/?view=log">sourceforge code repository</a> (be patient with this link, the page contains a full changeset history).</div> <ul> <li><a href="#ReadingSignatures 2013-12">Duplicate Reading Signature Validation</a> </li> <li><a href="#ValueComparisonConstraint 2013-12">Value Comparison Constraints</a> </li> Modified: trunk/XML/ConceptualDBtoDCIL/ConceptualDBtoDCIL.xslt =================================================================== (Binary files differ) Modified: trunk/XML/DILtoSQL/DCILtoDDIL.xslt =================================================================== (Binary files differ) Modified: trunk/XML/DILtoSQL/DDILtoMySQL.xslt =================================================================== --- trunk/XML/DILtoSQL/DDILtoMySQL.xslt 2013-12-21 06:12:31 UTC (rev 1539) +++ trunk/XML/DILtoSQL/DDILtoMySQL.xslt 2013-12-21 06:26:43 UTC (rev 1540) @@ -155,7 +155,7 @@ <xsl:text>23</xsl:text> <xsl:value-of select="$RightParen"/> </xsl:template> - <xsl:template match="@type[.='TIMESTAMP']" mode="ForDataType"> + <xsl:template match="@type[.='TIMESTAMP' or .='DATETIME']" mode="ForDataType"> <!-- Although MySQL has a TIMESTAMP type, their DATETIME is closer to the SQL Standard's TIMESTAMP. --> <xsl:text>DATETIME</xsl:text> </xsl:template> Modified: trunk/XML/DILtoSQL/DDILtoSQLServer.xslt =================================================================== (Binary files differ) Modified: trunk/XML/DILtoSQL/DDILtoSQLServer_ANSITypes.xslt =================================================================== (Binary files differ) Modified: trunk/XML/DILtoSQL/DDILtoSQLStandard.xslt =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2013-12-17 20:27:51
|
Revision: 1538 http://sourceforge.net/p/orm/code/1538 Author: mcurland Date: 2013-12-17 20:27:48 +0000 (Tue, 17 Dec 2013) Log Message: ----------- Generated VS2010 files missed in [1537]. Modified Paths: -------------- trunk/CustomProperties/GeneratedCode/DomainModel.VS2010.cs trunk/CustomProperties/GeneratedCode/DomainModelResx.VS2010.resx Modified: trunk/CustomProperties/GeneratedCode/DomainModel.VS2010.cs =================================================================== --- trunk/CustomProperties/GeneratedCode/DomainModel.VS2010.cs 2013-12-17 20:26:34 UTC (rev 1537) +++ trunk/CustomProperties/GeneratedCode/DomainModel.VS2010.cs 2013-12-17 20:27:48 UTC (rev 1538) @@ -520,18 +520,39 @@ [DslDesign::DescriptionResource("ORMSolutions.ORMArchitect.CustomProperties.ORMTypes/ValueConstraint.Description", typeof(global::ORMSolutions.ORMArchitect.CustomProperties.CustomPropertiesDomainModel), "ORMSolutions.ORMArchitect.CustomProperties.GeneratedCode.DomainModelResx")] ValueConstraint = 4096, /// <summary> + /// ValueComparisonConstraint + /// Description for + /// ORMSolutions.ORMArchitect.CustomProperties.ORMTypes.ValueComparisonConstraint + /// </summary> + [DslDesign::DescriptionResource("ORMSolutions.ORMArchitect.CustomProperties.ORMTypes/ValueComparisonConstraint.Description", typeof(global::ORMSolutions.ORMArchitect.CustomProperties.CustomPropertiesDomainModel), "ORMSolutions.ORMArchitect.CustomProperties.GeneratedCode.DomainModelResx")] + ValueComparisonConstraint = 8192, + /// <summary> + /// CardinalityConstraint + /// Description for + /// ORMSolutions.ORMArchitect.CustomProperties.ORMTypes.CardinalityConstraint + /// </summary> + [DslDesign::DescriptionResource("ORMSolutions.ORMArchitect.CustomProperties.ORMTypes/CardinalityConstraint.Description", typeof(global::ORMSolutions.ORMArchitect.CustomProperties.CustomPropertiesDomainModel), "ORMSolutions.ORMArchitect.CustomProperties.GeneratedCode.DomainModelResx")] + CardinalityConstraint = 16384, + /// <summary> /// AllConstraints /// Description for /// ORMSolutions.ORMArchitect.CustomProperties.ORMTypes.AllConstraints /// </summary> [DslDesign::DescriptionResource("ORMSolutions.ORMArchitect.CustomProperties.ORMTypes/AllConstraints.Description", typeof(global::ORMSolutions.ORMArchitect.CustomProperties.CustomPropertiesDomainModel), "ORMSolutions.ORMArchitect.CustomProperties.GeneratedCode.DomainModelResx")] - AllConstraints = 8160, + AllConstraints = 32736, /// <summary> /// Model /// Description for ORMSolutions.ORMArchitect.CustomProperties.ORMTypes.Model /// </summary> [DslDesign::DescriptionResource("ORMSolutions.ORMArchitect.CustomProperties.ORMTypes/Model.Description", typeof(global::ORMSolutions.ORMArchitect.CustomProperties.CustomPropertiesDomainModel), "ORMSolutions.ORMArchitect.CustomProperties.GeneratedCode.DomainModelResx")] - Model = 8192, + Model = 32768, + /// <summary> + /// ElementGrouping + /// Description for + /// ORMSolutions.ORMArchitect.CustomProperties.ORMTypes.ElementGrouping + /// </summary> + [DslDesign::DescriptionResource("ORMSolutions.ORMArchitect.CustomProperties.ORMTypes/ElementGrouping.Description", typeof(global::ORMSolutions.ORMArchitect.CustomProperties.CustomPropertiesDomainModel), "ORMSolutions.ORMArchitect.CustomProperties.GeneratedCode.DomainModelResx")] + ElementGrouping = 65536, } } namespace ORMSolutions.ORMArchitect.CustomProperties Modified: trunk/CustomProperties/GeneratedCode/DomainModelResx.VS2010.resx =================================================================== --- trunk/CustomProperties/GeneratedCode/DomainModelResx.VS2010.resx 2013-12-17 20:26:34 UTC (rev 1537) +++ trunk/CustomProperties/GeneratedCode/DomainModelResx.VS2010.resx 2013-12-17 20:27:48 UTC (rev 1538) @@ -421,6 +421,22 @@ <value>Description for ORMSolutions.ORMArchitect.CustomProperties.ORMTypes.ValueConstraint</value> <comment>Description for EnumerationLiteral 'ValueConstraint' on DomainEnumeration 'ORMTypes'</comment> </data> + <data name="ORMSolutions.ORMArchitect.CustomProperties.ORMTypes/ValueComparisonConstraint.DisplayName" xml:space="preserve"> + <value>ValueComparisonConstraint</value> + <comment>Display name for EnumerationLiteral 'ValueComparisonConstraint' on DomainEnumeration 'ORMTypes'</comment> + </data> + <data name="ORMSolutions.ORMArchitect.CustomProperties.ORMTypes/ValueComparisonConstraint.Description" xml:space="preserve"> + <value>Description for ORMSolutions.ORMArchitect.CustomProperties.ORMTypes.ValueComparisonConstraint</value> + <comment>Description for EnumerationLiteral 'ValueComparisonConstraint' on DomainEnumeration 'ORMTypes'</comment> + </data> + <data name="ORMSolutions.ORMArchitect.CustomProperties.ORMTypes/CardinalityConstraint.DisplayName" xml:space="preserve"> + <value>CardinalityConstraint</value> + <comment>Display name for EnumerationLiteral 'CardinalityConstraint' on DomainEnumeration 'ORMTypes'</comment> + </data> + <data name="ORMSolutions.ORMArchitect.CustomProperties.ORMTypes/CardinalityConstraint.Description" xml:space="preserve"> + <value>Description for ORMSolutions.ORMArchitect.CustomProperties.ORMTypes.CardinalityConstraint</value> + <comment>Description for EnumerationLiteral 'CardinalityConstraint' on DomainEnumeration 'ORMTypes'</comment> + </data> <data name="ORMSolutions.ORMArchitect.CustomProperties.ORMTypes/AllConstraints.DisplayName" xml:space="preserve"> <value>AllConstraints</value> <comment>Display name for EnumerationLiteral 'AllConstraints' on DomainEnumeration 'ORMTypes'</comment> @@ -437,6 +453,14 @@ <value>Description for ORMSolutions.ORMArchitect.CustomProperties.ORMTypes.Model</value> <comment>Description for EnumerationLiteral 'Model' on DomainEnumeration 'ORMTypes'</comment> </data> + <data name="ORMSolutions.ORMArchitect.CustomProperties.ORMTypes/ElementGrouping.DisplayName" xml:space="preserve"> + <value>ElementGrouping</value> + <comment>Display name for EnumerationLiteral 'ElementGrouping' on DomainEnumeration 'ORMTypes'</comment> + </data> + <data name="ORMSolutions.ORMArchitect.CustomProperties.ORMTypes/ElementGrouping.Description" xml:space="preserve"> + <value>Description for ORMSolutions.ORMArchitect.CustomProperties.ORMTypes.ElementGrouping</value> + <comment>Description for EnumerationLiteral 'ElementGrouping' on DomainEnumeration 'ORMTypes'</comment> + </data> <data name="ORMSolutions.ORMArchitect.CustomProperties.CustomPropertyDataType/String.DisplayName" xml:space="preserve"> <value>String</value> <comment>Display name for EnumerationLiteral 'String' on DomainEnumeration 'CustomPropertyDataType'</comment> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2013-11-27 18:42:18
|
Revision: 1535 http://sourceforge.net/p/orm/code/1535 Author: mcurland Date: 2013-11-27 18:42:14 +0000 (Wed, 27 Nov 2013) Log Message: ----------- ORMCustomTool not launching in VS2013. Continuation of [1533]. Modified Paths: -------------- trunk/Tools/ORMCustomTool/ORMCustomTool.cs trunk/Tools/ORMCustomTool/UI/ORMCustomToolUITypeEditor.cs Modified: trunk/Tools/ORMCustomTool/ORMCustomTool.cs =================================================================== --- trunk/Tools/ORMCustomTool/ORMCustomTool.cs 2013-11-26 19:17:51 UTC (rev 1534) +++ trunk/Tools/ORMCustomTool/ORMCustomTool.cs 2013-11-27 18:42:14 UTC (rev 1535) @@ -59,7 +59,9 @@ private const string DEFAULT_EXTENSION_DECORATOR = "._ORMCustomToolReport."; // Add the _ here to put it above other generators private const string EXTENSION_ORM = ".orm"; private const string EXTENSION_XML = ".xml"; -#if VISUALSTUDIO_11_0 +#if VISUALSTUDIO_12_0 + private const string GENERATORS_REGISTRYROOT = @"Software\ORM Solutions\Natural ORM Architect for Visual Studio 2013\Generators"; +#elif VISUALSTUDIO_11_0 private const string GENERATORS_REGISTRYROOT = @"Software\ORM Solutions\Natural ORM Architect for Visual Studio 2012\Generators"; #elif VISUALSTUDIO_10_0 private const string GENERATORS_REGISTRYROOT = @"Software\ORM Solutions\Natural ORM Architect for Visual Studio 2010\Generators"; Modified: trunk/Tools/ORMCustomTool/UI/ORMCustomToolUITypeEditor.cs =================================================================== --- trunk/Tools/ORMCustomTool/UI/ORMCustomToolUITypeEditor.cs 2013-11-26 19:17:51 UTC (rev 1534) +++ trunk/Tools/ORMCustomTool/UI/ORMCustomToolUITypeEditor.cs 2013-11-27 18:42:14 UTC (rev 1535) @@ -66,7 +66,9 @@ IMoniker moniker; ErrorHandler.ThrowOnFailure(CreateItemMoniker( "!", -#if VISUALSTUDIO_11_0 +#if VISUALSTUDIO_12_0 + "VisualStudio.DTE.12.0:" + +#elif VISUALSTUDIO_11_0 "VisualStudio.DTE.11.0:" + #elif VISUALSTUDIO_10_0 "VisualStudio.DTE.10.0:" + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2013-11-26 19:17:56
|
Revision: 1534 http://sourceforge.net/p/orm/code/1534 Author: mcurland Date: 2013-11-26 19:17:51 +0000 (Tue, 26 Nov 2013) Log Message: ----------- Added VS2013 solution files missed in [1533] Modified Paths: -------------- trunk/Tools/VersionGenerator/VersionGenerator.csproj trunk/XML/GenerationSamples/GenerationSamples.csproj Added Paths: ----------- trunk/Tools/DisableRuleDirectiveProcessor/DisableRuleDirectiveProcessor.VS2013.sln trunk/Tools/NUBuild/NUBuild.VS2013.sln trunk/Tools/NUBuildVS/NUBuildVS.VS2013.sln trunk/Tools/VersionGenerator/VersionGenerator.VS2013.sln trunk/XML/GenerationSamples/GenerationSamples.VS2013.sln Added: trunk/Tools/DisableRuleDirectiveProcessor/DisableRuleDirectiveProcessor.VS2013.sln =================================================================== --- trunk/Tools/DisableRuleDirectiveProcessor/DisableRuleDirectiveProcessor.VS2013.sln (rev 0) +++ trunk/Tools/DisableRuleDirectiveProcessor/DisableRuleDirectiveProcessor.VS2013.sln 2013-11-26 19:17:51 UTC (rev 1534) @@ -0,0 +1,19 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.21005.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DisableRuleDirectiveProcessor", "DisableRuleDirectiveProcessor.csproj", "{FF511C36-4CC6-4AF4-AA5B-5F5F70E3154F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + DisableRuleDirectiveProcessor|Any CPU = DisableRuleDirectiveProcessor|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FF511C36-4CC6-4AF4-AA5B-5F5F70E3154F}.DisableRuleDirectiveProcessor|Any CPU.ActiveCfg = DisableRuleDirectiveProcessor|Any CPU + {FF511C36-4CC6-4AF4-AA5B-5F5F70E3154F}.DisableRuleDirectiveProcessor|Any CPU.Build.0 = DisableRuleDirectiveProcessor|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal Added: trunk/Tools/NUBuild/NUBuild.VS2013.sln =================================================================== (Binary files differ) Index: trunk/Tools/NUBuild/NUBuild.VS2013.sln =================================================================== --- trunk/Tools/NUBuild/NUBuild.VS2013.sln 2013-11-26 06:46:35 UTC (rev 1533) +++ trunk/Tools/NUBuild/NUBuild.VS2013.sln 2013-11-26 19:17:51 UTC (rev 1534) Property changes on: trunk/Tools/NUBuild/NUBuild.VS2013.sln ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/Tools/NUBuildVS/NUBuildVS.VS2013.sln =================================================================== (Binary files differ) Index: trunk/Tools/NUBuildVS/NUBuildVS.VS2013.sln =================================================================== --- trunk/Tools/NUBuildVS/NUBuildVS.VS2013.sln 2013-11-26 06:46:35 UTC (rev 1533) +++ trunk/Tools/NUBuildVS/NUBuildVS.VS2013.sln 2013-11-26 19:17:51 UTC (rev 1534) Property changes on: trunk/Tools/NUBuildVS/NUBuildVS.VS2013.sln ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: trunk/Tools/VersionGenerator/VersionGenerator.VS2013.sln =================================================================== --- trunk/Tools/VersionGenerator/VersionGenerator.VS2013.sln (rev 0) +++ trunk/Tools/VersionGenerator/VersionGenerator.VS2013.sln 2013-11-26 19:17:51 UTC (rev 1534) @@ -0,0 +1,19 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.21005.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VersionGenerator", "VersionGenerator.csproj", "{08A86751-1C54-44E4-9402-E1A3AD1DF15B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + VersionGenerator|Any CPU = VersionGenerator|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {08A86751-1C54-44E4-9402-E1A3AD1DF15B}.VersionGenerator|Any CPU.ActiveCfg = VersionGenerator|Any CPU + {08A86751-1C54-44E4-9402-E1A3AD1DF15B}.VersionGenerator|Any CPU.Build.0 = VersionGenerator|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal Modified: trunk/Tools/VersionGenerator/VersionGenerator.csproj =================================================================== --- trunk/Tools/VersionGenerator/VersionGenerator.csproj 2013-11-26 06:46:35 UTC (rev 1533) +++ trunk/Tools/VersionGenerator/VersionGenerator.csproj 2013-11-26 19:17:51 UTC (rev 1534) @@ -1,4 +1,4 @@ -<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">VersionGenerator</Configuration> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> Added: trunk/XML/GenerationSamples/GenerationSamples.VS2013.sln =================================================================== (Binary files differ) Index: trunk/XML/GenerationSamples/GenerationSamples.VS2013.sln =================================================================== --- trunk/XML/GenerationSamples/GenerationSamples.VS2013.sln 2013-11-26 06:46:35 UTC (rev 1533) +++ trunk/XML/GenerationSamples/GenerationSamples.VS2013.sln 2013-11-26 19:17:51 UTC (rev 1534) Property changes on: trunk/XML/GenerationSamples/GenerationSamples.VS2013.sln ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Modified: trunk/XML/GenerationSamples/GenerationSamples.csproj =================================================================== --- trunk/XML/GenerationSamples/GenerationSamples.csproj 2013-11-26 06:46:35 UTC (rev 1533) +++ trunk/XML/GenerationSamples/GenerationSamples.csproj 2013-11-26 19:17:51 UTC (rev 1534) @@ -1,4 +1,4 @@ -<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">GenerationSamples</Configuration> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |