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 }