You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by we...@apache.org on 2010/01/15 17:43:20 UTC
svn commit: r899695 - in
/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting:
jsf/dynamicdecorators/implemetations/ jsf2/annotation/
Author: werpu
Date: Fri Jan 15 16:43:19 2010
New Revision: 899695
URL: http://svn.apache.org/viewvc?rev=899695&view=rev
Log:
https://issues.apache.org/jira/browse/EXTSCRIPT-46
removing the complexity of the annotation scan workflow
Modified:
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/RenderkitProxy.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BehaviorImplementationListener.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BehaviorRendererImplementationListener.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ComponentImplementationListener.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ConverterImplementationListener.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/GenericAnnotationScanner.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/RendererImplementationListener.java
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java?rev=899695&r1=899694&r2=899695&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java Fri Jan 15 16:43:19 2010
@@ -336,7 +336,7 @@
public void addConverter(String converterId, String converterClass) {
weaveDelegate();
- if (converterClass.equals(PurgedConverter.class.getName())) {
+ /* if (converterClass.equals(PurgedConverter.class.getName())) {
//purged case we do a full rescane
WeavingContext.getWeaver().fullClassScan();
Converter componentToChange = _delegate.createConverter(converterId);
@@ -346,7 +346,7 @@
_delegate.addConverter(converterId, PurgedConverter.class.getName());
}
return;
- }
+ }*/
_delegate.addConverter(converterId, converterClass);
}
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/RenderkitProxy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/RenderkitProxy.java?rev=899695&r1=899694&r2=899695&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/RenderkitProxy.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/RenderkitProxy.java Fri Jan 15 16:43:19 2010
@@ -79,9 +79,11 @@
return rendr;
}
+ //TODO probably not needed anymore
private ClientBehaviorRenderer handleAnnotationChangeBehaviorRenderer(String s) {
ClientBehaviorRenderer rendr2;
- WeavingContext.getWeaver().fullClassScan();
+ //WeavingContext.getWeaver().fullClassScan();
+
rendr2 = _delegate.getClientBehaviorRenderer(s);
if (rendr2 instanceof PurgedClientBehaviorRenderer) {
throw new FacesException("Renderer not found");
@@ -90,10 +92,11 @@
return rendr2;
}
-
+ //TODO probably not needed anymore
private Renderer handleAnnotationChange(String s, String s1) {
Renderer rendr2;
- WeavingContext.getWeaver().fullClassScan();
+
+ //WeavingContext.getWeaver().fullClassScan();
rendr2 = _delegate.getRenderer(s, s1);
if (rendr2 instanceof PurgedRenderer) {
throw new FacesException("Renderer not found");
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BehaviorImplementationListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BehaviorImplementationListener.java?rev=899695&r1=899694&r2=899695&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BehaviorImplementationListener.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BehaviorImplementationListener.java Fri Jan 15 16:43:19 2010
@@ -53,6 +53,10 @@
@Override
public void purge(String className) {
super.purge(className);
+ if(!_alreadyRegistered.containsKey(className)) {
+ return;
+ }
+
String val = (String) _alreadyRegistered.remove(className);
if (val != null) {
getApplication().addBehavior(val, PurgedBehavior.class.getName());
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BehaviorRendererImplementationListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BehaviorRendererImplementationListener.java?rev=899695&r1=899694&r2=899695&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BehaviorRendererImplementationListener.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BehaviorRendererImplementationListener.java Fri Jan 15 16:43:19 2010
@@ -19,12 +19,14 @@
package org.apache.myfaces.scripting.jsf2.annotation;
import org.apache.myfaces.scripting.jsf2.annotation.purged.PurgedClientBehaviorRenderer;
+import org.apache.myfaces.scripting.jsf2.annotation.purged.PurgedRenderer;
import javax.faces.FactoryFinder;
import javax.faces.context.FacesContext;
import javax.faces.render.FacesBehaviorRenderer;
import javax.faces.render.RenderKit;
import javax.faces.render.RenderKitFactory;
+import java.util.HashMap;
import java.util.Map;
/**
@@ -39,6 +41,9 @@
private static final String PAR_RENDERERTYPE = "rendererType";
private static final String PAR_RENDERKITID = "renderKitId";
+ Map<AnnotationEntry, String> _inverseIndex = new HashMap<AnnotationEntry, String>();
+
+
class AnnotationEntry {
String rendererType;
String renderKitId;
@@ -64,6 +69,15 @@
return firstEquals && secondEquals;
}
+ @Override
+ public int hashCode() {
+ return (checkForNull(rendererType)+"_"+checkForNull(renderKitId)).hashCode(); //To change body of overridden methods use File | Settings | File Templates.
+ }
+
+ private String checkForNull(String in) {
+ return (in == null)? "":in;
+ }
+
protected boolean compareValuePair(Object val1, Object val2) {
boolean retVal = false;
if (val1 == null) {
@@ -97,7 +111,8 @@
AnnotationEntry entry = new AnnotationEntry(value, renderKitId);
_alreadyRegistered.put(clazz.getName(), entry);
-
+ _inverseIndex.put(entry, clazz.getName());
+
getApplication().addConverter(entry.getRendererType(), clazz.getName());
}
@@ -145,7 +160,11 @@
RenderKit renderKit = getRenderkit(entry.getRenderKitId());
try {
- renderKit.addClientBehaviorRenderer(entry.getRendererType(), PurgedClientBehaviorRenderer.class.newInstance());
+ String rendererClass = _inverseIndex.get(entry);
+ if (rendererClass != null && rendererClass.equals(className)) {
+ _inverseIndex.put(entry, PurgedClientBehaviorRenderer.class.getName());
+ renderKit.addClientBehaviorRenderer(entry.getRendererType(), PurgedClientBehaviorRenderer.class.newInstance());
+ }
} catch (InstantiationException e) {
log.error(e);
} catch (IllegalAccessException e) {
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ComponentImplementationListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ComponentImplementationListener.java?rev=899695&r1=899694&r2=899695&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ComponentImplementationListener.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ComponentImplementationListener.java Fri Jan 15 16:43:19 2010
@@ -57,6 +57,11 @@
@Override
public void purge(String className) {
super.purge(className);
+ //no purge needed we already have a different class
+ //registered
+ if(!_alreadyRegistered.containsKey(className)) {
+ return;
+ }
String val = (String) _alreadyRegistered.remove(className);
if (val != null) {
getApplication().addComponent(val, PurgedComponent.class.getName());
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ConverterImplementationListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ConverterImplementationListener.java?rev=899695&r1=899694&r2=899695&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ConverterImplementationListener.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ConverterImplementationListener.java Fri Jan 15 16:43:19 2010
@@ -23,6 +23,7 @@
import javax.faces.application.Application;
import javax.faces.convert.FacesConverter;
+import java.util.HashMap;
import java.util.Map;
/**
@@ -35,6 +36,8 @@
private static final String PAR_VALUE = "value";
private static final String PAR_DEFAULT = "forClass";
+ Map<AnnotationEntry, String> _inverseIndex = new HashMap<AnnotationEntry, String>();
+
class AnnotationEntry {
String value;
Class forClass;
@@ -46,14 +49,16 @@
}
public boolean equals(Object incoming) {
- if (!(incoming instanceof AnnotationEntry)) {
+ if (incoming == null) {
return false;
}
- AnnotationEntry toCompare = (AnnotationEntry) incoming;
- if (incoming == null) {
+ if (!(incoming instanceof AnnotationEntry)) {
return false;
}
+ AnnotationEntry toCompare = (AnnotationEntry) incoming;
+
+
boolean firstEquals = compareValuePair(value, toCompare.getValue());
boolean secondEquals = compareValuePair(forClass, toCompare.getForClass());
@@ -61,6 +66,17 @@
return firstEquals && secondEquals;
}
+ @Override
+ public int hashCode() {
+ String retVal = checkForNull(value) + "_";
+ retVal += ((forClass != null) ? forClass.getName() : "");
+ return retVal.hashCode();
+ }
+
+ private String checkForNull(String in) {
+ return (in == null) ? "" : in;
+ }
+
protected boolean compareValuePair(Object val1, Object val2) {
boolean retVal = false;
if (val1 == null) {
@@ -94,11 +110,11 @@
AnnotationEntry entry = new AnnotationEntry(value, forClass);
_alreadyRegistered.put(clazz.getName(), entry);
-
+ _inverseIndex.put(entry, clazz.getName());
+
getApplication().addConverter(entry.getValue(), clazz.getName());
}
-
@Override
protected boolean hasToReregister(Map params, Class clazz) {
String value = (String) params.get(PAR_VALUE);
@@ -107,14 +123,10 @@
AnnotationEntry entry = new AnnotationEntry(value, forClass);
AnnotationEntry alreadyRegistered = (AnnotationEntry) _alreadyRegistered.get(clazz.getName());
- if (alreadyRegistered == null) {
- return true;
- }
-
- return alreadyRegistered.equals(entry);
+
+ return (alreadyRegistered == null) || alreadyRegistered.equals(entry);
}
-
public boolean supportsAnnotation(String annotation) {
return annotation.equals(FacesConverter.class.getName());
}
@@ -126,9 +138,12 @@
if (entry == null) {
return;
}
-
- Application application = getApplication();
- application.addConverter(entry.getValue(), PurgedConverter.class.getName());
+ String _oldConverterClass = _inverseIndex.get(entry);
+ if(_oldConverterClass.equals(className)) {
+ Application application = getApplication();
+ application.addConverter(entry.getValue(), PurgedConverter.class.getName());
+ _inverseIndex.put(entry, className);
+ }
}
}
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/GenericAnnotationScanner.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/GenericAnnotationScanner.java?rev=899695&r1=899694&r2=899695&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/GenericAnnotationScanner.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/GenericAnnotationScanner.java Fri Jan 15 16:43:19 2010
@@ -126,7 +126,7 @@
//hence we do not have the annotations yet scanned
//in groovy we have the initial scan not done hence
//the annotations are scanned on the fly!
- if (clazz != null && !(_weaver instanceof GroovyScriptingWeaver)) {
+ if (clazz != null ) {
java.lang.annotation.Annotation[] anns = clazz.getAnnotations();
if (anns != null && anns.length > 0) {
addOrMoveAnnotations(clazz);
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/RendererImplementationListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/RendererImplementationListener.java?rev=899695&r1=899694&r2=899695&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/RendererImplementationListener.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/RendererImplementationListener.java Fri Jan 15 16:43:19 2010
@@ -27,7 +27,9 @@
import javax.faces.render.RenderKit;
import javax.faces.render.RenderKitFactory;
import javax.faces.render.Renderer;
+import java.util.HashMap;
import java.util.Map;
+import java.util.TreeMap;
/**
* @author Werner Punz (latest modification by $Author$)
@@ -39,11 +41,12 @@
private static final String PAR_RENDERERTYPE = "rendererType";
private static final String PAR_RENDERKITID = "renderKitId";
+ Map<AnnotationEntry, String> _inverseIndex = new HashMap<AnnotationEntry, String>();
+
public RendererImplementationListener() {
super(PAR_FAMILY, PAR_RENDERERTYPE, PAR_RENDERKITID);
}
-
class AnnotationEntry {
String componentFamily;
String rendererType;
@@ -74,12 +77,24 @@
renderKitId == null && toCompare.getRenderKitId() == null) {
return true;
}
-
+ //TODO a simple hash compare should be enough for almost if not all cases since the hashes have a very low propability to be the same
return componentFamily.equals(toCompare.getComponentFamily()) &&
- rendererType.equals(toCompare.getComponentFamily()) &&
+ rendererType.equals(toCompare.getRendererType()) &&
renderKitId.equals(toCompare.getRenderKitId());
}
+ @Override
+ public int hashCode() {
+ /*we calculate the hashcoide to avoid double entries*/
+ return (((componentFamily != null) ? componentFamily : "")
+ + "_" +
+ ((rendererType != null) ? rendererType : "")
+ + "_" +
+ ((renderKitId != null) ? renderKitId : "")
+
+ ).hashCode();
+ }
+
public String getComponentFamily() {
return componentFamily;
}
@@ -93,12 +108,10 @@
}
}
-
public boolean supportsAnnotation(String annotation) {
return annotation.equals(FacesRenderer.class.getName());
}
-
@Override
protected void addEntity(Class clazz, Map<String, Object> params) {
String value = (String) params.get(PAR_FAMILY);
@@ -108,6 +121,7 @@
RenderKit renderKit = getRenderkit(renderKitId);
AnnotationEntry entry = new AnnotationEntry(value, theDefault, renderKitId);
+ _inverseIndex.put(entry, clazz.getName());
_alreadyRegistered.put(clazz.getName(), entry);
if (log.isTraceEnabled()) {
@@ -129,7 +143,6 @@
return (RenderKitFactory) FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
}
-
@Override
protected boolean hasToReregister(Map params, Class clazz) {
String value = (String) params.get(PAR_FAMILY);
@@ -146,7 +159,6 @@
return alreadyRegistered.equals(entry);
}
-
private String getRenderKitId(Map<String, Object> params) {
String renderKitId = (String) params.get(PAR_RENDERKITID);
renderKitId = (renderKitId == null) ? getApplication().getDefaultRenderKitId() : renderKitId;
@@ -159,7 +171,6 @@
return renderKit;
}
-
@Override
public void purge(String className) {
super.purge(className);
@@ -168,13 +179,14 @@
return;
}
- //TODO handle the changed renderer params, but annotation on same
- //class case (remove and add case on the same class)
-
RenderKit renderKit = getRenderkit(entry.getRenderKitId());
try {
-
- renderKit.addRenderer(entry.getComponentFamily(), entry.getRendererType(), PurgedRenderer.class.newInstance());
+ //by fetching the changed renderer we save a full rescan
+ String rendererClass = _inverseIndex.get(entry);
+ if (rendererClass != null && rendererClass.equals(className)) {
+ _inverseIndex.put(entry, PurgedRenderer.class.getName());
+ renderKit.addRenderer(entry.getComponentFamily(), entry.getRendererType(), PurgedRenderer.class.newInstance());
+ }
} catch (InstantiationException e) {
log.error(e);
} catch (IllegalAccessException e) {