Author: scabanovich
Date: 2011-08-15 14:32:48 -0400 (Mon, 15 Aug 2011)
New Revision: 33931
Added:
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/model/impl/FacesConfigDefinition.java
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/build/JSF2ProjectBuilder.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/model/IJSF2Project.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/model/impl/AbstractMemberDefinition.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/model/impl/DefinitionContext.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/model/impl/JSF2Project.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/scanner/FileSet.java
Log:
JBIDE-8280
https://issues.jboss.org/browse/JBIDE-8280
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/build/JSF2ProjectBuilder.java
===================================================================
---
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/build/JSF2ProjectBuilder.java 2011-08-15
17:07:45 UTC (rev 33930)
+++
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/build/JSF2ProjectBuilder.java 2011-08-15
18:32:48 UTC (rev 33931)
@@ -42,10 +42,12 @@
import org.jboss.tools.common.EclipseUtil;
import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.common.model.plugin.ModelPlugin;
+import org.jboss.tools.common.model.project.ProjectHome;
import org.jboss.tools.common.model.util.EclipseResourceUtil;
import org.jboss.tools.jsf.JSFModelPlugin;
import org.jboss.tools.jsf.jsf2.bean.model.JSF2ProjectFactory;
import org.jboss.tools.jsf.jsf2.bean.model.impl.DefinitionContext;
+import org.jboss.tools.jsf.jsf2.bean.model.impl.FacesConfigDefinition;
import org.jboss.tools.jsf.jsf2.bean.model.impl.JSF2Project;
import org.jboss.tools.jsf.jsf2.bean.model.impl.TypeDefinition;
import org.jboss.tools.jsf.jsf2.bean.scanner.FileSet;
@@ -216,6 +218,16 @@
context.addType(f, type.getFullyQualifiedName(), def);
}
}
+ IFile facesConfig = fs.getFacesConfig();
+ if(facesConfig != null) {
+ FacesConfigDefinition def = new FacesConfigDefinition();
+ def.setPath(facesConfig.getFullPath());
+ XModelObject o = EclipseResourceUtil.createObjectForResource(facesConfig);
+ if(o != null) {
+ def.setObject(o);
+ context.setFacesConfig(def);
+ }
+ }
}
class SampleDeltaVisitor implements IResourceDeltaVisitor {
@@ -246,10 +258,12 @@
FileSet fileSet = new FileSet();
IPath[] outs = new IPath[0];
IPath[] srcs = new IPath[0];
+ IPath[] webinfs = new IPath[0];
Set<IPath> visited = new HashSet<IPath>();
public JSF2ResourceVisitor() {
getJavaSourceRoots(getProject());
+ webinfs = ProjectHome.getWebInfPaths(getProject());
}
void getJavaSourceRoots(IProject project) {
@@ -323,6 +337,12 @@
return false;
}
}
+ for (int i = 0; i < webinfs.length; i++) {
+ if(webinfs[i].isPrefixOf(path) &&
f.getName().equals("faces-config.xml")
+ && path.removeLastSegments(1).equals(webinfs[i])) {
+ fileSet.setFacesConfig(f);
+ }
+ }
Set<IFile> ds = getDependentFiles(path, visited);
if(ds != null) for (IFile d: ds) visit(d);
}
@@ -341,6 +361,11 @@
if(resource == resource.getProject()) {
return true;
}
+ for (IPath webinf: webinfs) {
+ if(webinf.isPrefixOf(path) || path.isPrefixOf(webinf)) {
+ return true;
+ }
+ }
return false;
}
//return true to continue visiting children.
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/model/IJSF2Project.java
===================================================================
---
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/model/IJSF2Project.java 2011-08-15
17:07:45 UTC (rev 33930)
+++
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/model/IJSF2Project.java 2011-08-15
18:32:48 UTC (rev 33931)
@@ -17,14 +17,51 @@
public interface IJSF2Project {
+ /**
+ * Returns all managed beans declared in Java classes with @ManagedBeans annotation
+ *
+ * @return
+ */
public Set<IJSF2ManagedBean> getManagedBeans();
+ /**
+ * Returns JSF2 managed beans declared in resource at given path.
+ *
+ * @param path
+ * @return
+ */
public Set<IJSF2ManagedBean> getManagedBeans(IPath path);
+ /**
+ * Returns JSF2 managed beans with given name.
+ *
+ * @param name
+ * @return
+ */
public Set<IJSF2ManagedBean> getManagedBeans(String name);
+ /**
+ * Returns true, if file /WEB-INF/faces-config.xml exist and declares
+ * metadata-complete="true", otherwise returns false.
+ *
+ * When metadata is complete, all managed beans loaded from annotations are disabled.
+ *
+ * @return
+ */
+ public boolean isMetadataComplete();
+
+ /**
+ * Returns current project.
+ *
+ * @return
+ */
public IProject getProject();
+ /**
+ * Returns set of existing JSF2 projects declared in class path of current project.
+ *
+ * @return
+ */
public Set<? extends IJSF2Project> getUsedProjects();
public void addUsedProject(IJSF2Project project);
@@ -33,10 +70,27 @@
public void removeUsedProject(IJSF2Project project);
+ /**
+ * Cleans from model objects loaded at given path.
+ * @param path
+ */
public void pathRemoved(IPath path);
+ /**
+ * Returns true, if model is fully loaded.
+ *
+ * @return
+ */
public boolean isStorageResolved();
+
+ /**
+ * Fully loads model if was not loaded yet.
+ */
public void resolve();
+
+ /**
+ * Updates model by loaded definitions.
+ */
public void update();
}
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/model/impl/AbstractMemberDefinition.java
===================================================================
---
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/model/impl/AbstractMemberDefinition.java 2011-08-15
17:07:45 UTC (rev 33930)
+++
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/model/impl/AbstractMemberDefinition.java 2011-08-15
18:32:48 UTC (rev 33931)
@@ -44,8 +44,6 @@
protected Map<String, AnnotationDeclaration> annotationsByType = new
HashMap<String, AnnotationDeclaration>();
protected IResource resource;
- protected ITextSourceReference originalDefinition = null;
-
public AbstractMemberDefinition() {}
protected void setAnnotatable(IAnnotatable member, IType contextType, DefinitionContext
context, int flags) {
@@ -57,10 +55,6 @@
}
}
- public void setOriginalDefinition(ITextSourceReference def) {
- originalDefinition = def;
- }
-
public IAnnotatable getMember() {
return member;
}
@@ -126,7 +120,4 @@
return resource;
}
- public ITextSourceReference getOriginalDefinition() {
- return originalDefinition;
- }
}
\ No newline at end of file
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/model/impl/DefinitionContext.java
===================================================================
---
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/model/impl/DefinitionContext.java 2011-08-15
17:07:45 UTC (rev 33930)
+++
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/model/impl/DefinitionContext.java 2011-08-15
18:32:48 UTC (rev 33931)
@@ -37,6 +37,8 @@
private Map<IPath, Set<String>> resources = new HashMap<IPath,
Set<String>>();
private Map<String, TypeDefinition> typeDefinitions = new HashMap<String,
TypeDefinition>();
+ FacesConfigDefinition facesConfig = null;
+
private DefinitionContext workingCopy;
private DefinitionContext original;
@@ -49,6 +51,7 @@
if(!clean) {
copy.types.addAll(types);
copy.typeDefinitions.putAll(typeDefinitions);
+ copy.facesConfig = facesConfig;
for (IPath p: resources.keySet()) {
Set<String> set = resources.get(p);
@@ -93,6 +96,13 @@
}
}
+ public void setFacesConfig(FacesConfigDefinition def) {
+ facesConfig = def;
+ if(def != null) {
+ addToParents(def.getPath());
+ }
+ }
+
public void addType(IPath file, String typeName) {
if(file != null) {
Set<String> ts = resources.get(file);
@@ -124,6 +134,7 @@
childPaths.clear();
resources.clear();
types.clear();
+ facesConfig = null;
synchronized (typeDefinitions) {
typeDefinitions.clear();
}
@@ -135,6 +146,9 @@
if(ts != null) for (String t: ts) {
clean(t);
}
+ if(facesConfig != null && path.equals(facesConfig.getPath())) {
+ facesConfig = null;
+ }
Set<IPath> cs = childPaths.get(path);
if(cs != null) {
@@ -227,6 +241,7 @@
resources = workingCopy.resources;
childPaths = workingCopy.childPaths;
typeDefinitions = workingCopy.typeDefinitions;
+ facesConfig = workingCopy.facesConfig;
project.update();
@@ -253,5 +268,8 @@
return typeDefinitions.get(fullyQualifiedName);
}
+ public FacesConfigDefinition getFacesConfig() {
+ return facesConfig;
+ }
}
Added:
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/model/impl/FacesConfigDefinition.java
===================================================================
---
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/model/impl/FacesConfigDefinition.java
(rev 0)
+++
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/model/impl/FacesConfigDefinition.java 2011-08-15
18:32:48 UTC (rev 33931)
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2011 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.jsf.jsf2.bean.model.impl;
+
+import org.eclipse.core.runtime.IPath;
+import org.jboss.tools.common.model.XModelObject;
+
+/**
+ *
+ * @author Viacheslav Kabanovich
+ *
+ */
+public class FacesConfigDefinition {
+ IPath path;
+ XModelObject facesConfig;
+
+ boolean isMetadataComplete;
+
+ public void setPath(IPath path) {
+ this.path = path;
+ }
+
+ public void setObject(XModelObject facesConfig) {
+ this.facesConfig = facesConfig;
+ isMetadataComplete =
"true".equals(facesConfig.getAttributeValue("metadata-complete"));
+ }
+
+ public IPath getPath() {
+ return path;
+ }
+
+ public boolean isMetadataComplete() {
+ return isMetadataComplete;
+ }
+}
Property changes on:
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/model/impl/FacesConfigDefinition.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/model/impl/JSF2Project.java
===================================================================
---
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/model/impl/JSF2Project.java 2011-08-15
17:07:45 UTC (rev 33930)
+++
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/model/impl/JSF2Project.java 2011-08-15
18:32:48 UTC (rev 33931)
@@ -65,6 +65,8 @@
private Map<String, Set<IJSF2ManagedBean>> beansByName = new
HashMap<String, Set<IJSF2ManagedBean>>();
private Set<IJSF2ManagedBean> namedBeans = new HashSet<IJSF2ManagedBean>();
+ private boolean isMetadataComplete = false;
+
public JSF2Project() {
definitions.setProject(this);
}
@@ -96,6 +98,10 @@
return result;
}
+ public boolean isMetadataComplete() {
+ return isMetadataComplete;
+ }
+
@Override
public IProject getProject() {
return project;
@@ -304,6 +310,10 @@
for (IJSF2ManagedBean bean: beans) {
addBean(bean);
}
+
+ FacesConfigDefinition fc = definitions.getFacesConfig();
+ isMetadataComplete = fc != null && fc.isMetadataComplete();
+
}
public void addBean(IJSF2ManagedBean bean) {
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/scanner/FileSet.java
===================================================================
---
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/scanner/FileSet.java 2011-08-15
17:07:45 UTC (rev 33930)
+++
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/bean/scanner/FileSet.java 2011-08-15
18:32:48 UTC (rev 33931)
@@ -15,6 +15,7 @@
import java.util.Map;
import java.util.Set;
+import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.core.Flags;
@@ -30,6 +31,8 @@
private Map<IPath, Set<IType>> classes = new HashMap<IPath,
Set<IType>>();
private Map<IPath, IPackageDeclaration> packages = new HashMap<IPath,
IPackageDeclaration>();
+ private IFile facesConfig = null;
+
public FileSet() {}
public void add(IPath path, IType[] types) throws CoreException {
@@ -98,6 +101,10 @@
packages.put(path, pkg);
}
+ public void setFacesConfig(IFile facesConfig) {
+ this.facesConfig = facesConfig;
+ }
+
public Set<IPath> getAllPaths() {
return allpaths;
}
@@ -122,4 +129,8 @@
return packages;
}
+ public IFile getFacesConfig() {
+ return facesConfig;
+ }
+
}