Removes exclusion marker for parent resource once all children are included
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/ResourceBundleManager.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/ResourceBundleManager.java
index bfa8f6d..087f604 100644
--- a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/ResourceBundleManager.java
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/ResourceBundleManager.java
@@ -40,6 +40,7 @@
import org.eclipse.babel.tapiji.tools.core.ui.analyzer.ResourceBundleDetectionVisitor;
import org.eclipse.babel.tapiji.tools.core.util.FragmentProjectUtils;
import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceVisitor;
@@ -214,7 +215,6 @@
res = resources.get(bundleName);
}
-
res.add(resource);
resources.put(bundleName, res);
allBundles.put(bundleName, new HashSet<IResource>(res));
@@ -223,7 +223,7 @@
// notify RBManager instance
RBManager.getInstance(resource.getProject())
.addBundleResource(resource);
-
+
// Fire resource changed event
ResourceBundleChangedEvent event = new ResourceBundleChangedEvent(
ResourceBundleChangedEvent.ADDED, bundleName,
@@ -503,7 +503,8 @@
}
}
- public void includeResource(IResource res, IProgressMonitor monitor) {
+ public void includeResource(IResource res, IProgressMonitor monitor,
+ boolean preventBuild) {
if (monitor == null) {
monitor = new NullProgressMonitor();
}
@@ -547,6 +548,38 @@
monitor.worked(1);
}
+ // check if parent resource exclusion marker can be removed
+ // too
+ final IResource parentResource = res.getParent();
+ if (parentResource instanceof IFolder
+ && excludedResources
+ .contains(new ResourceDescriptor(
+ parentResource))) {
+ final Collection<IResource> childResources = new HashSet<IResource>();
+
+ parentResource.accept(new IResourceVisitor() {
+
+ @Override
+ public boolean visit(IResource resource)
+ throws CoreException {
+ if (excludedResources
+ .contains(new ResourceDescriptor(
+ resource))
+ && !resource.equals(parentResource)) {
+ childResources.add(resource);
+ return false;
+ }
+ return true;
+ }
+ });
+
+ if (childResources.size() == 0) {
+ excludedResources.remove(new ResourceDescriptor(
+ (IResource) parentResource));
+ changedResources.add(parentResource);
+ monitor.worked(1);
+ }
+ }
} catch (Exception e) {
Logger.logError(e);
} finally {
@@ -568,10 +601,10 @@
// TODO check if fullbuild needs only be triggered if a complete
// bundle was excluded
// fullBuildRequired &= !resources.containsKey(bundleName);
-
- //RBManager.getInstance(rbResource.getProject())
- // .addBundleResource(rbResource);
-
+
+ // RBManager.getInstance(rbResource.getProject())
+ // .addBundleResource(rbResource);
+
this.addBundleResource(rbResource);
Logger.logInfo("Including resource bundle '"
+ rbResource.getFullPath().toOSString() + "'");
@@ -582,26 +615,28 @@
bundleName, rbResource.getProject()));
}
- if (fullBuildRequired) {
- try {
- resource.getProject().build(
- IncrementalProjectBuilder.FULL_BUILD, BUILDER_ID,
- null, null);
- } catch (CoreException e) {
- Logger.logError(e);
- }
- } else {
- // trigger incremental build of included resources
- for (IResource changedResource : changedResources) {
+ if (!preventBuild) {
+ if (fullBuildRequired) {
try {
- Logger.logInfo(String.format(
- "trigger rebuild for resource: %s",
- changedResource));
- changedResource.touch(monitor);
+ resource.getProject().build(
+ IncrementalProjectBuilder.FULL_BUILD,
+ BUILDER_ID, null, null);
} catch (CoreException e) {
- Logger.logError(String.format(
- "error during rebuild of resource: %s",
- changedResource), e);
+ Logger.logError(e);
+ }
+ } else {
+ // trigger incremental build of included resources
+ for (IResource changedResource : changedResources) {
+ try {
+ Logger.logInfo(String.format(
+ "trigger rebuild for resource: %s",
+ changedResource));
+ changedResource.touch(monitor);
+ } catch (CoreException e) {
+ Logger.logError(String.format(
+ "error during rebuild of resource: %s",
+ changedResource), e);
+ }
}
}
}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/menus/InternationalizationMenu.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/menus/InternationalizationMenu.java
index adb6336..8a9edd4 100644
--- a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/menus/InternationalizationMenu.java
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/menus/InternationalizationMenu.java
@@ -338,6 +338,7 @@
pm.beginTask("Including resources to Internationalization",
selectedResources.size());
+ int i = 0;
for (IResource res : selectedResources) {
if (manager == null
|| (manager.getProject() != res.getProject())) {
@@ -347,9 +348,10 @@
if (excludeMode) {
manager.excludeResource(res, pm);
} else {
- manager.includeResource(res, pm);
+ manager.includeResource(res, pm, i < (selectedResources.size()-1));
}
pm.worked(1);
+ i++;
}
pm.done();
}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/quickfix/IncludeResource.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/quickfix/IncludeResource.java
index e3751ca..5bff55f 100644
--- a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/quickfix/IncludeResource.java
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/quickfix/IncludeResource.java
@@ -65,9 +65,11 @@
.getManager(marker.getResource().getProject());
pm.beginTask("Including resources to Internationalization",
bundleResources.size());
+ int i = 0;
for (IResource resource : bundleResources) {
- manager.includeResource(resource, pm);
+ manager.includeResource(resource, pm, i != (bundleResources.size()-1));
pm.worked(1);
+ i++;
}
pm.done();
}