1 package br.com.ibnetwork.guara.pull.impl;
2
3 import org.apache.avalon.framework.configuration.Configuration;
4 import org.apache.avalon.framework.configuration.ConfigurationException;
5
6 import br.com.ibnetwork.xingu.factory.Factory;
7 import br.com.ibnetwork.guara.pull.ApplicationTool;
8 import br.com.ibnetwork.guara.pull.ApplicationToolHandler;
9 import br.com.ibnetwork.guara.pull.PullManager;
10 import br.com.ibnetwork.guara.rundata.RunData;
11
12 /***
13 * @author leandro
14 */
15 public class ApplicationToolHandlerImpl
16 implements ApplicationToolHandler
17 {
18 private String name;
19
20 private String scope;
21
22 private String className;
23
24 private Factory factory;
25
26 private Object instance;
27
28 private boolean useCache;
29
30 public ApplicationToolHandlerImpl(Configuration conf, Factory factory)
31 throws ConfigurationException
32 {
33 name = conf.getAttribute("name");
34 scope = conf.getAttribute("scope");
35 className = conf.getAttribute("className");
36 this.factory = factory;
37 useCache = PullManager.SCOPE_GLOBAL.equals(scope);
38 }
39
40 public String getScope()
41 {
42 return scope;
43 }
44
45 public String getName()
46 {
47 return name;
48 }
49
50
51 public Object newToolInstance()
52 throws Exception
53 {
54 return newToolInstance(null);
55 }
56
57 public Object newToolInstance(RunData data)
58 throws Exception
59 {
60 Object obj;
61 if(instance == null)
62 {
63 obj = factory.create(className);
64 }
65 else
66 {
67 obj = instance;
68 }
69 if(obj instanceof ApplicationTool)
70 {
71 ((ApplicationTool)obj).refresh(data);
72 }
73 if(useCache)
74 {
75 instance = obj;
76 }
77 return obj;
78 }
79 }