From: <mcu...@us...> - 2010-06-04 02:08:07
|
Revision: 1446 http://orm.svn.sourceforge.net/orm/?rev=1446&view=rev Author: mcurland Date: 2010-06-04 02:08:00 +0000 (Fri, 04 Jun 2010) Log Message: ----------- Fixed SetComparisonConstraint verbalization problem with compatible columns. The initial object type list now shows a shared supertype of the role players in each column instead of the type from the first sequence, which would change the constraint verbalization meaning as the sequence order changed. Also added generic signatures for the ObjectType.GetNearestCompatibleType methods. refs #395 Modified Paths: -------------- trunk/ORMModel/ObjectModel/ObjectType.cs trunk/ORMModel/ObjectModel/Verbalization.cs trunk/ORMModel/ObjectModel/VerbalizationGenerator.cs trunk/ORMModel/ObjectModel/VerbalizationGenerator.xml trunk/ORMModel/ObjectModel/VerbalizationGenerator.xsd trunk/ORMModel/ObjectModel/VerbalizationGenerator.xslt trunk/Setup/Readme.htm Modified: trunk/ORMModel/ObjectModel/ObjectType.cs =================================================================== --- trunk/ORMModel/ObjectModel/ObjectType.cs 2010-06-03 22:10:49 UTC (rev 1445) +++ trunk/ORMModel/ObjectModel/ObjectType.cs 2010-06-04 02:08:00 UTC (rev 1446) @@ -1461,25 +1461,39 @@ #endregion // Helper class for GetNearestCompatibleTypes /// <summary> /// Return an ObjectType array containing the nearest compatible - /// types for the given role collection. + /// types for the given collection of role collections. /// </summary> /// <param name="roleCollectionCollection">Set of collections of roles to walk</param> /// <param name="column">The column to test</param> /// <returns>ObjectType[]</returns> public static ObjectType[] GetNearestCompatibleTypes(IEnumerable<IEnumerable<Role>> roleCollectionCollection, int column) { - return GetNearestCompatibleTypes(GetColumnRoleCollection(roleCollectionCollection, column)); + return GetNearestCompatibleTypes(GetRolePlayerCollection(GetColumnCollection(roleCollectionCollection, column), delegate(Role role) { return role.RolePlayer; })); } - private static IEnumerable<Role> GetColumnRoleCollection(IEnumerable<IEnumerable<Role>> roleCollectionCollection, int column) + /// <summary> + /// Return an ObjectType array containing the nearest compatible + /// types for collection of collections of elements that can be + /// converted to an <see cref="ObjectType"/>. + /// </summary> + /// <param name="collectionCollection">Set of collections of convertible elements to walk</param> + /// <param name="column">The column to test</param> + /// <param name="converter">A <see cref="Converter{T,ObjectType}"/> to transform elements.</param> + /// <returns>ObjectType[]</returns> + public static ObjectType[] GetNearestCompatibleTypes<T>(IEnumerable<IEnumerable<T>> collectionCollection, int column, Converter<T, ObjectType> converter) { - foreach (IEnumerable<Role> row in roleCollectionCollection) + return GetNearestCompatibleTypes(GetRolePlayerCollection(GetColumnCollection(collectionCollection, column), converter)); + } + private static IEnumerable<T> GetColumnCollection<T>(IEnumerable<IEnumerable<T>> collectionCollection, int column) + { + foreach (IEnumerable<T> row in collectionCollection) { int currentColumn = 0; - foreach (Role role in row) + foreach (T t in row) { if (currentColumn == column) { - yield return role; + yield return t; + break; } ++currentColumn; } @@ -1493,13 +1507,25 @@ /// <returns>ObjectType[]</returns> public static ObjectType[] GetNearestCompatibleTypes(IEnumerable<Role> roleCollection) { - return GetNearestCompatibleTypes(GetRolePlayerCollection(roleCollection)); + return GetNearestCompatibleTypes(GetRolePlayerCollection(roleCollection, delegate(Role role) { return role.RolePlayer; })); } - private static IEnumerable<ObjectType> GetRolePlayerCollection(IEnumerable<Role> roleCollection) + /// <summary> + /// Return an ObjectType array containing the nearest compatible + /// types for the given collection of elements that can be + /// converted to an <see cref="ObjectType"/>. + /// </summary> + /// <param name="collection">Set of elements to walk</param> + /// <param name="converter">A <see cref="Converter{T,ObjectType}"/> to transform elements.</param> + /// <returns>ObjectType[]</returns> + public static ObjectType[] GetNearestCompatibleTypes<T>(IEnumerable<T> collection, Converter<T, ObjectType> converter) { - foreach (Role role in roleCollection) + return GetNearestCompatibleTypes(GetRolePlayerCollection(collection, converter)); + } + private static IEnumerable<ObjectType> GetRolePlayerCollection<T>(IEnumerable<T> collection, Converter<T, ObjectType> converter) + { + foreach (T t in collection) { - yield return role.RolePlayer; + yield return converter(t); } } /// <summary> Modified: trunk/ORMModel/ObjectModel/Verbalization.cs =================================================================== --- trunk/ORMModel/ObjectModel/Verbalization.cs 2010-06-03 22:10:49 UTC (rev 1445) +++ trunk/ORMModel/ObjectModel/Verbalization.cs 2010-06-04 02:08:00 UTC (rev 1446) @@ -3101,6 +3101,12 @@ /// suppresses subscripts in this situation. /// </summary> MinimizeHeadSubscripting = 4, + /// <summary> + /// The role player directly associated with a role player key should be replaced + /// with a role player of a resolved supertype. Determination of the associated + /// resolved supertype is dependent on the type of verbalization. + /// </summary> + ResolveSupertype = 8, } #endregion // RolePathRolePlayerRenderingOptions enum #region IRolePathRendererContext interface @@ -7430,6 +7436,18 @@ } } /// <summary> + /// Determine an alternate key for variable rendering that corresponds + /// to a variable with a resolved supertype appropriate associated with + /// the role player key. + /// </summary> + /// <param name="rolePlayerFor">The requested role player key</param> + /// <returns>An alternate key. The default implementation returns + /// the same key.</returns> + protected virtual object ResolveSupertypeKey(object rolePlayerFor) + { + return rolePlayerFor; + } + /// <summary> /// Override to add a filtering to establish which paths should be verbalized. /// Return <see langword="true"/> to allow verbalization of the path. /// </summary> @@ -7647,7 +7665,7 @@ #endregion // Analysis Methods #region Rendering Methods /// <summary> - /// Begin a verbalization of the path(s) and and associate head statement + /// Begin a verbalization of the path(s) and associated head statement /// </summary> public void BeginVerbalization() { @@ -7709,6 +7727,10 @@ { string retVal = null; RoleBase roleBase; // Fallback for common case with non-projected role + if (0 != (renderingOptions & RolePathRolePlayerRenderingOptions.ResolveSupertype)) + { + rolePlayerFor = ResolveSupertypeKey(rolePlayerFor); + } RolePlayerVariableUse? nullableVariableUse = GetRolePlayerVariableUse(rolePlayerFor); bool firstUse = true; if (nullableVariableUse.HasValue) @@ -8904,6 +8926,22 @@ allSequencedRoleLinks[i] = sequencedRoleLinks; } RolePlayerVariable[] columnVariables = new RolePlayerVariable[columnCount]; + + // Determine a shared supertype for each column and register a variable of the appropriate + // type for each column. + for (int i = 0; i < columnCount; ++i) + { + ObjectType[] compatibleTypes = ObjectType.GetNearestCompatibleTypes( + allSequencedRoleLinks, + i, + delegate(ConstraintRoleSequenceHasRole constraintRole) { return constraintRole.Role.RolePlayer; }); + while (compatibleTypes.Length > 1) + { + compatibleTypes = ObjectType.GetNearestCompatibleTypes(compatibleTypes); + } + columnVariables[i] = AddExternalVariable(i, null, compatibleTypes.Length != 0 ? compatibleTypes[0] : null, RolePathNode.Empty); + } + myColumnVariables = columnVariables; for (int i = 0; i < sequenceCount; ++i) { @@ -8948,6 +8986,19 @@ BeginQuantificationUsePhase(); } /// <summary> + /// The resolved supertype for each column is keyed by the column + /// number. Return the column number for a constraint role. + /// </summary> + protected override object ResolveSupertypeKey(object rolePlayerFor) + { + ConstraintRoleSequenceHasRole constraintRole; + if (null != (constraintRole = rolePlayerFor as ConstraintRoleSequenceHasRole)) + { + return constraintRole.ConstraintRoleSequence.RoleCollection.IndexOf(constraintRole.Role); + } + return base.ResolveSupertypeKey(rolePlayerFor); + } + /// <summary> /// Verbalize a path if it is projected /// </summary> protected override bool VerbalizesPath(RolePathOwner pathOwner, LeadRolePath rolePath) Modified: trunk/ORMModel/ObjectModel/VerbalizationGenerator.cs =================================================================== --- trunk/ORMModel/ObjectModel/VerbalizationGenerator.cs 2010-06-03 22:10:49 UTC (rev 1445) +++ trunk/ORMModel/ObjectModel/VerbalizationGenerator.cs 2010-06-04 02:08:00 UTC (rev 1446) @@ -11755,7 +11755,7 @@ } for (int RoleIter1 = 0; RoleIter1 < 1; ++RoleIter1) { - sbTemp.Append(pathVerbalizer.RenderAssociatedRolePlayer(includedConstraintRoles[RoleIter1], null, RolePathRolePlayerRenderingOptions.UsedInVerbalizationHead | RolePathRolePlayerRenderingOptions.MinimizeHeadSubscripting)); + sbTemp.Append(pathVerbalizer.RenderAssociatedRolePlayer(includedConstraintRoles[RoleIter1], null, RolePathRolePlayerRenderingOptions.UsedInVerbalizationHead | RolePathRolePlayerRenderingOptions.MinimizeHeadSubscripting | RolePathRolePlayerRenderingOptions.ResolveSupertype)); } snippet1Replace1Replace1 = sbTemp.ToString(); } @@ -11915,7 +11915,7 @@ listSnippet = CoreVerbalizationSnippetType.SimpleLogicalAndListSeparator; } sbTemp.Append(snippets.GetSnippet(listSnippet, isDeontic, isNegative)); - sbTemp.Append(pathVerbalizer.RenderAssociatedRolePlayer(includedConstraintRoles[RoleIter1], null, RolePathRolePlayerRenderingOptions.UsedInVerbalizationHead | RolePathRolePlayerRenderingOptions.MinimizeHeadSubscripting)); + sbTemp.Append(pathVerbalizer.RenderAssociatedRolePlayer(includedConstraintRoles[RoleIter1], null, RolePathRolePlayerRenderingOptions.UsedInVerbalizationHead | RolePathRolePlayerRenderingOptions.MinimizeHeadSubscripting | RolePathRolePlayerRenderingOptions.ResolveSupertype)); if (RoleIter1 == columnArity - 1) { sbTemp.Append(snippets.GetSnippet(CoreVerbalizationSnippetType.SimpleLogicalAndListClose, isDeontic, isNegative)); @@ -12079,7 +12079,7 @@ listSnippet = CoreVerbalizationSnippetType.SimpleLogicalAndListSeparator; } sbTemp.Append(snippets.GetSnippet(listSnippet, isDeontic, isNegative)); - sbTemp.Append(pathVerbalizer.RenderAssociatedRolePlayer(includedConstraintRoles[RoleIter1], null, RolePathRolePlayerRenderingOptions.UsedInVerbalizationHead | RolePathRolePlayerRenderingOptions.MinimizeHeadSubscripting)); + sbTemp.Append(pathVerbalizer.RenderAssociatedRolePlayer(includedConstraintRoles[RoleIter1], null, RolePathRolePlayerRenderingOptions.UsedInVerbalizationHead | RolePathRolePlayerRenderingOptions.MinimizeHeadSubscripting | RolePathRolePlayerRenderingOptions.ResolveSupertype)); if (RoleIter1 == columnArity - 1) { sbTemp.Append(snippets.GetSnippet(CoreVerbalizationSnippetType.SimpleLogicalAndListClose, isDeontic, isNegative)); @@ -12494,7 +12494,7 @@ listSnippet = CoreVerbalizationSnippetType.SimpleLogicalAndListSeparator; } sbTemp.Append(snippets.GetSnippet(listSnippet, isDeontic, isNegative)); - sbTemp.Append(pathVerbalizer.RenderAssociatedRolePlayer(includedConstraintRoles[RoleIter1], null, RolePathRolePlayerRenderingOptions.UsedInVerbalizationHead | RolePathRolePlayerRenderingOptions.MinimizeHeadSubscripting)); + sbTemp.Append(pathVerbalizer.RenderAssociatedRolePlayer(includedConstraintRoles[RoleIter1], null, RolePathRolePlayerRenderingOptions.UsedInVerbalizationHead | RolePathRolePlayerRenderingOptions.MinimizeHeadSubscripting | RolePathRolePlayerRenderingOptions.ResolveSupertype)); if (RoleIter1 == columnArity - 1) { sbTemp.Append(snippets.GetSnippet(CoreVerbalizationSnippetType.SimpleLogicalAndListClose, isDeontic, isNegative)); @@ -12918,7 +12918,7 @@ listSnippet = CoreVerbalizationSnippetType.SimpleLogicalAndListSeparator; } sbTemp.Append(snippets.GetSnippet(listSnippet, isDeontic, isNegative)); - sbTemp.Append(pathVerbalizer.RenderAssociatedRolePlayer(includedConstraintRoles[RoleIter1], null, RolePathRolePlayerRenderingOptions.UsedInVerbalizationHead | RolePathRolePlayerRenderingOptions.MinimizeHeadSubscripting)); + sbTemp.Append(pathVerbalizer.RenderAssociatedRolePlayer(includedConstraintRoles[RoleIter1], null, RolePathRolePlayerRenderingOptions.UsedInVerbalizationHead | RolePathRolePlayerRenderingOptions.MinimizeHeadSubscripting | RolePathRolePlayerRenderingOptions.ResolveSupertype)); if (RoleIter1 == columnArity - 1) { sbTemp.Append(snippets.GetSnippet(CoreVerbalizationSnippetType.SimpleLogicalAndListClose, isDeontic, isNegative)); @@ -13157,7 +13157,7 @@ listSnippet = CoreVerbalizationSnippetType.SimpleLogicalAndListSeparator; } sbTemp.Append(snippets.GetSnippet(listSnippet, isDeontic, isNegative)); - sbTemp.Append(pathVerbalizer.RenderAssociatedRolePlayer(includedConstraintRoles[RoleIter1], null, RolePathRolePlayerRenderingOptions.UsedInVerbalizationHead | RolePathRolePlayerRenderingOptions.MinimizeHeadSubscripting)); + sbTemp.Append(pathVerbalizer.RenderAssociatedRolePlayer(includedConstraintRoles[RoleIter1], null, RolePathRolePlayerRenderingOptions.UsedInVerbalizationHead | RolePathRolePlayerRenderingOptions.MinimizeHeadSubscripting | RolePathRolePlayerRenderingOptions.ResolveSupertype)); if (RoleIter1 == columnArity - 1) { sbTemp.Append(snippets.GetSnippet(CoreVerbalizationSnippetType.SimpleLogicalAndListClose, isDeontic, isNegative)); Modified: trunk/ORMModel/ObjectModel/VerbalizationGenerator.xml =================================================================== --- trunk/ORMModel/ObjectModel/VerbalizationGenerator.xml 2010-06-03 22:10:49 UTC (rev 1445) +++ trunk/ORMModel/ObjectModel/VerbalizationGenerator.xml 2010-06-04 02:08:00 UTC (rev 1446) @@ -1644,7 +1644,7 @@ <Snippet ref="ImpliedModalNecessityOperator"> <Snippet ref="ForEachIndentedQuantifier"> <IterateSequences listStyle="null" pass="first"> - <IterateRoles listStyle="null" match="providedConstraintRoles" pass="first" markProvidedConstraintRolesAsHead="true" minimizeProvidedConstraintRoleHeadSubscripting="true"/> + <IterateRoles listStyle="null" match="providedConstraintRoles" pass="first" markProvidedConstraintRolesAsHead="true" minimizeProvidedConstraintRoleHeadSubscripting="true" resolveProvidedConstraintRoleSupertype="true"/> </IterateSequences> <Snippet ref="Equality"> <IterateSequences listStyle="null" pass="first"> @@ -1675,7 +1675,7 @@ <Snippet ref="ImpliedModalNecessityOperator"> <Snippet ref="ForEachIndentedQuantifier"> <IterateSequences listStyle="null" pass="first"> - <IterateRoles listStyle="SimpleLogicalAndList" match="providedConstraintRoles" markProvidedConstraintRolesAsHead="true" minimizeProvidedConstraintRoleHeadSubscripting="true"/> + <IterateRoles listStyle="SimpleLogicalAndList" match="providedConstraintRoles" markProvidedConstraintRolesAsHead="true" minimizeProvidedConstraintRoleHeadSubscripting="true" resolveProvidedConstraintRoleSupertype="true"/> </IterateSequences> <Snippet ref="Equality"> <IterateSequences listStyle="null" pass="first"> @@ -1706,7 +1706,7 @@ <Snippet ref="ImpliedModalNecessityOperator"> <Snippet ref="ForEachCompactQuantifier"> <IterateSequences listStyle="null" pass="first"> - <IterateRoles match="providedConstraintRoles" listStyle="SimpleLogicalAndList" markProvidedConstraintRolesAsHead="true" minimizeProvidedConstraintRoleHeadSubscripting="true"/> + <IterateRoles match="providedConstraintRoles" listStyle="SimpleLogicalAndList" markProvidedConstraintRolesAsHead="true" minimizeProvidedConstraintRoleHeadSubscripting="true" resolveProvidedConstraintRoleSupertype="true"/> </IterateSequences> <Snippet ref="GroupEquality"> <IterateSequences listStyle="MultilineIndentedCompoundList" compositeList="true"> @@ -1733,7 +1733,7 @@ <Snippet ref="ImpliedModalNecessityOperator"> <Snippet ref="ForEachCompactQuantifier"> <IterateSequences listStyle="null" pass="first"> - <IterateRoles match="providedConstraintRoles" listStyle="SimpleLogicalAndList" markProvidedConstraintRolesAsHead="true" minimizeProvidedConstraintRoleHeadSubscripting="true"/> + <IterateRoles match="providedConstraintRoles" listStyle="SimpleLogicalAndList" markProvidedConstraintRolesAsHead="true" minimizeProvidedConstraintRoleHeadSubscripting="true" resolveProvidedConstraintRoleSupertype="true"/> </IterateSequences> <ConditionalSnippet> <Snippet ref="GroupExclusiveOr" conditionalMatch="ExclusionIsExclusiveOrConstraint"/> @@ -1791,7 +1791,7 @@ </IterateSequences> </Snippet> <IterateSequences listStyle="null" pass="first"> - <IterateRoles match="providedConstraintRoles" listStyle="SimpleLogicalAndList" markProvidedConstraintRolesAsHead="true" minimizeProvidedConstraintRoleHeadSubscripting="true"/> + <IterateRoles match="providedConstraintRoles" listStyle="SimpleLogicalAndList" markProvidedConstraintRolesAsHead="true" minimizeProvidedConstraintRoleHeadSubscripting="true" resolveProvidedConstraintRoleSupertype="true"/> </IterateSequences> </ConditionalReplacement> <ConditionalReplacement> @@ -1822,7 +1822,7 @@ <Snippet ref="ImpliedModalNecessityOperator"> <Snippet ref="ForEachCompactQuantifier"> <IterateSequences listStyle="null" pass="first"> - <IterateRoles match="providedConstraintRoles" listStyle="SimpleLogicalAndList" markProvidedConstraintRolesAsHead="true" minimizeProvidedConstraintRoleHeadSubscripting="true"/> + <IterateRoles match="providedConstraintRoles" listStyle="SimpleLogicalAndList" markProvidedConstraintRolesAsHead="true" minimizeProvidedConstraintRoleHeadSubscripting="true" resolveProvidedConstraintRoleSupertype="true"/> </IterateSequences> <Snippet ref="GroupExclusion"> <IterateSequences listStyle="MultilineIndentedCompoundList" compositeList="true"> Modified: trunk/ORMModel/ObjectModel/VerbalizationGenerator.xsd =================================================================== --- trunk/ORMModel/ObjectModel/VerbalizationGenerator.xsd 2010-06-03 22:10:49 UTC (rev 1445) +++ trunk/ORMModel/ObjectModel/VerbalizationGenerator.xsd 2010-06-04 02:08:00 UTC (rev 1446) @@ -1447,6 +1447,11 @@ <xs:documentation>Used with the providedConstraintRoles match style. Do not subscript a head variable of a type that is used for a single variable and also used fully existentially.</xs:documentation> </xs:annotation> </xs:attribute> + <xs:attribute name="resolveProvidedConstraintRoleSupertype" type="xs:boolean" default="false"> + <xs:annotation> + <xs:documentation>Used with the providedConstraintRoles match style. Request that a resolved supertype variable be used in place of the role player directly associated with the constraint role.</xs:documentation> + </xs:annotation> + </xs:attribute> <xs:attribute name="quantifyProvidedConstraintRoles" default="false" type="xs:boolean"> <xs:annotation> <xs:documentation>Used with the providedConstraintRoles match style. Quantify the returned replacement field.</xs:documentation> Modified: trunk/ORMModel/ObjectModel/VerbalizationGenerator.xslt =================================================================== (Binary files differ) Modified: trunk/Setup/Readme.htm =================================================================== --- trunk/Setup/Readme.htm 2010-06-03 22:10:49 UTC (rev 1445) +++ trunk/Setup/Readme.htm 2010-06-04 02:08:00 UTC (rev 1446) @@ -42,7 +42,7 @@ <hr/> <h2>May 2010 CTP Changes</h2> -<div>The May 2010 CTP release includes all modifications through changeset 1445. 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 May 2010 CTP release includes all modifications through changeset 1446. 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="#Uniqueness Frequency Join Path Verbalization 2010-05">Uniqueness and frequency constraint join path verbalization</a> </li> <li><a href="#One-to-one Relational Mapping 2010-05">One-to-one Relational Mapping Refinement</a> </li> @@ -57,6 +57,7 @@ <li>The <em>Is Mandatory</em> menu was incorrectly enabled for a unary role.</li> <li>Value constraints on remote identifying roles\x97where an entity type is (possibly recursively) identified by another entity type\x97were not correctly revalidated on a preferred identifier change.</li> <li>Style specifications used in the core verbalization were not included in the generated report styles. All report styles have now been brought up to date.</li> +<li>Set comparison constraint verbalization across compatible types was not choosing a shared column supertype for the initial object type list, resulting in verbalizations with different meanings when the constraint sequence order was changed.</li> </ol> </li> </ul> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2010-07-20 06:02:01
|
Revision: 1451 http://orm.svn.sourceforge.net/orm/?rev=1451&view=rev Author: mcurland Date: 2010-07-20 06:01:53 +0000 (Tue, 20 Jul 2010) Log Message: ----------- Change version numbers for July 2010 CTP release. refs #193 Modified Paths: -------------- trunk/Setup/Readme.htm trunk/VersionGenerator.exe.config Modified: trunk/Setup/Readme.htm =================================================================== --- trunk/Setup/Readme.htm 2010-07-20 05:45:44 UTC (rev 1450) +++ trunk/Setup/Readme.htm 2010-07-20 06:01:53 UTC (rev 1451) @@ -3,7 +3,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"/> -<title>NORMA June 2010 CTP Readme</title> +<title>NORMA July 2010 CTP Readme</title> <style type="text/css"> .new {font-size:x-small; background-color:Gold; color:Blue; } li {padding-bottom: 3px;} @@ -12,9 +12,9 @@ <body> -<p><b><a id="The Top" style="font-family:Verdana;font-size:medium">NORMA June 2010 CTP Readme</a> </b></p> +<p><b><a id="The Top" style="font-family:Verdana;font-size:medium">NORMA July 2010 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 June 2010 release is an incremental release with addition verbalization for uniqueness and frequency constraints and some relational mapping changes to make one-to-one fact type patterns map more consistently. The internal role path structure has also been extensively modified. Previous .orm files will be updated automatically, but saved files will not save in older versions of the tool. See detailed change notes below for specifics. +The July 2010 release is an incremental release with addition verbalization for uniqueness and frequency constraints and some relational mapping changes to make one-to-one fact type patterns map more consistently. The internal role path structure has also been extensively modified. Previous .orm files will be updated automatically, but saved files will not save in older versions of the tool. See detailed change notes below for specifics. <br/><br/></p> <h2>Contents</h2> <ul> @@ -41,11 +41,11 @@ </ul>--> <hr/> -<h2>June 2010 CTP Changes</h2> -<div>The June 2010 CTP release includes all modifications through changeset 1449. 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>July 2010 CTP Changes</h2> +<div>The July 2010 CTP release includes all modifications through changeset 1451. 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="#Uniqueness Frequency Join Path Verbalization 2010-06">Uniqueness and frequency constraint join path verbalization</a> </li> -<li><a href="#One-to-one Relational Mapping 2010-06">One-to-one Relational Mapping Refinement</a> </li> +<li><a href="#Uniqueness Frequency Join Path Verbalization 2010-07">Uniqueness and frequency constraint join path verbalization</a> </li> +<li><a href="#One-to-one Relational Mapping 2010-07">One-to-one Relational Mapping Refinement</a> </li> <li>Other Features: <ol> <li>The majority of changes in this release are internal and relate to ongoing work to make our <em>role path</em> structure relationally complete. Role paths are used for specifying derivation rules and join paths in terms of basic ORM elements (object types and roles). Role path definitions are a large undertaking that will result in major expressibility advances in ORM models, and your patience is appreciated as we refine and test this feature set internally before full public disclosure.</li> @@ -363,7 +363,7 @@ Join paths for set comparison constraints (subset, equality, exclusion) are correctly verbalized. Join paths for simple, unambiguous patterns where joined fact types share a role player or pass through an objectification are generated automatically. More complicated join paths are also verbalized, but cannot be entered with this release of NORMA. The tool(s) to enter these paths will be available in future releases and versions of the product. Note that paths are also automatically generated for uniqueness, frequency, and ring constraints, but join paths are not yet verbalized for these patterns. </li> <li> -<a id="Uniqueness Frequency Join Path Verbalization 2010-06" class="new" title="June 2010 CTP: Uniqueness and frequency constraint join path verbalization">2010-06</a> +<a id="Uniqueness Frequency Join Path Verbalization 2010-07" class="new" title="July 2010 CTP: Uniqueness and frequency constraint join path verbalization">2010-07</a> Join paths for uniqueness and frequency constraints verbalized correctly, leaving joined ring constraints as the only non-verbalized constraint types (adjustment to previous item). Verbalization is now correct for common uniqueness patterns such as using objectified and non-objectified roles in the same constraint. </li> </ol> @@ -475,7 +475,7 @@ <li>Additional abbreviation of individual ObjectType names as well as specific phrases are available in the 'Abbreviations' dialog for any of the Name Generation Settings nodes. Phrase abbreviations can include multiple words and can map to empty strings, which will omit the phrase. Phrases are treated case insensitively for replacement. Note that each child node in the Name Generation Settings branch is a refinement of the parent node and affects the scope where the abbreviation is supplied and all children. For example, changes made with the <em>Relational Names</em> node selected apply to both column and table names.</li> <li><a id="Relational compound name interpretation 2009-06" class="new" title="June 2009 CTP: Relational compound name interpretation">2009-06</a> Name collapsing (showing only one of two equivalent adjacent names) is performed on a whole-word basis to avoid overaggressive collapsing of partial words. For example, in previous releases, <em>BidId</em> would reduce to <em>Bid</em> and <em>FemaleMale</em> to <em>Female</em>, which was clearly incorrect. To balance this fix, the notion of a whole word has been enhanced by recognizing each part of a multi-part word in the conceptual model as a whole word. Any word with embedded capitalization that does not also have two adjacent capitals is automatically treated as a multi-part word (<em>ObjectType</em>, etc). Recognition of these word patterns also enables easier word replacement. For example, replacing the phrase <em>Employee</em> with <em>Emp</em> will affect both <em>Employee</em> and <em>ContractEmployee</em>.</li> -<li><a id="One-to-one Relational Mapping 2010-06" class="new" title="June 2010 CTP: One-to-one Relational Mapping Refinement">2010-06</a> +<li><a id="One-to-one Relational Mapping 2010-07" class="new" title="July 2010 CTP: One-to-one Relational Mapping Refinement">2010-07</a> Analysis of chained 1-1 fact types has been enhanced to provide an experience more consistent with non-chained 1-1 fact types in two ways:<ul><li>If there are multiple 1-1 fact types that can fully absorb an object type (similar to a subtype absorption) towards different object types, then consider the choice arbitrary and do not allow either absorption option.</li><li>Prioritize otherwise equivalent 1-1 chains based on mandatory patterns.</li></ul></li> </ol> <a href="#The Top">Return to top</a> Modified: trunk/VersionGenerator.exe.config =================================================================== --- trunk/VersionGenerator.exe.config 2010-07-20 05:45:44 UTC (rev 1450) +++ trunk/VersionGenerator.exe.config 2010-07-20 06:01:53 UTC (rev 1451) @@ -2,7 +2,7 @@ <configuration> <appSettings> <add key="RevisionStartYearMonth" value="2006-01"/> - <add key="ReleaseYearMonth" value="2010-06"/> + <add key="ReleaseYearMonth" value="2010-07"/> <!-- ReleaseType: "CTP" or "RTM" --> <add key="ReleaseType" value="CTP"/> <!-- Changes to the major and/or minor version numbers have extreme effects across every part of the product. --> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2010-07-22 19:25:50
|
Revision: 1452 http://orm.svn.sourceforge.net/orm/?rev=1452&view=rev Author: mcurland Date: 2010-07-22 19:25:43 +0000 (Thu, 22 Jul 2010) Log Message: ----------- * Fix automatic join path creation for uniqueness patterns using more than one role in an objectified fact type and at least one external role. refs #395 * Fix verbalization of introduced variables occurring immediately before a split branch * Fixed verbalization indentation issue with list separators overwriting a nested list Modified Paths: -------------- trunk/ORMModel/ObjectModel/Constraint.cs trunk/ORMModel/ObjectModel/Verbalization.cs trunk/Setup/Readme.htm Modified: trunk/ORMModel/ObjectModel/Constraint.cs =================================================================== --- trunk/ORMModel/ObjectModel/Constraint.cs 2010-07-20 06:01:53 UTC (rev 1451) +++ trunk/ORMModel/ObjectModel/Constraint.cs 2010-07-22 19:25:43 UTC (rev 1452) @@ -4635,7 +4635,17 @@ #if BLOCK_TRIVIAL_JOINPATHS usesOppositeObjectification = true; #endif // BLOCK_TRIVIAL_JOINPATHS + // All roles from the same objectified fact type will + // have the same opposite role player. They all need to + // be moved to the opposite role. usedObjectifyingRole[0] = true; + for (int j = 1; j < constraintRoleCount; ++j) + { + if (j != i && constraintRoles[j].Role.FactType == firstFactType) + { + usedObjectifyingRole[j] = true; + } + } } else { @@ -4661,7 +4671,15 @@ #if BLOCK_TRIVIAL_JOINPATHS usesOppositeObjectification = true; #endif // BLOCK_TRIVIAL_JOINPATHS + // Use objectification for all roles on the original fact type usedObjectifyingRole[0] = true; + for (int j = 1; j < constraintRoleCount; ++j) + { + if (j != i && constraintRoles[j].Role.FactType == firstFactType) + { + usedObjectifyingRole[j] = true; + } + } continue; } } @@ -4710,7 +4728,16 @@ { resolvedOppositeRolePlayer = compatibleSupertype; resolvedOppositeRolePlayerAlternate = null; + + // Use objectification for all roles on the original fact type usedObjectifyingRole[0] = true; + for (int j = 1; j < constraintRoleCount; ++j) + { + if (j != i && constraintRoles[j].Role.FactType == firstFactType) + { + usedObjectifyingRole[j] = true; + } + } #if BLOCK_TRIVIAL_JOINPATHS usesOppositeObjectification = true; multipleCompatibleOppositeRolePlayers = true; Modified: trunk/ORMModel/ObjectModel/Verbalization.cs =================================================================== --- trunk/ORMModel/ObjectModel/Verbalization.cs 2010-07-20 06:01:53 UTC (rev 1451) +++ trunk/ORMModel/ObjectModel/Verbalization.cs 2010-07-22 19:25:43 UTC (rev 1452) @@ -2912,12 +2912,18 @@ /// <summary> /// A space separated list of list closure snippet names from this /// enum that reverse an indentation. Trailing outdents can be tracked - /// specially during formatting so that external text on the same line - /// as the outdent keeps the same indentation level. + /// specially during formatting so that external text or outer list + /// separator and close elements on the same line as the outdent keeps + /// the same indentation level. /// </summary> ListCloseOutdentSnippets, /// <summary> + /// A space separated list of list separators and close elements that + /// must be placed before any active trailing outdent snippets. /// </summary> + OutdentAwareTrailingListSnippets, + /// <summary> + /// </summary> ChainedListOpen, /// <summary> /// A separator for a chained list where the chained restriction @@ -3384,9 +3390,9 @@ case RolePathVerbalizerSnippetType.AggregateSetProjection: return @"<span class=""quantifier"">each distinct</span> {0}"; case RolePathVerbalizerSnippetType.VariableIntroductionClause: - return @"<span class=""quantifier"">for</span> {0}<span class=""listSeparator"">, </span> "; + return @"<span class=""quantifier"">for</span> {0}<span class=""listSeparator"">, </span>"; case RolePathVerbalizerSnippetType.VariableIntroductionSeparator: - return @"<span class=""listSeparator"">, </span>"; + return @"<span class=""logicalOperator""> and </span>"; case RolePathVerbalizerSnippetType.VariableExistence: return @"{0} <span class=""quantifier"">exists</span>"; case RolePathVerbalizerSnippetType.NegatedVariableExistence: @@ -3395,6 +3401,8 @@ // List management case RolePathVerbalizerSnippetType.ListCloseOutdentSnippets: return @"ChainedListClose NegatedChainedListClose AndTailListClose AndNestedListClose NegatedAndLeadListClose NegatedAndTailListClose NegatedAndNestedListClose OrTailListClose OrNestedListClose NegatedOrLeadListClose NegatedOrTailListClose NegatedOrNestedListClose XorLeadListClose XorTailListClose XorNestedListClose NegatedXorLeadListClose NegatedXorTailListClose NegatedXorNestedListClose"; + case RolePathVerbalizerSnippetType.OutdentAwareTrailingListSnippets: + return @"NegatedAndLeadListSeparator NegatedAndNestedListSeparator NegatedAndTailListSeparator NegatedOrLeadListSeparator NegatedOrNestedListSeparator NegatedOrTailListSeparator XorLeadListSeparator XorNestedListSeparator XorTailListSeparator NegatedXorLeadListSeparator NegatedXorNestedListSeparator NegatedXorTailListSeparator"; case RolePathVerbalizerSnippetType.ChainedListOpen: return "<span>"; case RolePathVerbalizerSnippetType.ChainedListLocalRestrictionSeparator: @@ -5979,6 +5987,11 @@ /// the correct outdent level. Initialized on demand. /// </summary> private BitTracker myOutdentSnippetBits; + /// <summary> + /// Bits to track which trailing list snippets need to be placed + /// before an active outdent position. Initialized on demand. + /// </summary> + private BitTracker myOutdentAwareSnippetBits; #endregion // Member Variables #region Constructor /// <summary> @@ -6642,42 +6655,62 @@ } /// <summary> /// Determine if a specific <see cref="RolePathVerbalizerSnippetType"/> - /// value is marked as an outdent bit by the dyamic <see cref="RolePathVerbalizerSnippetType.ListCloseOutdentSnippets"/> - /// snippet. + /// value is marked as an outdent snippet by the dyamic + /// <see cref="RolePathVerbalizerSnippetType.ListCloseOutdentSnippets"/> snippet. /// </summary> private bool IsOutdentSnippet(RolePathVerbalizerSnippetType snippetType) { BitTracker tracker = myOutdentSnippetBits; if (tracker.Count == 0) { - #region Translate outdent snippet to bits - tracker.Resize((int)RolePathVerbalizerSnippetType.Last + 1); - string[] outdentSnippets = myRenderer.ResolveVerbalizerSnippet(RolePathVerbalizerSnippetType.ListCloseOutdentSnippets).Split((char[])null, StringSplitOptions.RemoveEmptyEntries); - if (outdentSnippets != null) + myOutdentSnippetBits = tracker = TranslateSnippetTypeDirective(RolePathVerbalizerSnippetType.ListCloseOutdentSnippets); + } + return tracker[(int)snippetType]; + } + /// <summary> + /// Determine if a specific <see cref="RolePathVerbalizerSnippetType"/> + /// value is marked as an outdent aware snippet by the dyamic + /// <see cref="RolePathVerbalizerSnippetType.OutdentAwareTrailingListSnippets"/> snippet. + /// </summary> + private bool IsOutdentAwareSnippet(RolePathVerbalizerSnippetType snippetType) + { + BitTracker tracker = myOutdentAwareSnippetBits; + if (tracker.Count == 0) + { + myOutdentAwareSnippetBits = tracker = TranslateSnippetTypeDirective(RolePathVerbalizerSnippetType.OutdentAwareTrailingListSnippets); + } + return tracker[(int)snippetType]; + } + /// <summary> + /// Helper method to return a bit tracker with true values for + /// any snippet type in the space separated string. + /// </summary> + private BitTracker TranslateSnippetTypeDirective(RolePathVerbalizerSnippetType snippetType) + { + BitTracker retVal = new BitTracker((int)RolePathVerbalizerSnippetType.Last + 1); + string[] outdentSnippets = myRenderer.ResolveVerbalizerSnippet(snippetType).Split((char[])null, StringSplitOptions.RemoveEmptyEntries); + if (outdentSnippets != null) + { + Type enumType = typeof(RolePathVerbalizerSnippetType); + for (int i = 0; i < outdentSnippets.Length; ++i) { - Type enumType = typeof(RolePathVerbalizerSnippetType); - for (int i = 0; i < outdentSnippets.Length; ++i) + string outdentSnippetName = outdentSnippets[i]; + object result = null; + try { - string outdentSnippetName = outdentSnippets[i]; - object result = null; - try - { - result = Enum.Parse(enumType, outdentSnippets[i], true); - } - catch (ArgumentException) - { - // Swallow it - } - if (result != null) - { - tracker[(int)(RolePathVerbalizerSnippetType)result] = true; - } + result = Enum.Parse(enumType, outdentSnippets[i], true); } + catch (ArgumentException) + { + // Swallow it + } + if (result != null) + { + retVal[(int)(RolePathVerbalizerSnippetType)result] = true; + } } - myOutdentSnippetBits = tracker; - #endregion // Translate outdent snippet to bits } - return tracker[(int)snippetType]; + return retVal; } private void ResolveReadings(VerbalizationPlanNode verbalizationNode, LinkedNode<VerbalizationPlanNode> verbalizationNodeLink, bool canCollapseLead, ref RolePlayerVariable contextLeadVariable, ref RolePlayerVariable contextTrailingVariable) { @@ -8742,27 +8775,55 @@ !NodeStartsWithVariable(childNode, variableUse.PrimaryRolePlayerVariable)) { childNode.RenderedRequiredContextVariable = true; - LinkedNode<VerbalizationPlanNode> blockLeadRoleModificationNodeLink = childNode.FirstChildNode; - while (blockLeadRoleModificationNodeLink != null) + LinkedNode<VerbalizationPlanNode> modifyNodeLink = childNode.FirstChildNode; + if (modifyNodeLink != null) { - VerbalizationPlanNode blockLeadRoleModificationNode = blockLeadRoleModificationNodeLink.Value; - switch (blockLeadRoleModificationNode.NodeType) + LinkedNode<VerbalizationPlanNode> blockLeadRoleModificationNodeLink = modifyNodeLink; + while (blockLeadRoleModificationNodeLink != null) { - case VerbalizationPlanNodeType.Branch: - blockLeadRoleModificationNodeLink = blockLeadRoleModificationNodeLink.Value.FirstChildNode; - break; - case VerbalizationPlanNodeType.FactType: - readingOptions = blockLeadRoleModificationNode.ReadingOptions; - if (0 != (readingOptions & (VerbalizationPlanReadingOptions.FullyCollapseFirstRole | VerbalizationPlanReadingOptions.BackReferenceFirstRole))) - { - blockLeadRoleModificationNode.ReadingOptions = readingOptions | VerbalizationPlanReadingOptions.BlockFullyCollapseFirstRole | VerbalizationPlanReadingOptions.BlockBackReferenceFirstRole; - } - blockLeadRoleModificationNodeLink = null; - break; - default: - blockLeadRoleModificationNodeLink = null; - break; + VerbalizationPlanNode blockLeadRoleModificationNode = blockLeadRoleModificationNodeLink.Value; + switch (blockLeadRoleModificationNode.NodeType) + { + case VerbalizationPlanNodeType.Branch: + blockLeadRoleModificationNodeLink = blockLeadRoleModificationNodeLink.Value.FirstChildNode; + break; + case VerbalizationPlanNodeType.FactType: + readingOptions = blockLeadRoleModificationNode.ReadingOptions; + if (0 != (readingOptions & (VerbalizationPlanReadingOptions.FullyCollapseFirstRole | VerbalizationPlanReadingOptions.BackReferenceFirstRole))) + { + blockLeadRoleModificationNode.ReadingOptions = readingOptions | VerbalizationPlanReadingOptions.BlockFullyCollapseFirstRole | VerbalizationPlanReadingOptions.BlockBackReferenceFirstRole; + } + blockLeadRoleModificationNodeLink = null; + break; + default: + blockLeadRoleModificationNodeLink = null; + break; + } } + + // Also turn off lead role collapsing on a subsequent child node. Backreferencing is still valid. + blockLeadRoleModificationNodeLink = modifyNodeLink.Next; + while (blockLeadRoleModificationNodeLink != null) + { + VerbalizationPlanNode blockLeadRoleModificationNode = blockLeadRoleModificationNodeLink.Value; + switch (blockLeadRoleModificationNode.NodeType) + { + case VerbalizationPlanNodeType.Branch: + blockLeadRoleModificationNodeLink = blockLeadRoleModificationNodeLink.Value.FirstChildNode; + break; + case VerbalizationPlanNodeType.FactType: + readingOptions = blockLeadRoleModificationNode.ReadingOptions; + if (0 != (readingOptions & VerbalizationPlanReadingOptions.FullyCollapseFirstRole)) + { + blockLeadRoleModificationNode.ReadingOptions = readingOptions | VerbalizationPlanReadingOptions.BlockFullyCollapseFirstRole; + } + blockLeadRoleModificationNodeLink = null; + break; + default: + blockLeadRoleModificationNodeLink = null; + break; + } + } } requiredVariableContextPhrase = QuantifyVariableUse(variableUse, false, false, default(VerbalizationHyphenBinder), -1); requiredVariableUseKeyLink = requiredVariableUseKeyLink.Next; @@ -8795,7 +8856,14 @@ { case VerbalizationPlanBranchType.Chain: case VerbalizationPlanBranchType.NegatedChain: - isTailBranch = nodeLink.Previous != null; + if (node.RenderedRequiredContextVariable) + { + isNestedBranch = true; + } + else + { + isTailBranch = nodeLink.Previous != null; + } break; default: isNestedBranch = true; @@ -8849,6 +8917,7 @@ { snippet = (RolePathVerbalizerSnippetType)((int)snippet + 1); } + nestedOutdent = -1; // Ignore previous nested outdents for lead snippets } else { @@ -8871,15 +8940,15 @@ snippet = RolePathVerbalizerSnippetType.ChainedListCollapsedSeparator; } // Check for a 'TailList', which will render its own lead separator in place of the chain separator. - else if (!(childNode.NodeType == VerbalizationPlanNodeType.Branch && + else if (!(!childNode.RenderedRequiredContextVariable && + childNode.NodeType == VerbalizationPlanNodeType.Branch && BranchSplits(childBranchType = childNode.BranchType) && GetRenderingStyleFromBranchType(childBranchType) == VerbalizationPlanBranchRenderingStyle.OperatorSeparated)) { snippet = (0 != (readingOptions & VerbalizationPlanReadingOptions.FullyCollapseFirstRole)) ? ((isTailBranch || isNestedBranch) ? RolePathVerbalizerSnippetType.ChainedListComplexRestrictionCollapsedLeadSeparator : RolePathVerbalizerSnippetType.ChainedListTopLevelComplexRestrictionCollapsedLeadSeparator) : ((childNode.RestrictsPreviousFactType || - previousChildNodeType == VerbalizationPlanNodeType.ChainedRootVariable || - previousChildNode.RenderedRequiredContextVariable) ? + previousChildNodeType == VerbalizationPlanNodeType.ChainedRootVariable) ? (LeadTextIsBackReference(childNode) ? RolePathVerbalizerSnippetType.ChainedListLocalRestrictionBackReferenceSeparator : RolePathVerbalizerSnippetType.ChainedListLocalRestrictionSeparator) : ((isTailBranch || isNestedBranch) ? (LeadTextIsBackReference(childNode) ? RolePathVerbalizerSnippetType.ChainedListComplexRestrictionBackReferenceSeparator : RolePathVerbalizerSnippetType.ChainedListComplexRestrictionSeparator) : @@ -8906,9 +8975,21 @@ break; } } - if (snippet != (RolePathVerbalizerSnippetType)(-1)) + string separatorText; + if (snippet != (RolePathVerbalizerSnippetType)(-1) && + !string.IsNullOrEmpty(separatorText = renderer.ResolveVerbalizerSnippet(snippet))) { - builder.Append(renderer.ResolveVerbalizerSnippet(snippet)); + if (nestedOutdent != -1 && + IsOutdentAwareSnippet(snippet) && + (nestedOutdent + restoreBuilder) < builder.Length) + { + builder.Insert(nestedOutdent + restoreBuilder, separatorText); + nestedOutdent += separatorText.Length; + } + else + { + builder.Append(separatorText); + } } if (requiredVariableContextPhrase != null) { @@ -8965,12 +9046,23 @@ string closeSnippet = renderer.ResolveVerbalizerSnippet(snippet); if (!string.IsNullOrEmpty(closeSnippet)) { - if (0 != (myOptions & RolePathVerbalizerOptions.MarkTrailingOutdentStart) && - IsOutdentSnippet(snippet)) + if (nestedOutdent != -1 && + IsOutdentAwareSnippet(snippet) && + (nestedOutdent + restoreBuilder) < builder.Length) { - outdentPosition = nestedOutdent != -1 ? nestedOutdent : (builder.Length - restoreBuilder); + builder.Insert(nestedOutdent + restoreBuilder, closeSnippet); + outdentPosition = IsOutdentSnippet(snippet) ? + nestedOutdent : // Nested outdent snippets, the position does not move + nestedOutdent + closeSnippet.Length; // Current node nested, outdent moves after it } - builder.Append(closeSnippet); + else + { + if (IsOutdentSnippet(snippet)) + { + outdentPosition = nestedOutdent != -1 ? nestedOutdent : (builder.Length - restoreBuilder); + } + builder.Append(closeSnippet); + } } else if (nestedOutdent != -1) { @@ -8982,7 +9074,10 @@ PopPairingUsePhase(); } } - if (nodeLink == null && outdentPosition != -1 && outdentPosition < (builder.Length - restoreBuilder)) + if (nodeLink == null && // Outermost + 0 != (myOptions & RolePathVerbalizerOptions.MarkTrailingOutdentStart) && // Options require an outdent mark + outdentPosition != -1 && // Have a trailing outdent with no visible text after it + outdentPosition < (builder.Length - restoreBuilder)) // Outdent has some text after it { builder.Insert(restoreBuilder + outdentPosition, "{0}"); } @@ -9392,6 +9487,7 @@ /// </summary> private bool NodeStartsWithVariable(VerbalizationPlanNode node, RolePlayerVariable variable) { + LinkedNode<VerbalizationPlanNode> childNodeLink; switch (node.NodeType) { case VerbalizationPlanNodeType.FactType: @@ -9400,11 +9496,13 @@ variable == GetRolePlayerVariableUse(entryPathedRole = node.FactTypeEntry).Value.PrimaryRolePlayerVariable && entryPathedRole.Role == node.Reading.RoleCollection[0].Role; case VerbalizationPlanNodeType.Branch: - switch (node.BranchType) + VerbalizationPlanBranchType branchType = node.BranchType; + switch (branchType) { case VerbalizationPlanBranchType.NegatedChain: - VerbalizationPlanNode negatedChildNode = node.FirstChildNode.Value; - if (0 != (negatedChildNode.ReadingOptions & VerbalizationPlanReadingOptions.BasicLeadRole)) + VerbalizationPlanNode negatedChildNode; + if (null != (childNodeLink = node.FirstChildNode) && + 0 != ((negatedChildNode = childNodeLink.Value).ReadingOptions & VerbalizationPlanReadingOptions.BasicLeadRole)) { if (0 != (ResolveDynamicNegatedExitRole(negatedChildNode) & VerbalizationPlanReadingOptions.NegatedExitRole) || GetCollapsibleLeadAllowedFromBranchType(VerbalizationPlanBranchType.NegatedChain)) @@ -9413,6 +9511,13 @@ } } break; + default: + if (null != (childNodeLink = node.FirstChildNode) && + GetCollapsibleLeadAllowedFromBranchType(branchType)) + { + return NodeStartsWithVariable(childNodeLink.Value, variable); + } + break; } break; } Modified: trunk/Setup/Readme.htm =================================================================== --- trunk/Setup/Readme.htm 2010-07-20 06:01:53 UTC (rev 1451) +++ trunk/Setup/Readme.htm 2010-07-22 19:25:43 UTC (rev 1452) @@ -42,7 +42,7 @@ <hr/> <h2>July 2010 CTP Changes</h2> -<div>The July 2010 CTP release includes all modifications through changeset 1451. 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 July 2010 CTP release includes all modifications through changeset 1452. 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="#Uniqueness Frequency Join Path Verbalization 2010-07">Uniqueness and frequency constraint join path verbalization</a> </li> <li><a href="#One-to-one Relational Mapping 2010-07">One-to-one Relational Mapping Refinement</a> </li> @@ -54,6 +54,7 @@ <li>Model Browser selection is cached for inactive documents to make document deactivation less intrusive to the current working state. Selection is remembered unless the Model Browser window is closed at any point while the document is inactive.</li> <li>The IsPersonal property is read-only and true for any direct or indirect subtype of an IsPersonal object type. To allow the property to change back to false, the original value of IsPersonal for the subtype does not change, it is just ignored if one or more supertypes are personal.</li> <li>Verbalization for constraints with join paths has been optimized to make more use of back reference constructs and collapse additional lead roles instead of repeating the lead role player.</li> +<li>Automatic join path generation has been expanded to support uniqueness constraints spanning roles in an objectified fact type and roles on fact types with the objectifying entity type as a role player.</li> </ol> </li> <li>Bug Fixes: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2010-09-10 05:10:29
|
Revision: 1454 http://orm.svn.sourceforge.net/orm/?rev=1454&view=rev Author: mcurland Date: 2010-09-10 05:10:23 +0000 (Fri, 10 Sep 2010) Log Message: ----------- Miscellaneous bug fixes: * RMap fix: Moving an object type from an rmap-ineligible to an rmap-eligible state does reconsider implicitly or explicitly objectified fact types that use that object type in the preferred (usually internal) identifier. * Role path rule verbalization: Path root references are not verbalizing as calculation inputs. refs #395 * Changed error message for frequency constraint error making 1..* frequency ranges invalid to use the positive 'always satisfied' form instead of 'never violated'. * Fixed sample population editor crash on role order change of non-uniqueness set constraints. Modified Paths: -------------- trunk/ORMModel/Framework/Diagnostics/TransactionLogViewer.resx trunk/ORMModel/ObjectModel/GeneratedCode/DomainModelResx.resx trunk/ORMModel/ObjectModel/ORMCore.dsl trunk/ORMModel/ObjectModel/ORMModel.resx trunk/ORMModel/ObjectModel/Verbalization.cs trunk/ORMModel/Shell/SamplePopulationEditor.cs trunk/Oial/ORMOialBridge/ORMElementGateway.cs Modified: trunk/ORMModel/Framework/Diagnostics/TransactionLogViewer.resx =================================================================== --- trunk/ORMModel/Framework/Diagnostics/TransactionLogViewer.resx 2010-08-18 20:16:38 UTC (rev 1453) +++ trunk/ORMModel/Framework/Diagnostics/TransactionLogViewer.resx 2010-09-10 05:10:23 UTC (rev 1454) @@ -343,8 +343,8 @@ <value>100</value> </data> <data name="FilterLabel.ToolTip" xml:space="preserve"> - <value>Double-click on an item in the grid to apply a filter that includes only similar item. -Multiple filters can be applied simultaneously with additional clicks on other fields. + <value>Double-click on an item in the grid to apply a filter that includes only similar items. +Multiple filters can be applied simultaneously with additional double-clicks in other fields. Press the Escape key to clear a current filter.</value> </data> Modified: trunk/ORMModel/ObjectModel/GeneratedCode/DomainModelResx.resx =================================================================== --- trunk/ORMModel/ObjectModel/GeneratedCode/DomainModelResx.resx 2010-08-18 20:16:38 UTC (rev 1453) +++ trunk/ORMModel/ObjectModel/GeneratedCode/DomainModelResx.resx 2010-09-10 05:10:23 UTC (rev 1454) @@ -1715,7 +1715,7 @@ <comment>Description for DomainClass 'FrequencyConstraintNonRestrictiveRangeError'</comment> </data> <data name="ORMSolutions.ORMArchitect.Core.ObjectModel.FrequencyConstraintNonRestrictiveRangeError.DisplayName" xml:space="preserve"> - <value>One to Unbounded Frequency Range Never Violated</value> + <value>One to Unbounded Frequency Range Always Satisfied</value> <comment>DisplayName for DomainClass 'FrequencyConstraintNonRestrictiveRangeError'</comment> </data> <data name="ORMSolutions.ORMArchitect.Core.ObjectModel.ReadingRequiresUserModificationError.Description" xml:space="preserve"> Modified: trunk/ORMModel/ObjectModel/ORMCore.dsl =================================================================== --- trunk/ORMModel/ObjectModel/ORMCore.dsl 2010-08-18 20:16:38 UTC (rev 1453) +++ trunk/ORMModel/ObjectModel/ORMCore.dsl 2010-09-10 05:10:23 UTC (rev 1454) @@ -1541,7 +1541,7 @@ </BaseClass> </DomainClass> - <DomainClass Name="FrequencyConstraintNonRestrictiveRangeError" Namespace="ORMSolutions.ORMArchitect.Core.ObjectModel" Id="0F5D1CDC-DD98-41CF-9FA8-5328B6F7B8A6" DisplayName="One to Unbounded Frequency Range Never Violated" Description=""> + <DomainClass Name="FrequencyConstraintNonRestrictiveRangeError" Namespace="ORMSolutions.ORMArchitect.Core.ObjectModel" Id="0F5D1CDC-DD98-41CF-9FA8-5328B6F7B8A6" DisplayName="One to Unbounded Frequency Range Always Satisfied" Description=""> <BaseClass> <DomainClassMoniker Name="ModelError"/> </BaseClass> Modified: trunk/ORMModel/ObjectModel/ORMModel.resx =================================================================== --- trunk/ORMModel/ObjectModel/ORMModel.resx 2010-08-18 20:16:38 UTC (rev 1453) +++ trunk/ORMModel/ObjectModel/ORMModel.resx 2010-09-10 05:10:23 UTC (rev 1454) @@ -309,7 +309,7 @@ <comment>The frequency constraint minimum must be less than or equal to the maximum. {0}=constraint name {1}=model name</comment> </data> <data name="ModelError.Constraint.FrequencyConstraintNonRestrictiveRangeError.Text" xml:space="preserve"> - <value>Constraint '{0}' in model '{1}' has an unbounded range with a minimum of one. This frequency pattern is never violated.</value> + <value>Constraint '{0}' in model '{1}' has an unbounded range with a minimum of one. This frequency pattern is always satisfied.</value> <comment>A frequency constraint with a minimum of 1 and an unbounded maximum is always true and should not be specified. {0}=constraint name {1}=model name</comment> </data> <data name="ModelError.Constraint.FrequencyConstraintViolatedByUniquenessConstraintError.Text" xml:space="preserve"> Modified: trunk/ORMModel/ObjectModel/Verbalization.cs =================================================================== --- trunk/ORMModel/ObjectModel/Verbalization.cs 2010-08-18 20:16:38 UTC (rev 1453) +++ trunk/ORMModel/ObjectModel/Verbalization.cs 2010-09-10 05:10:23 UTC (rev 1454) @@ -3880,12 +3880,17 @@ { int restoreBuilder = builder.Length; PathedRole sourceRole; + RolePathObjectTypeRoot sourceRoot; CalculatedPathValue sourceCalculation; PathConstant sourceConstant; if (null != (sourceRole = calculatedValueInput.SourcePathedRole)) { builder.Append(rendererContext.RenderAssociatedRolePlayer(sourceRole, null, RolePathRolePlayerRenderingOptions.None)); } + else if (null != (sourceRoot = calculatedValueInput.SourcePathRoot)) + { + builder.Append(rendererContext.RenderAssociatedRolePlayer(sourceRoot, null, RolePathRolePlayerRenderingOptions.None)); + } else if (null != (sourceCalculation = calculatedValueInput.SourceCalculatedValue)) { builder.Append(RenderCalculation(sourceCalculation, rendererContext, builder)); Modified: trunk/ORMModel/Shell/SamplePopulationEditor.cs =================================================================== --- trunk/ORMModel/Shell/SamplePopulationEditor.cs 2010-08-18 20:16:38 UTC (rev 1453) +++ trunk/ORMModel/Shell/SamplePopulationEditor.cs 2010-09-10 05:10:23 UTC (rev 1454) @@ -1703,7 +1703,11 @@ { return; } - TestRepopulateForIdentifierPart(((UniquenessConstraint)e.SourceElement).PreferredIdentifierFor); + UniquenessConstraint uniqueness; + if (null != (uniqueness = e.SourceElement as UniquenessConstraint)) + { + TestRepopulateForIdentifierPart(uniqueness.PreferredIdentifierFor); + } } #endregion // Entity Type Instance Event Handlers #region Misc Event Handlers Modified: trunk/Oial/ORMOialBridge/ORMElementGateway.cs =================================================================== --- trunk/Oial/ORMOialBridge/ORMElementGateway.cs 2010-08-18 20:16:38 UTC (rev 1453) +++ trunk/Oial/ORMOialBridge/ORMElementGateway.cs 2010-09-10 05:10:23 UTC (rev 1454) @@ -298,6 +298,15 @@ FilterModifiedObjectType(preferredFor); } } + Objectification objectification; + if (null != (objectification = factType.ImpliedByObjectification)) + { + ObjectType objectifyingType = objectification.NestingType; + if (IsElementExcluded(objectifyingType)) + { + FilterModifiedObjectType(objectifyingType); + } + } } } else if (exclusionLink == null) @@ -416,6 +425,11 @@ ExcludeObjectType(preferredFor, model, false, notifyExcluded); } } + Objectification objectification; + if (null != (objectification = factType.ImpliedByObjectification)) + { + ExcludeObjectType(objectification.NestingType, model, false, notifyExcluded); + } } } private static void ExcludeObjectType(ObjectType objectType) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2011-06-15 19:14:31
|
Revision: 1471 http://orm.svn.sourceforge.net/orm/?rev=1471&view=rev Author: mcurland Date: 2011-06-15 19:14:24 +0000 (Wed, 15 Jun 2011) Log Message: ----------- * Clear invariant value instance strings when a value is changed in the sample population editor. refs #402 * Added file templates for VS2010 modeling project. refs #405 * Push revision number to June 2011. refs #193 * Fix issue with 'null reference exception' when element deleted. This occurred if multiple shapes for the same backing object were placed on the same diagram and unique connectors were attached to those shapes. Verifying that we are only relinking shapes for non-deleted objects also significantly improves the performance of the delete operation. Modified Paths: -------------- trunk/ORMModel/Framework/Diagrams/MultiShapeUtility.cs trunk/ORMModel/ObjectModel/SamplePopulation.cs trunk/ORMModel/ShapeModel/ORMBaseShape.cs trunk/ORMModel/ShapeModel/ORMShape.AttachRules.cs trunk/ORMModel/ShapeModel/ORMShape.AttachRules.xml trunk/ORMModel/ShapeModel/ViewFixupRules.cs trunk/Setup/ComponentGroups.wxs trunk/Setup/Config.wxi trunk/Setup/NORMAItemTemplates.wxi trunk/Setup/Readme.htm trunk/VersionGenerator.exe.config Added Paths: ----------- trunk/ORMModel/Shell/ProjectItems/Modeling.zip trunk/Tools/DatabaseImport/ProjectItems/VS2010/Modeling.zip Modified: trunk/ORMModel/Framework/Diagrams/MultiShapeUtility.cs =================================================================== --- trunk/ORMModel/Framework/Diagrams/MultiShapeUtility.cs 2011-06-08 08:05:11 UTC (rev 1470) +++ trunk/ORMModel/Framework/Diagrams/MultiShapeUtility.cs 2011-06-15 19:14:24 UTC (rev 1471) @@ -434,33 +434,74 @@ } #endregion // GetEffectiveAttachedLinkShapes variants #region Link Configuration + private static readonly object DeletingSubjectsKey = new object(); /// <summary> /// Determines if the relationship should be visited, and reconfigures any links /// </summary> /// <param name="walker">The current <see cref="ElementWalker"/></param> /// <param name="sourceElement">The <see cref="ModelElement"/> being deleted</param> + /// <param name="sourceRoleInfo">The role information</param> /// <param name="domainRelationshipInfo">The relationship information</param> /// <param name="targetRelationship">The other <see cref="ModelElement"/> in the relationship</param> /// <returns>Whether to visit the relationship</returns> - public static bool ShouldVisitOnDelete(ElementWalker walker, ModelElement sourceElement, DomainRelationshipInfo domainRelationshipInfo, ElementLink targetRelationship) + public static bool ShouldVisitOnDelete(ElementWalker walker, ModelElement sourceElement, DomainRoleInfo sourceRoleInfo, DomainRelationshipInfo domainRelationshipInfo, ElementLink targetRelationship) { bool retVal = true; + Dictionary<object, object> contextDictionary; + object subjectsDictionaryObject; + Dictionary<ModelElement, object> deletingSubjectsDictionary; + ShapeElement primaryShape; + object subjectsKey; + ModelElement subject; + NodeShape sourceShape; IReconfigureableLink reconfigurableLink; - if (walker != null && - domainRelationshipInfo != null && - domainRelationshipInfo.Id == LinkConnectsToNode.DomainClassId && - null != (sourceShape = sourceElement as NodeShape) && - null != (reconfigurableLink = (targetRelationship as LinkConnectsToNode).Link as IReconfigureableLink)) + if (walker != null) { - reconfigurableLink.Reconfigure(ResolvePrimaryShape(sourceShape)); - retVal = false; + if (sourceRoleInfo != null && + sourceRoleInfo.Id == PresentationViewsSubject.SubjectDomainRoleId) + { + contextDictionary = sourceElement.Store.TransactionManager.CurrentTransaction.TopLevelTransaction.Context.ContextInfo; + if (contextDictionary.TryGetValue(subjectsKey = DeletingSubjectsKey, out subjectsDictionaryObject)) + { + deletingSubjectsDictionary = (Dictionary<ModelElement, object>)subjectsDictionaryObject; + } + else + { + contextDictionary[subjectsKey] = deletingSubjectsDictionary = new Dictionary<ModelElement, object>(); + } + deletingSubjectsDictionary[sourceElement] = null; + } + else if (domainRelationshipInfo != null && + domainRelationshipInfo.Id == LinkConnectsToNode.DomainClassId && + 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) || + (null != (subject = primaryShape.ModelElement) && + !((Dictionary<ModelElement, object>)subjectsDictionaryObject).ContainsKey(subject)))) + { + reconfigurableLink.Reconfigure(primaryShape); + retVal = false; + } } return retVal; } /// <summary> + /// Remove cached data from a top-level transaction context dictionary. + /// </summary> + /// <param name="contextDictionary">The dictionary to clear.</param> + public static void ClearCachedContextInfo(Dictionary<object, object> contextDictionary) + { + object key = DeletingSubjectsKey; + if (contextDictionary.ContainsKey(key)) + { + contextDictionary.Remove(key); + } + } + /// <summary> /// The <see cref="IConfigureableLinkEndpoint.CanAttachLink"/> results have changed. /// </summary> /// <param name="shapeElement"></param> Modified: trunk/ORMModel/ObjectModel/SamplePopulation.cs =================================================================== --- trunk/ORMModel/ObjectModel/SamplePopulation.cs 2011-06-08 08:05:11 UTC (rev 1470) +++ trunk/ORMModel/ObjectModel/SamplePopulation.cs 2011-06-15 19:14:24 UTC (rev 1471) @@ -2762,7 +2762,8 @@ { if (e.DomainProperty.Id == ValueTypeInstance.ValueDomainPropertyId) { - ModelElement instance = e.ModelElement; + ValueTypeInstance instance = (ValueTypeInstance)e.ModelElement; + instance.InvariantValue = ""; // Clear the invariant value so that it can be reset when the value changes FrameworkDomainModel.DelayValidateElement(instance, DelayValidateCompatibleValueTypeInstanceValueError); FrameworkDomainModel.DelayValidateElement(instance, ObjectTypeInstance.DelayValidateNamePartChanged); } Modified: trunk/ORMModel/ShapeModel/ORMBaseShape.cs =================================================================== --- trunk/ORMModel/ShapeModel/ORMBaseShape.cs 2011-06-08 08:05:11 UTC (rev 1470) +++ trunk/ORMModel/ShapeModel/ORMBaseShape.cs 2011-06-15 19:14:24 UTC (rev 1471) @@ -861,7 +861,7 @@ /// <returns>Whether to visit the relationship</returns> public override VisitorFilterResult ShouldVisitRelationship(ElementWalker walker, ModelElement sourceElement, DomainRoleInfo sourceRoleInfo, DomainRelationshipInfo domainRelationshipInfo, ElementLink targetRelationship) { - if (MultiShapeUtility.ShouldVisitOnDelete(walker, sourceElement, domainRelationshipInfo, targetRelationship)) + if (MultiShapeUtility.ShouldVisitOnDelete(walker, sourceElement, sourceRoleInfo, domainRelationshipInfo, targetRelationship)) { return base.ShouldVisitRelationship(walker, sourceElement, sourceRoleInfo, domainRelationshipInfo, targetRelationship); } Modified: trunk/ORMModel/ShapeModel/ORMShape.AttachRules.cs =================================================================== --- trunk/ORMModel/ShapeModel/ORMShape.AttachRules.cs 2011-06-08 08:05:11 UTC (rev 1470) +++ trunk/ORMModel/ShapeModel/ORMShape.AttachRules.cs 2011-06-15 19:14:24 UTC (rev 1471) @@ -75,7 +75,7 @@ typeof(ORMBaseShape).GetNestedType("AbsoluteBoundsChangedRuleClass", BindingFlags.Public | BindingFlags.NonPublic), typeof(ORMBaseShape).GetNestedType("ModelErrorAddedRuleClass", BindingFlags.Public | BindingFlags.NonPublic), typeof(ORMBaseShape).GetNestedType("ModelErrorDeletingRuleClass", BindingFlags.Public | BindingFlags.NonPublic), - typeof(ClearInvalidateCacheOnCommittingRuleClass), + typeof(ClearCachesOnCommittingRuleClass), typeof(ConstraintRoleSequenceRoleAddedRuleClass), typeof(ConstraintRoleSequenceRoleDeletedRuleClass), typeof(ConstraintRoleSequencePositionChangedRuleClass), @@ -1272,10 +1272,10 @@ partial class ORMShapeDomainModel { [Microsoft.VisualStudio.Modeling.RuleOn(typeof(ORMShapeDomainModel))] - private sealed class ClearInvalidateCacheOnCommittingRuleClass : Microsoft.VisualStudio.Modeling.TransactionCommittingRule + private sealed class ClearCachesOnCommittingRuleClass : Microsoft.VisualStudio.Modeling.TransactionCommittingRule { [System.Diagnostics.DebuggerStepThrough()] - public ClearInvalidateCacheOnCommittingRuleClass() + public ClearCachesOnCommittingRuleClass() { base.IsEnabled = false; } @@ -1285,16 +1285,16 @@ /// /// <summary> /// /// TransactionCommittingRule: typeof(ORMShapeDomainModel) /// /// </summary> - /// private static void ClearInvalidateCacheOnCommittingRule(TransactionCommitEventArgs e) + /// private static void ClearCachesOnCommittingRule(TransactionCommitEventArgs e) /// { /// } /// </summary> [System.Diagnostics.DebuggerStepThrough()] public override void TransactionCommitting(Microsoft.VisualStudio.Modeling.TransactionCommitEventArgs e) { - ORMSolutions.ORMArchitect.Framework.Diagnostics.TraceUtility.TraceRuleStart(e.Transaction.Store, "ORMSolutions.ORMArchitect.Core.ShapeModel.ORMShapeDomainModel.ClearInvalidateCacheOnCommittingRule"); - ORMShapeDomainModel.ClearInvalidateCacheOnCommittingRule(e); - ORMSolutions.ORMArchitect.Framework.Diagnostics.TraceUtility.TraceRuleEnd(e.Transaction.Store, "ORMSolutions.ORMArchitect.Core.ShapeModel.ORMShapeDomainModel.ClearInvalidateCacheOnCommittingRule"); + ORMSolutions.ORMArchitect.Framework.Diagnostics.TraceUtility.TraceRuleStart(e.Transaction.Store, "ORMSolutions.ORMArchitect.Core.ShapeModel.ORMShapeDomainModel.ClearCachesOnCommittingRule"); + ORMShapeDomainModel.ClearCachesOnCommittingRule(e); + ORMSolutions.ORMArchitect.Framework.Diagnostics.TraceUtility.TraceRuleEnd(e.Transaction.Store, "ORMSolutions.ORMArchitect.Core.ShapeModel.ORMShapeDomainModel.ClearCachesOnCommittingRule"); } } [Microsoft.VisualStudio.Modeling.RuleOn(typeof(ORMSolutions.ORMArchitect.Core.ObjectModel.ConstraintRoleSequenceHasRole), FireTime=Microsoft.VisualStudio.Modeling.TimeToFire.TopLevelCommit, Priority=Microsoft.VisualStudio.Modeling.Diagrams.DiagramFixupConstants.ResizeParentRulePriority)] Modified: trunk/ORMModel/ShapeModel/ORMShape.AttachRules.xml =================================================================== --- trunk/ORMModel/ShapeModel/ORMShape.AttachRules.xml 2011-06-08 08:05:11 UTC (rev 1470) +++ trunk/ORMModel/ShapeModel/ORMShape.AttachRules.xml 2011-06-15 19:14:24 UTC (rev 1471) @@ -160,7 +160,7 @@ </arg:DeletingRule> </arg:RuleContainer> <arg:RuleContainer class="ORMShapeDomainModel"> - <arg:TransactionCommittingRule methodName="ClearInvalidateCacheOnCommittingRule"> + <arg:TransactionCommittingRule methodName="ClearCachesOnCommittingRule"> <arg:RuleOn targetType="ORMShapeDomainModel"/> </arg:TransactionCommittingRule> <arg:AddRule methodName="ConstraintRoleSequenceRoleAddedRule"> Modified: trunk/ORMModel/ShapeModel/ViewFixupRules.cs =================================================================== --- trunk/ORMModel/ShapeModel/ViewFixupRules.cs 2011-06-08 08:05:11 UTC (rev 1470) +++ trunk/ORMModel/ShapeModel/ViewFixupRules.cs 2011-06-15 19:14:24 UTC (rev 1471) @@ -1348,14 +1348,16 @@ /// TransactionCommittingRule: typeof(ORMShapeDomainModel) /// Don't store the shape invalidation cache long term with the /// transaction log, we don't need it. + /// Also defer to the multi shape utility to clear its caches. /// </summary> - private static void ClearInvalidateCacheOnCommittingRule(TransactionCommitEventArgs e) + private static void ClearCachesOnCommittingRule(TransactionCommitEventArgs e) { Dictionary<object, object> contextDictionary = e.Transaction.Context.ContextInfo; if (contextDictionary.ContainsKey(InvalidateRequiredKey)) { contextDictionary.Remove(InvalidateRequiredKey); } + MultiShapeUtility.ClearCachedContextInfo(contextDictionary); } /// <summary> /// Get a new update counter value if one is required. Use with Added: trunk/ORMModel/Shell/ProjectItems/Modeling.zip =================================================================== (Binary files differ) Property changes on: trunk/ORMModel/Shell/ProjectItems/Modeling.zip ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: trunk/Setup/ComponentGroups.wxs =================================================================== --- trunk/Setup/ComponentGroups.wxs 2011-06-08 08:05:11 UTC (rev 1470) +++ trunk/Setup/ComponentGroups.wxs 2011-06-15 19:14:24 UTC (rev 1471) @@ -44,6 +44,9 @@ <?ifdef JSharpSupport?> <ComponentRef Id="NORMAVSProjectItemsVWebDevJSharpComponent"/> <?endif?> + <?ifdef ModelingProjectSupport?> + <ComponentRef Id="NORMAVSProjectItemsModelingComponent"/> + <?endif?> <ComponentRef Id="NORMAVSVerbalizationComponent"/> <ComponentRef Id="NORMAVSVerbalizationCoreComponent"/> <ComponentRef Id="NORMAVSVerbalizationReportComponent"/> @@ -93,6 +96,9 @@ <?ifdef JSharpSupport?> <ComponentRef Id="NORMADBImportProjectItemsVWebDevJSharpComponent"/> <?endif?> + <?ifdef ModelingProjectSupport?> + <ComponentRef Id="NORMADBImportProjectItemsModelingComponent"/> + <?endif?> </ComponentGroup> <ComponentGroup Id="HelpFeatureComponents"> <ComponentRef Id="NORMAVSHelpComponent"/> Modified: trunk/Setup/Config.wxi =================================================================== --- trunk/Setup/Config.wxi 2011-06-08 08:05:11 UTC (rev 1470) +++ trunk/Setup/Config.wxi 2011-06-15 19:14:24 UTC (rev 1471) @@ -56,6 +56,7 @@ <?define LinqSupport=1 ?> <?define HelpFileTargetCollection="MS.VSIPCC.v100"?> <?define VSIXInstall?> + <?define ModelingProjectSupport=1 ?> <?endif?> <?define PackageCode="$(var.PackageGuidStart)-$(var.VersionGuidSuffix)"?> <!-- ProductCode should be changed for each MAJOR version. Specifically, the first and second hexits of the last section of the GUID should match the two digits of the major version.--> Modified: trunk/Setup/NORMAItemTemplates.wxi =================================================================== --- trunk/Setup/NORMAItemTemplates.wxi 2011-06-08 08:05:11 UTC (rev 1470) +++ trunk/Setup/NORMAItemTemplates.wxi 2011-06-15 19:14:24 UTC (rev 1471) @@ -64,6 +64,20 @@ </Component> </Directory> <?endif?> + <?ifdef ModelingProjectSupport?> + <Directory Id="Modeling" Name="Modeling"> + <Component Id="NORMAVSProjectItemsModelingComponent" Guid="D74F0161-7C3D-4981-$(var.VersionGuidSuffix)" DiskId="1" Win64="$(var.Win64)" KeyPath="yes"> + <Condition>Installed</Condition> + <File Id="Modeling.zip" Name="ORMModel.zip" Source="..\ORMModel\Shell\ProjectItems\Modeling.zip" + DefaultLanguage="0" CompanionFile="ORMSolutions.ORMArchitect.Core$(var.VSExt).dll"/> + </Component> + <Component Id="NORMADBImportProjectItemsModelingComponent" Guid="960D82F8-25D0-4F2B-$(var.VersionGuidSuffix)" DiskId="1" Win64="$(var.Win64)" KeyPath="yes"> + <Condition>Installed</Condition> + <File Id="DBImportModeling.zip" Name="ORMModelFromDatabase.zip" ShortName="DBImpMod.zip" Source="..\Tools\DatabaseImport\ProjectItems\$(var.VSShortName)\Modeling.zip" + DefaultLanguage="0" CompanionFile="ORMSolutions.ORMArchitect.DatabaseImport$(var.VSExt).dll"/> + </Component> + </Directory> + <?endif?> <Directory Id="VisualC" Name="VisualC"> <Component Id="NORMAVSProjectItemsVCPlusPlusComponent" Guid="16B28893-FE72-4BBF-$(var.VersionGuidSuffix)" DiskId="1" Win64="$(var.Win64)" KeyPath="yes"> <Condition>VCPLUSPLUSPACKAGEGUID OR Installed</Condition> Modified: trunk/Setup/Readme.htm =================================================================== --- trunk/Setup/Readme.htm 2011-06-08 08:05:11 UTC (rev 1470) +++ trunk/Setup/Readme.htm 2011-06-15 19:14:24 UTC (rev 1471) @@ -3,7 +3,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"/> -<title>NORMA May 2011 CTP Readme</title> +<title>NORMA June 2011 CTP Readme</title> <style type="text/css"> .new {font-size:x-small; background-color:Gold; color:Blue; } li {padding-bottom: 3px;} @@ -12,9 +12,9 @@ <body> -<p><b><a id="The Top" style="font-family:Verdana;font-size:medium">NORMA May 2011 CTP Readme</a> </b></p> +<p><b><a id="The Top" style="font-family:Verdana;font-size:medium">NORMA June 2011 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 May 2011 release includes new display features (display objectified fact types as object types, display link fact types), additional ring types with an improved editor for choosing ring types, visible zoom commands, and a number of bug fixes. See detailed change notes below for specifics. +The June 2011 release includes new display features (display objectified fact types as object types, display link fact types), additional ring types with an improved editor for choosing ring types, visible zoom commands, and a number of bug fixes. See detailed change notes below for specifics. <br/><br/></p> <h2>Contents</h2> <ul> @@ -43,19 +43,20 @@ </ul>--> <hr/> -<h2>May 2011 CTP Changes</h2> -<div>The May 2011 CTP release includes all modifications through changeset 1470. 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>June 2011 CTP Changes</h2> +<div>The June 2011 CTP release includes all modifications through changeset 1471. 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="#DisplayAsObjectType 2011-05">Display Objectified Fact Type as Object Type</a> </li> -<li><a href="#LinkFactTypeDisplay 2011-05">Link Fact Type Display</a> </li> -<li><a href="#NewRingConstraintFeatures 2011-05">New Ring Constraint Types and Editor</a> </li> -<li><a href="#ZoomCommands 2011-05">Zoom Commands</a> </li> -<li><a href="#ZoomSensitiveNudge 2011-05">Zoom Sensitive Nudge Distance</a> </li> +<li><a href="#DisplayAsObjectType 2011-06">Display Objectified Fact Type as Object Type</a> </li> +<li><a href="#LinkFactTypeDisplay 2011-06">Link Fact Type Display</a> </li> +<li><a href="#NewRingConstraintFeatures 2011-06">New Ring Constraint Types and Editor</a> </li> +<li><a href="#ZoomCommands 2011-06">Zoom Commands</a> </li> +<li><a href="#ZoomSensitiveNudge 2011-06">Zoom Sensitive Nudge Distance</a> </li> <li>Other Features: <ol> <li>Simultaneously selecting an object type shapes and a connected subtype connector link is no longer supported: the subtype connector link will be automatically deselected in this case. This makes it much easier to lasso select and align shapes attached to subtype and supertype connectors.</li> -<li>Changes resulting in a size change for object type and fact type shapes will maintain the center point instead of the upper-left corner. This should reduce the number of alignment commands required when changing shape object type and reference mode names, or any other change that affects the size of the shape.</li> +<li>Changes resulting in a size change for object type and fact type shapes will maintain the shape's center point instead of the upper-left corner. This should reduce the number of alignment commands required when changing shape object type and reference mode names, or any other change that affects the size of the shape.</li> <li>Tooltips on foreign key lines in the relational view display table names with the column names.</li> +<li>(VS2010) Setup adds item templates for the Modeling project type.</li> </ol> </li> <li>Bug Fixes: @@ -68,9 +69,11 @@ <li>Selecting an ObjectType reference inside a group element crashed the Properties Window.</li> <li>Fact type shapes with constraint role bar display failed with multiple shapes for the same fact type on the same diagram.</li> <li>Objectified fact types did not synchronize the object type and default fact type name in the target model after a cross-model drag of the objectified fact type.</li> +<li>Sample population values did not appear to change, always displayed original invariant value.</li> <li>Sample population editor crashed adding new supertype instances in an empty inline-expanded subtype cell.</li> <li>The meta file created by the <em>Copy Image</em> command did not have a transparent background on all versions, lines were rendered visibly different from those in the designer.</li> <li>The <em>ExpandRefMode</em> property did not work well with multiple shapes for the object type (or objectified fact type) on the same diagram. If there are multiple shapes on the diagram, the first shape to set <em>ExpandRefMode</em> to true will add the reference mode fact type and value type, and the last to clear this property will remove them. The reference mode fact type will only attach to those shapes with <em>ExpandRefMode</em> set to true.</li> +<li>Multiple shapes representing a single backing element (FactType, ObjectType, etc) on the same diagram caused a null reference exception if the backing element was deleted. Duplicate shapes needed to be deleted to enable deletion of the backing element.</li> </ol> </li> </ul> @@ -353,7 +356,7 @@ <li><a id="DiagramTabHoverActivation 2010-12" class="new" title="December 2010 CTP: Diagram Tab Hover Activation">2010-12</a> Hovering over a diagram tab (at the bottom of the designer) during any drag operation will activate that diagram. Hovering over the left edge of the leftmost tab will scroll the diagrams to the left. Combined with the Visual Studio support for activating a file by hovering over the file tabe and bump scrolling within a diagram, this makes it much easier to drag items between models and copy shapes within models. Without this support, cross-diagram drag required both the source and target diagrams to be visible in either multiple document windows or the <em>Diagram Spy</em> tool window. </li> -<li><a id="ZoomCommands 2011-05" class="new" title="May 2011 CTP: Zoom Commands">2011-05</a> +<li><a id="ZoomCommands 2011-06" class="new" title="June 2011 CTP: Zoom Commands">2011-06</a> A Zoom submenu enables zooming to a specific percentage or with incremental zoom in/zoom out commands. There are corresponding mouse gestures and hotkeys cooresponding to these commands. All of these commands work with 'Control-Shift' modifiers. Pressing control-shift will change the designer cursor to a magnifying glass, indicating zoom.<br />Mouse and keyboard zoom commands: <ul> <li><strong>Zoom In: </strong>Control-Shift-PlusKey, Control-Shift-LeftClick, Control-MouseWheel, Control-Shift-MouseWheel</li> @@ -362,7 +365,7 @@ <li><strong>Scroll: </strong>MouseWheel for vertical scroll, Shift-MouseWheel for horizontal scroll.</li> </ul> </li> -<li><a id="ZoomSensitiveNudge 2011-05" class="new" title="May 2011 CTP: Zoom Sensitive Nudge Distance">2011-05</a> +<li><a id="ZoomSensitiveNudge 2011-06" class="new" title="June 2011 CTP: Zoom Sensitive Nudge Distance">2011-06</a> Keyboard nudging of selected shapes depends on the zoom level. At maximum zoom (400%) the keyboard nudge distance is very small with the intent of allowing extremely fine-grained shape alignment. The nudge distance is fixed from 10% to 100% zoom, at which point it linearly decreases to the fine-grained setting at maximum zoom. </li> </ol> @@ -517,9 +520,9 @@ <li><a id="Value Constraint Special String Characters 2010-02" class="new" title="February 2010 CTP: Value constraint special string characters">2010-02</a> Special delimiter characters used in value constraint definitions can be specified inside single-quotation characters. For example, <em>a,b,c</em> for a string data type is parsed and listed back as <em>{'a', 'b', 'c'}</em>, while <em>'a,b,c'</em> is treated as a single string value. Use two adjacent single quotes to represent a single quote in a string (<em>'''abc'''</em> represents the string <em>'abc'</em>), and use <em>''</em> to represent the empty string. </li> -<li><a id="DisplayAsObjectType 2011-05" class="new" title="May 2011 CTP: Display Objectified Fact Type as Object Type">2011-05</a> +<li><a id="DisplayAsObjectType 2011-06" class="new" title="June 2011 CTP: Display Objectified Fact Type as Object Type">2011-06</a> The <em>DisplayAsObjectType</em> property on a shape for an objectified fact type enables uncluttered use of the objectified fact type as an entity type. The display is exactly the same as an object type shape with name and reference mode fields, except that a miniature role box to the left of the text fields indicates the objectifying nature of the entity type and the arity of the objectified fact type. Other shapes attached to the fact type (reading shapes, role value constraints, role name shapes, and the name shape for the objectified entity type) are removed from the diagram and recreated when <em>DisplayAsObjectType</em> is changed from true to false.</li> -<li><a id="LinkFactTypeDisplay 2011-05" class="new" title="May 2011 CTP: Link Fact Type Display">2011-05</a> +<li><a id="LinkFactTypeDisplay 2011-06" class="new" title="June 2011 CTP: Link Fact Type Display">2011-06</a> <em>Link fact types</em> represent the relationship between an objectifying entity type and each of the role players of its objectified fact type. A link fact type is implied and automatically create by NORMA for each role in an objectified fact type. Readings for these fact types can be modified in the 'Implied Fact Types' branch of the 'ORM Reading Editor' tool window when a single role is selected in an objectified fact type. Readings can also be modified by selecting the fact type in the 'ORM Model Browser' tool window and expanding the 'Implied Fact Types' child node. In most cases there is no need to display these fact types. However, it is not uncommon for the objectifying-entity-type-attached role to participate in a set comparison constraint. Shapes are never automatically generated for link fact types, but an explicit shape can be added by dragging an implied fact type node from the model browser.<br /> Notes on link fact type shapes: <ul> @@ -531,7 +534,7 @@ <li>Some other editing actions are unavailable for far roles on link fact types (group operations, for example). The primary reason to show these is to attach constraints to the objectified roles, and this scenario is satisfied without full editing capabilities on the far roles.</li> </ul> </li> -<li><a id="NewRingConstraintFeatures 2011-05" class="new" title="May 2011 CTP: New Ring Constraint Types and Editor">2011-05</a> +<li><a id="NewRingConstraintFeatures 2011-06" class="new" title="June 2011 CTP: New Ring Constraint Types and Editor">2011-06</a> Three new ring types and corresponding combinations provide additional positive ring possibilities and a stronger form of intransitivity. The new values are: <ul> <li><em>Transitive</em> requires the transitive closure of the item to be provided. If A plays B and B plays C then A must play C. The display is the same as <em>intransitive</em> without the tick mark at the bottom of the triangle.</li> @@ -542,10 +545,10 @@ <ul> <li>A bold and checked item is part of the current selection.</li> <li>A bold item that is not checked is compatible with the current selection and can be added without reducing the current selection.</li> -<li>A gray-checked item (never bolded) is implied by the current selection. This provides a useful reminders of how the ring types compose. For example, <em>asymmetric</em> implies <em>irreflexive</em> and <em>antisymmetric</em>.</li> +<li>A gray-checked item (never bolded) is implied by the current selection. This provides a useful reminder of how the ring types compose. For example, <em>asymmetric</em> implies <em>irreflexive</em> and <em>antisymmetric</em>.</li> <li>Ring types are ordered by negative followed by positive (<em>reflexive</em>, <em>symmetric</em>, and <em>transitive</em> are positive types). The negative items are ordered by the somewhat subjective notion of <em>strength</em>, starting with the weakest ring type (<em>irreflexive</em>).</li> </ul> -Designing consistent glyphs for the new combinations required some minor display modifications: the tick mark for <em>irreflexive</em> has been moved opposite the dot, the interior circle for <em>symmetric+irreflexive</em> has been moved to the left edge of the symmetric oval and shares the left dot, and an interior tick mark has been added to <em>purely reflexive</em> to distinguish it from <em>reflexive</em> and indicate the <em>and no other</em> part of this ring type. +Designing consistent glyphs for the new combinations required some minor display modifications to published ring display: the tick mark for <em>irreflexive</em> has been moved from the bottom of the shape to directly opposite the dot, the interior circle for <em>symmetric+irreflexive</em> has been moved to the left edge of the symmetric oval and shares the left dot, and an interior tick mark has been added to <em>purely reflexive</em> to distinguish it from <em>reflexive</em> and visually indicate the <em>and no other</em> part of this ring type. </li> </ol> <a href="#The Top">Return to top</a> @@ -631,6 +634,7 @@ <p>These are areas that are incomplete and known issues with Visual Studio 2010.</p> <ol> <li>If an .orm file is opened simultaneously with more than one other file (such as when opening a solution) and is the active file immediately after load, then the ORM designer tool windows and menu items will not activate properly. Activating a second document (of any type) and reactivating the ORM designer will fix the problem. <em>This is a Visual Studio 2010 bug</em> (I can reproduce similar behavior with missing menus with one XML and one Text file).</li> +<li>The final dialog shown by the database import wizard offers to disable the <em>Save</em> button to prevent data loss. You should say No to this question. The database import wizard uses NORMA's file upgrade mechanism to load the file, and the dialog shown is meant for a file upgrade process. VS2010 is returning a 'not implemented' error for a request on the VSHPROPID_IsNewUnsavedItem property, and I know of no other way to distinguish between an imported file and a new file that uses the import mechanism (such as the DB import wizard).</li> <li>The <em>ORM Diagram Spy</em> window will occasionally go blank after extended use with multiple open ORM files. A restart of the environment is required to recover the window. If you can reliably reproduce this issue please report the scenario.</li> <li>The NORMA help files are not installed or integrated with Visual Studio 2010. [The installer merge modules used for help integration in VS2005 and VS2008 are not included with the VS2010 SDK.]</li> <li>The FrequencyConstraint and Reading shapes are larger in Visual Studio 2010.</li> @@ -648,14 +652,14 @@ <a href="#The Top">Return to top</a> <hr/> <h3><a id="Version Numbers">Version Numbers</a></h3> -<p>The NORMA version numbering scheme was changed in January 2011 to make better use of the available build numbers. A build number (for example, 1.0.1105.6267) has four parts separated by periods (.): Major (1), Minor (0), Revision (1105), and Build (6267). The first two numbers are self-explanatory. The third <em>revision</em> number is the last two digits of the year combined with the month number (1105=May 2011). The revision number is explicitly configured in the source code and generally changed once per official release. The final number is a build number that encodes the day the file was built.</p> +<p>The NORMA version numbering scheme was changed in January 2011 to make better use of the available build numbers. A build number (for example, 1.0.1106.6281) has four parts separated by periods (.): Major (1), Minor (0), Revision (1106), and Build (6281). The major and minor numbers are self-explanatory. The third <em>revision</em> number is the last two digits of the year combined with the month number (1106=June 2011). The revision number is explicitly configured in the source code and generally changed once per official release. The final number is a build number that encodes the day the file was built.</p> <p>Originally, the first two digits of the build number were a month counter beginning at 01 in January 2006, with the last two digits representing the day in the month. So, build 6031 was created on day 31 of month 60 (December 31, 2010). Starting with January 2011 (month 61), the first two digits will only be incremented on a <strong>quarterly</strong> basis, effectively tripling the available remaining revision 4-digit revision numbers. Of course, the day numbers for the three months in a quarter cannot all begin with '1', so we partition as follows:</p> <ul> <li>The first month in each quarter (January, April, July, October) gets the range 1-31 (subtract 0 to get the day).</li> -<li>The second month in each quarter (February, May, August, November) gets the range 32-64 (subtract 33 to get the day).</li> -<li>The third month in each quarter (March, June, September, December) gets the range 37-97 (subtract 66 to get the day).</li> +<li>The second month in each quarter (February, May, August, November) gets the range 34-64 (subtract 33 to get the day).</li> +<li>The third month in each quarter (March, June, September, December) gets the range 67-97 (subtract 66 to get the day).</li> </ul> -<p>So, build 6267 represents the first day of the third month in the second quarter of 2011 (June 1, 2011).</p> +<p>So, build 6281 represents the fifteenth day of the third month in the second quarter of 2011 (June 15, 2011).</p> <p>Although the version information does not directly contain any source code version control information, the build date can generally be cross-referenced against the revision history to find the corresponding changeset.</p> <a href="#The Top">Return to top</a></body> </html> Added: trunk/Tools/DatabaseImport/ProjectItems/VS2010/Modeling.zip =================================================================== (Binary files differ) Property changes on: trunk/Tools/DatabaseImport/ProjectItems/VS2010/Modeling.zip ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: trunk/VersionGenerator.exe.config =================================================================== --- trunk/VersionGenerator.exe.config 2011-06-08 08:05:11 UTC (rev 1470) +++ trunk/VersionGenerator.exe.config 2011-06-15 19:14:24 UTC (rev 1471) @@ -2,7 +2,7 @@ <configuration> <appSettings> <add key="RevisionStartYearMonth" value="2006-01"/> - <add key="ReleaseYearMonth" value="2011-05"/> + <add key="ReleaseYearMonth" value="2011-06"/> <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...> - 2011-06-28 01:16:23
|
Revision: 1472 http://orm.svn.sourceforge.net/orm/?rev=1472&view=rev Author: mcurland Date: 2011-06-28 01:16:16 +0000 (Tue, 28 Jun 2011) Log Message: ----------- * Remove check for VSHPROPID_IsNewUnsavedItem and add processing instructions indicate a new file to all templates and wizards. Modifies heuristics for showing import error message added in [1226] * Modeling project items not installing in VS2010, remove condition from setup Modified Paths: -------------- trunk/ORMModel/Shell/ORMDocData.cs trunk/ORMModel/Shell/ProjectItems/CSharp.zip trunk/ORMModel/Shell/ProjectItems/JSharp.zip trunk/ORMModel/Shell/ProjectItems/Modeling.zip trunk/ORMModel/Shell/ProjectItems/NewFileItems/ORMModel.orm trunk/ORMModel/Shell/ProjectItems/VS2005/General.zip trunk/ORMModel/Shell/ProjectItems/VS2008/General.zip trunk/ORMModel/Shell/ProjectItems/VisualBasic.zip trunk/ORMModel/Shell/ProjectItems/VisualC.zip trunk/ORMModel/Shell/ProjectItems/Web/CSharp.zip trunk/ORMModel/Shell/ProjectItems/Web/JSharp.zip trunk/ORMModel/Shell/ProjectItems/Web/VisualBasic.zip trunk/Setup/NORMAItemTemplates.wxi trunk/Setup/Readme.htm trunk/Tools/DatabaseImport/DcilObjectModel.cs Modified: trunk/ORMModel/Shell/ORMDocData.cs =================================================================== --- trunk/ORMModel/Shell/ORMDocData.cs 2011-06-15 19:14:24 UTC (rev 1471) +++ trunk/ORMModel/Shell/ORMDocData.cs 2011-06-28 01:16:16 UTC (rev 1472) @@ -382,8 +382,41 @@ // Convert early so we can accurately check extension elements int retVal = 0; bool dontSave = false; + bool newFileItem = false; List<string> unrecognizedNamespaces = null; ORMDesignerSettings settings = ORMDesignerPackage.DesignerSettings; + XmlReaderSettings readerSettings = new XmlReaderSettings(); + readerSettings.CloseInput = false; + // New files are marked with the <?new?> processing instruction before the root element. Find it in the originally + // opened file. Note that this was originally checked with the VSHPROPID_IsNewUnsavedItem hierarchy property, + // but this is not implemented on all project types and, hence, does not return reliable information. All templates + // and wizards generating new files should add this processing instruction to avoid the 'file format change' + // warning shown below. + if (!isReload) + { + long startingPosition = inputStream.Position; + using (XmlReader reader = XmlReader.Create(inputStream, readerSettings)) + { + bool finishedReading = false; + while (!finishedReading && reader.Read()) + { + switch (reader.NodeType) + { + case XmlNodeType.Element: + finishedReading = true; + break; + case XmlNodeType.ProcessingInstruction: + if (reader.Name == "new") + { + newFileItem = true; + finishedReading = true; + } + break; + } + } + } + inputStream.Position = startingPosition; + } using (Stream convertedStream = settings.ConvertStream(inputStream, ServiceProvider)) { dontSave = convertedStream != null; @@ -392,9 +425,7 @@ Stream namespaceStrippedStream = null; try { - XmlReaderSettings readerSettings = new XmlReaderSettings(); ExtensionLoader extensionLoader = ORMDesignerPackage.ExtensionLoader; - readerSettings.CloseInput = false; Dictionary<string, ExtensionModelBinding> documentExtensions = null; using (XmlReader reader = XmlReader.Create(stream, readerSettings)) { @@ -522,13 +553,6 @@ } } } - IVsHierarchy hierarchy; - uint itemId; - object isNewObject; - bool newFileItem = null != (hierarchy = this.Hierarchy) && - VSConstants.VSITEMID_NIL != (itemId = this.ItemId) && - ErrorHandler.Succeeded(hierarchy.GetProperty(itemId, (int)__VSHPROPID.VSHPROPID_IsNewUnsavedItem, out isNewObject)) && - (bool)isNewObject; if (dontSave && !newFileItem) { string message; Modified: trunk/ORMModel/Shell/ProjectItems/CSharp.zip =================================================================== (Binary files differ) Modified: trunk/ORMModel/Shell/ProjectItems/JSharp.zip =================================================================== (Binary files differ) Modified: trunk/ORMModel/Shell/ProjectItems/Modeling.zip =================================================================== (Binary files differ) Modified: trunk/ORMModel/Shell/ProjectItems/NewFileItems/ORMModel.orm =================================================================== --- trunk/ORMModel/Shell/ProjectItems/NewFileItems/ORMModel.orm 2011-06-15 19:14:24 UTC (rev 1471) +++ trunk/ORMModel/Shell/ProjectItems/NewFileItems/ORMModel.orm 2011-06-28 01:16:16 UTC (rev 1472) @@ -1,4 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> +<?new?> <ormRoot:ORM2 xmlns:orm="http://schemas.neumont.edu/ORM/2006-04/ORMCore" xmlns:ormDiagram="http://schemas.neumont.edu/ORM/2006-04/ORMDiagram" xmlns:ormRoot="http://schemas.neumont.edu/ORM/2006-04/ORMRoot"> <orm:ORMModel id="modelId" Name="$fileinputname$"/> <ormDiagram:ORMDiagram id="diagramId" IsCompleteView="false" Name="$fileinputname$" BaseFontName="Tahoma" BaseFontSize="0.0972222238779068"> Modified: trunk/ORMModel/Shell/ProjectItems/VS2005/General.zip =================================================================== (Binary files differ) Modified: trunk/ORMModel/Shell/ProjectItems/VS2008/General.zip =================================================================== (Binary files differ) Modified: trunk/ORMModel/Shell/ProjectItems/VisualBasic.zip =================================================================== (Binary files differ) Modified: trunk/ORMModel/Shell/ProjectItems/VisualC.zip =================================================================== (Binary files differ) Modified: trunk/ORMModel/Shell/ProjectItems/Web/CSharp.zip =================================================================== (Binary files differ) Modified: trunk/ORMModel/Shell/ProjectItems/Web/JSharp.zip =================================================================== (Binary files differ) Modified: trunk/ORMModel/Shell/ProjectItems/Web/VisualBasic.zip =================================================================== (Binary files differ) Modified: trunk/Setup/NORMAItemTemplates.wxi =================================================================== --- trunk/Setup/NORMAItemTemplates.wxi 2011-06-15 19:14:24 UTC (rev 1471) +++ trunk/Setup/NORMAItemTemplates.wxi 2011-06-28 01:16:16 UTC (rev 1472) @@ -67,12 +67,10 @@ <?ifdef ModelingProjectSupport?> <Directory Id="Modeling" Name="Modeling"> <Component Id="NORMAVSProjectItemsModelingComponent" Guid="D74F0161-7C3D-4981-$(var.VersionGuidSuffix)" DiskId="1" Win64="$(var.Win64)" KeyPath="yes"> - <Condition>Installed</Condition> <File Id="Modeling.zip" Name="ORMModel.zip" Source="..\ORMModel\Shell\ProjectItems\Modeling.zip" DefaultLanguage="0" CompanionFile="ORMSolutions.ORMArchitect.Core$(var.VSExt).dll"/> </Component> <Component Id="NORMADBImportProjectItemsModelingComponent" Guid="960D82F8-25D0-4F2B-$(var.VersionGuidSuffix)" DiskId="1" Win64="$(var.Win64)" KeyPath="yes"> - <Condition>Installed</Condition> <File Id="DBImportModeling.zip" Name="ORMModelFromDatabase.zip" ShortName="DBImpMod.zip" Source="..\Tools\DatabaseImport\ProjectItems\$(var.VSShortName)\Modeling.zip" DefaultLanguage="0" CompanionFile="ORMSolutions.ORMArchitect.DatabaseImport$(var.VSExt).dll"/> </Component> Modified: trunk/Setup/Readme.htm =================================================================== --- trunk/Setup/Readme.htm 2011-06-15 19:14:24 UTC (rev 1471) +++ trunk/Setup/Readme.htm 2011-06-28 01:16:16 UTC (rev 1472) @@ -44,7 +44,7 @@ <hr/> <h2>June 2011 CTP Changes</h2> -<div>The June 2011 CTP release includes all modifications through changeset 1471. 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 June 2011 CTP release includes all modifications through changeset 1472. 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="#DisplayAsObjectType 2011-06">Display Objectified Fact Type as Object Type</a> </li> <li><a href="#LinkFactTypeDisplay 2011-06">Link Fact Type Display</a> </li> @@ -74,6 +74,7 @@ <li>The meta file created by the <em>Copy Image</em> command did not have a transparent background on all versions, lines were rendered visibly different from those in the designer.</li> <li>The <em>ExpandRefMode</em> property did not work well with multiple shapes for the object type (or objectified fact type) on the same diagram. If there are multiple shapes on the diagram, the first shape to set <em>ExpandRefMode</em> to true will add the reference mode fact type and value type, and the last to clear this property will remove them. The reference mode fact type will only attach to those shapes with <em>ExpandRefMode</em> set to true.</li> <li>Multiple shapes representing a single backing element (FactType, ObjectType, etc) on the same diagram caused a null reference exception if the backing element was deleted. Duplicate shapes needed to be deleted to enable deletion of the backing element.</li> +<li>The final dialog shown by the database import wizard launched by a VB or C# project offered to disable the <em>Save</em> button to prevent data loss (caused by an inconsistent implementation of VSHPROPID_IsNewUnsavedItem across different project types). Template and wizard-generated files are now marked with a <em><?new?></em> processing instruction to avoid any project-type dependencies.</li> </ol> </li> </ul> @@ -633,8 +634,7 @@ <h3><a id="VS2010 Bugs">Unresolved issues in Visual Studio 2010</a></h3> <p>These are areas that are incomplete and known issues with Visual Studio 2010.</p> <ol> -<li>If an .orm file is opened simultaneously with more than one other file (such as when opening a solution) and is the active file immediately after load, then the ORM designer tool windows and menu items will not activate properly. Activating a second document (of any type) and reactivating the ORM designer will fix the problem. <em>This is a Visual Studio 2010 bug</em> (I can reproduce similar behavior with missing menus with one XML and one Text file).</li> -<li>The final dialog shown by the database import wizard offers to disable the <em>Save</em> button to prevent data loss. You should say No to this question. The database import wizard uses NORMA's file upgrade mechanism to load the file, and the dialog shown is meant for a file upgrade process. VS2010 is returning a 'not implemented' error for a request on the VSHPROPID_IsNewUnsavedItem property, and I know of no other way to distinguish between an imported file and a new file that uses the import mechanism (such as the DB import wizard).</li> +<li>If the .orm designer is opened simultaneously with more than one other file (such as when opening a solution) and is the active file immediately after load, then the ORM designer tool windows and menu items will not activate properly. Activating a second document (of any type) and reactivating the ORM designer will fix the problem. <em>This is a Visual Studio 2010 bug</em> (I can reproduce similar behavior with missing menus with one XML and one Text file).</li> <li>The <em>ORM Diagram Spy</em> window will occasionally go blank after extended use with multiple open ORM files. A restart of the environment is required to recover the window. If you can reliably reproduce this issue please report the scenario.</li> <li>The NORMA help files are not installed or integrated with Visual Studio 2010. [The installer merge modules used for help integration in VS2005 and VS2008 are not included with the VS2010 SDK.]</li> <li>The FrequencyConstraint and Reading shapes are larger in Visual Studio 2010.</li> Modified: trunk/Tools/DatabaseImport/DcilObjectModel.cs =================================================================== --- trunk/Tools/DatabaseImport/DcilObjectModel.cs 2011-06-15 19:14:24 UTC (rev 1471) +++ trunk/Tools/DatabaseImport/DcilObjectModel.cs 2011-06-28 01:16:16 UTC (rev 1472) @@ -58,7 +58,11 @@ schema.Namespaces.Add("dml", "http://schemas.orm.net/DIL/DMIL"); schema.Namespaces.Add("ddl", "http://schemas.orm.net/DIL/DDIL"); XmlSerializer s = new XmlSerializer(typeof(DcilSchema)); - s.Serialize(stream, schema); + using (XmlWriter writer = XmlWriter.Create(stream, new XmlWriterSettings())) + { + writer.WriteProcessingInstruction("new", ""); + s.Serialize(writer, schema); + } } /// <summary> /// Instantiates a new instance of <see cref="DcilSchema"/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2011-06-30 02:39:15
|
Revision: 1473 http://orm.svn.sourceforge.net/orm/?rev=1473&view=rev Author: mcurland Date: 2011-06-30 02:39:04 +0000 (Thu, 30 Jun 2011) Log Message: ----------- * External constraints attached to a fact type shape with DisplayAsObjectType true refs #406 * Setting DisplayAsObjectType to false with constraint display position set to bottom placed objectification and reading shapes on top of each other * Dropping multiple objects only performed fixup operations (size adjustment, for example) on the first dropped shape. refs #403 * Fixed role bar resize and redraw issues (continuation of [1465]) * Temporarily skip attempts to change the document tab caption in VS2010 database import, added readme note about other VS2010 import problems. refs #405 * Defer to a type converter in the transaction log viewer if value text not available. Specifically, this allows the EdgePoints property on a property to display. refs #317 Modified Paths: -------------- trunk/ORMModel/Framework/Diagnostics/TransactionLogViewer.cs trunk/ORMModel/Framework/Diagrams/MultiShapeUtility.cs trunk/ORMModel/ShapeModel/ExternalConstraintLink.cs trunk/ORMModel/ShapeModel/FactTypeShape.cs trunk/ORMModel/ShapeModel/ORMShape.AttachRules.cs trunk/ORMModel/ShapeModel/ORMShape.AttachRules.xml trunk/ORMModel/ShapeModel/ReadingShape.cs trunk/ORMModel/ShapeModel/ViewFixupRules.cs trunk/Setup/Readme.htm trunk/Tools/DatabaseImport/ORMDatabaseImportWizard.cs Modified: trunk/ORMModel/Framework/Diagnostics/TransactionLogViewer.cs =================================================================== --- trunk/ORMModel/Framework/Diagnostics/TransactionLogViewer.cs 2011-06-28 01:16:16 UTC (rev 1472) +++ trunk/ORMModel/Framework/Diagnostics/TransactionLogViewer.cs 2011-06-30 02:39:04 UTC (rev 1473) @@ -951,7 +951,13 @@ } else { + TypeConverter converter; retVal = value.ToString(); + if (retVal == value.GetType().FullName && + null != (converter = TypeDescriptor.GetConverter(value))) + { + retVal = converter.ConvertToString(value); + } } } return retVal; Modified: trunk/ORMModel/Framework/Diagrams/MultiShapeUtility.cs =================================================================== --- trunk/ORMModel/Framework/Diagrams/MultiShapeUtility.cs 2011-06-28 01:16:16 UTC (rev 1472) +++ trunk/ORMModel/Framework/Diagrams/MultiShapeUtility.cs 2011-06-30 02:39:04 UTC (rev 1473) @@ -697,10 +697,6 @@ if (existingLink != null) { - if (existingLink == link) - { - originalLinkProcessed = true; - } ShapeElement resolvedFromShape = ResolvePrimaryShape(existingLink.FromShape); bool testDeleteLinksOnCurrentFromShape = false; if (closerFromShapeBlocking) @@ -747,12 +743,20 @@ connectLink = existingLink; connectFromShape = closerFromShape; connectToShape = closestToShape; + if (existingLink == link) + { + originalLinkProcessed = true; + } } } else if (detachFromShape) { testDeleteLinksOnCurrentFromShape = true; } + else if (existingLink == link) + { + originalLinkProcessed = true; + } } else if (closerFromShape != null || detachFromShape) { @@ -767,6 +771,10 @@ connectFromShape = currentFromShape; connectToShape = closestToShape; testDeleteLinksOnCurrentFromShape = true; + if (existingLink == link) + { + originalLinkProcessed = true; + } } if (testDeleteLinksOnCurrentFromShape) { @@ -801,10 +809,6 @@ } if (existingLink != null) { - if (existingLink == link) - { - originalLinkProcessed = true; - } Debug.Assert(ResolvePrimaryShape(existingLink.ToShape) != closestToShape, "The link would also have been attached to the to shape"); if (closerFromShapeBlocking) { @@ -836,12 +840,20 @@ connectLink = existingLink; connectToShape = closestToShape; connectFromShape = closerFromShape; + if (existingLink == link) + { + originalLinkProcessed = true; + } } else { connectLink = existingLink; connectToShape = closestToShape; connectFromShape = currentFromShape; + if (existingLink == link) + { + originalLinkProcessed = true; + } } } else if (closerFromShape == null && !detachFromShape) @@ -985,7 +997,7 @@ AttachLinkResult.Attach != configurableFromEndpoint.CanAttachLink(forLink, false); return (!detachFromShape && FindNearestShapeForElement(diagram, fromShape, toElement, forLink, null, false, out closestToShape, out closerFromShape, out closerFromShapeBlocking) && - !closerFromShapeBlocking) ? + closerFromShape == null) ? closestToShape : null; } @@ -1065,7 +1077,6 @@ // elements are either currently connected or should be connected. // Before connecting, find out up front if we have a closer from shape than the current from shape. // If we do, then the current to/from shapes should not be connected for this link. - bool closerFromShapeDeferred = false; double closerFromShapeDistance = detachedFromShape ? double.MaxValue : closestToShapeDistance; testCenterX = closestToShapeCenter.X; testCenterY = closestToShapeCenter.Y; @@ -1097,27 +1108,18 @@ break; } } - center = GetReliableShapeCenter(currentFromShape2); - if ((currentDistance = (distanceX = testCenterX - center.X) * distanceX - + (distanceY = testCenterY - center.Y) * distanceY) < closerFromShapeDistance) + if (!deferredShape) { - if (deferredShape) + center = GetReliableShapeCenter(currentFromShape2); + if ((currentDistance = (distanceX = testCenterX - center.X) * distanceX + + (distanceY = testCenterY - center.Y) * distanceY) < closerFromShapeDistance) { - closerFromShapeDeferred = true; - } - else - { closerFromShapeDistance = currentDistance; closerFromShape = currentFromShape2; - closerFromShapeDeferred = false; closerFromShapeBlocking = blockingShape; } } } - if (closerFromShapeDeferred && closerFromShape == null) - { - closerFromShapeBlocking = true; - } return true; } return false; @@ -1276,19 +1278,19 @@ public enum AttachLinkResult { /// <summary> - /// The link can be attached + /// The link can be attached to this shape /// </summary> Attach, /// <summary> /// The link cannot be attached to this shape, but a - /// shape that is farther away may be used as an attach - /// point. + /// shape that is farther away may be attached to this + /// link. /// </summary> Defer, /// <summary> /// The link cannot be attached to this shape, and no - /// shape that is farther away should be used an attach - /// point for this link. + /// shape that is farther away should be attached to + /// this link. /// </summary> Block, } Modified: trunk/ORMModel/ShapeModel/ExternalConstraintLink.cs =================================================================== --- trunk/ORMModel/ShapeModel/ExternalConstraintLink.cs 2011-06-28 01:16:16 UTC (rev 1472) +++ trunk/ORMModel/ShapeModel/ExternalConstraintLink.cs 2011-06-30 02:39:04 UTC (rev 1473) @@ -453,16 +453,30 @@ } } #endregion // ExternalConstraintLink specific - #region Dangling constraint shape deletion + #region Dangling constraint shape deletion and fact type shape role bar resizing /// <summary> + /// AddRule: typeof(Microsoft.VisualStudio.Modeling.Diagrams.LinkConnectsToNode) + /// Make sure connected fact type shapes properly display their role bars + /// </summary> + private static void VerifyedConnectedShapeAddedRule(ElementAddedEventArgs e) + { + LinkConnectsToNode connectLink = (LinkConnectsToNode)e.ModelElement; + FactTypeShape factTypeShape; + if (connectLink.Link is ExternalConstraintLink && + null != (factTypeShape = connectLink.Nodes as FactTypeShape)) + { + FrameworkDomainModel.DelayValidateElement(factTypeShape, DelayValidateFactTypeShapeSize); + } + } + /// <summary> /// DeletingRule: typeof(Microsoft.VisualStudio.Modeling.Diagrams.LinkConnectsToNode) /// External constraint shapes can only be drawn if they show all of their /// links, so automatically remove them if a connecting shape is removed. /// </summary> - private static void DeleteDanglingConstraintShapeDeletingRule(ElementDeletingEventArgs e) + private static void VerifyConnectedShapeShapeDeletingRule(ElementDeletingEventArgs e) { - LinkConnectsToNode connectLink = e.ModelElement as LinkConnectsToNode; - ExternalConstraintLink link = connectLink.Link as ExternalConstraintLink; + LinkConnectsToNode connectLink = (LinkConnectsToNode)e.ModelElement; + ExternalConstraintLink link; ModelElement linkMel; ModelElement shapeMel; if (null != (link = connectLink.Link as ExternalConstraintLink) && @@ -492,18 +506,12 @@ { FrameworkDomainModel.DelayValidateElement(constraintShape, DelayValidateExternalConstraintShapeFullyConnected); } - else + // Delay, fact type shape size will not be accurate until deletion is completed. + FactTypeShape factTypeShape = MultiShapeUtility.ResolvePrimaryShape(oppositeShape) as FactTypeShape; + if (factTypeShape != null && + !factTypeShape.IsDeleting) { - FactTypeShape factTypeShape = MultiShapeUtility.ResolvePrimaryShape(oppositeShape) as FactTypeShape; - if (factTypeShape != null) - { - SizeD oldSize = factTypeShape.Size; - factTypeShape.AutoResize(); - if (oldSize == factTypeShape.Size) - { - ((IInvalidateDisplay)factTypeShape).InvalidateRequired(true); - } - } + FrameworkDomainModel.DelayValidateElement(factTypeShape, DelayValidateFactTypeShapeSize); } } } @@ -514,31 +522,43 @@ /// links, so automatically remove them if a link is moved off the constraint /// shape. /// </summary> - private static void DeleteDanglingConstraintShapeRolePlayerChangeRule(RolePlayerChangedEventArgs e) + private static void VerifyConnectedShapeShapeRolePlayerChangedRule(RolePlayerChangedEventArgs e) { - IElementDirectory directory; - ShapeElement oldShape; + ShapeElement shape; if (e.DomainRole.Id == LinkConnectsToNode.NodesDomainRoleId && - (directory = e.ElementLink.Store.ElementDirectory).ContainsElement(e.OldRolePlayerId) && - null != (oldShape = directory.GetElement(e.OldRolePlayerId) as ShapeElement)) + ((LinkConnectsToNode)e.ElementLink).Link is ExternalConstraintLink && + null != (shape = e.OldRolePlayer as ShapeElement)) { ExternalConstraintShape constraintShape; FactTypeShape factTypeShape; - if (null != (constraintShape = oldShape as ExternalConstraintShape)) + if (null != (constraintShape = shape as ExternalConstraintShape)) { FrameworkDomainModel.DelayValidateElement(constraintShape, DelayValidateExternalConstraintShapeFullyConnected); } - else if (null != (factTypeShape = MultiShapeUtility.ResolvePrimaryShape(oldShape) as FactTypeShape)) + else if (null != (factTypeShape = MultiShapeUtility.ResolvePrimaryShape(shape) as FactTypeShape)) { - SizeD oldSize = factTypeShape.Size; - factTypeShape.AutoResize(); - if (oldSize == factTypeShape.Size) + FrameworkDomainModel.DelayValidateElement(factTypeShape, DelayValidateFactTypeShapeSize); + if (null != (shape = e.NewRolePlayer as ShapeElement) && + null != (factTypeShape = MultiShapeUtility.ResolvePrimaryShape(shape) as FactTypeShape)) { - ((IInvalidateDisplay)factTypeShape).InvalidateRequired(true); + FrameworkDomainModel.DelayValidateElement(factTypeShape, DelayValidateFactTypeShapeSize); } } } } + private static void DelayValidateFactTypeShapeSize(ModelElement element) + { + if (!element.IsDeleted) + { + FactTypeShape factTypeShape = (FactTypeShape)element; + SizeD oldSize = factTypeShape.Size; + factTypeShape.AutoResize(); + if (oldSize == factTypeShape.Size) + { + ((IInvalidateDisplay)factTypeShape).InvalidateRequired(true); + } + } + } /// <summary> /// AddRule: typeof(ExternalConstraintShape), FireTime=TopLevelCommit, Priority=DiagramFixupConstants.AddConnectionRulePriority + 1; /// External constraint shapes can only be drawn if they show all of their @@ -579,7 +599,7 @@ } } } - #endregion // Dangling constraint shape deletion + #endregion // Dangling constraint shape deletion and fact type shape role bar resizing #region Accessibility Properties /// <summary> /// Return the localized accessible name for the link Modified: trunk/ORMModel/ShapeModel/FactTypeShape.cs =================================================================== --- trunk/ORMModel/ShapeModel/FactTypeShape.cs 2011-06-28 01:16:16 UTC (rev 1472) +++ trunk/ORMModel/ShapeModel/FactTypeShape.cs 2011-06-30 02:39:04 UTC (rev 1473) @@ -5182,6 +5182,7 @@ protected AttachLinkResult CanAttachLink(ModelElement element, bool toRole) { ObjectTypePlaysRole rolePlayerLink; + FactConstraint constraintLink; FactType factType; Objectification objectification; if (element is SubtypeFact) @@ -5198,47 +5199,58 @@ return AttachLinkResult.Defer; } } - else if (null != (rolePlayerLink = element as ObjectTypePlaysRole) && - null != (factType = this.AssociatedFactType) && - null != (objectification = factType.Objectification)) + else if (null != (rolePlayerLink = element as ObjectTypePlaysRole)) { - bool displayedAsObjectType = DisplayAsObjectType; - ObjectType objectifyingType = objectification.NestingType; - FactType refModeFactType; - if (displayedAsObjectType) + if (null != (factType = this.AssociatedFactType) && + null != (objectification = factType.Objectification)) { - if (objectifyingType != rolePlayerLink.RolePlayer && - ShouldDrawObjectification(objectification, objectifyingType)) + bool displayedAsObjectType = DisplayAsObjectType; + ObjectType objectifyingType = objectification.NestingType; + FactType refModeFactType; + if (displayedAsObjectType) { - return AttachLinkResult.Defer; + if (objectifyingType != rolePlayerLink.RolePlayer && + ShouldDrawObjectification(objectification, objectifyingType)) + { + return AttachLinkResult.Defer; + } + else if (toRole && + !ExpandRefMode && // Use ExpandRefMode from the fact type shape + null != (refModeFactType = objectifyingType.ReferenceModeFactType) && + refModeFactType == rolePlayerLink.PlayedRole.FactType) + { + return AttachLinkResult.Defer; + } } else if (toRole && - !ExpandRefMode && // Use ExpandRefMode from the fact type shape null != (refModeFactType = objectifyingType.ReferenceModeFactType) && refModeFactType == rolePlayerLink.PlayedRole.FactType) { - return AttachLinkResult.Defer; - } - } - else if (toRole && - null != (refModeFactType = objectifyingType.ReferenceModeFactType) && - refModeFactType == rolePlayerLink.PlayedRole.FactType) - { - // Use ExpandRefMode from the name shape - foreach (PresentationElement childPel in this.RelativeChildShapes) - { - ObjectifiedFactTypeNameShape nameShape = childPel as ObjectifiedFactTypeNameShape; - if (nameShape != null) + // Use ExpandRefMode from the name shape + foreach (PresentationElement childPel in this.RelativeChildShapes) { - if (!nameShape.ExpandRefMode) + ObjectifiedFactTypeNameShape nameShape = childPel as ObjectifiedFactTypeNameShape; + if (nameShape != null) { - return AttachLinkResult.Defer; + if (!nameShape.ExpandRefMode) + { + return AttachLinkResult.Defer; + } + break; } - break; } } } } + else if (null != (constraintLink = element as FactConstraint)) + { + if (DisplayAsObjectType && + null != (objectification = constraintLink.FactType.Objectification) && + !objectification.IsImplied) + { + return AttachLinkResult.Defer; + } + } return AttachLinkResult.Attach; } AttachLinkResult IConfigureableLinkEndpoint.CanAttachLink(ModelElement element, bool toRole) Modified: trunk/ORMModel/ShapeModel/ORMShape.AttachRules.cs =================================================================== --- trunk/ORMModel/ShapeModel/ORMShape.AttachRules.cs 2011-06-28 01:16:16 UTC (rev 1472) +++ trunk/ORMModel/ShapeModel/ORMShape.AttachRules.cs 2011-06-30 02:39:04 UTC (rev 1473) @@ -35,8 +35,9 @@ // Given the low likelihood of this ever happening, the extra overhead of synchronization would outweigh any possible gain from it. retVal = new Type[]{ typeof(ExternalConstraintLink).GetNestedType("DeleteDanglingConstraintShapeAddRuleClass", BindingFlags.Public | BindingFlags.NonPublic), - typeof(ExternalConstraintLink).GetNestedType("DeleteDanglingConstraintShapeDeletingRuleClass", BindingFlags.Public | BindingFlags.NonPublic), - typeof(ExternalConstraintLink).GetNestedType("DeleteDanglingConstraintShapeRolePlayerChangeRuleClass", BindingFlags.Public | BindingFlags.NonPublic), + typeof(ExternalConstraintLink).GetNestedType("VerifyedConnectedShapeAddedRuleClass", BindingFlags.Public | BindingFlags.NonPublic), + typeof(ExternalConstraintLink).GetNestedType("VerifyConnectedShapeShapeDeletingRuleClass", BindingFlags.Public | BindingFlags.NonPublic), + typeof(ExternalConstraintLink).GetNestedType("VerifyConnectedShapeShapeRolePlayerChangedRuleClass", BindingFlags.Public | BindingFlags.NonPublic), typeof(ExternalConstraintShape).GetNestedType("ExclusiveOrCouplerAddedRuleClass", BindingFlags.Public | BindingFlags.NonPublic), typeof(ExternalConstraintShape).GetNestedType("ExclusiveOrCouplerDeletedRuleClass", BindingFlags.Public | BindingFlags.NonPublic), typeof(ExternalConstraintShape).GetNestedType("PreferredIdentifierAddRuleClass", BindingFlags.Public | BindingFlags.NonPublic), @@ -150,7 +151,7 @@ { Microsoft.VisualStudio.Modeling.RuleManager ruleManager = store.RuleManager; Type[] disabledRuleTypes = ORMShapeDomainModel.CustomDomainModelTypes; - for (int i = 0; i < 83; ++i) + for (int i = 0; i < 84; ++i) { ruleManager.EnableRule(disabledRuleTypes[i]); } @@ -192,10 +193,10 @@ } } [Microsoft.VisualStudio.Modeling.RuleOn(typeof(Microsoft.VisualStudio.Modeling.Diagrams.LinkConnectsToNode), Priority=ORMSolutions.ORMArchitect.Framework.FrameworkDomainModel.InlineRulePriority)] - private sealed class DeleteDanglingConstraintShapeDeletingRuleClass : Microsoft.VisualStudio.Modeling.DeletingRule + private sealed class VerifyedConnectedShapeAddedRuleClass : Microsoft.VisualStudio.Modeling.AddRule { [System.Diagnostics.DebuggerStepThrough()] - public DeleteDanglingConstraintShapeDeletingRuleClass() + public VerifyedConnectedShapeAddedRuleClass() { base.IsEnabled = false; } @@ -203,25 +204,51 @@ /// Provide the following method in class: /// ORMSolutions.ORMArchitect.Core.ShapeModel.ExternalConstraintLink /// /// <summary> + /// /// AddRule: typeof(Microsoft.VisualStudio.Modeling.Diagrams.LinkConnectsToNode) + /// /// </summary> + /// private static void VerifyedConnectedShapeAddedRule(ElementAddedEventArgs e) + /// { + /// } + /// </summary> + [System.Diagnostics.DebuggerStepThrough()] + public override void ElementAdded(Microsoft.VisualStudio.Modeling.ElementAddedEventArgs e) + { + ORMSolutions.ORMArchitect.Framework.Diagnostics.TraceUtility.TraceRuleStart(e.ModelElement.Store, "ORMSolutions.ORMArchitect.Core.ShapeModel.ExternalConstraintLink.VerifyedConnectedShapeAddedRule"); + ExternalConstraintLink.VerifyedConnectedShapeAddedRule(e); + ORMSolutions.ORMArchitect.Framework.Diagnostics.TraceUtility.TraceRuleEnd(e.ModelElement.Store, "ORMSolutions.ORMArchitect.Core.ShapeModel.ExternalConstraintLink.VerifyedConnectedShapeAddedRule"); + } + } + [Microsoft.VisualStudio.Modeling.RuleOn(typeof(Microsoft.VisualStudio.Modeling.Diagrams.LinkConnectsToNode), Priority=ORMSolutions.ORMArchitect.Framework.FrameworkDomainModel.InlineRulePriority)] + private sealed class VerifyConnectedShapeShapeDeletingRuleClass : Microsoft.VisualStudio.Modeling.DeletingRule + { + [System.Diagnostics.DebuggerStepThrough()] + public VerifyConnectedShapeShapeDeletingRuleClass() + { + base.IsEnabled = false; + } + /// <summary> + /// Provide the following method in class: + /// ORMSolutions.ORMArchitect.Core.ShapeModel.ExternalConstraintLink + /// /// <summary> /// /// DeletingRule: typeof(Microsoft.VisualStudio.Modeling.Diagrams.LinkConnectsToNode) /// /// </summary> - /// private static void DeleteDanglingConstraintShapeDeletingRule(ElementDeletingEventArgs e) + /// private static void VerifyConnectedShapeShapeDeletingRule(ElementDeletingEventArgs e) /// { /// } /// </summary> [System.Diagnostics.DebuggerStepThrough()] public override void ElementDeleting(Microsoft.VisualStudio.Modeling.ElementDeletingEventArgs e) { - ORMSolutions.ORMArchitect.Framework.Diagnostics.TraceUtility.TraceRuleStart(e.ModelElement.Store, "ORMSolutions.ORMArchitect.Core.ShapeModel.ExternalConstraintLink.DeleteDanglingConstraintShapeDeletingRule"); - ExternalConstraintLink.DeleteDanglingConstraintShapeDeletingRule(e); - ORMSolutions.ORMArchitect.Framework.Diagnostics.TraceUtility.TraceRuleEnd(e.ModelElement.Store, "ORMSolutions.ORMArchitect.Core.ShapeModel.ExternalConstraintLink.DeleteDanglingConstraintShapeDeletingRule"); + ORMSolutions.ORMArchitect.Framework.Diagnostics.TraceUtility.TraceRuleStart(e.ModelElement.Store, "ORMSolutions.ORMArchitect.Core.ShapeModel.ExternalConstraintLink.VerifyConnectedShapeShapeDeletingRule"); + ExternalConstraintLink.VerifyConnectedShapeShapeDeletingRule(e); + ORMSolutions.ORMArchitect.Framework.Diagnostics.TraceUtility.TraceRuleEnd(e.ModelElement.Store, "ORMSolutions.ORMArchitect.Core.ShapeModel.ExternalConstraintLink.VerifyConnectedShapeShapeDeletingRule"); } } [Microsoft.VisualStudio.Modeling.RuleOn(typeof(Microsoft.VisualStudio.Modeling.Diagrams.LinkConnectsToNode), Priority=ORMSolutions.ORMArchitect.Framework.FrameworkDomainModel.InlineRulePriority)] - private sealed class DeleteDanglingConstraintShapeRolePlayerChangeRuleClass : Microsoft.VisualStudio.Modeling.RolePlayerChangeRule + private sealed class VerifyConnectedShapeShapeRolePlayerChangedRuleClass : Microsoft.VisualStudio.Modeling.RolePlayerChangeRule { [System.Diagnostics.DebuggerStepThrough()] - public DeleteDanglingConstraintShapeRolePlayerChangeRuleClass() + public VerifyConnectedShapeShapeRolePlayerChangedRuleClass() { base.IsEnabled = false; } @@ -231,16 +258,16 @@ /// /// <summary> /// /// RolePlayerChangeRule: typeof(Microsoft.VisualStudio.Modeling.Diagrams.LinkConnectsToNode) /// /// </summary> - /// private static void DeleteDanglingConstraintShapeRolePlayerChangeRule(RolePlayerChangedEventArgs e) + /// private static void VerifyConnectedShapeShapeRolePlayerChangedRule(RolePlayerChangedEventArgs e) /// { /// } /// </summary> [System.Diagnostics.DebuggerStepThrough()] public override void RolePlayerChanged(Microsoft.VisualStudio.Modeling.RolePlayerChangedEventArgs e) { - ORMSolutions.ORMArchitect.Framework.Diagnostics.TraceUtility.TraceRuleStart(e.ElementLink.Store, "ORMSolutions.ORMArchitect.Core.ShapeModel.ExternalConstraintLink.DeleteDanglingConstraintShapeRolePlayerChangeRule"); - ExternalConstraintLink.DeleteDanglingConstraintShapeRolePlayerChangeRule(e); - ORMSolutions.ORMArchitect.Framework.Diagnostics.TraceUtility.TraceRuleEnd(e.ElementLink.Store, "ORMSolutions.ORMArchitect.Core.ShapeModel.ExternalConstraintLink.DeleteDanglingConstraintShapeRolePlayerChangeRule"); + ORMSolutions.ORMArchitect.Framework.Diagnostics.TraceUtility.TraceRuleStart(e.ElementLink.Store, "ORMSolutions.ORMArchitect.Core.ShapeModel.ExternalConstraintLink.VerifyConnectedShapeShapeRolePlayerChangedRule"); + ExternalConstraintLink.VerifyConnectedShapeShapeRolePlayerChangedRule(e); + ORMSolutions.ORMArchitect.Framework.Diagnostics.TraceUtility.TraceRuleEnd(e.ElementLink.Store, "ORMSolutions.ORMArchitect.Core.ShapeModel.ExternalConstraintLink.VerifyConnectedShapeShapeRolePlayerChangedRule"); } } } Modified: trunk/ORMModel/ShapeModel/ORMShape.AttachRules.xml =================================================================== --- trunk/ORMModel/ShapeModel/ORMShape.AttachRules.xml 2011-06-28 01:16:16 UTC (rev 1472) +++ trunk/ORMModel/ShapeModel/ORMShape.AttachRules.xml 2011-06-30 02:39:04 UTC (rev 1473) @@ -24,10 +24,13 @@ </arg:PriorityAdjustment> </arg:RuleOn> </arg:AddRule> - <arg:DeletingRule methodName="DeleteDanglingConstraintShapeDeletingRule"> + <arg:AddRule methodName="VerifyedConnectedShapeAddedRule"> <arg:RuleOn targetType="LinkConnectsToNode" targetTypeQualifier="Microsoft.VisualStudio.Modeling.Diagrams"/> + </arg:AddRule> + <arg:DeletingRule methodName="VerifyConnectedShapeShapeDeletingRule"> + <arg:RuleOn targetType="LinkConnectsToNode" targetTypeQualifier="Microsoft.VisualStudio.Modeling.Diagrams"/> </arg:DeletingRule> - <arg:RolePlayerChangeRule methodName="DeleteDanglingConstraintShapeRolePlayerChangeRule"> + <arg:RolePlayerChangeRule methodName="VerifyConnectedShapeShapeRolePlayerChangedRule"> <arg:RuleOn targetType="LinkConnectsToNode" targetTypeQualifier="Microsoft.VisualStudio.Modeling.Diagrams"/> </arg:RolePlayerChangeRule> </arg:RuleContainer> Modified: trunk/ORMModel/ShapeModel/ReadingShape.cs =================================================================== --- trunk/ORMModel/ShapeModel/ReadingShape.cs 2011-06-28 01:16:16 UTC (rev 1472) +++ trunk/ORMModel/ShapeModel/ReadingShape.cs 2011-06-30 02:39:04 UTC (rev 1473) @@ -331,17 +331,22 @@ /// <param name="createdDuringViewFixup">Whether this shape was created as part of a view fixup</param> public override void PlaceAsChildOf(NodeShape parent, bool createdDuringViewFixup) { - FactTypeShape factShape = (FactTypeShape)parent; + FactTypeShape factTypeShape = (FactTypeShape)parent; + FactType factType; + Objectification objectification; AutoResize(); SizeD size = Size; double yOffset; - if (factShape.ConstraintDisplayPosition == ConstraintDisplayPosition.Top) + if (factTypeShape.ConstraintDisplayPosition == ConstraintDisplayPosition.Bottom && + (null == (factType = factTypeShape.AssociatedFactType) || + null == (objectification = factType.Objectification) || + objectification.IsImplied)) { - yOffset = factShape.Size.Height + .5 * size.Height; + yOffset = -1.5 * size.Height; } else { - yOffset = -1.5 * size.Height; + yOffset = factTypeShape.Size.Height + .5 * size.Height; } Location = new PointD(0, yOffset); } Modified: trunk/ORMModel/ShapeModel/ViewFixupRules.cs =================================================================== --- trunk/ORMModel/ShapeModel/ViewFixupRules.cs 2011-06-28 01:16:16 UTC (rev 1472) +++ trunk/ORMModel/ShapeModel/ViewFixupRules.cs 2011-06-30 02:39:04 UTC (rev 1473) @@ -1278,39 +1278,34 @@ #region ForceClearViewFixupDataListRuleClass partial class ForceClearViewFixupDataListRuleClass { - #region Dynamic Microsoft.VisualStudio.Modeling.Diagrams.Diagram.ClearViewFixupDataList implementation - private delegate void ClearDiagramViewFixupDataListDelegate(Diagram @this); - /// <summary> - /// The Microsoft.VisualStudio.Modeling.Diagrams.Diagram.ViewFixupData class and corresponding - /// Microsoft.VisualStudio.Modeling.Diagrams.Diagram.ViewFixupDataList property are internal - /// Microsoft.VisualStudio.Modeling.ModelCommand is internal, but the partition and EventArgs - /// elements are not. Retrieve these with a dynamic method. - /// </summary> - private static readonly ClearDiagramViewFixupDataListDelegate ClearViewFixupDataList = CreateClearViewFixupDataList(); - private static ClearDiagramViewFixupDataListDelegate CreateClearViewFixupDataList() + #region Dynamic Microsoft.VisualStudio.Modeling.Diagrams.Diagram.GetViewFixupDataListCount implementation + private delegate int GetViewFixupDataListCountDelegate(Diagram @this); + private static readonly GetViewFixupDataListCountDelegate GetViewFixupDataListCount = CreateGetViewFixupDataListCount(); + private static GetViewFixupDataListCountDelegate CreateGetViewFixupDataListCount() { Type diagramType = typeof(Diagram); Type viewFixupDataListType; PropertyInfo viewFixupDataListProperty; MethodInfo viewFixupDataListPropertyGet; - MethodInfo clearMethod; + PropertyInfo countProperty; + MethodInfo countPropertyGet; if (null == (viewFixupDataListProperty = diagramType.GetProperty("ViewFixupDataList", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)) || null == (viewFixupDataListType = viewFixupDataListProperty.PropertyType) || - null == (clearMethod = viewFixupDataListType.GetMethod("Clear", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)) || + null == (countProperty = viewFixupDataListType.GetProperty("Count", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)) || + null == (countPropertyGet = countProperty.GetGetMethod(true)) || null == (viewFixupDataListPropertyGet = viewFixupDataListProperty.GetGetMethod(true))) { Debug.Fail("The internal structure of the Diagram class has changed, IL generation will fail"); return null; } - - // Approximate method being written (assuming TransactionItem context): - // void ClearViewFixupDataList() + // Approximate method being written: + // int GetViewFixupDataListCount() // { - // ViewFixupDataList.Clear(); + // return ViewFixupDataList.Count; // } DynamicMethod dynamicMethod = new DynamicMethod( - "ClearViewFixupDataList", - null, + "GetViewFixupDataListCount", + typeof(int), new Type[] { diagramType }, diagramType.Module, true); @@ -1319,25 +1314,29 @@ ILGenerator il = dynamicMethod.GetILGenerator(16); il.Emit(OpCodes.Ldarg_0); il.Emit(OpCodes.Call, viewFixupDataListPropertyGet); - il.Emit(OpCodes.Call, clearMethod); + il.Emit(OpCodes.Call, countPropertyGet); - // Return the array (already on the stack) + // Return the count (already on the stack) il.Emit(OpCodes.Ret); - return (ClearDiagramViewFixupDataListDelegate)dynamicMethod.CreateDelegate(typeof(ClearDiagramViewFixupDataListDelegate)); + return (GetViewFixupDataListCountDelegate)dynamicMethod.CreateDelegate(typeof(GetViewFixupDataListCountDelegate)); } - #endregion // Dynamic Microsoft.VisualStudio.Modeling.Diagrams.Diagram.ClearViewFixupDataList implementation + #endregion // Dynamic Microsoft.VisualStudio.Modeling.Diagrams.Diagram.GetViewFixupDataListCount implementation /// <summary> /// ChangeRule: typeof(Microsoft.VisualStudio.Modeling.Diagrams.Diagram), FireTime=TopLevelCommit, Priority=DiagramFixupConstants.AddShapeRulePriority + 1; - /// Make sure the internal diagram ViewFixupDataList is cleared once fixup is completed. - /// The core implementation does not clear more than a single element. + /// Only the first element of the internal diagram ViewFixupDataList is processed whenever the + /// DoViewFixup is set to true, but we generally need to process all of these items. Keep setting + /// the property to true until all of the items are processed. /// </summary> private void ForceClearViewFixupDataListRule(ElementPropertyChangedEventArgs e) { Diagram diagram; - if (e.DomainProperty.Id == Diagram.DoViewFixupDomainPropertyId && - !(diagram = (e.ModelElement as Diagram)).IsDeleted) + Guid propertyId = e.DomainProperty.Id; + if (propertyId == Diagram.DoViewFixupDomainPropertyId && + !((bool)e.NewValue) && + !(diagram = (e.ModelElement as Diagram)).IsDeleted && + 0 != GetViewFixupDataListCount(diagram)) { - ClearViewFixupDataList(diagram); + diagram.Store.DomainDataDirectory.GetDomainProperty(propertyId).SetValue(diagram, true); } } } Modified: trunk/Setup/Readme.htm =================================================================== --- trunk/Setup/Readme.htm 2011-06-28 01:16:16 UTC (rev 1472) +++ trunk/Setup/Readme.htm 2011-06-30 02:39:04 UTC (rev 1473) @@ -44,7 +44,7 @@ <hr/> <h2>June 2011 CTP Changes</h2> -<div>The June 2011 CTP release includes all modifications through changeset 1472. 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 June 2011 CTP release includes all modifications through changeset 1473. 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="#DisplayAsObjectType 2011-06">Display Objectified Fact Type as Object Type</a> </li> <li><a href="#LinkFactTypeDisplay 2011-06">Link Fact Type Display</a> </li> @@ -67,13 +67,14 @@ <li>(VS2010) Customizable attach points displayed on the Relational and Barker ER diagrams crashed if clicked.</li> <li>External constraints attached to subtype lines did not display in the Context Window.</li> <li>Selecting an ObjectType reference inside a group element crashed the Properties Window.</li> -<li>Fact type shapes with constraint role bar display failed with multiple shapes for the same fact type on the same diagram.</li> +<li>Fact type shapes with constraint role bar display failed with multiple shapes for the same fact type on the same diagram and did not always resize when role bars were initially shown or hidden.</li> <li>Objectified fact types did not synchronize the object type and default fact type name in the target model after a cross-model drag of the objectified fact type.</li> <li>Sample population values did not appear to change, always displayed original invariant value.</li> <li>Sample population editor crashed adding new supertype instances in an empty inline-expanded subtype cell.</li> <li>The meta file created by the <em>Copy Image</em> command did not have a transparent background on all versions, lines were rendered visibly different from those in the designer.</li> <li>The <em>ExpandRefMode</em> property did not work well with multiple shapes for the object type (or objectified fact type) on the same diagram. If there are multiple shapes on the diagram, the first shape to set <em>ExpandRefMode</em> to true will add the reference mode fact type and value type, and the last to clear this property will remove them. The reference mode fact type will only attach to those shapes with <em>ExpandRefMode</em> set to true.</li> <li>Multiple shapes representing a single backing element (FactType, ObjectType, etc) on the same diagram caused a null reference exception if the backing element was deleted. Duplicate shapes needed to be deleted to enable deletion of the backing element.</li> +<li>Dragging multiple shapes within one document or between documents only validated size and other settings for the first selected shape.</li> <li>The final dialog shown by the database import wizard launched by a VB or C# project offered to disable the <em>Save</em> button to prevent data loss (caused by an inconsistent implementation of VSHPROPID_IsNewUnsavedItem across different project types). Template and wizard-generated files are now marked with a <em><?new?></em> processing instruction to avoid any project-type dependencies.</li> </ol> </li> @@ -638,6 +639,8 @@ <li>The <em>ORM Diagram Spy</em> window will occasionally go blank after extended use with multiple open ORM files. A restart of the environment is required to recover the window. If you can reliably reproduce this issue please report the scenario.</li> <li>The NORMA help files are not installed or integrated with Visual Studio 2010. [The installer merge modules used for help integration in VS2005 and VS2008 are not included with the VS2010 SDK.]</li> <li>The FrequencyConstraint and Reading shapes are larger in Visual Studio 2010.</li> +<li>Database import does not work from the <em>Add New Item</em> dialog in a project. Use <em>File/New</em> instead then save the file in the project file and add it to the project.</li> +<li>The document tab after a database import using <em>File/New</em> displays the full path of the temporary file instead of the base file name.</li> </ol> <a href="#The Top">Return to top</a> <hr/> Modified: trunk/Tools/DatabaseImport/ORMDatabaseImportWizard.cs =================================================================== --- trunk/Tools/DatabaseImport/ORMDatabaseImportWizard.cs 2011-06-28 01:16:16 UTC (rev 1472) +++ trunk/Tools/DatabaseImport/ORMDatabaseImportWizard.cs 2011-06-30 02:39:04 UTC (rev 1473) @@ -248,6 +248,7 @@ RunStarted(automationObject, replacementsDictionary, runKind, customParams); } +#if !VISUALSTUDIO_10_0 // UNDONE: Accessing any documents at this point throws in VS2010. I'd rather see the temp path in the caption than an error message. /// <summary> /// Ensures that only the file name portion of the new <see cref="ProjectItem"/>'s path is used as the /// title for the document window. @@ -343,5 +344,6 @@ { ProjectItemFinishedGenerating(projectItem); } +#endif // VISUALSTUDIO_10_0 } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2011-10-13 04:43:45
|
Revision: 1475 http://orm.svn.sourceforge.net/orm/?rev=1475&view=rev Author: mcurland Date: 2011-10-13 04:43:38 +0000 (Thu, 13 Oct 2011) Log Message: ----------- Bug fixes: * Zoom and Extension Manager commands are not available in some multi select states, add to list of commands that support multiple selections. * VS2010 ORMCustomTool adds duplicate ORMGenerator entries in project file. ProjectItemElement.SetMetadata adds a new item instead of modifying the existing one. Explicitly delete existing elements and use AddMetadata to replace. Modified Paths: -------------- trunk/ORMModel/Shell/ORMDesignerCommandManager.cs trunk/Tools/ORMCustomTool/UI/MainBranch.cs Modified: trunk/ORMModel/Shell/ORMDesignerCommandManager.cs =================================================================== --- trunk/ORMModel/Shell/ORMDesignerCommandManager.cs 2011-07-27 17:34:59 UTC (rev 1474) +++ trunk/ORMModel/Shell/ORMDesignerCommandManager.cs 2011-10-13 04:43:38 UTC (rev 1475) @@ -359,6 +359,8 @@ private const ORMDesignerCommands EnabledSimpleMultiSelectCommandFilter = ORMDesignerCommands.DisplayStandardWindows | ORMDesignerCommands.CopyImage | + ORMDesignerCommands.ExtensionManager | + ORMDesignerCommands.Zoom | ORMDesignerCommands.DisplayOrientation | ORMDesignerCommands.DisplayConstraintsPosition | ORMDesignerCommands.ExclusiveOrDecoupler | @@ -1042,6 +1044,7 @@ } } // Turn on standard commands for all selections + // Consider adding anything here to the EnabledSimpleMultiSelectCommandFilter above visibleCommands |= ORMDesignerCommands.DisplayStandardWindows | ORMDesignerCommands.CopyImage | ORMDesignerCommands.SelectAll | ORMDesignerCommands.ExtensionManager | ORMDesignerCommands.ErrorList | ORMDesignerCommands.ReportGeneratorList | ORMDesignerCommands.FreeFormCommandList | ORMDesignerCommands.SelectInModelBrowser | ORMDesignerCommands.Zoom; enabledCommands |= ORMDesignerCommands.DisplayStandardWindows | ORMDesignerCommands.CopyImage | ORMDesignerCommands.SelectAll | ORMDesignerCommands.ExtensionManager | ORMDesignerCommands.ErrorList | ORMDesignerCommands.ReportGeneratorList | ORMDesignerCommands.FreeFormCommandList | ORMDesignerCommands.SelectInModelBrowser | ORMDesignerCommands.Zoom; } Modified: trunk/Tools/ORMCustomTool/UI/MainBranch.cs =================================================================== --- trunk/Tools/ORMCustomTool/UI/MainBranch.cs 2011-07-27 17:34:59 UTC (rev 1474) +++ trunk/Tools/ORMCustomTool/UI/MainBranch.cs 2011-10-13 04:43:38 UTC (rev 1475) @@ -392,7 +392,7 @@ } } formatBranch.SelectedORMGenerator = modifierGenerator; - _parent.BuildItemsByGenerator[primaryGenerator.OfficialName].SetMetadata(ITEMMETADATA_ORMGENERATOR, primaryBranch.SelectedGeneratorOfficialNames); + SetItemMetaData(_parent.BuildItemsByGenerator[primaryGenerator.OfficialName], ITEMMETADATA_ORMGENERATOR, primaryBranch.SelectedGeneratorOfficialNames); retVal |= StateRefreshChanges.Children | StateRefreshChanges.Children; } else if (testToggleOff) @@ -483,7 +483,7 @@ #endif = buildItemsByGeneratorName[primaryGenerator.OfficialName]; formatBranch.SelectedORMGenerator = null; - updateBuildItem.SetMetadata(ITEMMETADATA_ORMGENERATOR, primaryBranch.SelectedGeneratorOfficialNames); + SetItemMetaData(updateBuildItem, ITEMMETADATA_ORMGENERATOR, primaryBranch.SelectedGeneratorOfficialNames); } } else @@ -505,6 +505,32 @@ _parent.AddRemovedItem(removeBuildItem); } } +#if VISUALSTUDIO_10_0 + private static void SetItemMetaData(ProjectItemElement buildItem, string metadataName, string metadataValue) + { + // ProjectItemElement.SetMetadata adds a new metadata element with the same name + // as the previous one. There is no 'RemoveMetadata' that takes a string, so we go through + // the entire metadata collection and clean it out. + foreach (ProjectMetadataElement element in buildItem.Metadata) + { + if (element.Name == metadataName) + { + // The Metadata collection is a read-only snapshot, so deleting from it is safe + // inside the iterator. + buildItem.RemoveChild(element); + // Do not break. This handles removing multiple metadata items with the + // same name, which will clean up project files affected by this problem + // in previous drops. + } + } + buildItem.AddMetadata(metadataName, metadataValue); + } +#else // VISUALSTUDIO_10_0 + private static void SetItemMetaData(BuildItem buildItem, string metadataName, string metadataValue) + { + buildItem.SetMetadata(metadataName, metadataValue); + } +#endif // VISUALSTUDIO_10_0 public override BranchFeatures Features { get This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2011-10-15 17:45:17
|
Revision: 1476 http://orm.svn.sourceforge.net/orm/?rev=1476&view=rev Author: mcurland Date: 2011-10-15 17:45:11 +0000 (Sat, 15 Oct 2011) Log Message: ----------- Updated version and readme to October 2011 CTP refs #193 Modified Paths: -------------- trunk/Setup/Readme.htm trunk/VersionGenerator.exe.config Modified: trunk/Setup/Readme.htm =================================================================== --- trunk/Setup/Readme.htm 2011-10-13 04:43:38 UTC (rev 1475) +++ trunk/Setup/Readme.htm 2011-10-15 17:45:11 UTC (rev 1476) @@ -3,7 +3,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"/> -<title>NORMA June 2011 CTP Readme</title> +<title>NORMA October 2011 CTP Readme</title> <style type="text/css"> .new {font-size:x-small; background-color:Gold; color:Blue; } li {padding-bottom: 3px;} @@ -12,8 +12,9 @@ <body> -<p><b><a id="The Top" style="font-family:Verdana;font-size:medium">NORMA June 2011 CTP Readme</a> </b></p> +<p><b><a id="The Top" style="font-family:Verdana;font-size:medium">NORMA October 2011 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 October 2011 release is a bug fix release. Refer to June 2011 for newer features.<br/><br/> The June 2011 release includes new display features (display objectified fact types as object types, display link fact types), additional ring types with an improved editor for choosing ring types, visible zoom commands, and a number of bug fixes. See detailed change notes below for specifics. <br/><br/></p> <h2>Contents</h2> @@ -43,8 +44,27 @@ </ul>--> <hr/> +<h2>October 2011 CTP Changes</h2> +<div>The October 2011 CTP release includes all modifications through changeset 1476. 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>Features: +<ol> +<li>A mouse hover on the glyphs in the ring type editor shows a standard verbalization describing that ring type.</li> +</ol> +</li> +<li>Bug Fixes: +<ol> +<li>Objectified fact type shapes displayed as object types did not reconnect role players when a file was reloaded.</li> +<li>Fixed some ring type combination implications in the ring type editor.</li> +<li>Zoom and Extension Manager commands were not available with multiple items selected.</li> +<li>(VS2010) Changing generation settings for a specific file format wrote multiple conflicting lines to the project file. Only the original setting was recognized by the generator.</li> +</ol> +</li> +</ul> + +<hr/> <h2>June 2011 CTP Changes</h2> -<div>The June 2011 CTP release includes all modifications through changeset 1473. 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 June 2011 CTP release includes all modifications through changeset 1473.</div> <ul> <li><a href="#DisplayAsObjectType 2011-06">Display Objectified Fact Type as Object Type</a> </li> <li><a href="#LinkFactTypeDisplay 2011-06">Link Fact Type Display</a> </li> Modified: trunk/VersionGenerator.exe.config =================================================================== --- trunk/VersionGenerator.exe.config 2011-10-13 04:43:38 UTC (rev 1475) +++ trunk/VersionGenerator.exe.config 2011-10-15 17:45:11 UTC (rev 1476) @@ -2,7 +2,7 @@ <configuration> <appSettings> <add key="RevisionStartYearMonth" value="2006-01"/> - <add key="ReleaseYearMonth" value="2011-06"/> + <add key="ReleaseYearMonth" value="2011-10"/> <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...> - 2011-11-30 07:06:53
|
Revision: 1479 http://orm.svn.sourceforge.net/orm/?rev=1479&view=rev Author: mcurland Date: 2011-11-30 07:06:47 +0000 (Wed, 30 Nov 2011) Log Message: ----------- * Do not treat value types used only be derived fact types as independent: stops table creation for value types used in fully derived fact types. * Do not display length field for Picture and OleObject data types on relational columns * Make the column data type read-only for unary fact types, changing this value invalidates the unary fact type pattern. Modified Paths: -------------- trunk/AlternateViews/RelationalView/ShapeModel/ColumnElementListCompartment.cs trunk/ORMModel/ObjectModel/ObjectType.cs trunk/RelationalModel/DcilModel/Design/ColumnTypeDescriptor.cs Modified: trunk/AlternateViews/RelationalView/ShapeModel/ColumnElementListCompartment.cs =================================================================== --- trunk/AlternateViews/RelationalView/ShapeModel/ColumnElementListCompartment.cs 2011-11-30 02:50:15 UTC (rev 1478) +++ trunk/AlternateViews/RelationalView/ShapeModel/ColumnElementListCompartment.cs 2011-11-30 07:06:47 UTC (rev 1479) @@ -283,7 +283,7 @@ } else if (dataType is RawDataDataType) { - return ((dataType is FixedLengthRawDataDataType) ? "BINARY" : ((dataType is LargeLengthRawDataDataType) ? "BLOB" : "VARBINARY")) + (precision > 0 ? "(" + precision.ToString() + ")" : null); + return ((dataType is FixedLengthRawDataDataType) ? "BINARY" : ((dataType is LargeLengthRawDataDataType) ? "BLOB" : "VARBINARY")) + ((precision > 0 && dataType.LengthName != null) ? "(" + precision.ToString() + ")" : null); } else if (dataType is TemporalDataType) { Modified: trunk/ORMModel/ObjectModel/ObjectType.cs =================================================================== --- trunk/ORMModel/ObjectModel/ObjectType.cs 2011-11-30 02:50:15 UTC (rev 1478) +++ trunk/ORMModel/ObjectModel/ObjectType.cs 2011-11-30 07:06:47 UTC (rev 1479) @@ -2610,7 +2610,9 @@ { get { - return IsIndependent || (ImpliedMandatoryConstraint == null && AllowIsIndependent(false)); + bool seenDerived; + bool seenNonDerived; + return IsIndependent || (ImpliedMandatoryConstraint == null && (AllowIsIndependent(false, out seenDerived, out seenNonDerived) && (seenNonDerived || (seenDerived && !IsValueType)))); } } /// <summary> @@ -2628,7 +2630,26 @@ /// <returns><see langword="true"/> if <see cref="IsIndependent"/> can be turned on.</returns> private bool AllowIsIndependent(bool throwIfFalse) { + bool dummy1; + bool dummy2; + return AllowIsIndependent(throwIfFalse, out dummy1, out dummy2); + } + /// <summary> + /// Test if the <see cref="IsIndependent"/> property can be set to true. + /// </summary> + /// <param name="throwIfFalse">Set to <see langword="true"/> to throw an exception instead of returning false.</param> + /// <param name="playsDerivedRole"> Set to <see langword="true"/> if the object type plays a role in a fully derived fact type. Accurate if function returns true.</param> + /// <param name="playsNonDerivedRole"> Set to <see langword="true"/> if the object type plays a role in a non-fully derived fact type. Accurate if function returns true.</param> + /// <returns><see langword="true"/> if <see cref="IsIndependent"/> can be turned on.</returns> + private bool AllowIsIndependent(bool throwIfFalse, out bool playsDerivedRole, out bool playsNonDerivedRole) + { bool retVal = true; + playsDerivedRole = false; + playsNonDerivedRole = false; + if (IsImplicitBooleanValue) + { + return false; + } LinkedElementCollection<Role> preferredIdentifierRoles = null; LinkedElementCollection<Role> playedRoles = PlayedRoleCollection; int playedRoleCount = playedRoles.Count; @@ -2648,8 +2669,10 @@ // roles on this object type can imply a mandatory on one // or more of the non-existential roles. This would be an // unusual way to model the mandatory constraint, however. + playsDerivedRole = true; continue; } + playsNonDerivedRole = true; LinkedElementCollection<ConstraintRoleSequence> constraints = playedRole.ConstraintRoleSequenceCollection; int constraintCount = constraints.Count; for (int j = 0; j < constraintCount; ++j) Modified: trunk/RelationalModel/DcilModel/Design/ColumnTypeDescriptor.cs =================================================================== --- trunk/RelationalModel/DcilModel/Design/ColumnTypeDescriptor.cs 2011-11-30 02:50:15 UTC (rev 1478) +++ trunk/RelationalModel/DcilModel/Design/ColumnTypeDescriptor.cs 2011-11-30 07:06:47 UTC (rev 1479) @@ -58,6 +58,22 @@ return base.CreatePropertyDescriptor(requestor, domainPropertyInfo, attributes); } /// <summary> + /// Disallow changing data types for columns based on unary predicates. These must remain boolean. + /// </summary> + protected override bool IsPropertyDescriptorReadOnly(ElementPropertyDescriptor propertyDescriptor) + { + Column column; + ObjectType valueType; + if (propertyDescriptor.DomainPropertyInfo.Id == Column.DataTypeDomainPropertyId && + null != (column = propertyDescriptor.ModelElement as Column) && + null != (valueType = column.AssociatedValueType) && + valueType.IsImplicitBooleanValue) + { + return true; + } + return base.IsPropertyDescriptorReadOnly(propertyDescriptor); + } + /// <summary> /// An element property descriptor that merges DataType facet properties only if the /// DataTypes of the multi-selected elements match. /// </summary> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2012-01-23 19:35:14
|
Revision: 1482 http://orm.svn.sourceforge.net/orm/?rev=1482&view=rev Author: mcurland Date: 2012-01-23 19:35:08 +0000 (Mon, 23 Jan 2012) Log Message: ----------- Objectifying unary and non-spanning binary fact types created phantom fact types shapes on unrelated diagrams * Remove most cases of fixing up parent shapes during link shape fixup (the parent shapes should be there already). This eliminates the unnecessary 'ShouldAddShapeForElement' requests that were allowing the phantom shape creation. * Add missing extender hooks to ShouldAddShapeForElement overrides Modified Paths: -------------- trunk/ORMModel/ShapeModel/FactTypeShape.cs trunk/ORMModel/ShapeModel/ObjectTypeShape.cs trunk/ORMModel/ShapeModel/ViewFixupRules.cs trunk/Setup/Readme.htm Modified: trunk/ORMModel/ShapeModel/FactTypeShape.cs =================================================================== --- trunk/ORMModel/ShapeModel/FactTypeShape.cs 2012-01-17 04:23:16 UTC (rev 1481) +++ trunk/ORMModel/ShapeModel/FactTypeShape.cs 2012-01-23 19:35:08 UTC (rev 1482) @@ -4056,18 +4056,14 @@ // Support ValueType objectification return valueTypeValueConstraint.ValueType == objectType; } + else if (element is ObjectType || element is ReadingOrder) + { + return false; + } } - return false; } - if (null != (objectType = element as ObjectType)) + if (null != (readingOrder = element as ReadingOrder)) { - if (objectType.NestedFactType != AssociatedFactType) - { - return false; - } - } - else if (null != (readingOrder = element as ReadingOrder)) - { if (readingOrder.FactType != AssociatedFactType) { return false; @@ -4080,6 +4076,7 @@ return false; } } + return true; } else if (null != (role = element as Role)) { @@ -4093,14 +4090,26 @@ } return !string.IsNullOrEmpty(role.Name) && (role != AssociatedFactType.ImplicitBooleanRole); } + else if (null != (objectType = element as ObjectType)) + { + return objectType.NestedFactType == AssociatedFactType; + } else if (null != (roleValueConstraint = element as RoleValueConstraint)) { - if (roleValueConstraint.Role.FactType != AssociatedFactType) + return roleValueConstraint.Role.FactType == AssociatedFactType; + } + IShapeExtender<FactTypeShape>[] extenders = ((IFrameworkServices)Store).GetTypedDomainModelProviders<IShapeExtender<FactTypeShape>>(); + if (extenders != null) + { + for (int i = 0; i < extenders.Length; ++i) { - return false; + if (extenders[i].ShouldAddShapeForElement(this, element)) + { + return true; + } } } - return true; + return base.ShouldAddShapeForElement(element); } /// <summary> /// Makes an ObjectifiedFactTypeNameShape, ReadingShape, RoleNameShape, or ValueConstraintShape a @@ -6918,6 +6927,17 @@ return valueTypeValueConstraint.ValueType == objectType; } } + IShapeExtender<ObjectifiedFactTypeNameShape>[] extenders = ((IFrameworkServices)Store).GetTypedDomainModelProviders<IShapeExtender<ObjectifiedFactTypeNameShape>>(); + if (extenders != null) + { + for (int i = 0; i < extenders.Length; ++i) + { + if (extenders[i].ShouldAddShapeForElement(this, element)) + { + return true; + } + } + } return base.ShouldAddShapeForElement(element); } /// <summary> Modified: trunk/ORMModel/ShapeModel/ObjectTypeShape.cs =================================================================== --- trunk/ORMModel/ShapeModel/ObjectTypeShape.cs 2012-01-17 04:23:16 UTC (rev 1481) +++ trunk/ORMModel/ShapeModel/ObjectTypeShape.cs 2012-01-23 19:35:08 UTC (rev 1482) @@ -388,6 +388,17 @@ refModeFactType == roleValueConstraint.Role.FactType; } } + IShapeExtender<ObjectTypeShape>[] extenders = ((IFrameworkServices)Store).GetTypedDomainModelProviders<IShapeExtender<ObjectTypeShape>>(); + if (extenders != null) + { + for (int i = 0; i < extenders.Length; ++i) + { + if (extenders[i].ShouldAddShapeForElement(this, element)) + { + return true; + } + } + } return base.ShouldAddShapeForElement(element); } /// <summary> Modified: trunk/ORMModel/ShapeModel/ViewFixupRules.cs =================================================================== --- trunk/ORMModel/ShapeModel/ViewFixupRules.cs 2012-01-17 04:23:16 UTC (rev 1481) +++ trunk/ORMModel/ShapeModel/ViewFixupRules.cs 2012-01-23 19:35:08 UTC (rev 1482) @@ -3,6 +3,7 @@ * Natural Object-Role Modeling Architect for Visual Studio * * * * Copyright \xA9 Neumont University. All rights reserved. * +* 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 * @@ -671,25 +672,6 @@ { proxy = role.Proxy; associatedProxyFactType = (proxy != null) ? proxy.FactType : null; - FactType nestedFactType; - if (FactTypeShape.ShouldDrawObjectification(nestedFactType = rolePlayer.NestedFactType)) - { - if (AllowElementFixup(nestedFactType)) - { - Diagram.FixUpDiagram(model, nestedFactType); - } - Diagram.FixUpDiagram(nestedFactType, rolePlayer); - } - else if (AllowElementFixup(rolePlayer)) - { - Diagram.FixUpDiagram(model, rolePlayer); - } - if (AllowElementFixup(associatedFactType)) - { - Diagram.FixUpDiagram(model, associatedFactType); - } - // Do no fix up the link fact type (associatedProxyFactType). We never - // want to force link fact type element creation. object AllowMultipleShapes; Dictionary<object, object> topLevelContextInfo; @@ -812,10 +794,6 @@ ORMModel model = factType.Model; if (model != null) { - if (AllowElementFixup(factType)) - { - Diagram.FixUpDiagram(model, factType); - } Diagram.FixUpDiagram(factType, roleValueConstraint); object AllowMultipleShapes; @@ -902,10 +880,6 @@ if (null != (objectType = valueConstraint.ValueType) && null != (model = objectType.Model)) { - if (AllowElementFixup(objectType)) - { - Diagram.FixUpDiagram(model, objectType); - } Diagram.FixUpDiagram(objectType, valueConstraint); } } @@ -927,19 +901,6 @@ null != (objectType = uniquenessConstraint.PreferredIdentifierFor) && null != (model = objectType.Model)) { - FactType nestedFactType; - if (null != (nestedFactType = objectType.NestedFactType)) - { - if (AllowElementFixup(nestedFactType)) - { - Diagram.FixUpDiagram(model, nestedFactType); - } - Diagram.FixUpDiagram(nestedFactType, roleValueConstraint); // Handle fact type displayed as object type - } - else if (AllowElementFixup(objectType)) - { - Diagram.FixUpDiagram(model, objectType); - } Diagram.FixUpDiagram(objectType, roleValueConstraint); object AllowMultipleShapes; @@ -1109,11 +1070,6 @@ !((factType = link.FactType) is SubtypeFact) && null != (model = factType.Model)) { - if (AllowElementFixup(factType)) - { - Diagram.FixUpDiagram(model, factType); // Make sure the fact type is already there - } - object AllowMultipleShapes; Dictionary<object, object> topLevelContextInfo; bool containedAllowMultipleShapes; Modified: trunk/Setup/Readme.htm =================================================================== --- trunk/Setup/Readme.htm 2012-01-17 04:23:16 UTC (rev 1481) +++ trunk/Setup/Readme.htm 2012-01-23 19:35:08 UTC (rev 1482) @@ -44,7 +44,7 @@ <hr/> <h2>January 2012 CTP Changes</h2> -<div>The January 2012 CTP release includes all modifications through changeset 1481. 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 2012 CTP release includes all modifications through changeset 1482. 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="#SchemaCustomization 2012-01">Custom relational names and column ordering</a> </li> <li><a href="#VerbalizedObjectTypeNameDisplay 2012-01">Verbalized object type name options</a> </li> @@ -63,6 +63,7 @@ <li>The Length property was available with a column selection for the Picture and OleObject data types, which do not support this facet.</li> <li>The data type for a column associated with a unary fact type is now read-only to avoid unwanted side-effects caused by modifying this data type.</li> <li>Fix issues with excessive model churn and extra shapes appearing when a reference mode format string is modified.</li> +<li>Fix issue where objectifying a unary or binary fact type without a spanning uniqueness constraint would extra shapes on all diagrams without the fact type.</li> </ol> </li> </ul> @@ -747,7 +748,7 @@ <hr/> <h3><a id="Version Numbers">Version Numbers</a></h3> <p>The NORMA version numbering scheme was changed in January 2011 to make better use of the available build numbers. A build number (for example, 1.0.1106.6281) has four parts separated by periods (.): Major (1), Minor (0), Revision (1106), and Build (6281). The major and minor numbers are self-explanatory. The third <em>revision</em> number is the last two digits of the year combined with the month number (1106=June 2011). The revision number is explicitly configured in the source code and generally changed once per official release. The final number is a build number that encodes the day the file was built.</p> -<p>Originally, the first two digits of the build number were a month counter beginning at 01 in January 2006, with the last two digits representing the day in the month. So, build 6031 was created on day 31 of month 60 (December 31, 2010). Starting with January 2011 (month 61), the first two digits will only be incremented on a <strong>quarterly</strong> basis, effectively tripling the available remaining revision 4-digit revision numbers. Of course, the day numbers for the three months in a quarter cannot all begin with '1', so we partition as follows:</p> +<p>Originally, the first two digits of the build number were a month counter beginning at 01 in January 2006, with the last two digits representing the day in the month. So, build 6031 was created on day 31 of month 60 (December 31, 2010). Starting with January 2011 (month 61), the first two digits will only be incremented on a <strong>quarterly</strong> basis, effectively tripling the available remaining 4-digit revision numbers. Of course, the day numbers for the three months in a quarter cannot all begin with '1', so we partition as follows:</p> <ul> <li>The first month in each quarter (January, April, July, October) gets the range 1-31 (subtract 0 to get the day).</li> <li>The second month in each quarter (February, May, August, November) gets the range 34-64 (subtract 33 to get the day).</li> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2012-04-25 04:01:34
|
Revision: 1487 http://orm.svn.sourceforge.net/orm/?rev=1487&view=rev Author: mcurland Date: 2012-04-25 04:01:27 +0000 (Wed, 25 Apr 2012) Log Message: ----------- * Modified automatic join path generation to check for shared-opposite-role-player cases for set comparison constraint sequences with 3 or more roles. * Check for and blocked invalid backtracking down previously pathed roles in linear automatic join path detection. Modified Paths: -------------- trunk/ORMModel/ObjectModel/Constraint.cs trunk/Setup/Readme.htm Modified: trunk/ORMModel/ObjectModel/Constraint.cs =================================================================== --- trunk/ORMModel/ObjectModel/Constraint.cs 2012-04-16 19:05:07 UTC (rev 1486) +++ trunk/ORMModel/ObjectModel/Constraint.cs 2012-04-25 04:01:27 UTC (rev 1487) @@ -4690,7 +4690,7 @@ /// </summary> private void ValidateJoinPath(INotifyElementAdded notifyAdded, bool verifyError, bool verifyAutomaticPath) { - bool checkBinaryOppositeRolePlayerPattern = false; + int checkBinaryOppositeRolePlayerPatternMinArity = int.MaxValue; bool joinNotNeeded = false; bool allowStepOverRolePlayer = true; IConstraint constraint = Constraint; @@ -4718,9 +4718,14 @@ break; case ConstraintType.Frequency: case ConstraintType.ExternalUniqueness: - checkBinaryOppositeRolePlayerPattern = true; + checkBinaryOppositeRolePlayerPatternMinArity = 1; allowStepOverRolePlayer = false; break; + case ConstraintType.Equality: + case ConstraintType.Exclusion: + case ConstraintType.Subset: + checkBinaryOppositeRolePlayerPatternMinArity = 3; + break; } } ConstraintRoleSequenceJoinPath joinPath = JoinPath; @@ -4742,6 +4747,7 @@ bool usesOppositeObjectification = false; #endif // BLOCK_TRIVIAL_JOINPATHS BitTracker usedObjectifyingRole = new BitTracker(constraintRoleCount); + bool checkBinaryOppositeRolePlayerPattern = constraintRoleCount >= checkBinaryOppositeRolePlayerPatternMinArity; for (int i = 1; i < constraintRoleCount; ++i) { Role currentRole = constraintRoles[i].Role; @@ -5047,6 +5053,7 @@ int constraintRoleCount = constraintRoles.Count; ConstraintRoleSequenceHasRole constraintRole = constraintRoles[0]; Role previousRole = constraintRole.Role; + Role otherRole; if (previousRole.RolePlayer == null) { if (existingJoinPath != null) @@ -5056,12 +5063,14 @@ return null; } List<AutomaticJoinPathData> pathData = new List<AutomaticJoinPathData>(3 * constraintRoleCount); // Plenty of space + Dictionary<Role, object> usedRoles = new Dictionary<Role, object>(); FactType previousFactType = previousRole.FactType; ObjectType previousFactTypeObjectifiedBy = previousFactType.NestingType; LinkedElementCollection<RoleBase> previousFactTypeRoles = null; int previousFactTypeRoleCount = 0; int? previousFactTypeUnaryRoleIndex = null; pathData.Add(new AutomaticJoinPathData(constraintRole, previousRole, PathedRolePurpose.PostInnerJoin)); + usedRoles[previousRole] = null; int lastFactTypeEntryIndex = 0; bool incompleteOrAmbiguousPath = false; BitTracker processedConstraintRoles = new BitTracker(constraintRoleCount); @@ -5082,6 +5091,7 @@ break; } pathData.Add(new AutomaticJoinPathData(constraintRole, currentRole, PathedRolePurpose.SameFactType)); + usedRoles[currentRole] = null; previousRole = currentRole; } else @@ -5136,13 +5146,16 @@ // context represents a use in the link fact type, not the objectified fact type, // so it needs to be repeated with a join. pathData.Add(new AutomaticJoinPathData(null, previousRole, PathedRolePurpose.PostInnerJoin)); + usedRoles[previousRole] = null; // Note that we do not need to deal with unary objectification here because // a unary fact type cannot have more than one constrained role. - pathData.Add(new AutomaticJoinPathData(null, previousRole.OppositeRoleAlwaysResolveProxy.Role, PathedRolePurpose.SameFactType)); + pathData.Add(new AutomaticJoinPathData(null, otherRole = previousRole.OppositeRoleAlwaysResolveProxy.Role, PathedRolePurpose.SameFactType)); + usedRoles[otherRole] = null; } // Shared role player from a SameFactTypeRole to a target. Note that a projection from a // PostInnerJoin will back up later to project from the start or entry role this is joined to. pathData.Add(new AutomaticJoinPathData(constraintRole, currentRole, PathedRolePurpose.PostInnerJoin)); + usedRoles[currentRole] = null; previousFactType = currentFactType; previousFactTypeObjectifiedBy = currentFactTypeObjectifiedBy; previousFactTypeRoles = null; // Also invalidates unary and count locals @@ -5234,12 +5247,15 @@ if (currentFactTypeUnaryRoleIndex.HasValue) { Role objectifiedUnaryRole = currentRole.ObjectifiedUnaryRole; - pathData.Add(new AutomaticJoinPathData(null, objectifiedUnaryRole.OppositeRole.Role, PathedRolePurpose.PostInnerJoin)); + pathData.Add(new AutomaticJoinPathData(null, otherRole = objectifiedUnaryRole.OppositeRole.Role, PathedRolePurpose.PostInnerJoin)); pathData.Add(new AutomaticJoinPathData(constraintRole, objectifiedUnaryRole, PathedRolePurpose.SameFactType)); + usedRoles[otherRole] = null; + usedRoles[objectifiedUnaryRole] = null; } else { - pathData.Add(new AutomaticJoinPathData(null, currentRole.OppositeRoleAlwaysResolveProxy.Role, PathedRolePurpose.PostInnerJoin)); + pathData.Add(new AutomaticJoinPathData(null, otherRole = currentRole.OppositeRoleAlwaysResolveProxy.Role, PathedRolePurpose.PostInnerJoin)); + usedRoles[otherRole] = null; if (constrainedRoleCountInCurrentFactType > 1) { // Step across the link fact type then join into the objectified fact type @@ -5251,11 +5267,13 @@ // Project directly on the link fact type pathData.Add(new AutomaticJoinPathData(constraintRole, currentRole, PathedRolePurpose.SameFactType)); } + usedRoles[currentRole] = null; } } else if (matchedRole == currentRole) // Unary case { pathData.Add(new AutomaticJoinPathData(constraintRole, currentRole, PathedRolePurpose.PostInnerJoin)); + usedRoles[currentRole] = null; } else { @@ -5264,8 +5282,10 @@ if (currentFactTypeUnaryRoleIndex.HasValue) { Role objectifiedUnaryRole = currentRole.ObjectifiedUnaryRole; - pathData.Add(new AutomaticJoinPathData(null, objectifiedUnaryRole.OppositeRole.Role, PathedRolePurpose.PostInnerJoin)); + pathData.Add(new AutomaticJoinPathData(null, otherRole = objectifiedUnaryRole.OppositeRole.Role, PathedRolePurpose.PostInnerJoin)); pathData.Add(new AutomaticJoinPathData(constraintRole, objectifiedUnaryRole, PathedRolePurpose.SameFactType)); + usedRoles[otherRole] = null; + usedRoles[objectifiedUnaryRole] = null; } else { @@ -5276,21 +5296,27 @@ // If only one role was used in the objectified fact type, then not adding an additional // join step switches the path to use the link fact type. pathData.Add(new AutomaticJoinPathData(null, previousRole, PathedRolePurpose.PostInnerJoin)); + usedRoles[previousRole] = null; } // Prepare to step into the next fact type and distinguish a step // in the link fact type from the objectified fact type by stepping // over the objectified role. - pathData.Add(new AutomaticJoinPathData(null, previousRole.OppositeRoleAlwaysResolveProxy.Role, PathedRolePurpose.SameFactType)); + pathData.Add(new AutomaticJoinPathData(null, otherRole = previousRole.OppositeRoleAlwaysResolveProxy.Role, PathedRolePurpose.SameFactType)); // Join with the current fact type pathData.Add(new AutomaticJoinPathData(null, matchedRole, PathedRolePurpose.PostInnerJoin)); // Project on the current role pathData.Add(new AutomaticJoinPathData(constraintRole, currentRole, PathedRolePurpose.SameFactType)); + usedRoles[otherRole] = null; + usedRoles[matchedRole] = null; + usedRoles[currentRole] = null; } } else { pathData.Add(new AutomaticJoinPathData(null, matchedRole, PathedRolePurpose.PostInnerJoin)); pathData.Add(new AutomaticJoinPathData(constraintRole, currentRole, PathedRolePurpose.SameFactType)); + usedRoles[matchedRole] = null; + usedRoles[currentRole] = null; } } previousFactType = currentFactType; @@ -5444,6 +5470,11 @@ incompleteOrAmbiguousPath = true; break; } + else if (usedRoles.ContainsKey(testLeftRole)) + { + // Don't allow backtracking in automatic join paths. + continue; + } if (currentFactTypeObjectifiedBy == testLeftRolePlayer) { if (matchedLeftRole == null && matchedRightRole == null) @@ -5562,7 +5593,7 @@ AutomaticJoinPathData unaryRoleData = pathData[replaceIndex]; unaryRoleData.Role = objectifiedUnaryRole; pathData[replaceIndex] = unaryRoleData; - pathData.Add(new AutomaticJoinPathData(null, objectifiedUnaryRole.OppositeRole.Role, PathedRolePurpose.SameFactType)); + pathData.Add(new AutomaticJoinPathData(null, otherRole = objectifiedUnaryRole.OppositeRole.Role, PathedRolePurpose.SameFactType)); } else { @@ -5571,18 +5602,22 @@ if (constrainedInPreviousFactTypeCount > 1) { pathData.Add(new AutomaticJoinPathData(null, previousRole, PathedRolePurpose.PostInnerJoin)); + usedRoles[previousRole] = null; } - pathData.Add(new AutomaticJoinPathData(null, previousRole.OppositeRoleAlwaysResolveProxy.Role, PathedRolePurpose.SameFactType)); + pathData.Add(new AutomaticJoinPathData(null, otherRole = previousRole.OppositeRoleAlwaysResolveProxy.Role, PathedRolePurpose.SameFactType)); } + usedRoles[otherRole] = null; } else if (!previousFactTypeUnaryRoleIndex.HasValue && matchedLeftRole != previousRole) { pathData.Add(new AutomaticJoinPathData(null, matchedLeftRole, PathedRolePurpose.SameFactType)); + usedRoles[matchedLeftRole] = null; } if (matchedRightRole == currentRole) { pathData.Add(new AutomaticJoinPathData(constraintRole, currentRole, PathedRolePurpose.PostInnerJoin)); + usedRoles[currentRole] = null; } else if (matchedRightRole != null) { @@ -5596,6 +5631,8 @@ pathData.Add(new AutomaticJoinPathData(null, matchedRightRole, PathedRolePurpose.PostInnerJoin)); } pathData.Add(new AutomaticJoinPathData(constraintRole, currentRole, PathedRolePurpose.SameFactType)); + usedRoles[matchedRightRole] = null; + usedRoles[currentRole] = null; } else { @@ -5609,13 +5646,16 @@ { // Objectified unary pattern Role objectifiedUnaryRole = currentRole.ObjectifiedUnaryRole; - pathData.Add(new AutomaticJoinPathData(null, objectifiedUnaryRole.OppositeRole.Role, PathedRolePurpose.PostInnerJoin)); + pathData.Add(new AutomaticJoinPathData(null, otherRole = objectifiedUnaryRole.OppositeRole.Role, PathedRolePurpose.PostInnerJoin)); pathData.Add(new AutomaticJoinPathData(constraintRole, objectifiedUnaryRole, PathedRolePurpose.SameFactType)); + usedRoles[otherRole] = null; + usedRoles[objectifiedUnaryRole] = null; } else { // Objectified binary or n-ary pattern - pathData.Add(new AutomaticJoinPathData(null, currentRole.OppositeRoleAlwaysResolveProxy.Role, PathedRolePurpose.PostInnerJoin)); + pathData.Add(new AutomaticJoinPathData(null, otherRole = currentRole.OppositeRoleAlwaysResolveProxy.Role, PathedRolePurpose.PostInnerJoin)); + usedRoles[otherRole] = null; if (constrainedRoleCountInCurrentFactType == 1) { pathData.Add(new AutomaticJoinPathData(constraintRole, currentRole, PathedRolePurpose.SameFactType)); @@ -5625,6 +5665,7 @@ pathData.Add(new AutomaticJoinPathData(null, currentRole, PathedRolePurpose.SameFactType)); pathData.Add(new AutomaticJoinPathData(constraintRole, currentRole, PathedRolePurpose.PostInnerJoin)); } + usedRoles[currentRole] = null; } } previousFactType = currentFactType; Modified: trunk/Setup/Readme.htm =================================================================== --- trunk/Setup/Readme.htm 2012-04-16 19:05:07 UTC (rev 1486) +++ trunk/Setup/Readme.htm 2012-04-25 04:01:27 UTC (rev 1487) @@ -45,7 +45,7 @@ <hr/> <h2>April 2012 CTP Changes</h2> -<div>The January 2012 CTP release includes all modifications through changeset 1486. 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 April 2012 CTP release includes all modifications through changeset 1487. 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="#VerbalizePossiblePopulationsOption 2012-04">Verbalize possible populations option</a> </li> <li>Other Features: @@ -59,6 +59,7 @@ <ol> <li>Reloading a model with an unconstrained unary fact type would display a two-role fact type with no uniqueness constraints.</li> <li>Reloading a model with a collapsed shape for an objectified fact type (FactTypeShape.DisplayAsObjectType = true) would incorrectly add role name shapes to the collapsed shape.</li> +<li>Invalid automatic join paths could be created for set comparison constraint role sequences with a shared opposite role player and more than 2 roles. Fixed the invalid path generation by blocking back tracking in an automatic path and enabled opposite-shared-role-player detection for these cases.</li> </ol> </li> </ul> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2012-10-04 01:17:01
|
Revision: 1492 http://orm.svn.sourceforge.net/orm/?rev=1492&view=rev Author: mcurland Date: 2012-10-04 01:16:54 +0000 (Thu, 04 Oct 2012) Log Message: ----------- Finished enabling project build on 64-bit platforms * Use HKCU\Software keys without Wow6432Node redirect * Redirect HKLM\Software keys to Wow6432Node only when running in 64-bit script, not when invoked by 32-bit project Build * Do not make preliminary calls to SetupEnvironment.bat before invoking build system, call only as needed * Register VS2010 extension as an installed add-in so it is not initially disabled Modified Paths: -------------- trunk/Build.bat trunk/BuildAll.bat trunk/BuildDevTools.bat trunk/BuildHelp.bat trunk/BuildTests.bat trunk/CodeSmith/DILSchemaProvider/Install.bat trunk/FirstTimeBuild.bat trunk/FirstTimeBuildAll.bat trunk/FirstTimeBuildAllVS2008.bat trunk/FirstTimeBuildVS2008.bat trunk/FirstTimeBuildVS2010.bat trunk/ORM2CommandLineTest/install.bat trunk/SetupEnvironment.bat trunk/TestSuites/RegressionTests/TestHost.bat trunk/TestSuites/RegressionTests/VSEnvironmentSnapshot.bat trunk/Tools/DisableRuleDirectiveProcessor/Install.bat trunk/Tools/NUBuildVS/Install.bat trunk/install.bat Modified: trunk/Build.bat =================================================================== --- trunk/Build.bat 2012-09-10 23:19:43 UTC (rev 1491) +++ trunk/Build.bat 2012-10-04 01:16:54 UTC (rev 1492) @@ -1,8 +1,12 @@ @ECHO OFF SETLOCAL -SET RootDir=%~dp0. -CALL "%RootDir%\SetupEnvironment.bat" %* +::Do not call SetupEnvironment.bat. For 64-bit systems, the environment +::variables differ depending on whether the installation batch files are +::launched directly from the command line or indirectly by the 32-bit +::build process. Therefore, any environment variables designed for registry +::use that include Wow6432Node will be correct here, but incorrect when they +::are used by the batch scripts invoked during build. -MSBuild.exe /nologo "%RootDir%\Main.proj" %* +MSBuild.exe /nologo "%~dp0Main.proj" %* GOTO:EOF Modified: trunk/BuildAll.bat =================================================================== --- trunk/BuildAll.bat 2012-09-10 23:19:43 UTC (rev 1491) +++ trunk/BuildAll.bat 2012-10-04 01:16:54 UTC (rev 1492) @@ -1,7 +1,6 @@ @ECHO OFF SETLOCAL SET RootDir=%~dp0. -CALL "%RootDir%\SetupEnvironment.bat" %* CALL "%RootDir%\BuildSetup.bat" %* CALL "%RootDir%\BuildTests.bat" %* Modified: trunk/BuildDevTools.bat =================================================================== --- trunk/BuildDevTools.bat 2012-09-10 23:19:43 UTC (rev 1491) +++ trunk/BuildDevTools.bat 2012-10-04 01:16:54 UTC (rev 1492) @@ -1,7 +1,6 @@ @ECHO OFF SETLOCAL SET RootDir=%~dp0. -CALL "%RootDir%\SetupEnvironment.bat" %* :: NUBuild and NUBuildVS need to be built separately, before any other projects, since all of the later projects depend on them. MSBuild.exe /nologo "%RootDir%\Tools\NUBuild\NUBuild.sln" %* Modified: trunk/BuildHelp.bat =================================================================== --- trunk/BuildHelp.bat 2012-09-10 23:19:43 UTC (rev 1491) +++ trunk/BuildHelp.bat 2012-10-04 01:16:54 UTC (rev 1492) @@ -1,9 +1,9 @@ -@ECHO OFF +@ECHO ON SETLOCAL SET RootDir=%~dp0. CALL "%RootDir%\SetupEnvironment.bat" %* -CALL "%TrunkDir%\SetFromRegistry.bat" "HSLiteInstallDir" "HKLM\SOFTWARE%WOWRegistryRoot%\Innovasys\HelpStudio2" "LiteInstallDir" "f" +CALL "%TrunkDir%\SetFromRegistry.bat" "HSLiteInstallDir" "HKLM\SOFTWARE%WOWRegistryAdjust%\Innovasys\HelpStudio2" "LiteInstallDir" "f" ECHO Building help project. This may take several minutes... PUSHD "%TrunkDir%\Documentation\Help Project" Modified: trunk/BuildTests.bat =================================================================== --- trunk/BuildTests.bat 2012-09-10 23:19:43 UTC (rev 1491) +++ trunk/BuildTests.bat 2012-10-04 01:16:54 UTC (rev 1492) @@ -1,7 +1,6 @@ @ECHO OFF SETLOCAL SET RootDir=%~dp0. -CALL "%RootDir%\SetupEnvironment.bat" %* MSBuild.exe /nologo "%RootDir%\Tests.proj" %* Modified: trunk/CodeSmith/DILSchemaProvider/Install.bat =================================================================== --- trunk/CodeSmith/DILSchemaProvider/Install.bat 2012-09-10 23:19:43 UTC (rev 1491) +++ trunk/CodeSmith/DILSchemaProvider/Install.bat 2012-10-04 01:16:54 UTC (rev 1492) @@ -6,7 +6,11 @@ IF "%ProgramFiles(X86)%"=="" ( SET WOWRegistryAdjust= ) ELSE ( - SET WOWRegistryAdjust=\Wow6432Node + IF DEFINED PROCESSOR_ARCHITEW6432 ( + SET WOWRegistryAdjust= + ) ELSE ( + SET WOWRegistryAdjust=\Wow6432Node + ) ) FOR /F "usebackq skip=2 tokens=2*" %%A IN (`REG QUERY "HKLM\SOFTWARE%WOWRegistryAdjust%\CodeSmith\v3.2" /v "ApplicationDirectory"`) DO SET CodeSmithDir=%%~fB Modified: trunk/FirstTimeBuild.bat =================================================================== --- trunk/FirstTimeBuild.bat 2012-09-10 23:19:43 UTC (rev 1491) +++ trunk/FirstTimeBuild.bat 2012-10-04 01:16:54 UTC (rev 1492) @@ -1,11 +1,11 @@ @ECHO OFF SETLOCAL SET RootDir=%~dp0. -CALL "%RootDir%\SetupEnvironment.bat" %* CALL "%RootDir%\BuildDevTools.bat" %* CALL "%RootDir%\Build.bat" %* +CALL "%RootDir%\SetupEnvironment.bat" %* ECHO. ECHO Running 'devenv.exe /RootSuffix "%VSRegistryRootSuffix%" /Setup'... This may take a few minutes... "%VSEnvironmentPath%" /RootSuffix "%VSRegistryRootSuffix%" /Setup Modified: trunk/FirstTimeBuildAll.bat =================================================================== --- trunk/FirstTimeBuildAll.bat 2012-09-10 23:19:43 UTC (rev 1491) +++ trunk/FirstTimeBuildAll.bat 2012-10-04 01:16:54 UTC (rev 1492) @@ -1,11 +1,11 @@ @ECHO OFF SETLOCAL SET RootDir=%~dp0. -CALL "%RootDir%\SetupEnvironment.bat" %* CALL "%RootDir%\BuildDevTools.bat" %* CALL "%RootDir%\BuildAll.bat" %* +CALL "%RootDir%\SetupEnvironment.bat" %* ECHO. ECHO Running 'devenv.exe /RootSuffix "%VSRegistryRootSuffix%" /Setup'... This may take a few minutes... "%VSEnvironmentPath%" /RootSuffix "%VSRegistryRootSuffix%" /Setup Modified: trunk/FirstTimeBuildAllVS2008.bat =================================================================== --- trunk/FirstTimeBuildAllVS2008.bat 2012-09-10 23:19:43 UTC (rev 1491) +++ trunk/FirstTimeBuildAllVS2008.bat 2012-10-04 01:16:54 UTC (rev 1492) @@ -2,28 +2,33 @@ SETLOCAL SET RootDir=%~dp0. +SETLOCAL IF "%ProgramFiles(X86)%"=="" ( SET WOWRegistryAdjust= ) ELSE ( - SET WOWRegistryAdjust=\Wow6432Node + IF DEFINED PROCESSOR_ARCHITEW6432 ( + SET WOWRegistryAdjust= + ) ELSE ( + SET WOWRegistryAdjust=\Wow6432Node + ) ) +REG QUERY "HKLM\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\9.0Exp" /v ApplicationID 1>NUL 2>&1 +IF ERRORLEVEL 1 (CALL:_SetupExpHive) +REG QUERY "HKLM\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\9.0Exp" /v ApplicationID 1>NUL 2>&1 +IF ERRORLEVEL 1 (ECHO Could not find experimental registry hive for Visual Studio 2008. Aborting... && GOTO:EOF) +ENDLOCAL + IF "%TargetVisualStudioVersion%"=="v8.0" ( SET DegradeToolsVersion=/toolsversion:2.0 ) ELSE ( SET TargetVisualStudioVersion=v9.0 ) -REG QUERY "HKLM\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\9.0Exp" /v ApplicationID 1>NUL 2>&1 -IF ERRORLEVEL 1 (CALL:_SetupExpHive) -REG QUERY "HKLM\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\9.0Exp" /v ApplicationID 1>NUL 2>&1 -IF ERRORLEVEL 1 (ECHO Could not find experimental registry hive for Visual Studio 2008. Aborting... && GOTO:EOF) - -CALL "%RootDir%\SetupEnvironment.bat" %* - CALL "%RootDir%\BuildDevTools.bat" %* /consoleloggerparameters:DisableMPLogging %DegradeToolsVersion% CALL "%RootDir%\BuildAll.bat" %* /consoleloggerparameters:DisableMPLogging %DegradeToolsVersion% +CALL "%RootDir%\SetupEnvironment.bat" %* ECHO. ECHO Running 'devenv.exe /RootSuffix "%VSRegistryRootSuffix%" /Setup'... This may take a few minutes... "%VSEnvironmentPath%" /RootSuffix "%VSRegistryRootSuffix%" /Setup @@ -35,14 +40,14 @@ IF "%VSIPDir%"=="" (ECHO Please install the Microsoft Visual Studio 2008 SDK. See README.txt. && PAUSE && EXIT) ECHO Setting up machine-level experimental registry hive for Visual Studio 2008... This may take a few minutes... "%VSIPDir%\VisualStudioIntegration\Tools\Bin\VSRegEx.exe" GetOrig 9.0 Exp -REG QUERY "HKCU\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\9.0Exp\Configuration" /v ApplicationID 1>NUL 2>&1 +REG QUERY "HKCU\Software\Microsoft\VisualStudio\9.0Exp\Configuration" /v ApplicationID 1>NUL 2>&1 IF NOT ERRORLEVEL 1 (CALL:_BackupUserConfiguration) GOTO:EOF :_BackupUserConfiguration ECHO Backing up user-level experimental registry hive for Visual Studio 2008... This may take a minute... REG DELETE "HCKU\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\9.0Exp\Configuration_Backup" /f 1>NUL 2>&1 -REG ADD "HKCU\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\9.0Exp\Configuration_Backup" 1>NUL 2>&1 -REG COPY "HKCU\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\9.0Exp\Configuration" "HKCU\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\9.0Exp\Configuration_Backup" /s /f -REG DELETE "HKCU\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\9.0Exp\Configuration" /f 1>NUL 2>&1 +REG ADD "HKCU\Software\Microsoft\VisualStudio\9.0Exp\Configuration_Backup" 1>NUL 2>&1 +REG COPY "HKCU\Software\Microsoft\VisualStudio\9.0Exp\Configuration" "HKCU\Software\Microsoft\VisualStudio\9.0Exp\Configuration_Backup" /s /f +REG DELETE "HKCU\Software\Microsoft\VisualStudio\9.0Exp\Configuration" /f 1>NUL 2>&1 GOTO:EOF Modified: trunk/FirstTimeBuildVS2008.bat =================================================================== --- trunk/FirstTimeBuildVS2008.bat 2012-09-10 23:19:43 UTC (rev 1491) +++ trunk/FirstTimeBuildVS2008.bat 2012-10-04 01:16:54 UTC (rev 1492) @@ -2,12 +2,23 @@ SETLOCAL SET RootDir=%~dp0. +SETLOCAL IF "%ProgramFiles(X86)%"=="" ( SET WOWRegistryAdjust= ) ELSE ( - SET WOWRegistryAdjust=\Wow6432Node + IF DEFINED PROCESSOR_ARCHITEW6432 ( + SET WOWRegistryAdjust= + ) ELSE ( + SET WOWRegistryAdjust=\Wow6432Node + ) ) +REG QUERY "HKLM\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\9.0Exp" /v ApplicationID 1>NUL 2>&1 +IF ERRORLEVEL 1 (CALL:_SetupExpHive) +REG QUERY "HKLM\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\9.0Exp" /v ApplicationID 1>NUL 2>&1 +IF ERRORLEVEL 1 (ECHO Could not find experimental registry hive for Visual Studio 2008. Aborting... && GOTO:EOF) +ENDLOCAL + IF "%TargetVisualStudioVersion%"=="v8.0" ( SET DegradeToolsVersion=/toolsversion:2.0 ) ELSE ( @@ -15,16 +26,10 @@ SET DegradeToolsVersion=/toolsversion:3.5 ) -REG QUERY "HKLM\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\9.0Exp" /v ApplicationID 1>NUL 2>&1 -IF ERRORLEVEL 1 (CALL:_SetupExpHive) -REG QUERY "HKLM\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\9.0Exp" /v ApplicationID 1>NUL 2>&1 -IF ERRORLEVEL 1 (ECHO Could not find experimental registry hive for Visual Studio 2008. Aborting... && GOTO:EOF) - -CALL "%RootDir%\SetupEnvironment.bat" %* - CALL "%RootDir%\BuildDevTools.bat" %* /consoleloggerparameters:DisableMPLogging %DegradeToolsVersion% CALL "%RootDir%\Build.bat" %* /consoleloggerparameters:DisableMPLogging %DegradeToolsVersion% +CALL "%RootDir%\SetupEnvironment.bat" %* ECHO. ECHO Running 'devenv.exe /RootSuffix "%VSRegistryRootSuffix%" /Setup'... This may take a few minutes... "%VSEnvironmentPath%" /RootSuffix "%VSRegistryRootSuffix%" /Setup @@ -36,14 +41,14 @@ IF "%VSIPDir%"=="" (ECHO Please install the Microsoft Visual Studio 2008 SDK. See README.txt. && PAUSE && EXIT) ECHO Setting up machine-level experimental registry hive for Visual Studio 2008... This may take a few minutes... "%VSIPDir%\VisualStudioIntegration\Tools\Bin\VSRegEx.exe" GetOrig 9.0 Exp -REG QUERY "HKCU\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\9.0Exp\Configuration" /v ApplicationID 1>NUL 2>&1 +REG QUERY "HKCU\Software\Microsoft\VisualStudio\9.0Exp\Configuration" /v ApplicationID 1>NUL 2>&1 IF NOT ERRORLEVEL 1 (CALL:_BackupUserConfiguration) GOTO:EOF :_BackupUserConfiguration ECHO Backing up user-level experimental registry hive for Visual Studio 2008... This may take a minute... REG DELETE "HCKU\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\9.0Exp\Configuration_Backup" /f 1>NUL 2>&1 -REG ADD "HKCU\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\9.0Exp\Configuration_Backup" 1>NUL 2>&1 -REG COPY "HKCU\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\9.0Exp\Configuration" "HKCU\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\9.0Exp\Configuration_Backup" /s /f -REG DELETE "HKCU\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\9.0Exp\Configuration" /f 1>NUL 2>&1 +REG ADD "HKCU\Software\Microsoft\VisualStudio\9.0Exp\Configuration_Backup" 1>NUL 2>&1 +REG COPY "HKCU\Software\Microsoft\VisualStudio\9.0Exp\Configuration" "HKCU\Software\Microsoft\VisualStudio\9.0Exp\Configuration_Backup" /s /f +REG DELETE "HKCU\Software\Microsoft\VisualStudio\9.0Exp\Configuration" /f 1>NUL 2>&1 GOTO:EOF Modified: trunk/FirstTimeBuildVS2010.bat =================================================================== --- trunk/FirstTimeBuildVS2010.bat 2012-09-10 23:19:43 UTC (rev 1491) +++ trunk/FirstTimeBuildVS2010.bat 2012-10-04 01:16:54 UTC (rev 1492) @@ -1,7 +1,6 @@ @ECHO OFF SETLOCAL SET RootDir=%~dp0. -CALL "%RootDir%\SetupEnvironment.bat" %* IF "%TargetVisualStudioVersion%"=="v8.0" ( SET DegradeToolsVersion=/toolsversion:2.0 @@ -11,7 +10,7 @@ SET TargetVisualStudioVersion=v10.0 ) -CALL "%RootDir%\BuildDevTools.bat" %* -CALL "%RootDir%\Build.bat" %* +CALL "%RootDir%\BuildDevTools.bat" %* /consoleloggerparameters:DisableMPLogging %DegradeToolsVersion% +CALL "%RootDir%\Build.bat" %* /consoleloggerparameters:DisableMPLogging %DegradeToolsVersion% GOTO:EOF Modified: trunk/ORM2CommandLineTest/install.bat =================================================================== --- trunk/ORM2CommandLineTest/install.bat 2012-09-10 23:19:43 UTC (rev 1491) +++ trunk/ORM2CommandLineTest/install.bat 2012-10-04 01:16:54 UTC (rev 1492) @@ -83,5 +83,9 @@ :SET6432 ::Do this somewhere the resolved parens will not cause problems. SET ResolvedProgramFiles=%ProgramFiles(X86)% -SET WOWRegistryAdjust=\Wow6432Node +IF DEFINED PROCESSOR_ARCHITEW6432 ( + SET WOWRegistryAdjust= +) ELSE ( + SET WOWRegistryAdjust=\Wow6432Node +) GOTO:EOF Modified: trunk/SetupEnvironment.bat =================================================================== --- trunk/SetupEnvironment.bat 2012-09-10 23:19:43 UTC (rev 1491) +++ trunk/SetupEnvironment.bat 2012-10-04 01:16:54 UTC (rev 1492) @@ -41,7 +41,14 @@ IF NOT DEFINED VSRegistryRootBase (SET VSRegistryRootBase=SOFTWARE%WOWRegistryAdjust%\Microsoft\VisualStudio) IF NOT DEFINED VSRegistryRootVersion (SET VSRegistryRootVersion=%TargetVisualStudioMajorMinorVersion%) IF NOT DEFINED VSRegistryRoot (SET VSRegistryRoot=%VSRegistryRootBase%\%VSRegistryRootVersion%%VSRegistryRootSuffix%) -IF NOT DEFINED VSRegistryConfigRoot (SET VSRegistryConfigRoot=%VSRegistryRootBase%\%VSRegistryRootVersion%%VSRegistryRootSuffix%%VSRegistryConfigDecorator%) +IF NOT DEFINED VSRegistryConfigRootBase ( + IF "%VSRegistryConfigHive%"=="HKCU" ( + SET VSRegistryConfigRootBase=SOFTWARE\Microsoft\VisualStudio + ) ELSE ( + SET VSRegistryConfigRootBase=%VSRegistryRootBase% + ) +) +IF NOT DEFINED VSRegistryConfigRoot (SET VSRegistryConfigRoot=%VSRegistryConfigRootBase%\%VSRegistryRootVersion%%VSRegistryRootSuffix%%VSRegistryConfigDecorator%) CALL "%TrunkDir%\SetFromRegistry.bat" "VSEnvironmentPath" "%VSRegistryConfigHive%\%VSRegistryConfigRoot%\Setup\VS" "EnvironmentPath" "f" CALL "%TrunkDir%\SetFromRegistry.bat" "VSEnvironmentDir" "%VSRegistryConfigHive%\%VSRegistryConfigRoot%\Setup\VS" "EnvironmentDirectory" "f" @@ -50,9 +57,9 @@ IF NOT DEFINED LocalAppData SET LocalAppData=%UserProfile%\Local Settings\Application Data IF NOT "%VSIXExtensionDir%"=="" ( IF "%VSRegistryRootSuffix%"=="" ( - SET VSIXInstallDir=%VSEnvironmentDir%\%VSIXExtensionDir% + CALL:SETVAR "VSIXInstallDir" "%VSEnvironmentDir%\%VSIXExtensionDir%" ) ELSE ( - SET VSIXInstallDir=%LocalAppData%\Microsoft\VisualStudio\%VSRegistryRootVersion%%VSRegistryRootSuffix%\%VSIXExtensionDir% + CALL:SETVAR "VSIXInstallDir" "%LocalAppData%\Microsoft\VisualStudio\%VSRegistryRootVersion%%VSRegistryRootSuffix%\%VSIXExtensionDir%" ) ) ELSE ( SET VSIXInstallDir= @@ -126,7 +133,15 @@ ::Do this somewhere the resolved parens will not cause problems. SET ResolvedProgramFiles=%ProgramFiles(x86)% SET ResolvedCommonProgramFiles=%CommonProgramFiles(x86)% -SET WOWRegistryAdjust=\Wow6432Node +::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 :SETVAR Modified: trunk/TestSuites/RegressionTests/TestHost.bat =================================================================== --- trunk/TestSuites/RegressionTests/TestHost.bat 2012-09-10 23:19:43 UTC (rev 1491) +++ trunk/TestSuites/RegressionTests/TestHost.bat 2012-10-04 01:16:54 UTC (rev 1492) @@ -27,14 +27,18 @@ IF "%ProgramFiles(X86)%"=="" ( SET WOWRegistryAdjust= ) ELSE ( - SET WOWRegistryAdjust=\Wow6432Node + IF DEFINED PROCESSOR_ARCHITEW6432 ( + SET WOWRegistryAdjust= + ) ELSE ( + SET WOWRegistryAdjust=\Wow6432Node + ) ) REM Get the Visual Studio environment install location FOR /F "usebackq eol=! tokens=2*" %%A IN (`REG QUERY "HKLM\SOFTWARE%WOWRegistryAdjust%\Microsoft\VisualStudio\8.0%RootSuffix%" /v "InstallDir"`) DO call set LaunchDevenv=%%~dpsBdevenv REM Clear the current add-in file, it may not load -FOR /F "usebackq eol=! tokens=2*" %%A IN (`REG QUERY "HKCU\SOFTWARE%WOWRegistryAdjust%\Microsoft\VisualStudio\8.0%RootSuffix%" /v "VisualStudioLocation"`) DO call set VSFileLocation=%%B +FOR /F "usebackq eol=! tokens=2*" %%A IN (`REG QUERY "HKCU\SOFTWARE\Microsoft\VisualStudio\8.0%RootSuffix%" /v "VisualStudioLocation"`) DO call set VSFileLocation=%%B if not exist "%VSFileLocation%\Addins" (md "%VSFileLocation%\Addins") del /F "%VSFileLocation%\Addins\%TestAddin%.Addin" 1>NUL 2>&1 @@ -48,22 +52,22 @@ call:RestoreDir %UserSettingsDir%" "Backup" goto:eof ) -reg save HKCU\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\8.0%RootSuffix% "%~dp0CurrentUserSettings.hiv" 1>NUL +reg save HKCU\Software\Microsoft\VisualStudio\8.0%RootSuffix% "%~dp0CurrentUserSettings.hiv" 1>NUL REM Establish the test environment xcopy /y /q /e /d "%~dp0%CachedSettings%" "%UserSettingsDir%\" 1>NUL -reg delete HKCU\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\8.0%RootSuffix% /f 1>NUL 2>&1 -reg add HKCU\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\8.0%RootSuffix% 1>NUL -reg restore HKCU\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\8.0%RootSuffix% "%~dp0%CachedSettings%.hiv" 1>NUL +reg delete HKCU\Software\Microsoft\VisualStudio\8.0%RootSuffix% /f 1>NUL 2>&1 +reg add HKCU\Software\Microsoft\VisualStudio\8.0%RootSuffix% 1>NUL +reg restore HKCU\Software\Microsoft\VisualStudio\8.0%RootSuffix% "%~dp0%CachedSettings%.hiv" 1>NUL del /f "%~dp0%CachedSettings%.copy.vssettings" 1>NUL 2>&1 copy /y "%~dp0%CachedSettings%.vssettings" "%~dp0%CachedSettings%.copy.vssettings" 1>NUL -reg add HKCU\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\8.0%RootSuffix%\Profile /v AutoSaveFile /t REG_SZ /f /d "%~dp0%CachedSettings%.copy.vssettings" 1>NUL +reg add HKCU\Software\Microsoft\VisualStudio\8.0%RootSuffix%\Profile /v AutoSaveFile /t REG_SZ /f /d "%~dp0%CachedSettings%.copy.vssettings" 1>NUL REM Run VS once to make sure all directories are in line start /wait /min %LaunchDevenv%.exe /Command File.Exit /RootSuffix %RootSuffix% REM Install the add-in file so VS knows its there -FOR /F "usebackq eol=! tokens=2*" %%A IN (`REG QUERY "HKCU\SOFTWARE%WOWRegistryAdjust%\Microsoft\VisualStudio\8.0%RootSuffix%" /v "VisualStudioLocation"`) DO call set VSFileLocation=%%B +FOR /F "usebackq eol=! tokens=2*" %%A IN (`REG QUERY "HKCU\SOFTWARE\Microsoft\VisualStudio\8.0%RootSuffix%" /v "VisualStudioLocation"`) DO call set VSFileLocation=%%B SET InstallAddin="%VSFileLocation%\Addins\%TestAddin%.AddIn" type "%~dp0%TestAddin%\%TestAddin%.AddIn.start" > %InstallAddin% echo %~dp0%TestAddin%\bin\%TestAddin%.dll >> %InstallAddin% @@ -82,9 +86,9 @@ REM type "%TestLog%" REM Restore registry settings, application data, and .vssettings files -reg delete HKCU\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\8.0%RootSuffix% /f 1>NUL 2>&1 -reg add HKCU\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\8.0%RootSuffix% 1>NUL -reg restore HKCU\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\8.0%RootSuffix% "%~dp0CurrentUserSettings.hiv" 1>NUL +reg delete HKCU\Software\Microsoft\VisualStudio\8.0%RootSuffix% /f 1>NUL 2>&1 +reg add HKCU\Software\Microsoft\VisualStudio\8.0%RootSuffix% 1>NUL +reg restore HKCU\Software\Microsoft\VisualStudio\8.0%RootSuffix% "%~dp0CurrentUserSettings.hiv" 1>NUL del /f "%~dp0CurrentUserSettings.hiv" del /f "%~dp0%CachedSettings%.copy.vssettings" 1>NUL 2>&1 call:RestoreDir "%UserSettingsDir%" "Backup" Modified: trunk/TestSuites/RegressionTests/VSEnvironmentSnapshot.bat =================================================================== --- trunk/TestSuites/RegressionTests/VSEnvironmentSnapshot.bat 2012-09-10 23:19:43 UTC (rev 1491) +++ trunk/TestSuites/RegressionTests/VSEnvironmentSnapshot.bat 2012-10-04 01:16:54 UTC (rev 1492) @@ -7,15 +7,9 @@ if exist "%~dp0%BaseName%.vssettings" del /f "%~dp0%BaseName%.vssettings" if exist "%~dp0%BaseName%" rd /s /q "%~dp0%BaseName%" -IF "%ProgramFiles(X86)%"=="" ( - SET WOWRegistryAdjust= -) ELSE ( - SET WOWRegistryAdjust=\Wow6432Node -) - -FOR /F "usebackq eol=! tokens=2*" %%A IN (`REG QUERY "HKCU\SOFTWARE%WOWRegistryAdjust%\Microsoft\VisualStudio\8.0%RootSuffix%" /v "VisualStudioLocation"`) DO call set VSFileLocation=%%B -reg save HKCU\Software%WOWRegistryAdjust%\Microsoft\VisualStudio\8.0%RootSuffix% "%~dp0%BaseName%.hiv" 1>NUL -FOR /F "usebackq eol=! tokens=2* delims=%%" %%A IN (`REG QUERY "HKCU\SOFTWARE%WOWRegistryAdjust%\Microsoft\VisualStudio\8.0%RootSuffix%\Profile" /v "AutoSaveFile"`) DO ( +FOR /F "usebackq eol=! tokens=2*" %%A IN (`REG QUERY "HKCU\SOFTWARE\Microsoft\VisualStudio\8.0%RootSuffix%" /v "VisualStudioLocation"`) DO call set VSFileLocation=%%B +reg save HKCU\Software\Microsoft\VisualStudio\8.0%RootSuffix% "%~dp0%BaseName%.hiv" 1>NUL +FOR /F "usebackq eol=! tokens=2* delims=%%" %%A IN (`REG QUERY "HKCU\SOFTWARE\Microsoft\VisualStudio\8.0%RootSuffix%\Profile" /v "AutoSaveFile"`) DO ( copy /y "%VSFileLocation%%%B" "%~dp0%BaseName%.vssettings" 1>NUL ) xcopy /y /q /e /d "%AppData%\Microsoft\VisualStudio\8.0%RootSuffix%" "%~dp0%BaseName%\" 1>NUL Modified: trunk/Tools/DisableRuleDirectiveProcessor/Install.bat =================================================================== --- trunk/Tools/DisableRuleDirectiveProcessor/Install.bat 2012-09-10 23:19:43 UTC (rev 1491) +++ trunk/Tools/DisableRuleDirectiveProcessor/Install.bat 2012-10-04 01:16:54 UTC (rev 1492) @@ -15,7 +15,7 @@ GOTO:EOF :_AddTextTemplateReg -REG ADD "%~1\%VSRegistryRootBase%\%~2\TextTemplating\DirectiveProcessors\%~3" /f /ve /d "A directive processor that disables Rules." -REG ADD "%~1\%VSRegistryRootBase%\%~2\TextTemplating\DirectiveProcessors\%~3" /f /v "Class" /d "Neumont.Tools.Modeling.%~3" -REG ADD "%~1\%VSRegistryRootBase%\%~2\TextTemplating\DirectiveProcessors\%~3" /f /v "Assembly" /d "Neumont.Tools.Modeling.DisableRuleDirectiveProcessor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=957d5b7d5e79e25f" +REG ADD "%~1\%VSRegistryConfigRootBase%\%~2\TextTemplating\DirectiveProcessors\%~3" /f /ve /d "A directive processor that disables Rules." +REG ADD "%~1\%VSRegistryConfigRootBase%\%~2\TextTemplating\DirectiveProcessors\%~3" /f /v "Class" /d "Neumont.Tools.Modeling.%~3" +REG ADD "%~1\%VSRegistryConfigRootBase%\%~2\TextTemplating\DirectiveProcessors\%~3" /f /v "Assembly" /d "Neumont.Tools.Modeling.DisableRuleDirectiveProcessor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=957d5b7d5e79e25f" GOTO:EOF Modified: trunk/Tools/NUBuildVS/Install.bat =================================================================== --- trunk/Tools/NUBuildVS/Install.bat 2012-09-10 23:19:43 UTC (rev 1491) +++ trunk/Tools/NUBuildVS/Install.bat 2012-10-04 01:16:54 UTC (rev 1492) @@ -7,9 +7,9 @@ :: for there to be parentheses in the %VSIPDir% path (and there are by default on x64), which :: causes a syntax error. Therefore, we leave the parentheses off here. IF /I "%TargetVisualStudioVersion%"=="v8.0" ( - IF EXIST "%VSIPDir%\Prerelease\VSCT" SET VsSDKVsctDir=%VSIPDir%\Prerelease\VSCT + IF EXIST "%VSIPDir%\Prerelease\VSCT" CALL:SETVAR "VsSDKVsctDir" "%VSIPDir%\Prerelease\VSCT" ) -IF NOT DEFINED VsSDKVsctDir SET VsSDKVsctDir=%VSIPDir%\VisualStudioIntegration\Tools\Bin +IF NOT DEFINED VsSDKVsctDir CALL:SETVAR "VsSDKVsctDir" "%VSIPDir%\VisualStudioIntegration\Tools\Bin" :: GAC the VSCT compiler so that we can use it. gacutil.exe /nologo /f /i "%VsSDKVsctDir%\VSCTCompress.dll" @@ -38,3 +38,7 @@ IF ERRORLEVEL 1 %COMSPEC% /c GOTO:EOF + +:SETVAR +SET %~1=%~2 +GOTO:EOF Modified: trunk/install.bat =================================================================== --- trunk/install.bat 2012-09-10 23:19:43 UTC (rev 1491) +++ trunk/install.bat 2012-10-04 01:16:54 UTC (rev 1492) @@ -2,7 +2,11 @@ SETLOCAL SET RootDir=%~dp0. IF NOT "%~2"=="" (SET TargetVisualStudioVersion=%~2) -CALL "%RootDir%\SetupEnvironment.bat" %* +CALL "%RootDir%\SetupEnvironment.bat" +IF NOT EXIST "%RootDir%\Version.bat" ( + CALL:_GenerateVersion +) +CALL "%RootDir%\Version.bat" %* IF "%VSIXInstallDir%"=="" ( IF EXIST "%OldNORMADir%\bin\Neumont.Tools.ORM.dll" (%RegPkg% /unregister "%NORMADir%\bin\Neumont.Tools.ORM.dll") @@ -150,6 +154,7 @@ XCOPY /Y /D /V /Q "%RootDir%\VSIXInstall\%TargetVisualStudioShortProductName%\ORMDesigner.pkgdef" "%VSIXInstallDir%\" XCOPY /Y /D /V /Q "%RootDir%\VSIXInstall\ORMDesignerIcon.png" "%VSIXInstallDir%\" XCOPY /Y /D /V /Q "%RootDir%\VSIXInstall\ORMDesignerPreview.png" "%VSIXInstallDir%\" + REG ADD "%VSRegistryConfigHive%\%VSRegistryConfigRootBase%\%VSRegistryRootVersion%%VSRegistryRootSuffix%\ExtensionManager\EnabledExtensions" /v "efddc549-1646-4451-8a51-e5a5e94d647c,%ProductMajorVersion%.%ProductMinorVersion%" /d "%VSIXInstallDir%\\" /f 1>NUL ) REG ADD "%DesignerRegistryRoot%\DesignerSettings\Core" /v "SettingsFile" /d "%NORMADir%\Xml\ORMDesignerSettings.xml" /f 1>NUL @@ -163,7 +168,7 @@ REG ADD "HKCR\ormfile" /ve /d "Object-Role Modeling File" /f 1>NUL REG ADD "HKCR\ormfile\DefaultIcon" /ve /d "%NORMADir%\bin\%TargetBaseName%.dll,0" /f 1>NUL REG ADD "HKCR\ormfile\shell\open" /ve /d "&Open" /f 1>NUL - REG ADD "HKCR\ormfile\shell\open\command" /ve /d "\"%VSEnvironmentPath%\" /RootSuffix \"%VSRegistryRootSuffix%\" /dde" /f 1>NUL + CALL:_SetShellCommand REG ADD "HKCR\ormfile\shell\open\ddeexec" /ve /d "Open(\"%%1\")" /f 1>NUL REG ADD "HKCR\ormfile\shell\open\ddeexec\application" /ve /d "VisualStudio.%TargetVisualStudioMajorMinorVersion%" /f 1>NUL REG ADD "HKCR\ormfile\shell\open\ddeexec\topic" /ve /d "system" /f 1>NUL @@ -174,6 +179,10 @@ GOTO:EOF +:_SetShellCommand +::Hack to handle parentheses in environment path +REG ADD "HKCR\ormfile\shell\open\command" /ve /d "\"%VSEnvironmentPath%\" /RootSuffix \"%VSRegistryRootSuffix%\" /dde" /f 1>NUL +GOTO:EOF :_MakeDir IF NOT EXIST "%~1" (MKDIR "%~1") @@ -195,3 +204,7 @@ :_CleanupFile IF EXIST "%~1" (DEL /F /Q "%~1") GOTO:EOF + +:_GenerateVersion +"%RootDir%\VersionGenerator.exe" +GOTO:EOF \ 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...> - 2012-10-15 23:22:42
|
Revision: 1495 http://orm.svn.sourceforge.net/orm/?rev=1495&view=rev Author: mcurland Date: 2012-10-15 23:22:36 +0000 (Mon, 15 Oct 2012) Log Message: ----------- Fix tool window reactivation issues on VS2010. Unlike the other platforms (including VS2012), VS2010 sends a FRAMESHOW_TabDeactivated between the FRAMESHOW_BeforeWinHidden and FRAMESHOW_WinHidden notification. This was causing the window to think it was covered instead of closed, which stopped it from reinitializing properly when it was shown. The result was the occasional blank tool window (diagram spy, model browser, and possibly others). Modified Paths: -------------- trunk/ORMModel/Framework/Shell/ToolWindowActivator.cs trunk/Setup/Readme.htm Modified: trunk/ORMModel/Framework/Shell/ToolWindowActivator.cs =================================================================== --- trunk/ORMModel/Framework/Shell/ToolWindowActivator.cs 2012-10-09 04:48:09 UTC (rev 1494) +++ trunk/ORMModel/Framework/Shell/ToolWindowActivator.cs 2012-10-15 23:22:36 UTC (rev 1495) @@ -581,8 +581,6 @@ { FrameVisibilityFlags flags = myFrameVisibility; FrameVisibilityFlags startFlags = flags & ~(FrameVisibilityFlags.FrameVisibilityMask | FrameVisibilityFlags.PersistentFlagsMask); - bool coverPending = 0 != (flags & FrameVisibilityFlags.PendingHiddenMeansCovered); - bool closePending = !coverPending && 0 != (flags & FrameVisibilityFlags.PendingHiddenMeansCovered); myFrameVisibility &= FrameVisibilityFlags.FrameVisibilityMask | FrameVisibilityFlags.PersistentFlagsMask; switch ((__FRAMESHOW)fShow) { @@ -591,7 +589,9 @@ break; case __FRAMESHOW.FRAMESHOW_WinMinimized: case __FRAMESHOW.FRAMESHOW_TabDeactivated: - myFrameVisibility |= FrameVisibilityFlags.PendingHiddenMeansCovered; + // VS2010 is sending a BeforeWinHidden/TabDeactivated/Hidden, which results in a covered state + // with a closed window. If closed is already pending, don't degrade to cover pending instead. + myFrameVisibility |= 0 != (startFlags & FrameVisibilityFlags.PendingHiddenMeansClosed) ? FrameVisibilityFlags.PendingHiddenMeansClosed : FrameVisibilityFlags.PendingHiddenMeansCovered; break; case __FRAMESHOW.FRAMESHOW_DestroyMultInst: case __FRAMESHOW.FRAMESHOW_WinClosed: Modified: trunk/Setup/Readme.htm =================================================================== --- trunk/Setup/Readme.htm 2012-10-09 04:48:09 UTC (rev 1494) +++ trunk/Setup/Readme.htm 2012-10-15 23:22:36 UTC (rev 1495) @@ -44,7 +44,7 @@ <hr/> <h2>October 2012 CTP Changes</h2> -<div>The October 2012 CTP release includes all modifications through changeset 1495. 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 October 2012 CTP release includes all modifications through changeset 1496. 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>Bug Fixes: <ol> @@ -53,7 +53,10 @@ <li>Cross-model drag lost position of value constraint shapes for object types and fact types.</li> <li>Duplication of fact types shapes with role value constraints on the same diagram did not conect the new constraint shapes to the new fact type shapes.</li> <li>Database import did not create shapes for most object types and fact types.</li> +<li>Fixed verbalization subscripting for disjunctive mandatory constraints with multiple roles in the same fact type.</li> +<li>Fixed verbalization of external uniqueness and frequency constraints over unary fact types.</li> <li>(VS2010) Database import wizard worked from File/New, but not adding a file directly to a project.</li> +<li>(VS2010) Diagram Spy and other tool windows could end up blank, requiring restart.</li> </ol> </li> </ul> @@ -399,8 +402,8 @@ <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>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: SetupVista.bat elevates install permissions on Vista">2008-10</a> -The setup process must be run with admistrative permissions on Vista. You can either right-click the Setup.bat file and choose 'Run as Administrator', or you can run SetupVista.bat instead of Setup.bat and agree to the Vista security warnings.</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.</li> <li>(Visual Studio 2005 Install Only) The DSLToolsRedist.msi included with this release will not automatically upgrade if you have an older DSL installation on your machine. If you were an early user of NORMA or other DSL products and have not previously upgraded, or have experience designer issues on Windows Vista, then you may want to explicit uninstall the 'Microsoft DSL Tools Redistributable' product before running NORMA setup.</li> </ol> <a href="#The Top">Return to top</a> @@ -769,7 +772,6 @@ <p>These are areas that are incomplete and known issues with Visual Studio 2010.</p> <ol> <li>If the .orm designer is opened simultaneously with more than one other file (such as when opening a solution) and is the active file immediately after load, then the ORM designer tool windows and menu items will not activate properly. Activating a second document (of any type) and reactivating the ORM designer will fix the problem. <em>This is a Visual Studio 2010 bug</em> (I can reproduce similar behavior with missing menus with one XML and one Text file).</li> -<li>The <em>ORM Diagram Spy</em> window will occasionally go blank after extended use with multiple open ORM files. A restart of the environment is required to recover the window. If you can reliably reproduce this issue please report the scenario.</li> <li>The NORMA help files are not installed or integrated with Visual Studio 2010. [The installer merge modules used for help integration in VS2005 and VS2008 are not included with the VS2010 SDK.]</li> <li>The FrequencyConstraint and Reading shapes are larger in Visual Studio 2010.</li> <li>The document tab after a database import using <em>File/New</em> displays the full path of the temporary file instead of the base file name.</li> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2012-10-31 04:41:13
|
Revision: 1498 http://orm.svn.sourceforge.net/orm/?rev=1498&view=rev Author: mcurland Date: 2012-10-31 04:41:06 +0000 (Wed, 31 Oct 2012) Log Message: ----------- Various bug fixes and verbalization enhancements * Objectification of formally fully derived fact type should not create a table and did not create one on load, but did during incremental processing. * Multiple value constraints created on load. Regression caused by [1493] modifications. * Name generation and object type name normalization now recognize punctuation and symbol characters as name part delimiters. * Verbalization of separated object type names now has an option to replace certain characters with spaces. The default is ".:_" * Verbalization of derivation rules that project a value type on an entity type use 'is identified by' to relate the entity and value. Changes to type the value (the VALUETYPE 'CONST') are still pending. * Updated test case baselines to match recent shape and column ordering changes. Modified Paths: -------------- trunk/ORMModel/ObjectModel/Verbalization.cs trunk/Setup/Readme.htm Modified: trunk/ORMModel/ObjectModel/Verbalization.cs =================================================================== --- trunk/ORMModel/ObjectModel/Verbalization.cs 2012-10-25 16:34:18 UTC (rev 1497) +++ trunk/ORMModel/ObjectModel/Verbalization.cs 2012-10-31 04:41:06 UTC (rev 1498) @@ -4720,7 +4720,7 @@ #endregion // Member variables #region Constructor /// <summary> - /// Create a new <see cref="InlineSubqueryContext"/> + /// Create a new <see cref="InlineSubqueryRole"/> /// </summary> /// <param name="parentContext">The context representing the derivation path that invokes this subquery.</param> /// <param name="parentEntryRole">The <see cref="PathedRole"/> in the context path used to invoke an instance of this subquery.</param> @@ -4830,7 +4830,7 @@ #endregion // Member variables #region Constructor /// <summary> - /// Create a new <see cref="InlineSubqueryContext"/> + /// Create a new <see cref="InlineSubqueryParameter"/> /// </summary> /// <param name="parentContext">The context representing the derivation path that invokes this subquery.</param> /// <param name="parentEntryRole">The <see cref="PathedRole"/> in the context path used to invoke an instance of this subquery.</param> @@ -5416,7 +5416,7 @@ /// <summary> /// Create and attach a new variable equality node. /// </summary> - /// <param name="equivalentVariableKeys">A list of keys to render as equivlanet</param> + /// <param name="equivalentVariableKeys">A list of keys to render as equivalent</param> /// <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> @@ -6478,7 +6478,7 @@ // Populate path variables for this owner and process all role paths in the root (null) path context LinkedNode<object> pendingRequiredVariableKeys = null; - InitializeRolePaths(null, null, pathOwner, AddPathProjections(pathOwner), ref pendingRequiredVariableKeys); + InitializeRolePaths(null, null, null, pathOwner, AddPathProjections(pathOwner), ref pendingRequiredVariableKeys); VerbalizationPlanNode newRootNode = myRootPlanNode; if (newRootNode != null) @@ -6518,7 +6518,7 @@ BeginQuantificationUsePhase(); } private delegate object PathContextCreator(LeadRolePath rolePath); - private void InitializeRolePaths(object pathContext, PathContextCreator contextCreator, RolePathOwner pathOwner, IDictionary<LeadRolePath, IList<IList<object>>> equivalentVariableKeysByPath, ref LinkedNode<object> pendingRequiredVariableKeys) + private void InitializeRolePaths(object pathContext, PathContextCreator contextCreator, VariableKeyDecorator keyDecorator, RolePathOwner pathOwner, IDictionary<LeadRolePath, IList<IList<object>>> equivalentVariableKeysByPath, ref LinkedNode<object> pendingRequiredVariableKeys) { // Determine owned paths to verbalize // Verbalize in owned/shared order. The LeadRolePathCollection is unordered. @@ -6573,7 +6573,7 @@ { PushSplit(outerContext, VerbalizationPlanBranchType.AndSplit, ref pendingRequiredVariableKeys); } - InitializeRolePath(pathContext, pathOwner, filteredPath, ref pendingRequiredVariableKeys); + InitializeRolePath(pathContext, pathOwner, filteredPath, keyDecorator, ref pendingRequiredVariableKeys); if (equivalentVariables != null) { int equivalentVariableSetCount = equivalentVariables.Count; @@ -6591,7 +6591,7 @@ } } } - private void InitializeRolePath(object initialPathContext, RolePathOwner pathOwner, LeadRolePath leadRolePath, ref LinkedNode<object> requiredVariableKeys) + private void InitializeRolePath(object initialPathContext, RolePathOwner pathOwner, LeadRolePath leadRolePath, VariableKeyDecorator keyDecorator, ref LinkedNode<object> requiredVariableKeys) { LinkedElementCollection<CalculatedPathValue> pathConditions = leadRolePath.CalculatedConditionCollection; int pathConditionCount = pathConditions.Count; @@ -7045,7 +7045,7 @@ } } } - AddCalculatedAndConstantProjections(initialPathContext, pathOwner, leadRolePath); + AddCalculatedAndConstantProjections(initialPathContext, pathOwner, leadRolePath, keyDecorator); PopConditionalChainNode(); if (rootObjectTypeVariable != null && !rootObjectTypeVariable.HasBeenUsed(myLatestUsePhase, false) && @@ -8126,6 +8126,27 @@ int localInlineSubqueryRoleBaseIndex = inlineSubqueryRoleBaseIndex; List<InlineSubqueryParameter> localInlineSubqueryParameters = inlineSubqueryParameters; int localInlineSubqueryParameterBaseIndex = inlineSubqueryParameterBaseIndex; + VariableKeyDecorator keyDecorator = delegate(object key) + { + Role role; + QueryParameter parameter; + int index; + if (null != (role = key as Role)) + { + if (-1 != (index = ResolveRoleIndex(queryRoles, role))) // Guard against bogus path + { + return localInlineSubqueryRoles[localInlineSubqueryRoleBaseIndex + index]; + } + } + else if (null != (parameter = key as QueryParameter)) + { + if (-1 != (index = queryParameters.IndexOf(parameter))) + { + return localInlineSubqueryParameters[localInlineSubqueryParameterBaseIndex + index]; // Guard against bogus path + } + } + return key; // Fallback, shouldn't reach here + }; IDictionary<LeadRolePath, IList<IList<object>>> equivalentSubqueryProjectionKeysByPath = GenerateRoleAndParameterProjections( subqueryRule, delegate(object key, LeadRolePath forRolePath, ObjectType variableType, RolePathNode correlationNode) @@ -8143,33 +8164,16 @@ correlationNode = new RolePathNode(correlationNode, innerPathContext); } RolePlayerVariable newVar = RegisterRolePlayerUse(variableType, null, correlationNode, correlationNode); - RolePlayerVariableUse? correlateWithVar = GetRolePlayerVariableUse(key); - if (correlateWithVar.HasValue) + if (!correlationNode.IsEmpty) { - CustomCorrelateVariables(correlateWithVar.Value.PrimaryRolePlayerVariable, newVar); - } - }, - delegate(object key) - { - Role role; - QueryParameter parameter; - int index; - if (null != (role = key as Role)) - { - if (-1 != (index = ResolveRoleIndex(queryRoles, role))) // Guard against bogus path + RolePlayerVariableUse? correlateWithVar = GetRolePlayerVariableUse(key); + if (correlateWithVar.HasValue) { - return localInlineSubqueryRoles[localInlineSubqueryRoleBaseIndex + index]; + CustomCorrelateVariables(correlateWithVar.Value.PrimaryRolePlayerVariable, newVar); } } - else if (null != (parameter = key as QueryParameter)) - { - if (-1 != (index = queryParameters.IndexOf(parameter))) - { - return localInlineSubqueryParameters[localInlineSubqueryParameterBaseIndex + index]; // Guard against bogus path - } - } - return key; // Fallback, shouldn't reach here - }); + }, + keyDecorator); // Add value constraints and local condition code based on roles in the outer path int currentPathedRoleCount = pathedRoles.Count; @@ -8294,6 +8298,7 @@ } return innerPathContext; }, + keyDecorator, subqueryRule, equivalentSubqueryProjectionKeysByPath, ref pendingRequiredVariableKeys); @@ -9133,6 +9138,12 @@ return null; } /// <summary> + /// A callback for decorating variable keys. + /// </summary> + /// <param name="key">The key value.</param> + /// <returns>The original key or a decorated value.</returns> + protected delegate object VariableKeyDecorator(object key); + /// <summary> /// Add calculations and constants that are bound directly to a /// head variable registered during <see cref="AddPathProjections"/> /// using the <see cref="ProjectExternalVariable(Object,CalculatedPathValue,Object)"/> and @@ -9141,7 +9152,8 @@ /// <param name="pathContext">The context representing a use of this path.</param> /// <param name="pathOwner">The <see cref="RolePathOwner"/></param> /// <param name="rolePath">A <see cref="LeadRolePath"/> with associated projections.</param> - protected virtual void AddCalculatedAndConstantProjections(object pathContext, RolePathOwner pathOwner, LeadRolePath rolePath) + /// <param name="keyDecorator">A callback function for decorating keys of projected items.</param> + protected virtual void AddCalculatedAndConstantProjections(object pathContext, RolePathOwner pathOwner, LeadRolePath rolePath, VariableKeyDecorator keyDecorator) { // Default implementation is empty } @@ -10435,8 +10447,9 @@ testChildIndex = testChildIndex == 0 ? 1 : 0; 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. - !GetRolePlayerVariableUse(new RolePathNode(childPathedRoles[testChildIndex], pathContext)).Value.PrimaryRolePlayerVariable.HasBeenUsed(usePhase, true)) + ((resolvedChildVariableUse = GetRolePlayerVariableUse(new RolePathNode(childPathedRoles[testChildIndex], pathContext))).HasValue && !resolvedChildVariableUse.Value.PrimaryRolePlayerVariable.HasBeenUsed(usePhase, true))) { RolePlayerVariableUse variableUse = GetRolePlayerVariableUse(new RolePathNode(entryPathedRole, pathContext)).Value; RolePlayerVariable primaryVariable = variableUse.PrimaryRolePlayerVariable; @@ -10987,7 +11000,6 @@ return retVal; } private delegate void RegisterSubqueryProjectionVariable(object key, LeadRolePath rolePath, ObjectType variableType, RolePathNode correlationNode); - private delegate object DecorateSubqueryProjectionKey(object key); /// <summary> /// Register variables required for projection by a subquery object. Helper method to /// ensure consistency in subquery projection processing by <see cref="InitializeRolePath"/> and @@ -10997,7 +11009,7 @@ /// <param name="variableRegistrar">A callback to register variables.</param> /// <param name="keyDecorator">A callback to translate a projection key (either a role or a parameter) into a decorated key. /// If specified, keys are preprocessed by this call before being passed to the variable registrar.</param> - private IDictionary<LeadRolePath, IList<IList<object>>> GenerateRoleAndParameterProjections(RolePathOwner pathOwner, RegisterSubqueryProjectionVariable variableRegistrar, DecorateSubqueryProjectionKey keyDecorator) + private IDictionary<LeadRolePath, IList<IList<object>>> GenerateRoleAndParameterProjections(RolePathOwner pathOwner, RegisterSubqueryProjectionVariable variableRegistrar, VariableKeyDecorator keyDecorator) { // Overlay all projection information // Make the QueryDerivationRule optional so that this supports inlining of derived fact types @@ -11575,7 +11587,7 @@ /// <summary> /// Override to bind calculation and constant projections /// </summary> - protected override void AddCalculatedAndConstantProjections(object pathContext, RolePathOwner pathOwner, LeadRolePath rolePath) + protected override void AddCalculatedAndConstantProjections(object pathContext, RolePathOwner pathOwner, LeadRolePath rolePath, VariableKeyDecorator keyDecorator) { // Overlay projection information RoleSetDerivationProjection projection = RoleSetDerivationProjection.GetLink((RoleProjectedDerivationRule)pathOwner, rolePath); @@ -11585,13 +11597,16 @@ { CalculatedPathValue calculation; PathConstant constant; + Role role; if (null != (calculation = roleProjection.ProjectedFromCalculatedValue)) { - ProjectExternalVariable(roleProjection.ProjectedRole, calculation, pathContext); + role = roleProjection.ProjectedRole; + ProjectExternalVariable(keyDecorator != null ? keyDecorator(role) : role, calculation, pathContext); } else if (null != (constant = roleProjection.ProjectedFromConstant)) { - ProjectExternalVariable(roleProjection.ProjectedRole, constant, pathContext); + role = roleProjection.ProjectedRole; + ProjectExternalVariable(keyDecorator != null ? keyDecorator(role) : role, constant, pathContext); } } } @@ -11903,9 +11918,10 @@ /// <summary> /// Override to bind calculation and constant projections /// </summary> - protected override void AddCalculatedAndConstantProjections(object pathContext, RolePathOwner pathOwner, LeadRolePath rolePath) + protected override void AddCalculatedAndConstantProjections(object pathContext, RolePathOwner pathOwner, LeadRolePath rolePath, VariableKeyDecorator keyDecorator) { - // Overlay projection information + // Overlay projection information. + // Key decorator is ignored as this is always called top level. ConstraintRoleSequenceJoinPathProjection projection = ConstraintRoleSequenceJoinPathProjection.GetLink((ConstraintRoleSequenceJoinPath)pathOwner, rolePath); if (projection != null) { @@ -12071,9 +12087,10 @@ /// <summary> /// Override to bind calculation and constant projections /// </summary> - protected override void AddCalculatedAndConstantProjections(object pathContext, RolePathOwner pathOwner, LeadRolePath rolePath) + protected override void AddCalculatedAndConstantProjections(object pathContext, RolePathOwner pathOwner, LeadRolePath rolePath, VariableKeyDecorator keyDecorator) { // Overlay projection information + // Key decorator is ignored as this is always called top level. ConstraintRoleSequenceJoinPathProjection projection = ConstraintRoleSequenceJoinPathProjection.GetLink((ConstraintRoleSequenceJoinPath)pathOwner, rolePath); if (projection != null) { Modified: trunk/Setup/Readme.htm =================================================================== --- trunk/Setup/Readme.htm 2012-10-25 16:34:18 UTC (rev 1497) +++ trunk/Setup/Readme.htm 2012-10-31 04:41:06 UTC (rev 1498) @@ -14,7 +14,7 @@ <p><b><a id="The Top" style="font-family:Verdana;font-size:medium">NORMA October 2012 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 October 2012 release adds Visual Studio 2012 support and some enhances some disjunctive mandatory and external uniqueness verbalization patterns, and other bug fixes. See detailed change notes below for specifics.<br/><br/> +The October 2012 release adds Visual Studio 2012 support, some enhancements to disjunctive mandatory and external uniqueness verbalization patterns, and other bug fixes. See detailed change notes below for specifics.<br/><br/> </p> <h2>Contents</h2> <ul> @@ -44,8 +44,9 @@ <hr/> <h2>October 2012 CTP Changes</h2> -<div>The October 2012 CTP release includes all modifications through changeset 1496. 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 October 2012 CTP release includes all modifications through changeset 1498. 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="#VerbalizedObjectTypeNameRemoveSpecialCharacterDisplay 2012-10">Verbalized object type name separator character removal options</a></li> <li>Bug Fixes: <ol> <li>Crash verbalizing internal uniqueness constraints with no roles (possible from toolbox and with error activation).</li> @@ -574,6 +575,14 @@ <a id="VerbalizePossiblePopulationsOption 2012-04" class="new" title="April 2012 CTP: Verbalize possible populations option">2012-04</a> The <strong>Possible Populations</strong> option has replaced the <strong>Verbalization Default Constraint</strong> option in the <em>Verbalization</em> section of the <em>ORM Designer</em> tab on the <em>Options</em> page (available on the <em>Tools</em> menu). This option now applies to the possible populations of spanning internal uniqueness constraints in addition to many-to-one binary fact types. </li> +<li> +<a id="VerbalizedObjectTypeNameRemoveSpecialCharacterDisplay 2012-10" class="new" title="October 2012 CTP: Verbalized object type name separator character removal options">2012-10</a> +As an enhancement to automatic name separation and casing of object type names (see <a href="#VerbalizedObjectTypeNameDisplay 2012-01">Verbalized object type name options</a>), punctuation and symbol characters are recognized in addition to upper cases and numeric characters. +<ul> +<li>All symbol and punctuation characters form word boundaries.</li> +<li>Most special characters remain in the final name and do not get extra spaces around them.</li> +<li>The new <em>Object Type Name Removed Characters</em> options lists special characters that should be replaced with a space. The default setting replaces the <strong>.:_</strong> (period, colon, and underscore) characters with a space in the final name.</li></ul> +</li> </ol> <a href="#The Top">Return to top</a> <hr /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2012-11-04 03:28:33
|
Revision: 1499 http://orm.svn.sourceforge.net/orm/?rev=1499&view=rev Author: mcurland Date: 2012-11-04 03:28:26 +0000 (Sun, 04 Nov 2012) Log Message: ----------- Fixed path verbalization issues: * Joined subset constraint with a disjunction was handling indentation incorrectly, beginning of 'then' clause overwrote end of 'if' clause. * Variable joining in subqueries needs to give precedence to custom correlated variables of the same type (two paired variables of the same type was not possible without subquery expansion, so this was not previously an issue). Modified Paths: -------------- trunk/ORMModel/ObjectModel/Verbalization.cs trunk/ORMModel/ObjectModel/VerbalizationGenerator.cs trunk/ORMModel/ObjectModel/VerbalizationGenerator.xml trunk/ORMModel/ObjectModel/VerbalizationGenerator.xsd trunk/ORMModel/ObjectModel/VerbalizationGenerator.xslt trunk/Setup/Readme.htm Modified: trunk/ORMModel/ObjectModel/Verbalization.cs =================================================================== --- trunk/ORMModel/ObjectModel/Verbalization.cs 2012-10-31 04:41:06 UTC (rev 1498) +++ trunk/ORMModel/ObjectModel/Verbalization.cs 2012-11-04 03:28:26 UTC (rev 1499) @@ -10716,10 +10716,12 @@ { if (possibleCorrelationPartners != null) { + RolePlayerVariable firstUnpairedSameTypedVariable = null; // With subquery process, we can end up pairing variables of the same type RolePlayerVariable firstUnpairedNormalVariable = null; // Normal meaning not the head RolePlayerVariable firstUnpairedHeadVariable = null; int pairedDuringPhase; RolePlayerVariable floatingRootVariable = myFloatingRootVariable; + ObjectType primaryRolePlayer = primaryVariable.RolePlayer; bool unusedFloatingRootVariable = false; foreach (RolePlayerVariable possiblePartner in possibleCorrelationPartners) { @@ -10737,12 +10739,20 @@ IsPairingUsePhaseInScope(pairedDuringPhase)) { // We have an existing pairing, get out + firstUnpairedSameTypedVariable = null; firstUnpairedHeadVariable = null; firstUnpairedNormalVariable = null; break; } - if (possiblePartner.IsHeadVariable) + if (possiblePartner.RolePlayer == primaryRolePlayer) { + if (firstUnpairedSameTypedVariable == null) + { + firstUnpairedSameTypedVariable = possiblePartner; + } + } + else if (possiblePartner.IsHeadVariable) + { if (firstUnpairedHeadVariable == null) { firstUnpairedHeadVariable = possiblePartner; @@ -10758,7 +10768,7 @@ unusedFloatingRootVariable = true; } } - return firstUnpairedHeadVariable ?? firstUnpairedNormalVariable ?? (unusedFloatingRootVariable ? floatingRootVariable : null); + return firstUnpairedSameTypedVariable ?? firstUnpairedHeadVariable ?? firstUnpairedNormalVariable ?? (unusedFloatingRootVariable ? floatingRootVariable : null); } return null; } Modified: trunk/ORMModel/ObjectModel/VerbalizationGenerator.cs =================================================================== --- trunk/ORMModel/ObjectModel/VerbalizationGenerator.cs 2012-10-31 04:41:06 UTC (rev 1498) +++ trunk/ORMModel/ObjectModel/VerbalizationGenerator.cs 2012-11-04 03:28:26 UTC (rev 1499) @@ -4373,7 +4373,6 @@ Array.Clear(snippet1Replace1Replace1ItemUniqueFactTypes1, 0, snippet1Replace1Replace1ItemUniqueFactTypes1.Length); } snippet1Replace1ReplaceCompositeIterator1 = 0; - string[] snippet1Replace1ReplaceCompositeFields1 = new string[snippet1Replace1ReplaceCompositeCount1]; if (sbTemp == null) { sbTemp = new StringBuilder(); @@ -4411,8 +4410,7 @@ listSnippet = CoreVerbalizationSnippetType.CompoundListSeparator; } sbTemp.Append(snippets.GetSnippet(listSnippet, isDeontic, isNegative)); - sbTemp.AppendFormat("{{{0}}}", snippet1Replace1ReplaceCompositeIterator1); - snippet1Replace1ReplaceCompositeFields1[snippet1Replace1ReplaceCompositeIterator1] = pathVerbalizer.RenderPathVerbalization(joinPath, sbTemp); + sbTemp.Append(pathVerbalizer.RenderPathVerbalization(joinPath, sbTemp)); if (snippet1Replace1ReplaceCompositeIterator1 == snippet1Replace1ReplaceCompositeCount1 - 1) { sbTemp.Append(snippets.GetSnippet(CoreVerbalizationSnippetType.CompoundListClose, isDeontic, isNegative)); @@ -4452,7 +4450,6 @@ listSnippet = CoreVerbalizationSnippetType.CompoundListSeparator; } sbTemp.Append(snippets.GetSnippet(listSnippet, isDeontic, isNegative)); - sbTemp.AppendFormat("{{{0}}}", snippet1Replace1ReplaceCompositeIterator1); reading = parentFact.GetMatchingReading(allReadingOrders, null, primaryRole, null, factRoles, MatchingReadingOptions.AllowAnyOrder); hyphenBinder = new VerbalizationHyphenBinder(reading, writer.FormatProvider, factRoles, unaryRoleIndex, snippets.GetSnippet(CoreVerbalizationSnippetType.HyphenBoundPredicatePart, isDeontic, isNegative), predicatePartFormatString); snippet1Replace1Replace1Item1 = hyphenBinder.PopulatePredicateText(reading, writer.FormatProvider, predicatePartFormatString, factRoles, delegate(RoleBase replaceRole, string hyphenBindingFormatString) @@ -4466,7 +4463,7 @@ } return pathVerbalizer.RenderAssociatedRolePlayer(replaceRole, hyphenBindingFormatString, RolePathRolePlayerRenderingOptions.Quantify); }); - snippet1Replace1ReplaceCompositeFields1[snippet1Replace1ReplaceCompositeIterator1] = snippet1Replace1Replace1Item1; + sbTemp.Append(snippet1Replace1Replace1Item1); if (snippet1Replace1ReplaceCompositeIterator1 == snippet1Replace1ReplaceCompositeCount1 - 1) { sbTemp.Append(snippets.GetSnippet(CoreVerbalizationSnippetType.CompoundListClose, isDeontic, isNegative)); @@ -4477,9 +4474,6 @@ } Array.Clear(snippet1Replace1Replace1ItemUniqueFactTypes1, 0, snippet1Replace1Replace1ItemUniqueFactTypes1.Length); } - string snippet1Replace1ReplaceFormat1 = sbTemp.ToString(); - sbTemp.Length = 0; - RolePathVerbalizer.FormatResolveOutdent(writer.FormatProvider, sbTemp, writer.NewLine, snippet1Replace1ReplaceFormat1, snippet1Replace1ReplaceCompositeFields1); snippet1Replace1Replace1 = sbTemp.ToString(); string snippet1Replace1Replace2 = null; int snippet1Replace1ReplaceSequenceIter2; @@ -4510,7 +4504,6 @@ Array.Clear(snippet1Replace1Replace2ItemUniqueFactTypes1, 0, snippet1Replace1Replace2ItemUniqueFactTypes1.Length); } snippet1Replace1ReplaceCompositeIterator2 = 0; - string[] snippet1Replace1ReplaceCompositeFields2 = new string[snippet1Replace1ReplaceCompositeCount2]; if (sbTemp == null) { sbTemp = new StringBuilder(); @@ -4548,8 +4541,7 @@ listSnippet = CoreVerbalizationSnippetType.CompoundListSeparator; } sbTemp.Append(snippets.GetSnippet(listSnippet, isDeontic, isNegative)); - sbTemp.AppendFormat("{{{0}}}", snippet1Replace1ReplaceCompositeIterator2); - snippet1Replace1ReplaceCompositeFields2[snippet1Replace1ReplaceCompositeIterator2] = pathVerbalizer.RenderPathVerbalization(joinPath, sbTemp); + sbTemp.Append(pathVerbalizer.RenderPathVerbalization(joinPath, sbTemp)); if (snippet1Replace1ReplaceCompositeIterator2 == snippet1Replace1ReplaceCompositeCount2 - 1) { sbTemp.Append(snippets.GetSnippet(CoreVerbalizationSnippetType.CompoundListClose, isDeontic, isNegative)); @@ -4589,7 +4581,6 @@ listSnippet = CoreVerbalizationSnippetType.CompoundListSeparator; } sbTemp.Append(snippets.GetSnippet(listSnippet, isDeontic, isNegative)); - sbTemp.AppendFormat("{{{0}}}", snippet1Replace1ReplaceCompositeIterator2); reading = parentFact.GetMatchingReading(allReadingOrders, null, primaryRole, null, factRoles, MatchingReadingOptions.AllowAnyOrder); hyphenBinder = new VerbalizationHyphenBinder(reading, writer.FormatProvider, factRoles, unaryRoleIndex, snippets.GetSnippet(CoreVerbalizationSnippetType.HyphenBoundPredicatePart, isDeontic, isNegative), predicatePartFormatString); snippet1Replace1Replace2Item1 = hyphenBinder.PopulatePredicateText(reading, writer.FormatProvider, predicatePartFormatString, factRoles, delegate(RoleBase replaceRole, string hyphenBindingFormatString) @@ -4603,7 +4594,7 @@ } return pathVerbalizer.RenderAssociatedRolePlayer(replaceRole, hyphenBindingFormatString, RolePathRolePlayerRenderingOptions.Quantify); }); - snippet1Replace1ReplaceCompositeFields2[snippet1Replace1ReplaceCompositeIterator2] = snippet1Replace1Replace2Item1; + sbTemp.Append(snippet1Replace1Replace2Item1); if (snippet1Replace1ReplaceCompositeIterator2 == snippet1Replace1ReplaceCompositeCount2 - 1) { sbTemp.Append(snippets.GetSnippet(CoreVerbalizationSnippetType.CompoundListClose, isDeontic, isNegative)); @@ -4614,11 +4605,8 @@ } Array.Clear(snippet1Replace1Replace2ItemUniqueFactTypes1, 0, snippet1Replace1Replace2ItemUniqueFactTypes1.Length); } - string snippet1Replace1ReplaceFormat2 = sbTemp.ToString(); - sbTemp.Length = 0; - RolePathVerbalizer.FormatResolveOutdent(writer.FormatProvider, sbTemp, writer.NewLine, snippet1Replace1ReplaceFormat2, snippet1Replace1ReplaceCompositeFields2); snippet1Replace1Replace2 = sbTemp.ToString(); - snippet1Replace1 = string.Format(writer.FormatProvider, snippet1ReplaceFormat1, snippet1Replace1Replace1, snippet1Replace1Replace2); + snippet1Replace1 = RolePathVerbalizer.FormatResolveOutdent(writer.FormatProvider, null, writer.NewLine, snippet1ReplaceFormat1, snippet1Replace1Replace1, snippet1Replace1Replace2); FactType.WriteVerbalizerSentence(writer, string.Format(writer.FormatProvider, snippetFormat1, snippet1Replace1), snippets.GetSnippet(CoreVerbalizationSnippetType.CloseVerbalizationSentence, isDeontic, isNegative)); } else if (0 != (sign & VerbalizationSign.AttemptOppositeSign)) Modified: trunk/ORMModel/ObjectModel/VerbalizationGenerator.xml =================================================================== --- trunk/ORMModel/ObjectModel/VerbalizationGenerator.xml 2012-10-31 04:41:06 UTC (rev 1498) +++ trunk/ORMModel/ObjectModel/VerbalizationGenerator.xml 2012-11-04 03:28:26 UTC (rev 1499) @@ -200,7 +200,7 @@ </ConstrainedRoles> <ConstrainedRoles sign="positive"> <Snippet ref="ImpliedModalNecessityOperator"> - <Snippet ref="Conditional"> + <Snippet ref="Conditional" applyTrailingOutdentHere="true"> <IterateSequences listStyle="CompoundList" pass="first" compositeList="true"> <SequenceJoinPath markTrailingOutdentStart="true"> <IterateRoles match="constraintRoles" listStyle="null" uniqueFactType="true"> Modified: trunk/ORMModel/ObjectModel/VerbalizationGenerator.xsd =================================================================== --- trunk/ORMModel/ObjectModel/VerbalizationGenerator.xsd 2012-10-31 04:41:06 UTC (rev 1498) +++ trunk/ORMModel/ObjectModel/VerbalizationGenerator.xsd 2012-11-04 03:28:26 UTC (rev 1499) @@ -545,6 +545,11 @@ </xs:restriction> </xs:simpleType> </xs:attribute> + <xs:attribute name="applyTrailingOutdentHere" use="optional" type="xs:boolean"> + <xs:annotation> + <xs:documentation>Use with a nested SequenceJoinPath@markTrailingOutdentStart to force outdent resolution in the snippet instead of while the list is generating.</xs:documentation> + </xs:annotation> + </xs:attribute> </xs:complexType> <xs:complexType name="SnippetLeafTypeWithConditionalMatch"> <xs:complexContent> Modified: trunk/ORMModel/ObjectModel/VerbalizationGenerator.xslt =================================================================== (Binary files differ) Modified: trunk/Setup/Readme.htm =================================================================== --- trunk/Setup/Readme.htm 2012-10-31 04:41:06 UTC (rev 1498) +++ trunk/Setup/Readme.htm 2012-11-04 03:28:26 UTC (rev 1499) @@ -44,7 +44,7 @@ <hr/> <h2>October 2012 CTP Changes</h2> -<div>The October 2012 CTP release includes all modifications through changeset 1498. 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 October 2012 CTP release includes all modifications through changeset 1499. 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="#VerbalizedObjectTypeNameRemoveSpecialCharacterDisplay 2012-10">Verbalized object type name separator character removal options</a></li> <li>Bug Fixes: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2012-11-04 07:40:31
|
Revision: 1500 http://orm.svn.sourceforge.net/orm/?rev=1500&view=rev Author: mcurland Date: 2012-11-04 07:40:25 +0000 (Sun, 04 Nov 2012) Log Message: ----------- * Subtype connectors involved objectified fact types displayed as object types failed to create a shape, even though the underlying subtype was created. * Subtype connectors from an objectified fact type were not recreated on load. Modified Paths: -------------- trunk/ORMModel/ShapeModel/ORMDiagram.cs trunk/ORMModel/ShapeModel/SubtypeLink.cs trunk/Setup/Readme.htm Modified: trunk/ORMModel/ShapeModel/ORMDiagram.cs =================================================================== --- trunk/ORMModel/ShapeModel/ORMDiagram.cs 2012-11-04 03:28:26 UTC (rev 1499) +++ trunk/ORMModel/ShapeModel/ORMDiagram.cs 2012-11-04 07:40:25 UTC (rev 1500) @@ -1046,8 +1046,8 @@ } else if ((subtypeFact = element as SubtypeFact) != null) { - element1 = subtypeFact.Subtype; - element2 = subtypeFact.Supertype; + element1 = RedirectToDisplayedElement(subtypeFact.Subtype); + element2 = RedirectToDisplayedElement(subtypeFact.Supertype); } bool isLink = link != null || subtypeFact != null; Modified: trunk/ORMModel/ShapeModel/SubtypeLink.cs =================================================================== --- trunk/ORMModel/ShapeModel/SubtypeLink.cs 2012-11-04 03:28:26 UTC (rev 1499) +++ trunk/ORMModel/ShapeModel/SubtypeLink.cs 2012-11-04 07:40:25 UTC (rev 1500) @@ -612,11 +612,20 @@ ORMDiagram diagram; if ((diagram = presentationViewsSubject.Presentation as ORMDiagram) != null) { - //add a link shape for each fact type shape on the diagram for the played role - foreach (ObjectTypeShape shapeElement in MultiShapeUtility.FindAllShapesForElement<ObjectTypeShape>(diagram, subTypeFact.Subtype)) + ObjectType subtype = subTypeFact.Subtype; + // add a link shape for each object type shape on the diagram for the played role + foreach (ObjectTypeShape shapeElement in MultiShapeUtility.FindAllShapesForElement<ObjectTypeShape>(diagram, subtype)) { diagram.FixUpLocalDiagram(subTypeFact); } + FactType objectifiedFactType; + if (null != (objectifiedFactType = subtype.NestedFactType)) + { + foreach (FactTypeShape shapeElement in MultiShapeUtility.FindAllShapesForElement<FactTypeShape>(diagram, objectifiedFactType)) + { + diagram.FixUpLocalDiagram(subTypeFact); + } + } } } Modified: trunk/Setup/Readme.htm =================================================================== --- trunk/Setup/Readme.htm 2012-11-04 03:28:26 UTC (rev 1499) +++ trunk/Setup/Readme.htm 2012-11-04 07:40:25 UTC (rev 1500) @@ -44,7 +44,7 @@ <hr/> <h2>October 2012 CTP Changes</h2> -<div>The October 2012 CTP release includes all modifications through changeset 1499. 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 October 2012 CTP release includes all modifications through changeset 1500. 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="#VerbalizedObjectTypeNameRemoveSpecialCharacterDisplay 2012-10">Verbalized object type name separator character removal options</a></li> <li>Bug Fixes: @@ -58,6 +58,8 @@ <li>Fixed verbalization of external uniqueness and frequency constraints over unary fact types.</li> <li>(VS2010) Database import wizard worked from File/New, but not adding a file directly to a project.</li> <li>(VS2010) Diagram Spy and other tool windows could end up blank, requiring restart.</li> +<li>Subtype connectors to or from objectified fact types displayed as object type would sometimes fail to create a shape.</li> +<li>Subtype connectors with an objectified fact type as the subtype role player were not reconnecting on load.</li> </ol> </li> </ul> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2012-11-19 16:08:13
|
Revision: 1504 http://orm.svn.sourceforge.net/orm/?rev=1504&view=rev Author: mcurland Date: 2012-11-19 16:08:06 +0000 (Mon, 19 Nov 2012) Log Message: ----------- Subtyping constraint connections in [1503] worked first time, but not the second. Reset new fields. Modified Paths: -------------- trunk/ORMModel/ShapeModel/ExternalConstraintConnectAction.cs trunk/Setup/Readme.htm Modified: trunk/ORMModel/ShapeModel/ExternalConstraintConnectAction.cs =================================================================== --- trunk/ORMModel/ShapeModel/ExternalConstraintConnectAction.cs 2012-11-18 07:22:54 UTC (rev 1503) +++ trunk/ORMModel/ShapeModel/ExternalConstraintConnectAction.cs 2012-11-19 16:08:06 UTC (rev 1504) @@ -756,6 +756,10 @@ myPendingOnClickedAction = OnClickedAction.Normal; mySubtypeConnection = false; myAllowSubtypeConnection = false; + myOriginalAllowSubtypeConnection = false; + mySubtypeAnchoredSubset = false; + myOriginalSubtypeAnchoredSubset = false; + mySelectedSupertypeRoleCount = 0; FactTypeShape.ActiveExternalConstraintConnectAction = null; } /// <summary> Modified: trunk/Setup/Readme.htm =================================================================== --- trunk/Setup/Readme.htm 2012-11-18 07:22:54 UTC (rev 1503) +++ trunk/Setup/Readme.htm 2012-11-19 16:08:06 UTC (rev 1504) @@ -14,7 +14,7 @@ <p><b><a id="The Top" style="font-family:Verdana;font-size:medium">NORMA November 2012 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 November 2012 release adds Visual Studio 2012 support, some enhancements to disjunctive mandatory and external uniqueness verbalization patterns, native SQL Server data type handling, and other bug fixes. See detailed change notes below for specifics.<br/><br/> +The November 2012 release adds Visual Studio 2012 support, new constraint connections between a subtyping relationship and normal roles, some enhancements to disjunctive mandatory and external uniqueness verbalization patterns, native SQL Server data type handling, and other bug fixes. See detailed change notes below for specifics.<br/><br/> </p> <h2>Contents</h2> <ul> @@ -44,7 +44,7 @@ <hr/> <h2>November 2012 CTP Changes</h2> -<div>The November 2012 CTP release includes all modifications through changeset 1503. 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 November 2012 CTP release includes all modifications through changeset 1504. 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="#VerbalizedObjectTypeNameRemoveSpecialCharacterDisplay 2012-11">Verbalized object type name separator character removal options</a></li> <li><a href="#SQLServerNativeDataTypes 2012-11">SQL Server Native Data Types</a></li> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2012-12-06 04:49:57
|
Revision: 1505 http://orm.svn.sourceforge.net/orm/?rev=1505&view=rev Author: mcurland Date: 2012-12-06 04:49:49 +0000 (Thu, 06 Dec 2012) Log Message: ----------- * Fixed context menu crash when two exclusion constraints selected. * Fixed error implication cases on overlapping equality and exclusion constraints. Error was dependent on creation order of overlapping constraints. * Updated reading text for implication errors to distinguish between subset implication and superset implication in different scenarios. * Missed November, changed version to December 2012 refs #193 Modified Paths: -------------- trunk/ORMModel/ObjectModel/Constraint.cs trunk/ORMModel/ObjectModel/ORMModel.resx trunk/ORMModel/Resources/ResourceStringsGenerator.cs trunk/ORMModel/Resources/ResourceStringsGenerator.xml trunk/ORMModel/Shell/ORMDesignerCommandManager.cs trunk/Setup/Readme.htm trunk/VersionGenerator.exe.config Modified: trunk/ORMModel/ObjectModel/Constraint.cs =================================================================== --- trunk/ORMModel/ObjectModel/Constraint.cs 2012-11-19 16:08:06 UTC (rev 1504) +++ trunk/ORMModel/ObjectModel/Constraint.cs 2012-12-06 04:49:49 UTC (rev 1505) @@ -1495,7 +1495,8 @@ } } } - Guid domainRoleErrorId = validationInfo.DomainRoleToError.Value; + Guid? domainRoleInfo = validationInfo.DomainRoleToError; + Guid domainRoleErrorId = domainRoleInfo.HasValue ? domainRoleInfo.Value : validationInfo.IntersectingDomainRoleToError.Value; Store store = Store; ModelError error = (ModelError)DomainRoleInfo.GetLinkedElement(this, domainRoleErrorId); if (hasError) @@ -3656,13 +3657,11 @@ } //Get these GUIDs from data - DomainRoleInfo towardsErrorRoleInfo = null; ModelError error = null; Guid? domainRoleErrorId = validationInfo.DomainRoleToError; if (domainRoleErrorId.HasValue) { - towardsErrorRoleInfo = store.DomainDataDirectory.GetDomainRole(domainRoleErrorId.Value); - error = (ModelError)towardsErrorRoleInfo.GetLinkedElement((ModelElement)currentConstraint); + error = (ModelError)store.DomainDataDirectory.GetDomainRole(domainRoleErrorId.Value).GetLinkedElement((ModelElement)currentConstraint); } //This variable is used in the code for each validation pattern; but it will be reset @@ -4271,13 +4270,13 @@ /// <summary> /// Validates the SetComparisonConstraint Subset Pattern /// </summary> - /// <param name="setComparsionConstraint">The constraint that might be a subset of another constraint, which + /// <param name="setComparisonConstraint">The constraint that might be a subset of another constraint, which /// would result in an error</param> /// <param name="notifyAdded"></param> /// <param name="validationInfo">Validation information of the current constraint</param> /// <param name="constraintSequences">Sequences linked to the constraint</param> private static void ValidateSetComparisonConstraintSubsetPattern( - SetComparisonConstraint setComparsionConstraint, + SetComparisonConstraint setComparisonConstraint, INotifyElementAdded notifyAdded, IntersectingConstraintValidation validationInfo, LinkedElementCollection<SetComparisonConstraintRoleSequence> constraintSequences) @@ -4289,7 +4288,7 @@ } #region Validation Code - ConstraintModality currentModality = setComparsionConstraint.Modality; + ConstraintModality currentModality = setComparisonConstraint.Modality; List<IConstraint> constraintsToCheck = null; for (int iConstraintSequence = 0; iConstraintSequence < constraintSequenceCount; ++iConstraintSequence) { @@ -4305,7 +4304,7 @@ { ConstraintRoleSequence eligibleSequence = eligibleSequences[k]; IConstraint intersectingConstraint = eligibleSequence.Constraint; - if (intersectingConstraint != setComparsionConstraint && + if (intersectingConstraint != setComparisonConstraint && validationInfo.TestModality(currentModality, intersectingConstraint.Modality) && (validationInfo.ConstraintTypesInPotentialConflict as IList<ConstraintType>).Contains(intersectingConstraint.ConstraintType)) { @@ -4395,10 +4394,15 @@ #region Handling the error int constraintsInErrorCount = (constraintsInError == null) ? 0 : constraintsInError.Count; - Guid domainRoleErrorId = validationInfo.DomainRoleToError.Value; - Store store = setComparsionConstraint.Store; - DomainRoleInfo constraintRoleInfo = store.DomainDataDirectory.FindDomainRole(domainRoleErrorId); - DomainRoleInfo errorRoleInfo = constraintRoleInfo.OppositeDomainRole; + Guid? nullableDomainRoleInfo = validationInfo.DomainRoleToError; + bool errorOnIntersectingConstraint; + if (errorOnIntersectingConstraint = !nullableDomainRoleInfo.HasValue) + { + nullableDomainRoleInfo = validationInfo.IntersectingDomainRoleToError; + } + Guid domainRoleErrorId = nullableDomainRoleInfo.Value; + Store store = setComparisonConstraint.Store; + DomainRoleInfo errorRoleInfo = store.DomainDataDirectory.GetDomainRole(domainRoleErrorId).OppositeDomainRole.OppositeDomainRole; Multiplicity errorToItsConstraintsMultiplicity = errorRoleInfo.Multiplicity; DomainClassInfo errorType = errorRoleInfo.RolePlayer; @@ -4406,10 +4410,13 @@ if (errorToItsConstraintsMultiplicity == Multiplicity.OneMany || errorToItsConstraintsMultiplicity == Multiplicity.ZeroMany) { + // UNDONE: This does not handle the IntersectingDomainRoleToError. This construct isn't used in + // pattern data that triggers this case, but may be in the future. + //If the multiplicity is one-to-many ot zero-to-many: all constraintsInError found need to be attached //to the error - ModelError error = (ModelError)DomainRoleInfo.GetLinkedElement(setComparsionConstraint, domainRoleErrorId); + ModelError error = (ModelError)DomainRoleInfo.GetLinkedElement(setComparisonConstraint, domainRoleErrorId); if (constraintsInErrorCount != 0) { //For this pattern: there can be an error only if there are more than one sequences on @@ -4418,7 +4425,7 @@ { //Updating error object Hashtable constraints = new Hashtable(); - constraints.Add(setComparsionConstraint, domainRoleErrorId); + constraints.Add(setComparisonConstraint, domainRoleErrorId); foreach (IConstraint c in constraintsInError) { @@ -4429,7 +4436,7 @@ //Need to attach the error to all: the current constraint and all constraints, which were found to conflict with it - HandleError(store, false, ref error, domainRoleErrorId, notifyAdded, setComparsionConstraint); + HandleError(store, false, ref error, domainRoleErrorId, notifyAdded, setComparisonConstraint); HandleError(store, true, ref error, domainRoleErrorId, notifyAdded, constraintsInError); } } @@ -4449,32 +4456,48 @@ { //If the multiplicity is one-to-one ot zero-to-one: each constraint found to conflict needs to be //attached to the appropriate error + bool hasError = false; for (int iConstraintInPotentialConflict = 0; iConstraintInPotentialConflict < constraintsToCheckCount; ++iConstraintInPotentialConflict) { IConstraint curConstraint = constraintsToCheck[iConstraintInPotentialConflict]; - ModelError error = (ModelError)DomainRoleInfo.GetLinkedElement((ModelElement)curConstraint, domainRoleErrorId); + if (errorOnIntersectingConstraint) + { + ModelError error = (ModelError)DomainRoleInfo.GetLinkedElement((ModelElement)curConstraint, domainRoleErrorId); - if (constraintsInError != null && constraintsInError.Contains(curConstraint)) - { - //For this pattern: there can be an error only if there are more than one sequences on - //the constraint - if (constraintSequenceCount > 1) + if (constraintsInError != null && constraintsInError.Contains(curConstraint)) { - //Attach the error only to the current constraint - HandleError(store, true, ref error, domainRoleErrorId, notifyAdded, curConstraint); + //For this pattern: there can be an error only if there are more than one sequences on + //the constraint + if (constraintSequenceCount > 1) + { + //Attach the error only to the current constraint + HandleError(store, true, ref error, domainRoleErrorId, notifyAdded, curConstraint); + } } + else if (error != null) //there was an error but not anymore + { + error.Delete(); + } } - else if (error != null) //there was an error but not anymore + else if (constraintSequenceCount > 1 && + constraintsInError != null && + constraintsInError.Contains(curConstraint)) { - error.Delete(); + hasError = true; + break; } } - if (constraintsInErrorCount == 0) + + if (!errorOnIntersectingConstraint) { - ModelError error = (ModelError)DomainRoleInfo.GetLinkedElement(setComparsionConstraint, domainRoleErrorId); - if (error != null) + ModelError error = (ModelError)DomainRoleInfo.GetLinkedElement(setComparisonConstraint, domainRoleErrorId); + if (hasError) { + HandleError(store, true, ref error, domainRoleErrorId, notifyAdded, setComparisonConstraint); + } + else if (error != null) + { error.Delete(); } } @@ -9631,11 +9654,13 @@ public override void GenerateErrorText() { string errorName; + bool impliedBySuperset = false; //Do not know whether the underlying constraint is Set or SetComparison //The error has property for each if (this.SetComparisonConstraint != null) { errorName = SetComparisonConstraint.Name; + impliedBySuperset = true; Debug.Assert(SetConstraint == null); } else @@ -9643,7 +9668,7 @@ errorName = SetConstraint.Name; } - ErrorText = String.Format(CultureInfo.InvariantCulture, ResourceStrings.ModelErrorConstraintImplication, errorName, Model.Name); + ErrorText = String.Format(CultureInfo.InvariantCulture, impliedBySuperset ? ResourceStrings.ModelErrorConstraintImplicationBySuperset : ResourceStrings.ModelErrorConstraintImplicationBySubset, errorName, Model.Name); } /// <summary> /// Regenerate error text when the constraint name or model name changes @@ -10125,8 +10150,8 @@ new IntersectingConstraintValidation( IntersectingConstraintPattern.SetConstraintSubset, IntersectingConstraintPatternOptions.IntersectingConstraintModalityNotWeaker, + null, SetConstraintHasImplicationError.SetConstraintDomainRoleId, - null, ConstraintType.InternalUniqueness, ConstraintType.ExternalUniqueness), }; @@ -10345,6 +10370,13 @@ private static readonly IntersectingConstraintValidation[] myIntersectingValidationInfo = new IntersectingConstraintValidation[] { //Implication + // UNDONE: There are two types of 'subset' than can occur with an exclusion constraint. The + // first is where an exclusion constraint where the implied constraint has a subset of equivalent + // arguments to another constraint. In this case, the constraint with more rows implies the smaller. + // The second case occurs when the argument length is shorter in one case than the other. For an + // equality constraint, the pair (or longer) arguments implies the shorter arguments. However, for an + // exclusion constraint, the implication is reversed. By trying to cover both of these cases in the + // same pattern we're running into trouble. new IntersectingConstraintValidation( IntersectingConstraintPattern.SetComparisonConstraintSubset, IntersectingConstraintPatternOptions.IntersectingConstraintModalityNotWeaker, @@ -10452,8 +10484,8 @@ new IntersectingConstraintValidation( IntersectingConstraintPattern.SetConstraintSubset, IntersectingConstraintPatternOptions.IntersectingConstraintModalityNotWeaker, + null, SetConstraintHasImplicationError.SetConstraintDomainRoleId, - null, ConstraintType.SimpleMandatory, ConstraintType.DisjunctiveMandatory), Modified: trunk/ORMModel/ObjectModel/ORMModel.resx =================================================================== --- trunk/ORMModel/ObjectModel/ORMModel.resx 2012-11-19 16:08:06 UTC (rev 1504) +++ trunk/ORMModel/ObjectModel/ORMModel.resx 2012-12-06 04:49:49 UTC (rev 1505) @@ -316,10 +316,14 @@ <value>Frequency constraint '{0}' in model '{1}' is violated by a Uniqueness constraint on the same roles.</value> <comment>Model validation error text used when a frequency constraint is places on the same roles as a uniqueness constraint. {0}=constraint name {1}=model name</comment> </data> - <data name="ModelError.Constraint.ImplicationError.Text" xml:space="preserve"> + <data name="ModelError.Constraint.ImplicationError.ImpliedBySubsetText" xml:space="preserve"> <value>Constraint '{0}' in model '{1}' is implied by at least one constraint of the same type attached to a subset of the same roles.</value> - <comment>Model validation error text when a constraint intersects a second constraint where the second constraints roles are a subset of the constraint roles.</comment> + <comment>Model validation error text when a constraint intersects a second constraint where the second constraint's roles are a subset of the constraint roles.</comment> </data> + <data name="ModelError.Constraint.ImplicationError.ImpliedBySupersetText" xml:space="preserve"> + <value>Constraint '{0}' in model '{1}' is implied by at least one constraint of the same type attached to a superset of the same roles.</value> + <comment>Model validation error text when a constraint intersects a second constraint where the second constraint's roles are a superset of the constraint roles.</comment> + </data> <data name="ModelError.Constraint.NotWellModeledSubsetAndMandatoryError.Text" xml:space="preserve"> <value>Subset constraint '{0}' and mandatory constraint '{1}' in model '{2}' are not well-modeled. Suggested ways to fix: (1) Delete the mandatory constraint. (2) Add another mandatory constraint on the superset role. (3) Delete the subset constraint.</value> <comment>Model validation error text when a mandatory constraint is put on the subset role of a subset constraint relationship.</comment> Modified: trunk/ORMModel/Resources/ResourceStringsGenerator.cs =================================================================== --- trunk/ORMModel/Resources/ResourceStringsGenerator.cs 2012-11-19 16:08:06 UTC (rev 1504) +++ trunk/ORMModel/Resources/ResourceStringsGenerator.cs 2012-12-06 04:49:49 UTC (rev 1505) @@ -1012,14 +1012,22 @@ return ResourceStrings.GetString(ResourceManagers.Model, "ModelError.CalculatedPathValue.CalculatedPathValueMustBeConsumed.Text"); } } - /// <summary>Model validation error text when a constraint intersects a second constraint where the second constraints roles are a subset of the constraint roles.</summary> - public static string ModelErrorConstraintImplication + /// <summary>Model validation error text when a constraint intersects a second constraint where the second constraint's roles are a subset of the constraint roles.</summary> + public static string ModelErrorConstraintImplicationBySubset { get { - return ResourceStrings.GetString(ResourceManagers.Model, "ModelError.Constraint.ImplicationError.Text"); + return ResourceStrings.GetString(ResourceManagers.Model, "ModelError.Constraint.ImplicationError.ImpliedBySubsetText"); } } + /// <summary>Model validation error text when a constraint intersects a second constraint where the second constraint's roles are a superset of the constraint roles.</summary> + public static string ModelErrorConstraintImplicationBySuperset + { + get + { + return ResourceStrings.GetString(ResourceManagers.Model, "ModelError.Constraint.ImplicationError.ImpliedBySupersetText"); + } + } /// <summary>Model validation error text when a single-column equality constraint is put on a set of mandatory roles.</summary> public static string ModelErrorConstraintImplicationEqualityMandatory { Modified: trunk/ORMModel/Resources/ResourceStringsGenerator.xml =================================================================== --- trunk/ORMModel/Resources/ResourceStringsGenerator.xml 2012-11-19 16:08:06 UTC (rev 1504) +++ trunk/ORMModel/Resources/ResourceStringsGenerator.xml 2012-12-06 04:49:49 UTC (rev 1505) @@ -176,7 +176,8 @@ <ResourceString name="ModelErrorCalculatedPathValueRequiresFunction" model="Model" resourceName="ModelError.CalculatedPathValue.CalculatedPathValueRequiresFunction.Text"/> <ResourceString name="ModelErrorCalculatedPathValueParameterBinding" model="Model" resourceName="ModelError.CalculatedPathValue.CalculatedPathValueParameterBinding.Text"/> <ResourceString name="ModelErrorCalculatedPathValueMustBeConsumed" model="Model" resourceName="ModelError.CalculatedPathValue.CalculatedPathValueMustBeConsumed.Text"/> - <ResourceString name="ModelErrorConstraintImplication" model="Model" resourceName="ModelError.Constraint.ImplicationError.Text"/> + <ResourceString name="ModelErrorConstraintImplicationBySubset" model="Model" resourceName="ModelError.Constraint.ImplicationError.ImpliedBySubsetText"/> + <ResourceString name="ModelErrorConstraintImplicationBySuperset" model="Model" resourceName="ModelError.Constraint.ImplicationError.ImpliedBySupersetText"/> <ResourceString name="ModelErrorConstraintImplicationEqualityMandatory" model="Model" resourceName="ModelError.Constraint.EqualityImpliedByMandatoryError.Text"/> <ResourceString name="ModelErrorConstraintImplicationSubsetMandatory" model="Model" resourceName="ModelError.Constraint.SubsetImpliedByMandatoryError.Text"/> <ResourceString name="ModelErrorNotWellModeledSubsetAndMandatoryError" model="Model" resourceName="ModelError.Constraint.NotWellModeledSubsetAndMandatoryError.Text"/> Modified: trunk/ORMModel/Shell/ORMDesignerCommandManager.cs =================================================================== --- trunk/ORMModel/Shell/ORMDesignerCommandManager.cs 2012-11-19 16:08:06 UTC (rev 1504) +++ trunk/ORMModel/Shell/ORMDesignerCommandManager.cs 2012-12-06 04:49:49 UTC (rev 1505) @@ -1171,6 +1171,7 @@ { break; } + bool ambiguous = false; switch (testConstraint.ConstraintType) { case ConstraintType.DisjunctiveMandatory: @@ -1178,16 +1179,30 @@ { mandatory = (MandatoryConstraint)testConstraint; } + else + { + ambiguous = true; + mandatory = null; + } break; case ConstraintType.Exclusion: if (exclusion == null) { exclusion = (ExclusionConstraint)testConstraint; } + else + { + ambiguous = true; + exclusion = null; + } break; } + if (ambiguous) + { + break; + } } - if (null == mandatory && null == exclusion) + if (null == mandatory || null == exclusion) { disable = hide = true; } Modified: trunk/Setup/Readme.htm =================================================================== --- trunk/Setup/Readme.htm 2012-11-19 16:08:06 UTC (rev 1504) +++ trunk/Setup/Readme.htm 2012-12-06 04:49:49 UTC (rev 1505) @@ -3,7 +3,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"/> -<title>NORMA November 2012 CTP Readme</title> +<title>NORMA December 2012 CTP Readme</title> <style type="text/css"> .new {font-size:x-small; background-color:Gold; color:Blue; } li {padding-bottom: 3px;} @@ -12,9 +12,9 @@ <body> -<p><b><a id="The Top" style="font-family:Verdana;font-size:medium">NORMA November 2012 CTP Readme</a> </b></p> +<p><b><a id="The Top" style="font-family:Verdana;font-size:medium">NORMA December 2012 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 November 2012 release adds Visual Studio 2012 support, new constraint connections between a subtyping relationship and normal roles, some enhancements to disjunctive mandatory and external uniqueness verbalization patterns, native SQL Server data type handling, and other bug fixes. See detailed change notes below for specifics.<br/><br/> +The December 2012 release adds Visual Studio 2012 support, new constraint connections between a subtyping relationship and normal roles, some enhancements to disjunctive mandatory and external uniqueness verbalization patterns, native SQL Server data type handling, and other bug fixes. See detailed change notes below for specifics.<br/><br/> </p> <h2>Contents</h2> <ul> @@ -43,12 +43,12 @@ </ul>--> <hr/> -<h2>November 2012 CTP Changes</h2> -<div>The November 2012 CTP release includes all modifications through changeset 1504. 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>December 2012 CTP Changes</h2> +<div>The December 2012 CTP release includes all modifications through changeset 1505. 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="#VerbalizedObjectTypeNameRemoveSpecialCharacterDisplay 2012-11">Verbalized object type name separator character removal options</a></li> -<li><a href="#SQLServerNativeDataTypes 2012-11">SQL Server Native Data Types</a></li> -<li><a href="#ExtendedSubtypeConstraintCombinations 2012-11">Extended Subtyping Constraint Combinations</a></li> +<li><a href="#VerbalizedObjectTypeNameRemoveSpecialCharacterDisplay 2012-12">Verbalized object type name separator character removal options</a></li> +<li><a href="#SQLServerNativeDataTypes 2012-12">SQL Server Native Data Types</a></li> +<li><a href="#ExtendedSubtypeConstraintCombinations 2012-12">Extended Subtyping Constraint Combinations</a></li> <li>Other Features: <ol> @@ -73,6 +73,8 @@ <li>Changing the reference mode kind of a custom reference mode (in the <em>ORM Reference Mode Editor</em> tool window) would not automatically create or remove the needed value types. For example, a <em>General</em> reference mode kind uses one value type for all identified entity types, while a <em>Popular</em> kind uses one value type per entity type. Switch from general to popular will now create new value types (instead of just renaming one), and switching from popular to general may delete value types.</li> <li>The <em>ExpandRefMode</em> property on object type shapes was automatically set to <em>False</em> when a reference mode was deleted then re-added. This propery may change to <em>True</em> in this case if the reference mode fact type is displayed on the diagram, but will no longer clear automatically.</li> <li>An outdated validation error indicating a poor modeling choice with overlapping subset and mandatory constraints could get stuck in the model file, preventing future load. These files will now load with the shift key down (skipping schema validation), and the problem should no longer occur. Note that the orm:ModelErrors section can always be hand-deleted from the .ORM file because it regenerates on load.</li> +<li>Selecting two or more exclusion or mandatory constraints and opening a context menu failed determine the available of the exclusive-or coupling command.</li> +<li>Some set comparison overlap validation was dependent on the order the constraints were added to the model and failed to display an overlap implication errors.</li> </ol> </li> </ul> @@ -591,7 +593,7 @@ The <strong>Possible Populations</strong> option has replaced the <strong>Verbalization Default Constraint</strong> option in the <em>Verbalization</em> section of the <em>ORM Designer</em> tab on the <em>Options</em> page (available on the <em>Tools</em> menu). This option now applies to the possible populations of spanning internal uniqueness constraints in addition to many-to-one binary fact types. </li> <li> -<a id="VerbalizedObjectTypeNameRemoveSpecialCharacterDisplay 2012-11" class="new" title="October 2012 CTP: Verbalized object type name separator character removal options">2012-11</a> +<a id="VerbalizedObjectTypeNameRemoveSpecialCharacterDisplay 2012-12" class="new" title="October 2012 CTP: Verbalized object type name separator character removal options">2012-12</a> As an enhancement to automatic name separation and casing of object type names (see <a href="#VerbalizedObjectTypeNameDisplay 2012-01">Verbalized object type name options</a>), punctuation and symbol characters are recognized in addition to upper cases and numeric characters. <ul> <li>All symbol and punctuation characters form word boundaries.</li> @@ -697,7 +699,7 @@ </ul> Designing consistent glyphs for the new combinations required some minor display modifications to published ring display: the tick mark for <em>irreflexive</em> has been moved from the bottom of the shape to directly opposite the dot, the interior circle for <em>symmetric+irreflexive</em> has been moved to the left edge of the symmetric oval and shares the left dot, and an interior tick mark has been added to <em>purely reflexive</em> to distinguish it from <em>reflexive</em> and visually indicate the <em>and no other</em> part of this ring type. </li> -<li><a id="ExtendedSubtypeConstraintCombinations 2012-11" class="new" title="November 2012 CTP: Extended Subtyping Constraint Combinations">2012-11</a> +<li><a id="ExtendedSubtypeConstraintCombinations 2012-12" class="new" title="December 2012 CTP: Extended Subtyping Constraint Combinations">2012-12</a> Selected external constraints can now be connected simultaneously to a subtyping relationship and a normal role. The following constraint combinations are supported: <ul> <li>External mandatory constraints (both inclusive and exclusive).</li> @@ -764,7 +766,7 @@ </ul> <br />Opening and saving files with the relational extensions enabled will automatically update to use the new column orders. Generated DDL will also be updated when the file is saved. </li> -<li><a id="SQLServerNativeDataTypes 2012-11" class="new" title="November 2012 CTP: SQL Server Native Data Types">2012-11</a> +<li><a id="SQLServerNativeDataTypes 2012-12" class="new" title="December 2012 CTP: SQL Server Native Data Types">2012-12</a> Prior to this release, the DDL generated for SQL Server used ANSI standard data type names, but these are not supported by default in SQL Server 2012. The default has now been changed to use native SQL Server data type names. The generator that produces ANSI data types is still included. To use the ANSI types, expand the SQL_SQLServer node in the <em>ORM Generator Settings</em> dialog and choose <em>DDIL to SQL Server (ANSI Types)</em> instead of the default <em>DDIL to SQL Server</em>. <br />You will need to open and save a model file to see the new data types, or right-click the .ORM file in the Solution Explorer and choose the 'Run Custom Tool' menu item. </li> Modified: trunk/VersionGenerator.exe.config =================================================================== --- trunk/VersionGenerator.exe.config 2012-11-19 16:08:06 UTC (rev 1504) +++ trunk/VersionGenerator.exe.config 2012-12-06 04:49:49 UTC (rev 1505) @@ -2,7 +2,7 @@ <configuration> <appSettings> <add key="RevisionStartYearMonth" value="2006-01"/> - <add key="ReleaseYearMonth" value="2012-11"/> + <add key="ReleaseYearMonth" value="2012-12"/> <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...> - 2012-12-13 06:11:56
|
Revision: 1507 http://orm.svn.sourceforge.net/orm/?rev=1507&view=rev Author: mcurland Date: 2012-12-13 06:11:48 +0000 (Thu, 13 Dec 2012) Log Message: ----------- Fixed build warning from [1506]. Modified Paths: -------------- trunk/ORMModel/ObjectModel/Verbalization.cs trunk/Setup/Readme.htm Modified: trunk/ORMModel/ObjectModel/Verbalization.cs =================================================================== --- trunk/ORMModel/ObjectModel/Verbalization.cs 2012-12-13 06:10:08 UTC (rev 1506) +++ trunk/ORMModel/ObjectModel/Verbalization.cs 2012-12-13 06:11:48 UTC (rev 1507) @@ -2734,8 +2734,7 @@ /// <param name="objectType">The object type to get the name from. If the object type is a /// reference mode value type, then it is treated as multiple names.</param> /// <param name="originalName">The name as entered in the model.</param> - /// <param name="style">The verbalization style for this name. Pre-extracted from the <paramref name="verbalizationOptions"/>, or - /// set explicitly when processing different parts of composite generated object type names.</param> + /// <param name="style">The verbalization style for this name.</param> /// <param name="removeSeparatedCharacters">A list of characters to remove from the generated name and treat as spaces. Used when separating combined names.</param> /// <param name="builder">A string builder to append new names to. Can be null on first call, in which case a string is returned.</param> /// <param name="spacePending">A space should be added before the next text part. Used with recursive calls when the style has spaces between the names. Initially false.</param> Modified: trunk/Setup/Readme.htm =================================================================== --- trunk/Setup/Readme.htm 2012-12-13 06:10:08 UTC (rev 1506) +++ trunk/Setup/Readme.htm 2012-12-13 06:11:48 UTC (rev 1507) @@ -44,7 +44,7 @@ <hr/> <h2>December 2012 CTP Changes</h2> -<div>The December 2012 CTP release includes all modifications through changeset 1506. 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 2012 CTP release includes all modifications through changeset 1507. 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="#VerbalizedObjectTypeNameRemoveSpecialCharacterDisplay 2012-12">Verbalized object type name separator character removal options</a></li> <li><a href="#SQLServerNativeDataTypes 2012-12">SQL Server Native Data Types</a></li> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2013-01-12 07:28:33
|
Revision: 1510 http://orm.svn.sourceforge.net/orm/?rev=1510&view=rev Author: mcurland Date: 2013-01-12 07:28:20 +0000 (Sat, 12 Jan 2013) Log Message: ----------- * Initial relational and Barker diagrams not loading shapes immediately after diagram is loaded. Caused by diagram initialization changes in [1508]. Explicitly request shapes for displayed elements during diagram initialization. * Enable shapes from generated models to share the 'Select on Diagram' menu with other designers displaying the same type of shape. Based on the IRecognizedSharedPresentationType, which extends IDisplayMultiplePresentations to provide a 'presentation type key' string that can be returned by multiple diagram types. * Pushed version to January 2013 to match actually date refs #193 Modified Paths: -------------- trunk/AlternateViews/BarkerERView/ShapeModel/BarkerERDiagram.cs trunk/AlternateViews/BarkerERView/ShapeModel/BarkerEntityShape.cs trunk/AlternateViews/RelationalView/ShapeModel/RelationalDiagram.cs trunk/AlternateViews/RelationalView/ShapeModel/TableShape.cs trunk/ORMModel/Framework/Diagrams/MultiShapeUtility.cs trunk/Setup/Readme.htm trunk/VersionGenerator.exe.config Modified: trunk/AlternateViews/BarkerERView/ShapeModel/BarkerERDiagram.cs =================================================================== --- trunk/AlternateViews/BarkerERView/ShapeModel/BarkerERDiagram.cs 2013-01-02 07:18:49 UTC (rev 1509) +++ trunk/AlternateViews/BarkerERView/ShapeModel/BarkerERDiagram.cs 2013-01-12 07:28:20 UTC (rev 1510) @@ -3,6 +3,7 @@ * Natural Object-Role Modeling Architect for Visual Studio * * * * Copyright \xA9 Neumont University. All rights reserved. * +* 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 * @@ -56,7 +57,19 @@ ReadOnlyCollection<BarkerErModel> barkerModels = store.ElementDirectory.FindElements<BarkerErModel>(false); if (barkerModels.Count != 0) { - diagram.Associate(barkerModels[0]); + BarkerErModel model = barkerModels[0]; + diagram.Associate(model); + foreach (EntityType entity in model.EntityTypeCollection) + { + Diagram.FixUpDiagram(model, entity); + } + foreach (BarkerErModelContainsBinaryAssociation link in store.ElementDirectory.FindElements<BarkerErModelContainsBinaryAssociation>(false)) + { + if (link.BarkerErModel == model) + { + FixUpDiagram(model, link); + } + } } } } Modified: trunk/AlternateViews/BarkerERView/ShapeModel/BarkerEntityShape.cs =================================================================== --- trunk/AlternateViews/BarkerERView/ShapeModel/BarkerEntityShape.cs 2013-01-02 07:18:49 UTC (rev 1509) +++ trunk/AlternateViews/BarkerERView/ShapeModel/BarkerEntityShape.cs 2013-01-12 07:28:20 UTC (rev 1510) @@ -3,6 +3,7 @@ * Natural Object-Role Modeling Architect for Visual Studio * * * * Copyright \xA9 Neumont University. All rights reserved. * +* 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 * @@ -15,19 +16,20 @@ #endregion using System; +using System.Collections; using System.Collections.Generic; +using System.Diagnostics; using Microsoft.VisualStudio.Modeling; using Microsoft.VisualStudio.Modeling.Diagrams; using ORMSolutions.ORMArchitect.Core.ObjectModel; using ORMSolutions.ORMArchitect.Framework; -using System.Collections; -using System.Diagnostics; +using ORMSolutions.ORMArchitect.Framework.Diagrams; using ORMSolutions.ORMArchitect.EntityRelationshipModels.Barker; using Barker = ORMSolutions.ORMArchitect.EntityRelationshipModels.Barker; namespace ORMSolutions.ORMArchitect.Views.BarkerERView { - partial class BarkerEntityShape + partial class BarkerEntityShape : IRecognizedSharedPresentationType { #region Customize Appearance /// <summary> @@ -328,6 +330,25 @@ return retVal; } #endregion // Customize Column Order + #region IRecognizedSharedPresentationType Implementation + /// <summary> + /// Allow 'select on diagram' to work with other relational shape models + /// </summary> + protected static string SharedPresentationTypeKey + { + get + { + return "EntityRelationalEntityShape"; + } + } + string IRecognizedSharedPresentationType.SharedPresentationTypeKey + { + get + { + return SharedPresentationTypeKey; + } + } + #endregion // IRecognizedSharedPresentationType Implementation #region Event Management /// <summary> /// Manages <see cref="EventHandler{TEventArgs}"/>s in the <see cref="Store"/> for <see cref="BarkerEntityShape"/>s. Modified: trunk/AlternateViews/RelationalView/ShapeModel/RelationalDiagram.cs =================================================================== --- trunk/AlternateViews/RelationalView/ShapeModel/RelationalDiagram.cs 2013-01-02 07:18:49 UTC (rev 1509) +++ trunk/AlternateViews/RelationalView/ShapeModel/RelationalDiagram.cs 2013-01-12 07:28:20 UTC (rev 1510) @@ -3,6 +3,7 @@ * Natural Object-Role Modeling Architect for Visual Studio * * * * Copyright \xA9 Neumont University. All rights reserved. * +* 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 * @@ -55,7 +56,24 @@ ReadOnlyCollection<Catalog> catalogs = store.ElementDirectory.FindElements<Catalog>(false); if (catalogs.Count != 0) { - diagram.Associate(catalogs[0]); + Catalog catalog = catalogs[0]; + diagram.Associate(catalog); + foreach (Schema schema in catalog.SchemaCollection) + { + foreach (Table table in schema.TableCollection) + { + Diagram.FixUpDiagram(catalog, table); + } + foreach (ReferenceConstraintTargetsTable fkLink in store.ElementDirectory.FindElements<ReferenceConstraintTargetsTable>(false)) + { + Table sourceTable; + if (null != (sourceTable = fkLink.ReferenceConstraint.SourceTable) && + schema == sourceTable.Schema) + { + Diagram.FixUpDiagram(catalog, fkLink); + } + } + } } } } Modified: trunk/AlternateViews/RelationalView/ShapeModel/TableShape.cs =================================================================== --- trunk/AlternateViews/RelationalView/ShapeModel/TableShape.cs 2013-01-02 07:18:49 UTC (rev 1509) +++ trunk/AlternateViews/RelationalView/ShapeModel/TableShape.cs 2013-01-12 07:28:20 UTC (rev 1510) @@ -23,18 +23,19 @@ // #define CUSTOMSORT using System; +using System.Collections; using System.Collections.Generic; +using System.Diagnostics; using Microsoft.VisualStudio.Modeling; using Microsoft.VisualStudio.Modeling.Diagrams; -using ORMSolutions.ORMArchitect.RelationalModels.ConceptualDatabase; using ORMSolutions.ORMArchitect.Core.ObjectModel; using ORMSolutions.ORMArchitect.Framework; -using System.Collections; -using System.Diagnostics; +using ORMSolutions.ORMArchitect.Framework.Diagrams; +using ORMSolutions.ORMArchitect.RelationalModels.ConceptualDatabase; namespace ORMSolutions.ORMArchitect.Views.RelationalView { - partial class TableShape + partial class TableShape : IRecognizedSharedPresentationType { #region Customize Appearance /// <summary> @@ -329,6 +330,25 @@ } #endif // CUSTOMSORT #endregion // Customize Column Order + #region IRecognizedSharedPresentationType Implementation + /// <summary> + /// Allow 'select on diagram' to work with other relational shape models + /// </summary> + protected static string SharedPresentationTypeKey + { + get + { + return "RelationalTableShape"; + } + } + string IRecognizedSharedPresentationType.SharedPresentationTypeKey + { + get + { + return SharedPresentationTypeKey; + } + } + #endregion // IRecognizedSharedPresentationType Implementation #region Event Management /// <summary> /// Manages <see cref="EventHandler{TEventArgs}"/>s in the <see cref="Store"/> for <see cref="TableShape"/>s. Modified: trunk/ORMModel/Framework/Diagrams/MultiShapeUtility.cs =================================================================== --- trunk/ORMModel/Framework/Diagrams/MultiShapeUtility.cs 2013-01-02 07:18:49 UTC (rev 1509) +++ trunk/ORMModel/Framework/Diagrams/MultiShapeUtility.cs 2013-01-12 07:28:20 UTC (rev 1510) @@ -1291,7 +1291,9 @@ /// Determines if a the model element backing the shape element /// is represented by a shape of the same type elsewhere in the presentation /// layer. If a derived shape displays multiple presentations, they should - /// implement the<see cref="IDisplayMultiplePresentations"/> interface. + /// implement the <see cref="IDisplayMultiplePresentations"/> interface. + /// Shapes of different types can also included if both the context and + /// target shapes implement <see cref="IRecognizedSharedPresentationType"/> /// </summary> public static bool ElementHasMultiplePresentations(ShapeElement shapeElement) { @@ -1305,10 +1307,17 @@ { Partition shapePartition = shapeElement.Partition; Type thisType = shapeElement.GetType(); + IRecognizedSharedPresentationType sharedType = shapeElement as IRecognizedSharedPresentationType; + string sharedKey = sharedType == null ? null : sharedType.SharedPresentationTypeKey; for (int i = 0; i < pelCount; ++i) { PresentationElement pel = presentationElements[i]; - if (shapeElement != pel && shapePartition == pel.Partition && thisType.IsAssignableFrom(pel.GetType())) + IRecognizedSharedPresentationType sharedPelType; + if (shapeElement != pel && + shapePartition == pel.Partition && + (sharedKey == null ? + thisType.IsAssignableFrom(pel.GetType()) : + (null != (sharedPelType = pel as IRecognizedSharedPresentationType) && sharedPelType.SharedPresentationTypeKey == sharedKey))) { return true; } @@ -1341,11 +1350,29 @@ Diagram visitedDiagram = null; Partition shapePartition = (shapeElement != null) ? shapeElement.Partition : modelElement.Partition; - Type thisType = (shapeElement != null) ? shapeElement.GetType() : typeof(ShapeElement); + Type thisType; + string sharedKey = null; + if (shapeElement != null) + { + thisType = shapeElement.GetType(); + IRecognizedSharedPresentationType sharedType; + if (null != (sharedType = shapeElement as IRecognizedSharedPresentationType)) + { + sharedKey = sharedType.SharedPresentationTypeKey; + } + } + else + { + thisType = typeof(ShapeElement); + } for (int i = 0; i < pelCount; ++i) { PresentationElement pel = presentationElements[i]; - if (shapePartition == pel.Partition && thisType.IsAssignableFrom(pel.GetType())) + IRecognizedSharedPresentationType sharedPelType; + if (shapePartition == pel.Partition && + (sharedKey == null ? + thisType.IsAssignableFrom(pel.GetType()) : + (null != (sharedPelType = pel as IRecognizedSharedPresentationType) && sharedPelType.SharedPresentationTypeKey == sharedKey))) { ShapeElement sel = pel as ShapeElement; Diagram selDiagram = sel.Diagram; @@ -1474,10 +1501,26 @@ /// than one presentation is visible. Derived shapes should /// use the <see cref="MultiShapeUtility.ElementHasMultiplePresentations"/> /// method to determine when multiple presentations should be displayed. + /// The default behavior requires that the diagram types be exactly the + /// same. To match shapes across different diagram types, both diagram + /// types should also implement <see cref="IRecognizedSharedPresentationType"/>, + /// which derives from this interface. /// </summary> public interface IDisplayMultiplePresentations { // No methods } + /// <summary> + /// An extension to <see cref="IDisplayMultiplePresentations"/> to allow shapes of + /// different types to be included in the 'Select on Diagram' list. All shared types + /// must returned the same type key to enable cross-navigation. + /// </summary> + public interface IRecognizedSharedPresentationType : IDisplayMultiplePresentations + { + /// <summary> + /// Return a string indicating a named type + /// </summary> + string SharedPresentationTypeKey { get;} + } #endregion //Interfaces } Modified: trunk/Setup/Readme.htm =================================================================== --- trunk/Setup/Readme.htm 2013-01-02 07:18:49 UTC (rev 1509) +++ trunk/Setup/Readme.htm 2013-01-12 07:28:20 UTC (rev 1510) @@ -3,7 +3,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"/> -<title>NORMA December 2012 CTP Readme</title> +<title>NORMA January 2013 CTP Readme</title> <style type="text/css"> .new {font-size:x-small; background-color:Gold; color:Blue; } li {padding-bottom: 3px;} @@ -12,9 +12,9 @@ <body> -<p><b><a id="The Top" style="font-family:Verdana;font-size:medium">NORMA December 2012 CTP Readme</a> </b></p> +<p><b><a id="The Top" style="font-family:Verdana;font-size:medium">NORMA January 2013 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 2012 release adds Visual Studio 2012 support, new constraint connections between a subtyping relationship and normal roles, some enhancements to disjunctive mandatory and external uniqueness verbalization patterns, native SQL Server data type handling, and other bug fixes. See detailed change notes below for specifics.<br/><br/> +The January 2013 release adds Visual Studio 2012 support, new constraint connections between a subtyping relationship and normal roles, some enhancements to disjunctive mandatory and external uniqueness verbalization patterns, native SQL Server data type handling, and other bug fixes. See detailed change notes below for specifics.<br/><br/> </p> <h2>Contents</h2> <ul> @@ -43,12 +43,12 @@ </ul>--> <hr/> -<h2>December 2012 CTP Changes</h2> -<div>The December 2012 CTP release includes all modifications through changeset 1509. 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>January 2013 CTP Changes</h2> +<div>The January 2013 CTP release includes all modifications through changeset 1510. 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="#VerbalizedObjectTypeNameRemoveSpecialCharacterDisplay 2012-12">Verbalized object type name separator character removal options</a></li> -<li><a href="#SQLServerNativeDataTypes 2012-12">SQL Server Native Data Types</a></li> -<li><a href="#ExtendedSubtypeConstraintCombinations 2012-12">Extended Subtyping Constraint Combinations</a></li> +<li><a href="#VerbalizedObjectTypeNameRemoveSpecialCharacterDisplay 2013-01">Verbalized object type name separator character removal options</a></li> +<li><a href="#SQLServerNativeDataTypes 2013-01">SQL Server Native Data Types</a></li> +<li><a href="#ExtendedSubtypeConstraintCombinations 2013-01">Extended Subtyping Constraint Combinations</a></li> <li>Other Features: <ol> @@ -598,7 +598,7 @@ The <strong>Possible Populations</strong> option has replaced the <strong>Verbalization Default Constraint</strong> option in the <em>Verbalization</em> section of the <em>ORM Designer</em> tab on the <em>Options</em> page (available on the <em>Tools</em> menu). This option now applies to the possible populations of spanning internal uniqueness constraints in addition to many-to-one binary fact types. </li> <li> -<a id="VerbalizedObjectTypeNameRemoveSpecialCharacterDisplay 2012-12" class="new" title="October 2012 CTP: Verbalized object type name separator character removal options">2012-12</a> +<a id="VerbalizedObjectTypeNameRemoveSpecialCharacterDisplay 2013-01" class="new" title="January 2013 CTP: Verbalized object type name separator character removal options">2013-01</a> As an enhancement to automatic name separation and casing of object type names (see <a href="#VerbalizedObjectTypeNameDisplay 2012-01">Verbalized object type name options</a>), punctuation and symbol characters are recognized in addition to upper cases and numeric characters. <ul> <li>All symbol and punctuation characters form word boundaries.</li> @@ -704,7 +704,7 @@ </ul> Designing consistent glyphs for the new combinations required some minor display modifications to published ring display: the tick mark for <em>irreflexive</em> has been moved from the bottom of the shape to directly opposite the dot, the interior circle for <em>symmetric+irreflexive</em> has been moved to the left edge of the symmetric oval and shares the left dot, and an interior tick mark has been added to <em>purely reflexive</em> to distinguish it from <em>reflexive</em> and visually indicate the <em>and no other</em> part of this ring type. </li> -<li><a id="ExtendedSubtypeConstraintCombinations 2012-12" class="new" title="December 2012 CTP: Extended Subtyping Constraint Combinations">2012-12</a> +<li><a id="ExtendedSubtypeConstraintCombinations 2013-01" class="new" title="January 2013 CTP: Extended Subtyping Constraint Combinations">2013-01</a> Selected external constraints can now be connected simultaneously to a subtyping relationship and a normal role. The following constraint combinations are supported: <ul> <li>External mandatory constraints (both inclusive and exclusive).</li> @@ -771,7 +771,7 @@ </ul> <br />Opening and saving files with the relational extensions enabled will automatically update to use the new column orders. Generated DDL will also be updated when the file is saved. </li> -<li><a id="SQLServerNativeDataTypes 2012-12" class="new" title="December 2012 CTP: SQL Server Native Data Types">2012-12</a> +<li><a id="SQLServerNativeDataTypes 2013-01" class="new" title="January 2013 CTP: SQL Server Native Data Types">2013-01</a> Prior to this release, the DDL generated for SQL Server used ANSI standard data type names, but these are not supported by default in SQL Server 2012. The default has now been changed to use native SQL Server data type names. The generator that produces ANSI data types is still included. To use the ANSI types, expand the SQL_SQLServer node in the <em>ORM Generator Settings</em> dialog and choose <em>DDIL to SQL Server (ANSI Types)</em> instead of the default <em>DDIL to SQL Server</em>. <br />You will need to open and save a model file to see the new data types, or right-click the .ORM file in the Solution Explorer and choose the 'Run Custom Tool' menu item. </li> Modified: trunk/VersionGenerator.exe.config =================================================================== --- trunk/VersionGenerator.exe.config 2013-01-02 07:18:49 UTC (rev 1509) +++ trunk/VersionGenerator.exe.config 2013-01-12 07:28:20 UTC (rev 1510) @@ -2,7 +2,7 @@ <configuration> <appSettings> <add key="RevisionStartYearMonth" value="2006-01"/> - <add key="ReleaseYearMonth" value="2012-12"/> + <add key="ReleaseYearMonth" value="2013-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...> - 2013-02-21 23:40:47
|
Revision: 1512 http://orm.svn.sourceforge.net/orm/?rev=1512&view=rev Author: mcurland Date: 2013-02-21 23:40:39 +0000 (Thu, 21 Feb 2013) Log Message: ----------- Fix null reference exception doing non-customized name generation when initially turning on relational model. Fixes problem in [1511]. Modified Paths: -------------- trunk/ORMModel/ShapeModel/ORMDiagram.resx trunk/RelationalModel/OialDcilBridge/NameGeneration.cs Modified: trunk/ORMModel/ShapeModel/ORMDiagram.resx =================================================================== --- trunk/ORMModel/ShapeModel/ORMDiagram.resx 2013-02-20 04:50:30 UTC (rev 1511) +++ trunk/ORMModel/ShapeModel/ORMDiagram.resx 2013-02-21 23:40:39 UTC (rev 1512) @@ -536,7 +536,7 @@ <comment xml:space="preserve">The message displayed if a selected item cannot be located in the model browser.</comment> </data> <data name="MessageBox.RevertExtensions.Message"> - <value xml:space="preserve">Restoring previous model state, loading new extensions faileds with exception:
</value> + <value xml:space="preserve">Restoring previous model state, loading new extensions failed with exception:
</value> <comment xml:space="preserve">The header for the message displayed if a set of extensions fails to correctly reload.</comment> </data> <data name="MessageBox.ImpliedInternalUniquenessConstraint.Message"> Modified: trunk/RelationalModel/OialDcilBridge/NameGeneration.cs =================================================================== --- trunk/RelationalModel/OialDcilBridge/NameGeneration.cs 2013-02-20 04:50:30 UTC (rev 1511) +++ trunk/RelationalModel/OialDcilBridge/NameGeneration.cs 2013-02-21 23:40:39 UTC (rev 1512) @@ -166,17 +166,15 @@ public static void GenerateAllNames(Schema schema, SchemaCustomization customization) { // Verify the schema name - string customSchemaName = customization.CustomizedSchemaName; - if (customSchemaName == null) + AbstractionModel abstraction; + string customSchemaName; + if (null != (customSchemaName = + ((null == customization || + null == (customSchemaName = customization.CustomizedSchemaName)) && + null != (abstraction = SchemaIsForAbstractionModel.GetAbstractionModel(schema))) ? + abstraction.Name : + null)) { - AbstractionModel abstraction; - if (null != (abstraction = SchemaIsForAbstractionModel.GetAbstractionModel(schema))) - { - customSchemaName = abstraction.Name; - } - } - if (customSchemaName != null) - { schema.Name = customSchemaName; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mcu...@us...> - 2013-05-17 23:24:37
|
Revision: 1517 http://orm.svn.sourceforge.net/orm/?rev=1517&view=rev Author: mcurland Date: 2013-05-17 23:23:44 +0000 (Fri, 17 May 2013) Log Message: ----------- * Fix crash with tooltip timers. Shape deletion after a tooltip timer begins but before it fires crashes VS and results in data loss. * Introduce nested 'and' and 'or' blocks in role path verbalization using 'where' instead of 'and'. * Use parentheses around all negated path verbalization expressions, 'it is not true that (...)'. This reduces confusion with nested expressions. This is likely to be relaxed in the future so that simple single clause negations are not parenthesized. * Remove some vertical whitespace from the relational view table header. * Updated version to May 2013 in preparation for public release. refs #193 Modified Paths: -------------- trunk/AlternateViews/RelationalView/GeneratedCode/Shapes.VS2010.cs trunk/AlternateViews/RelationalView/GeneratedCode/Shapes.cs trunk/AlternateViews/RelationalView/RelationalShape.dsl trunk/ORMModel/ObjectModel/ObjectType.cs trunk/ORMModel/ObjectModel/VerbalizationCoreSnippets/VerbalizationCoreSnippets.xml trunk/ORMModel/ObjectModel/VerbalizationCoreSnippetsDocumentation.html trunk/ORMModel/ObjectModel/VerbalizationDocumentation.xml trunk/ORMModel/ObjectModel/VerbalizationGenerator.cs trunk/ORMModel/ShapeModel/ExternalConstraintShape.cs trunk/ORMModel/ShapeModel/FactTypeShape.cs trunk/ORMModel/ShapeModel/ObjectTypeShape.cs trunk/ORMModel/ShapeModel/ValueRangeShape.cs trunk/Setup/Readme.htm trunk/VersionGenerator.exe.config Modified: trunk/AlternateViews/RelationalView/GeneratedCode/Shapes.VS2010.cs =================================================================== --- trunk/AlternateViews/RelationalView/GeneratedCode/Shapes.VS2010.cs 2013-04-23 22:04:54 UTC (rev 1516) +++ trunk/AlternateViews/RelationalView/GeneratedCode/Shapes.VS2010.cs 2013-05-17 23:23:44 UTC (rev 1517) @@ -138,7 +138,7 @@ { get { - return new DslDiagrams::SizeD(1, 0.3); + return new DslDiagrams::SizeD(1, 0.25); } } #endregion Modified: trunk/AlternateViews/RelationalView/GeneratedCode/Shapes.cs =================================================================== --- trunk/AlternateViews/RelationalView/GeneratedCode/Shapes.cs 2013-04-23 22:04:54 UTC (rev 1516) +++ trunk/AlternateViews/RelationalView/GeneratedCode/Shapes.cs 2013-05-17 23:23:44 UTC (rev 1517) @@ -136,7 +136,7 @@ { get { - return new DslDiagrams::SizeD(1, 0.3); + return new DslDiagrams::SizeD(1, 0.25); } } #endregion Modified: trunk/AlternateViews/RelationalView/RelationalShape.dsl =================================================================== --- trunk/AlternateViews/RelationalView/RelationalShape.dsl 2013-04-23 22:04:54 UTC (rev 1516) +++ trunk/AlternateViews/RelationalView/RelationalShape.dsl 2013-05-17 23:23:44 UTC (rev 1517) @@ -34,7 +34,7 @@ </Attributes> <Shapes> - <CompartmentShape Name="TableShape" Id="50DABFCD-909C-418A-8895-172AADAAD4FB" Namespace="ORMSolutions.ORMArchitect.Views.RelationalView" GeneratesDoubleDerived="true" InitialHeight="0.3" InitialWidth="1" OutlineThickness="0.015625" AccessModifier="Assembly"> + <CompartmentShape Name="TableShape" Id="50DABFCD-909C-418A-8895-172AADAAD4FB" Namespace="ORMSolutions.ORMArchitect.Views.RelationalView" GeneratesDoubleDerived="true" InitialHeight="0.25" InitialWidth="1" OutlineThickness="0.015625" AccessModifier="Assembly"> <Attributes> <ClrAttribute Name="global::System.ComponentModel.TypeDescriptionProvider"> <Parameters> Modified: trunk/ORMModel/ObjectModel/ObjectType.cs =================================================================== --- trunk/ORMModel/ObjectModel/ObjectType.cs 2013-04-23 22:04:54 UTC (rev 1516) +++ trunk/ORMModel/ObjectModel/ObjectType.cs 2013-05-17 23:23:44 UTC (rev 1517) @@ -1757,7 +1757,7 @@ if (!WalkSupertypesForNearestCompatibleTypes(typeNodes, passedExclusions, currentObjectType, currentRoleIndex)) { // Exclusion checking failed, get out. - return null; + return EmptyArray; } ++expectedVisitCount; } Modified: trunk/ORMModel/ObjectModel/VerbalizationCoreSnippets/VerbalizationCoreSnippets.xml =================================================================== --- trunk/ORMModel/ObjectModel/VerbalizationCoreSnippets/VerbalizationCoreSnippets.xml 2013-04-23 22:04:54 UTC (rev 1516) +++ trunk/ORMModel/ObjectModel/VerbalizationCoreSnippets/VerbalizationCoreSnippets.xml 2013-05-17 23:23:44 UTC (rev 1517) @@ -316,7 +316,7 @@ <!-- Role plath list management --> <Snippet type="RolePathListCloseOutdentSnippets"><![CDATA[ChainedListClose NegatedChainedListClose AndTailListClose AndNestedListClose NegatedAndLeadListClose NegatedAndTailListClose NegatedAndNestedListClose OrTailListClose OrNestedListClose NegatedOrLeadListClose NegatedOrTailListClose NegatedOrNestedListClose XorLeadListClose XorTailListClose XorNestedListClose NegatedXorLeadListClose NegatedXorTailListClose NegatedXorNestedListClose]]></Snippet> - <Snippet type="RolePathOutdentAwareTrailingListSnippets"><![CDATA[NegatedAndLeadListSeparator NegatedAndNestedListSeparator NegatedAndTailListSeparator NegatedOrLeadListSeparator NegatedOrNestedListSeparator NegatedOrTailListSeparator XorLeadListSeparator XorNestedListSeparator XorTailListSeparator NegatedXorLeadListSeparator NegatedXorNestedListSeparator NegatedXorTailListSeparator]]></Snippet> + <Snippet type="RolePathOutdentAwareTrailingListSnippets"><![CDATA[NegatedAndLeadListSeparator NegatedAndNestedListSeparator NegatedAndTailListSeparator NegatedOrLeadListSeparator NegatedOrNestedListSeparator NegatedOrTailListSeparator XorLeadListSeparator XorNestedListSeparator XorTailListSeparator NegatedXorLeadListSeparator NegatedXorNestedListSeparator NegatedXorTailListSeparator NegatedChainedListClose]]></Snippet> <Snippet type="ChainedListOpen"><![CDATA[<span>]]></Snippet> <Snippet type="ChainedListLocalRestrictionSeparator"><![CDATA[ <span class="quantifier">where</span> ]]></Snippet> <Snippet type="ChainedListLocalRestrictionBackReferenceSeparator"><![CDATA[ ]]></Snippet> @@ -328,12 +328,12 @@ <Snippet type="ChainedListTopLevelComplexRestrictionCollapsedLeadSeparator"><![CDATA[<br/><span class="quantifier">and</span> ]]></Snippet> <Snippet type="ChainedListCollapsedSeparator"><![CDATA[ ]]></Snippet> <Snippet type="ChainedListClose"><![CDATA[</span>]]></Snippet> - <Snippet type="NegatedChainedListOpen"><![CDATA[<span class="quantifier">it is not true that </span>]]></Snippet> - <Snippet type="NegatedChainedListClose"><![CDATA[]]></Snippet> + <Snippet type="NegatedChainedListOpen"><![CDATA[<span class="quantifier">it is not true that </span><span class="listSeparator">(</span>]]></Snippet> + <Snippet type="NegatedChainedListClose"><![CDATA[<span class="listSeparator">)</span>]]></Snippet> <Snippet type="AndLeadListOpen"><![CDATA[]]></Snippet> <Snippet type="AndLeadListSeparator"><![CDATA[<br/><span class="quantifier">and</span> ]]></Snippet> <Snippet type="AndLeadListClose"><![CDATA[]]></Snippet> - <Snippet type="AndTailListOpen"><![CDATA[<br/><span class="smallIndent"><span class="quantifier">and</span> ]]></Snippet> + <Snippet type="AndTailListOpen"><![CDATA[<br/><span class="smallIndent"><span class="quantifier">where</span> ]]></Snippet> <Snippet type="AndTailListCollapsedOpen" groupWith="AndTailListOpen"><![CDATA[<br/><span class="smallIndent">]]></Snippet> <Snippet type="AndTailListSeparator"><![CDATA[<br/><span class="quantifier">and</span> ]]></Snippet> <Snippet type="AndTailListClose"><![CDATA[</span>]]></Snippet> @@ -355,7 +355,7 @@ <Snippet type="OrLeadListOpen"><![CDATA[]]></Snippet> <Snippet type="OrLeadListSeparator"><![CDATA[<br/><span class="quantifier">or</span> ]]></Snippet> <Snippet type="OrLeadListClose"><![CDATA[]]></Snippet> - <Snippet type="OrTailListOpen"><![CDATA[<br/><span class="smallIndent"><span class="quantifier">and</span> ]]></Snippet> + <Snippet type="OrTailListOpen"><![CDATA[<br/><span class="smallIndent"><span class="quantifier">where</span> ]]></Snippet> <Snippet type="OrTailListCollapsedOpen" groupWith="OrTailListOpen"><![CDATA[<br/><span class="smallIndent">]]></Snippet> <Snippet type="OrTailListSeparator"><![CDATA[<br/><span class="quantifier">or</span> ]]></Snippet> <Snippet type="OrTailListClose"><![CDATA[</span>]]></Snippet> Modified: trunk/ORMModel/ObjectModel/VerbalizationCoreSnippetsDocumentation.html =================================================================== --- trunk/ORMModel/ObjectModel/VerbalizationCoreSnippetsDocumentation.html 2013-04-23 22:04:54 UTC (rev 1516) +++ trunk/ORMModel/ObjectModel/VerbalizationCoreSnippetsDocumentation.html 2013-05-17 23:23:44 UTC (rev 1517) @@ -1544,7 +1544,7 @@ <div class="snippetUnformattedText"> <span class="reportItem">Unformatted version: </span> <div class="unformattedSnippet"> - <pre class="unformattedSnippetDecorator">and </pre> + <pre class="unformattedSnippetDecorator">where </pre> </div> </div> </div> @@ -5782,7 +5782,7 @@ <div class="snippetUnformattedText"> <span class="reportItem">Unformatted version: </span> <div class="unformattedSnippet"> - <strong>Not Available</strong> + <pre class="unformattedSnippetDecorator">)</pre> </div> </div> </div> @@ -5799,7 +5799,7 @@ <div class="snippetUnformattedText"> <span class="reportItem">Unformatted version: </span> <div class="unformattedSnippet"> - <pre class="unformattedSnippetDecorator">it is not true that </pre> + <pre class="unformattedSnippetDecorator">it is not true that (</pre> </div> </div> </div> @@ -6706,7 +6706,7 @@ <div class="snippetUnformattedText"> <span class="reportItem">Unformatted version: </span> <div class="unformattedSnippet"> - <pre class="unformattedSnippetDecorator">and </pre> + <pre class="unformattedSnippetDecorator">where </pre> </div> </div> </div> @@ -7322,7 +7322,7 @@ <div class="snippetUnformattedText"> <span class="reportItem">Unformatted version: </span> <div class="unformattedSnippet"> - <pre class="unformattedSnippetDecorator">NegatedAndLeadListSeparator NegatedAndNestedListSeparator NegatedAndTailListSeparator NegatedOrLeadListSeparator NegatedOrNestedListSeparator NegatedOrTailListSeparator XorLeadListSeparator XorNestedListSeparator XorTailListSeparator NegatedXorLeadListSeparator NegatedXorNestedListSeparator NegatedXorTailListSeparator</pre> + <pre class="unformattedSnippetDecorator">NegatedAndLeadListSeparator NegatedAndNestedListSeparator NegatedAndTailListSeparator NegatedOrLeadListSeparator NegatedOrNestedListSeparator NegatedOrTailListSeparator XorLeadListSeparator XorNestedListSeparator XorTailListSeparator NegatedXorLeadListSeparator NegatedXorNestedListSeparator NegatedXorTailListSeparator NegatedChainedListClose</pre> </div> </div> </div> Modified: trunk/ORMModel/ObjectModel/VerbalizationDocumentation.xml =================================================================== --- trunk/ORMModel/ObjectModel/VerbalizationDocumentation.xml 2013-04-23 22:04:54 UTC (rev 1516) +++ trunk/ORMModel/ObjectModel/VerbalizationDocumentation.xml 2013-05-17 23:23:44 UTC (rev 1517) @@ -146,7 +146,7 @@ </snippet> <snippet name="AndTailListOpen" replacementCount="0"> <statement></statement> - <unformattedSnippet>and </unformattedSnippet> + <unformattedSnippet>where </unformattedSnippet> <contains /> <containedIn /> <usedBy /> @@ -1915,14 +1915,14 @@ </snippet> <snippet name="NegatedChainedListClose" replacementCount="0"> <statement></statement> - <unformattedSnippet></unformattedSnippet> + <unformattedSnippet>)</unformattedSnippet> <contains /> <containedIn /> <usedBy /> </snippet> <snippet name="NegatedChainedListOpen" replacementCount="0"> <statement></statement> - <unformattedSnippet>it is not true that </unformattedSnippet> + <unformattedSnippet>it is not true that (</unformattedSnippet> <contains /> <containedIn /> <usedBy /> @@ -2296,7 +2296,7 @@ </snippet> <snippet name="OrTailListOpen" replacementCount="0"> <statement></statement> - <unformattedSnippet>and </unformattedSnippet> + <unformattedSnippet>where </unformattedSnippet> <contains /> <containedIn /> <usedBy /> @@ -2563,7 +2563,7 @@ <statement>Description: A space separated list of list separators and close elements that must be placed before any active trailing outdent snippets. Format: NegatedAndLeadListSeparator NegatedAndNestedListSeparator NegatedAndTailListSeparator NegatedOrLeadListSeparator NegatedOrNestedListSeparator NegatedOrTailListSeparator XorLeadListSeparator XorNestedListSeparator XorTailListSeparator NegatedXorLeadListSeparator NegatedXorNestedListSeparator NegatedXorTailListSeparator</statement> - <unformattedSnippet>NegatedAndLeadListSeparator NegatedAndNestedListSeparator NegatedAndTailListSeparator NegatedOrLeadListSeparator NegatedOrNestedListSeparator NegatedOrTailListSeparator XorLeadListSeparator XorNestedListSeparator XorTailListSeparator NegatedXorLeadListSeparator NegatedXorNestedListSeparator NegatedXorTailListSeparator</unformattedSnippet> + <unformattedSnippet>NegatedAndLeadListSeparator NegatedAndNestedListSeparator NegatedAndTailListSeparator NegatedOrLeadListSeparator NegatedOrNestedListSeparator NegatedOrTailListSeparator XorLeadListSeparator XorNestedListSeparator XorTailListSeparator NegatedXorLeadListSeparator NegatedXorNestedListSeparator NegatedXorTailListSeparator NegatedChainedListClose</unformattedSnippet> <contains /> <containedIn /> <usedBy /> Modified: trunk/ORMModel/ObjectModel/VerbalizationGenerator.cs =================================================================== --- trunk/ORMModel/ObjectModel/VerbalizationGenerator.cs 2013-04-23 22:04:54 UTC (rev 1516) +++ trunk/ORMModel/ObjectModel/VerbalizationGenerator.cs 2013-05-17 23:23:44 UTC (rev 1517) @@ -1121,7 +1121,7 @@ "<span>", @"</span><br/><span class=""smallIndent""><span class=""quantifier"">and</span> ", "</span>", - @"<br/><span class=""smallIndent""><span class=""quantifier"">and</span> ", + @"<br/><span class=""smallIndent""><span class=""quantifier"">where</span> ", @"<br/><span class=""smallIndent"">", @"<br/><span class=""quantifier"">and</span> ", @"<span class=""quantifier"">at most one</span> {0}", @@ -1276,8 +1276,8 @@ @"<span class=""quantifier"">at least one of the following is <em>false:</em></span><br/><span class=""smallIndent"">", @"<span class=""quantifier"">at least one of the following is <em>false:</em></span><br/><span class=""smallIndent"">", @"<span class=""listSeparator"">;</span><br/>", - "", - @"<span class=""quantifier"">it is not true that </span>", + @"<span class=""listSeparator"">)</span>", + @"<span class=""quantifier"">it is not true that </span><span class=""listSeparator"">(</span>", "</span>", @"<span class=""quantifier"">all of the following are <em>false:</em></span><br/><span class=""smallIndent"">", @"<span class=""listSeparator"">;</span><br/>", @@ -1323,7 +1323,7 @@ "<span>", @"</span><br/><span class=""smallIndent""><span class=""quantifier"">or</span> ", "</span>", - @"<br/><span class=""smallIndent""><span class=""quantifier"">and</span> ", + @"<br/><span class=""smallIndent""><span class=""quantifier"">where</span> ", @"<br/><span class=""smallIndent"">", @"<br/><span class=""quantifier"">or</span> ", @"<span class=""quantifier""><sup style=""font-size:smaller;"">+</sup></span>{0} <span class=""quantifier"">if</span><br/>{1}<br/>", @@ -1352,7 +1352,7 @@ "And Or Chain", "!And !Or Xor !Xor", "ChainedListClose NegatedChainedListClose AndTailListClose AndNestedListClose NegatedAndLeadListClose NegatedAndTailListClose NegatedAndNestedListClose OrTailListClose OrNestedListClose NegatedOrLeadListClose NegatedOrTailListClose NegatedOrNestedListClose XorLeadListClose XorTailListClose XorNestedListClose NegatedXorLeadListClose NegatedXorTailListClose NegatedXorNestedListClose", - "NegatedAndLeadListSeparator NegatedAndNestedListSeparator NegatedAndTailListSeparator NegatedOrLeadListSeparator NegatedOrNestedListSeparator NegatedOrTailListSeparator XorLeadListSeparator XorNestedListSeparator XorTailListSeparator NegatedXorLeadListSeparator NegatedXorNestedListSeparator NegatedXorTailListSeparator", + "NegatedAndLeadListSeparator NegatedAndNestedListSeparator NegatedAndTailListSeparator NegatedOrLeadListSeparator NegatedOrNestedListSeparator NegatedOrTailListSeparator XorLeadListSeparator XorNestedListSeparator XorTailListSeparator NegatedXorLeadListSeparator NegatedXorNestedListSeparator NegatedXorTailListSeparator NegatedChainedListClose", @"{0}<span class=""logicalOperator""> is not </span>{1}", "{0}", "", @@ -1459,7 +1459,7 @@ "<span>", @"</span><br/><span class=""smallIndent""><span class=""quantifier"">and</span> ", "</span>", - @"<br/><span class=""smallIndent""><span class=""quantifier"">and</span> ", + @"<br/><span class=""smallIndent""><span class=""quantifier"">where</span> ", @"<br/><span class=""smallIndent"">", @"<br/><span class=""quantifier"">and</span> ", @"<span class=""quantifier"">at most one</span> {0}", @@ -1614,8 +1614,8 @@ @"<span class=""quantifier"">at least one of the following is <em>false:</em></span><br/><span class=""smallIndent"">", @"<span class=""quantifier"">at least one of the following is <em>false:</em></span><br/><span class=""smallIndent"">", @"<span class=""listSeparator"">;</span><br/>", - "", - @"<span class=""quantifier"">it is not true that </span>", + @"<span class=""listSeparator"">)</span>", + @"<span class=""quantifier"">it is not true that </span><span class=""listSeparator"">(</span>", "</span>", @"<span class=""quantifier"">all of the following are <em>false:</em></span><br/><span class=""smallIndent"">", @"<span class=""listSeparator"">;</span><br/>", @@ -1661,7 +1661,7 @@ "<span>", @"</span><br/><span class=""smallIndent""><span class=""quantifier"">or</span> ", "</span>", - @"<br/><span class=""smallIndent""><span class=""quantifier"">and</span> ", + @"<br/><span class=""smallIndent""><span class=""quantifier"">where</span> ", @"<br/><span class=""smallIndent"">", @"<br/><span class=""quantifier"">or</span> ", @"<span class=""quantifier""><sup style=""font-size:smaller;"">+</sup></span>{0} <span class=""quantifier"">if</span><br/>{1}<br/>", @@ -1690,7 +1690,7 @@ "And Or Chain", "!And !Or Xor !Xor", "ChainedListClose NegatedChainedListClose AndTailListClose AndNestedListClose NegatedAndLeadListClose NegatedAndTailListClose NegatedAndNestedListClose OrTailListClose OrNestedListClose NegatedOrLeadListClose NegatedOrTailListClose NegatedOrNestedListClose XorLeadListClose XorTailListClose XorNestedListClose NegatedXorLeadListClose NegatedXorTailListClose NegatedXorNestedListClose", - "NegatedAndLeadListSeparator NegatedAndNestedListSeparator NegatedAndTailListSeparator NegatedOrLeadListSeparator NegatedOrNestedListSeparator NegatedOrTailListSeparator XorLeadListSeparator XorNestedListSeparator XorTailListSeparator NegatedXorLeadListSeparator NegatedXorNestedListSeparator NegatedXorTailListSeparator", + "NegatedAndLeadListSeparator NegatedAndNestedListSeparator NegatedAndTailListSeparator NegatedOrLeadListSeparator NegatedOrNestedListSeparator NegatedOrTailListSeparator XorLeadListSeparator XorNestedListSeparator XorTailListSeparator NegatedXorLeadListSeparator NegatedXorNestedListSeparator NegatedXorTailListSeparator NegatedChainedListClose", @"{0}<span class=""logicalOperator""> is not </span>{1}", "{0}", "", @@ -1797,7 +1797,7 @@ "<span>", @"</span><br/><span class=""smallIndent""><span class=""quantifier"">and</span> ", "</span>", - @"<br/><span class=""smallIndent""><span class=""quantifier"">and</span> ", + @"<br/><span class=""smallIndent""><span class=""quantifier"">where</span> ", @"<br/><span class=""smallIndent"">", @"<br/><span class=""quantifier"">and</span> ", @"<span class=""quantifier"">at most one</span> {0}", @@ -1952,8 +1952,8 @@ @"<span class=""quantifier"">at least one of the following is <em>false:</em></span><br/><span class=""smallIndent"">", @"<span class=""quantifier"">at least one of the following is <em>false:</em></span><br/><span class=""smallIndent"">", @"<span class=""listSeparator"">;</span><br/>", - "", - @"<span class=""quantifier"">it is not true that </span>", + @"<span class=""listSeparator"">)</span>", + @"<span class=""quantifier"">it is not true that </span><span class=""listSeparator"">(</span>", "</span>", @"<span class=""quantifier"">all of the following are <em>false:</em></span><br/><span class=""smallIndent"">", @"<span class=""listSeparator"">;</span><br/>", @@ -1999,7 +1999,7 @@ "<span>", @"</span><br/><span class=""smallIndent""><span class=""quantifier"">or</span> ", "</span>", - @"<br/><span class=""smallIndent""><span class=""quantifier"">and</span> ", + @"<br/><span class=""smallIndent""><span class=""quantifier"">where</span> ", @"<br/><span class=""smallIndent"">", @"<br/><span class=""quantifier"">or</span> ", @"<span class=""quantifier""><sup style=""font-size:smaller;"">+</sup></span>{0} <span class=""quantifier"">if</span><br/>{1}<br/>", @@ -2028,7 +2028,7 @@ "And Or Chain", "!And !Or Xor !Xor", "ChainedListClose NegatedChainedListClose AndTailListClose AndNestedListClose NegatedAndLeadListClose NegatedAndTailListClose NegatedAndNestedListClose OrTailListClose OrNestedListClose NegatedOrLeadListClose NegatedOrTailListClose NegatedOrNestedListClose XorLeadListClose XorTailListClose XorNestedListClose NegatedXorLeadListClose NegatedXorTailListClose NegatedXorNestedListClose", - "NegatedAndLeadListSeparator NegatedAndNestedListSeparator NegatedAndTailListSeparator NegatedOrLeadListSeparator NegatedOrNestedListSeparator NegatedOrTailListSeparator XorLeadListSeparator XorNestedListSeparator XorTailListSeparator NegatedXorLeadListSeparator NegatedXorNestedListSeparator NegatedXorTailListSeparator", + "NegatedAndLeadListSeparator NegatedAndNestedListSeparator NegatedAndTailListSeparator NegatedOrLeadListSeparator NegatedOrNestedListSeparator NegatedOrTailListSeparator XorLeadListSeparator XorNestedListSeparator XorTailListSeparator NegatedXorLeadListSeparator NegatedXorNestedListSeparator NegatedXorTailListSeparator NegatedChainedListClose", @"{0}<span class=""logicalOperator""> is not </span>{1}", "{0}", "", @@ -2135,7 +2135,7 @@ "<span>", @"</span><br/><span class=""smallIndent""><span class=""quantifier"">and</span> ", "</span>", - @"<br/><span class=""smallIndent""><span class=""quantifier"">and</span> ", + @"<br/><span class=""smallIndent""><span class=""quantifier"">where</span> ", @"<br/><span class=""smallIndent"">", @"<br/><span class=""quantifier"">and</span> ", @"<span class=""quantifier"">at most one</span> {0}", @@ -2290,8 +2290,8 @@ @"<span class=""quantifier"">at least one of the following is <em>false:</em></span><br/><span class=""smallIndent"">", @"<span class=""quantifier"">at least one of the following is <em>false:</em></span><br/><span class=""smallIndent"">", @"<span class=""listSeparator"">;</span><br/>", - "", - @"<span class=""quantifier"">it is not true that </span>", + @"<span class=""listSeparator"">)</span>", + @"<span class=""quantifier"">it is not true that </span><span class=""listSeparator"">(</span>", "</span>", @"<span class=""quantifier"">all of the following are <em>false:</em></span><br/><span class=""smallIndent"">", @"<span class=""listSeparator"">;</span><br/>", @@ -2337,7 +2337,7 @@ "<span>", @"</span><br/><span class=""smallIndent""><span class=""quantifier"">or</span> ", "</span>", - @"<br/><span class=""smallIndent""><span class=""quantifier"">and</span> ", + @"<br/><span class=""smallIndent""><span class=""quantifier"">where</span> ", @"<br/><span class=""smallIndent"">", @"<br/><span class=""quantifier"">or</span> ", @"<span class=""quantifier""><sup style=""font-size:smaller;"">+</sup></span>{0} <span class=""quantifier"">if</span><br/>{1}<br/>", @@ -2366,7 +2366,7 @@ "And Or Chain", "!And !Or Xor !Xor", "ChainedListClose NegatedChainedListClose AndTailListClose AndNestedListClose NegatedAndLeadListClose NegatedAndTailListClose NegatedAndNestedListClose OrTailListClose OrNestedListClose NegatedOrLeadListClose NegatedOrTailListClose NegatedOrNestedListClose XorLeadListClose XorTailListClose XorNestedListClose NegatedXorLeadListClose NegatedXorTailListClose NegatedXorNestedListClose", - "NegatedAndLeadListSeparator NegatedAndNestedListSeparator NegatedAndTailListSeparator NegatedOrLeadListSeparator NegatedOrNestedListSeparator NegatedOrTailListSeparator XorLeadListSeparator XorNestedListSeparator XorTailListSeparator NegatedXorLeadListSeparator NegatedXorNestedListSeparator NegatedXorTailListSeparator", + "NegatedAndLeadListSeparator NegatedAndNestedListSeparator NegatedAndTailListSeparator NegatedOrLeadListSeparator NegatedOrNestedListSeparator NegatedOrTailListSeparator XorLeadListSeparator XorNestedListSeparator XorTailListSeparator NegatedXorLeadListSeparator NegatedXorNestedListSeparator NegatedXorTailListSeparator NegatedChainedListClose", @"{0}<span class=""logicalOperator""> is not </span>{1}", "{0}", "", Modified: trunk/ORMModel/ShapeModel/ExternalConstraintShape.cs =================================================================== --- trunk/ORMModel/ShapeModel/ExternalConstraintShape.cs 2013-04-23 22:04:54 UTC (rev 1516) +++ trunk/ORMModel/ShapeModel/ExternalConstraintShape.cs 2013-05-17 23:23:44 UTC (rev 1517) @@ -601,11 +601,15 @@ bool rVal = false; Role r; IConstraint constraint = AssociatedConstraint; - if (mel == constraint) + if (constraint == null) { + rVal = false; + } + else if (mel == constraint) + { rVal = true; } - else if (constraint != null && null != (r = mel as Role)) + else if (null != (r = mel as Role)) { switch (constraint.ConstraintStorageStyle) { Modified: trunk/ORMModel/ShapeModel/FactTypeShape.cs =================================================================== --- trunk/ORMModel/ShapeModel/FactTypeShape.cs 2013-04-23 22:04:54 UTC (rev 1516) +++ trunk/ORMModel/ShapeModel/FactTypeShape.cs 2013-05-17 23:23:44 UTC (rev 1517) @@ -3953,6 +3953,12 @@ /// </summary> public override string GetToolTipText(DiagramItem item) { + if (IsDeleted) + { + // Protect against a timing issue. A delete can happen after the + // tooltip timer starts but before this fires. + return null; + } string retVal = null; ShapeSubField subField = item.SubField; RoleSubField roleField; @@ -3994,11 +4000,13 @@ } } } + FactType factType; if (retVal == null && OptionsPage.CurrentDisplayDefinitionTooltips && - (subField == null || roleField != null)) + (subField == null || roleField != null) && + null != (factType = AssociatedFactType)) { - retVal = AssociatedFactType.DefinitionText; + retVal = factType.DefinitionText; if (retVal.Length == 0) { retVal = null; @@ -7034,9 +7042,13 @@ public override string GetToolTipText(DiagramItem item) { string retVal = null; - // Show for all shapes and fields in item - retVal = AssociatedObjectType.DefinitionText; - if (retVal.Length == 0) + ObjectType objectType; + // Show for all shapes and fields in item. + // Make sure that the shape has not been destroyed between the tooltip text + // timer starting and firing. + if (!IsDeleted && + null != (objectType = AssociatedObjectType) && + (retVal = objectType.DefinitionText).Length == 0) { retVal = null; } Modified: trunk/ORMModel/ShapeModel/ObjectTypeShape.cs =================================================================== --- trunk/ORMModel/ShapeModel/ObjectTypeShape.cs 2013-04-23 22:04:54 UTC (rev 1516) +++ trunk/ORMModel/ShapeModel/ObjectTypeShape.cs 2013-05-17 23:23:44 UTC (rev 1517) @@ -430,9 +430,13 @@ public override string GetToolTipText(DiagramItem item) { string retVal = null; - // Show for all shapes and fields in item - retVal = AssociatedObjectType.DefinitionText; - if (retVal.Length == 0) + ObjectType objectType; + // Show for all shapes and fields in item. + // Make sure that the shape has not been destroyed between the tooltip text + // timer starting and firing. + if (!IsDeleted && + null != (objectType = AssociatedObjectType) && + (retVal = objectType.DefinitionText).Length == 0) { retVal = null; } Modified: trunk/ORMModel/ShapeModel/ValueRangeShape.cs =================================================================== --- trunk/ORMModel/ShapeModel/ValueRangeShape.cs 2013-04-23 22:04:54 UTC (rev 1516) +++ trunk/ORMModel/ShapeModel/ValueRangeShape.cs 2013-05-17 23:23:44 UTC (rev 1517) @@ -229,7 +229,8 @@ { string retVal = null; ValueConstraint constraint; - if (null != (constraint = AssociatedValueConstraint)) + if (!IsDeleted && + null != (constraint = AssociatedValueConstraint)) { retVal = constraint.GetDisplayText(MaximumDisplayedColumns, 0); if (string.IsNullOrEmpty(retVal)) Modified: trunk/Setup/Readme.htm =================================================================== --- trunk/Setup/Readme.htm 2013-04-23 22:04:54 UTC (rev 1516) +++ trunk/Setup/Readme.htm 2013-05-17 23:23:44 UTC (rev 1517) @@ -3,7 +3,7 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"/> -<title>NORMA January 2013 CTP Readme</title> +<title>NORMA May 2013 CTP Readme</title> <style type="text/css"> .new {font-size:x-small; background-color:Gold; color:Blue; } li {padding-bottom: 3px;} @@ -12,9 +12,9 @@ <body> -<p><b><a id="The Top" style="font-family:Verdana;font-size:medium">NORMA January 2013 CTP Readme</a> </b></p> +<p><b><a id="The Top" style="font-family:Verdana;font-size:medium">NORMA May 2013 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 2013 release adds Visual Studio 2012 support, new constraint connections between a subtyping relationship and normal roles, some enhancements to disjunctive mandatory and external uniqueness verbalization patterns, native SQL Server data type handling, and other bug fixes. See detailed change notes below for specifics.<br/><br/> +The May 2013 release is a bug fix release with no major feature changes. See detailed change notes below for specifics.<br/><br/> </p> <h2>Contents</h2> <ul> @@ -43,8 +43,31 @@ </ul>--> <hr/> +<h2>May 2013 CTP Changes</h2> +<div>The May 2013 CTP release includes all modifications through changeset 1517. 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>Display both ModelName and DiagramName properties when an ORM diagram is selected. This removes ambiguity and makes it easier to edit the diagram names.</li> +<li>Enable persistent customization of generated relational schema names. Extends support for persistent customization of table and column names.</li> +<li>Remove the 'Columns' header from the Relational View page and remove some vertical whitespace from the table name section.</li> +<li>Improve foreign key highlighting in the Relational View. The entire foreign key line highlights on a mouse over, making it visually easier to trace foreign key lines.</li> +</ol> +</li> +<li>Bug Fixes: +<ol> +<li>Restore missing constraints in the <em>Constraint Validation</em> page of HTML report. Internal constraints on this page displayed only the first constraint of each type, so this report page was missing most of the internal constraints in the model.</li> +<li>Compatible column validation for constraints now look for exclusion constraints across subtypes and treat these as incompatible types.</li> +<li>Modified z-order on an ORM diagram to ensure consistent display. By default, z-order is determined by shape creation order. Creating a new shape for an object type or fact type that uses an existing role connector would draw the connector behind the shape. This was especially noticable with objectified fact types, which could obscur the role player connects behind the objectified fact type shape.</li> +<li>Verbalization of disjunctive mandatory constraints over multiple roles in the same fact type and multiple role player types was incorrectly correlating unrelated variables.</li> +<li>Fixed a timing issue with shape deletion. If mouse movement started a tooltip timer on a shape that was deleted before the timer fired and the tooltip requested text, then the IDE would crash. This was hard to hit, but was not recoverable and resulted in data loss.</li> +</ol> +</li> +</ul> + +<hr/> <h2>January 2013 CTP Changes</h2> -<div>The January 2013 CTP release includes all modifications through changeset 1510. 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 2013 CTP release includes all modifications through changeset 1510.</div> <ul> <li><a href="#VerbalizedObjectTypeNameRemoveSpecialCharacterDisplay 2013-01">Verbalized object type name separator character removal options</a></li> <li><a href="#SQLServerNativeDataTypes 2013-01">SQL Server Native Data Types</a></li> @@ -86,7 +109,7 @@ <hr/> <h2>April 2012 CTP Changes</h2> -<div>The April 2012 CTP release includes all modifications through changeset 1487. 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 April 2012 CTP release includes all modifications through changeset 1487.</div> <ul> <li><a href="#VerbalizePossiblePopulationsOption 2012-04">Verbalize possible populations option</a> </li> <li>Other Features: Modified: trunk/VersionGenerator.exe.config =================================================================== --- trunk/VersionGenerator.exe.config 2013-04-23 22:04:54 UTC (rev 1516) +++ trunk/VersionGenerator.exe.config 2013-05-17 23:23:44 UTC (rev 1517) @@ -2,7 +2,7 @@ <configuration> <appSettings> <add key="RevisionStartYearMonth" value="2006-01"/> - <add key="ReleaseYearMonth" value="2013-01"/> + <add key="ReleaseYearMonth" value="2013-05"/> <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...> - 2013-05-19 05:07:33
|
Revision: 1518 http://orm.svn.sourceforge.net/orm/?rev=1518&view=rev Author: mcurland Date: 2013-05-19 05:07:26 +0000 (Sun, 19 May 2013) Log Message: ----------- * Fixed bug with subset constraint from subtype to role in simple case with no supertypes between the subtype and role. Modified Paths: -------------- trunk/ORMModel/ObjectModel/Constraint.cs trunk/Setup/Readme.htm Modified: trunk/ORMModel/ObjectModel/Constraint.cs =================================================================== --- trunk/ORMModel/ObjectModel/Constraint.cs 2013-05-17 23:23:44 UTC (rev 1517) +++ trunk/ORMModel/ObjectModel/Constraint.cs 2013-05-19 05:07:26 UTC (rev 1518) @@ -2544,9 +2544,11 @@ } } else if (subsetSupertypeRole != null && - column == 0 && - sequence == 1 && - !superTypesCache.ContainsKey(currentRolePlayer)) + column == 0 && + sequence == 1 && + populatedCaches && + populatedCachesForType != currentRolePlayer && + (superTypesCache == null || !superTypesCache.ContainsKey(currentRolePlayer))) { // Don't set if not compatible. hasSubtypeSubsetError = true; Modified: trunk/Setup/Readme.htm =================================================================== --- trunk/Setup/Readme.htm 2013-05-17 23:23:44 UTC (rev 1517) +++ trunk/Setup/Readme.htm 2013-05-19 05:07:26 UTC (rev 1518) @@ -44,7 +44,7 @@ <hr/> <h2>May 2013 CTP Changes</h2> -<div>The May 2013 CTP release includes all modifications through changeset 1517. 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 May 2013 CTP release includes all modifications through changeset 1518. 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> @@ -61,6 +61,7 @@ <li>Modified z-order on an ORM diagram to ensure consistent display. By default, z-order is determined by shape creation order. Creating a new shape for an object type or fact type that uses an existing role connector would draw the connector behind the shape. This was especially noticable with objectified fact types, which could obscur the role player connects behind the objectified fact type shape.</li> <li>Verbalization of disjunctive mandatory constraints over multiple roles in the same fact type and multiple role player types was incorrectly correlating unrelated variables.</li> <li>Fixed a timing issue with shape deletion. If mouse movement started a tooltip timer on a shape that was deleted before the timer fired and the tooltip requested text, then the IDE would crash. This was hard to hit, but was not recoverable and resulted in data loss.</li> +<li>Validating a subset constraint from a subtype to a single role crashes if the supertype hierarchy is not sufficiently complex.</li> </ol> </li> </ul> 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. |