Author: scabanovich
Date: 2009-10-12 10:56:27 -0400 (Mon, 12 Oct 2009)
New Revision: 18044
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/KbProject.java
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/KbResourceVisitor.java
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/scanner/JSF2ResourcesScanner.java
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/scanner/LibraryScanner.java
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/AbstractComponent.java
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/AbstractTagLib.java
Log:
https://jira.jboss.org/jira/browse/JBIDE-4970
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/KbProject.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/KbProject.java 2009-10-12
13:11:49 UTC (rev 18043)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/KbProject.java 2009-10-12
14:56:27 UTC (rev 18044)
@@ -582,6 +582,9 @@
for (ITagLibrary library: libraries) {
AbstractTagLib loaded = (AbstractTagLib)library;
AbstractTagLib current = (AbstractTagLib)currentLibraries.remove(loaded.getId());
+
+ loaded.setSourcePath(source);
+
if(current != null && current.getClass() != loaded.getClass()) {
this.libraries.removeLibrary((ITagLibrary)current);
current = null;
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/KbResourceVisitor.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/KbResourceVisitor.java 2009-10-12
13:11:49 UTC (rev 18043)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/KbResourceVisitor.java 2009-10-12
14:56:27 UTC (rev 18044)
@@ -30,6 +30,7 @@
static IFileScanner[] FILE_SCANNERS = {
new XMLScanner(),
};
+ JSF2ResourcesScanner jsf2scanner = new JSF2ResourcesScanner();
KbProject p;
@@ -102,6 +103,9 @@
// System.out.println("Time=" + timeUsed);
}
}
+ if(jsf2resources != null && jsf2resources.isPrefixOf(f.getFullPath())
&& jsf2scanner.isLikelyComponentSource(f)) {
+ processJSF2Resources();
+ }
}
if(resource instanceof IFolder) {
IPath path = resource.getFullPath();
@@ -117,17 +121,7 @@
}
if(jsf2resources != null) {
if (jsf2resources.isPrefixOf(path)) {
- if (jsf2resourcesProcessed) return false;
- jsf2resourcesProcessed = true;
- JSF2ResourcesScanner scanner = new JSF2ResourcesScanner();
- LoadedDeclarations c = null;
- try {
- c = scanner.parse((IFolder) jsf2resourcesFolder, p);
- } catch (ScannerException e) {
- WebKbPlugin.getDefault().logError(e);
- }
- if (c != null)
- componentsLoaded(c, resource);
+ processJSF2Resources();
return false;
}
if(path.isPrefixOf(jsf2resources)) {
@@ -150,6 +144,20 @@
//return true to continue visiting children.
return true;
}
+
+ void processJSF2Resources() {
+ if (jsf2resourcesFolder == null || jsf2resourcesProcessed) return;
+ jsf2resourcesProcessed = true;
+ JSF2ResourcesScanner scanner = new JSF2ResourcesScanner();
+ LoadedDeclarations c = null;
+ try {
+ c = scanner.parse((IFolder) jsf2resourcesFolder, p);
+ } catch (ScannerException e) {
+ WebKbPlugin.getDefault().logError(e);
+ }
+ if (c != null)
+ componentsLoaded(c, jsf2resourcesFolder);
+ }
void componentsLoaded(LoadedDeclarations c, IResource resource) {
if(c == null || c.getLibraries().size() == 0) return;
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/scanner/JSF2ResourcesScanner.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/scanner/JSF2ResourcesScanner.java 2009-10-12
13:11:49 UTC (rev 18043)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/scanner/JSF2ResourcesScanner.java 2009-10-12
14:56:27 UTC (rev 18044)
@@ -1,5 +1,6 @@
package org.jboss.tools.jst.web.kb.internal.scanner;
+import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.runtime.IPath;
@@ -21,10 +22,25 @@
public static String ATTR_SHORT_DESCRIPTION = "shortDescription";
//$NON-NLS-1$
public static String URI_PREFIX = "http://java.sun.com/jsf/composite";
//$NON-NLS-1$
+ public static String ENT_COMPOSITE_COMPONENT = "FileJSF2Component";
//$NON-NLS-1$
+
public JSF2ResourcesScanner() {}
public boolean isLikelyComponentSource(IFile f) {
- //only to be invoked on IFolder named 'resources'
+ if(!f.isSynchronized(IFile.DEPTH_ZERO) || !f.exists()) return false;
+ XModel model = InnerModelHelper.createXModel(f.getProject());
+ if(model == null) return false;
+ XModelObject o = EclipseResourceUtil.getObjectByResource(model, f);
+ if(o == null) return false;
+ if(LibraryScanner.isCompositeComponentFile(o)) {
+ IContainer c = f.getParent();
+ while(c != null && c instanceof IFolder) {
+ if("resources".equals(c.getName())) {
+ return true;
+ }
+ c = c.getParent();
+ }
+ }
return false;
}
@@ -62,7 +78,7 @@
processFolder(c, ds, source, uriPrefix + "/" + n); //$NON-NLS-1$
}
String entity = c.getModelEntity().getName();
- if("FileJSF2Component".equals(entity)) { //$NON-NLS-1$
+ if(ENT_COMPOSITE_COMPONENT.equals(entity)) {
if(library == null) {
library = new CompositeTagLibrary();
library.setId(o);
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/scanner/LibraryScanner.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/scanner/LibraryScanner.java 2009-10-12
13:11:49 UTC (rev 18043)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/scanner/LibraryScanner.java 2009-10-12
14:56:27 UTC (rev 18044)
@@ -113,6 +113,13 @@
if(entity.startsWith("FacesConfig")) return true; //$NON-NLS-1$
return false;
}
+
+ public static boolean isCompositeComponentFile(XModelObject o) {
+ if(o == null) return false;
+ String entity = o.getModelEntity().getName();
+ if(entity.startsWith(JSF2ResourcesScanner.ENT_COMPOSITE_COMPONENT)) return true;
//$NON-NLS-1$
+ return false;
+ }
}
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/AbstractComponent.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/AbstractComponent.java 2009-10-12
13:11:49 UTC (rev 18043)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/AbstractComponent.java 2009-10-12
14:56:27 UTC (rev 18044)
@@ -502,14 +502,16 @@
for (IAttribute a: getAttributes()) attributeMap.put(((KbObject)a).getId(),
(AbstractAttribute)a);
for (IAttribute a: c.getAttributes()) {
AbstractAttribute loaded = (AbstractAttribute)a;
- AbstractAttribute current = attributeMap.get(loaded.getId());
+ AbstractAttribute current = attributeMap.remove(loaded.getId());
if(current == null) {
addAttribute(loaded);
Change change = new Change(this, null, null, loaded);
children.addChildren(Change.addChange(null, change));
} else {
+ removeAttribute(current);
List<Change> rc = current.merge(loaded);
if(rc != null) children.addChildren(rc);
+ addAttribute(current);
}
}
for (IAttribute a: attributeMap.values()) {
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/AbstractTagLib.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/AbstractTagLib.java 2009-10-12
13:11:49 UTC (rev 18043)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/AbstractTagLib.java 2009-10-12
14:56:27 UTC (rev 18044)
@@ -475,10 +475,47 @@
@Override
public List<Change> merge(KbObject s) {
List<Change> changes = super.merge(s);
- //TODO
+ AbstractTagLib t = (AbstractTagLib)s;
+ Change children = new Change(this, null, null, null);
+ mergeComponents(t, children);
+ changes = Change.addChange(changes, children);
+
return changes;
}
+ public void mergeComponents(AbstractTagLib c, Change children) {
+ Map<Object,AbstractComponent> componentMap = new HashMap<Object,
AbstractComponent>();
+ for (IComponent a: getComponents()) componentMap.put(((KbObject)a).getId(),
(AbstractComponent)a);
+ for (IComponent a: c.getComponents()) {
+ AbstractComponent loaded = (AbstractComponent)a;
+ AbstractComponent current = componentMap.remove(loaded.getId());
+ if(current == null) {
+ addComponent(loaded);
+ Change change = new Change(this, null, null, loaded);
+ children.addChildren(Change.addChange(null, change));
+ } else {
+ if(components.get(current.getName()) == current) {
+ components.remove(current.getName());
+ }
+ List<Change> rc = current.merge(loaded);
+ if(rc != null) children.addChildren(rc);
+ components.put(current.getName(), current);
+ }
+ }
+ for (IComponent a: componentMap.values()) {
+ AbstractComponent removed = (AbstractComponent)a;
+ if(components.get(removed.getName()) == removed) {
+ components.remove(removed.getName());
+ Change change = new Change(this, null, removed, null);
+ children.addChildren(Change.addChange(null, change));
+ clearComponentArrays();
+ }
+ }
+ }
+
+ private void clearComponentArrays() {
+ componentsArray = null;
+ }
/*
* (non-Javadoc)
* @see org.jboss.tools.jst.web.kb.internal.KbObject#getXMLName()
@@ -550,4 +587,5 @@
protected void loadAttributeValues(Element element) {
setURI(attributesInfo.get(URI));
}
+
}
\ No newline at end of file