1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.javagen.agile.core.xml.jaxb;
17
18 import javax.xml.bind.JAXBContext;
19 import javax.xml.bind.JAXBException;
20
21 /***
22 * Provides a <code>JAXBContext</code> singleton with all registered serializable classes.
23 *
24 * @author Richard Easterling
25 */
26 public class ContextFactory {
27
28
29 private Class<?>[] classes = new Class[] {
30 org.javagen.agile.core.model.BasicModel.class,
31 org.javagen.agile.oo.model.Class.class,
32 org.javagen.agile.oo.model.Property.class,
33 org.javagen.agile.oo.model.Reference.class,
34 org.javagen.agile.db.model.Database.class,
35 org.javagen.agile.db.model.Table.class,
36 org.javagen.agile.db.model.Column.class,
37 org.javagen.agile.db.model.PkColumn.class,
38 org.javagen.agile.db.model.FkConstraint.class,
39 org.javagen.agile.db.model.ColumnReference.class,
40 };
41
42 private JAXBContext context;
43
44 public ContextFactory(Class<?>[] classes) {
45 this.setClasses(classes);
46 }
47
48 public ContextFactory(String[] classes) {
49 this(toClasses(classes));
50 }
51
52 public synchronized JAXBContext getContext() {
53 if (context==null)
54 try {
55 context = JAXBContext.newInstance(getClasses());
56 } catch (JAXBException jex) {
57 System.out.println("JAXB Binding Exception");
58 jex.printStackTrace();
59 throw new IllegalArgumentException(jex);
60 }
61 return context;
62 }
63
64 public Class<?>[] getClasses() {
65 return classes;
66 }
67
68 public void setClasses(Class<?>[] classes) {
69 this.classes = classes;
70 }
71
72 private static Class<?>[] toClasses(String[] classes) {
73 try {
74 Class<?>[] classArray = new Class[classes.length];
75 for(int i=0;i<classes.length;i++) {
76 String clazz = classes[i];
77 classArray[i] = Class.forName(clazz);
78 }
79 return classArray;
80 } catch (ClassNotFoundException e) {
81 throw new IllegalArgumentException(e);
82 }
83 }
84
85 }