398653: Support for optional install

- fixed parsing of "optional/required" attribute (xml attribute name changed from optional to required)
- fixed initial selection state for install

Bug: 398653
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=398653
diff --git a/org.eclipse.epp.mpc.core/src/org/eclipse/epp/internal/mpc/core/service/xml/IuContentHandler.java b/org.eclipse.epp.mpc.core/src/org/eclipse/epp/internal/mpc/core/service/xml/IuContentHandler.java
index db6b55e..0491f70 100644
--- a/org.eclipse.epp.mpc.core/src/org/eclipse/epp/internal/mpc/core/service/xml/IuContentHandler.java
+++ b/org.eclipse.epp.mpc.core/src/org/eclipse/epp/internal/mpc/core/service/xml/IuContentHandler.java
@@ -28,10 +28,21 @@
 	public void startElement(String uri, String localName, Attributes attributes) {
 		if (localName.equals("iu")) { //$NON-NLS-1$
 			model = new Iu();
+			//FIXME at some point we sent optional, at another required, so we handle both for now...
+			Boolean optional = null;
 			String optionalValue = attributes.getValue(NS_URI, "optional"); //$NON-NLS-1$
 			if (optionalValue != null) {
-				model.setOptional(Boolean.valueOf(optionalValue));
+				optional = Boolean.valueOf(optionalValue);
 			}
+			String requiredValue = attributes.getValue(NS_URI, "required"); //$NON-NLS-1$
+			if (requiredValue != null) {
+				Boolean required = Boolean.valueOf(requiredValue);
+				optional = optional == null ? !required : optional && !required;
+			}
+			if (optional != null) {
+				model.setOptional(optional);
+			}
+
 			String selectedValue = attributes.getValue(NS_URI, "selected"); //$NON-NLS-1$
 			if (selectedValue != null) {
 				model.setSelected(Boolean.valueOf(selectedValue));
diff --git a/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/SelectionModel.java b/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/SelectionModel.java
index 5bee7c7..41ccee1 100644
--- a/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/SelectionModel.java
+++ b/org.eclipse.epp.mpc.ui/src/org/eclipse/epp/internal/mpc/ui/wizards/SelectionModel.java
@@ -157,7 +157,10 @@
 		Operation selectedOperation = parent.getSelectedOperation();
 		switch (selectedOperation) {
 		case INSTALL:
-			return !featureEntry.isInstalled() || featureEntry.hasUpdateAvailable();
+			if (!featureEntry.isInstalled()) {
+				return featureEntry.isRequiredInstall() || featureEntry.getInstallableUnitItem().isDefaultSelected();
+			}
+			return featureEntry.hasUpdateAvailable();
 		case UNINSTALL:
 			return featureEntry.isInstalled();
 		case UPDATE: