1 /*
2 * This file is a part of CAST project.
3 * (c) Copyright 2007, AGH University of Science & Technology
4 * https://caribou.iisg.agh.edu.pl/trac/cast
5 *
6 * Licensed under the Eclipse Public License, Version 1.0 (the "License").
7 * You may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 * http://www.eclipse.org/legal/epl-v10.html
10 */
11 /*
12 * File: TransparentPersistenceProvider.java
13 * Created: 2009-08-28
14 * Author: tmilos
15 * $Id$
16 */
17
18 package pl.edu.agh.cast.data.persistence;
19
20 import pl.edu.agh.cast.data.persistence.runtime.RuntimePersistenceProvider;
21
22 /**
23 * A persistence provider implementation which allows for transparent substitution of underlying actual provider.
24 *
25 * @author AGH CAST Team
26 */
27 public final class TransparentPersistenceProvider extends ObservablePersistenceProvider {
28
29 // BEGIN Constructors
30
31 /**
32 * Constructor.
33 */
34 public TransparentPersistenceProvider() {
35 super(new RuntimePersistenceProvider());
36 getProvider().initialize();
37 firePropertyChange(IObservablePersistenceProvider.Events.INITIALIZED_EVENT, getProvider(), null);
38 }
39
40 // END Constructors
41
42 // BEGIN Getters & Setters
43
44 /**
45 * Sets the actual persistence provider.
46 *
47 * <p>
48 * If the given provider is <code>null</code> then a new instance of {@link RuntimePersistenceProvider} is used.
49 *
50 * <p>
51 * If the new provider is different from the current one, the current one is destroyed and the new one is set and
52 * initialized. This results in two events being fired:
53 * <ul>
54 * <li>{@link IObservablePersistenceProvider.Events#DESTORYED_EVENT}</li>
55 * <li>{@link IObservablePersistenceProvider.Events#INITIALIZED_EVENT}</li>
56 * </ul>
57 *
58 * @param provider
59 * the new provider to set
60 */
61 public void setActualProvider(IPersistenceProvider provider) {
62 if (provider == null) {
63 provider = new RuntimePersistenceProvider();
64 }
65 if (getProvider() != provider) {
66 getProvider().destroy();
67 firePropertyChange(IObservablePersistenceProvider.Events.DESTORYED_EVENT, getProvider(), null);
68 setProvider(provider);
69 getProvider().initialize();
70 firePropertyChange(IObservablePersistenceProvider.Events.INITIALIZED_EVENT, getProvider(), null);
71 }
72 }
73
74 // BEGIN Getters & Setters
75
76 }