You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xbean-scm@geronimo.apache.org by db...@apache.org on 2007/05/31 05:53:45 UTC
svn commit: r543043 - in /geronimo/xbean/trunk/xbean-reflect/src:
main/java/org/apache/xbean/recipe/ test/java/org/apache/xbean/recipe/
Author: dblevins
Date: Wed May 30 20:53:44 2007
New Revision: 543043
URL: http://svn.apache.org/viewvc?view=rev&rev=543043
Log:
Support for private properties hidden by identically named child properties
Added:
geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/Child.java
geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/HiddenPropertiesTest.java
geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/Parent.java
Modified:
geronimo/xbean/trunk/xbean-reflect/src/main/java/org/apache/xbean/recipe/ObjectRecipe.java
Modified: geronimo/xbean/trunk/xbean-reflect/src/main/java/org/apache/xbean/recipe/ObjectRecipe.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-reflect/src/main/java/org/apache/xbean/recipe/ObjectRecipe.java?view=diff&rev=543043&r1=543042&r2=543043
==============================================================================
--- geronimo/xbean/trunk/xbean-reflect/src/main/java/org/apache/xbean/recipe/ObjectRecipe.java (original)
+++ geronimo/xbean/trunk/xbean-reflect/src/main/java/org/apache/xbean/recipe/ObjectRecipe.java Wed May 30 20:53:44 2007
@@ -593,6 +593,26 @@
if (propertyName == null) throw new NullPointerException("name is null");
if (propertyName.length() == 0) throw new IllegalArgumentException("name is an empty string");
+ if (propertyName.contains("/")){
+ String[] strings = propertyName.split("/");
+ if (strings == null || strings.length != 2) throw new IllegalArgumentException("badly formed <class>/<attribute> property name: " + propertyName);
+
+ String className = strings[0];
+ propertyName = strings[1];
+
+ boolean found = false;
+ while(!typeClass.equals(Object.class) && !found){
+ if (typeClass.getName().equals(className)){
+ found = true;
+ break;
+ } else {
+ typeClass = typeClass.getSuperclass();
+ }
+ }
+
+ if (!found) throw new MissingAccessorException("Type not assignable to class: " + className, -1);
+ }
+
String setterName = "set" + Character.toUpperCase(propertyName.charAt(0));
if (propertyName.length() > 0) {
setterName += propertyName.substring(1);
@@ -713,6 +733,26 @@
int matchLevel = 0;
MissingAccessorException missException = null;
+ if (propertyName.contains("/")){
+ String[] strings = propertyName.split("/");
+ if (strings == null || strings.length != 2) throw new IllegalArgumentException("badly formed <class>/<attribute> property name: " + propertyName);
+
+ String className = strings[0];
+ propertyName = strings[1];
+
+ boolean found = false;
+ while(!typeClass.equals(Object.class) && !found){
+ if (typeClass.getName().equals(className)){
+ found = true;
+ break;
+ } else {
+ typeClass = typeClass.getSuperclass();
+ }
+ }
+
+ if (!found) throw new MissingAccessorException("Type not assignable to class: " + className, -1);
+ }
+
List<Field> fields = new ArrayList<Field>(Arrays.asList(typeClass.getDeclaredFields()));
Class parent = typeClass.getSuperclass();
while (parent != null){
Added: geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/Child.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/Child.java?view=auto&rev=543043
==============================================================================
--- geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/Child.java (added)
+++ geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/Child.java Wed May 30 20:53:44 2007
@@ -0,0 +1,45 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.xbean.recipe;
+
+import java.net.URL;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class Child extends Parent {
+
+ private String childColor;
+ private String name;
+ private URL website;
+
+ public String getChildColor() {
+ return childColor;
+ }
+
+ public void setColor(String color) {
+ this.childColor = color;
+ }
+
+ public String getChildName() {
+ return name;
+ }
+
+ public URL getWebsite() {
+ return website;
+ }
+}
Added: geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/HiddenPropertiesTest.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/HiddenPropertiesTest.java?view=auto&rev=543043
==============================================================================
--- geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/HiddenPropertiesTest.java (added)
+++ geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/HiddenPropertiesTest.java Wed May 30 20:53:44 2007
@@ -0,0 +1,49 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.xbean.recipe;
+
+import junit.framework.TestCase;
+
+import java.net.URL;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class HiddenPropertiesTest extends TestCase {
+
+ public void test() throws Exception {
+ ObjectRecipe recipe = new ObjectRecipe(Child.class);
+ recipe.setProperty("age", 10);
+ recipe.setProperty("website", "http://foo.com");
+ recipe.setProperty(Child.class.getName()+"/name", "TheChild");
+ recipe.setProperty(Parent.class.getName()+"/name", "TheParent");
+ recipe.setProperty(Child.class.getName()+"/color", "Red");
+ recipe.setProperty(Parent.class.getName()+"/color", "Blue");
+
+ recipe.allow(Option.FIELD_INJECTION);
+ recipe.allow(Option.PRIVATE_PROPERTIES);
+
+ Child child = (Child) recipe.create();
+
+ assertEquals("Child.getChildName()", "TheChild", child.getChildName());
+ assertEquals("Child.getParentName()", "TheParent", child.getParentName());
+ assertEquals("Child.getChildColor()", "Red", child.getChildColor());
+ assertEquals("Child.getParentColor()", "Blue", child.getParentColor());
+ assertEquals("Child.getWebsite()", new URL("http://foo.com"), child.getWebsite());
+ assertEquals("Child.getAge()", 10, child.getAge());
+ }
+}
Added: geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/Parent.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/Parent.java?view=auto&rev=543043
==============================================================================
--- geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/Parent.java (added)
+++ geronimo/xbean/trunk/xbean-reflect/src/test/java/org/apache/xbean/recipe/Parent.java Wed May 30 20:53:44 2007
@@ -0,0 +1,43 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.xbean.recipe;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class Parent {
+
+ private String parentColor;
+ private String name;
+ private int age;
+
+ public String getParentColor() {
+ return parentColor;
+ }
+
+ private void setColor(String color) {
+ this.parentColor = color;
+ }
+
+ public String getParentName() {
+ return name;
+ }
+
+ public int getAge() {
+ return age;
+ }
+}