From: Chris M. <cm...@us...> - 2006-05-30 17:36:34
|
User: cmicali Date: 06/05/30 10:36:22 Modified: etc/andromda-dotnet/AndroMDA.VS80AddIn AndroMDA VS2005 Add-In Readme.rtf etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn AndroMDA.VS80AddIn.AddIn AndroMDA.VS80AddIn.csproj VS80AddIn.cs etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Commands AboutCommand.cs AddInCommandBase.cs AndroMDALogoCommand.cs GenerateCodeCommand.cs OpenModelCommand.cs ReloadMDAConfigCommand.cs ResyncCommand.cs RunSchemaExportCommand.cs RunSolutionWizardCommand.cs StopCommand.cs etc/andromda-dotnet/AndroMDA.VS80AddIn/Installer AndroMDA VS2005 Add-In Setup.exe Added: etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Commands CreateEntityVOConvertorCommand.cs etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Utils CodeModelUtils.cs Log: - Refactored a few properties of AddInCommandBase - Added option to code window context menu to generate entity/vo conversion code Revision Changes Path No revision No revision No revision No revision 1.3 +4 -4 plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn.AddIn Index: AndroMDA.VS80AddIn.AddIn =================================================================== RCS file: /cvsroot/andromdaplugins/plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn.AddIn,v retrieving revision 1.2 retrieving revision 1.3 diff -u -w -r1.2 -r1.3 --- AndroMDA.VS80AddIn.AddIn 18 Apr 2006 17:18:50 -0000 1.2 +++ AndroMDA.VS80AddIn.AddIn 30 May 2006 17:36:21 -0000 1.3 @@ -18,14 +18,14 @@ <ToolsOptionsPage> <Category Name="AndroMDA" > - <SubCategory Name="External Tools"> - <Assembly>AndroMDA.VS80AddIn.dll</Assembly> - <FullClassName>AndroMDA.VS80AddIn.Dialogs.ExternalToolsOptionsPage</FullClassName> - </SubCategory> <SubCategory Name="General"> <Assembly>AndroMDA.VS80AddIn.dll</Assembly> <FullClassName>AndroMDA.VS80AddIn.Dialogs.GeneralOptionsPage</FullClassName> </SubCategory> + <SubCategory Name="External Tools"> + <Assembly>AndroMDA.VS80AddIn.dll</Assembly> + <FullClassName>AndroMDA.VS80AddIn.Dialogs.ExternalToolsOptionsPage</FullClassName> + </SubCategory> </Category> </ToolsOptionsPage> 1.12 +3 -0 plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn.csproj Index: AndroMDA.VS80AddIn.csproj =================================================================== RCS file: /cvsroot/andromdaplugins/plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn.csproj,v retrieving revision 1.11 retrieving revision 1.12 diff -u -w -r1.11 -r1.12 --- AndroMDA.VS80AddIn.csproj 28 May 2006 19:32:27 -0000 1.11 +++ AndroMDA.VS80AddIn.csproj 30 May 2006 17:36:21 -0000 1.12 @@ -42,6 +42,7 @@ <Reference Include="System.Data" /> <Reference Include="System.Design" /> <Reference Include="System.Drawing" /> + <Reference Include="System.Management" /> <Reference Include="System.Windows.Forms" /> <Reference Include="System.Xml" /> <Reference Include="VSLangProj, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> @@ -54,6 +55,7 @@ <Compile Include="Commands\AboutCommand.cs" /> <Compile Include="Commands\AddInCommandBase.cs" /> <Compile Include="Commands\AndroMDALogoCommand.cs" /> + <Compile Include="Commands\CreateEntityVOConvertorCommand.cs" /> <Compile Include="Commands\RunSchemaExportCommand.cs" /> <Compile Include="Commands\ReloadMDAConfigCommand.cs" /> <Compile Include="Commands\OpenModelCommand.cs" /> @@ -109,6 +111,7 @@ <Compile Include="MavenProxy.cs" /> <Compile Include="MDAProject.cs" /> <Compile Include="MDASolutionManager.cs" /> + <Compile Include="Utils\CodeModelUtils.cs" /> <Compile Include="WizardSolutionProcessor.cs" /> <Compile Include="AddInSettings.cs" /> <Compile Include="Resource1.Designer.cs"> 1.8 +2 -1 plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/VS80AddIn.cs Index: VS80AddIn.cs =================================================================== RCS file: /cvsroot/andromdaplugins/plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/VS80AddIn.cs,v retrieving revision 1.7 retrieving revision 1.8 diff -u -w -r1.7 -r1.8 --- VS80AddIn.cs 27 May 2006 15:05:58 -0000 1.7 +++ VS80AddIn.cs 30 May 2006 17:36:21 -0000 1.8 @@ -88,6 +88,7 @@ m_commands.Add(new RunSchemaExportCommand()); m_commands.Add(new OpenModelCommand()); m_commands.Add(new AboutCommand()); + m_commands.Add(new CreateEntityVOConvertorCommand()); // Set the context for each command foreach (AddInCommandBase cmd in m_commands) { @@ -230,7 +231,7 @@ // Add the buttons to the toolbar foreach (AddInCommandBase cmd in m_commands) { - cmd.AddToToolbar(m_toolBar); + cmd.InitToolbars(m_toolBar); } } 1.5 +1 -1 plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Commands/AboutCommand.cs Index: AboutCommand.cs =================================================================== RCS file: /cvsroot/andromdaplugins/plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Commands/AboutCommand.cs,v retrieving revision 1.4 retrieving revision 1.5 diff -u -w -r1.4 -r1.5 --- AboutCommand.cs 16 May 2006 15:46:44 -0000 1.4 +++ AboutCommand.cs 30 May 2006 17:36:21 -0000 1.5 @@ -18,7 +18,7 @@ { public AboutCommand() { - Init("About", "About", "About AndroMDA Add-In", 487, AddInCommandType.AlwaysEnabled); + Init("About", "About", "About AndroMDA Add-In", 487, VisibilityType.AlwaysEnabled); m_isStartOfGroup = true; } 1.6 +51 -15 plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Commands/AddInCommandBase.cs Index: AddInCommandBase.cs =================================================================== RCS file: /cvsroot/andromdaplugins/plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Commands/AddInCommandBase.cs,v retrieving revision 1.5 retrieving revision 1.6 diff -u -w -r1.5 -r1.6 --- AddInCommandBase.cs 16 May 2006 15:46:44 -0000 1.5 +++ AddInCommandBase.cs 30 May 2006 17:36:21 -0000 1.6 @@ -20,13 +20,15 @@ #region Enumerations - public enum AddInCommandType { AlwaysEnabled, AlwaysDisabled, EnabledWhenMdaInactive, EnabledWhenMdaActiveButDisabled, EnabledWhenMdaActive, EnabledWhenMdaActiveAndMavenNotRunning, EnabledWhenMdaActiveAndMavenRunning } + public enum VisibilityType { AlwaysEnabled, AlwaysDisabled, EnabledWhenMdaInactive, EnabledWhenMdaActiveButDisabled, EnabledWhenMdaActive, EnabledWhenMdaActiveAndMavenNotRunning, EnabledWhenMdaActiveAndMavenRunning } #endregion #region Member variables protected bool m_isStartOfGroup = false; + protected bool m_autoAddToToolbar = true; + protected bool m_autoAddToCodeContextMenu = false; protected string m_name = string.Empty; protected string m_fullName = string.Empty; protected string m_buttonText = string.Empty; @@ -41,7 +43,7 @@ protected Command m_command = null; protected CommandBarButton m_commandBarButton = null; - protected AddInCommandType m_commandType = AddInCommandType.AlwaysEnabled; + protected VisibilityType m_visibilityType = VisibilityType.AlwaysEnabled; protected vsCommandStatus m_lastStatus = vsCommandStatus.vsCommandStatusUnsupported; @@ -74,24 +76,36 @@ } } + public bool AutoAddToToolbar + { + get { return m_autoAddToToolbar; } + set { m_autoAddToToolbar = value; } + } + + public bool AutoAddToCodeWindowContextMenu + { + get { return m_autoAddToCodeContextMenu; } + set { m_autoAddToCodeContextMenu = value; } + } + #endregion public AddInCommandBase() { } - public AddInCommandBase(string name, string buttonText, string toolTip, int bitmapNumber, AddInCommandType commandType) + public AddInCommandBase(string name, string buttonText, string toolTip, int bitmapNumber, VisibilityType commandType) { Init(name, buttonText, toolTip, bitmapNumber, commandType); } - public void Init(string name, string buttonText, string toolTip, int bitmapNumber, AddInCommandType commandType) + public void Init(string name, string buttonText, string toolTip, int bitmapNumber, VisibilityType commandType) { m_name = name; m_buttonText = buttonText; m_toolTip = toolTip; m_bitmapNumber = bitmapNumber; - m_commandType = commandType; + m_visibilityType = commandType; m_fullName = "AndroMDA.VS80AddIn.Connect." + name; } @@ -103,6 +117,28 @@ m_addInSettings = addInSettings; } + public void InitToolbars(CommandBar toolBar) + { + if (this.AutoAddToToolbar) + { + AddToToolbar(toolBar); + } + if (this.AutoAddToCodeWindowContextMenu) + { + AddToCodeWindowContextMenu(); + } + } + + public void AddToCodeWindowContextMenu() + { + if (m_command != null) + { + _CommandBars cmdBars = (_CommandBars)m_application.CommandBars; + CommandBar cmdBar = cmdBars["Code Window"]; + m_command.AddControl(cmdBar, 1); + } + } + public void AddToToolbar(CommandBar toolbar) { AddToToolbar(toolbar, toolbar.Controls.Count + 1); @@ -165,16 +201,16 @@ if (commandName == m_fullName && neededText == vsCommandStatusTextWanted.vsCommandStatusTextWantedNone) { - switch (m_commandType) + switch (m_visibilityType) { - case AddInCommandType.AlwaysDisabled: + case VisibilityType.AlwaysDisabled: status = (vsCommandStatus)vsCommandStatus.vsCommandStatusSupported; break; - case AddInCommandType.AlwaysEnabled: + case VisibilityType.AlwaysEnabled: status = (vsCommandStatus)vsCommandStatus.vsCommandStatusSupported | vsCommandStatus.vsCommandStatusEnabled; break; - case AddInCommandType.EnabledWhenMdaActiveButDisabled: + case VisibilityType.EnabledWhenMdaActiveButDisabled: if (!m_solutionManager.IsEnabled && m_solutionManager.IsSolutionUsingMDA && m_application.Solution.IsOpen) { status = vsCommandStatus.vsCommandStatusSupported | vsCommandStatus.vsCommandStatusEnabled; @@ -184,7 +220,7 @@ status = vsCommandStatus.vsCommandStatusSupported | vsCommandStatus.vsCommandStatusInvisible; } break; - case AddInCommandType.EnabledWhenMdaInactive: + case VisibilityType.EnabledWhenMdaInactive: if (!m_solutionManager.IsEnabled && !m_solutionManager.IsSolutionUsingMDA && m_application.Solution.IsOpen) { status = vsCommandStatus.vsCommandStatusSupported | vsCommandStatus.vsCommandStatusEnabled; @@ -195,7 +231,7 @@ } break; - case AddInCommandType.EnabledWhenMdaActive: + case VisibilityType.EnabledWhenMdaActive: if (m_solutionManager.IsEnabled && m_application.Solution.IsOpen) { status = vsCommandStatus.vsCommandStatusSupported | vsCommandStatus.vsCommandStatusEnabled; @@ -206,7 +242,7 @@ } break; - case AddInCommandType.EnabledWhenMdaActiveAndMavenNotRunning: + case VisibilityType.EnabledWhenMdaActiveAndMavenNotRunning: if (m_solutionManager.IsEnabled && m_application.Solution.IsOpen && !m_solutionManager.IsMavenRunning) { status = vsCommandStatus.vsCommandStatusSupported | vsCommandStatus.vsCommandStatusEnabled; @@ -221,7 +257,7 @@ } break; - case AddInCommandType.EnabledWhenMdaActiveAndMavenRunning: + case VisibilityType.EnabledWhenMdaActiveAndMavenRunning: if (m_solutionManager.IsEnabled && m_application.Solution.IsOpen && m_solutionManager.IsMavenRunning) { status = vsCommandStatus.vsCommandStatusSupported | vsCommandStatus.vsCommandStatusEnabled; 1.3 +1 -1 plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Commands/AndroMDALogoCommand.cs Index: AndroMDALogoCommand.cs =================================================================== RCS file: /cvsroot/andromdaplugins/plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Commands/AndroMDALogoCommand.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -u -w -r1.2 -r1.3 --- AndroMDALogoCommand.cs 16 May 2006 15:46:44 -0000 1.2 +++ AndroMDALogoCommand.cs 30 May 2006 17:36:21 -0000 1.3 @@ -34,7 +34,7 @@ public AndroMDALogoCommand() { - Init("AndroMDALogo", "AndroMDA", "AndroMDA", -1, AddInCommandType.AlwaysDisabled); + Init("AndroMDALogo", "AndroMDA", "AndroMDA", -1, VisibilityType.AlwaysDisabled); m_isStartOfGroup = true; } 1.3 +1 -1 plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Commands/GenerateCodeCommand.cs Index: GenerateCodeCommand.cs =================================================================== RCS file: /cvsroot/andromdaplugins/plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Commands/GenerateCodeCommand.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -u -w -r1.2 -r1.3 --- GenerateCodeCommand.cs 16 May 2006 15:46:44 -0000 1.2 +++ GenerateCodeCommand.cs 30 May 2006 17:36:21 -0000 1.3 @@ -17,7 +17,7 @@ { public RunMavenCommand() { - Init("GenerateCode", "Generate", "Generate Code From Model", 2138, AddInCommandType.EnabledWhenMdaActiveAndMavenNotRunning); + Init("GenerateCode", "Generate", "Generate Code From Model", 2138, VisibilityType.EnabledWhenMdaActiveAndMavenNotRunning); } public override void Exec(vsCommandExecOption executeOption, ref object varIn, ref object varOut) 1.7 +1 -1 plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Commands/OpenModelCommand.cs Index: OpenModelCommand.cs =================================================================== RCS file: /cvsroot/andromdaplugins/plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Commands/OpenModelCommand.cs,v retrieving revision 1.6 retrieving revision 1.7 diff -u -w -r1.6 -r1.7 --- OpenModelCommand.cs 27 May 2006 15:05:59 -0000 1.6 +++ OpenModelCommand.cs 30 May 2006 17:36:21 -0000 1.7 @@ -19,7 +19,7 @@ { public OpenModelCommand() { - Init("OpenModel", "Open Model", "Open Model", 589, AddInCommandType.EnabledWhenMdaActive); + Init("OpenModel", "Open Model", "Open Model", 589, VisibilityType.EnabledWhenMdaActive); m_isStartOfGroup = true; } 1.3 +1 -1 plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Commands/ReloadMDAConfigCommand.cs Index: ReloadMDAConfigCommand.cs =================================================================== RCS file: /cvsroot/andromdaplugins/plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Commands/ReloadMDAConfigCommand.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -u -w -r1.2 -r1.3 --- ReloadMDAConfigCommand.cs 16 May 2006 15:46:44 -0000 1.2 +++ ReloadMDAConfigCommand.cs 30 May 2006 17:36:21 -0000 1.3 @@ -17,7 +17,7 @@ { public ReloadMDAConfigCommand() { - Init("ReloadMDAConfig", "Reload MDA Config", "Reload MDA Config", 1020, AddInCommandType.EnabledWhenMdaActiveButDisabled); + Init("ReloadMDAConfig", "Reload MDA Config", "Reload MDA Config", 1020, VisibilityType.EnabledWhenMdaActiveButDisabled); } public override void Exec(vsCommandExecOption executeOption, ref object varIn, ref object varOut) 1.4 +1 -1 plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Commands/ResyncCommand.cs Index: ResyncCommand.cs =================================================================== RCS file: /cvsroot/andromdaplugins/plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Commands/ResyncCommand.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -u -w -r1.3 -r1.4 --- ResyncCommand.cs 16 May 2006 15:46:44 -0000 1.3 +++ ResyncCommand.cs 30 May 2006 17:36:21 -0000 1.4 @@ -17,7 +17,7 @@ { public ResyncCommand() { - Init("ResyncFiles", "Resync", "Resync Generated Files", 37, AddInCommandType.EnabledWhenMdaActiveAndMavenNotRunning); + Init("ResyncFiles", "Resync", "Resync Generated Files", 37, VisibilityType.EnabledWhenMdaActiveAndMavenNotRunning); } public override void Exec(vsCommandExecOption executeOption, ref object varIn, ref object varOut) 1.5 +1 -1 plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Commands/RunSchemaExportCommand.cs Index: RunSchemaExportCommand.cs =================================================================== RCS file: /cvsroot/andromdaplugins/plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Commands/RunSchemaExportCommand.cs,v retrieving revision 1.4 retrieving revision 1.5 diff -u -w -r1.4 -r1.5 --- RunSchemaExportCommand.cs 16 May 2006 15:46:44 -0000 1.4 +++ RunSchemaExportCommand.cs 30 May 2006 17:36:21 -0000 1.5 @@ -20,7 +20,7 @@ { public RunSchemaExportCommand() { - Init("ExportSchema", "Export Schema", "Export Database Schema", 4005, AddInCommandType.EnabledWhenMdaActiveAndMavenNotRunning); + Init("ExportSchema", "Export Schema", "Export Database Schema", 4005, VisibilityType.EnabledWhenMdaActiveAndMavenNotRunning); m_isStartOfGroup = true; } 1.3 +1 -1 plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Commands/RunSolutionWizardCommand.cs Index: RunSolutionWizardCommand.cs =================================================================== RCS file: /cvsroot/andromdaplugins/plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Commands/RunSolutionWizardCommand.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -u -w -r1.2 -r1.3 --- RunSolutionWizardCommand.cs 16 May 2006 15:46:44 -0000 1.2 +++ RunSolutionWizardCommand.cs 30 May 2006 17:36:21 -0000 1.3 @@ -17,7 +17,7 @@ { public RunSolutionWizardCommand() { - Init("RunSolutionWizard", "Run MDA Solution Wizard", "Run MDA Solution Wizard", 2138, AddInCommandType.EnabledWhenMdaInactive); + Init("RunSolutionWizard", "Run MDA Solution Wizard", "Run MDA Solution Wizard", 2138, VisibilityType.EnabledWhenMdaInactive); } public override void Exec(vsCommandExecOption executeOption, ref object varIn, ref object varOut) 1.4 +1 -1 plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Commands/StopCommand.cs Index: StopCommand.cs =================================================================== RCS file: /cvsroot/andromdaplugins/plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Commands/StopCommand.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -u -w -r1.3 -r1.4 --- StopCommand.cs 16 May 2006 15:46:44 -0000 1.3 +++ StopCommand.cs 30 May 2006 17:36:21 -0000 1.4 @@ -18,7 +18,7 @@ public StopCommand() { - Init("StopGeneration", "Stop", "Stop Code Generation", 1670, AddInCommandType.EnabledWhenMdaActiveAndMavenRunning); + Init("StopGeneration", "Stop", "Stop Code Generation", 1670, VisibilityType.EnabledWhenMdaActiveAndMavenRunning); } public override void Exec(vsCommandExecOption executeOption, ref object varIn, ref object varOut) 1.1 plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Commands/CreateEntityVOConvertorCommand.cs Index: CreateEntityVOConvertorCommand.cs =================================================================== // AndroMDA Visual Studio 2005 Add-In // (c)2006 Sapient Corporation #region Using statements using System; using System.Collections; using Microsoft.VisualStudio.CommandBars; using EnvDTE; using EnvDTE80; #endregion namespace AndroMDA.VS80AddIn { public class CreateEntityVOConvertorCommand : AddInCommandBase { public CreateEntityVOConvertorCommand() { Init("CreateEntityVOConvertor", "Insert Entity/VO Conversion Code", "Insert code to convert between an entity and it's VO", 240, VisibilityType.AlwaysEnabled); m_isStartOfGroup = true; m_autoAddToCodeContextMenu = true; m_autoAddToToolbar = false; } public override void QueryStatus(string commandName, vsCommandStatusTextWanted neededText, ref vsCommandStatus status, ref object commandText) { if (m_application.ActiveDocument.Name.Contains("DaoImpl")) { status = (vsCommandStatus)vsCommandStatus.vsCommandStatusSupported; if (IsCommandAvailable(false)) { status = status | vsCommandStatus.vsCommandStatusEnabled; } } else { status = (vsCommandStatus)(vsCommandStatus.vsCommandStatusInvisible | vsCommandStatus.vsCommandStatusUnsupported); } } public override void Exec(vsCommandExecOption executeOption, ref object varIn, ref object varOut) { CodeFunction2 currentMethod = CodeModelUtils.GetCurrentMethod(m_application); if (IsCommandAvailable(currentMethod)) { CodeParameter2 param = currentMethod.Parameters.Item(1) as CodeParameter2; CodeClass2 containingClass = currentMethod.Parent as CodeClass2; bool isEntity = false; string returnType = currentMethod.Type.AsFullName; string paramType = currentMethod.Type.AsFullName; string returnVariableName = string.Empty; string codeToInsert = string.Empty; // Search for a Factory property in the return type to see if // we are converting from entity to vo or vo to entity foreach (CodeElement2 prop in currentMethod.Type.CodeType.Members) { if (prop.Kind == vsCMElement.vsCMElementClass && prop.Name == "Factory" ) { isEntity = true; break; } } // If we are converting to an entity if (isEntity) { returnVariableName = "entity"; codeToInsert += "// VO to entity conversion\n"; // Add code to create a new entity with the Factory.newInstance() method codeToInsert += returnType + " " + returnVariableName + " = " + returnType + ".Factory.newInstance();\n\n"; } else { returnVariableName = "valueObject"; codeToInsert += "// Entity to VO conversion\n\n"; // Add code to create a new VO with a new statement codeToInsert += returnType + " " + returnVariableName + " = new " + returnType + "();\n\n"; } ArrayList uncopiedProperties = new ArrayList(); ArrayList unmatchedProperties = new ArrayList(); // Iterate through each property of the return type foreach (CodeElement2 dstProp in currentMethod.Type.CodeType.Members) { if (dstProp.Kind == vsCMElement.vsCMElementProperty) { bool propertyExists = false; bool propertyCopied = false; // Iterate through each property of the parameter type to find a match foreach (CodeElement2 srcProp in param.Type.CodeType.Members) { // If we found a property of the same name if (dstProp.Kind == vsCMElement.vsCMElementProperty && dstProp.Name == srcProp.Name) { // Mark that we found the property propertyExists = true; CodeProperty srcProperty = srcProp as CodeProperty; CodeProperty dstProperty = dstProp as CodeProperty; if (dstProperty.Type.AsString == srcProperty.Type.AsString) { // Insert simple copy code codeToInsert += returnVariableName + "." + dstProp.Name + " = " + param.Name + "." + dstProp.Name + ";\n"; // Mark that we have copied the property propertyCopied = true; } } } // If the property exists in both the entity and the vo // but the types differ if (propertyExists && !propertyCopied) { // Add it to the uncopied properties list uncopiedProperties.Add(dstProp.Name); } else if (!propertyExists) { unmatchedProperties.Add(dstProp.Name); } } } foreach (string uncopiedProperty in uncopiedProperties) { codeToInsert += "// " + returnVariableName + "." + uncopiedProperty + " = " + param.Name + "." + uncopiedProperty + ";\n"; } foreach (string unmatchedProperty in unmatchedProperties) { codeToInsert += "// " + returnVariableName + "." + unmatchedProperty + "\n"; } // Add the return statement codeToInsert += "\nreturn " + returnVariableName + ";\n\n"; // Batch insert the new code so it can be undone in 1 call to undo EditPoint pnt = currentMethod.GetStartPoint(vsCMPart.vsCMPartBody).CreateEditPoint(); pnt.Insert(codeToInsert); // Format the code (indent it properly) pnt.SmartFormat(currentMethod.GetStartPoint(vsCMPart.vsCMPartBody)); m_application.StatusBar.Text = "AndroMDA: Code inserted"; } else { m_application.StatusBar.Text = "AndroMDA: Unable to insert code"; } } #region IsCommandAvailable Implementation private bool IsCommandAvailable(CodeFunction2 currentMethod, bool fullCheck) { if ( // Ensure we found the current method currentMethod != null && // That it has one parameter currentMethod.Parameters.Count == 1 && // That it is an override currentMethod.OverrideKind == vsCMOverrideKind.vsCMOverrideKindOverride && // That it is function (method) currentMethod.FunctionKind == vsCMFunction.vsCMFunctionFunction && // That it exists inside a project currentMethod.InfoLocation == vsCMInfoLocation.vsCMInfoLocationProject && // It's return type is not void currentMethod.Type.AsFullName != "void" && // The return type does not equal the parameter type currentMethod.Parameters.Item(1).FullName != currentMethod.Type.AsFullName && // And it's name is either ends with ToEntity or begins with To (currentMethod.Name.EndsWith("ToEntity") || currentMethod.Name.StartsWith("To")) ) { if (!fullCheck) return true; CodeParameter2 param = currentMethod.Parameters.Item(1) as CodeParameter2; CodeClass2 containingClass = currentMethod.Parent as CodeClass2; if (// Ensure we found the parameter and the parent class param != null && containingClass != null && // Ensure we are in a DaoImpl class containingClass.Name.Contains("DaoImpl") ) { return true; } } return false; } private bool IsCommandAvailable() { CodeFunction2 currentMethod = CodeModelUtils.GetCurrentMethod(m_application); return IsCommandAvailable(currentMethod); } private bool IsCommandAvailable(bool fullCheck) { CodeFunction2 currentMethod = CodeModelUtils.GetCurrentMethod(m_application); return IsCommandAvailable(currentMethod, fullCheck); } private bool IsCommandAvailable(CodeFunction2 currentMethod) { return IsCommandAvailable(currentMethod, true); } #endregion } } No revision No revision No revision No revision 1.1 plugins/etc/andromda-dotnet/AndroMDA.VS80AddIn/AndroMDA.VS80AddIn/Utils/CodeModelUtils.cs Index: CodeModelUtils.cs =================================================================== // AndroMDA Visual Studio 2005 Add-In // (c)2006 Sapient Corporation #region Using statements using System; using System.Collections.Generic; using System.Text; using System.Management; using Microsoft.VisualStudio.VCCodeModel; using EnvDTE; using EnvDTE80; #endregion namespace AndroMDA.VS80AddIn { public class CodeModelUtils { public static CodeFunction2 GetCurrentMethod(DTE dte) { vsCMElement[] searchScopes = { vsCMElement.vsCMElementFunction, }; return GetCodeElement(dte, searchScopes) as CodeFunction2; } public static CodeElement GetCodeElement(DTE dte) { vsCMElement[] searchScopes = { vsCMElement.vsCMElementFunction, vsCMElement.vsCMElementProperty, vsCMElement.vsCMElementVariable, vsCMElement.vsCMElementEvent, vsCMElement.vsCMElementClass, vsCMElement.vsCMElementInterface, vsCMElement.vsCMElementStruct, vsCMElement.vsCMElementEnum }; return GetCodeElement(dte, searchScopes); } public static CodeElement GetCodeElement(DTE dte, vsCMElement[] searchScopes) { if (dte.ActiveDocument == null) return null; if (dte.ActiveDocument.ProjectItem == null) return null; if (dte.ActiveDocument.ProjectItem.FileCodeModel == null) return null; TextSelection selection = (TextSelection)dte.ActiveWindow.Selection; if (selection == null || selection.ActivePoint == null) return null; EditPoint selPoint = selection.ActivePoint.CreateEditPoint(); CodeLanguage currentLang = CodeLanguage.CSharp; selPoint.StartOfLine(); while (true) { string BlockText = selPoint.GetText(selPoint.LineLength).Trim(); // *** Skip over any XML Doc comments and Attributes if (currentLang == CodeLanguage.CSharp && BlockText.StartsWith("/// ") || currentLang == CodeLanguage.CSharp && BlockText.StartsWith("[") || currentLang == CodeLanguage.VB && BlockText.StartsWith("''' ") || currentLang == CodeLanguage.VB && BlockText.StartsWith("<")) { selPoint.LineDown(1); selPoint.StartOfLine(); } else break; } // *** Make sure the cursor is placed inside of the definition always // *** Especially required for single line methods/fields/events etc. selPoint.EndOfLine(); selPoint.CharLeft(1); // Force into the text string xBlockText = selPoint.GetText(selPoint.LineLength).Trim(); // get the element under the cursor CodeElement element = null; FileCodeModel2 CodeModel = dte.ActiveDocument.ProjectItem.FileCodeModel as FileCodeModel2; // *** Supported scopes - set up here in the right parsing order // *** from lowest level to highest level // *** NOTE: Must be adjusted to match any CodeElements supported foreach (vsCMElement scope in searchScopes) { try { element = CodeModel.CodeElementFromPoint(selPoint, scope); if (element != null) break; // if no exception - break } catch { ; } } if (element == null) return null; return element; } } } |