Project

General

Profile

1
package edu.ucsb.nceas.metacat.dataone.hazelcast;
2

    
3
import java.util.Collection;
4
import java.util.HashMap;
5
import java.util.HashSet;
6
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
	public void delete(Identifier arg0) {
28
		// we do not delete system metadata
29
	}
30

    
31
	public void deleteAll(Collection<Identifier> arg0) {
32
		// we do not delete system metadata	
33
	}
34

    
35
	public void store(Identifier pid, SystemMetadata sm) {
36
		try {
37
			//System.out.println("Storing System Metadata to store: " + pid.getValue());
38
			if (!IdentifierManager.getInstance().systemMetadataExists(pid.getValue())) {
39
				IdentifierManager.getInstance().createSystemMetadata(sm);
40
			} else {
41
				IdentifierManager.getInstance().updateSystemMetadata(sm);
42
			}
43
		} catch (McdbDocNotFoundException e) {
44
			throw new RuntimeException(e.getMessage(), e);
45
		}
46
	}
47

    
48
	public void storeAll(Map<Identifier, SystemMetadata> map) {
49
		for (Identifier key: map.keySet()) {
50
			store(key, map.get(key));
51
		}
52
	}
53

    
54
	public SystemMetadata load(Identifier pid) {
55
		SystemMetadata sm = null;
56
		try {
57
			System.out.println("loading from store: " + pid.getValue());
58
			sm = IdentifierManager.getInstance().getSystemMetadata(pid.getValue());
59
		} catch (McdbDocNotFoundException e) {
60
			throw new RuntimeException(e.getMessage(), e);
61
		}
62
		return sm;
63
	}
64

    
65
	public Map<Identifier, SystemMetadata> loadAll(Collection<Identifier> keys) {
66
		Map<Identifier, SystemMetadata> map = new HashMap<Identifier, SystemMetadata>();
67
		for (Identifier key: keys) {
68
			SystemMetadata value = load(key);
69
			map.put(key, value);
70
		}
71
		return map;
72
	}
73

    
74
	public Set<Identifier> loadAllKeys() {
75
		Set<Identifier> pids = new HashSet<Identifier>();
76
		try {
77
			ObjectList ol = IdentifierManager.getInstance().querySystemMetadata(
78
					null, //startTime, 
79
					null, //endTime, 
80
					null, //objectFormatId, 
81
					false, //replicaStatus, 
82
					0, //start, 
83
					-1 //count
84
					);
85
			for (ObjectInfo o: ol.getObjectInfoList()) {
86
				Identifier pid = o.getIdentifier();
87
				pids.add(pid);
88
			}
89
		} catch (Exception e) {
90
			throw new RuntimeException(e.getMessage(), e);
91
		}
92
		
93
		return pids;
94
	}
95

    
96
}
(3-3/3)