1
|
|
/*
|
2
|
|
* JBind
|
3
|
|
*
|
4
|
|
* Copyright (c) by Stefan Wachter. All rights reserved.
|
5
|
|
*
|
6
|
|
* Usage, modification, and redistribution is subject to license terms that are
|
7
|
|
* available at 'http://www.jbind.org'. The JBind license is like the
|
8
|
|
* 'Apache Software License V 1.1'.
|
9
|
|
*/
|
10
|
|
package org.jbind.xml.schema.compiler;
|
11
|
|
|
12
|
|
import java.util.HashMap;
|
13
|
|
import java.util.Iterator;
|
14
|
|
import java.util.Map;
|
15
|
|
|
16
|
|
import org.jbind.base.Console;
|
17
|
|
import org.jbind.xml.Config;
|
18
|
|
import org.jbind.xml.base.INamespaces;
|
19
|
|
import org.jbind.xml.base.ISymbolspaces;
|
20
|
|
import org.jbind.xml.core.cmp.IBinding;
|
21
|
|
import org.jbind.xml.core.cmp.ISchema;
|
22
|
|
import org.jbind.xml.core.type.IAnyType;
|
23
|
|
import org.jbind.xml.schema.cmp.Schemas;
|
24
|
|
|
25
|
|
public class CartridgeMgr implements ICartridgeMgr {
|
26
|
|
|
27
|
|
public static final ICartridgeMgr instance = new CartridgeMgr();
|
28
|
|
|
29
|
|
static {
|
30
|
3
|
((CartridgeMgr)instance).init();
|
31
|
|
}
|
32
|
|
|
33
|
|
private Map myCartridges = new HashMap();
|
34
|
|
private ICartridge myDataInterfaceCartridge = null;
|
35
|
|
private ICartridge myDataClassCartridge = null;
|
36
|
|
|
37
|
3
|
private CartridgeMgr() {
|
38
|
3
|
String[] cartridgeNames = null;
|
39
|
3
|
try {
|
40
|
3
|
cartridgeNames = Config.instance.getCartridgeClasses();
|
41
|
|
} catch (Exception e) {
|
42
|
0
|
e.printStackTrace();
|
43
|
0
|
Console.err("preferences not available - using default");
|
44
|
|
}
|
45
|
|
|
46
|
3
|
if ((cartridgeNames == null) || (cartridgeNames.length == 0)) {
|
47
|
0
|
cartridgeNames = new String[]{ DataClassCartridge.class.getName(),
|
48
|
|
DataInterfaceCartridge.class.getName(),
|
49
|
|
BehaviourClassCartridge.class.getName(),
|
50
|
|
BehaviourInterfaceCartridge.class.getName() };
|
51
|
|
}
|
52
|
3
|
boolean ok = true;
|
53
|
3
|
for (int i = 0; i < cartridgeNames.length; i++) {
|
54
|
12
|
try {
|
55
|
12
|
Class clazz = Class.forName(cartridgeNames[i]);
|
56
|
12
|
ICartridge cartridge = (ICartridge)clazz.newInstance();
|
57
|
12
|
cartridge.setCartridgeNo(i);
|
58
|
12
|
myCartridges.put(cartridgeNames[i], cartridge);
|
59
|
|
// Console.out.println("loaded cartridge: " + cartridge);
|
60
|
12
|
if (clazz.equals(DataInterfaceCartridge.class)) {
|
61
|
3
|
myDataInterfaceCartridge = cartridge;
|
62
|
9
|
} else if (clazz.equals(DataClassCartridge.class)) {
|
63
|
3
|
myDataClassCartridge = cartridge;
|
64
|
|
}
|
65
|
|
|
66
|
|
} catch (Exception e) {
|
67
|
0
|
Console.err("could not load cartridge: " + cartridgeNames[i]);
|
68
|
0
|
ok = false;
|
69
|
|
}
|
70
|
|
}
|
71
|
3
|
if (!ok) {
|
72
|
0
|
Console.err("Configure the cartridges with the configuation tool: java " + Config.class.getName());
|
73
|
0
|
System.exit(-1);
|
74
|
|
}
|
75
|
|
}
|
76
|
|
|
77
|
3
|
private void init() {
|
78
|
3
|
for (Iterator i = iterCartridges(); i.hasNext(); ) {
|
79
|
12
|
ICartridge c = (ICartridge)i.next();
|
80
|
12
|
c.initCartridge(this);
|
81
|
|
}
|
82
|
3
|
ISchema w3cSchema = Schemas.getInstance().getSchema(INamespaces.XML_SCHEMA);
|
83
|
3
|
for (Iterator i = w3cSchema.iterComponents(ISymbolspaces.TYPE);
|
84
|
144
|
i.hasNext(); ) {
|
85
|
141
|
IAnyType type = (IAnyType)i.next();
|
86
|
141
|
IBinding[] bindings = new IBinding[CartridgeMgr.instance.getNbCartridges()];
|
87
|
141
|
for (Iterator j = iterCartridges(); j.hasNext(); ) {
|
88
|
564
|
ICartridge cartridge = (ICartridge)j.next();
|
89
|
564
|
IBinding b = cartridge.createBuiltInBinding(type);
|
90
|
564
|
bindings[cartridge.getCartridgeNo()] = b;
|
91
|
|
}
|
92
|
141
|
type.setBindings(bindings);
|
93
|
|
}
|
94
|
|
}
|
95
|
|
|
96
|
48
|
public ICartridge getCartridge(Class aClass) {
|
97
|
48
|
return (ICartridge)myCartridges.get(aClass.getName());
|
98
|
|
}
|
99
|
|
|
100
|
3521
|
public Iterator iterCartridges() {
|
101
|
3521
|
return myCartridges.values().iterator();
|
102
|
|
}
|
103
|
|
|
104
|
3413
|
public int getNbCartridges() {
|
105
|
3413
|
return myCartridges.size();
|
106
|
|
}
|
107
|
68
|
public ICartridge getDataInterfaceCartridge() {
|
108
|
68
|
return myDataInterfaceCartridge;
|
109
|
|
}
|
110
|
0
|
public ICartridge getDataClassCartridge() {
|
111
|
0
|
return myDataClassCartridge;
|
112
|
|
}
|
113
|
|
|
114
|
|
}
|
115
|
|
|