You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bval.apache.org by mb...@apache.org on 2011/02/24 00:32:26 UTC
svn commit: r1073987 - in
/incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic:
DynamicMetaGraphManagerImpl.java DynamicModelManager.java
DynamicValidatorFactory.java Timestamped.java
Author: mbenson
Date: Wed Feb 23 23:32:26 2011
New Revision: 1073987
URL: http://svn.apache.org/viewvc?rev=1073987&view=rev
Log:
carry timestamps throughout the meta-graph
Modified:
incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/DynamicMetaGraphManagerImpl.java
incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/DynamicModelManager.java
incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/DynamicValidatorFactory.java
incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/Timestamped.java
Modified: incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/DynamicMetaGraphManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/DynamicMetaGraphManagerImpl.java?rev=1073987&r1=1073986&r2=1073987&view=diff
==============================================================================
--- incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/DynamicMetaGraphManagerImpl.java (original)
+++ incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/DynamicMetaGraphManagerImpl.java Wed Feb 23 23:32:26 2011
@@ -42,6 +42,7 @@ import org.apache.bval.MetaBeanFinder;
import org.apache.bval.jsr303.AnnotationProcessor;
import org.apache.bval.jsr303.AppendValidationToMeta;
import org.apache.bval.jsr303.UnknownPropertyException;
+import org.apache.bval.jsr303.dynamic.Timestamped.Context.Bean;
import org.apache.bval.jsr303.util.ClassHelper;
import org.apache.bval.jsr303.util.NodeImpl;
import org.apache.bval.jsr303.util.PathImpl;
@@ -512,7 +513,7 @@ final class DynamicMetaGraphManagerImpl
if (dynamicBeanInfo.containsKey(type)) {
return dynamicBeanInfo.get(type);
}
- MetaBean result = timeContext.new Bean();
+ MetaBean result = new Bean(timeContext);
result.setBeanClass(type);
MetaBean faster = dynamicBeanInfo.putIfAbsent(type, result);
return faster == null ? result : faster;
Modified: incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/DynamicModelManager.java
URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/DynamicModelManager.java?rev=1073987&r1=1073986&r2=1073987&view=diff
==============================================================================
--- incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/DynamicModelManager.java (original)
+++ incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/DynamicModelManager.java Wed Feb 23 23:32:26 2011
@@ -125,7 +125,7 @@ public class DynamicModelManager {
result = createMetaProperty(metaBean);
result.setName(name);
result.setType(new PropertyAccess(metaBean.getBeanClass(), name).getJavaType());
- MetaBean propertyBean = createMetaBean();
+ MetaBean propertyBean = createPropertyMetaBean(result);
propertyBean.setBeanClass(result.getTypeClass());
result.setMetaBean(propertyBean);
metaBean.putProperty(name, result);
@@ -144,15 +144,7 @@ public class DynamicModelManager {
public MetaContainer<?> getRequiredContainer(FeaturesCapable meta) {
MetaContainer<?> result = meta.getFeature(META_CONTAINER);
if (result == null) {
- Type type =
- meta instanceof MetaProperty ? ((MetaProperty) meta).getType() : ((MetaBean) meta).getBeanClass();
- if (KeyedAccess.getJavaElementType(type) != null) {
- result = createKeyedContainer(type);
- } else if (IndexedAccess.getJavaElementType(type) != null) {
- result = createIndexedContainer(type);
- } else {
- throw new IllegalArgumentException(String.format("don't know how to make a container of %s", meta));
- }
+ result = createContainer(meta);
meta.putFeature(META_CONTAINER, result);
}
return result;
@@ -384,36 +376,72 @@ public class DynamicModelManager {
}
/**
- * {@inheritDoc}
+ * Create a {@link MetaProperty} for <code>owner</code>.
+ *
+ * @param owner
+ * @return MetaProperty
*/
protected MetaProperty createMetaProperty(MetaBean owner) {
return new MetaProperty();
}
/**
- * {@inheritDoc}
+ * Create a {@link MetaBean}.
+ *
+ * @return MetaBean
*/
protected MetaBean createMetaBean() {
return new MetaBean();
}
/**
- * {@inheritDoc}
+ * Create a {@link MetaBean} to be assigned to a {@link MetaProperty}.
+ * @param owner
+ * @return MetaBean
+ */
+ protected MetaBean createPropertyMetaBean(MetaProperty owner) {
+ return createMetaBean();
+ }
+
+ /**
+ * Create the appropriate {@link MetaContainer} for the specified meta-node.
+ * @param owner
+ * @return MetaContainer
*/
- protected MetaContainer<Object> createKeyedContainer(Type type) {
- return new MetaMap(type);
+ protected MetaContainer<?> createContainer(FeaturesCapable owner) {
+ Type type = getType(owner);
+ if (KeyedAccess.getJavaElementType(type) != null) {
+ return new MetaMap(type);
+ }
+ if (IndexedAccess.getJavaElementType(type) != null) {
+ return new MetaCollection(type);
+ }
+ throw new IllegalArgumentException(String.format("don't know how to make a container of %s", owner));
}
/**
- * {@inheritDoc}
+ * Get generic type information for the specified meta-node.
+ *
+ * @param meta
+ * @return Type found
+ * @throws IllegalArgumentException
+ * if <code>meta</code> is neither {@link MetaBean} nor {@link MetaProperty}.
*/
- protected MetaContainer<Integer> createIndexedContainer(Type type) {
- return new MetaCollection(type);
+ protected Type getType(FeaturesCapable meta) {
+ if (meta instanceof MetaBean) {
+ return ((MetaBean) meta).getBeanClass();
+ }
+ if (meta instanceof MetaProperty) {
+ return ((MetaProperty) meta).getType();
+ }
+ throw new IllegalArgumentException(String.format("Cannot calculate type for %s", meta));
}
/**
+ * Create the dynamic constraints collection for the specified meta-node.
*
- * {@inheritDoc}
+ * @param owner
+ * @return Collection of Annotation
*/
protected Collection<Annotation> createDynamicConstraintsCollection(FeaturesCapable owner) {
return Collections.synchronizedList(new ArrayList<Annotation>());
Modified: incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/DynamicValidatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/DynamicValidatorFactory.java?rev=1073987&r1=1073986&r2=1073987&view=diff
==============================================================================
--- incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/DynamicValidatorFactory.java (original)
+++ incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/DynamicValidatorFactory.java Wed Feb 23 23:32:26 2011
@@ -28,6 +28,7 @@ import org.apache.bval.MetaBeanFinder;
import org.apache.bval.MetaBeanManager;
import org.apache.bval.jsr303.ApacheFactoryContext;
import org.apache.bval.jsr303.ApacheValidatorFactory;
+import org.apache.bval.jsr303.dynamic.Timestamped.Context.Bean;
import org.apache.bval.jsr303.xml.MetaConstraint;
import org.apache.bval.model.MetaBean;
import org.apache.bval.util.AccessStrategy;
@@ -72,7 +73,7 @@ public class DynamicValidatorFactory ext
*/
@Override
public MetaBean buildForClass(Class<?> clazz) throws Exception {
- final MetaBean result = timeContext == null ? new MetaBean() : timeContext.new Bean();
+ final MetaBean result = timeContext == null ? new MetaBean() : new Bean(timeContext);
if (clazz != null) { // local class here?
result.setBeanClass(clazz);
result.setId(clazz.getName()); // default id = full class name!
@@ -159,10 +160,10 @@ public class DynamicValidatorFactory ext
if (cached != null) {
cache.removeFromCache(cached);
} else if (timeContext == null) {
- //if there is no timeContext, don't create it on account of a noop cache removal:
+ // if there is no timeContext, don't create it on account of a noop cache removal:
return;
}
- //double read to avoid unnecessary synchronization:
+ // double read to avoid unnecessary synchronization:
if (timeContext == null) {
synchronized (this) {
if (timeContext == null) {
Modified: incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/Timestamped.java
URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/Timestamped.java?rev=1073987&r1=1073986&r2=1073987&view=diff
==============================================================================
--- incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/Timestamped.java (original)
+++ incubator/bval/sandbox/lang3-work/bval-jsr303d/src/main/java/org/apache/bval/jsr303/dynamic/Timestamped.java Wed Feb 23 23:32:26 2011
@@ -38,6 +38,8 @@ import org.apache.bval.model.FeaturesCap
import org.apache.bval.model.MetaBean;
import org.apache.bval.model.MetaProperty;
import org.apache.bval.model.Validation;
+import org.apache.bval.util.IndexedAccess;
+import org.apache.bval.util.KeyedAccess;
import org.apache.commons.lang3.ClassUtils;
import org.apache.commons.lang3.ObjectUtils;
@@ -396,6 +398,7 @@ interface Timestamped {
/**
* {@inheritDoc}
*/
+ @Override
protected MetaProperty createMetaProperty(MetaBean owner) {
return owner instanceof Bean ? ((Bean) owner).new Property() : super.createMetaProperty(owner);
}
@@ -403,27 +406,38 @@ interface Timestamped {
/**
* {@inheritDoc}
*/
+ @Override
protected MetaBean createMetaBean() {
- return new Bean();
+ return new Bean(this);
}
/**
* {@inheritDoc}
*/
- protected MetaContainer<Object> createKeyedContainer(Type type) {
- return new AwareMap(type);
+ @Override
+ protected MetaBean createPropertyMetaBean(MetaProperty owner) {
+ return new Bean(owner);
}
/**
* {@inheritDoc}
*/
- protected MetaContainer<Integer> createIndexedContainer(Type type) {
- return new AwareCollection(type);
+ @Override
+ protected MetaContainer<?> createContainer(FeaturesCapable owner) {
+ Type type = getType(owner);
+ if (KeyedAccess.getJavaElementType(type) != null) {
+ return new AwareMap(type, owner);
+ }
+ if (IndexedAccess.getJavaElementType(type) != null) {
+ return new AwareCollection(type, owner);
+ }
+ throw new IllegalArgumentException(String.format("don't know how to make a container of %s", owner));
}
/**
* {@inheritDoc}
*/
+ @Override
protected Collection<Annotation> createDynamicConstraintsCollection(FeaturesCapable owner) {
Timestamped t = null;
if (owner instanceof Timestamped) {
@@ -441,7 +455,7 @@ interface Timestamped {
/**
* {@link Timestamped} {@link MetaBean}.
*/
- class Bean extends MetaBean implements Timestamped, CacheMeta<MetaBean> {
+ static class Bean extends MetaBean implements Timestamped, CacheMeta<MetaBean> {
private static final long serialVersionUID = 1L;
@@ -484,11 +498,17 @@ interface Timestamped {
}
private volatile long millis;
-
+ private final Object owner;
private transient MetaBean cached;
- {
- touch();
+ /**
+ * Create a new Bean instance.
+ *
+ * @param owner
+ */
+ Bean(Object owner) {
+ super();
+ this.owner = owner;
}
/**
@@ -502,8 +522,8 @@ interface Timestamped {
* {@inheritDoc}
*/
public void touch() {
- Context.this.touch();
- this.millis = Context.this.millis;
+ Timestamped.Utils.touch(owner);
+ this.millis = Timestamped.Utils.read(owner);
}
/**
@@ -670,14 +690,17 @@ interface Timestamped {
*/
class AwareCollection extends MetaCollection {
private final AwareContainerHelper helper = new AwareContainerHelper();
+ private final Object owner;
/**
* Create a new AwareCollection instance.
*
* @param type
+ * @param owner
*/
- public AwareCollection(Type type) {
+ private AwareCollection(Type type, Object owner) {
super(type);
+ this.owner = owner;
}
/**
@@ -694,7 +717,7 @@ interface Timestamped {
*/
@Override
protected MetaBean createMetaBean() {
- return Context.this.new Bean();
+ return new Bean(owner);
}
}
@@ -704,14 +727,17 @@ interface Timestamped {
*/
class AwareMap extends MetaMap {
private final AwareContainerHelper helper = new AwareContainerHelper();
+ private final FeaturesCapable owner;
/**
* Create a new AwareMap instance.
*
* @param type
+ * @param owner
*/
- public AwareMap(Type type) {
+ private AwareMap(Type type, FeaturesCapable owner) {
super(type);
+ this.owner = owner;
}
/**
@@ -729,7 +755,7 @@ interface Timestamped {
*/
@Override
protected MetaBean createMetaBean() {
- return Context.this.new Bean();
+ return new Bean(owner);
}
}
@@ -788,5 +814,16 @@ interface Timestamped {
public static long read(Object o) {
return o instanceof Timestamped ? ((Timestamped) o).millis() : Long.MIN_VALUE;
}
+
+ /**
+ * Call {@link Timestamped#touch()} against a {@link Timestamped} argument.
+ *
+ * @param o
+ */
+ public static void touch(Object o) {
+ if (o instanceof Timestamped) {
+ ((Timestamped) o).touch();
+ }
+ }
}
}