Project

General

Profile

Download (3.79 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2009 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/ 
9

    
10
package eu.etaxonomy.cdm.io.common;
11

    
12
import java.util.HashMap;
13
import java.util.HashSet;
14
import java.util.Map;
15
import java.util.Collection;
16
import java.util.Set;
17
import java.util.UUID;
18

    
19

    
20
import org.apache.log4j.Logger;
21

    
22
import eu.etaxonomy.cdm.api.service.IService;
23
import eu.etaxonomy.cdm.model.common.CdmBase;
24

    
25
/**
26
 * @author a.mueller
27
 *
28
 */
29
public class MapWrapper<T extends CdmBase> {
30
	private static Logger logger = Logger.getLogger(MapWrapper.class);
31

    
32
	private Map internalMap;
33
	private IService<CdmBase> service = null; 
34
	
35
	public MapWrapper(IService<CdmBase> service){
36
		makeNewMap(service);
37
	}
38
	
39
	public void put(Object id, T cdmBase){
40
		if (service != null){
41
			throw new RuntimeException();
42
		}else{
43
			internalMap.put(id, cdmBase);
44
		}
45
	}
46

    
47
	public void put(Object id, UUID uuid){
48
		if (service == null){
49
			throw new RuntimeException();
50
		}else{
51
			//TODO
52
			//service.save(cdmBase);
53
			internalMap.put(id, uuid);
54
		}
55
	}
56
	
57
	public T get(Object id){
58
		T result;
59
		if (service == null){
60
			result = (T)internalMap.get(id);
61
		}else{
62
			result = getObjectFromService(id);
63
		}
64
		return result;
65
	}
66
	
67
	/**
68
	 * Returns all values that are either stored in the wrapper or the database.
69
	 * If <code>service</code> is null then only the elements stored in the wrapper are returned. 
70
	 * @return
71
	 */
72
	public Set<T> getAllValues(){
73
		Set<T> result = new HashSet<T>();
74
		if (service == null){
75
			result.addAll(internalMap.values());
76
		}else{
77
			result.addAll(internalMap.values());
78
			logger.warn("getAll not yet implemented !!");
79
			//TODO Set<T> persitentAll = service.getAll();
80
			//result.addAll(persistentALl);
81
		}
82
		return result;
83
	}
84
	
85
	public boolean containsId(Object id){
86
		return internalMap.containsKey(id);
87
	}
88
	
89
	public Collection<T> objects(){
90
		//TODO from service
91
		return (Collection<T>)internalMap.values();
92
	}
93
	
94
	private T getObjectFromService(Object id){
95
		if (service == null){
96
			throw new RuntimeException("no service defined");
97
		}else{
98
			T result = null;
99
			UUID uuid = (UUID)internalMap.get(id);
100
			if (uuid == null){
101
				result = null;
102
			}else{
103
				//logger.warn(uuid);
104
				//TODO
105
				//result  = (T)service.getObjectUuid(uuid); //.getCdmObjectByUuid(uuid);//  taxonService.getTaxonByUuid(taxonUuid);
106
			}
107
			return result;
108
		}
109
	}
110
	
111
	public boolean makeEmpty(){
112
		return makeNewMap(service);
113
	}
114
	
115
	public boolean makeNewMap(IService<CdmBase> service){
116
			if (service == null){
117
				internalMap = new HashMap<Integer, CdmBase>();
118
			}else{
119
				this.service = service;
120
				internalMap =  new HashMap<Integer, UUID>();
121
			}
122
			return true;
123
	}
124
	
125
	public int size() {
126
		return internalMap.size();
127
	}
128
	
129
	public Collection<T> objects(int start, int limit) {
130
		
131
		Map internalPartMap = new HashMap<Integer, CdmBase>();
132
		int index = 0;
133
		
134
		for (int i = 0; i < limit; i++) {
135
			
136
			int j = start + i;
137
			
138
			Object object = internalMap.get(j);
139
			if(object != null) {
140
				internalPartMap.put(index, internalMap.get(j));
141
				index++;
142
			} else {
143
				if (logger.isDebugEnabled()) { logger.debug("Object (" + j + ") is null"); }
144
			}
145
		}
146
		return (Collection<T>)internalPartMap.values();
147
	}
148
	
149
		
150
	public Collection<T> removeObjects(int start, int limit) {
151
		
152
		for (int i = start; i < start + limit; i++) {
153
			internalMap.remove(i);
154
			if (logger.isDebugEnabled()) { logger.debug("Object (" + i + ") removed"); }
155
		}
156
		return (Collection<T>)internalMap.values();
157
	}
158

    
159
	
160
	public Set<Object> keySet() {
161
		return internalMap.keySet();
162
	}
163
	
164
}
(37-37/48)