root / branches / v2_0_0_prep / libraries / libFMap_data / src / org / gvsig / fmap / data / ResourceManager.java @ 23178
History | View | Annotate | Download (2.27 KB)
1 | 21911 | jmvivo | package org.gvsig.fmap.data; |
---|---|---|---|
2 | 19399 | vcaballero | |
3 | 20580 | jmvivo | import java.security.KeyException; |
4 | import java.util.HashMap; |
||
5 | 20624 | jmvivo | import java.util.Iterator; |
6 | 20580 | jmvivo | import java.util.Map; |
7 | 19399 | vcaballero | |
8 | 23066 | jmvivo | import org.gvsig.tools.observer.DefaultObservable; |
9 | import org.gvsig.tools.observer.Observable; |
||
10 | import org.gvsig.tools.observer.Observer; |
||
11 | 19399 | vcaballero | |
12 | 20580 | jmvivo | |
13 | 21045 | jmvivo | public class ResourceManager implements Observable{ |
14 | 20580 | jmvivo | |
15 | 19399 | vcaballero | private static ResourceManager resourceManager = null; |
16 | |||
17 | 20580 | jmvivo | private Map resources = new HashMap(); |
18 | 19608 | jmvivo | |
19 | 21045 | jmvivo | private DefaultObservable observers = new DefaultObservable(); |
20 | 20580 | jmvivo | |
21 | 19399 | vcaballero | public static ResourceManager getResourceManager() { |
22 | if( resourceManager == null ) { |
||
23 | resourceManager = new ResourceManager();
|
||
24 | } |
||
25 | return resourceManager;
|
||
26 | } |
||
27 | 19608 | jmvivo | |
28 | 20624 | jmvivo | public synchronized Resource addResource(Resource resource) throws DataException { |
29 | 19399 | vcaballero | // Busca si el recurso no esta y de
|
30 | // ser asi lo aƱade.
|
||
31 | // En todo caso incrementa las referencias.
|
||
32 | 19608 | jmvivo | |
33 | 20580 | jmvivo | Resource res = (Resource)this.resources.get(resource.getKey());
|
34 | if (res == null){ |
||
35 | res = resource; |
||
36 | this.resources.put(res.getKey(), res);
|
||
37 | res.addObservers(this.observers);
|
||
38 | 23178 | vcaballero | res.prepare(); |
39 | 20580 | jmvivo | } |
40 | res.incref(); |
||
41 | |||
42 | return res;
|
||
43 | 19399 | vcaballero | } |
44 | 19608 | jmvivo | |
45 | 20624 | jmvivo | public synchronized void remove(Resource resource) throws KeyException, DataException { |
46 | 20580 | jmvivo | remove(resource.getKey()); |
47 | } |
||
48 | |||
49 | 20624 | jmvivo | public synchronized void remove(String key) throws KeyException, DataException { |
50 | Resource res = (Resource)this.resources.get(key);
|
||
51 | if (res == null){ |
||
52 | throw new KeyException(key); |
||
53 | } |
||
54 | res.unref(); |
||
55 | if (res.getRefencesCount() < 1){ |
||
56 | this.resources.remove(key);
|
||
57 | res.dispose(); |
||
58 | } |
||
59 | res = null;
|
||
60 | 19608 | jmvivo | |
61 | 19399 | vcaballero | } |
62 | |||
63 | 20580 | jmvivo | public Resource getResource(String key){ |
64 | return (Resource)this.resources.get(key); |
||
65 | } |
||
66 | 19608 | jmvivo | |
67 | 20624 | jmvivo | public Iterator iterator(){ |
68 | return this.resources.values().iterator(); |
||
69 | } |
||
70 | |||
71 | 20580 | jmvivo | /* (non-Javadoc)
|
72 | 21911 | jmvivo | * @see org.gvsig.fmap.data.IObservable#addObserver(org.gvsig.fmap.data.IObserver)
|
73 | 20580 | jmvivo | */
|
74 | 21045 | jmvivo | public void addObserver(Observer o) { |
75 | 20580 | jmvivo | this.observers.addObserver(o);
|
76 | 19608 | jmvivo | } |
77 | |||
78 | 20580 | jmvivo | /* (non-Javadoc)
|
79 | 21911 | jmvivo | * @see org.gvsig.fmap.data.IObservable#deleteObserver(org.gvsig.fmap.data.IObserver)
|
80 | 20580 | jmvivo | */
|
81 | 21045 | jmvivo | public void deleteObserver(Observer o) { |
82 | 20580 | jmvivo | this.observers.deleteObserver(o);
|
83 | } |
||
84 | |||
85 | /* (non-Javadoc)
|
||
86 | 21911 | jmvivo | * @see org.gvsig.fmap.data.IObservable#deleteObservers()
|
87 | 20580 | jmvivo | */
|
88 | public void deleteObservers() { |
||
89 | this.observers.deleteObservers();
|
||
90 | } |
||
91 | |||
92 | 19399 | vcaballero | } |