001 package org.apache.fulcrum.intake.model;
002
003 /*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements. See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership. The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License. You may obtain a copy of the License at
011 *
012 * http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied. See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022 import org.apache.commons.lang.StringUtils;
023
024 import org.apache.fulcrum.intake.IntakeException;
025 import org.apache.fulcrum.intake.validator.StringValidator;
026 import org.apache.fulcrum.intake.xmlmodel.XmlField;
027
028 /**
029 * Text field.
030 *
031 * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
032 * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
033 * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
034 * @version $Id: StringField.java 535465 2007-05-05 06:58:06Z tv $
035 */
036 public class StringField
037 extends Field
038 {
039
040 /**
041 * Constructor.
042 *
043 * @param field xml field definition object
044 * @param group xml group definition object
045 * @throws IntakeException thrown by superclass
046 */
047 public StringField(XmlField field, Group group)
048 throws IntakeException
049 {
050 super(field, group);
051 }
052
053 /**
054 * Produces the fully qualified class name of the default validator.
055 *
056 * @return class name of the default validator
057 */
058 protected String getDefaultValidator()
059 {
060 return StringValidator.class.getName();
061 }
062
063 /**
064 * Sets the default value for a String field
065 *
066 * @param prop Parameter for the default values
067 */
068 public void setDefaultValue(String prop)
069 {
070 defaultValue = prop;
071 }
072
073 /**
074 * Set the empty Value. This value is used if Intake
075 * maps a field to a parameter returned by the user and
076 * the corresponding field is either empty (empty string)
077 * or non-existant.
078 *
079 * @param prop The value to use if the field is empty.
080 */
081 public void setEmptyValue(String prop)
082 {
083 emptyValue = prop;
084 }
085
086 /**
087 * Sets the value of the field from data in the parser.
088 */
089 protected void doSetValue()
090 {
091 if (isMultiValued)
092 {
093 String[] ss = parser.getStrings(getKey());
094 String[] sval = new String[ss.length];
095 for (int i = 0; i < ss.length; i++)
096 {
097 sval[i] = (StringUtils.isNotEmpty(ss[i])) ? ss[i] : (String) getEmptyValue();
098 }
099 setTestValue(sval);
100 }
101 else
102 {
103 String val = parser.getString(getKey());
104 setTestValue(StringUtils.isNotEmpty(val) ? val : (String) getEmptyValue());
105 }
106 }
107
108 /**
109 * Set the value of required.
110 *
111 * @param v Value to assign to required.
112 * @param message an error message
113 */
114 public void setRequired(boolean v, String message)
115 {
116 this.required = v;
117 if (v)
118 {
119 if (isMultiValued)
120 {
121 String[] ss = (String[]) getTestValue();
122 if (ss == null || ss.length == 0)
123 {
124 validFlag = false;
125 this.message = message;
126 }
127 else
128 {
129 boolean set = false;
130 for (int i = 0; i < ss.length; i++)
131 {
132 set |= StringUtils.isNotEmpty(ss[i]);
133 if (set)
134 {
135 break;
136 }
137 }
138 if (!set)
139 {
140 validFlag = false;
141 this.message = message;
142 }
143 }
144 }
145 else
146 {
147 if (!setFlag || StringUtils.isEmpty((String) getTestValue()))
148 {
149 validFlag = false;
150 this.message = message;
151 }
152 }
153 }
154 }
155 }