View Javadoc
1   package org.apache.commons.beanutils2.testbeans;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.io.Serializable;
23  import java.util.ArrayList;
24  import java.util.HashMap;
25  import java.util.List;
26  import java.util.Map;
27  
28  import org.apache.commons.lang3.builder.EqualsBuilder;
29  
30  /**
31   * General purpose test bean for JUnit tests for the "beanutils" component.
32   *
33   * @author Craig R. McClanahan
34   * @author Rodney Waldhoff
35   * @version $Revision: 1441782 $ $Date: 2013-02-02 19:10:33 +0100 (Sa, 02 Feb 2013) $
36   */
37  public class TestBean
38      implements Serializable
39  {
40  
41      /**
42       *
43       */
44      private static final long serialVersionUID = 1L;
45  
46      // ----------------------------------------------------------- Constructors
47  
48      public TestBean()
49      {
50          listIndexed.add( "String 0" );
51          listIndexed.add( "String 1" );
52          listIndexed.add( "String 2" );
53          listIndexed.add( "String 3" );
54          listIndexed.add( "String 4" );
55      }
56  
57      public TestBean( String stringProperty )
58      {
59          setStringProperty( stringProperty );
60      }
61  
62      public TestBean( float floatProperty )
63      {
64          setFloatProperty( floatProperty );
65      }
66  
67      public TestBean( boolean booleanProperty )
68      {
69          setBooleanProperty( booleanProperty );
70      }
71  
72      public TestBean( Boolean booleanSecond )
73      {
74          setBooleanSecond( booleanSecond.booleanValue() );
75      }
76  
77      public TestBean( float floatProperty, String stringProperty )
78      {
79          setFloatProperty( floatProperty );
80          setStringProperty( stringProperty );
81      }
82  
83      public TestBean( boolean booleanProperty, String stringProperty )
84      {
85          setBooleanProperty( booleanProperty );
86          setStringProperty( stringProperty );
87      }
88  
89      public TestBean( Boolean booleanSecond, String stringProperty )
90      {
91          setBooleanSecond( booleanSecond.booleanValue() );
92          setStringProperty( stringProperty );
93      }
94  
95      public TestBean( Integer intProperty )
96      {
97          setIntProperty( intProperty.intValue() );
98      }
99  
100     public TestBean( double doubleProperty )
101     {
102         setDoubleProperty( doubleProperty );
103     }
104 
105     TestBean( int intProperty )
106     {
107         setIntProperty( intProperty );
108     }
109 
110     protected TestBean( boolean booleanProperty, boolean booleanSecond, String stringProperty )
111     {
112         setBooleanProperty( booleanProperty );
113         setBooleanSecond( booleanSecond );
114         setStringProperty( stringProperty );
115     }
116 
117     public TestBean( List<String> listIndexed )
118     {
119         this.listIndexed = listIndexed;
120     }
121 
122     public TestBean( String[][] string2dArray )
123     {
124         this.string2dArray = string2dArray;
125     }
126 
127     // ------------------------------------------------------------- Properties
128 
129     /**
130      * A boolean property.
131      */
132     private boolean booleanProperty = true;
133 
134     public boolean getBooleanProperty()
135     {
136         return ( booleanProperty );
137     }
138 
139     public void setBooleanProperty( boolean booleanProperty )
140     {
141         this.booleanProperty = booleanProperty;
142     }
143 
144     /**
145      * A boolean property that uses an "is" method for the getter.
146      */
147     private boolean booleanSecond = true;
148 
149     public boolean isBooleanSecond()
150     {
151         return ( booleanSecond );
152     }
153 
154     public void setBooleanSecond( boolean booleanSecond )
155     {
156         this.booleanSecond = booleanSecond;
157     }
158 
159     /**
160      * A byte property.
161      */
162     private byte byteProperty = (byte) 121;
163 
164     public byte getByteProperty()
165     {
166         return ( this.byteProperty );
167     }
168 
169     public void setByteProperty( byte byteProperty )
170     {
171         this.byteProperty = byteProperty;
172     }
173 
174     /**
175      * A java.util.Date property.
176      */
177     private java.util.Date dateProperty;
178 
179     public java.util.Date getDateProperty()
180     {
181         return dateProperty;
182     }
183 
184     public void setDateProperty( java.util.Date dateProperty )
185     {
186         this.dateProperty = dateProperty;
187     }
188 
189     /**
190      * A java.util.Date property.
191      */
192     private java.util.Date[] dateArrayProperty;
193 
194     public java.util.Date[] getDateArrayProperty()
195     {
196         return dateArrayProperty;
197     }
198 
199     public void setDateArrayProperty( java.util.Date[] dateArrayProperty )
200     {
201         this.dateArrayProperty = dateArrayProperty;
202     }
203 
204     /**
205      * A double property.
206      */
207     private double doubleProperty = 321.0;
208 
209     public double getDoubleProperty()
210     {
211         return ( this.doubleProperty );
212     }
213 
214     public void setDoubleProperty( double doubleProperty )
215     {
216         this.doubleProperty = doubleProperty;
217     }
218 
219     /**
220      * An "indexed property" accessible via both array and subscript based getters and setters.
221      */
222     private String[] dupProperty = { "Dup 0", "Dup 1", "Dup 2", "Dup 3", "Dup 4" };
223 
224     public String[] getDupProperty()
225     {
226         return ( this.dupProperty );
227     }
228 
229     public String getDupProperty( int index )
230     {
231         return ( this.dupProperty[index] );
232     }
233 
234     public void setDupProperty( int index, String value )
235     {
236         this.dupProperty[index] = value;
237     }
238 
239     public void setDupProperty( String[] dupProperty )
240     {
241         this.dupProperty = dupProperty;
242     }
243 
244     /**
245      * A float property.
246      */
247     private float floatProperty = (float) 123.0;
248 
249     public float getFloatProperty()
250     {
251         return ( this.floatProperty );
252     }
253 
254     public void setFloatProperty( float floatProperty )
255     {
256         this.floatProperty = floatProperty;
257     }
258 
259     /**
260      * An integer array property accessed as an array.
261      */
262     private int intArray[] = { 0, 10, 20, 30, 40 };
263 
264     public int[] getIntArray()
265     {
266         return ( this.intArray );
267     }
268 
269     public void setIntArray( int[] intArray )
270     {
271         this.intArray = intArray;
272     }
273 
274     /**
275      * An integer array property accessed as an indexed property.
276      */
277     private final int intIndexed[] = { 0, 10, 20, 30, 40 };
278 
279     public int getIntIndexed( int index )
280     {
281         return ( intIndexed[index] );
282     }
283 
284     public void setIntIndexed( int index, int value )
285     {
286         intIndexed[index] = value;
287     }
288 
289     /**
290      * An integer property.
291      */
292     private int intProperty = 123;
293 
294     public int getIntProperty()
295     {
296         return ( this.intProperty );
297     }
298 
299     public void setIntProperty( int intProperty )
300     {
301         this.intProperty = intProperty;
302     }
303 
304     /**
305      * A List property accessed as an indexed property.
306      */
307     private List<String> listIndexed = new ArrayList<String>();
308 
309     public List<String> getListIndexed()
310     {
311         return ( listIndexed );
312     }
313 
314     /**
315      * A long property.
316      */
317     private long longProperty = 321;
318 
319     public long getLongProperty()
320     {
321         return ( this.longProperty );
322     }
323 
324     public void setLongProperty( long longProperty )
325     {
326         this.longProperty = longProperty;
327     }
328 
329     /**
330      * A mapped property with only a getter and setter for a Map.
331      */
332     private Map<String, Object> mapProperty = null;
333 
334     public Map<String, Object> getMapProperty()
335     {
336         // Create the map the very first time
337         if ( mapProperty == null )
338         {
339             mapProperty = new HashMap<String, Object>();
340             mapProperty.put( "First Key", "First Value" );
341             mapProperty.put( "Second Key", "Second Value" );
342         }
343         return ( mapProperty );
344     }
345 
346     public void setMapProperty( Map<String, Object> mapProperty )
347     {
348         // Create the map the very first time
349         if ( mapProperty == null )
350         {
351             mapProperty = new HashMap<String, Object>();
352             mapProperty.put( "First Key", "First Value" );
353             mapProperty.put( "Second Key", "Second Value" );
354         }
355         this.mapProperty = mapProperty;
356     }
357 
358     /**
359      * A mapped property that has String keys and Object values.
360      */
361     private Map<String, Object>mappedObjects = null;
362 
363     public Object getMappedObjects( String key )
364     {
365         // Create the map the very first time
366         if ( mappedObjects == null )
367         {
368             mappedObjects = new HashMap<String, Object>();
369             mappedObjects.put( "First Key", "First Value" );
370             mappedObjects.put( "Second Key", "Second Value" );
371         }
372         return ( mappedObjects.get( key ) );
373     }
374 
375     public void setMappedObjects( String key, Object value )
376     {
377         // Create the map the very first time
378         if ( mappedObjects == null )
379         {
380             mappedObjects = new HashMap<String, Object>();
381             mappedObjects.put( "First Key", "First Value" );
382             mappedObjects.put( "Second Key", "Second Value" );
383         }
384         mappedObjects.put( key, value );
385     }
386 
387     /**
388      * A mapped property that has String keys and String values.
389      */
390     private Map<String, Object>mappedProperty = null;
391 
392     public String getMappedProperty( String key )
393     {
394         // Create the map the very first time
395         if ( mappedProperty == null )
396         {
397             mappedProperty = new HashMap<String, Object>();
398             mappedProperty.put( "First Key", "First Value" );
399             mappedProperty.put( "Second Key", "Second Value" );
400         }
401         return ( (String) mappedProperty.get( key ) );
402     }
403 
404     public void setMappedProperty( String key, String value )
405     {
406         // Create the map the very first time
407         if ( mappedProperty == null )
408         {
409             mappedProperty = new HashMap<String, Object>();
410             mappedProperty.put( "First Key", "First Value" );
411             mappedProperty.put( "Second Key", "Second Value" );
412         }
413         mappedProperty.put( key, value );
414     }
415 
416     /**
417      * A mapped property that has String keys and int values.
418      */
419     private Map<String, Object>mappedIntProperty = null;
420 
421     public int getMappedIntProperty( String key )
422     {
423         // Create the map the very first time
424         if ( mappedIntProperty == null )
425         {
426             mappedIntProperty = new HashMap<String, Object>();
427             mappedIntProperty.put( "One", new Integer( 1 ) );
428             mappedIntProperty.put( "Two", new Integer( 2 ) );
429         }
430         Integer x = (Integer) mappedIntProperty.get( key );
431         return ( ( x == null ) ? 0 : x.intValue() );
432     }
433 
434     public void setMappedIntProperty( String key, int value )
435     {
436         mappedIntProperty.put( key, new Integer( value ) );
437     }
438 
439     /**
440      * A nested reference to another test bean (populated as needed).
441      */
442     private TestBean nested = null;
443 
444     public TestBean getNested()
445     {
446         if ( nested == null )
447             nested = new TestBean();
448         return ( nested );
449     }
450 
451     /**
452      * Another nested reference to another test bean,
453      */
454     private TestBean anotherNested = null;
455 
456     public TestBean getAnotherNested()
457     {
458         return anotherNested;
459     }
460 
461     public void setAnotherNested( TestBean anotherNested )
462     {
463         this.anotherNested = anotherNested;
464     }
465 
466     /*
467      * Another nested reference to a bean containing mapp properties
468      */
469     public class MappedTestBean
470     {
471         public void setValue( String key, String val )
472         {
473         }
474 
475         public String getValue( String key )
476         {
477             return "Mapped Value";
478         }
479     }
480 
481     private MappedTestBean mappedNested = null;
482 
483     public MappedTestBean getMappedNested()
484     {
485         if ( mappedNested == null )
486         {
487             mappedNested = new MappedTestBean();
488         }
489         return mappedNested;
490     }
491 
492     /**
493      * A String property with an initial value of null.
494      */
495     private String nullProperty = null;
496 
497     public String getNullProperty()
498     {
499         return ( this.nullProperty );
500     }
501 
502     public void setNullProperty( String nullProperty )
503     {
504         this.nullProperty = nullProperty;
505     }
506 
507     /**
508      * A read-only String property.
509      */
510     private final String readOnlyProperty = "Read Only String Property";
511 
512     public String getReadOnlyProperty()
513     {
514         return ( this.readOnlyProperty );
515     }
516 
517     /**
518      * A short property.
519      */
520     private short shortProperty = (short) 987;
521 
522     public short getShortProperty()
523     {
524         return ( this.shortProperty );
525     }
526 
527     public void setShortProperty( short shortProperty )
528     {
529         this.shortProperty = shortProperty;
530     }
531 
532     /**
533      * A String array property accessed as a String.
534      */
535     private String[] stringArray = { "String 0", "String 1", "String 2", "String 3", "String 4" };
536 
537     public String[] getStringArray()
538     {
539         return ( this.stringArray );
540     }
541 
542     public void setStringArray( String[] stringArray )
543     {
544         this.stringArray = stringArray;
545     }
546 
547     /**
548      * A String array property accessed as an indexed property.
549      */
550     private final String[] stringIndexed = { "String 0", "String 1", "String 2", "String 3", "String 4" };
551 
552     public String getStringIndexed( int index )
553     {
554         return ( stringIndexed[index] );
555     }
556 
557     public void setStringIndexed( int index, String value )
558     {
559         stringIndexed[index] = value;
560     }
561 
562     private String[][] string2dArray =
563         new String[][] { new String[] { "1", "2", "3" }, new String[] { "4", "5", "6" } };
564 
565     public String[] getString2dArray( int index )
566     {
567         return string2dArray[index];
568     }
569 
570     /**
571      * A String property.
572      */
573     private String stringProperty = "This is a string";
574 
575     public String getStringProperty()
576     {
577         return ( this.stringProperty );
578     }
579 
580     public void setStringProperty( String stringProperty )
581     {
582         this.stringProperty = stringProperty;
583     }
584 
585     /**
586      * A write-only String property.
587      */
588     private String writeOnlyProperty = "Write Only String Property";
589 
590     public String getWriteOnlyPropertyValue()
591     {
592         return ( this.writeOnlyProperty );
593     }
594 
595     public void setWriteOnlyProperty( String writeOnlyProperty )
596     {
597         this.writeOnlyProperty = writeOnlyProperty;
598     }
599 
600     // ------------------------------------------------------ Invalid Properties
601 
602     /**
603      * <p>
604      * An invalid property that has two boolean getters (getInvalidBoolean and isInvalidBoolean) plus a String setter
605      * (setInvalidBoolean). By the rules described in the JavaBeans Specification, this will be considered a read-only
606      * boolean property, using isInvalidBoolean() as the getter.
607      * </p>
608      */
609     private boolean invalidBoolean = false;
610 
611     public boolean getInvalidBoolean()
612     {
613         return ( this.invalidBoolean );
614     }
615 
616     public boolean isInvalidBoolean()
617     {
618         return ( this.invalidBoolean );
619     }
620 
621     public void setInvalidBoolean( String invalidBoolean )
622     {
623         if ( "true".equalsIgnoreCase( invalidBoolean ) || "yes".equalsIgnoreCase( invalidBoolean )
624             || "1".equalsIgnoreCase( invalidBoolean ) )
625         {
626             this.invalidBoolean = true;
627         }
628         else
629         {
630             this.invalidBoolean = false;
631         }
632     }
633 
634     /**
635      * {@inheritDoc}
636      */
637     @Override
638     public boolean equals( Object obj )
639     {
640         if ( obj == this )
641         {
642             return true;
643         }
644         if ( obj == null )
645         {
646             return false;
647         }
648         if ( !( obj instanceof TestBean ) )
649         {
650             return false;
651         }
652 
653         TestBean rhs = (TestBean) obj;
654         return new EqualsBuilder()
655                         .append( this.booleanProperty, rhs.booleanProperty )
656                         .append( this.booleanSecond,rhs.booleanSecond )
657                         .append( this.invalidBoolean,rhs.invalidBoolean )
658                         .append( this.byteProperty,rhs.byteProperty )
659                         .append( this.dateProperty,rhs.dateProperty )
660                         .append( this.doubleProperty,rhs.doubleProperty )
661                         .append( this.floatProperty,rhs.floatProperty )
662                         .append( this.intProperty,rhs.intProperty )
663                         .append( this.longProperty,rhs.longProperty )
664                         .append( this.shortProperty,rhs.shortProperty )
665                         .append( this.nullProperty,rhs.nullProperty )
666                         .append( this.anotherNested, rhs.anotherNested )
667                         .append( this.dateArrayProperty, rhs.dateArrayProperty )
668                         .append( this.dupProperty, rhs.dupProperty )
669                         .append( this.intArray, rhs.intArray )
670                         .append( this.intIndexed, rhs.intIndexed )
671                         .append( this.listIndexed, rhs.listIndexed )
672                         .append( this.mappedIntProperty, rhs.mappedIntProperty )
673                         .append( this.mappedNested, rhs.mappedNested )
674                         .append( this.mappedObjects, rhs.mappedObjects )
675                         .append( this.mappedProperty, rhs.mappedProperty )
676                         .append( this.mapProperty, rhs.mapProperty )
677                         .append( this.nested, rhs.nested )
678                         .append( this.readOnlyProperty, rhs.readOnlyProperty )
679                         .append( this.string2dArray, rhs.string2dArray )
680                         .append( this.stringArray, rhs.stringArray)
681                         .append( this.stringIndexed, rhs.stringIndexed )
682                         .append( this.stringProperty, rhs.stringProperty )
683                         .append( this.writeOnlyProperty, rhs.writeOnlyProperty )
684                         .build();
685     }
686 
687     // ------------------------------------------------------- Static Variables
688 
689     /**
690      * A static variable that is accessed and updated via static methods for MethodUtils testing.
691      */
692     private static int counter = 0;
693 
694     /**
695      * Return the current value of the counter.
696      */
697     public static int currentCounter()
698     {
699 
700         return ( counter );
701 
702     }
703 
704     /**
705      * Increment the current value of the counter by 1.
706      */
707     public static void incrementCounter()
708     {
709 
710         incrementCounter( 1 );
711 
712     }
713 
714     /**
715      * Increment the current value of the counter by the specified amount.
716      *
717      * @param amount Amount to be added to the current counter
718      */
719     public static void incrementCounter( int amount )
720     {
721 
722         counter += amount;
723 
724     }
725 
726     /**
727      * Increments the current value of the count by the specified amount * 2. It has the same name as the method above
728      * so as to test the looseness of getMethod.
729      */
730     public static void incrementCounter( Number amount )
731     {
732         counter += 2 * amount.intValue();
733     }
734 
735 }