|
From: <mcu...@us...> - 2009-04-21 00:23:26
|
Revision: 1382
http://orm.svn.sourceforge.net/orm/?rev=1382&view=rev
Author: mcurland
Date: 2009-04-21 00:23:23 +0000 (Tue, 21 Apr 2009)
Log Message:
-----------
* Deletion of a set comparison constraint role sequence is not revalidating errors, results in errors with no attached constraints and blocks file load. refs #288
* Modified build version and readme for official March 2009 release. refs #193
Modified Paths:
--------------
trunk/ORMModel/ObjectModel/Constraint.cs
trunk/Setup/Readme.htm
trunk/VersionGenerator.exe.config
Modified: trunk/ORMModel/ObjectModel/Constraint.cs
===================================================================
--- trunk/ORMModel/ObjectModel/Constraint.cs 2009-04-20 23:14:48 UTC (rev 1381)
+++ trunk/ORMModel/ObjectModel/Constraint.cs 2009-04-21 00:23:23 UTC (rev 1382)
@@ -814,7 +814,7 @@
{
FrameworkDomainModel.DelayValidateElement(this, DelayValidateCompatibleRolePlayerTypeError);
FrameworkDomainModel.DelayValidateElement(this, DelayValidateRoleSequenceCountErrors);
- FrameworkDomainModel.DelayValidateElement(this, DelayValidateConstraintPatternError);
+ DelayValidateConstraintPatternError(this);
}
void IModelErrorOwner.DelayValidateErrors()
{
@@ -2556,11 +2556,7 @@
VerifyRoleSequenceCountForRule(notifyAdded);
// VerifyRoleSequenceArityForRule(notifyAdded); // This is called by VeryRoleSequenceCountForRule
// VerifyCompatibleRolePlayerTypeForRule(notifyAdded); // This is called by VerifyRoleSequenqeArityForRule
- foreach (SetComparisonConstraintRoleSequence sequence in RoleSequenceCollection)
- {
- sequence.ValidateIntersectingConstraints(notifyAdded);
- break;
- }
+ SetComparisonConstraintRoleSequence.ValidateIntersectingConstraints(this, notifyAdded);
}
void IModelErrorOwner.ValidateErrors(INotifyElementAdded notifyAdded)
{
@@ -2843,7 +2839,7 @@
ConstraintRoleSequence sequence = link.ConstraintRoleSequence;
if (!sequence.IsDeleted)
{
- FrameworkDomainModel.DelayValidateElement(sequence, DelayValidateConstraintPatternError);
+ sequence.DelayValidatePatternError();
}
SetComparisonConstraintRoleSequence setComparisonSequence = link.ConstraintRoleSequence as SetComparisonConstraintRoleSequence;
if (setComparisonSequence != null)
@@ -2995,18 +2991,50 @@
if (!sequence.IsDeleted)
{
- FrameworkDomainModel.DelayValidateElement(sequence, DelayValidateConstraintPatternError);
+ sequence.DelayValidatePatternError();
}
}
#endregion // Rules
#region Validation
/// <summary>
+ /// Register pattern validation for this sequencye
+ /// </summary>
+ protected void DelayValidatePatternError()
+ {
+ ModelElement constraint = Constraint as ModelElement;
+ if (constraint != null)
+ {
+ FrameworkDomainModel.DelayValidateElement(constraint, DelayValidatePatternErrorForConstraint);
+ }
+ else
+ {
+ FrameworkDomainModel.DelayValidateElement(this, DelayValidatePatternErrorForSequence);
+ }
+ }
+ /// <summary>
+ /// A pass through validator used to map a role sequence that may not
+ /// have been added to a constraint when the constraint was added to
+ /// validation on the constrant itself. Most pattern validation should
+ /// go directly to the constraint, not the sequence, because for set comparison
+ /// constraint cases, the sequence can be detached before validation, making it
+ /// impossible to determine the constraint to validate.
+ /// </summary>
+ [DelayValidatePriority(-1)]
+ private static void DelayValidatePatternErrorForSequence(ModelElement element)
+ {
+ ModelElement constraint = ((ConstraintRoleSequence)element).Constraint as ModelElement;
+ if (constraint != null)
+ {
+ FrameworkDomainModel.DelayValidateElement(constraint, DelayValidatePatternErrorForConstraint);
+ }
+ }
+ /// <summary>
/// Validator callback for MandatoryImpliedByMandatoryError
/// and UniquenessImpliedByUniquenessError
/// </summary>
- protected static void DelayValidateConstraintPatternError(ModelElement element)
+ private static void DelayValidatePatternErrorForConstraint(ModelElement element)
{
- (element as ConstraintRoleSequence).ValidateConstraintPatternError(null);
+ ValidateConstraintPatternError(element as IConstraint, null);
}
/// <summary>
/// A helper function to delay validate pattern errors on an <see cref="IConstraint"/>
@@ -3014,28 +3042,10 @@
protected static void DelayValidateConstraintPatternError(IConstraint constraint)
{
// Delay validate. Note that DelayValidateElement will automatically filter out duplicates
- switch (constraint.ConstraintStorageStyle)
+ ModelElement element = (ModelElement)constraint;
+ if (!element.IsDeleted && !element.IsDeleting)
{
- case ConstraintStorageStyle.SetConstraint:
- SetConstraint setConstraint = (SetConstraint)constraint;
- if (!setConstraint.IsDeleted && !setConstraint.IsDeleting)
- {
- FrameworkDomainModel.DelayValidateElement((ModelElement)setConstraint, DelayValidateConstraintPatternError);
- }
- break;
- case ConstraintStorageStyle.SetComparisonConstraint:
- SetComparisonConstraint setComparisonConstraint = (SetComparisonConstraint)constraint;
- if (!setComparisonConstraint.IsDeleted && !setComparisonConstraint.IsDeleting)
- {
- //The validation code will just need to pull the .Constraint property
- //off of this object, so it does not matter what sequence to send
- LinkedElementCollection<SetComparisonConstraintRoleSequence> sequences = setComparisonConstraint.RoleSequenceCollection;
- if (sequences.Count != 0)
- {
- FrameworkDomainModel.DelayValidateElement(sequences[0], DelayValidateConstraintPatternError);
- }
- }
- break;
+ FrameworkDomainModel.DelayValidateElement(element, DelayValidatePatternErrorForConstraint);
}
}
@@ -3043,16 +3053,14 @@
/// Validates a subset of predefined constraint patterns (cases where SetConstraints conflict
/// with SetComparison constraints)
/// </summary>
- /// <param name="notifyAdded"></param>
- protected void ValidateConstraintPatternError(INotifyElementAdded notifyAdded)
+ protected static void ValidateConstraintPatternError(IConstraint constraint, INotifyElementAdded notifyAdded)
{
- IConstraint constraint = this.Constraint;
if (constraint != null)
{
ValidateConstraintPatternErrorWithKnownConstraint(notifyAdded, constraint, IntersectingConstraintPattern.None, null);
}
}
- private void ValidateConstraintPatternErrorWithKnownConstraint(INotifyElementAdded notifyAdded, IConstraint currentConstraint, IntersectingConstraintPattern pattern, List<IConstraint> constraintsAlreadyValidated)
+ private static void ValidateConstraintPatternErrorWithKnownConstraint(INotifyElementAdded notifyAdded, IConstraint currentConstraint, IntersectingConstraintPattern pattern, List<IConstraint> constraintsAlreadyValidated)
{
#region Declare and Assign necessary variables
if (constraintsAlreadyValidated != null)
@@ -3072,16 +3080,19 @@
SetConstraint currentSetConstraint = null;
LinkedElementCollection<Role> setConstraintRoles = null;
ConstraintModality currentModality;
+ Store store;
if (null != (currentSetConstraint = currentConstraint as SetConstraint))
{
currentModality = currentSetConstraint.Modality;
setConstraintRoles = currentSetConstraint.RoleCollection;
+ store = currentSetConstraint.Store;
}
else
{
currentSetComparisonConstraint = (SetComparisonConstraint)currentConstraint;
currentModality = currentSetComparisonConstraint.Modality;
sequences = currentSetComparisonConstraint.RoleSequenceCollection;
+ store = currentSetComparisonConstraint.Store;
}
#endregion
@@ -3150,7 +3161,6 @@
}
//Get these GUIDs from data
- Store store = Store;
DomainRoleInfo towardsErrorRoleInfo = null;
ModelError error = null;
Guid? domainRoleErrorId = validationInfo.DomainRoleToError;
@@ -3265,10 +3275,9 @@
if (error != null)
{
//Validate other constraints on this error
- List<IConstraint> list = GetAllConstraintsOnError(error);
int validatedCount = 0;
- foreach (IConstraint constr in list)
+ foreach (IConstraint constr in GetAllConstraintsOnError(error))
{
if (constr != currentSetComparisonConstraint)
{
@@ -3365,7 +3374,7 @@
if (hasError)
{
- HandleError(true, ref error, domainRoleErrorId.Value, notifyAdded, currentConstraint);
+ HandleError(store, true, ref error, domainRoleErrorId.Value, notifyAdded, currentConstraint);
}
else if (error != null)
{
@@ -3429,8 +3438,8 @@
- HandleError(false, ref error, domainRoleErrorId.Value, notifyAdded, currentConstraint);
- HandleError(true, ref error, mandatoryDomainRoleId, null, contradictingMandatory);
+ HandleError(store, false, ref error, domainRoleErrorId.Value, notifyAdded, currentConstraint);
+ HandleError(store, true, ref error, mandatoryDomainRoleId, null, contradictingMandatory);
}
else if (error != null)
{
@@ -3468,22 +3477,17 @@
}
}
- private List<IConstraint> GetAllConstraintsOnError(ModelError error)
+ private static IEnumerable<IConstraint> GetAllConstraintsOnError(ModelError error)
{
- List<IConstraint> constraintsAttached = new List<IConstraint>();
- ReadOnlyCollection<ElementLink> links = DomainRoleInfo.GetAllElementLinks(error);
-
- foreach (ElementLink link in links)
+ foreach (ElementLink link in DomainRoleInfo.GetAllElementLinks(error))
{
IConstraint cur = DomainRoleInfo.GetSourceRolePlayer(link) as IConstraint;
if (cur != null)
{
- constraintsAttached.Add(cur);
+ yield return cur;
}
}
-
- return constraintsAttached;
}
/// <summary>
@@ -3524,7 +3528,7 @@
}
}
- private bool CheckIfHasOneColumn(LinkedElementCollection<SetComparisonConstraintRoleSequence> sequences)
+ private static bool CheckIfHasOneColumn(LinkedElementCollection<SetComparisonConstraintRoleSequence> sequences)
{
bool hasOneColumn = true;
@@ -3549,7 +3553,7 @@
/// <param name="allConstraintsThatNeedToBeAttached_And_TheirRoleIds">
/// The key is Iconstraint and the value is a Guis of the role this constraint plays in the relationship with this error
/// </param>
- private void UpdateErrorObject(ref ModelError error, Hashtable allConstraintsThatNeedToBeAttached_And_TheirRoleIds)
+ private static void UpdateErrorObject(ref ModelError error, Hashtable allConstraintsThatNeedToBeAttached_And_TheirRoleIds)
{
if (error == null)
{
@@ -3575,54 +3579,59 @@
}
}
}
-
/// <summary>
- /// Takes care of attaching the constraint to the error and updating error text if requested
+ /// Takes care of attaching the constraints to the error and updating error text if requested
/// </summary>
- /// <param name="generateText"></param>
- /// <param name="error"></param>
- /// <param name="domainRoleErrorId"></param>
- /// <param name="notifyAdded"></param>
- /// <param name="constraintToAttachErrorTo">
- /// Constraint to attach the error to
- /// </param>
- private void HandleError(bool generateText, ref ModelError error,
- Guid domainRoleErrorId, INotifyElementAdded notifyAdded,
- IConstraint constraintToAttachErrorTo)
+ /// <param name="store">Context <see cref="Store"/></param>
+ /// <param name="generateText">True to generated text for the error</param>
+ /// <param name="error">The error being created or modified</param>
+ /// <param name="domainRoleErrorId">The role on the error object that is opposite the error to create</param>
+ /// <param name="notifyAdded"><see cref="INotifyElementAdded"/> callback, set during deserialization</param>
+ /// <param name="conflictingConstraints">All constraints that need to be added to the error</param>
+ private static void HandleError(
+ Store store,
+ bool generateText,
+ ref ModelError error,
+ Guid domainRoleErrorId,
+ INotifyElementAdded notifyAdded,
+ params IConstraint[] conflictingConstraints)
{
- HandleError(generateText, ref error, domainRoleErrorId, notifyAdded, new IConstraint[]{constraintToAttachErrorTo});
+ HandleError(store, generateText, ref error, domainRoleErrorId, notifyAdded, (IList<IConstraint>)conflictingConstraints);
}
-
/// <summary>
/// Takes care of attaching the constraints to the error and updating error text if requested
/// </summary>
- /// <param name="generateText"></param>
- /// <param name="error"></param>
- /// <param name="domainRoleErrorId"></param>
- /// <param name="notifyAdded"></param>
- /// <param name="allConstraintsConflicting">
- /// All constraints that need to be added to the error, better to send all of
- /// them at once
- /// </param>
- private void HandleError(bool generateText, ref ModelError error,
- Guid domainRoleErrorId, INotifyElementAdded notifyAdded,
- IList<IConstraint> allConstraintsConflicting)
+ /// <param name="store">Context <see cref="Store"/></param>
+ /// <param name="generateText">True to generated text for the error</param>
+ /// <param name="error">The error being created or modified</param>
+ /// <param name="domainRoleErrorId">The role on the error object that is opposite the error to create</param>
+ /// <param name="notifyAdded"><see cref="INotifyElementAdded"/> callback, set during deserialization</param>
+ /// <param name="conflictingConstraints">All constraints that need to be added to the error</param>
+ private static void HandleError(
+ Store store,
+ bool generateText,
+ ref ModelError error,
+ Guid domainRoleErrorId,
+ INotifyElementAdded notifyAdded,
+ IList<IConstraint> conflictingConstraints)
{
- if (allConstraintsConflicting == null)
+ int constraintCount;
+ if (conflictingConstraints == null ||
+ 0 == (constraintCount = conflictingConstraints.Count))
{
return;
}
if (error == null)
{
//Create it
- error = (ModelError)Store.ElementFactory.CreateElement(
- Store.DomainDataDirectory.FindDomainRole(domainRoleErrorId).OppositeDomainRole.RolePlayer);
+ error = (ModelError)store.ElementFactory.CreateElement(store.DomainDataDirectory.FindDomainRole(domainRoleErrorId).OppositeDomainRole.RolePlayer);
}
ModelElement errorLinked;
- foreach (IConstraint curConstraint in allConstraintsConflicting)
+ for (int i = 0; i < constraintCount; ++i)
{
+ IConstraint curConstraint = conflictingConstraints[i];
errorLinked = DomainRoleInfo.GetLinkedElement((ModelElement)curConstraint, domainRoleErrorId);
if (errorLinked != error || errorLinked == null)
@@ -3642,10 +3651,7 @@
if (generateText)
{
- if (allConstraintsConflicting.Count > 0)
- {
- error.Model = allConstraintsConflicting[0].Model;
- }
+ error.Model = conflictingConstraints[0].Model;
error.GenerateErrorText();
}
@@ -3669,7 +3675,7 @@
/// <param name="curConstraint"></param>
/// <param name="hasErrorDefault"></param>
/// <returns></returns>
- private bool HandleExclusionOrEqualityAndMandatory(
+ private static bool HandleExclusionOrEqualityAndMandatory(
LinkedElementCollection<SetComparisonConstraintRoleSequence> sequences,
bool shouldExecuteValidationCode,
bool isExclusion, int minNumViolatingConstraints,
@@ -3687,12 +3693,12 @@
Guid domainRoleErrorId = optionalDomainRoleErrorId.Value;
IList<IConstraint> constrFound = null;
bool hasError = hasErrorDefault;
+ Store store = ((ModelElement)curConstraint).Store;
if (shouldExecuteValidationCode &&
(0 < minNumViolatingConstraints ||
0 < (minNumViolatingConstraints = (sequences != null) ? sequences.Count : 0)))
{
- Store store = Store;
int numOfViolatingConstraints = 0;
//For these patterns: there can be an error only if there are more than one sequences on
@@ -3756,14 +3762,14 @@
//!isExclusion means that if it is not exclusion constraint - no more error handling will
//occur, so error text needs to be generated now
- HandleError(!isExclusion, ref error, domainRoleErrorId, notifyAdded, curConstraint);
- HandleError(true, ref error, mandatoriesDomainRoleId, null, constrFound);
+ HandleError(store, !isExclusion, ref error, domainRoleErrorId, notifyAdded, curConstraint);
+ HandleError(store, true, ref error, mandatoriesDomainRoleId, null, constrFound);
}
else
{
//!isExclusion means that if it is not exclusion constraint - no more error handling will
//occur, so error text needs to be generated now
- HandleError(!isExclusion, ref error, domainRoleErrorId, notifyAdded, curConstraint);
+ HandleError(store, !isExclusion, ref error, domainRoleErrorId, notifyAdded, curConstraint);
}
}
else if (error != null)
@@ -3782,7 +3788,7 @@
/// <param name="notifyAdded"></param>
/// <param name="validationInfo">Validation information of the current constraint</param>
/// <param name="constraintSequences">Sequences linked to the constraint</param>
- private void ValidateSetComparisonConstraintSubsetPattern(
+ private static void ValidateSetComparisonConstraintSubsetPattern(
SetComparisonConstraint setComparsionConstraint,
INotifyElementAdded notifyAdded,
IntersectingConstraintValidation validationInfo,
@@ -3902,7 +3908,7 @@
#region Handling the error
int constraintsInErrorCount = (constraintsInError == null) ? 0 : constraintsInError.Count;
Guid domainRoleErrorId = validationInfo.DomainRoleToError.Value;
- Store store = Store;
+ Store store = setComparsionConstraint.Store;
DomainRoleInfo constraintRoleInfo = store.DomainDataDirectory.FindDomainRole(domainRoleErrorId);
DomainRoleInfo errorRoleInfo = constraintRoleInfo.OppositeDomainRole;
@@ -3935,8 +3941,8 @@
//Need to attach the error to all: the current constraint and all constraints, which were found to conflict with it
- HandleError(false, ref error, domainRoleErrorId, notifyAdded, setComparsionConstraint);
- HandleError(true, ref error, domainRoleErrorId, notifyAdded, constraintsInError);
+ HandleError(store, false, ref error, domainRoleErrorId, notifyAdded, setComparsionConstraint);
+ HandleError(store, true, ref error, domainRoleErrorId, notifyAdded, constraintsInError);
}
}
else if (error != null)
@@ -3968,7 +3974,7 @@
if (constraintSequenceCount > 1)
{
//Attach the error only to the current constraint
- HandleError(true, ref error, domainRoleErrorId, notifyAdded, curConstraint);
+ HandleError(store, true, ref error, domainRoleErrorId, notifyAdded, curConstraint);
}
}
else if (error != null) //there was an error but not anymore
@@ -4097,12 +4103,11 @@
#region Error validation
/// <summary>
/// Called during initial validation of a <see cref="SetComparisonConstraint"/> to
- /// verify intersecting constraints. This methods needs to be called for one sequence
- /// on a constraint only.
+ /// verify intersecting constraints.
/// </summary>
- public void ValidateIntersectingConstraints(INotifyElementAdded notifyAdded)
+ public static void ValidateIntersectingConstraints(IConstraint constraint, INotifyElementAdded notifyAdded)
{
- base.ValidateConstraintPatternError(notifyAdded);
+ ValidateConstraintPatternError(constraint, notifyAdded);
}
#endregion // Error validation
}
Modified: trunk/Setup/Readme.htm
===================================================================
--- trunk/Setup/Readme.htm 2009-04-20 23:14:48 UTC (rev 1381)
+++ trunk/Setup/Readme.htm 2009-04-21 00:23:23 UTC (rev 1382)
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"/>
-<title>NORMA February 2009 CTP Readme</title>
+<title>NORMA March 2009 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 February 2009 CTP Readme</a> </b></p>
+<p><b><a id="The Top" style="font-family:Verdana;font-size:medium">NORMA March 2009 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, I won't be adding historical dates). The file will be extended for future product releases.<br/><br/>
-The February 2009 drop adds grouping support and a number of stability improvements in the tool.
+The March 2009 release is a stabilization release with targeted fixes.
<br/><br/></p>
<h2>Contents</h2>
<ul>
@@ -40,9 +40,25 @@
<li><a href="#TOPIC DAILY">TOPIC DESCRIPTION</a> (Changeset ####)</li>
</ul>-->
<hr/>
-<h2>February 2009 CTP Changes</h2>
-<div>The February 2009 CTP drop includes all modifications through changeset 1370. 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>March 2009 CTP Changes</h2>
+<div>The Math 2009 CTP release includes all modifications through changeset 1382. 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>Notable Changes:
+<ol>
+<li>Column name generation in separate or partitioned tables was incorrectly the 'identifier' naming pattern instead of the 'reference' naming pattern, resulting in overly simplified names for referenced elements.</li>
+<li>Any duplicate constraint names that match the automatically generated name are automatically resolved when the file loads. This makes it much easier to merge multiple versions of the same model file.</li>
+<li>Opening the Fact Editor with an existing selection would not populate for that selection. Selection had to be changed with the editor visible.</li>
+<li><em>Notes</em> and <em>Informal Descriptions</em> are now available for all constraints and for groups.</li>
+<li>The readme file has been moved to the <em>Documentation</em> directory, which also contains an html form of the core schema file with full comments. The schema comments should also improve the experience of looking at an .orm file in the Visual Studio Xml editor.</li>
+<li>Added support for external developers to register their own Xml file importers. Additional settings files can be added to the <em>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\ORM Solutions\Natural ORM Architect\DesignerSettings</em> key using the pattern shown in the 'Core' subkey. Note that the <em>ConvertersDir</em> specified for the core settings file will be used if another directory is not specified. Use <em>9.0</em> instead of <em>8.0</em> for Visual Studio 2008.</li>
+<li>Added support for generating multiple database schemas. Mechanisms for leveraging this support with custom properties are discussed in the forums at <a href="http://www.ormfoundation.org">orm foundation</a>.</li>
+<li>Fixed an issue with contradition errors not clearly when a role sequence was deleted from a set comparison constraint. This could leave the .orm file in an invalid state.</li>
+</ol>
+</li>
+</ul>
+<hr/>
+<div>The February 2009 CTP release includes all modifications through changeset 1370.</div>
+<ul>
<li><a href="#Element Grouping 2009-02">Element Grouping</a> </li>
<li>Other Changes:
<ol>
@@ -59,7 +75,7 @@
</ul>
<hr/>
<h2>January 2009 CTP Changes</h2>
-<div>The January 2009 CTP drop includes all modifications through changeset 1356.</div>
+<div>The January 2009 CTP release includes all modifications through changeset 1356.</div>
<ul>
<li><a href="#FactEditor Inverse Readings 2009-01">Fact Editor inverse readings</a> </li>
<li>Other Changes:
@@ -73,7 +89,7 @@
</li>
</ul><hr/>
<h2>December 2008 CTP Changes</h2>
-<div>The December 2008 CTP (a) drop includes all modifications through changeset 1350.</div>
+<div>The December 2008 CTP (a) release includes all modifications through changeset 1350.</div>
<ul>
<li><a href="#Diagram Management 2008-12">Diagram order and position caching</a> </li>
<li><a href="#Model Browser Links 2008-12">Model Browser link nodes</a> </li>
@@ -85,8 +101,8 @@
</li>
</ul><hr/>
<h2>October 2008 CTP Changes</h2>
-<div>The October 2008 CTP drop includes all modifications through changeset 1340.<br/><br/>
-The October 2008 drop includes two major functionality additions plus a number of smaller pieces. The major changes relate to sample population (you can now fully populate a model, including objectified FactTypes and Subtypes) and model navigation using the Verbalization Browser and the new 'ORM Diagram Spy' tool window.
+<div>The October 2008 CTP release includes all modifications through changeset 1340.<br/><br/>
+The October 2008 release includes two major functionality additions plus a number of smaller pieces. The major changes relate to sample population (you can now fully populate a model, including objectified FactTypes and Subtypes) and model navigation using the Verbalization Browser and the new 'ORM Diagram Spy' tool window.
</div>
<ul>
<li><a href="#Setup 2008-10">SetupVista.bat elevates install permissions on Vista</a></li>
@@ -116,7 +132,7 @@
<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>(Visual Studio 2005 Install Only) The DSLToolsRedist.msi included with this drop 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>
+<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>
<hr/>
Modified: trunk/VersionGenerator.exe.config
===================================================================
--- trunk/VersionGenerator.exe.config 2009-04-20 23:14:48 UTC (rev 1381)
+++ trunk/VersionGenerator.exe.config 2009-04-21 00:23:23 UTC (rev 1382)
@@ -2,7 +2,7 @@
<configuration>
<appSettings>
<add key="RevisionStartYearMonth" value="2006-01"/>
- <add key="ReleaseYearMonth" value="2009-02"/>
+ <add key="ReleaseYearMonth" value="2009-03"/>
<!-- 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.
|