View Javadoc

1   /*
2    * Copyright 2006 Outsource Cafe, Inc.
3    *
4    * Licensed under the Apache License, Version 2.0 (the 'License')
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *    http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an 'AS IS' BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
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      //TODO JAXB registered classes should be externalized to avoid coupling between modules
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  }