01: /*
02: * transformica 2
03: * Code generator
04: * Copyright (C) 2004 Hammurapi Group
05: *
06: * This program is free software; you can redistribute it and/or
07: * modify it under the terms of the GNU Lesser General Public
08: * License as published by the Free Software Foundation; either
09: * version 2 of the License, or (at your option) any later version.
10: *
11: * This program is distributed in the hope that it will be useful,
12: * but WITHOUT ANY WARRANTY; without even the implied warranty of
13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14: * Lesser General Public License for more details.
15: *
16: * You should have received a copy of the GNU Lesser General Public
17: * License along with this library; if not, write to the Free Software
18: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19: *
20: * URL: http://www.pavelvlasov.com/pv/content/menu.show@id=products.transformica.html
21: * e-Mail: support@hammurapi.biz
22: */
23: package biz.hammurapi.transformica.bnf;
24:
25: import biz.hammurapi.transformica.Channel;
26: import biz.hammurapi.transformica.TransformSession;
27: import biz.hammurapi.transformica.TransformicaException;
28: import biz.hammurapi.util.Acceptor;
29: import biz.hammurapi.util.CompositeAcceptor;
30:
31: /**
32: * Transformation channel. Matches Java languae elements by type.
33: * @ant.element name="channel"
34: * @author Pavel Vlasov
35: * @version $Revision: 1.1 $
36: */
37: public class BnfChannel extends Channel {
38:
39: private String type;
40:
41: /**
42: * @ant.ignore
43: * @return
44: */
45: public String getType() {
46: return type;
47: }
48:
49: /**
50: * BnfModel or RuleDefinition.
51: * @ant.non-required
52: * @param type
53: */
54: public void setType(String type) {
55: this .type = type;
56: }
57:
58: /**
59: * @param task
60: */
61: public BnfChannel(TransformSession session) {
62: super (session);
63: }
64:
65: private boolean compositeAcceptorConfigured = false;
66: private Class typeClass;
67:
68: public CompositeAcceptor getCompositeAcceptor() {
69: CompositeAcceptor ca = super .getCompositeAcceptor();
70: if (!compositeAcceptorConfigured) {
71: if (typeClass != null) {
72: ca.addAcceptor(new Acceptor() {
73: public boolean accept(Object element) {
74: return typeClass.isAssignableFrom(element
75: .getClass());
76: }
77: });
78: }
79: compositeAcceptorConfigured = true;
80: }
81: return ca;
82: }
83:
84: public void init() throws TransformicaException {
85: super .init();
86: if (type != null) {
87: try {
88: typeClass = Class.forName("org.mesopotamia.util."
89: + type);
90: } catch (ClassNotFoundException e) {
91: throw new TransformicaException(e);
92: }
93: }
94: }
95:
96: }
|