View Javadoc

1   package org.apache.maven.surefire.booter;
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.ByteArrayInputStream;
23  import java.io.File;
24  import java.util.Properties;
25  import org.apache.maven.surefire.util.NestedRuntimeException;
26  import org.apache.maven.surefire.util.ReflectionUtils;
27  
28  /**
29   * @author Kristian Rosenvold
30   */
31  public class TypeEncodedValue
32  {
33      String type;
34  
35      String value;
36  
37      public TypeEncodedValue( String type, String value )
38      {
39          this.type = type;
40          this.value = value;
41      }
42  
43      public boolean isTypeClass()
44      {
45          return Class.class.getName().equals( type );
46      }
47  
48      public Object getDecodedValue()
49      {
50          return getDecodedValue( Thread.currentThread().getContextClassLoader() );
51      }
52  
53      public Object getDecodedValue( ClassLoader classLoader )
54      {
55          if ( type.trim().length() == 0 )
56          {
57              return null;
58          }
59          else if ( type.equals( String.class.getName() ) )
60          {
61              return value;
62          }
63          else if ( isTypeClass() )
64          {
65              return ReflectionUtils.loadClass( classLoader, value );
66          }
67          else if ( type.equals( File.class.getName() ) )
68          {
69              return new File( value );
70          }
71          else if ( type.equals( Boolean.class.getName() ) )
72          {
73              return Boolean.valueOf( value );
74          }
75          else if ( type.equals( Integer.class.getName() ) )
76          {
77              return Integer.valueOf( value );
78          }
79          else if ( type.equals( Properties.class.getName() ) )
80          {
81              final Properties result = new Properties();
82              try
83              {
84                  ByteArrayInputStream bais = new ByteArrayInputStream( value.getBytes( "8859_1" ) );
85                  result.load( bais );
86              }
87              catch ( Exception e )
88              {
89                  throw new NestedRuntimeException( "bug in property conversion", e );
90              }
91              return result;
92          }
93          else
94          {
95              throw new IllegalArgumentException( "Unknown parameter type: " + type );
96          }
97      }
98  
99      public boolean equals( Object o )
100     {
101         if ( this == o )
102         {
103             return true;
104         }
105         if ( o == null || getClass() != o.getClass() )
106         {
107             return false;
108         }
109 
110         TypeEncodedValue that = (TypeEncodedValue) o;
111 
112         if ( type != null ? !type.equals( that.type ) : that.type != null )
113         {
114             return false;
115         }
116         return !( value != null ? !value.equals( that.value ) : that.value != null );
117 
118     }
119 
120     public int hashCode()
121     {
122         int result = type != null ? type.hashCode() : 0;
123         result = 31 * result + ( value != null ? value.hashCode() : 0 );
124         return result;
125     }
126 }