You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by th...@apache.org on 2014/12/21 20:56:51 UTC
[25/35] tapestry-5 git commit: First pass creating the BeanModel and
Commons packages. Lots of stuff moved around,
but no actual code changes so far
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/3d4de7e1/commons/src/main/java/org/apache/tapestry5/services/InvalidationListener.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/org/apache/tapestry5/services/InvalidationListener.java b/commons/src/main/java/org/apache/tapestry5/services/InvalidationListener.java
new file mode 100644
index 0000000..b9b4aa3
--- /dev/null
+++ b/commons/src/main/java/org/apache/tapestry5/services/InvalidationListener.java
@@ -0,0 +1,33 @@
+// Copyright 2006, 2007, 2012 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.services;
+
+/**
+ * Interface for objects that may cache information that can be invalidated. Invalidation occurs when external files,
+ * from which in-memory data is cached, is determined to have changed. Granularity is very limited; when any external
+ * file is found to have changed, the event is fired (with the expectation that the cleared cache will be repopulated as
+ * necessary).
+ *
+ * @see org.apache.tapestry5.services.InvalidationEventHub
+ * @since 5.1.0.0
+ * @deprecated In 5.4; use {@link InvalidationEventHub#addInvalidationCallback(Runnable)} instead
+ */
+public interface InvalidationListener
+{
+ /**
+ * Invoked to indicate that some object is invalid. The receiver should clear its cache.
+ */
+ void objectWasInvalidated();
+}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/3d4de7e1/settings.gradle
----------------------------------------------------------------------
diff --git a/settings.gradle b/settings.gradle
index 6397777..593c3a4 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -4,5 +4,5 @@ include "tapestry-beanvalidator", "tapestry-jpa", "tapestry-kaptcha"
include "tapestry-javadoc", "quickstart", "tapestry-clojure", "tapestry-mongodb"
include "tapestry-test-data", 'tapestry-internal-test', "tapestry-ioc-junit"
include "tapestry-webresources", "tapestry-runner", "tapestry-test-constants"
-include "tapestry-ioc-jcache"
+include "tapestry-ioc-jcache", "beanmodel", "commons"
// include "tapestry-cdi"
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/3d4de7e1/tapestry-core/build.gradle
----------------------------------------------------------------------
diff --git a/tapestry-core/build.gradle b/tapestry-core/build.gradle
index c16cd48..584200a 100644
--- a/tapestry-core/build.gradle
+++ b/tapestry-core/build.gradle
@@ -18,6 +18,7 @@ configurations {
dependencies {
compile project(':tapestry-ioc')
compile project(':tapestry-json')
+ compile project(':beanmodel')
provided project(":tapestry-test")
provided project(":tapestry-test-constants")
@@ -26,11 +27,6 @@ dependencies {
compile "commons-codec:commons-codec:1.5"
- // Transitive will bring in the unwanted string template library as well
- compile "org.antlr:antlr-runtime:3.5.2", {
- exclude group: "org.antlr", module: "stringtemplate"
- }
-
// Antlr3 tool path used with the antlr3 task
antlr3 "org.antlr:antlr:3.5.2"
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/3d4de7e1/tapestry-core/src/main/java/org/apache/tapestry5/PropertyConduit.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/PropertyConduit.java b/tapestry-core/src/main/java/org/apache/tapestry5/PropertyConduit.java
deleted file mode 100644
index 3dbb0c0..0000000
--- a/tapestry-core/src/main/java/org/apache/tapestry5/PropertyConduit.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2007 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry5;
-
-import org.apache.tapestry5.ioc.AnnotationProvider;
-
-/**
- * Used to read or update the value associated with a property. A PropertyConduit provides access to the annotations on
- * the underlying getter and/or setter methods.
- */
-public interface PropertyConduit extends AnnotationProvider
-{
- /**
- * Reads the property from the instance.
- *
- * @param instance object containing the property
- * @return the current value of the property
- */
- Object get(Object instance);
-
- /**
- * Changes the current value of the property.
- *
- * @param instance object containing the property
- * @param value to change the property to
- */
- void set(Object instance, Object value);
-
- /**
- * Returns the type of the property read or updated by the conduit.
- */
- Class getPropertyType();
-}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/3d4de7e1/tapestry-core/src/main/java/org/apache/tapestry5/PropertyConduit2.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/PropertyConduit2.java b/tapestry-core/src/main/java/org/apache/tapestry5/PropertyConduit2.java
deleted file mode 100644
index 839d70f..0000000
--- a/tapestry-core/src/main/java/org/apache/tapestry5/PropertyConduit2.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2007 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry5;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Type;
-
-import org.apache.tapestry5.services.PropertyConduitSource;
-
-
-/**
- * Extension to {@link PropertyConduit} that adds a method to access the generic property type.
- * {@link PropertyConduitSource} instances should ideally return PropertyConduit2 objects, not PropertyConduit.
- * This is only primarily of interest to {@link Binding2}.
- *
- * @since 5.4
- */
-public interface PropertyConduit2 extends PropertyConduit
-{
- /**
- * Returns the generic type of the property
- *
- * @see Method#getGenericReturnType()
- * @see java.lang.reflect.Field#getGenericType()
- *
- */
- Type getPropertyGenericType();
-}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/3d4de7e1/tapestry-core/src/main/java/org/apache/tapestry5/beaneditor/BeanModel.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/beaneditor/BeanModel.java b/tapestry-core/src/main/java/org/apache/tapestry5/beaneditor/BeanModel.java
deleted file mode 100644
index 0a60fd7..0000000
--- a/tapestry-core/src/main/java/org/apache/tapestry5/beaneditor/BeanModel.java
+++ /dev/null
@@ -1,169 +0,0 @@
-// Copyright 2007, 2008, 2009, 2010, 2011 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry5.beaneditor;
-
-import org.apache.tapestry5.PropertyConduit;
-
-import java.util.List;
-
-/**
- * Provides the information necessary to build a user interface to view, create or edit an instance of a particular
- * type.
- * <p/>
- * BeanModels are not thread-safe, they are also not serializable.
- * <p/>
- * Here, and in {@link org.apache.tapestry5.beaneditor.PropertyModel}, the term "propertyName" is used for simplicitly.
- * However, a full {@linkplain org.apache.tapestry5.services.PropertyConduitSource#create(Class, String) property
- * expression} may be utilized when {@linkplain #add(String) adding new properties to an existing BeanModel}.
- *
- * @see org.apache.tapestry5.services.BeanModelSource
- */
-public interface BeanModel<T>
-{
- /**
- * Returns the type of bean for which this model was initially created.
- */
- Class<T> getBeanType();
-
-
- /**
- * Creates a new bean instance. This is based on {@link org.apache.tapestry5.ioc.ObjectLocator#autobuild(Class)},
- * so a public constructor will be used, and dependencies injected.
- *
- * @return new instance of the bean
- */
- T newInstance();
-
- /**
- * Returns a list of the editable properties of the bean, in <em>presentation</em> order.
- */
- List<String> getPropertyNames();
-
- /**
- * Returns the named model.
- *
- * @param propertyName name of property to retrieve model for (case is ignored)
- * @return the model for the property
- * @throws RuntimeException if the bean editor model does not have a property model for the provided name
- */
- PropertyModel get(String propertyName);
-
- /**
- * Returns the identified model. Property ids are a stripped version of the property name. Case is ignored.
- *
- * @param propertyId matched caselessly against {@link org.apache.tapestry5.beaneditor.PropertyModel#getId()}
- * @throws RuntimeException if the bean editor model does not have a property model with the indicated id
- */
- PropertyModel getById(String propertyId);
-
- /**
- * Adds a new property to the model, returning its mutable model for further refinement. The property is added to
- * the <em>end</em> of the list of properties. The property must be real (but may have been excluded if there was no
- * {@linkplain org.apache.tapestry5.beaneditor.DataType datatype} associated with the property). To add a synthetic
- * property, use {@link #add(String, org.apache.tapestry5.PropertyConduit)}
- *
- * @param propertyName name of property to add
- * @return the new property model (for further configuration)
- * @throws RuntimeException if the property already exists
- */
- PropertyModel add(String propertyName);
-
-
- /**
- * Adds a new synthetic property to the model, returning its mutable model for further refinement. The property is added to
- * the <em>end</em> of the list of properties.
- *
- * @param propertyName name of property to add
- * @param expression expression for the property
- * @return the new property model (for further configuration)
- * @throws RuntimeException if the property already exists
- * @since 5.3
- */
- PropertyModel addExpression(String propertyName, String expression);
-
- /**
- * Adds an empty property (one with no property conduit).
- *
- * @param propertyName name of property to add
- * @return the new property model (for further configuration)
- * @throws RuntimeException if the property already exists
- * @since 5.3
- */
- PropertyModel addEmpty(String propertyName);
-
- /**
- * Adds a new property to the model (as with {@link #add(String)}), ordered before or after an existing property.
- *
- * @param position controls whether the new property is ordered before or after the existing property
- * @param existingPropertyName the name of an existing property (this must exist)
- * @param propertyName the new property to add
- * @return the new property model (for further configuration)
- * @throws RuntimeException if the existing property does not exist, or if the new property already does exist
- */
- PropertyModel add(RelativePosition position, String existingPropertyName, String propertyName);
-
- /**
- * Adds a new property to the model, ordered before or after an existing property.
- *
- * @param position controls whether the new property is ordered before or after the existing property
- * @param existingPropertyName the name of an existing property (this must exist)
- * @param propertyName the new property to add
- * @param conduit conduit used to read or update the property; this may be null for a synthetic or
- * placeholder property
- * @return the new property model (for further configuration)
- * @throws RuntimeException if the existing property does not exist, or if the new property already does exist
- */
- PropertyModel add(RelativePosition position, String existingPropertyName, String propertyName,
- PropertyConduit conduit);
-
- /**
- * Adds a new, synthetic property to the model, returning its mutable model for further refinement.
- *
- * @param propertyName name of property to add
- * @param conduit the conduit used to read or update the property; this may be null for a synthetic or
- * placeholder property. Instead of passing null, please invoke {@link #addEmpty(String)}.
- * @return the model for the property
- * @throws RuntimeException if the property already exists
- * @see #addExpression(String, String)
- */
- PropertyModel add(String propertyName, PropertyConduit conduit);
-
- /**
- * Removes the named properties from the model, if present. It is not considered an error to remove a property that
- * does not exist.
- *
- * @param propertyNames the names of properties to be removed (case insensitive)
- * @return the model for further modifications
- */
- BeanModel<T> exclude(String... propertyNames);
-
- /**
- * Re-orders the properties of the model into the specified order. Existing properties that are not indicated are
- * retained, but ordered to the end of the list.
- *
- * @param propertyNames property names in order they should be displayed (case insensitive)
- * @return the model for further modifications
- */
- BeanModel<T> reorder(String... propertyNames);
-
- /**
- * Re-orders the properties of the model into the specified order. Existing properties that are not indicated are
- * <<removed>>.
- *
- * @param propertyNames the names of properties to be retained
- * @return the model for further modifications
- */
- BeanModel<T> include(String... propertyNames);
-}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/3d4de7e1/tapestry-core/src/main/java/org/apache/tapestry5/beaneditor/PropertyModel.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/beaneditor/PropertyModel.java b/tapestry-core/src/main/java/org/apache/tapestry5/beaneditor/PropertyModel.java
deleted file mode 100644
index 6095fb9..0000000
--- a/tapestry-core/src/main/java/org/apache/tapestry5/beaneditor/PropertyModel.java
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2007, 2008 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry5.beaneditor;
-
-import org.apache.tapestry5.PropertyConduit;
-import org.apache.tapestry5.ioc.AnnotationProvider;
-
-/**
- * Part of a {@link org.apache.tapestry5.beaneditor.BeanModel} that defines the attributes of a single property of a
- * bean.
- * <p/>
- * <p/>
- * A PropertyModel is also an {@link AnnotationProvider}, as long as the {@link org.apache.tapestry5.PropertyConduit} is
- * non-null. When there is no property conduit, then {@link org.apache.tapestry5.ioc.AnnotationProvider#getAnnotation(Class)}
- * will return null.
- */
-public interface PropertyModel extends AnnotationProvider
-{
- /**
- * Returns the name of the property (which may, in fact, be a property expression).
- */
- String getPropertyName();
-
- /**
- * Returns the id used to access other resources (this is based on the property name, but with any excess
- * punctuation stripped out).
- */
- String getId();
-
- /**
- * Returns a user-presentable label for the property.
- */
- String getLabel();
-
- /**
- * Returns the type of the property.
- */
- Class getPropertyType();
-
- /**
- * Returns a logical name for the type of UI needed to view or edit the property. This is initially determined from
- * the property type.
- */
- String getDataType();
-
- /**
- * Changes the data type for the property.
- *
- * @param dataType
- * @return the property model, for further changes
- */
- PropertyModel dataType(String dataType);
-
- /**
- * Returns an object used to read or update the property. For virtual properties (properties that do not actually
- * exist on the bean), the conduit may be null.
- */
- PropertyConduit getConduit();
-
- /**
- * Changes the label for the property to the provided value.
- *
- * @param label new label for property
- * @return the property model, for further changes
- */
- PropertyModel label(String label);
-
- /**
- * Returns the containing model, often used for "fluent" construction of the model.
- */
- BeanModel model();
-
- /**
- * Returns true if the property can be used for sorting. By default, this is true only if the property type
- * implements Comparable.
- */
- boolean isSortable();
-
- /**
- * Updates sortable and returns the model for further changes.
- *
- * @return the property model, for further changes
- */
- PropertyModel sortable(boolean sortable);
-}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/3d4de7e1/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalPropertyConduit.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalPropertyConduit.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalPropertyConduit.java
deleted file mode 100644
index 315b372..0000000
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalPropertyConduit.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2010 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry5.internal;
-
-import org.apache.tapestry5.PropertyConduit2;
-
-
-/**
- * Extension to {@link org.apache.tapestry5.PropertyConduit2} that adds a method to determine the name of the property.
- *
- * @since 5.2.0
- *
- */
-public interface InternalPropertyConduit extends PropertyConduit2
-{
- /**
- * Returns the name of the property read or updated by the conduit or null.
- * If the expression points to a property on a bean (e.g. user.name) this method returns the last property in the chain.
- * Otherwise this method returns {@code null}.
- *
- * @return property name or {@code null}
- *
- */
- String getPropertyName();
-}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/3d4de7e1/tapestry-core/src/main/java/org/apache/tapestry5/internal/beaneditor/BeanModelImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/beaneditor/BeanModelImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/beaneditor/BeanModelImpl.java
deleted file mode 100644
index 26eb309..0000000
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/beaneditor/BeanModelImpl.java
+++ /dev/null
@@ -1,289 +0,0 @@
-// Copyright 2007, 2008, 2010, 2011 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry5.internal.beaneditor;
-
-import org.apache.tapestry5.PropertyConduit;
-import org.apache.tapestry5.beaneditor.BeanModel;
-import org.apache.tapestry5.beaneditor.PropertyModel;
-import org.apache.tapestry5.beaneditor.RelativePosition;
-import org.apache.tapestry5.internal.services.CoercingPropertyConduitWrapper;
-import org.apache.tapestry5.ioc.Messages;
-import org.apache.tapestry5.ioc.ObjectLocator;
-import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
-import org.apache.tapestry5.ioc.internal.util.InternalUtils;
-import org.apache.tapestry5.ioc.services.TypeCoercer;
-import org.apache.tapestry5.ioc.util.AvailableValues;
-import org.apache.tapestry5.ioc.util.UnknownValueException;
-import org.apache.tapestry5.plastic.PlasticUtils;
-import org.apache.tapestry5.services.PropertyConduitSource;
-
-import java.util.List;
-import java.util.Map;
-
-public class BeanModelImpl<T> implements BeanModel<T>
-{
- private final Class<T> beanType;
-
- private final PropertyConduitSource propertyConduitSource;
-
- private final TypeCoercer typeCoercer;
-
- private final Messages messages;
-
- private final ObjectLocator locator;
-
- private final Map<String, PropertyModel> properties = CollectionFactory.newCaseInsensitiveMap();
-
- // The list of property names, in desired order (generally not alphabetical order).
-
- private final List<String> propertyNames = CollectionFactory.newList();
-
- private static PropertyConduit NULL_PROPERTY_CONDUIT = null;
-
- public BeanModelImpl(Class<T> beanType, PropertyConduitSource propertyConduitSource, TypeCoercer typeCoercer,
- Messages messages, ObjectLocator locator)
-
- {
- this.beanType = beanType;
- this.propertyConduitSource = propertyConduitSource;
- this.typeCoercer = typeCoercer;
- this.messages = messages;
- this.locator = locator;
- }
-
- public Class<T> getBeanType()
- {
- return beanType;
- }
-
- public T newInstance()
- {
- return locator.autobuild("Instantiating new instance of " + beanType.getName(), beanType);
- }
-
- public PropertyModel add(String propertyName)
- {
- return addExpression(propertyName, propertyName);
- }
-
- public PropertyModel addEmpty(String propertyName)
- {
- return add(propertyName, NULL_PROPERTY_CONDUIT);
- }
-
- public PropertyModel addExpression(String propertyName, String expression)
- {
- PropertyConduit conduit = createConduit(expression);
-
- return add(propertyName, conduit);
-
- }
-
- private void validateNewPropertyName(String propertyName)
- {
- assert InternalUtils.isNonBlank(propertyName);
- if (properties.containsKey(propertyName))
- throw new RuntimeException(String.format(
- "Bean editor model for %s already contains a property model for property '%s'.",
- beanType.getName(), propertyName));
- }
-
- public PropertyModel add(RelativePosition position, String existingPropertyName, String propertyName,
- PropertyConduit conduit)
- {
- assert position != null;
- validateNewPropertyName(propertyName);
-
- // Locate the existing one.
-
- PropertyModel existing = get(existingPropertyName);
-
- // Use the case normalized property name.
-
- int pos = propertyNames.indexOf(existing.getPropertyName());
-
- PropertyModel newModel = new PropertyModelImpl(this, propertyName, conduit, messages);
-
- properties.put(propertyName, newModel);
-
- int offset = position == RelativePosition.AFTER ? 1 : 0;
-
- propertyNames.add(pos + offset, propertyName);
-
- return newModel;
- }
-
- public PropertyModel add(RelativePosition position, String existingPropertyName, String propertyName)
- {
- PropertyConduit conduit = createConduit(propertyName);
-
- return add(position, existingPropertyName, propertyName, conduit);
- }
-
- public PropertyModel add(String propertyName, PropertyConduit conduit)
- {
- validateNewPropertyName(propertyName);
-
- PropertyModel propertyModel = new PropertyModelImpl(this, propertyName, conduit, messages);
-
- properties.put(propertyName, propertyModel);
-
- // Remember the order in which the properties were added.
-
- propertyNames.add(propertyName);
-
- return propertyModel;
- }
-
- private CoercingPropertyConduitWrapper createConduit(String propertyName)
- {
- return new CoercingPropertyConduitWrapper(propertyConduitSource.create(beanType, propertyName), typeCoercer);
- }
-
- public PropertyModel get(String propertyName)
- {
- PropertyModel propertyModel = properties.get(propertyName);
-
- if (propertyModel == null)
- throw new UnknownValueException(String.format(
- "Bean editor model for %s does not contain a property named '%s'.", beanType.getName(),
- propertyName), new AvailableValues("Defined properties", propertyNames));
-
- return propertyModel;
- }
-
- public PropertyModel getById(String propertyId)
- {
- for (PropertyModel model : properties.values())
- {
- if (model.getId().equalsIgnoreCase(propertyId))
- return model;
- }
-
- // Not found, so we throw an exception. A bit of work to set
- // up the exception however.
-
- List<String> ids = CollectionFactory.newList();
-
- for (PropertyModel model : properties.values())
- {
- ids.add(model.getId());
- }
-
- throw new UnknownValueException(String.format(
- "Bean editor model for %s does not contain a property with id '%s'.", beanType.getName(), propertyId),
- new AvailableValues("Defined property ids", ids));
- }
-
- public List<String> getPropertyNames()
- {
- return CollectionFactory.newList(propertyNames);
- }
-
- public BeanModel<T> exclude(String... propertyNames)
- {
- for (String propertyName : propertyNames)
- {
- PropertyModel model = properties.get(propertyName);
-
- if (model == null)
- continue;
-
- // De-referencing from the model is needed because the name provided may not be a
- // case-exact match, so we get the normalized or canonical name from the model because
- // that's the one in propertyNames.
-
- this.propertyNames.remove(model.getPropertyName());
-
- properties.remove(propertyName);
- }
-
- return this;
- }
-
- public BeanModel<T> reorder(String... propertyNames)
- {
- List<String> remainingPropertyNames = CollectionFactory.newList(this.propertyNames);
- List<String> reorderedPropertyNames = CollectionFactory.newList();
-
- for (String name : propertyNames)
- {
- PropertyModel model = get(name);
-
- // Get the canonical form (which may differ from name in terms of case)
- String canonical = model.getPropertyName();
-
- reorderedPropertyNames.add(canonical);
-
- remainingPropertyNames.remove(canonical);
- }
-
- this.propertyNames.clear();
- this.propertyNames.addAll(reorderedPropertyNames);
-
- // Any unspecified names are ordered to the end. Don't want them? Remove them instead.
- this.propertyNames.addAll(remainingPropertyNames);
-
- return this;
- }
-
- public BeanModel<T> include(String... propertyNames)
- {
- List<String> reorderedPropertyNames = CollectionFactory.newList();
- Map<String, PropertyModel> reduced = CollectionFactory.newCaseInsensitiveMap();
-
- for (String name : propertyNames)
- {
-
- PropertyModel model = get(name);
-
- String canonical = model.getPropertyName();
-
- reorderedPropertyNames.add(canonical);
- reduced.put(canonical, model);
-
- }
-
- this.propertyNames.clear();
- this.propertyNames.addAll(reorderedPropertyNames);
-
- properties.clear();
- properties.putAll(reduced);
-
- return this;
- }
-
- @Override
- public String toString()
- {
- StringBuilder builder = new StringBuilder("BeanModel[");
- builder.append(PlasticUtils.toTypeName(beanType));
-
- builder.append(" properties:");
- String sep = "";
-
- for (String name : propertyNames)
- {
- builder.append(sep);
- builder.append(name);
-
- sep = ", ";
- }
-
- builder.append("]");
-
- return builder.toString();
- }
-}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/3d4de7e1/tapestry-core/src/main/java/org/apache/tapestry5/internal/beaneditor/PropertyModelImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/beaneditor/PropertyModelImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/beaneditor/PropertyModelImpl.java
deleted file mode 100644
index 703ce44..0000000
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/beaneditor/PropertyModelImpl.java
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright 2007, 2008, 2010, 2011, 2014 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry5.internal.beaneditor;
-
-import org.apache.tapestry5.PropertyConduit;
-import org.apache.tapestry5.beaneditor.BeanModel;
-import org.apache.tapestry5.beaneditor.PropertyModel;
-import org.apache.tapestry5.beaneditor.Sortable;
-import org.apache.tapestry5.internal.TapestryInternalUtils;
-import org.apache.tapestry5.ioc.Messages;
-import org.apache.tapestry5.ioc.internal.util.InternalUtils;
-import org.apache.tapestry5.plastic.PlasticUtils;
-
-import java.lang.annotation.Annotation;
-
-@SuppressWarnings("all")
-public class PropertyModelImpl implements PropertyModel
-{
- private final BeanModel model;
-
- private final String name;
-
- private final PropertyConduit conduit;
-
- private final String id;
-
- private String label;
-
- private String dataType;
-
- private boolean sortable;
-
- public PropertyModelImpl(BeanModel model, String name, PropertyConduit conduit, Messages messages)
- {
- this.model = model;
- this.name = name;
- this.conduit = conduit;
-
- id = TapestryInternalUtils.extractIdFromPropertyExpression(name);
-
- label = TapestryInternalUtils.defaultLabel(id, messages, name);
-
- // TAP5-2305
- if (conduit != null)
- {
- Sortable sortableAnnotation = conduit.getAnnotation(Sortable.class);
- if (sortableAnnotation != null)
- {
- sortable = sortableAnnotation.value();
- }
- else
- {
- // Primitive types need to be converted to wrapper types before checking to see
- // if they are sortable.
- Class wrapperType = PlasticUtils.toWrapperType(getPropertyType());
- sortable = Comparable.class.isAssignableFrom(wrapperType);
- }
- }
- }
-
- public String getId()
- {
- return id;
- }
-
- public Class getPropertyType()
- {
- return conduit == null ? Object.class : conduit.getPropertyType();
- }
-
- public PropertyConduit getConduit()
- {
- return conduit;
- }
-
- public PropertyModel label(String label)
- {
- assert InternalUtils.isNonBlank(label);
- this.label = label;
-
- return this;
- }
-
- public String getLabel()
- {
- return label;
- }
-
- public String getPropertyName()
- {
- return name;
- }
-
- public BeanModel model()
- {
- return model;
- }
-
- public PropertyModel dataType(String dataType)
- {
- this.dataType = dataType;
-
- return this;
- }
-
- public String getDataType()
- {
- return dataType;
- }
-
- public boolean isSortable()
- {
- return sortable;
- }
-
- public PropertyModel sortable(boolean sortable)
- {
- this.sortable = sortable;
-
- return this;
- }
-
- public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
- {
- return conduit == null ? null : conduit.getAnnotation(annotationClass);
- }
-}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/3d4de7e1/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CoercingPropertyConduitWrapper.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CoercingPropertyConduitWrapper.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CoercingPropertyConduitWrapper.java
deleted file mode 100644
index 4dbfb2d..0000000
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/CoercingPropertyConduitWrapper.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2007 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry5.internal.services;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-
-import org.apache.tapestry5.PropertyConduit;
-import org.apache.tapestry5.PropertyConduit2;
-import org.apache.tapestry5.ioc.services.TypeCoercer;
-
-public class CoercingPropertyConduitWrapper implements PropertyConduit2
-{
- private final PropertyConduit conduit;
-
- private final TypeCoercer coercer;
-
- public CoercingPropertyConduitWrapper(final PropertyConduit conduit, final TypeCoercer coercer)
- {
- this.conduit = conduit;
- this.coercer = coercer;
- }
-
- public Object get(Object instance)
- {
- return conduit.get(instance);
- }
-
- public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
- {
- return conduit.getAnnotation(annotationClass);
- }
-
- public Class getPropertyType()
- {
- return conduit.getPropertyType();
- }
-
- public Type getPropertyGenericType()
- {
- if (conduit instanceof PropertyConduit2) {
- return ((PropertyConduit2) conduit).getPropertyGenericType();
- }
- return conduit.getPropertyType();
- }
-
- @SuppressWarnings("unchecked")
- public void set(Object instance, Object value)
- {
- Object coerced = coercer.coerce(value, getPropertyType());
-
- conduit.set(instance, coerced);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/3d4de7e1/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitDelegate.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitDelegate.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitDelegate.java
deleted file mode 100644
index 1242031..0000000
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitDelegate.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2007, 2008, 2009, 2010, 2011 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry5.internal.services;
-
-import java.lang.annotation.Annotation;
-
-import org.apache.tapestry5.internal.InternalPropertyConduit;
-import org.apache.tapestry5.internal.util.IntegerRange;
-import org.apache.tapestry5.ioc.AnnotationProvider;
-import org.apache.tapestry5.ioc.internal.util.InternalUtils;
-import org.apache.tapestry5.ioc.services.TypeCoercer;
-
-/**
- * Companion class for {@link org.apache.tapestry5.PropertyConduit} instances created by the
- * {@link org.apache.tapestry5.services.PropertyConduitSource}.
- */
-@SuppressWarnings("all")
-public class PropertyConduitDelegate
-{
- private final TypeCoercer typeCoercer;
-
- public PropertyConduitDelegate(TypeCoercer typeCoercer)
- {
- this.typeCoercer = typeCoercer;
- }
-
- public final IntegerRange range(int from, int to)
- {
- return new IntegerRange(from, to);
- }
-
- public final <T> T coerce(Object value, Class<T> type)
- {
- return typeCoercer.coerce(value, type);
- }
-
- public final boolean invert(Object value)
- {
- return coerce(value, Boolean.class).equals(Boolean.FALSE);
- }
-}