Author: dgolovin
Date: 2007-10-26 01:49:46 -0400 (Fri, 26 Oct 2007)
New Revision: 4530
Added:
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/WorkaroundFor207146.java
Modified:
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/wizard/IParameter.java
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/wizard/SeamBaseOperation.java
Log:
http://jira.jboss.org/jira/browse/JBIDE-1057
Added:
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/WorkaroundFor207146.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/WorkaroundFor207146.java
(rev 0)
+++
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/WorkaroundFor207146.java 2007-10-26
05:49:46 UTC (rev 4530)
@@ -0,0 +1,120 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.seam.ui;
+
+import java.util.ArrayList;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+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.ui.IStartup;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
+
+/**
+ * Workaround for
https://bugs.eclipse.org/bugs/show_bug.cgi?id=207146
+ * @author eskimo
+ *
+ */
+public class WorkaroundFor207146 implements IStartup{
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IStartup#earlyStartup()
+ */
+ public void earlyStartup() {
+ ResourcesPlugin.getWorkspace().addResourceChangeListener(new WebContentUpdater());
+ }
+
+ public static class WebContentUpdater implements IResourceChangeListener {
+ public void resourceChanged(IResourceChangeEvent event) {
+ ManifestChangeDetector visitor = new ManifestChangeDetector();
+ try {
+ event.getDelta().accept(visitor );
+ } catch (CoreException e) {
+ e.printStackTrace();
+ }
+ if(visitor.skip)return; // skip listener if MANIFEST.MF and WEB-INF were changed
+
+ IResourceDelta[] delta = event.getDelta().getAffectedChildren();
+ final ArrayList<IResource> resourcesToTouch = new ArrayList<IResource>();
+
+ // go trough changed resources
+ for (IResourceDelta resourceDelta : delta) {
+ IProject prj = resourceDelta.getResource().getProject();
+ IVirtualComponent comp = ComponentCore.createComponent(prj);
+ if(comp==null) continue;
+ final IVirtualFolder root = comp.getRootFolder();
+ // check that changes in WebContent folder
+ if(event.getDelta().findMember(root.getUnderlyingFolder().getFullPath())==null)
return;
+ final IVirtualFile manifest =
comp.getRootFolder().getFile("/META-INF/MANIFEST.MF");
+ // save resources for touch
+ if(manifest!=null && manifest.getUnderlyingResource().isAccessible()) {
+ resourcesToTouch.add(manifest.getUnderlyingResource().getParent());
+ resourcesToTouch.add(manifest.getUnderlyingResource());
+ }
+ }
+
+ // schedule touch in separate job because touch cannot be called
+ // from resource change thread
+ Job updateRsc = new Job("Update resources") {
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ for (IResource resource : resourcesToTouch) {
+ try {
+ resource.touch(null);
+ System.out.println(resource.getLocation());
+ } catch (CoreException e) {
+ e.printStackTrace();
+ }
+ }
+ return Status.OK_STATUS;
+ }
+ };
+ updateRsc.schedule();
+ }
+ }
+
+ /**
+ * Find if there is MANIFEST.MF or WEB-INF resources in IResourceDelta
+ * @author eskimo
+ *
+ */
+ public static class ManifestChangeDetector implements IResourceDeltaVisitor {
+
+ /**
+ * TODO handle case when something is changed in WEB-INF folder
+ */
+ public boolean visit(IResourceDelta delta) throws CoreException {
+
+ if(skip)return false; // skip everything if MANIFEST.MF || WEB-INF are found already
+ if("MANIFEST.MF".equals(delta.getResource().getLocation().lastSegment())
+ || "META-INF".equals(delta.getResource().getLocation().lastSegment())){
+ skip = true;
+ return false;
+ }
+ return true;
+ }
+
+ boolean skip = false;
+
+ }
+}
Property changes on:
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/WorkaroundFor207146.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified:
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/wizard/IParameter.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/wizard/IParameter.java 2007-10-26
05:21:26 UTC (rev 4529)
+++
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/wizard/IParameter.java 2007-10-26
05:49:46 UTC (rev 4530)
@@ -11,11 +11,13 @@
package org.jboss.tools.seam.ui.wizard;
+import org.jboss.tools.seam.internal.core.project.facet.ISeamFacetDataModelProperties;
+
/**
* @author eskimo
*
*/
-public interface IParameter {
+public interface IParameter extends ISeamFacetDataModelProperties{
public static String SEAM_PROJECT_NAME = "seam.project.name"; //$NON-NLS-1$
public static String SEAM_COMPONENT_NAME = "component.name"; //$NON-NLS-1$
Modified:
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/wizard/SeamBaseOperation.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/wizard/SeamBaseOperation.java 2007-10-26
05:21:26 UTC (rev 4529)
+++
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/wizard/SeamBaseOperation.java 2007-10-26
05:49:46 UTC (rev 4530)
@@ -25,6 +25,7 @@
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
@@ -38,6 +39,7 @@
import org.eclipse.ui.ide.IDE;
import org.eclipse.wst.common.componentcore.ComponentCore;
import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
import org.jboss.tools.seam.core.SeamCorePlugin;
import org.jboss.tools.seam.core.SeamProjectsSet;
@@ -96,19 +98,19 @@
IVirtualFolder webRootFolder = com.getRootFolder().getFolder(new Path("/"));
//$NON-NLS-1$
IContainer webRootContainer = webRootFolder.getUnderlyingFolder();
- vars.put(ISeamFacetDataModelProperties.SEAM_PROJECT_INSTANCE,project);
- vars.put(ISeamFacetDataModelProperties.JBOSS_SEAM_HOME,
SeamRuntimeManager.getInstance().getRuntimeForProject(project).getHomeDir());
+ vars.put(IParameter.SEAM_PROJECT_INSTANCE,project);
+ vars.put(IParameter.JBOSS_SEAM_HOME,
SeamRuntimeManager.getInstance().getRuntimeForProject(project).getHomeDir());
vars.put(IParameter.SEAM_PROJECT_LOCATION_PATH,project.getLocation().toFile().toString());
vars.put(IParameter.SEAM_PROJECT_WEBCONTENT_PATH,webRootContainer.getLocation().toFile().toString());
vars.put(IParameter.SEAM_EJB_PROJECT_LOCATION_PATH,seamPrjSet.getEjbProject()!=null?seamPrjSet.getEjbProject().getLocation().toFile().toString():"");
vars.put(IParameter.SEAM_TEST_PROJECT_LOCATION_PATH,seamPrjSet.getTestProject().getLocation().toFile().toString());
- vars.put(ISeamFacetDataModelProperties.SESION_BEAN_PACKAGE_PATH,
actionFolder.replace('.','/'));
- vars.put(ISeamFacetDataModelProperties.SESION_BEAN_PACKAGE_NAME, actionFolder);
- vars.put(ISeamFacetDataModelProperties.TEST_CASES_PACKAGE_PATH,
testFolder.replace('.','/'));
- vars.put(ISeamFacetDataModelProperties.TEST_CASES_PACKAGE_NAME, testFolder);
- vars.put(ISeamFacetDataModelProperties.ENTITY_BEAN_PACKAGE_PATH,
entityFolder.replace('.','/'));
- vars.put(ISeamFacetDataModelProperties.ENTITY_BEAN_PACKAGE_NAME, entityFolder);
+ vars.put(IParameter.SESION_BEAN_PACKAGE_PATH,
actionFolder.replace('.','/'));
+ vars.put(IParameter.SESION_BEAN_PACKAGE_NAME, actionFolder);
+ vars.put(IParameter.TEST_CASES_PACKAGE_PATH,
testFolder.replace('.','/'));
+ vars.put(IParameter.TEST_CASES_PACKAGE_NAME, testFolder);
+ vars.put(IParameter.ENTITY_BEAN_PACKAGE_PATH,
entityFolder.replace('.','/'));
+ vars.put(IParameter.ENTITY_BEAN_PACKAGE_NAME, entityFolder);
List<String[]> fileMapping = getFileMappings(vars);
List<String[]> fileMappingCopy = applyVariables(fileMapping,vars);
@@ -142,8 +144,19 @@
} catch (IOException e) {
result = new Status(IStatus.ERROR,SeamGuiPlugin.PLUGIN_ID,e.getMessage(),e);
} finally {
- try {
+ try {
+ // ComponentCore is used to handle case when user changes
+ // default WebContent folder to another one in
+ // Web Facet configuration page
+ IProject prj = seamPrjSet.getWarProject();
+ IVirtualComponent webComp = ComponentCore.createComponent(prj);
+ IVirtualFile manifest =
webComp.getRootFolder().getFile("/META-INF/MANIFEST.MF");
+ manifest.getUnderlyingFile().getParent().touch(monitor);
+ manifest.getUnderlyingFile().touch(monitor);
+
+ // to keep workspace in sync
seamPrjSet.refreshLocal(monitor);
+
} catch (CoreException e) {
result = new Status(IStatus.ERROR,SeamGuiPlugin.PLUGIN_ID,e.getMessage(),e);
}
@@ -155,15 +168,15 @@
}
protected String getSessionBeanPackageName(IEclipsePreferences seamFacetPrefs,
Map<String, INamedElement> wizardParams) {
- return seamFacetPrefs.get(ISeamFacetDataModelProperties.SESION_BEAN_PACKAGE_NAME,
"");
+ return seamFacetPrefs.get(IParameter.SESION_BEAN_PACKAGE_NAME, "");
}
protected String getEntityBeanPackageName(IEclipsePreferences seamFacetPrefs,
Map<String, INamedElement> wizardParams) {
- return seamFacetPrefs.get(ISeamFacetDataModelProperties.ENTITY_BEAN_PACKAGE_NAME,
"");
+ return seamFacetPrefs.get(IParameter.ENTITY_BEAN_PACKAGE_NAME, "");
}
protected String getTestCasesPackageName(IEclipsePreferences seamFacetPrefs,
Map<String, INamedElement> wizardParams) {
- return seamFacetPrefs.get(ISeamFacetDataModelProperties.TEST_CASES_PACKAGE_NAME,
"");
+ return seamFacetPrefs.get(IParameter.TEST_CASES_PACKAGE_NAME, "");
}
/**
@@ -236,7 +249,7 @@
}
public File getSeamFolder(Map<String, Object> vars) {
- return new
File(vars.get(ISeamFacetDataModelProperties.JBOSS_SEAM_HOME).toString(),"seam-gen");
//$NON-NLS-1$
+ return new
File(vars.get(IParameter.JBOSS_SEAM_HOME).toString(),"seam-gen");
//$NON-NLS-1$
}
protected void loadCustomVariables(Map<String, Object> vars) {