[jboss-cvs] jbosside/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/model ...
Robert Stryker
rawblem at gmail.com
Thu Nov 9 19:26:25 EST 2006
User: rawb
Date: 06/11/09 19:26:25
Modified: as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/model
DescriptorModel.java ServerProcessModel.java
ModuleModel.java
Log:
Rewrote Core entirley. It's clean and spiffy now.
Revision Changes Path
1.8 +23 -54 jbosside/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/model/DescriptorModel.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: DescriptorModel.java
===================================================================
RCS file: /cvsroot/jboss/jbosside/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/model/DescriptorModel.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- DescriptorModel.java 6 Sep 2006 19:28:12 -0000 1.7
+++ DescriptorModel.java 10 Nov 2006 00:26:25 -0000 1.8
@@ -41,34 +41,13 @@
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.dom4j.tree.DefaultElement;
+import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.ServerCore;
-import org.eclipse.wst.server.core.internal.Server;
-import org.jboss.ide.eclipse.as.core.JBossServerCore;
-import org.jboss.ide.eclipse.as.core.server.JBossServer;
-import org.jboss.ide.eclipse.as.core.server.ServerAttributeHelper;
-import org.jboss.ide.eclipse.as.core.util.ASDebug;
-import org.xml.sax.XMLReader;
-
-/**
- * This class is intended to represent the actual mbeans,
- * configuration descriptors, jars, etc enabled, disabled, or
- * available in a server's on-disk configuration.
- *
- * By configuration, here, I mean the directory under jboss'
- * install directory which contains deployed jars and -service.xml files,
- * mbeans, etc.
- *
- * This is not yet implemented. All code here is forward-looking.
- *
- * @author rstryker
- *
- */
+import org.eclipse.core.runtime.Path;
+import org.jboss.ide.eclipse.as.core.util.SimpleTreeItem;
public class DescriptorModel {
-
/* Static Portion */
private static DescriptorModel model = null;
@@ -87,46 +66,38 @@
map = new HashMap();
}
- public ServerDescriptorModel getServerModel(IServer server) {
- String key = server.getId();
+ public ServerDescriptorModel getServerModel(IPath home, IPath configName) {
+ String key = home.toOSString() + "::" + configName.toOSString();
Object o = map.get(key);
if( o == null ) {
- o = createEntity(server);
+ o = createEntity(home, configName);
}
return (ServerDescriptorModel)o;
}
- private ServerDescriptorModel createEntity(IServer server) {
- if( server.getServerType().getId().startsWith("org.jboss.ide.eclipse.as.")) {
- String id = server.getId();
- ServerDescriptorModel val = new ServerDescriptorModel(id);
- map.put(id, val);
+ private ServerDescriptorModel createEntity(IPath home, IPath configName) {
+ ServerDescriptorModel val = new ServerDescriptorModel(home.toOSString(), configName.toOSString());
+ map.put(home.toOSString() + configName.toOSString(), val);
return val;
}
- return null;
- }
-
- public class ServerDescriptorModel {
- private String serverId;
+ public static class ServerDescriptorModel {
+ private String home, config, key;
private String configPath;
private HashMap pathToDocument;
private HashMap pathToLastRead;
- public ServerDescriptorModel(String id) {
- this.serverId = id;
- ServerAttributeHelper helper = getJBossServer().getAttributeHelper();
- configPath = helper.getConfigurationPath();
+ public ServerDescriptorModel(String home, String config) {
+ this.key = home + "::" + config;
+ this.home = home;
+ this.config = config;
+ configPath = + Path.SEPARATOR + "server" + Path.SEPARATOR + config;
+
pathToDocument = new HashMap();
pathToLastRead = new HashMap();
}
- public JBossServer getJBossServer() {
- return JBossServerCore.getServer(ServerCore.findServer(serverId));
- }
-
-
/**
* Discover all descriptors in the configuration
* @return
@@ -172,9 +143,7 @@
}
public String[] getIgnoredDirectories() {
- List list = ((Server)getJBossServer().getAttributeHelper().getServer()).getAttribute(IGNORED_DESCRIPTOR_FOLDERS, new ArrayList());
- String[] ignoredDirs = (String[]) list.toArray(new String[list.size()]);
- return ignoredDirs;
+ return new String[0];
}
private Document getDocument(String path) {
@@ -214,7 +183,6 @@
pathToDocument.put(path, document);
pathToLastRead.put(path, new Long(lastModified));
} catch( Exception e ) {
- ASDebug.p("file " + path + ", Exception: " + e.getMessage(), this);
e.printStackTrace();
}
}
@@ -477,5 +445,6 @@
}
return 1099;
}
+
}
}
1.8 +39 -439 jbosside/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/model/ServerProcessModel.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: ServerProcessModel.java
===================================================================
RCS file: /cvsroot/jboss/jbosside/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/model/ServerProcessModel.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- ServerProcessModel.java 2 Aug 2006 15:22:49 -0000 1.7
+++ ServerProcessModel.java 10 Nov 2006 00:26:25 -0000 1.8
@@ -23,52 +23,20 @@
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Iterator;
-import java.util.Set;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.debug.core.DebugEvent;
import org.eclipse.debug.core.DebugException;
-import org.eclipse.debug.core.DebugPlugin;
-import org.eclipse.debug.core.IDebugEventSetListener;
import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.debug.core.IStreamListener;
import org.eclipse.debug.core.model.IProcess;
-import org.eclipse.debug.core.model.IStreamMonitor;
-import org.eclipse.debug.core.model.IStreamsProxy;
-import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
import org.eclipse.wst.server.core.IServer;
import org.eclipse.wst.server.core.IServerLifecycleListener;
import org.eclipse.wst.server.core.ServerCore;
import org.jboss.ide.eclipse.as.core.JBossServerCore;
-import org.jboss.ide.eclipse.as.core.model.ServerProcessLog.ProcessLogEvent;
-import org.jboss.ide.eclipse.as.core.model.ServerProcessLog.ProcessLogEventRoot;
-import org.jboss.ide.eclipse.as.core.server.IServerLogListener;
-import org.jboss.ide.eclipse.as.core.server.IServerProcessListener;
import org.jboss.ide.eclipse.as.core.server.JBossServer;
-import org.jboss.ide.eclipse.as.core.server.ServerProcessEvent;
-import org.jboss.ide.eclipse.as.core.util.ASDebug;
+import org.jboss.ide.eclipse.as.core.server.JBossServerLaunchConfiguration;
-/**
- * This model keeps track of each server and the processes that
- * are currently running in association with it.
- *
- * This includes start processes (a running jboss server), as
- * well as stop and twiddle launches trying to communicate with
- * this particular server.
- *
- * @author rstryker
- *
- */
public class ServerProcessModel implements IServerLifecycleListener {
- public static final String START_PROCESSES = "__START_PROCESSES__";
- public static final String STOP_PROCESSES = "__STOP_PROCESSES__";
- public static final String TWIDDLE_PROCESSES = "__TWIDDLE_PROCESSES__";
- public static final String TERMINATED_PROCESSES = "__TERMINATED__PROCESSES__";
-
-
private static ServerProcessModel instance;
/**
@@ -135,13 +103,10 @@
if( !create ) return null;
o = new ServerProcessModelEntity(key);
map.put(key, (ServerProcessModelEntity)o);
- processModelChanged(((ServerProcessModelEntity)o).getEventLog());
}
return ((ServerProcessModelEntity)o);
}
-
-
public ServerProcessModelEntity[] getModels() {
ArrayList list = new ArrayList();
Iterator i = map.keySet().iterator();
@@ -153,19 +118,6 @@
return models;
}
- public void addLogListener(IServerLogListener listener) {
- logListeners.add(listener);
- }
- public void removeLogListener(IServerLogListener listener) {
- logListeners.remove(listener);
- }
-
- public void processModelChanged(ProcessLogEvent event) {
- Iterator i = logListeners.iterator();
- while(i.hasNext()) {
- ((IServerLogListener)i.next()).logChanged(event);
- }
- }
/**
* Completely shut down all JBoss Servers, as well as all
* start, stop, and twiddle launches associated with them.
@@ -179,427 +131,75 @@
}
}
+ public class ServerProcessModelEntity {
-
-
-
- /**
- * Process model for one jboss server
- */
- public class ServerProcessModelEntity implements IDebugEventSetListener {
-
- private HashMap allProcesses;
- private String serverID;
- private ArrayList processListeners;
- private ArrayList removeOnTerminate;
- private ProcessLogEventRoot eventLog;
- private ServerConsoleLogger logger;
-
- public ServerProcessModelEntity(String serverID) {
- allProcesses = new HashMap();
- processListeners = new ArrayList();
- this.serverID = serverID;
- removeOnTerminate = new ArrayList();
- DebugPlugin.getDefault().addDebugEventListener(this);
- eventLog = new ProcessLogEventRoot(serverID);
- logger = new ServerConsoleLogger(serverID);
- addSPListener(logger);
- }
-
- public ProcessData[] getProcessDatas(String processType) {
- Iterator i = allProcesses.keySet().iterator();
- Set s = new HashSet();
- ProcessData data;
- while(i.hasNext()) {
- data = (ProcessData)(allProcesses.get(i.next()));
- if( data.getProcesType().equals(processType)) {
- s.add(data);
- }
- }
- ProcessData[] ret = new ProcessData[s.size()];
- s.toArray(ret);
- return ret;
- }
-
- public IProcess[] getProcesses(String processType) {
- ProcessData[] datas = getProcessDatas(processType);
- IProcess[] ret = new IProcess[datas.length];
- for( int i = 0; i < datas.length; i++ ) {
- ret[i] = datas[i].getProcess();
- }
- return ret;
- }
-
-
- public void clearAll() {
- ArrayList datas = new ArrayList(allProcesses.values());
- Iterator it = datas.iterator();
- ProcessData d = null;
- while(it.hasNext()) {
- d = (ProcessData)it.next();
- completelyRemove(new ProcessData[] { d }, d.getProcesType());
- }
- }
-
- public void clear( String processType ) {
- ArrayList l = new ArrayList();
- l.addAll(allProcesses.values());
-
- Iterator i = l.iterator();
- ProcessData pd = null;
- while(i.hasNext()) {
- pd = (ProcessData)i.next();
- if( (pd.getProcesType().equals(processType))) {
- completelyRemove( new ProcessData[] {pd}, pd.getProcesType());
- }
- }
- }
-
- public void clearTerminated() {
- ArrayList l = new ArrayList();
- l.addAll(allProcesses.values());
-
- Iterator i = l.iterator();
- ProcessData pd = null;
- while(i.hasNext()) {
- pd = (ProcessData)i.next();
- if( pd.getProcess().isTerminated()) {
- completelyRemove( new ProcessData[] {pd}, ServerProcessModel.TERMINATED_PROCESSES);
- }
- }
- }
-
- /**
- * Completely remove the processes from the model,
- * close / destroy their streams, and fire events to
- * any listeners.
- *
- * @param pd
- * @param processType
- */
- private void completelyRemove(ProcessData[] pd, String processType) {
- // Terminate anything that's not already terminated.
- for( int i = 0; i < pd.length; i++ ) {
-
- if( pd[i] == null ) continue;
-
- if( !pd[i].getProcess().isTerminated()) {
- try {
- pd[i].getProcess().terminate();
- pd[i].destroy();
- } catch ( DebugException de ) {
- }
+ private String serverId;
+ private HashMap processMap; // <String type, ArrayList processes>
+ public ServerProcessModelEntity(String key) {
+ this.serverId = key;
+ processMap = new HashMap(3);
+ processMap.put(JBossServerLaunchConfiguration.START, new ArrayList());
+ processMap.put(JBossServerLaunchConfiguration.STOP, new ArrayList());
+ processMap.put(JBossServerLaunchConfiguration.TWIDDLE, new ArrayList());
}
- allProcesses.remove(pd[i].getProcess());
- removeOnTerminate.remove(pd[i].getProcess());
- }
- fireEvents(IServerProcessListener.PROCESS_REMOVED, processType, pd, null);
+ public String getServerId() {
+ return serverId;
}
public void add( IProcess[] processes, String processType, ILaunchConfiguration config ) {
- ArrayList pds = new ArrayList();
- ProcessData d = null;
- for( int i = 0; i < processes.length; i++ ) {
- d = new ProcessData(processes[i], processType);
- allProcesses.put(processes[i],d);
- pds.add(d);
- }
-
-
- ProcessData[] pdsArray = new ProcessData[pds.size()];
- pds.toArray(pdsArray);
-
- fireEvents(IServerProcessListener.PROCESS_ADDED, processType, pdsArray, config);
- }
-
- public void fireEvents(String eventType, String processType, ProcessData[] processes, ILaunchConfiguration config) {
- ServerProcessEvent event = new ServerProcessEvent(eventType, processType, processes, config);
- synchronized (processListeners) {
- Iterator i = processListeners.iterator();
- while(i.hasNext() ) {
- ((IServerProcessListener)i.next()).ServerProcessEventFired(event);
- }
- }
- }
-
- public void addSPListener(IServerProcessListener listener) {
- synchronized (processListeners) {
- processListeners.add(listener);
- }
- }
-
- public void removeSPListener(IServerProcessListener listener) {
- synchronized (processListeners) {
- processListeners.remove(listener);
- }
- }
-
-
- public String getServerID() {
- return serverID;
- }
-
- /**
- * The model is free to remove these processes upon termination.
- * This designates that no one is listening for their output
- * streams, or that they have already gotten what they were
- * listening for.
- *
- * @param processes
- */
- public void removeProcessOnTerminate(IProcess[] processes) {
+ ArrayList pds = (ArrayList)processMap.get(processType);
for( int i = 0; i < processes.length; i++ ) {
- ProcessData data = (ProcessData)allProcesses.get(processes[i]);
- removeOnTerminate.add(processes[i]);
- }
- recheckTerminatedProcesses();
- }
-
-
- /**
- * If a process is terminated and it's in the
- * remove-on-terminate list, then completely remove it.
- */
- public void handleDebugEvents(DebugEvent[] events) {
- boolean recheckTerminated = false;
- for( int i = 0; i < events.length; i++ ) {
- if( events[i].getKind() == DebugEvent.TERMINATE ) {
- recheckTerminatedProcesses();
- return;
- }
- }
- }
- /**
- * Go through a list of launches allowed to be removed upon
- * termination and check if any have terminated yet.
- *
- */
- public void recheckTerminatedProcesses() {
- Iterator i = removeOnTerminate.iterator();
- IProcess proc;
- ArrayList l = new ArrayList();
- ProcessData data;
- while(i.hasNext()) {
- proc = (IProcess)i.next();
- if( proc.isTerminated()) {
- data = (ProcessData)allProcesses.get(proc);
- if( data == null ) {
- removeOnTerminate.remove(proc);
- } else {
- l.add(data);
- }
- }
- }
- ProcessData[] pdArray = new ProcessData[l.size()];
- l.toArray(pdArray);
- completelyRemove(pdArray, ServerProcessModel.TERMINATED_PROCESSES);
- }
-
- public ProcessLogEventRoot getEventLog() {
- return eventLog;
- }
-
-
-
- }
-
- public static class ConsoleLogEvent extends ProcessLogEvent {
- public ConsoleLogEvent() {
- super(ProcessLogEvent.SERVER_CONSOLE);
- }
- public String toString() {
- return getProperty(new Integer(ServerProcessLog.ProcessLogEvent.SERVER_CONSOLE)).toString();
- }
- }
-
- private class ServerConsoleLogger implements IServerProcessListener, IStreamListener {
- private IStreamMonitor out, err;
- private ProcessLogEventRoot eventLogRoot;
- private String serverID;
-
- public ServerConsoleLogger(String serverID) {
- try {
- this.serverID = serverID;
- } catch( Exception e ) {
- ASDebug.p("Error", this);
- e.printStackTrace();
+ pds.add(processes[i]);
}
}
- public void ServerProcessEventFired(ServerProcessEvent event) {
+ public void terminateProcesses(String type) {
+ IProcess[] proc = getProcesses(type);
+ for( int i = 0; i < proc.length; i++ ) {
try {
- if( event.getProcessType().equals(START_PROCESSES) && event.getProcessDatas().length == 1 ) {
- IStreamsProxy proxy = event.getProcessDatas()[0].getProcess().getStreamsProxy();
- out = proxy.getOutputStreamMonitor();
- err = proxy.getErrorStreamMonitor();
- out.addListener(this);
- err.addListener(this);
- }
+ proc[i].terminate();
} catch( Exception e ) {
- ASDebug.p("Error", this);
- e.printStackTrace();
- }
- }
-
- private ProcessLogEvent getLatestConsole() {
- ProcessLogEvent major = getEventLog().getLatestMajorEvent(true);
- ProcessLogEvent[] children = major.getChildren();
- for( int i = 0; i < children.length; i++ ) {
- if( children[i] instanceof ConsoleLogEvent &&
- children[i].getEventType() == ProcessLogEvent.SERVER_CONSOLE ) {
- return children[i];
- }
- }
- ProcessLogEvent newConsole = new ConsoleLogEvent();
- major.addChild(newConsole, ProcessLogEvent.ADD_BEGINNING);
- return newConsole;
- }
- private ProcessLogEventRoot getEventLog() {
- if( eventLogRoot == null ) {
- this.eventLogRoot = ServerProcessModel.getDefault().
- getModel(serverID).getEventLog();
- }
- return eventLogRoot;
- }
-
-
- public void streamAppended(String text, IStreamMonitor monitor) {
- if( monitor.equals(out)) {
- outAppended(text, monitor);
- } else if(monitor.equals(err)) {
- errAppended(text, monitor);
}
- getEventLog().branchChanged();
}
-
- protected void outAppended(String text, IStreamMonitor monitor) {
- append(text);
- }
- protected void errAppended(String text, IStreamMonitor monitor) {
- append(text);
}
-
- protected void append(String text) {
- Object o = getLatestConsole().getProperty(new Integer(ServerProcessLog.ProcessLogEvent.SERVER_CONSOLE));
- String x;
- if( o == null ) x = ""; else x = (String)o;
- x = x + text;
- getLatestConsole().setProperty(new Integer(ServerProcessLog.ProcessLogEvent.SERVER_CONSOLE), x);
+ public IProcess[] getProcesses(String type) {
+ ArrayList list = (ArrayList)processMap.get(type);
+ if( list != null )
+ return (IProcess[]) list.toArray(new IProcess[list.size()]);
+ return new IProcess[0];
}
- }
-
- /**
- * A class that can monitor a process's standard OUT and
- * standard error, as well as keep track of the process's
- * arguments that it was launched with.
- *
- * @author rstryker
- *
- */
- public static class ProcessData implements IStreamListener {
- private String args;
- private String processType;
-
- private IProcess process;
- private IStreamMonitor outMonitor;
- private IStreamMonitor errMonitor;
-
- private String out, err;
-
- public ProcessData(IProcess process, String processType) {
- this(null, process, processType);
+ public void clearAll() {
+ ArrayList list;
+ IProcess proc;
+ for( Iterator i = processMap.values().iterator(); i.hasNext();) {
+ list = (ArrayList)i.next();
+ for( Iterator j = list.iterator(); j.hasNext();) {
try {
- this.args = process.getLaunch().getLaunchConfiguration().
- getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, (String)null);
- } catch( CoreException ce ) {
- }
-
- }
-
- public ProcessData(String args, IProcess process, String processType) {
- this.args = args;
- this.process = process;
- this.processType = processType;
-
- //ASDebug.p("process is " + process, this);
- //ASDebug.p("Stream Proxy is " + process.getStreamsProxy(), this);
- this.outMonitor = process.getStreamsProxy().getOutputStreamMonitor();
- this.errMonitor = process.getStreamsProxy().getErrorStreamMonitor();
-
- out = "";
- err = "";
- }
-
- public void startListening() {
- outMonitor.addListener(this);
- errMonitor.addListener(this);
+ proc = (IProcess)j.next();
+ proc.terminate();
+ } catch( DebugException de ) {}
+ j.remove();
}
-
- public void stopListening() {
- outMonitor.removeListener(this);
- errMonitor.removeListener(this);
- }
-
- public void resetStrings() {
- out = "";
- err = "";
- }
-
- public void destroy() {
- stopListening();
- resetStrings();
}
-
- public void streamAppended(String text, IStreamMonitor monitor) {
- if( monitor == outMonitor ) {
- out += text;
- } else if( monitor == errMonitor ) {
- err += text;
}
}
- public String getArgs() {
- return args;
- }
-
- public String getErr() {
- return err;
- }
-
- public String getOut() {
- return out;
- }
-
- public String getProcesType() {
- return processType;
- }
-
- public IProcess getProcess() {
- return process;
- }
-
- }
public void serverAdded(IServer server) {
if( JBossServerCore.getServer(server) != null ) {
- // init
getModel(server.getId(), true);
}
}
public void serverChanged(IServer server) {
- // TODO Auto-generated method stub
-
}
public void serverRemoved(IServer server) {
if( JBossServerCore.getServer(server) != null ) {
ServerProcessModelEntity ent = getModel(server.getId());
map.remove(server.getId());
- processModelChanged(ent.getEventLog());
}
}
-
}
1.5 +13 -203 jbosside/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/model/ModuleModel.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: ModuleModel.java
===================================================================
RCS file: /cvsroot/jboss/jbosside/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/model/ModuleModel.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- ModuleModel.java 10 Jul 2006 15:44:42 -0000 1.4
+++ ModuleModel.java 10 Nov 2006 00:26:25 -0000 1.5
@@ -22,11 +22,8 @@
package org.jboss.ide.eclipse.as.core.model;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
import java.util.Iterator;
import org.eclipse.core.resources.IResource;
@@ -38,42 +35,23 @@
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionRegistry;
-import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Platform;
import org.eclipse.wst.server.core.IModule;
import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.ServerCore;
import org.eclipse.wst.server.core.internal.ModuleFactory;
+import org.eclipse.wst.server.core.internal.Server;
import org.eclipse.wst.server.core.internal.ServerPlugin;
-import org.eclipse.wst.server.core.model.IModuleResource;
-import org.eclipse.wst.server.core.model.IModuleResourceDelta;
import org.eclipse.wst.server.core.model.ModuleFactoryDelegate;
import org.jboss.ide.eclipse.as.core.JBossServerCore;
import org.jboss.ide.eclipse.as.core.JBossServerCorePlugin;
-import org.jboss.ide.eclipse.as.core.module.factory.JBossModuleFactory;
+import org.jboss.ide.eclipse.as.core.module.JBossModuleFactory;
import org.jboss.ide.eclipse.as.core.server.JBossServer;
-import org.jboss.ide.eclipse.as.core.util.ASDebug;
-
-/**
- * This class is the model behind the sole artifact adaptor.
- *
- * This class / model is responsible for the following:
- * - A sorted list of our factories (from extension points)
- * - Querying those factories as to whether they contain some module
- * - Listening in for resource changes and alerting the factories
- * that they need to adjust accordingly.
- * - Ultimately keeping track of resource changes that may be
- * important to consider during the publish operation.
- *
- *
- * @author rstryker
- *
- */
public class ModuleModel implements IResourceChangeListener{
private static ModuleModel singleton;
private ArrayList factories;
- private ModuleDeltaModel deltaModel;
public static ModuleModel getDefault() {
if( singleton == null ) {
@@ -99,7 +77,6 @@
int p0 = ((ModuleFactory)arg0).getOrder();
int p1 = ((ModuleFactory)arg1).getOrder();
- //ASDebug.p("arg0 has value " + p0 + " and arg1 has value " + p1, this);
int retval = 0;
if( p0 == p1 ) {
retval = 0;
@@ -108,8 +85,6 @@
} else if( p0 < p1 ) {
retval = 1;
}
-
-
return retval;
}
};
@@ -117,31 +92,10 @@
loadAcceptableFactories();
Collections.sort(factories, factoryComparator);
- deltaModel = new ModuleDeltaModel();
-
ResourcesPlugin.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE );
init();
}
- public static boolean isPackagedModule(IModule module) {
- if( "jboss.archive".equals(module.getModuleType().getId())) return true;
- /*
- if( "jboss.web".equals(module.getModuleType().getId())) return true;
- if( "jboss.ear".equals(module.getModuleType().getId())) return true;
- if( "jboss.ejb".equals(module.getModuleType().getId())) return true;
- if( "jboss.aop".equals(module.getModuleType().getId())) return true;
- */
- return false;
- }
-
- public static boolean arePackagedModules(IModule[] modules) {
- for( int i = 0; i < modules.length; i++ ) {
- if( !isPackagedModule(modules[i]))
- return false;
- }
- return true;
- }
-
private void loadAcceptableFactories() {
ModuleFactory[] factories = ServerPlugin.getModuleFactories();
String[] jbossIds = loadJBossFactoryIDs();
@@ -149,7 +103,6 @@
for( int i = 0; i < factories.length; i++ ) {
for( int j = 0; j < jbossIds.length; j++ ) {
if( jbossIds[j].equals(factories[i].getId()) ) {
- ASDebug.p("Adding factory: " + factories[i].getId(), this);
this.factories.add(factories[i]);
}
}
@@ -157,18 +110,15 @@
}
private String[] loadJBossFactoryIDs() {
-
IExtensionRegistry registry = Platform.getExtensionRegistry();
IConfigurationElement[] cf = registry.getConfigurationElementsFor(JBossServerCorePlugin.PLUGIN_ID, "jbossModuleFactory");
-
int size = cf.length;
ArrayList list = new ArrayList();
for (int i = 0; i < size; i++) {
list.add(cf[i].getAttribute("id"));
try {
} catch (Throwable t) {
- ASDebug.p("Exception", this);
}
}
String[] jbossFactories = new String[list.size()];
@@ -325,159 +275,19 @@
- public void markModuleChanged(IModule module, int resourceDelta) {
- if( resourceDelta == IResourceDelta.ADDED) {
- getDeltaModel().setModuleState(module, IModuleResourceDelta.ADDED);
- } else if( resourceDelta == IResourceDelta.REMOVED ) {
- getDeltaModel().setModuleState(module, IModuleResourceDelta.REMOVED);
- } else if( resourceDelta == IResourceDelta.CHANGED ) {
- getDeltaModel().setModuleState(module, IModuleResourceDelta.CHANGED);
- }
- }
-
- public ModuleDeltaModel getDeltaModel() {
- return deltaModel;
- }
-
- public class ModuleDeltaModel {
- /**
- * Maps a module id to it's most recent delta, which includes date
- */
- private HashMap moduleToDelta;
-
- /**
- * Maps a server+module id to the last delta that
- * was marked as received by the server.
- */
- private HashMap servermodToLastDelta;
-
- public ModuleDeltaModel() {
- moduleToDelta = new HashMap();
- servermodToLastDelta = new HashMap();
- }
-
- /**
- * The resource associated with this module has been either
- * changed, added, or removed. This regards the underlying
- * jar, war, ear (etc) file, and a resourceChangeEvent that
- * has affected it.
- *
- * @param module
- * @param resourceDeltaKind
- */
- public void setModuleState(IModule module, int resourceDeltaKind) {
- moduleToDelta.put(module.getId(), new ModuleDelta(resourceDeltaKind));
- }
-
-
- /**
- * Set the current delta as the last one seen by this server.
- * @param module
- * @param serverID
- */
- public void setDeltaSeen(IModule module, String serverID) {
- String key = serverID + "::" + module.getId();
- IModuleResourceDelta[] delta = getDelta(module);
- if( delta != null ) {
- servermodToLastDelta.put(key, delta);
- }
- }
-
-
- /**
- * Get the newest delta for the given module, or null if none available
- * @param module
- * @return
- */
- public IModuleResourceDelta[] getDelta(IModule module) {
- Object o = moduleToDelta.get(module.getId());
- if( o == null ) {
- return new IModuleResourceDelta[0];
- }
-
- return new IModuleResourceDelta[] {(IModuleResourceDelta)o};
- }
-
- /**
- * Get the newest deltas for each of the modules provided
- * @param modules
- * @return
- */
- public IModuleResourceDelta[] getDeltas(IModule[] modules) {
- ArrayList list = new ArrayList();
- IModuleResourceDelta[] delta;
- for( int i = 0; i < modules.length; i++ ) {
- delta = getDelta(modules[i]);
- if( delta != null )
- list.addAll(Arrays.asList(delta));
+ public void markModuleChanged(IModule module) {
+ IServer[] servers = ServerCore.getServers();
+ Server s;
+ for( int i = 0; i < servers.length; i++ ) {
+ if( servers[i] instanceof Server ) {
+ s = (Server)servers[i];
+ int stateOnServer = s.getModulePublishState(new IModule[] {module});
+ if( stateOnServer != 0 ) {
+ s.setModulePublishState(new IModule[] { module }, IServer.PUBLISH_STATE_UNKNOWN);
}
- ModuleDelta[] deltas = new ModuleDelta[list.size()];
- list.toArray(deltas);
- return deltas;
}
-
- public IModuleResourceDelta[] getRecentDeltas(IModule[] modules, IServer server) {
- String id = server.getId();
- ArrayList deltaList = new ArrayList();
- deltaList.addAll(Arrays.asList(getDeltas(modules)));
-
-
- // We have a list of all of the deltas for the module list.
- // now eliminate any that aren't new.
- String key;
- Object o;
- IModuleResourceDelta[] ds;
- for( int i = 0; i < modules.length; i++ ) {
- key = id + "::" + modules[i].getId();
- o = servermodToLastDelta.get(key);
- if( o != null ) {
- ds = (IModuleResourceDelta[])o;
- deltaList.removeAll(Arrays.asList(ds));
- ASDebug.p("Removing a delta that's already been seen.", this);
}
}
- IModuleResourceDelta[] deltas = new IModuleResourceDelta[deltaList.size()];
- deltaList.toArray(deltas);
- return deltas;
- }
-
- }
-
- public class ModuleDelta implements IModuleResourceDelta {
- /**
- * Kind is a value from IModuleResourceDelta
- */
- private int kind;
-
- /**
- * Date is the last time this module was changed.
- * Servers can use this to figure OUT if it needs to be
- * published again or not.
- */
- private long date;
- public ModuleDelta(int kind) {
- this.kind = kind;
- this.date = new Date().getTime();
- }
-
- public IModuleResourceDelta[] getAffectedChildren() {
- return new IModuleResourceDelta[0];
- }
-
- public int getKind() {
- return kind;
- }
-
- public IPath getModuleRelativePath() {
- return null;
- }
-
- public IModuleResource getModuleResource() {
- return null;
- }
-
- }
-
}
More information about the jboss-cvs-commits
mailing list