Bug 511568 - IU id autocomplete improvements for .target generic editor

Now autocomplete propses to replace if there is already an IU id. Change
also contains some refactoring with regard to names and safety.

Change-Id: I096f623984d7d0df726add85c8991fc384271e11
Signed-off-by: Sopot Cela <scela@redhat.com>
diff --git a/ui/org.eclipse.pde.genericeditor.extension/src/org/eclipse/pde/internal/genericeditor/target/extension/autocomplete/VersionProposal.java b/ui/org.eclipse.pde.genericeditor.extension/src/org/eclipse/pde/internal/genericeditor/target/extension/autocomplete/InstallableUnitProposal.java
similarity index 92%
rename from ui/org.eclipse.pde.genericeditor.extension/src/org/eclipse/pde/internal/genericeditor/target/extension/autocomplete/VersionProposal.java
rename to ui/org.eclipse.pde.genericeditor.extension/src/org/eclipse/pde/internal/genericeditor/target/extension/autocomplete/InstallableUnitProposal.java
index a661053..dde7242 100644
--- a/ui/org.eclipse.pde.genericeditor.extension/src/org/eclipse/pde/internal/genericeditor/target/extension/autocomplete/VersionProposal.java
+++ b/ui/org.eclipse.pde.genericeditor.extension/src/org/eclipse/pde/internal/genericeditor/target/extension/autocomplete/InstallableUnitProposal.java
@@ -17,7 +17,7 @@
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.graphics.Point;
 
-public class VersionProposal implements ICompletionProposal {
+public class InstallableUnitProposal implements ICompletionProposal {
 
 	private static final String REPLACE_STRING = " (replace)";//$NON-NLS-1$
 	private String completionString;
@@ -25,7 +25,7 @@
 	private int length;
 	private boolean replace;
 
-	public VersionProposal(String completionString, int offset, int length, boolean replace) {
+	public InstallableUnitProposal(String completionString, int offset, int length, boolean replace) {
 		this.completionString = completionString;
 		this.offset = offset;
 		this.length = length;
diff --git a/ui/org.eclipse.pde.genericeditor.extension/src/org/eclipse/pde/internal/genericeditor/target/extension/autocomplete/processors/AttributeValueCompletionProcessor.java b/ui/org.eclipse.pde.genericeditor.extension/src/org/eclipse/pde/internal/genericeditor/target/extension/autocomplete/processors/AttributeValueCompletionProcessor.java
index bc4bae1..57e6838 100644
--- a/ui/org.eclipse.pde.genericeditor.extension/src/org/eclipse/pde/internal/genericeditor/target/extension/autocomplete/processors/AttributeValueCompletionProcessor.java
+++ b/ui/org.eclipse.pde.genericeditor.extension/src/org/eclipse/pde/internal/genericeditor/target/extension/autocomplete/processors/AttributeValueCompletionProcessor.java
@@ -15,7 +15,7 @@
 
 import org.eclipse.jface.text.contentassist.CompletionProposal;
 import org.eclipse.jface.text.contentassist.ICompletionProposal;
-import org.eclipse.pde.internal.genericeditor.target.extension.autocomplete.VersionProposal;
+import org.eclipse.pde.internal.genericeditor.target.extension.autocomplete.InstallableUnitProposal;
 import org.eclipse.pde.internal.genericeditor.target.extension.model.ITargetConstants;
 import org.eclipse.pde.internal.genericeditor.target.extension.model.LocationNode;
 import org.eclipse.pde.internal.genericeditor.target.extension.model.RepositoryCache;
@@ -50,7 +50,8 @@
 
 		UnitNode node = rootNode.getEnclosingUnit(offset);
 
-		if (acKey.equalsIgnoreCase(ITargetConstants.UNIT_ID_ATTR)) {
+		boolean replaceId = false;
+		if (ITargetConstants.UNIT_ID_ATTR.equalsIgnoreCase(acKey)) {
 			if (node != null) {
 				LocationNode location = node.getParent();
 				String repoLocation = location.getRepositoryLocation();
@@ -63,13 +64,14 @@
 					return getInformativeProposal();
 				}
 				List<UnitNode> units = cache.getUnitsByPrefix(repoLocation, prefix);
-				return convertToProposals(units);
+				replaceId = !("".equals(node.getId()));//$NON-NLS-1$
+				return convertToProposals(units, replaceId);
 			}
 
 		}
 
-		boolean replace = false;
-		if (acKey.equalsIgnoreCase(ITargetConstants.UNIT_VERSION_ATTR)) {
+		boolean replaceVersion = false;
+		if (ITargetConstants.UNIT_VERSION_ATTR.equalsIgnoreCase(acKey)) {
 			if (node != null) {
 				LocationNode location = node.getParent();
 				String repoLocation = location.getRepositoryLocation();
@@ -83,8 +85,8 @@
 				}
 				List<UnitNode> byPrefix = cache.getUnitsByPrefix(repoLocation, node.getId());
 				List<String> versions = byPrefix.get(0).getAvailableVersions();
-				replace = !("".equals(node.getVersion()));//$NON-NLS-1$
-				return convertToVersionProposals(versions, replace);
+				replaceVersion = !("".equals(node.getVersion()));//$NON-NLS-1$
+				return convertToVersionProposals(versions, replaceVersion);
 			}
 
 		}
@@ -114,18 +116,17 @@
 				continue;
 			}
 
-			ICompletionProposal proposal = new VersionProposal(version, offset, prefix.length(),
+			ICompletionProposal proposal = new InstallableUnitProposal(version, offset, prefix.length(),
 					replace);
 			result.add(proposal);
 		}
 		return result.toArray(new ICompletionProposal[result.size()]);
 	}
 
-	private ICompletionProposal[] convertToProposals(List<UnitNode> units) {
+	private ICompletionProposal[] convertToProposals(List<UnitNode> units, boolean replace) {
 		List<ICompletionProposal> result = new ArrayList<>();
 		for (UnitNode unit : units) {
-			CompletionProposal proposal = new CompletionProposal(unit.getId(), offset - prefix.length(),
-					prefix.length(), unit.getId().length() + 1);
+			ICompletionProposal proposal = new InstallableUnitProposal(unit.getId(), offset, prefix.length(), replace);
 			result.add(proposal);
 		}
 		return result.toArray(new ICompletionProposal[result.size()]);