Author: scabanovich
Date: 2008-02-20 08:45:16 -0500 (Wed, 20 Feb 2008)
New Revision: 6464
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/SeamCoreBuilder.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/SeamCorePlugin.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProject.java
Log:
JBIDE-1785 Firing events modified.
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/SeamCoreBuilder.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/SeamCoreBuilder.java 2008-02-20
13:45:04 UTC (rev 6463)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/SeamCoreBuilder.java 2008-02-20
13:45:16 UTC (rev 6464)
@@ -78,32 +78,40 @@
protected IProject[] build(int kind, Map args, IProgressMonitor monitor)
throws CoreException {
SeamProject sp = getSeamProject();
- if(sp==null) {
- return null; //
+ if(sp == null) {
+ return null;
}
- sp.resolveStorage(kind != FULL_BUILD);
+ sp.postponeFiring();
- if(sp.getClassPath().update()) {
- sp.getClassPath().process();
- }
+ try {
+
+ sp.resolveStorage(kind != FULL_BUILD);
+
+ if(sp.getClassPath().update()) {
+ sp.getClassPath().process();
+ }
- new SeamRuntimeValidation().validate(sp);
-
- if (kind == FULL_BUILD) {
- fullBuild(monitor);
- } else {
- IResourceDelta delta = getDelta(getProject());
- if (delta == null) {
- fullBuild(monitor);
- } else {
- incrementalBuild(delta, monitor);
- }
- }
- try {
- sp.store();
- } catch (IOException e) {
- SeamCorePlugin.getPluginLog().logError(NLS.bind(SeamCoreMessages.SeamCoreBuilder_1,sp.getProject().getName()),
e); //$NON-NLS-1$
+ new SeamRuntimeValidation().validate(sp);
+
+ if (kind == FULL_BUILD) {
+ fullBuild(monitor);
+ } else {
+ IResourceDelta delta = getDelta(getProject());
+ if (delta == null) {
+ fullBuild(monitor);
+ } else {
+ incrementalBuild(delta, monitor);
+ }
+ }
+ try {
+ sp.store();
+ } catch (IOException e) {
+ SeamCorePlugin.getPluginLog().logError(NLS.bind(SeamCoreMessages.SeamCoreBuilder_1,sp.getProject().getName()),
e); //$NON-NLS-1$
+ }
+
+ } finally {
+ sp.fireChanges();
}
return null;
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/SeamCorePlugin.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/SeamCorePlugin.java 2008-02-20
13:45:04 UTC (rev 6463)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/SeamCorePlugin.java 2008-02-20
13:45:16 UTC (rev 6464)
@@ -11,6 +11,8 @@
package org.jboss.tools.seam.core;
import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ProjectScope;
@@ -24,6 +26,8 @@
import org.eclipse.jface.resource.ImageDescriptor;
import org.jboss.tools.common.log.BaseUIPlugin;
import org.jboss.tools.common.log.IPluginLog;
+import org.jboss.tools.seam.core.event.ISeamProjectChangeListener;
+import org.jboss.tools.seam.core.event.SeamProjectChangeEvent;
import org.osgi.framework.BundleContext;
/**
@@ -151,5 +155,38 @@
public static IStatus createErrorStatus(String message, Throwable exception) {
return new Status(IStatus.ERROR, PLUGIN_ID, -1, message, exception);
}
+
+ private static List<ISeamProjectChangeListener> listeners = new
ArrayList<ISeamProjectChangeListener>();
+
+ /**
+ *
+ */
+ public static void addSeamProjectListener(ISeamProjectChangeListener listener) {
+ synchronized(listeners) {
+ if(listeners.contains(listener)) return;
+ listeners.add(listener);
+ }
+ }
+ /**
+ *
+ */
+ public static void removeSeamProjectListener(ISeamProjectChangeListener listener) {
+ synchronized(listeners) {
+ listeners.remove(listener);
+ }
+ }
+
+ public static void fire(SeamProjectChangeEvent event) {
+ ISeamProjectChangeListener[] ls = null;
+ synchronized(listeners) {
+ ls = listeners.toArray(new ISeamProjectChangeListener[0]);
+ }
+ if(ls != null) {
+ for (int i = 0; i < ls.length; i++) {
+ ls[i].projectChanged(event);
+ }
+ }
+ }
+
}
\ No newline at end of file
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProject.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProject.java 2008-02-20
13:45:04 UTC (rev 6463)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProject.java 2008-02-20
13:45:16 UTC (rev 6464)
@@ -381,27 +381,35 @@
long begin = System.currentTimeMillis();
- boolean b = getClassPath().update();
- if(b) {
- getClassPath().validateProjectDependencies();
- }
- File file = getStorageFile();
- Element root = null;
- if(file != null && file.isFile()) {
- root = XMLUtilities.getElement(file, null);
- if(root != null) {
- loadProjectDependencies(root);
- loadSourcePaths2(root);
-// loadSourcePaths(root);
+ postponeFiring();
+
+ try {
+
+ boolean b = getClassPath().update();
+ if(b) {
+ getClassPath().validateProjectDependencies();
}
- }
+ File file = getStorageFile();
+ Element root = null;
+ if(file != null && file.isFile()) {
+ root = XMLUtilities.getElement(file, null);
+ if(root != null) {
+ loadProjectDependencies(root);
+ loadSourcePaths2(root);
+// loadSourcePaths(root);
+ }
+ }
- if(b) {
- getClassPath().process();
- }
+ if(b) {
+ getClassPath().process();
+ }
- if(root != null) {
- getValidationContext().load(root);
+ if(root != null) {
+ getValidationContext().load(root);
+ }
+
+ } finally {
+ fireChanges();
}
long e = System.currentTimeMillis();
@@ -1375,12 +1383,32 @@
return c;
}
+ List<Change> postponedChanges = null;
+
+ public void postponeFiring() {
+ if(postponedChanges == null) {
+ postponedChanges = new ArrayList<Change>();
+ }
+ }
+
+ public void fireChanges() {
+ if(postponedChanges == null) return;
+ List<Change> changes = postponedChanges;
+ postponedChanges = null;
+ System.out.println("fireng " + changes.size() + " changes");
+ fireChanges(changes);
+ }
+
/**
*
* @param changes
*/
void fireChanges(List<Change> changes) {
if(changes == null || changes.size() == 0) return;
+ if(postponedChanges != null) {
+ postponedChanges.addAll(changes);
+ return;
+ }
SeamProjectChangeEvent event = new SeamProjectChangeEvent(this, changes);
ISeamProjectChangeListener[] ls = null;
synchronized(this) {
@@ -1391,6 +1419,7 @@
ls[i].projectChanged(event);
}
}
+ SeamCorePlugin.fire(event);
}
/**
Show replies by date