View Javadoc

1   package org.molwind.chemical.view;
2   
3   /*
4    * This file is part of Molwind.
5    *
6    * Molwind is free software: you can redistribute it and/or modify
7    * it under the terms of the GNU General Public License as published by
8    * the Free Software Foundation, either version 3 of the License, or
9    * (at your option) any later version.
10   *
11   * Molwind 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
14   * GNU General Public License for more details.
15   *
16   * You should have received a copy of the GNU General Public License
17   * along with Molwind. If not, see <http://www.gnu.org/licenses/>.
18   */
19  
20  import java.util.HashMap;
21  
22  /**
23   * MoleculeRendererFactory is a factory to produce default instances of a
24   * molecule rendering strategy.
25   *
26   * @author <a href="mailto:oliver.karch@molwind.org">Oliver Karch</a>
27   * @version 1.0
28   */
29  public class MoleculeRendererFactory {
30  
31      private HashMap renderers;
32  
33      private static MoleculeRendererFactory factory;
34  
35      private MoleculeRendererFactory() {
36          renderers = new HashMap();
37      }
38  
39      private static synchronized void init() {
40          if (factory == null) {
41              factory = new MoleculeRendererFactory();
42              MoleculeRendererFactory.registerRenderer(
43                      null, new SubstructureRenderer());
44          }
45      }
46  
47      /**
48       * Returns the renderer factory instance.
49       *
50       * @return
51       *      the renderer factory instance
52       */
53      public static MoleculeRendererFactory getInstance() {
54          init();
55          return factory;
56      }
57  
58      /**
59       * Returns the default molecule renderer.
60       *
61       * @param rendererName
62       *      the renderer's name
63       * @return
64       *      the renderer or null if not found
65       */
66      public static MoleculeRenderer getRenderer(final String rendererName) {
67          init();
68          return (MoleculeRenderer) factory.get(rendererName);
69      }
70  
71      /**
72       * Returns the default molecule renderer.
73       *
74       * @return
75       *      the default renderer
76       */
77      public static MoleculeRenderer getRenderer() {
78          return getRenderer("");
79      }
80  
81      /**
82       * Registers a named molecule renderer.
83       *
84       * @param rendererName
85       *      the renderer's name
86       * @param moleculeRenderer
87       *      the molecule renderer
88       */
89      public static void registerRenderer(final String rendererName,
90              final MoleculeRenderer moleculeRenderer) {
91          init();
92          if (rendererName == null) {
93              factory.putRenderer("", moleculeRenderer);
94          } else {
95              factory.putRenderer(rendererName, moleculeRenderer);
96          }
97      }
98  
99      private MoleculeRenderer get(final String rendererName) {
100         return (MoleculeRenderer) renderers.get(rendererName);
101     }
102 
103     private void putRenderer(final String rendererName,
104             final MoleculeRenderer moleculeRenderer) {
105         renderers.put(rendererName, moleculeRenderer);
106     }
107 
108 }