[573836] Add OptionalDefaultMultiplicity preference
diff --git a/plugins/org.eclipse.ocl.pivot.ui/src/org/eclipse/ocl/pivot/ui/internal/preferences/PivotProjectPreferencePage.java b/plugins/org.eclipse.ocl.pivot.ui/src/org/eclipse/ocl/pivot/ui/internal/preferences/PivotProjectPreferencePage.java
index 9d238d3..5f811be 100644
--- a/plugins/org.eclipse.ocl.pivot.ui/src/org/eclipse/ocl/pivot/ui/internal/preferences/PivotProjectPreferencePage.java
+++ b/plugins/org.eclipse.ocl.pivot.ui/src/org/eclipse/ocl/pivot/ui/internal/preferences/PivotProjectPreferencePage.java
@@ -59,6 +59,15 @@
 				PivotUIMessages.Pivot_EcoreValidation, SEVERITY_MODES, fieldEditorParent));
 		fields.add(new MyComboFieldEditor(PivotValidationOptions.MissingSafeNavigation,
 				PivotUIMessages.Pivot_MissingSafeNavigation, SEVERITY_MODES, fieldEditorParent));
+		fields.add(new MyComboFieldEditor(PivotValidationOptions.OptionalDefaultMultiplicity,
+				PivotUIMessages.Pivot_OptionalDefaultMultiplicity, BOOLEANS, fieldEditorParent,
+				"In UML, the default multiplicity for a TypedElement such as an Operation, Parameter or Property is [1],\n" +
+				"which prohibits the use of a null value. In contrast, in the Sample Ecore Model Editpr, the default is [?].\n" +
+				"The original default in the Eclipse OCL editors was the UML-like [1], but changed in 2015 to make OCLinEcore\n" +
+				"Support for detection of invalid hazards makes the default more significant and a [?] default somewhat irritating.\n" +
+				"As of 2021-09, the default is therefore reverted to the UML-like [1], which is the default for this preference.\n" +
+				"You may set this preference True to retain the Ecore-like [?] default. Where you need to allow null values\n" +
+				"you are encouraged to specify [?] explicitly rather than relying on the implicit default."));
 		fields.add(new MyComboFieldEditor(PivotValidationOptions.RedundantSafeNavigation,
 				PivotUIMessages.Pivot_RedundantSafeNavigation, SEVERITY_MODES, fieldEditorParent));
 		horizontalLine = new Label(fieldEditorParent, SWT.SEPARATOR | SWT.HORIZONTAL);
diff --git a/plugins/org.eclipse.ocl.pivot.ui/src/org/eclipse/ocl/pivot/ui/messages/PivotUIMessages.java b/plugins/org.eclipse.ocl.pivot.ui/src/org/eclipse/ocl/pivot/ui/messages/PivotUIMessages.java
index 6cb5a45..938a58d 100644
--- a/plugins/org.eclipse.ocl.pivot.ui/src/org/eclipse/ocl/pivot/ui/messages/PivotUIMessages.java
+++ b/plugins/org.eclipse.ocl.pivot.ui/src/org/eclipse/ocl/pivot/ui/messages/PivotUIMessages.java
@@ -24,6 +24,7 @@
 	public static String Pivot_EcoreValidation;
 	public static String Pivot_MissingSafeNavigation;
 	public static String Pivot_ModelTypeSelection;
+	public static String Pivot_OptionalDefaultMultiplicity;
 	public static String Pivot_RedundantSafeNavigation;
 
 	public static String Pivot_Severity_Ignore;
diff --git a/plugins/org.eclipse.ocl.pivot.ui/src/org/eclipse/ocl/pivot/ui/messages/PivotUIMessages.properties b/plugins/org.eclipse.ocl.pivot.ui/src/org/eclipse/ocl/pivot/ui/messages/PivotUIMessages.properties
index cc299df..7ef8202 100644
--- a/plugins/org.eclipse.ocl.pivot.ui/src/org/eclipse/ocl/pivot/ui/messages/PivotUIMessages.properties
+++ b/plugins/org.eclipse.ocl.pivot.ui/src/org/eclipse/ocl/pivot/ui/messages/PivotUIMessages.properties
@@ -14,6 +14,7 @@
 Pivot_EcoreValidation = Maximum severity within the Simple Ecore / GenModel Editor
 Pivot_MissingSafeNavigation = Potential null navigation; use of "." or "->" when "?." or "?->" is needed for safety.
 Pivot_ModelTypeSelection = Display usage information when selecting an object with model types in the Console.
+Pivot_OptionalDefaultMultiplicity = Use Ecore-like [0..1] rather than UML-like [1..1] default multiplicity .
 Pivot_RedundantSafeNavigation = Redundant safe navigation; use of "?." or "?->" when "." or "->" is safe.
 
 Pivot_Severity_Ignore = Ignore
diff --git a/plugins/org.eclipse.ocl.pivot/annotations/java/lang/Boolean.eea b/plugins/org.eclipse.ocl.pivot/annotations/java/lang/Boolean.eea
index 2be2355..8c484ff 100644
--- a/plugins/org.eclipse.ocl.pivot/annotations/java/lang/Boolean.eea
+++ b/plugins/org.eclipse.ocl.pivot/annotations/java/lang/Boolean.eea
@@ -5,3 +5,6 @@
 TRUE
  Ljava/lang/Boolean;
  L1java/lang/Boolean;
+valueOf
+ (Ljava/lang/String;)Ljava/lang/Boolean;
+ (Ljava/lang/String;)L1java/lang/Boolean;
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/plugin/PivotPreferenceInitializer.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/plugin/PivotPreferenceInitializer.java
index 680cc11..8dcef75 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/plugin/PivotPreferenceInitializer.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/plugin/PivotPreferenceInitializer.java
@@ -24,6 +24,7 @@
 		putPreference(PivotConsoleOptions.ConsoleModeltypesInformation);
 		putPreference(PivotValidationOptions.EcoreValidation);
 		putPreference(PivotValidationOptions.MissingSafeNavigation);
+		putPreference(PivotValidationOptions.OptionalDefaultMultiplicity);
 		putPreference(PivotValidationOptions.RedundantSafeNavigation);
 	}
 }
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/options/BooleanOption.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/options/BooleanOption.java
new file mode 100644
index 0000000..be61b6f
--- /dev/null
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/options/BooleanOption.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2021 Willink Transformations and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   E.D.Willink - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ocl.pivot.options;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.ocl.common.preferences.PreferenceableOption;
+
+/**
+ * Implementation of the {@link PreferenceableOption} interface for boolean OCL options.
+ *
+ * @since 1.16
+ */
+public class BooleanOption extends BasicOption<@Nullable Boolean> implements PreferenceableOption<@Nullable Boolean>
+{
+	public BooleanOption(@NonNull String pluginId, @NonNull String key, @NonNull Boolean defaultValue) {
+		super(pluginId, key, defaultValue);
+	}
+
+	@Override
+	public @NonNull Boolean getValueOf(String string) {
+		return Boolean.valueOf(string);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/options/PivotValidationOptions.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/options/PivotValidationOptions.java
index 3629338..2ad92a2 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/options/PivotValidationOptions.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/options/PivotValidationOptions.java
@@ -37,6 +37,12 @@
 	public static final @NonNull EnumeratedOption<StatusCodes.Severity> MissingSafeNavigation = new EnumeratedOption<StatusCodes.Severity>(
 			PivotPlugin.PLUGIN_ID, "missing.safe.navigation", StatusCodes.Severity.IGNORE, StatusCodes.Severity.class); //$NON-NLS-1$
 
+	/**
+	 * @since 1.16
+	 */
+	public static final @NonNull BooleanOption OptionalDefaultMultiplicity = new BooleanOption(
+		PivotPlugin.PLUGIN_ID, "optional.default.multiplicity", true); //$NON-NLS-1$
+
 	public static final @NonNull EnumeratedOption<StatusCodes.Severity> RedundantSafeNavigation = new EnumeratedOption<StatusCodes.Severity>(
 			PivotPlugin.PLUGIN_ID, "redundant.safe.navigation", StatusCodes.Severity.IGNORE, StatusCodes.Severity.class); //$NON-NLS-1$