1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski package stats;
24*b1cdbd2cSJim Jagielski 
25*b1cdbd2cSJim Jagielski import share.LogWriter;
26*b1cdbd2cSJim Jagielski import java.util.Hashtable;
27*b1cdbd2cSJim Jagielski import util.DynamicClassLoader;
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski /**
30*b1cdbd2cSJim Jagielski  * A factory class for creating out producers.
31*b1cdbd2cSJim Jagielski  */
32*b1cdbd2cSJim Jagielski public class OutProducerFactory {
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski     /**
35*b1cdbd2cSJim Jagielski      * Create an out producer. The type that is created depends on the
36*b1cdbd2cSJim Jagielski      * parameters given. These are:
37*b1cdbd2cSJim Jagielski      * <ul>
38*b1cdbd2cSJim Jagielski      *   <li>DataBaseOut - If set to true, a database outproducer is created.
39*b1cdbd2cSJim Jagielski      *   <li>OutProducer - The value of this parameter names the class that is created.
40*b1cdbd2cSJim Jagielski      * </ul>
41*b1cdbd2cSJim Jagielski      * @param param Parameters of the test.
42*b1cdbd2cSJim Jagielski      * @return The created out producer.
43*b1cdbd2cSJim Jagielski      */
createOutProducer(Hashtable param)44*b1cdbd2cSJim Jagielski     public static LogWriter createOutProducer(Hashtable param) {
45*b1cdbd2cSJim Jagielski         LogWriter dbOut = null;
46*b1cdbd2cSJim Jagielski         boolean getDatabase = convertToBool(param.get("DataBaseOut"));
47*b1cdbd2cSJim Jagielski         if (getDatabase) {
48*b1cdbd2cSJim Jagielski             dbOut = createDataBaseOutProducer(param);
49*b1cdbd2cSJim Jagielski         }
50*b1cdbd2cSJim Jagielski         if (dbOut == null) {
51*b1cdbd2cSJim Jagielski             DynamicClassLoader dcl = new DynamicClassLoader();
52*b1cdbd2cSJim Jagielski             String outProducerName = (String)param.get("OutProducer");
53*b1cdbd2cSJim Jagielski             if (outProducerName != null) {
54*b1cdbd2cSJim Jagielski                 try {
55*b1cdbd2cSJim Jagielski                     dbOut = (LogWriter)dcl.getInstance(outProducerName);
56*b1cdbd2cSJim Jagielski                 }
57*b1cdbd2cSJim Jagielski                 catch(IllegalArgumentException e) {
58*b1cdbd2cSJim Jagielski                     e.printStackTrace();
59*b1cdbd2cSJim Jagielski                 }
60*b1cdbd2cSJim Jagielski             }
61*b1cdbd2cSJim Jagielski         }
62*b1cdbd2cSJim Jagielski         if (dbOut == null) {
63*b1cdbd2cSJim Jagielski             dbOut = createSimpleOutProducer();
64*b1cdbd2cSJim Jagielski         }
65*b1cdbd2cSJim Jagielski         return dbOut;
66*b1cdbd2cSJim Jagielski     }
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski     /**
69*b1cdbd2cSJim Jagielski      * Create a databbase out producer.
70*b1cdbd2cSJim Jagielski      * @param The test parameters
71*b1cdbd2cSJim Jagielski      * @return The database out producer, or null if it couldn't be created.
72*b1cdbd2cSJim Jagielski      */
createDataBaseOutProducer(Hashtable param)73*b1cdbd2cSJim Jagielski     public static LogWriter createDataBaseOutProducer(Hashtable param) {
74*b1cdbd2cSJim Jagielski         String dataProducerName = (String)param.get("DataBaseOutProducer");
75*b1cdbd2cSJim Jagielski         if (dataProducerName == null) {
76*b1cdbd2cSJim Jagielski             String testBaseName = (String)param.get("TestBase");
77*b1cdbd2cSJim Jagielski             dataProducerName = testBaseName.substring(testBaseName.indexOf("_")+1);
78*b1cdbd2cSJim Jagielski             dataProducerName = "stats." + makeFirstCharUpperCase(dataProducerName)
79*b1cdbd2cSJim Jagielski                             + "DataBaseOutProducer";
80*b1cdbd2cSJim Jagielski         }
81*b1cdbd2cSJim Jagielski         DynamicClassLoader dcl = new DynamicClassLoader();
82*b1cdbd2cSJim Jagielski         LogWriter dbOut = null;
83*b1cdbd2cSJim Jagielski         try {
84*b1cdbd2cSJim Jagielski             dbOut = (LogWriter)dcl.getInstance(dataProducerName,
85*b1cdbd2cSJim Jagielski                 new Class[]{new Hashtable().getClass()}, new Object[]{param});
86*b1cdbd2cSJim Jagielski         }
87*b1cdbd2cSJim Jagielski         catch(IllegalArgumentException e) {
88*b1cdbd2cSJim Jagielski             e.printStackTrace();
89*b1cdbd2cSJim Jagielski         }
90*b1cdbd2cSJim Jagielski         return dbOut;
91*b1cdbd2cSJim Jagielski     }
92*b1cdbd2cSJim Jagielski 
93*b1cdbd2cSJim Jagielski     /**
94*b1cdbd2cSJim Jagielski      * As a fallback, create a simple out producer, if all else failed.
95*b1cdbd2cSJim Jagielski      * @return A simple out producer, writing to the screen.
96*b1cdbd2cSJim Jagielski      */
createSimpleOutProducer()97*b1cdbd2cSJim Jagielski     public static LogWriter createSimpleOutProducer() {
98*b1cdbd2cSJim Jagielski         return new SimpleOutProducer();
99*b1cdbd2cSJim Jagielski     }
100*b1cdbd2cSJim Jagielski 
convertToBool(Object val)101*b1cdbd2cSJim Jagielski     private static boolean convertToBool(Object val) {
102*b1cdbd2cSJim Jagielski         if(val != null) {
103*b1cdbd2cSJim Jagielski             if ( val instanceof String ) {
104*b1cdbd2cSJim Jagielski                 String sVal = (String)val;
105*b1cdbd2cSJim Jagielski                 if ( sVal.equalsIgnoreCase("true") || sVal.equalsIgnoreCase("yes") ) {
106*b1cdbd2cSJim Jagielski                     return true;
107*b1cdbd2cSJim Jagielski                 }
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski             }
110*b1cdbd2cSJim Jagielski             else if (val instanceof Boolean) {
111*b1cdbd2cSJim Jagielski                 return ((Boolean)val).booleanValue();
112*b1cdbd2cSJim Jagielski             }
113*b1cdbd2cSJim Jagielski         }
114*b1cdbd2cSJim Jagielski         return false;
115*b1cdbd2cSJim Jagielski     }
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski     /**
118*b1cdbd2cSJim Jagielski      * Make the first character to an upper case char.
119*b1cdbd2cSJim Jagielski      * @param name The String to change
120*b1cdbd2cSJim Jagielski      * @return The String with an upper case first char.
121*b1cdbd2cSJim Jagielski      */
makeFirstCharUpperCase(String name)122*b1cdbd2cSJim Jagielski     private static String makeFirstCharUpperCase(String name) {
123*b1cdbd2cSJim Jagielski         return name.substring(0,1).toUpperCase() + name.substring(1);
124*b1cdbd2cSJim Jagielski     }
125*b1cdbd2cSJim Jagielski 
126*b1cdbd2cSJim Jagielski /*    public static void main(String[] args) {
127*b1cdbd2cSJim Jagielski         Hashtable p = new Hashtable();
128*b1cdbd2cSJim Jagielski         p.put("DataBaseOut", "yes");
129*b1cdbd2cSJim Jagielski         p.put("TestBase", "java_complex");
130*b1cdbd2cSJim Jagielski         p.put("Version", "srx645gggg");
131*b1cdbd2cSJim Jagielski         createDataBaseOutProducer(p);
132*b1cdbd2cSJim Jagielski     } */
133*b1cdbd2cSJim Jagielski }
134