Author: rob.stryker(a)jboss.com
Date: 2011-12-16 12:54:21 -0500 (Fri, 16 Dec 2011)
New Revision: 37399
Added:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/util/ExpressionResolverUtil.java
trunk/as/tests/org.jboss.ide.eclipse.as.test/src/org/jboss/ide/eclipse/as/test/util/ExpressionResolverUtilTest.java
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/JBossServer.java
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/JBoss7Server.java
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/editor/PortSection.java
Log:
https://issues.jboss.org/browse/JBIDE-10513 - port error for AS7.1 near-final.
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/JBossServer.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/JBossServer.java 2011-12-16
17:09:20 UTC (rev 37398)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/JBossServer.java 2011-12-16
17:54:21 UTC (rev 37399)
@@ -47,6 +47,7 @@
import org.jboss.ide.eclipse.as.core.server.IDeployableServer;
import org.jboss.ide.eclipse.as.core.server.IJBossServerRuntime;
import org.jboss.ide.eclipse.as.core.util.DeploymentPreferenceLoader;
+import org.jboss.ide.eclipse.as.core.util.ExpressionResolverUtil;
import org.jboss.ide.eclipse.as.core.util.IJBossToolingConstants;
import org.jboss.ide.eclipse.as.core.util.RuntimeUtils;
import org.jboss.ide.eclipse.as.core.util.ServerUtil;
@@ -193,6 +194,8 @@
}
if( result != null ) {
+ result = resolveXPathResult(result);
+
try {
return Integer.parseInt(result);
} catch(NumberFormatException nfe) {
@@ -202,6 +205,10 @@
return defaultValue;
}
+ protected String resolveXPathResult(String result) {
+ return result;
+ }
+
public URL getModuleRootURL(IModule module) {
if (module == null || module.loadAdapter(IWebModule.class,null)==null )
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/JBoss7Server.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/JBoss7Server.java 2011-12-16
17:09:20 UTC (rev 37398)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/JBoss7Server.java 2011-12-16
17:54:21 UTC (rev 37399)
@@ -24,6 +24,7 @@
import org.eclipse.wst.server.core.IRuntime;
import org.jboss.ide.eclipse.as.core.extensions.polling.WebPortPoller;
import org.jboss.ide.eclipse.as.core.server.internal.JBossServer;
+import org.jboss.ide.eclipse.as.core.util.ExpressionResolverUtil;
import org.jboss.ide.eclipse.as.core.util.IJBossToolingConstants;
import org.jboss.ide.eclipse.as.core.util.ServerUtil;
@@ -51,6 +52,12 @@
}
@Override
+ protected String resolveXPathResult(String result) {
+ return ExpressionResolverUtil.safeReplaceProperties(result);
+ }
+
+
+ @Override
public String getDeployLocationType() {
return getAttribute(DEPLOY_DIRECTORY_TYPE, DEPLOY_SERVER);
}
Added:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/util/ExpressionResolverUtil.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/util/ExpressionResolverUtil.java
(rev 0)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/util/ExpressionResolverUtil.java 2011-12-16
17:54:21 UTC (rev 37399)
@@ -0,0 +1,186 @@
+package org.jboss.ide.eclipse.as.core.util;
+
+import java.io.File;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.jboss.ide.eclipse.as.core.JBossServerCorePlugin;
+
+/**
+ * This class coppied from JBoss's DMR project, ExpressionValue.java
+ *
+ */
+public class ExpressionResolverUtil {
+
+ /*
+ * An interface is added to allow the actual resolving of the variables
+ * to be customized
+ */
+ public interface IExpressionResolver {
+ public String getSystemProperty(String variable);
+ public String getEnvironmentProperty(String variable);
+ }
+
+ public static class NullExpressionResolver implements IExpressionResolver {
+ public String getSystemProperty(String variable) {
+ return null;
+ }
+ public String getEnvironmentProperty(String variable) {
+ return null;
+ }
+ }
+
+ private static final int INITIAL = 0;
+ private static final int GOT_DOLLAR = 1;
+ private static final int GOT_OPEN_BRACE = 2;
+ private static final int RESOLVED = 3;
+ private static final int DEFAULT = 4;
+
+ public static String safeReplaceProperties(final String value) {
+ return safeReplaceProperties(value, null);
+ }
+ public static String safeReplaceProperties(final String value, IExpressionResolver
resolver) {
+ try {
+ return replaceProperties(value, resolver);
+ } catch(IllegalStateException ise) {
+ return value; // Just return the string unchanged
+ }
+ }
+
+ /**
+ * Replace properties of the form:
+ *
<code>${<i><[env.]name>[</i>,<i><[env.]name2>[</i>,<i><[env.]name3>...]][</i>:<i><default>]</i>}</code>
+ *
+ * @param value - either a system property or environment variable reference
+ * @param resolver - to resolve the variables
+ * @return the value of the system property or environment variable referenced if
+ * it exists
+ */
+ public static String replaceProperties(final String value, IExpressionResolver
resolver) {
+ if( resolver == null )
+ resolver = new NullExpressionResolver();
+
+ final StringBuilder builder = new StringBuilder();
+ final int len = value.length();
+ int state = INITIAL;
+ int start = -1;
+ int nameStart = -1;
+ String resolvedValue = null;
+ for (int i = 0; i < len; i = value.offsetByCodePoints(i, 1)) {
+ final int ch = value.codePointAt(i);
+ System.out.print((char)ch);
+ switch (state) {
+ case INITIAL: {
+ switch (ch) {
+ case '$': {
+ state = GOT_DOLLAR;
+ continue;
+ }
+ default: {
+ builder.appendCodePoint(ch);
+ continue;
+ }
+ }
+ // not reachable
+ }
+ case GOT_DOLLAR: {
+ switch (ch) {
+ case '$': {
+ builder.appendCodePoint(ch);
+ state = INITIAL;
+ continue;
+ }
+ case '{': {
+ start = i + 1;
+ nameStart = start;
+ state = GOT_OPEN_BRACE;
+ continue;
+ }
+ default: {
+ // invalid; emit and resume
+ builder.append('$').appendCodePoint(ch);
+ state = INITIAL;
+ continue;
+ }
+ }
+ // not reachable
+ }
+ case GOT_OPEN_BRACE: {
+ switch (ch) {
+ case ':':
+ case '}':
+ case ',': {
+ final String name = value.substring(nameStart, i).trim();
+ if ("/".equals(name)) { //$NON-NLS-1$
+ builder.append(File.separator);
+ state = ch == '}' ? INITIAL : RESOLVED;
+ continue;
+ } else if (":".equals(name)) { //$NON-NLS-1$
+ builder.append(File.pathSeparator);
+ state = ch == '}' ? INITIAL : RESOLVED;
+ continue;
+ }
+ // First check for system property, then env variable
+ String val = resolver.getSystemProperty(name);
+ if (val == null && name.startsWith("env."))
//$NON-NLS-1$
+ val =
resolver.getEnvironmentProperty(name.substring(4));
+
+ if (val != null) {
+ builder.append(val);
+ resolvedValue = val;
+ state = ch == '}' ? INITIAL : RESOLVED;
+ continue;
+ } else if (ch == ',') {
+ nameStart = i + 1;
+ continue;
+ } else if (ch == ':') {
+ start = i + 1;
+ state = DEFAULT;
+ continue;
+ } else {
+ throw new IllegalStateException("Failed to resolve
expression: "+ value.substring(start - 2, i + 1)); //$NON-NLS-1$
+ }
+ }
+ default: {
+ continue;
+ }
+ }
+ // not reachable
+ }
+ case RESOLVED: {
+ if (ch == '}') {
+ state = INITIAL;
+ }
+ continue;
+ }
+ case DEFAULT: {
+ if (ch == '}') {
+ state = INITIAL;
+ builder.append(value.substring(start, i));
+ }
+ continue;
+ }
+ default:
+ throw new IllegalStateException("Unexpected char seen:
"+ch); //$NON-NLS-1$
+ }
+ }
+ switch (state) {
+ case GOT_DOLLAR: {
+ builder.append('$');
+ break;
+ }
+ case DEFAULT: {
+ builder.append(value.substring(start - 2));
+ break;
+ }
+ case GOT_OPEN_BRACE: {
+ // We had a reference that was not resolved, throw ISE
+ if (resolvedValue == null)
+ throw new IllegalStateException("Incomplete expression:
"+builder.toString()); //$NON-NLS-1$
+ break;
+ }
+ }
+ return builder.toString();
+ }
+}
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/editor/PortSection.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/editor/PortSection.java 2011-12-16
17:09:20 UTC (rev 37398)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/editor/PortSection.java 2011-12-16
17:54:21 UTC (rev 37399)
@@ -54,6 +54,7 @@
import org.jboss.ide.eclipse.as.core.server.IJBoss6Server;
import org.jboss.ide.eclipse.as.core.server.IJBossServerConstants;
import org.jboss.ide.eclipse.as.core.server.internal.ServerAttributeHelper;
+import org.jboss.ide.eclipse.as.core.util.ExpressionResolverUtil;
import org.jboss.ide.eclipse.as.core.util.IJBossToolingConstants;
import org.jboss.ide.eclipse.as.ui.JBossServerUIPlugin;
import org.jboss.ide.eclipse.as.ui.Messages;
@@ -409,6 +410,7 @@
query.refresh();
result = query.getFirstResult();
result = result == null ? "" : result; //$NON-NLS-1$
+ result = ExpressionResolverUtil.safeReplaceProperties(result);
return new Integer(Integer.parseInt(result)).toString();
} catch(NumberFormatException nfe) {
} catch( IllegalStateException ise ) {
Added:
trunk/as/tests/org.jboss.ide.eclipse.as.test/src/org/jboss/ide/eclipse/as/test/util/ExpressionResolverUtilTest.java
===================================================================
---
trunk/as/tests/org.jboss.ide.eclipse.as.test/src/org/jboss/ide/eclipse/as/test/util/ExpressionResolverUtilTest.java
(rev 0)
+++
trunk/as/tests/org.jboss.ide.eclipse.as.test/src/org/jboss/ide/eclipse/as/test/util/ExpressionResolverUtilTest.java 2011-12-16
17:54:21 UTC (rev 37399)
@@ -0,0 +1,20 @@
+package org.jboss.ide.eclipse.as.test.util;
+
+import org.jboss.ide.eclipse.as.core.util.ExpressionResolverUtil;
+
+import junit.framework.TestCase;
+
+public class ExpressionResolverUtilTest extends TestCase {
+ public void testExpressionResolver() {
+ assertEquals("aaa",
ExpressionResolverUtil.safeReplaceProperties("aaa"));
+ assertEquals("t9",
ExpressionResolverUtil.safeReplaceProperties("t${something:9}"));
+ assertEquals("t9a",
ExpressionResolverUtil.safeReplaceProperties("t${something:9}a"));
+
+ // NO recursive checking
+ assertEquals("5:notfound}",
ExpressionResolverUtil.safeReplaceProperties("${twoPoint${someNumber:5}:notfound}"));
+
+ // unresolvable, so no change
+ assertEquals("t${something}",
ExpressionResolverUtil.safeReplaceProperties("t${something}"));
+ assertEquals("t${something}a",
ExpressionResolverUtil.safeReplaceProperties("t${something}a"));
+ }
+}