[371728] NFE parsing version string
diff --git a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFInstallWizardPage.java b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFInstallWizardPage.java
index 3c78ddd..b7b318b 100644
--- a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFInstallWizardPage.java
+++ b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFInstallWizardPage.java
@@ -306,12 +306,84 @@
cxfRuntimeVersion = cxfToolVersion.substring(start, end);
}
+ Version version = parseVersion(cxfRuntimeVersion);
+ cxfRuntimeVersion = version.toString();
cxfVersionText.setText(cxfRuntimeVersion);
cxfTypeText.setText(cxfRuntimeType);
- CXFCorePlugin.getDefault().setCurrentRuntimeVersion(new Version(cxfRuntimeVersion));
+ CXFCorePlugin.getDefault().setCurrentRuntimeVersion(version);
}
}
+ private Version parseVersion(String version) {
+ if (version.trim().length() == 0) {
+ return new Version(0, 0, 0);
+ }
+ String major = null;
+ String minor = null;
+ String micro = null;
+ String qualifier = null;
+ int segments = 0;
+ for (int index = 0; index < version.length(); index++) {
+ if (!Character.isDigit(version.charAt(index))) {
+ if (version.charAt(index) == '.') { //$NON-NLS-1$
+ segments++;
+ } else {
+ if (major == null) {
+ major = "0"; //$NON-NLS-1$
+ }
+ if (minor == null) {
+ minor = "0"; //$NON-NLS-1$
+ }
+ if (micro == null) {
+ micro = "0"; //$NON-NLS-1$
+ }
+ if (qualifier == null) {
+ qualifier = version.substring(index);
+ }
+ }
+ } else {
+ if (segments == 0) {
+ major = findSegment(version, index);
+ index += major.length() - 1;
+ } else if (segments == 1) {
+ minor = findSegment(version, index);
+ index += minor.length() - 1;
+ } else if (segments == 2) {
+ micro = findSegment(version, index);
+ index += micro.length();
+
+ if (index < version.length() && version.charAt(index) == '.') {
+ while (index < version.length() - 1 && version.charAt(index) == '.') {
+ index++;
+ }
+ }
+ }
+ }
+ if (major != null && minor != null && micro != null) {
+ if (qualifier == null && index < version.length() - 1) {
+ qualifier = version.substring(index);
+ }
+ if (qualifier != null && qualifier.indexOf('.') != -1) { //$NON-NLS-1$
+ qualifier = qualifier.replace('.', '_'); //$NON-NLS-1$
+ }
+ break;
+ }
+ }
+ return new Version(Integer.parseInt(major), Integer.parseInt(minor), Integer.parseInt(micro), qualifier);
+ }
+
+ private String findSegment(String version, int beginIndex) {
+ int endIndex = beginIndex;
+ while (endIndex < version.length() && Character.isDigit(version.charAt(endIndex))) {
+ endIndex++;
+ }
+ if (endIndex == beginIndex) {
+ return Character.toString(version.charAt(beginIndex));
+ } else {
+ return version.substring(beginIndex, endIndex);
+ }
+ }
+
public boolean finish() {
CXFPersistentContext context = CXFCorePlugin.getDefault().getJava2WSContext();
Map<String, CXFInstall> installs = context.getInstallations();