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 data() { + return ServerParameterUtils.asCollection(ServerParameterUtils.getJBossServerTypeParameters()); + } + + public ServerModeRuntimeDetailsTest(String serverType) { + this.serverType = serverType; + } + + @Before + public void setUp() { + server = ServerCreationTestUtils.createMockServerWithRuntime(serverType, getClass().getName() + serverType); + } + + @After + public void tearDown() throws Exception { + ServerCreationTestUtils.deleteAllServersAndRuntimes(); + } + + @Test + public void testServerDefaults() { + forceStart(RSECorePlugin.PLUGIN_ID); + // First try with local mode + IServerModeDetails ret = (IServerModeDetails) + Platform.getAdapterManager().getAdapter(server, IServerModeDetails.class); + assertNotNull(ret); + assertTrue(ret instanceof LocalServerModeDetails); + + // Next try with rse mode + IServerWorkingCopy wc = server.createWorkingCopy(); + wc.setAttribute(IDeployableServer.SERVER_MODE, "rse"); + try { + server = wc.save(true, new NullProgressMonitor()); + } catch(CoreException ce) { + fail(ce.getMessage()); + } + ret = (IServerModeDetails)Platform.getAdapterManager().getAdapter(server, IServerModeDetails.class); + assertNotNull(ret); + assertTrue(ret instanceof RSEServerModeDetails); + + + // Now try with a garbage mode + wc = server.createWorkingCopy(); + wc.setAttribute(IDeployableServer.SERVER_MODE, "garbage222"); + try { + server = wc.save(true, new NullProgressMonitor()); + } catch(CoreException ce) { + fail(ce.getMessage()); + } + ret = (IServerModeDetails) Platform.getAdapterManager().getAdapter(server, IServerModeDetails.class); + assertNull(ret); + } + + + private static boolean forceStart(String bundleId) { + Bundle bundle = Platform.getBundle(bundleId); //$NON-NLS-1$ + if (bundle != null && bundle.getState() != Bundle.ACTIVE) { + try { + bundle.start(); + } catch (BundleException e) { + // ignore + } + } + return bundle.getState() == Bundle.ACTIVE; + } + +}