diff --git a/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/AbstractBehaviourDelegate.java b/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/AbstractBehaviourDelegate.java
index 4850a878cf..33039bdb14 100644
--- a/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/AbstractBehaviourDelegate.java
+++ b/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/AbstractBehaviourDelegate.java
@@ -19,6 +19,7 @@
import org.jboss.ide.eclipse.as.core.server.IDelegatingServerBehavior;
import org.jboss.ide.eclipse.as.core.server.IJBossBehaviourDelegate;
import org.jboss.ide.eclipse.as.core.server.IModulePathFilter;
+import org.jboss.ide.eclipse.as.core.server.IServerModeDetails;
/**
* A complete stub implementation of the interface
@@ -104,4 +105,13 @@ public void dispose() {
// TODO Auto-generated method stub
}
+
+ /*
+ * Not added to the interface, but is added to the abstract class.
+ * Subclasses may override to return the proper information.
+ */
+ public IServerModeDetails getServerModeDetails() {
+ return null;
+ }
+
}
diff --git a/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/AbstractDeploymentScannerAdditions.java b/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/AbstractDeploymentScannerAdditions.java
index b2cc1343cd..ab2cb50d42 100644
--- a/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/AbstractDeploymentScannerAdditions.java
+++ b/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/AbstractDeploymentScannerAdditions.java
@@ -14,6 +14,8 @@
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.wst.server.core.IModule;
@@ -22,6 +24,7 @@
import org.jboss.ide.eclipse.as.core.server.IDeployableServer;
import org.jboss.ide.eclipse.as.core.server.IDeploymentScannerModifier;
import org.jboss.ide.eclipse.as.core.server.IJBossServerPublishMethodType;
+import org.jboss.ide.eclipse.as.core.server.IServerModeDetails;
import org.jboss.ide.eclipse.as.core.util.DeploymentPreferenceLoader;
import org.jboss.ide.eclipse.as.core.util.IJBossToolingConstants;
import org.jboss.ide.eclipse.as.core.util.ServerConverter;
@@ -115,13 +118,16 @@ public String[] getDeployLocationFolders(IServer server) {
// custom
if( type.equals(JBossServer.DEPLOY_CUSTOM)) {
- String serverHome = null;
- if (server != null && server.getRuntime()!= null && server.getRuntime().getLocation() != null) {
- serverHome = server.getRuntime().getLocation().toString();
+ IServerModeDetails det = (IServerModeDetails)Platform.getAdapterManager().getAdapter(server, IServerModeDetails.class);
+ String serverHome = det.getProperty(IServerModeDetails.PROP_SERVER_HOME);
+
+ String custom1 = server.getAttribute(IDeployableServer.DEPLOY_DIRECTORY, (String)null);
+ if( !new Path(custom1).isAbsolute()) {
+ custom1 = new Path(serverHome).append(custom1).toString();
}
- String custom = JBossServer.getDeployFolder(ds, JBossServer.DEPLOY_CUSTOM);
- if( !folders.contains(custom) && !custom.equals(serverHome))
- folders.add(custom);
+
+ if( custom1 != null && !folders.contains(custom1) && !serverHome.equals(custom1))
+ folders.add(custom1);
}
IModule[] modules2 = org.eclipse.wst.server.core.ServerUtil.getModules(server.getServerType().getRuntimeType().getModuleTypes());
@@ -148,8 +154,8 @@ public String[] getDeployLocationFolders(IServer server) {
* standalone/deployments
*/
protected String getInsideServerDeployFolder(IServer server) {
- JBossServer ds = (JBossServer)ServerConverter.getJBossServer(server);
- return ds.getDeployFolder(IDeployableServer.DEPLOY_SERVER);
+ IServerModeDetails det = (IServerModeDetails)Platform.getAdapterManager().getAdapter(server, IServerModeDetails.class);
+ return det.getProperty(IServerModeDetails.PROP_SERVER_DEPLOYMENTS_FOLDER);
}
/*
diff --git a/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/DelegatingServerBehavior.java b/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/DelegatingServerBehavior.java
index f5c5174089..ba50e7e0f5 100755
--- a/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/DelegatingServerBehavior.java
+++ b/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/DelegatingServerBehavior.java
@@ -35,7 +35,6 @@
import org.jboss.ide.eclipse.as.core.server.internal.BehaviourModel.Behaviour;
import org.jboss.ide.eclipse.as.core.server.internal.BehaviourModel.BehaviourImpl;
import org.jboss.ide.eclipse.as.core.server.internal.launch.DelegatingStartLaunchConfiguration;
-import org.jboss.ide.eclipse.as.core.util.DeploymentPreferenceLoader;
import org.jboss.ide.eclipse.as.core.util.ServerConverter;
import org.jboss.ide.eclipse.as.wtp.core.util.ServerModelUtilities;
@@ -54,10 +53,13 @@ public DelegatingServerBehavior() {
}
public synchronized IJBossBehaviourDelegate getDelegate() {
- IJBossServerPublishMethodType type = DeploymentPreferenceLoader.getCurrentDeploymentMethodType(getServer());
- String id = type == null ? LocalPublishMethod.LOCAL_PUBLISH_METHOD : type.getId();
+ IJBossServerPublishMethodType type = BehaviourModel.getPublishMethodType(getServer(), LocalPublishMethod.LOCAL_PUBLISH_METHOD);
+ String id = type == null ? null : type.getId();
IJBossBehaviourDelegate ret = null;
- if( id.equals(lastModeId) && delegate != null && delegate.getBehaviourTypeId().equals(id))
+ if( id == null ) {
+ lastModeId = null;
+ ret = null;
+ } else if( id.equals(lastModeId) && delegate != null && delegate.getBehaviourTypeId().equals(id))
ret = delegate;
else {
Behaviour b = BehaviourModel.getModel().getBehaviour(getServer().getServerType().getId());
@@ -83,14 +85,16 @@ public IModulePathFilter getPathFilter(IModule[] moduleTree) {
public void stop(boolean force) {
Trace.trace(Trace.STRING_FINER, "DelegatingServerBehavior initiating stop for server " + getServer().getName()); //$NON-NLS-1$
- getDelegate().stop(force);
+ if( getDelegate() != null )
+ getDelegate().stop(force);
}
@Override
public void setServerStarting() {
synchronized(serverStateLock) {
super.setServerStarting();
- getDelegate().onServerStarting();
+ if( getDelegate() != null )
+ getDelegate().onServerStarting();
}
}
@@ -98,7 +102,8 @@ public void setServerStarting() {
public void setServerStarted() {
synchronized(serverStateLock) {
super.setServerStarted();
- getDelegate().onServerStarted();
+ if( getDelegate() != null )
+ getDelegate().onServerStarted();
}
}
@@ -106,14 +111,16 @@ public void setServerStarted() {
public void setServerStopping() {
synchronized(serverStateLock) {
super.setServerStopping();
- getDelegate().onServerStopping();
+ if( getDelegate() != null )
+ getDelegate().onServerStopping();
}
}
public void setServerStopped() {
synchronized(serverStateLock) {
super.setServerStopped();
- getDelegate().onServerStopped();
+ if( getDelegate() != null )
+ getDelegate().onServerStopped();
}
IModule[] mods = getServer().getModules();
setModulesStopped(new IModule[]{}, mods);
@@ -148,15 +155,18 @@ public void setRunMode(String mode) {
protected void publishStart(final IProgressMonitor monitor) throws CoreException {
super.publishStart(monitor);
- getDelegate().publishStart(monitor);
+ if( getDelegate() != null )
+ getDelegate().publishStart(monitor);
}
protected void publishFinish(final IProgressMonitor monitor) throws CoreException {
Trace.trace(Trace.STRING_FINER, "PublishFinish in DelegatingServerBehavior"); //$NON-NLS-1$
- try {
- getDelegate().publishFinish(monitor);
- } finally {
- super.publishFinish(monitor);
+ if( getDelegate() != null ) {
+ try {
+ getDelegate().publishFinish(monitor);
+ } finally {
+ super.publishFinish(monitor);
+ }
}
}
diff --git a/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/LocalJBossBehaviorDelegate.java b/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/LocalJBossBehaviorDelegate.java
index 1ddcf5eb45..8ac4019c61 100644
--- a/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/LocalJBossBehaviorDelegate.java
+++ b/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/LocalJBossBehaviorDelegate.java
@@ -39,6 +39,7 @@
import org.jboss.ide.eclipse.as.core.publishers.LocalPublishMethod;
import org.jboss.ide.eclipse.as.core.server.IJBossServerRuntime;
import org.jboss.ide.eclipse.as.core.server.IProcessProvider;
+import org.jboss.ide.eclipse.as.core.server.IServerModeDetails;
import org.jboss.ide.eclipse.as.core.server.IServerStatePoller;
import org.jboss.ide.eclipse.as.core.server.internal.launch.configuration.LocalStopLaunchConfigurator;
import org.jboss.ide.eclipse.as.core.util.IEventCodes;
@@ -55,7 +56,8 @@
* launch configuration may all try to change these details at varying times.
*
*/
-public class LocalJBossBehaviorDelegate extends AbstractJBossBehaviourDelegate implements IProcessProvider {
+public class LocalJBossBehaviorDelegate extends AbstractJBossBehaviourDelegate
+ implements IProcessProvider {
private static final String STOP_LAUNCH_TYPE = "org.jboss.ide.eclipse.as.core.server.stopLaunchConfiguration"; //$NON-NLS-1$
@@ -410,4 +412,9 @@ protected void pollServer(final boolean expectedState) {
pollServer(expectedState, poller);
}
}
+
+ @Override
+ public IServerModeDetails getServerModeDetails() {
+ return new LocalServerModeDetails(getServer());
+ }
}
diff --git a/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/LocalServerModeDetails.java b/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/LocalServerModeDetails.java
new file mode 100644
index 0000000000..abbf6d82c3
--- /dev/null
+++ b/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/LocalServerModeDetails.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.ide.eclipse.as.core.server.internal;
+
+import org.eclipse.core.runtime.Path;
+import org.eclipse.wst.server.core.IRuntime;
+import org.eclipse.wst.server.core.IServer;
+import org.jboss.ide.eclipse.as.core.server.IJBossServerRuntime;
+import org.jboss.ide.eclipse.as.core.server.IServerModeDetails;
+import org.jboss.ide.eclipse.as.core.server.internal.extendedproperties.JBossExtendedProperties;
+import org.jboss.ide.eclipse.as.core.server.internal.extendedproperties.ServerExtendedProperties;
+import org.jboss.ide.eclipse.as.core.server.internal.v7.LocalJBoss7ServerRuntime;
+import org.jboss.ide.eclipse.as.core.util.IJBossRuntimeResourceConstants;
+import org.jboss.ide.eclipse.as.core.util.RuntimeUtils;
+
+/**
+ * Local servers pull most of their critical configuration locations from the runtime.
+ * Technically the server is not required, only the runtime is. But for other types
+ * like RSE, which store their data in the server object, the server itself is needed.
+ *
+ * Eventually even this class will be broken up on a per-version basis,
+ * but at this point it is not necessary.
+ */
+public class LocalServerModeDetails implements IServerModeDetails {
+
+ private IServer server;
+ public LocalServerModeDetails(IServer server) {
+ this.server = server;
+ }
+
+ @Override
+ public String getProperty(String prop) {
+ IRuntime rt = server.getRuntime();
+ if( PROP_SERVER_HOME.equals(prop)) {
+ return rt == null ? null : rt.getLocation().toOSString();
+ }
+ IJBossServerRuntime jbrt = RuntimeUtils.getJBossServerRuntime(rt);
+ if( PROP_CONFIG_NAME.equals(prop)) {
+ return jbrt == null ? null : jbrt.getJBossConfiguration();
+ }
+ if( PROP_CONFIG_LOCATION.equals(prop)) {
+ return jbrt == null ? null : jbrt.getConfigLocation();
+ }
+ if( PROP_AS7_CONFIG_FILE.equals(prop)) {
+ if( isAS7Structure()) {
+ return ((LocalJBoss7ServerRuntime)jbrt).getConfigurationFile();
+ }
+ }
+ if( PROP_SERVER_DEPLOYMENTS_FOLDER.equals(prop)) {
+ ServerExtendedProperties sep = ExtendedServerPropertiesAdapterFactory.getServerExtendedProperties(server);
+ return ((JBossExtendedProperties)sep).getServerDeployLocation();
+ }
+ return null;
+ }
+ private boolean isAS7Structure() {
+ ServerExtendedProperties sep = ExtendedServerPropertiesAdapterFactory.getServerExtendedProperties(server);
+ if (sep != null && sep.getFileStructure() == ServerExtendedProperties.FILE_STRUCTURE_CONFIG_DEPLOYMENTS) {
+ return true;
+ }
+ return false;
+ }
+
+}
diff --git a/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/ServerModeDetailsAdapterFactory.java b/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/ServerModeDetailsAdapterFactory.java
new file mode 100644
index 0000000000..7cea8b3065
--- /dev/null
+++ b/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/ServerModeDetailsAdapterFactory.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.ide.eclipse.as.core.server.internal;
+
+import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
+import org.jboss.ide.eclipse.as.core.publishers.LocalPublishMethod;
+import org.jboss.ide.eclipse.as.core.server.IDelegatingServerBehavior;
+import org.jboss.ide.eclipse.as.core.server.IJBossBehaviourDelegate;
+import org.jboss.ide.eclipse.as.core.server.IServerModeDetails;
+import org.jboss.ide.eclipse.as.core.util.DeploymentPreferenceLoader;
+import org.jboss.ide.eclipse.as.core.util.IJBossToolingConstants;
+
+public class ServerModeDetailsAdapterFactory implements IAdapterFactory, IJBossToolingConstants {
+
+ public ServerModeDetailsAdapterFactory() {
+ }
+
+ public Object getAdapter(Object adaptableObject, Class adapterType) {
+ IServerModeDetails props = getModeDetails(adaptableObject);
+ if( props != null && adapterType.isAssignableFrom(props.getClass()))
+ return props;
+ return null;
+ }
+
+ public IServerModeDetails getModeDetails(Object adaptableObject) {
+ if( adaptableObject instanceof IServer ) {
+ IServer ao = (IServer)adaptableObject;
+ ServerBehaviourDelegate del = (ServerBehaviourDelegate)ao.loadAdapter(ServerBehaviourDelegate.class, null);
+ if( del instanceof IDelegatingServerBehavior) {
+ IJBossBehaviourDelegate del2 = ((IDelegatingServerBehavior)del).getDelegate();
+ if( del2 instanceof AbstractJBossBehaviourDelegate) {
+ return ((AbstractJBossBehaviourDelegate)del2).getServerModeDetails();
+ }
+ }
+ }
+ return null;
+ }
+
+ public Class[] getAdapterList() {
+ return new Class[]{ IServerModeDetails.class};
+ }
+
+}
diff --git a/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/extendedproperties/JBossAS7ExtendedProperties.java b/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/extendedproperties/JBossAS7ExtendedProperties.java
index 9d84a38dbe..2cdde98df1 100644
--- a/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/extendedproperties/JBossAS7ExtendedProperties.java
+++ b/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/extendedproperties/JBossAS7ExtendedProperties.java
@@ -10,6 +10,9 @@
******************************************************************************/
package org.jboss.ide.eclipse.as.core.server.internal.extendedproperties;
+import static org.jboss.ide.eclipse.as.core.util.IJBossRuntimeResourceConstants.AS7_DEPLOYMENTS;
+import static org.jboss.ide.eclipse.as.core.util.IJBossRuntimeResourceConstants.AS7_STANDALONE;
+
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
@@ -18,6 +21,7 @@
import org.eclipse.osgi.util.NLS;
import org.eclipse.wst.server.core.IRuntime;
import org.jboss.ide.eclipse.as.core.Messages;
+import org.jboss.ide.eclipse.as.core.resolvers.ConfigNameResolver;
import org.jboss.ide.eclipse.as.core.server.IDefaultLaunchArguments;
import org.jboss.ide.eclipse.as.core.server.IDeploymentScannerModifier;
import org.jboss.ide.eclipse.as.core.server.IServerModuleStateVerifier;
@@ -25,6 +29,7 @@
import org.jboss.ide.eclipse.as.core.server.internal.v7.LocalJBoss7DeploymentScannerAdditions;
import org.jboss.ide.eclipse.as.core.server.internal.v7.LocalJBoss7ServerRuntime;
import org.jboss.ide.eclipse.as.core.util.IJBossRuntimeResourceConstants;
+import org.jboss.ide.eclipse.as.core.util.ServerUtil;
import org.jboss.ide.eclipse.as.management.core.IJBoss7ManagerService;
import org.jboss.ide.eclipse.as.management.core.IJBossManagerServiceProvider;
import org.jboss.ide.eclipse.as.management.core.JBoss7ManagerUtil;
@@ -116,4 +121,15 @@ public IJBoss7ManagerService getManagerService() {
public String getManagerServiceId() {
return IJBoss7ManagerService.AS_VERSION_710_Beta;
}
+
+ /**
+ * Returns the full path of a local server's server/{config}/deploy folder
+ */
+ @Override
+ public String getServerDeployLocation() {
+ if( runtime == null )
+ return null;
+ IPath p = runtime.getLocation().append(AS7_STANDALONE).append(AS7_DEPLOYMENTS);
+ return ServerUtil.makeGlobal(runtime, p).toString();
+ }
}
diff --git a/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/extendedproperties/JBossExtendedProperties.java b/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/extendedproperties/JBossExtendedProperties.java
index 96f0a01f10..40722b0357 100644
--- a/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/extendedproperties/JBossExtendedProperties.java
+++ b/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/extendedproperties/JBossExtendedProperties.java
@@ -20,7 +20,6 @@
import org.eclipse.jdt.internal.launching.environments.EnvironmentsManager;
import org.eclipse.jdt.launching.environments.IExecutionEnvironment;
import org.eclipse.osgi.util.NLS;
-import org.eclipse.wst.server.core.IRuntimeType;
import org.jboss.ide.eclipse.as.core.JBossServerCorePlugin;
import org.jboss.ide.eclipse.as.core.Messages;
import org.jboss.ide.eclipse.as.core.resolvers.ConfigNameResolver;
@@ -31,7 +30,6 @@
import org.jboss.ide.eclipse.as.core.server.internal.JBossLT6ModuleStateVerifier;
import org.jboss.ide.eclipse.as.core.server.internal.JBossServer;
import org.jboss.ide.eclipse.as.core.server.internal.JMXServerDeploymentScannerAdditions;
-import org.jboss.ide.eclipse.as.core.util.IConstants;
import org.jboss.ide.eclipse.as.core.util.IJBossRuntimeResourceConstants;
import org.jboss.ide.eclipse.as.core.util.IJBossToolingConstants;
import org.jboss.ide.eclipse.as.core.util.ServerUtil;
@@ -69,6 +67,7 @@ protected ServerBeanLoader getServerBeanLoader() {
/**
* Returns the full path of a local server's server/{config}/deploy folder
+ * or standalone/deployments folder depending on configuration location
*/
public String getServerDeployLocation() {
String original = ConfigNameResolver.getVariablePattern(ConfigNameResolver.JBOSS_CONFIG_DIR) +
diff --git a/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/JBoss7Server.java b/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/JBoss7Server.java
index d7b5aaffe8..9d51cc8b98 100644
--- a/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/JBoss7Server.java
+++ b/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/JBoss7Server.java
@@ -10,7 +10,6 @@
******************************************************************************/
package org.jboss.ide.eclipse.as.core.server.internal.v7;
-import static org.jboss.ide.eclipse.as.core.util.IJBossRuntimeResourceConstants.AS7_DEPLOYMENTS;
import static org.jboss.ide.eclipse.as.core.util.IJBossRuntimeResourceConstants.AS7_STANDALONE;
import static org.jboss.ide.eclipse.as.core.util.IJBossRuntimeResourceConstants.FOLDER_TMP;
import static org.jboss.ide.eclipse.as.core.util.IJBossToolingConstants.AS7_MANAGEMENT_PORT;
@@ -76,14 +75,7 @@ public String getDeployLocationType() {
}
public String getDeployFolder(String type) {
- if( type.equals(DEPLOY_SERVER) ) {
- IRuntime rt = getServer().getRuntime();
- if( rt == null )
- return null;
- IPath p = rt.getLocation().append(AS7_STANDALONE).append(AS7_DEPLOYMENTS);
- return ServerUtil.makeGlobal(rt, p).toString();
- }
- return getDeployFolder(this, type);
+ return super.getDeployFolder(type);
}
public String getTempDeployFolder() {
diff --git a/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/LocalJBoss7DeploymentScannerAdditions.java b/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/LocalJBoss7DeploymentScannerAdditions.java
index b7d450a4e2..fede004b75 100644
--- a/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/LocalJBoss7DeploymentScannerAdditions.java
+++ b/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/LocalJBoss7DeploymentScannerAdditions.java
@@ -18,7 +18,6 @@
import org.eclipse.core.runtime.IStatus;
import org.eclipse.wst.server.core.IServer;
import org.jboss.ide.eclipse.as.core.Trace;
-import org.jboss.ide.eclipse.as.core.publishers.LocalPublishMethod;
import org.jboss.ide.eclipse.as.core.server.internal.AbstractDeploymentScannerAdditions;
import org.jboss.ide.eclipse.as.core.server.internal.extendedproperties.ServerExtendedProperties;
@@ -27,9 +26,6 @@ public LocalJBoss7DeploymentScannerAdditions() {
}
public boolean accepts(IServer server) {
- if( !LocalPublishMethod.LOCAL_PUBLISH_METHOD.equals(getServerMode(server)))
- return false;
-
ServerExtendedProperties props = (ServerExtendedProperties)server.loadAdapter(ServerExtendedProperties.class, null);
boolean usesManagement = props != null &&
props.getMultipleDeployFolderSupport() == ServerExtendedProperties.DEPLOYMENT_SCANNER_AS7_MANAGEMENT_SUPPORT;
diff --git a/as/plugins/org.jboss.ide.eclipse.as.core/plugin.xml b/as/plugins/org.jboss.ide.eclipse.as.core/plugin.xml
index cacfd8ddb6..c0f291cb6f 100755
--- a/as/plugins/org.jboss.ide.eclipse.as.core/plugin.xml
+++ b/as/plugins/org.jboss.ide.eclipse.as.core/plugin.xml
@@ -1523,4 +1523,14 @@
+
+
+
+
+
+
+
diff --git a/as/plugins/org.jboss.ide.eclipse.as.rse.core/src/org/jboss/ide/eclipse/as/rse/core/AbstractRSEBehaviourDelegate.java b/as/plugins/org.jboss.ide.eclipse.as.rse.core/src/org/jboss/ide/eclipse/as/rse/core/AbstractRSEBehaviourDelegate.java
index d1b5076dad..14457d7283 100644
--- a/as/plugins/org.jboss.ide.eclipse.as.rse.core/src/org/jboss/ide/eclipse/as/rse/core/AbstractRSEBehaviourDelegate.java
+++ b/as/plugins/org.jboss.ide.eclipse.as.rse.core/src/org/jboss/ide/eclipse/as/rse/core/AbstractRSEBehaviourDelegate.java
@@ -17,6 +17,7 @@
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.wst.server.core.IServer;
+import org.jboss.ide.eclipse.as.core.server.IServerModeDetails;
import org.jboss.ide.eclipse.as.core.server.IServerStatePoller;
import org.jboss.ide.eclipse.as.core.server.internal.AbstractJBossBehaviourDelegate;
import org.jboss.ide.eclipse.as.core.util.PollThreadUtils;
@@ -90,5 +91,9 @@ protected void setServerStopped() {
getActualBehavior().setServerStopped();
pid = null;
}
-
+
+ @Override
+ public IServerModeDetails getServerModeDetails() {
+ return new RSEServerModeDetails(getServer());
+ }
}
diff --git a/as/plugins/org.jboss.ide.eclipse.as.rse.core/src/org/jboss/ide/eclipse/as/rse/core/RSEServerModeDetails.java b/as/plugins/org.jboss.ide.eclipse.as.rse.core/src/org/jboss/ide/eclipse/as/rse/core/RSEServerModeDetails.java
new file mode 100644
index 0000000000..23da662948
--- /dev/null
+++ b/as/plugins/org.jboss.ide.eclipse.as.rse.core/src/org/jboss/ide/eclipse/as/rse/core/RSEServerModeDetails.java
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.ide.eclipse.as.rse.core;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.wst.server.core.IServer;
+import org.jboss.ide.eclipse.as.core.server.IServerModeDetails;
+import org.jboss.ide.eclipse.as.core.server.internal.ExtendedServerPropertiesAdapterFactory;
+import org.jboss.ide.eclipse.as.core.server.internal.extendedproperties.ServerExtendedProperties;
+import org.jboss.ide.eclipse.as.core.util.IConstants;
+import org.jboss.ide.eclipse.as.core.util.IJBossRuntimeResourceConstants;
+
+public class RSEServerModeDetails implements IServerModeDetails {
+ private IServer server;
+ public RSEServerModeDetails(IServer server) {
+ this.server = server;
+ }
+
+ @Override
+ public String getProperty(String prop) {
+ if( PROP_SERVER_HOME.equals(prop)) {
+ return RSEUtils.getRSEHomeDir(server);
+ }
+ if( PROP_CONFIG_NAME.equals(prop)) {
+ return RSEUtils.getRSEConfigName(server);
+ }
+ if( PROP_CONFIG_LOCATION.equals(prop)) {
+ // Currently AS7 does not support custom configurations
+ if (isAS7Structure()) {
+ IPath p = new Path(IJBossRuntimeResourceConstants.AS7_STANDALONE).append(IJBossRuntimeResourceConstants.CONFIGURATION);
+ return RSEUtils.makeGlobal(server, p).toString();
+ } else {
+ // Remote servers at this time do not allow arbitrary configuration locations.
+ // This would require UI changes and API additions.
+ return getServerLT6RelativeConfigPath(IConstants.SERVER, null);
+ }
+ }
+ if( PROP_SERVER_DEPLOYMENTS_FOLDER.equals(prop)) {
+ // Currently AS7 does not support custom configurations
+ if (isAS7Structure()) {
+ IPath p = new Path(IJBossRuntimeResourceConstants.AS7_STANDALONE).append(IJBossRuntimeResourceConstants.AS7_DEPLOYMENTS);
+ return RSEUtils.makeGlobal(server, p).toString();
+ } else {
+ // Remote servers at this time do not allow arbitrary configuration locations.
+ // This would require UI changes and API additions.
+ return getServerLT6RelativeConfigPath(IConstants.SERVER, IJBossRuntimeResourceConstants.DEPLOY);
+ }
+ }
+
+
+ if( PROP_AS7_CONFIG_FILE.equals(prop)) {
+ return RSEUtils.getRSEConfigFile(server);
+ }
+ return null;
+ }
+
+ /* Get a global path which includes the config name */
+ private String getServerLT6RelativeConfigPath(String prefix, String suffix) {
+ String config = RSEUtils.getRSEConfigName(server);
+ if( config == null )
+ return null;
+ IPath p = new Path(prefix).append(config);
+ if( suffix != null )
+ p = p.append(suffix);
+ return RSEUtils.makeGlobal(server, p).toString();
+ }
+
+ private boolean isAS7Structure() {
+ ServerExtendedProperties sep = ExtendedServerPropertiesAdapterFactory.getServerExtendedProperties(server);
+ if (sep != null && sep.getFileStructure() == ServerExtendedProperties.FILE_STRUCTURE_CONFIG_DEPLOYMENTS) {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/as/plugins/org.jboss.ide.eclipse.as.rse.core/src/org/jboss/ide/eclipse/as/rse/core/RSEUtils.java b/as/plugins/org.jboss.ide.eclipse.as.rse.core/src/org/jboss/ide/eclipse/as/rse/core/RSEUtils.java
index 2a138e0f1d..7033f25db7 100644
--- a/as/plugins/org.jboss.ide.eclipse.as.rse.core/src/org/jboss/ide/eclipse/as/rse/core/RSEUtils.java
+++ b/as/plugins/org.jboss.ide.eclipse.as.rse.core/src/org/jboss/ide/eclipse/as/rse/core/RSEUtils.java
@@ -28,6 +28,7 @@
import org.jboss.ide.eclipse.as.core.server.internal.ExtendedServerPropertiesAdapterFactory;
import org.jboss.ide.eclipse.as.core.server.internal.JBossServer;
import org.jboss.ide.eclipse.as.core.server.internal.extendedproperties.ServerExtendedProperties;
+import org.jboss.ide.eclipse.as.core.server.internal.v7.LocalJBoss7ServerRuntime;
import org.jboss.ide.eclipse.as.core.util.IConstants;
import org.jboss.ide.eclipse.as.core.util.IJBossRuntimeResourceConstants;
import org.jboss.ide.eclipse.as.core.util.RuntimeUtils;
@@ -37,10 +38,30 @@
* and turned into a proper API, but in as simple a way as possible
*/
public class RSEUtils {
+
+ /**
+ * A key which represents either the configuration name of as < 7 server (default or all),
+ * or, in as >= 7, represents the configuration FILE name (standalone.xml, etc)
+ */
public static final String RSE_SERVER_CONFIG = "org.jboss.ide.eclipse.as.rse.core.RSEServerConfig"; //$NON-NLS-1$
+
+ /**
+ * The home directory of the remote server
+ */
public static final String RSE_SERVER_HOME_DIR = "org.jboss.ide.eclipse.as.rse.core.RSEServerHomeDir"; //$NON-NLS-1$
+
+ /**
+ * A key to store which RSE host this server is attached to
+ */
public static final String RSE_SERVER_HOST = "org.jboss.ide.eclipse.as.rse.core.ServerHost"; //$NON-NLS-1$
+ /**
+ * The default host if one is not set
+ */
public static final String RSE_SERVER_DEFAULT_HOST = "Local"; //$NON-NLS-1$
+
+ /**
+ * The name of this mode, which is just 'rse'
+ */
public static final String RSE_MODE = "rse";
public static String getRSEConnectionName(IServer server) {
@@ -71,10 +92,20 @@ public static String checkedGetRSEHomeDir(IServerAttributes server) throws CoreE
return serverHome;
}
+
+ public static String getRSEConfigFile(IServerAttributes server) {
+ // At this time, both config name (as<7) and config file (as7) use the same key.
+ // this must remain this way or we will break users.
+ return getRSEConfigName(server);
+ }
+
public static String getRSEConfigName(IServerAttributes server) {
IJBossServerRuntime runtime = RuntimeUtils.getJBossServerRuntime(server);
- return server.getAttribute(RSEUtils.RSE_SERVER_CONFIG,
- runtime == null ? null : runtime.getJBossConfiguration());
+ ServerExtendedProperties sep = ExtendedServerPropertiesAdapterFactory.getServerExtendedProperties(server);
+ boolean isAS7Style =(sep != null && sep.getFileStructure() == ServerExtendedProperties.FILE_STRUCTURE_CONFIG_DEPLOYMENTS);
+ boolean useAS7 = isAS7Style && runtime instanceof LocalJBoss7ServerRuntime;
+ String defVal = useAS7 ? ((LocalJBoss7ServerRuntime)runtime).getConfigurationFile() : runtime.getJBossConfiguration();
+ return server.getAttribute(RSEUtils.RSE_SERVER_CONFIG, runtime == null ? null : defVal);
}
public static String getDeployRootFolder(IDeployableServer server) {
diff --git a/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/core/server/IServerModeDetails.java b/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/core/server/IServerModeDetails.java
new file mode 100644
index 0000000000..4a64fb7746
--- /dev/null
+++ b/as/plugins/org.jboss.ide.eclipse.as.wtp.core/src/org/jboss/ide/eclipse/as/core/server/IServerModeDetails.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.ide.eclipse.as.core.server;
+
+/**
+ * This interface is used to access any details that differ based on
+ * server version AND server mode. The extended properties framework
+ * is for details which are agnostic to server mode (local vs rse),
+ * but this interface is used for accessing data which changes in
+ * its storage and retrieval details based on server mode, or simply
+ * have different defaults depending on the mode.
+ *
+ * This provides a clear interface to access fields that may
+ * change depending on the server mode, such as server home,
+ * configuration name, configuration file, etc.
+ *
+ * This interface reserves the right to add constants
+ * with the prefix PROP_
+ *
+ * Not all properties are valid for all server versions.
+ *
+ * This interface is provisional API and is not intendd to be implemented
+ * by clients outside of ASTools at this time.
+ */
+public interface IServerModeDetails {
+ /**
+ * Get the server home
+ */
+ public static final String PROP_SERVER_HOME = "PROP_SERVER_HOME";
+
+ /**
+ * Get the configuration name, such as 'default' or 'all'
+ */
+ public static final String PROP_CONFIG_NAME = "PROP_CONFIG_NAME";
+
+ /**
+ * The full path of the folder this config is located in, for example:
+ * /home/rob/tmp/default_copy1 would return
+ * /home/rob/tmp/
+ * whereas
+ * /home/rob/apps/jboss/server/default_copy3 would return
+ * /home/rob/apps/jboss/server
+ *
+ * This property behaves different for AS7-style servers,
+ * which should return
+ * /home/rob/apps/jboss/standalone/configuration
+ *
+ * @return
+ */
+ public static final String PROP_CONFIG_LOCATION = "PROP_CONFIG_LOCATION";
+
+ /**
+ * Get the AS7-style configuration file being used,
+ * such as standalone.xml
+ */
+ public static final String PROP_AS7_CONFIG_FILE = "PROP_AS7_CONFIG_FILE";
+
+ /**
+ * Get the default folder the server provides as a deployment folder given the
+ * current server version and mode information
+ */
+ public static final String PROP_SERVER_DEPLOYMENTS_FOLDER = "PROP_SERVER_DEPLOYMENTS_FOLDER";
+
+
+ /**
+ * Retrieve the server-mode-relative value for the given property
+ * @param prop
+ * @return
+ */
+ public String getProperty(String prop);
+
+}
diff --git a/as/tests/org.jboss.tools.as.test.core/src/org/jboss/tools/as/test/core/parametized/server/ParametizedSuite.java b/as/tests/org.jboss.tools.as.test.core/src/org/jboss/tools/as/test/core/parametized/server/ParametizedSuite.java
index a57b72c26c..15bbc52939 100644
--- a/as/tests/org.jboss.tools.as.test.core/src/org/jboss/tools/as/test/core/parametized/server/ParametizedSuite.java
+++ b/as/tests/org.jboss.tools.as.test.core/src/org/jboss/tools/as/test/core/parametized/server/ParametizedSuite.java
@@ -22,6 +22,7 @@
ServerHomeTest.class,
ServerBeanLoader3Test.class,
CreateServerCheckDefaultsTest.class,
+ ServerModeRuntimeDetailsTest.class,
ProjectRuntimeClasspathTest.class,
CreateRuntimeTwiceTest.class,
XPathModelTest.class,
diff --git a/as/tests/org.jboss.tools.as.test.core/src/org/jboss/tools/as/test/core/parametized/server/ServerModeRuntimeDetailsTest.java b/as/tests/org.jboss.tools.as.test.core/src/org/jboss/tools/as/test/core/parametized/server/ServerModeRuntimeDetailsTest.java
new file mode 100644
index 0000000000..9fa6c3a81f
--- /dev/null
+++ b/as/tests/org.jboss.tools.as.test.core/src/org/jboss/tools/as/test/core/parametized/server/ServerModeRuntimeDetailsTest.java
@@ -0,0 +1,115 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.as.test.core.parametized.server;
+
+import java.util.Collection;
+
+import junit.framework.TestCase;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.IServerWorkingCopy;
+import org.jboss.ide.eclipse.as.core.server.IDeployableServer;
+import org.jboss.ide.eclipse.as.core.server.IServerModeDetails;
+import org.jboss.ide.eclipse.as.core.server.internal.LocalServerModeDetails;
+import org.jboss.ide.eclipse.as.rse.core.RSECorePlugin;
+import org.jboss.ide.eclipse.as.rse.core.RSEServerModeDetails;
+import org.jboss.tools.as.test.core.internal.utils.ServerCreationTestUtils;
+import org.jboss.tools.as.test.core.internal.utils.ServerParameterUtils;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleException;
+
+/**
+ * This class will test properties of a default created server and runtime
+ * for properties that should never be null.
+ *
+ * @author rob
+ *
+ */
+@RunWith(value = Parameterized.class)
+public class ServerModeRuntimeDetailsTest extends TestCase {
+ private String serverType;
+ private IServer server;
+ @Parameters
+ public static Collection