[jbosstools-commits] JBoss Tools SVN: r39503 - in trunk/as/plugins: org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal and 7 other directories.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Wed Mar 14 10:37:17 EDT 2012


Author: rob.stryker at jboss.com
Date: 2012-03-14 10:37:16 -0400 (Wed, 14 Mar 2012)
New Revision: 39503

Added:
   trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/AS7DeploymentScannerUtility.java
   trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/dialogs/ModifyDeploymentScannerIntervalDialog.java
Modified:
   trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/UnitedServerListener.java
   trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/ExtendedServerPropertiesAdapterFactory.java
   trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/LocalJBoss7DeploymentScannerAdditions.java
   trunk/as/plugins/org.jboss.ide.eclipse.as.jmx.integration/src/org/jboss/ide/eclipse/as/jmx/integration/JMXServerLifecycleListener.java
   trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/JBossServerUIPlugin.java
   trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/console/ShowConsoleServerStateListener.java
   trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/extensions/XPathRuntimeListener.java
   trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/wizards/JBInitialSelectionProvider.java
Log:
JBIDE-11275 - deployment scanner at 0 shows dialog now in trunk

Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/UnitedServerListener.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/UnitedServerListener.java	2012-03-14 14:34:20 UTC (rev 39502)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/UnitedServerListener.java	2012-03-14 14:37:16 UTC (rev 39503)
@@ -12,7 +12,10 @@
 
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.wst.server.core.IRuntime;
+import org.eclipse.wst.server.core.IRuntimeLifecycleListener;
 import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.IServerLifecycleListener;
+import org.eclipse.wst.server.core.IServerListener;
 import org.eclipse.wst.server.core.ServerEvent;
 
 /**
@@ -22,7 +25,8 @@
  * @author Rob Stryker
  *
  */
-public class UnitedServerListener {
+public class UnitedServerListener implements 
+	IServerLifecycleListener, IServerListener, IRuntimeLifecycleListener {
 
 	public void init(IServer server) {}
 	public void serverAdded(IServer server) {}
@@ -46,4 +50,18 @@
 	}
 	public void runtimeRemoved(IRuntime runtime) {
 	}
+	
+	// Utility method
+	public boolean serverSwitchesToState(ServerEvent event, int state) {
+		int eventKind = event.getKind();
+		if ((eventKind & ServerEvent.SERVER_CHANGE) != 0) {
+			// server change event
+			if ((eventKind & ServerEvent.STATE_CHANGE) != 0) {
+				if( event.getServer().getServerState() == state ) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
 }

Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/ExtendedServerPropertiesAdapterFactory.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/ExtendedServerPropertiesAdapterFactory.java	2012-03-14 14:34:20 UTC (rev 39502)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/ExtendedServerPropertiesAdapterFactory.java	2012-03-14 14:37:16 UTC (rev 39503)
@@ -34,10 +34,14 @@
 		return (ServerExtendedProperties)ret;
 	}
 
-	@Override
 	public Object getAdapter(Object adaptableObject, Class adapterType) {
-		if( adapterType != ServerExtendedProperties.class )
-			return null;
+		ServerExtendedProperties props = getExtendedProperties(adaptableObject);
+		if( adapterType.isAssignableFrom(props.getClass()))
+			return props;
+		return null;
+	}
+	
+	public ServerExtendedProperties getExtendedProperties(Object adaptableObject) {
 		String typeId = null;
 		IServer s = null;
 		IRuntime r = null;
@@ -87,10 +91,12 @@
 		}
 		return null;
 	}
-
-	@Override
+	
 	public Class[] getAdapterList() {
-		return new Class[]{ ServerExtendedProperties.class};
+		return new Class[]{ ServerExtendedProperties.class, 
+				JBossExtendedProperties.class,
+				JBossAS7ExtendedProperties.class,
+				JBossAS710ExtendedProperties.class};
 	}
 
 }

Added: trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/AS7DeploymentScannerUtility.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/AS7DeploymentScannerUtility.java	                        (rev 0)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/AS7DeploymentScannerUtility.java	2012-03-14 14:37:16 UTC (rev 39503)
@@ -0,0 +1,110 @@
+/******************************************************************************* 
+ * Copyright (c) 2011 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.v7;
+
+import java.util.HashMap;
+import java.util.List;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.wst.server.core.IServer;
+import org.jboss.dmr.ModelNode;
+import org.jboss.ide.eclipse.as.core.JBossServerCorePlugin;
+import org.jboss.ide.eclipse.as.core.server.v7.management.AS7ManagementDetails;
+import org.jboss.ide.eclipse.as.management.core.IJBoss7ManagerService;
+import org.jboss.ide.eclipse.as.management.core.JBoss7ManagerUtil;
+
+public class AS7DeploymentScannerUtility {
+
+	public IStatus addDeploymentScanner(final IServer server, String scannerName, final String folder) {
+		ModelNode op = new ModelNode();
+		op.get("operation").set("add"); //$NON-NLS-1$ //$NON-NLS-2$
+		ModelNode addr = op.get("address"); //$NON-NLS-1$
+		addr.add("subsystem", "deployment-scanner");  //$NON-NLS-1$//$NON-NLS-2$
+		addr.add("scanner", scannerName); //$NON-NLS-1$
+		op.get("path").set(folder); //$NON-NLS-1$
+		final String request = op.toJSONString(true);
+		return execute(server, request);
+	}
+
+	public IStatus removeDeploymentScanner(final IServer server, String scannerName) {
+		ModelNode op = new ModelNode();
+		op.get("operation").set("remove"); //$NON-NLS-1$ //$NON-NLS-2$
+		ModelNode addr = op.get("address"); //$NON-NLS-1$
+		addr.add("subsystem", "deployment-scanner");  //$NON-NLS-1$//$NON-NLS-2$
+		addr.add("scanner", scannerName); //$NON-NLS-1$
+		final String request = op.toJSONString(true);
+		return execute(server, request);
+	}
+	
+	public boolean updateDeploymentScannerInterval(final IServer server, String scannerName, int newValue) {
+		ModelNode op = new ModelNode();
+		op.get("operation").set("write-attribute"); //$NON-NLS-1$ //$NON-NLS-2$
+		op.get("name").set("scan-interval"); //$NON-NLS-1$ //$NON-NLS-2$
+		op.get("value").set(newValue); //$NON-NLS-1$
+		ModelNode addr = op.get("address"); //$NON-NLS-1$
+		addr.add("subsystem", "deployment-scanner");  //$NON-NLS-1$//$NON-NLS-2$
+		addr.add("scanner", scannerName); //$NON-NLS-1$ 
+		final String request = op.toJSONString(true);
+		try {
+			executeWithResult(server, request);
+		} catch(Exception e) {
+			return false;
+		}
+		return true;
+	}
+	
+	public HashMap<String, Integer> getDeploymentScannerIntervals(final IServer server) {
+		ModelNode op = new ModelNode();
+		op.get("operation").set("read-attribute"); //$NON-NLS-1$ //$NON-NLS-2$
+		op.get("name").set("scan-interval"); //$NON-NLS-1$ //$NON-NLS-2$
+		ModelNode addr = op.get("address"); //$NON-NLS-1$
+		addr.add("subsystem", "deployment-scanner");  //$NON-NLS-1$//$NON-NLS-2$
+		addr.add("scanner", "*"); //$NON-NLS-1$ //$NON-NLS-2$
+		final String request = op.toJSONString(true);
+		ModelNode response = null;
+		try {
+			response = executeWithResult(server, request);
+		} catch(Exception e) {
+			return new HashMap<String, Integer>();
+		}
+		
+		HashMap<String, Integer> retval=new HashMap<String, Integer>();
+		List<ModelNode> list = response.asList();
+		for( int i = 0; i <list.size(); i++ ) {
+			ModelNode address = list.get(i).get("address"); //$NON-NLS-1$
+			String scannerName = address.asList().get(1).get("scanner").asString(); //$NON-NLS-1$
+			ModelNode intVal = list.get(i).get("result"); //$NON-NLS-1$
+			int intVal2 = intVal.asBigInteger().intValue();
+			retval.put(scannerName, new Integer(intVal2));
+		}
+		return retval;
+	}
+
+	protected IStatus execute(final IServer server, final String request) {
+		try {
+			ModelNode node = executeWithResult(server, request);
+			return Status.OK_STATUS;
+		} catch( Exception e ) {
+			// TODO Throw new checked exception
+			return new Status(IStatus.ERROR, JBossServerCorePlugin.PLUGIN_ID, e.getMessage(), e);
+		}
+	}
+	protected ModelNode executeWithResult(final IServer server, final String request) throws Exception {
+        String resultJSON = JBoss7ManagerUtil.executeWithService(new JBoss7ManagerUtil.IServiceAware<String>() {
+            public String execute(IJBoss7ManagerService service) throws Exception {
+                return service.execute(new AS7ManagementDetails(server), request);
+            }
+        }, server);
+        ModelNode result = ModelNode.fromJSONString(resultJSON);
+        return result;
+	}
+}

Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/LocalJBoss7DeploymentScannerAdditions.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/LocalJBoss7DeploymentScannerAdditions.java	2012-03-14 14:34:20 UTC (rev 39502)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/internal/v7/LocalJBoss7DeploymentScannerAdditions.java	2012-03-14 14:37:16 UTC (rev 39503)
@@ -89,13 +89,14 @@
 			}
 		}
 
+		AS7DeploymentScannerUtility util = new AS7DeploymentScannerUtility(); 
 		 
 		 // Do the removes
 		Iterator<String> i = removed.iterator();
 		String scannerName = null;
 		while(i.hasNext()) {
 			scannerName = i.next();
-			IStatus s = removeOneFolder(server, scannerName);
+			IStatus s = util.removeDeploymentScanner(server, scannerName);
 			if( s.isOK()) {
 				props.remove(scannerName);
 			}
@@ -108,7 +109,7 @@
 		while(i.hasNext()) {
 			path = i.next();
 			newScannerName = findNextScannerName(props);
-			IStatus s = addOneFolder(server, newScannerName, path);
+			IStatus s = util.addDeploymentScanner(server, newScannerName, path);
 			if( s.isOK()){
 				props.put(newScannerName, path);
 			}
@@ -135,55 +136,9 @@
 		return SCANNER_PREFIX + i;
 	}
 	
-	protected IStatus addOneFolder(final IServer server, String scannerName, final String folder) {
-		ModelNode op = new ModelNode();
-		op.get("operation").set("add"); //$NON-NLS-1$ //$NON-NLS-2$
-		ModelNode addr = op.get("address"); //$NON-NLS-1$
-		addr.add("subsystem", "deployment-scanner");  //$NON-NLS-1$//$NON-NLS-2$
-		addr.add("scanner", scannerName); //$NON-NLS-1$
-		op.get("path").set(folder); //$NON-NLS-1$
-		final String request = op.toJSONString(true);
-		return execute(server, request);
-	}
-
-	protected IStatus removeOneFolder(final IServer server, String scannerName) {
-		ModelNode op = new ModelNode();
-		op.get("operation").set("remove"); //$NON-NLS-1$ //$NON-NLS-2$
-		ModelNode addr = op.get("address"); //$NON-NLS-1$
-		addr.add("subsystem", "deployment-scanner");  //$NON-NLS-1$//$NON-NLS-2$
-		addr.add("scanner", scannerName); //$NON-NLS-1$
-		final String request = op.toJSONString(true);
-		return execute(server, request);
-	}
-
-	protected IStatus execute(final IServer server, final String request) {
-		try {
-	        String resultJSON = JBoss7ManagerUtil.executeWithService(new JBoss7ManagerUtil.IServiceAware<String>() {
-	            public String execute(IJBoss7ManagerService service) throws Exception {
-	                return service.execute(new AS7ManagementDetails(server), request);
-	            }
-	        }, server);
-	        ModelNode result = ModelNode.fromJSONString(resultJSON);
-	        return Status.OK_STATUS;
-		} catch( Exception e ) {
-			// TODO Throw new checked exception
-			return new Status(IStatus.ERROR, JBossServerCorePlugin.PLUGIN_ID, e.getMessage(), e);
-		}
-	}
-
-	
 	public void serverChanged(ServerEvent event) {
-		IServer server = event.getServer();
-		if( accepts(server)) {
-			int eventKind = event.getKind();
-			if ((eventKind & ServerEvent.SERVER_CHANGE) != 0) {
-				// server change event
-				if ((eventKind & ServerEvent.STATE_CHANGE) != 0) {
-					if( event.getServer().getServerState() == IServer.STATE_STARTED ) {
-						modifyDeploymentScanners(event);
-					}
-				}
-			}
+		if( accepts(event.getServer()) && serverSwitchesToState(event, IServer.STATE_STARTED)){
+			modifyDeploymentScanners(event);
 		}
 	}
 	

Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.jmx.integration/src/org/jboss/ide/eclipse/as/jmx/integration/JMXServerLifecycleListener.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.jmx.integration/src/org/jboss/ide/eclipse/as/jmx/integration/JMXServerLifecycleListener.java	2012-03-14 14:34:20 UTC (rev 39502)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.jmx.integration/src/org/jboss/ide/eclipse/as/jmx/integration/JMXServerLifecycleListener.java	2012-03-14 14:37:16 UTC (rev 39503)
@@ -42,6 +42,10 @@
 		return false;
 	}
 	
+	protected void verifyPrimaryScannerEnablement() {
+		// Do Nothing
+	}
+
 	protected void modifyDeploymentScanners(ServerEvent event){
 		String[] folders = getDeployLocationFolders(event.getServer());
 		if( folders.length > 0 ) 

Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/JBossServerUIPlugin.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/JBossServerUIPlugin.java	2012-03-14 14:34:20 UTC (rev 39502)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/JBossServerUIPlugin.java	2012-03-14 14:37:16 UTC (rev 39503)
@@ -1,24 +1,13 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2006, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
+/******************************************************************************* 
+ * Copyright (c) 2012 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.ui;
 
 import java.util.MissingResourceException;
@@ -37,6 +26,7 @@
 import org.jboss.ide.eclipse.as.core.JBossServerCorePlugin;
 import org.jboss.ide.eclipse.as.core.server.UnitedServerListenerManager;
 import org.jboss.ide.eclipse.as.ui.console.ShowConsoleServerStateListener;
+import org.jboss.ide.eclipse.as.ui.dialogs.ModifyDeploymentScannerIntervalDialog.DeploymentScannerUIServerStartedListener;
 import org.jboss.ide.eclipse.as.ui.dialogs.ServerAlreadyStartedDialog.ServerAlreadyStartedHandler;
 import org.jboss.ide.eclipse.as.ui.views.server.extensions.XPathRuntimeListener;
 import org.jboss.ide.eclipse.as.ui.wizards.JBInitialSelectionProvider;
@@ -66,12 +56,14 @@
 	}
 
 	private static JBInitialSelectionProvider selectionProvider;
+	private static DeploymentScannerUIServerStartedListener as7ScannerAssist;
 	/**
 	 * This method is called upon plug-in activation
 	 */
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
 		selectionProvider = new JBInitialSelectionProvider();
+		as7ScannerAssist = new DeploymentScannerUIServerStartedListener();
 		Preferences prefs = getPluginPreferences();
 
 		if( !prefs.getBoolean(IPreferenceKeys.ENABLED_DECORATORS)) {
@@ -87,6 +79,7 @@
 		}
 		savePluginPreferences();
 		UnitedServerListenerManager.getDefault().addListener(ShowConsoleServerStateListener.getDefault());
+		UnitedServerListenerManager.getDefault().addListener(as7ScannerAssist);
 		ServerCore.addServerLifecycleListener(selectionProvider);
 		ServerCore.addRuntimeLifecycleListener(XPathRuntimeListener.getDefault()); 
 		ExtensionManager.getDefault().setAlreadyStartedHandler(new ServerAlreadyStartedHandler());
@@ -100,6 +93,7 @@
 		ServerCore.removeRuntimeLifecycleListener(XPathRuntimeListener.getDefault()); 
 		ServerCore.removeServerLifecycleListener(selectionProvider);
 		UnitedServerListenerManager.getDefault().removeListener(ShowConsoleServerStateListener.getDefault());
+		UnitedServerListenerManager.getDefault().removeListener(as7ScannerAssist);
 		JBossServerUISharedImages.instance().cleanup();
 		super.stop(context);
 	}

Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/console/ShowConsoleServerStateListener.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/console/ShowConsoleServerStateListener.java	2012-03-14 14:34:20 UTC (rev 39502)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/console/ShowConsoleServerStateListener.java	2012-03-14 14:37:16 UTC (rev 39503)
@@ -34,35 +34,26 @@
 	public void serverChanged(ServerEvent event) {
 		final IServer server = event.getServer();
 		JBossServer jbs = (JBossServer)server.loadAdapter(JBossServer.class, new NullProgressMonitor());
-		if( jbs != null ) {
-			int eventKind = event.getKind();
-			if ((eventKind & ServerEvent.SERVER_CHANGE) != 0) {
-				// server change event
-				if ((eventKind & ServerEvent.STATE_CHANGE) != 0) {
-					if( event.getServer().getServerState() == IServer.STATE_STARTING ) {
-						// do not launch console for remotes, for now
-						String type = DeploymentPreferenceLoader.getCurrentDeploymentMethodTypeId(server, LocalPublishMethod.LOCAL_PUBLISH_METHOD);
-						if( !type.equals(LocalPublishMethod.LOCAL_PUBLISH_METHOD))
-							return;
-						
-						new Thread() {
-							public void run() {
-								try {
-									// delay to insure the server gets a chance to actually launch
-									Thread.sleep(3000);
-								} catch(InterruptedException ie) {}
-								Display.getDefault().asyncExec(new Runnable() { 
-									public void run() {
-										ILaunch launch = server.getLaunch();
-										if( launch != null && launch.getProcesses().length > 0)
-											new ShowInConsoleAction(getNullSelectionProvider()).perform(server);
-									}
-								});
-							}
-						}.start();
-					}
+		if( jbs != null && serverSwitchesToState(event, IServer.STATE_STARTING)) {
+			// do not launch console for remotes, for now
+			String type = DeploymentPreferenceLoader.getCurrentDeploymentMethodTypeId(server, LocalPublishMethod.LOCAL_PUBLISH_METHOD);
+			if( !type.equals(LocalPublishMethod.LOCAL_PUBLISH_METHOD))
+				return;
+			new Thread() {
+				public void run() {
+					try {
+						// delay to insure the server gets a chance to actually launch
+						Thread.sleep(3000);
+					} catch(InterruptedException ie) {}
+					Display.getDefault().asyncExec(new Runnable() { 
+						public void run() {
+							ILaunch launch = server.getLaunch();
+							if( launch != null && launch.getProcesses().length > 0)
+								new ShowInConsoleAction(getNullSelectionProvider()).perform(server);
+						}
+					});
 				}
-			}
+			}.start();
 		}
 	}
 	

Added: trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/dialogs/ModifyDeploymentScannerIntervalDialog.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/dialogs/ModifyDeploymentScannerIntervalDialog.java	                        (rev 0)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/dialogs/ModifyDeploymentScannerIntervalDialog.java	2012-03-14 14:37:16 UTC (rev 39503)
@@ -0,0 +1,293 @@
+/******************************************************************************* 
+* Copyright (c) 2012 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.ui.dialogs;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.ICellModifier;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TextCellEditor;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.ServerEvent;
+import org.jboss.ide.eclipse.as.core.server.UnitedServerListener;
+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.AS7DeploymentScannerUtility;
+import org.jboss.ide.eclipse.as.ui.JBossServerUIPlugin;
+import org.osgi.service.prefs.BackingStoreException;
+
+public class ModifyDeploymentScannerIntervalDialog extends TitleAreaDialog {
+	
+	public static final String AS7_IGNORE_ZERO_INTERVAL_SCANNER_SETTING = "AS7_IGNORE_ZERO_INTERVAL_SCANNER_SETTING"; //$NON-NLS-1$
+	
+	public static class DeploymentScannerUIServerStartedListener extends UnitedServerListener {
+		public void serverChanged(ServerEvent event) {
+			IServer s = event.getServer();
+			JBossExtendedProperties props = (JBossExtendedProperties)
+					s.loadAdapter(JBossExtendedProperties.class, null);
+			if( props != null && props.getMultipleDeployFolderSupport() == ServerExtendedProperties.DEPLOYMENT_SCANNER_AS7_MANAGEMENT_SUPPORT) {
+				if( serverSwitchesToState(event, IServer.STATE_STARTED)) {
+					// Don't do any potentially long-running tasks here. 
+					launchJob(s);
+				}
+			}
+		}
+		
+		private void launchJob(final IServer server) {
+			new Job("Checking Deployment Scanners for server") {
+				protected IStatus run(IProgressMonitor monitor) {
+					IEclipsePreferences prefs = InstanceScope.INSTANCE.getNode(JBossServerUIPlugin.PLUGIN_ID);
+					boolean ignore = prefs.getBoolean(AS7_IGNORE_ZERO_INTERVAL_SCANNER_SETTING, false);
+					if( !ignore ) {
+						final HashMap<String, Integer> map = 
+								new AS7DeploymentScannerUtility().getDeploymentScannerIntervals(server);
+						if( hasScannersAtZero(server,map)) {
+							Display.getDefault().asyncExec(new Runnable() {
+								public void run() {
+									// NOW launch the dialog
+									launchDialog(server, map);
+								}
+							});
+						}
+					}
+					return Status.OK_STATUS;
+				}
+			}.schedule();
+		}
+		
+		private void launchDialog(final IServer server, HashMap<String, Integer> map) {
+			ModifyDeploymentScannerIntervalDialog d = 
+					new ModifyDeploymentScannerIntervalDialog(
+							server, map,
+							Display.getDefault().getActiveShell());
+			d.open();
+			
+			final ArrayList<String> changed = d.getChanged();
+			final HashMap<String, Integer> changedMap = d.getChangedMap();
+			boolean neverAskAgainSetting = d.getAskAgainSelection();
+			
+			if( neverAskAgainSetting ) {
+				IEclipsePreferences prefs = InstanceScope.INSTANCE.getNode(JBossServerUIPlugin.PLUGIN_ID);
+				prefs.putBoolean(AS7_IGNORE_ZERO_INTERVAL_SCANNER_SETTING, true);
+				try {
+					prefs.flush();
+				} catch(BackingStoreException e) {
+				}
+			}
+			
+			if( changed.size() > 0 ) {
+				new Job("Updating server's deployment scanners") {
+					protected IStatus run(IProgressMonitor monitor) {
+						return updateServersScanners(server, changed, changedMap);
+					}
+				}.schedule();
+			}
+		}
+		
+		private IStatus updateServersScanners(IServer server, ArrayList<String> changed, HashMap<String, Integer> changedMap) {
+			AS7DeploymentScannerUtility util = new AS7DeploymentScannerUtility();
+			Iterator<String> i = changed.iterator();
+			while(i.hasNext()) {
+				String t = i.next();
+				util.updateDeploymentScannerInterval(server, t, changedMap.get(t).intValue());
+			}
+			return Status.OK_STATUS;
+		}
+		
+		private boolean hasScannersAtZero(IServer server, HashMap<String, Integer> map ) {
+			// check if any have 0
+			Iterator<Integer> it = map.values().iterator();
+			while(it.hasNext()) {
+				if( it.next().intValue() <= 0) {
+					return true;
+				}
+			}
+			return false;
+		}
+	}
+	
+	private IServer server;
+	private HashMap<String, Integer> map;
+	private TableViewer tv;
+	private ArrayList<String> changed = new ArrayList<String>();
+	private boolean askAgainSelected = false;
+    private String[] headings = new String[]{
+    		"Scanner Name", "Scanner Interval"
+    };
+	public ModifyDeploymentScannerIntervalDialog(
+			IServer server, HashMap<String, Integer> map, Shell parentShell) {
+		super(parentShell);
+		this.map = map;
+		this.server = server;
+	}
+	
+	public ArrayList<String> getChanged() {
+		return changed;
+	}
+	
+	public HashMap<String, Integer> getChangedMap() {
+		return map;
+	}
+	
+	public boolean getAskAgainSelection() {
+		return askAgainSelected;
+	}
+	
+	protected Control createContents(Composite parent) {
+		Control c = super.createContents(parent);
+		setMessage("One or more deployment scanners have a scan-interval of 0.\nThese scanners are inactive. If this is intentional, press 'OK'.", IMessageProvider.WARNING );
+		setTitle("Inactive Deployment Scanner?");
+		getShell().setText("Inactive Deployment Scanner?");
+		return c;
+	}
+
+	protected void createButtonsForButtonBar(Composite parent) {
+		createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
+	}
+
+	protected Control createDialogArea(Composite parent) {
+		Composite main = new Composite((Composite)super.createDialogArea(parent), SWT.NONE);
+		main.setLayoutData(new GridData(GridData.FILL_BOTH));
+		main.setLayout(new GridLayout(1,false));
+
+	    // Add the TableViewer
+	    tv = new TableViewer(main, SWT.FULL_SELECTION);
+	    tv.setContentProvider(new ScannerContentProvider());
+	    tv.setLabelProvider(new ScannerLabelProvider());
+
+	    // Set up the table
+	    Table table = tv.getTable();
+	    table.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+	    TableColumn tc1 = new TableColumn(table, SWT.CENTER);
+	    tc1.setText(headings[0]);
+	    tc1.setWidth(150);
+	    TableColumn tc2 = new TableColumn(table, SWT.CENTER);
+	    tc2.setText(headings[1]);
+
+	    for (int i = 0, n = table.getColumnCount(); i < n; i++) {
+	      table.getColumn(i).pack();
+	    }
+	    
+	    table.setHeaderVisible(true);
+	    table.setLinesVisible(true);
+
+	    // Create the cell editors
+	    CellEditor[] editors = new CellEditor[4];
+	    editors[0] = null;
+	    editors[1] = new TextCellEditor(table);
+
+	    // Set the editors, cell modifier, and column properties
+	    tv.setColumnProperties(headings);
+	    tv.setCellModifier(new ScannerCellModifier());
+	    tv.setCellEditors(editors);
+
+	    tv.setInput(map);
+	    
+	    final Button askAgain = new Button(main, SWT.CHECK);
+	    askAgain.setText("Don't ask this again.");
+	    askAgain.addSelectionListener(new SelectionListener() {
+			public void widgetSelected(SelectionEvent e) {
+				askAgainSelected = askAgain.getSelection();
+			}
+			public void widgetDefaultSelected(SelectionEvent e) {
+				askAgainSelected = askAgain.getSelection();
+			}
+		});
+		return main;
+	}
+	
+	private class ScannerContentProvider implements IStructuredContentProvider {
+		public void dispose() {
+		}
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		}
+		public Object[] getElements(Object inputElement) {
+			Set<String> s = map.keySet();
+			return s.toArray(new String[s.size()]);
+		}
+	}
+	
+	private class ScannerLabelProvider implements ITableLabelProvider {
+		public String getColumnText(Object element, int columnIndex) {
+			if( columnIndex == 0 )
+				return element.toString();
+			return map.get(element).toString();
+		}
+		public void addListener(ILabelProviderListener listener) {
+		}
+		public void dispose() {
+		}
+		public boolean isLabelProperty(Object element, String property) {
+			return false;
+		}
+		public void removeListener(ILabelProviderListener listener) {
+		}
+		public Image getColumnImage(Object element, int columnIndex) {
+			return null;
+		}
+	}
+	
+	private class ScannerCellModifier implements ICellModifier {
+
+		@Override
+		public boolean canModify(Object element, String property) {
+			return property.equals(headings[1]);
+		}
+		public Object getValue(Object element, String property) {
+			return map.get(element).toString();
+		}
+		public void modify(Object element, String property, Object value) {
+			String element2 = ((TableItem)element).getText();
+			if( !value.toString().equals(map.get(element2).toString())) {
+				if( !changed.contains(element2))
+					changed.add(element2);
+				try {
+					map.put(element2, Integer.parseInt(value.toString()));
+					tv.refresh();
+				} catch(NumberFormatException nfe) {
+					// intentionally ignore. Do NOTHING. 
+				}
+			}
+		}
+	}
+}

Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/extensions/XPathRuntimeListener.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/extensions/XPathRuntimeListener.java	2012-03-14 14:34:20 UTC (rev 39502)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/extensions/XPathRuntimeListener.java	2012-03-14 14:37:16 UTC (rev 39503)
@@ -19,8 +19,9 @@
 import org.eclipse.wst.server.core.ServerCore;
 import org.jboss.ide.eclipse.as.core.extensions.descriptors.XPathCategory;
 import org.jboss.ide.eclipse.as.core.extensions.descriptors.XPathModel;
+import org.jboss.ide.eclipse.as.core.server.UnitedServerListener;
 
-public class XPathRuntimeListener implements IRuntimeLifecycleListener {
+public class XPathRuntimeListener extends UnitedServerListener {
 	public static XPathRuntimeListener instance;
 	public static XPathRuntimeListener getDefault() {
 		if( instance == null )
@@ -28,14 +29,6 @@
 		return instance;
 	}
 	
-	protected XPathRuntimeListener() {
-		
-	}
-	
-	public void runtimeAdded(IRuntime runtime) {
-	}
-	public void runtimeRemoved(IRuntime runtime) {
-	}
 	public void runtimeChanged(IRuntime runtime) {
 		IViewPart part = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView("org.eclipse.wst.server.ui.ServersView");
 		IServer[] allServers = ServerCore.getServers();

Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/wizards/JBInitialSelectionProvider.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/wizards/JBInitialSelectionProvider.java	2012-03-14 14:34:20 UTC (rev 39502)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/wizards/JBInitialSelectionProvider.java	2012-03-14 14:37:16 UTC (rev 39503)
@@ -10,6 +10,9 @@
  ******************************************************************************/
 package org.jboss.ide.eclipse.as.ui.wizards;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
 import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.wst.server.core.IServer;
@@ -32,36 +35,36 @@
 	}
 	
 	public IServerType getInitialSelection(IServerType[] serverTypes) {
+		ArrayList<IServerType> types = new ArrayList<IServerType>();
+		types.addAll(Arrays.asList(serverTypes));
 		
-		if (serverTypes == null)
-			return null;
-		
 		// Find the last-selected one
-		IEclipsePreferences prefs = new InstanceScope().getNode(JBossServerUIPlugin.PLUGIN_ID);
+		IEclipsePreferences prefs =  InstanceScope.INSTANCE.getNode(JBossServerUIPlugin.PLUGIN_ID);
 		String last = prefs.get(LAST_SERVER_CREATED_KEY, null);
-		if( last != null ) {
-			IServer s = ServerCore.findServer(last);
-			if( s != null ) {
-				for( int i = 0; i < serverTypes.length; i++ )
-					if( serverTypes[i].getId().equals(s.getServerType().getId()))
-						return serverTypes[i];
-			}
-		}
+		IServer lastServer = last == null ? null : ServerCore.findServer(last);
+		IServerType lastType = lastServer == null ? null : lastServer.getServerType();
+		if( lastType != null && types.contains(lastType))
+			return lastType;
 		
-		// return default
-		int size = serverTypes.length;
-		for (int i = 0; i < size; i++) {
-			if( serverTypes[i].getId().equals(IJBossToolingConstants.SERVER_AS_51))
-				return serverTypes[i];
-		}
+		// return default server type
+		IServerType defaultType = getDefaultServerType();
+		if( types.contains(defaultType))
+			return defaultType;
+		
+		// Else, just choose whatever they give us
 		return serverTypes[0];
 	}
+	
+	public IServerType getDefaultServerType() {
+		String newestJBoss = IJBossToolingConstants.SERVER_AS_71;
+		return ServerCore.findServerType(newestJBoss);
+	}
 
 	private static String LAST_SERVER_CREATED_KEY = "org.jboss.ide.eclipse.as.ui.wizards.LAST_SERVER_CREATED"; //$NON-NLS-1$
 
 	public void serverAdded(IServer server) {
 		if( server != null ) {
-			IEclipsePreferences prefs = new InstanceScope().getNode(JBossServerUIPlugin.PLUGIN_ID);
+			IEclipsePreferences prefs =  InstanceScope.INSTANCE.getNode(JBossServerUIPlugin.PLUGIN_ID);
 			prefs.put(LAST_SERVER_CREATED_KEY, server.getId());
 			try {
 				prefs.flush();



More information about the jbosstools-commits mailing list