01: /*
02: * Copyright (c) 1998-2008 Caucho Technology -- all rights reserved
03: *
04: * This file is part of Resin(R) Open Source
05: *
06: * Each copy or derived work must preserve the copyright notice and this
07: * notice unmodified.
08: *
09: * Resin Open Source is free software; you can redistribute it and/or modify
10: * it under the terms of the GNU General Public License as published by
11: * the Free Software Foundation; either version 2 of the License, or
12: * (at your option) any later version.
13: *
14: * Resin Open Source is distributed in the hope that it will be useful,
15: * but WITHOUT ANY WARRANTY; without even the implied warranty of
16: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
17: * of NON-INFRINGEMENT. See the GNU General Public License for more
18: * details.
19: *
20: * You should have received a copy of the GNU General Public License
21: * along with Resin Open Source; if not, write to the
22: *
23: * Free Software Foundation, Inc.
24: * 59 Temple Place, Suite 330
25: * Boston, MA 02111-1307 USA
26: *
27: * @author Scott Ferguson;
28: */
29:
30: package com.caucho.config.program;
31:
32: import com.caucho.config.*;
33: import com.caucho.config.type.*;
34: import com.caucho.config.attribute.*;
35: import com.caucho.util.*;
36: import com.caucho.xml.*;
37:
38: /**
39: * A saved program for configuring an object.
40: */
41: public class PropertyStringProgram extends ConfigProgram {
42: private static final L10N L = new L10N(PropertyStringProgram.class);
43:
44: private final String _name;
45: private final QName _qName;
46: private final String _value;
47: private final boolean _isOptional;
48:
49: public PropertyStringProgram(String name, String value) {
50: this (name, value, false);
51: }
52:
53: public PropertyStringProgram(String name, String value,
54: boolean isOptional) {
55: _name = name;
56: _qName = new QName(name);
57: _value = value;
58: _isOptional = isOptional;
59: }
60:
61: /**
62: * Returns the injection name.
63: */
64: public String getName() {
65: return _name;
66: }
67:
68: //
69: // Inject API
70: //
71:
72: /**
73: * Injects the bean with the dependencies
74: */
75: @Override
76: public void inject(Object bean, ConfigContext env) {
77: try {
78: ConfigType type = TypeFactory.getType(bean.getClass());
79:
80: Attribute attr = type.getAttribute(_qName);
81:
82: if (attr != null)
83: attr.setValue(bean, _qName, attr.getConfigType()
84: .valueOf(_value));
85: else if (!_isOptional)
86: throw new ConfigException(L.l(
87: "'{0}' is an unknown property of '{1}'",
88: _qName, bean.getClass().getName()));
89: } catch (Exception e) {
90: throw ConfigException.create(e);
91: }
92: }
93:
94: public String toString() {
95: return getClass().getSimpleName() + "[" + _qName + "," + _value
96: + "]";
97: }
98: }
|