001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.commons.betwixt; 018 019 import org.apache.commons.betwixt.expression.Expression; 020 import org.apache.commons.betwixt.expression.Updater; 021 022 /** <p>Describes a content node mapping.</p> 023 * Common superclass for types of <code>Descriptor</code></p> 024 * 025 * @author Robert Burrell Donkin 026 * @since 0.5 027 */ 028 public abstract class Descriptor { 029 030 /** the expression used to evaluate the text value of this node */ 031 private Expression textExpression; 032 /** the updater used to update the current bean from the text value of this node */ 033 private Updater updater; 034 /** The property expression to which this node refers to, or null if it is just a constant */ 035 private String propertyName; 036 /** the property type associated with this node, if any */ 037 private Class propertyType; 038 /** the singular property type (i.e. the type ignoring the Collection or Array */ 039 private Class singularPropertyType; 040 /** Options set for this Descriptor */ 041 private Options options = new Options(); 042 043 044 /** Base constructor */ 045 public Descriptor() { 046 } 047 048 /** 049 * Gets the expression used to evaluate the text value of this node 050 * for a particular <code>Context</code>. 051 * @return the expression used to evaluate the text value of this node 052 */ 053 public Expression getTextExpression() { 054 return textExpression; 055 } 056 057 /** 058 * Sets the expression used to evaluate the text value of this node 059 * for a particular <code>Context</code> 060 * @param textExpression the Expression to be used to evaluate the value of this node 061 */ 062 public void setTextExpression(Expression textExpression) { 063 this.textExpression = textExpression; 064 } 065 066 /** 067 * Gets the <code>Updater</code> used to update a <code>Context</code> from the text value 068 * corresponding to this node in an xml document 069 * @return the Update that should be used to update the value of this node 070 */ 071 public Updater getUpdater() { 072 return updater; 073 } 074 075 /** 076 * Sets the <code>Updater</code> used to update a <code>Context</code> from the text value 077 * corresponding to this node in an xml document 078 * @param updater the Updater to be used to update the values of this node 079 */ 080 public void setUpdater(Updater updater) { 081 this.updater = updater; 082 } 083 084 /** 085 * Gets the type of the bean property associated with this node, if any 086 * @return the property type associated with this node, if any 087 */ 088 public Class getPropertyType() { 089 return propertyType; 090 } 091 092 /** 093 * Sets the type of the bean property associated with this node, if any 094 * @param propertyType the Class of the bean property 095 */ 096 public void setPropertyType(Class propertyType) { 097 this.propertyType = propertyType; 098 } 099 100 101 /** 102 * Gets the name of the bean property to which this node refers 103 * @return the name of the bean property to which this node refers to, 104 * or null if it is just a constant 105 */ 106 public String getPropertyName() { 107 return propertyName; 108 } 109 110 /** 111 * Sets the name of the bean property to which this node refers 112 * @param propertyName the name of the bean property. 113 * Or null, if this node is not mapped to to a bean property 114 */ 115 public void setPropertyName(String propertyName) { 116 this.propertyName = propertyName; 117 } 118 119 /** 120 * Gets the underlying type ignoring any wrapping a Collection or Array. 121 * 122 * @return if this property is a 1-N relationship then this returns the type 123 * of a single property value. 124 */ 125 public Class getSingularPropertyType() { 126 if ( singularPropertyType == null ) { 127 return getPropertyType(); 128 } 129 return singularPropertyType; 130 } 131 132 /** 133 * Sets the underlying type ignoring any wrapping Collection or Array. 134 * 135 * @param singularPropertyType the Class of the items in the Collection or Array. 136 * If node is associated with a collective bean property, then this should not be null. 137 */ 138 public void setSingularPropertyType(Class singularPropertyType) { 139 this.singularPropertyType = singularPropertyType; 140 } 141 142 143 /** 144 * Gets the options for this descriptor. 145 * Options are used to communicate non-declarative 146 * (optinal) behaviour hints. 147 * @return <code>Options</code>, not null 148 */ 149 public Options getOptions() { 150 return options; 151 } 152 153 /** 154 * Sets the options for this descriptor. 155 * Options are used to communicate non-declarative 156 * (optinal) behaviour hints. 157 * @param options 158 */ 159 public void setOptions(Options options) { 160 this.options = options; 161 } 162 163 }