Project

General

Profile

1 6395 leinfelder
package edu.ucsb.nceas.metacat.dataone.hazelcast;
2
3
import java.util.Collection;
4 6426 leinfelder
import java.util.HashMap;
5
import java.util.HashSet;
6 6395 leinfelder
import java.util.Map;
7
import java.util.Set;
8
9
import org.dataone.service.types.v1.Identifier;
10
import org.dataone.service.types.v1.ObjectInfo;
11
import org.dataone.service.types.v1.ObjectList;
12
import org.dataone.service.types.v1.SystemMetadata;
13
14
import com.hazelcast.core.MapLoader;
15
import com.hazelcast.core.MapStore;
16
17
import edu.ucsb.nceas.metacat.IdentifierManager;
18
import edu.ucsb.nceas.metacat.McdbDocNotFoundException;
19
20
/**
21
 * Storage implementation for Hazelcast System Metadata
22
 * @author leinfelder
23
 *
24
 */
25
public class SystemMetadataMap implements MapStore<Identifier, SystemMetadata>, MapLoader<Identifier, SystemMetadata> {
26
27 6471 jones
	@Override
28 6395 leinfelder
	public void delete(Identifier arg0) {
29
		// we do not delete system metadata
30
	}
31
32 6471 jones
	@Override
33 6395 leinfelder
	public void deleteAll(Collection<Identifier> arg0) {
34
		// we do not delete system metadata
35
	}
36
37 6471 jones
	@Override
38 6395 leinfelder
	public void store(Identifier pid, SystemMetadata sm) {
39
		try {
40 6434 leinfelder
			//System.out.println("Storing System Metadata to store: " + pid.getValue());
41 6451 leinfelder
			if (!IdentifierManager.getInstance().systemMetadataExists(pid.getValue())) {
42 6395 leinfelder
				IdentifierManager.getInstance().createSystemMetadata(sm);
43
			} else {
44
				IdentifierManager.getInstance().updateSystemMetadata(sm);
45
			}
46
		} catch (McdbDocNotFoundException e) {
47 6456 leinfelder
			throw new RuntimeException(e.getMessage(), e);
48 6395 leinfelder
		}
49
	}
50
51 6471 jones
	@Override
52 6395 leinfelder
	public void storeAll(Map<Identifier, SystemMetadata> map) {
53
		for (Identifier key: map.keySet()) {
54
			store(key, map.get(key));
55
		}
56
	}
57
58 6471 jones
	@Override
59 6395 leinfelder
	public SystemMetadata load(Identifier pid) {
60
		SystemMetadata sm = null;
61
		try {
62 6426 leinfelder
			System.out.println("loading from store: " + pid.getValue());
63 6395 leinfelder
			sm = IdentifierManager.getInstance().getSystemMetadata(pid.getValue());
64
		} catch (McdbDocNotFoundException e) {
65 6496 leinfelder
			//throw new RuntimeException(e.getMessage(), e);
66
			// not found => null
67
			return null;
68
		}
69
		catch (Exception e) {
70 6456 leinfelder
			throw new RuntimeException(e.getMessage(), e);
71 6395 leinfelder
		}
72
		return sm;
73
	}
74
75 6471 jones
	@Override
76 6395 leinfelder
	public Map<Identifier, SystemMetadata> loadAll(Collection<Identifier> keys) {
77 6426 leinfelder
		Map<Identifier, SystemMetadata> map = new HashMap<Identifier, SystemMetadata>();
78 6395 leinfelder
		for (Identifier key: keys) {
79
			SystemMetadata value = load(key);
80
			map.put(key, value);
81
		}
82
		return map;
83
	}
84
85 6471 jones
	@Override
86 6395 leinfelder
	public Set<Identifier> loadAllKeys() {
87 6426 leinfelder
		Set<Identifier> pids = new HashSet<Identifier>();
88 6395 leinfelder
		try {
89
			ObjectList ol = IdentifierManager.getInstance().querySystemMetadata(
90
					null, //startTime,
91
					null, //endTime,
92
					null, //objectFormatId,
93
					false, //replicaStatus,
94
					0, //start,
95
					-1 //count
96
					);
97
			for (ObjectInfo o: ol.getObjectInfoList()) {
98
				Identifier pid = o.getIdentifier();
99
				pids.add(pid);
100
			}
101 6456 leinfelder
		} catch (Exception e) {
102
			throw new RuntimeException(e.getMessage(), e);
103 6395 leinfelder
		}
104
105
		return pids;
106
	}
107
108
}