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 6456 leinfelder
			throw new RuntimeException(e.getMessage(), e);
66 6395 leinfelder
		}
67
		return sm;
68
	}
69
70 6471 jones
	@Override
71 6395 leinfelder
	public Map<Identifier, SystemMetadata> loadAll(Collection<Identifier> keys) {
72 6426 leinfelder
		Map<Identifier, SystemMetadata> map = new HashMap<Identifier, SystemMetadata>();
73 6395 leinfelder
		for (Identifier key: keys) {
74
			SystemMetadata value = load(key);
75
			map.put(key, value);
76
		}
77
		return map;
78
	}
79
80 6471 jones
	@Override
81 6395 leinfelder
	public Set<Identifier> loadAllKeys() {
82 6426 leinfelder
		Set<Identifier> pids = new HashSet<Identifier>();
83 6395 leinfelder
		try {
84
			ObjectList ol = IdentifierManager.getInstance().querySystemMetadata(
85
					null, //startTime,
86
					null, //endTime,
87
					null, //objectFormatId,
88
					false, //replicaStatus,
89
					0, //start,
90
					-1 //count
91
					);
92
			for (ObjectInfo o: ol.getObjectInfoList()) {
93
				Identifier pid = o.getIdentifier();
94
				pids.add(pid);
95
			}
96 6456 leinfelder
		} catch (Exception e) {
97
			throw new RuntimeException(e.getMessage(), e);
98 6395 leinfelder
		}
99
100
		return pids;
101
	}
102
103
}