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
	@Override
28
	public void delete(Identifier arg0) {
29
		// we do not delete system metadata
30
	}
31

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

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

    
51
	@Override
52
	public void storeAll(Map<Identifier, SystemMetadata> map) {
53
		for (Identifier key: map.keySet()) {
54
			store(key, map.get(key));
55
		}
56
	}
57

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

    
70
	@Override
71
	public Map<Identifier, SystemMetadata> loadAll(Collection<Identifier> keys) {
72
		Map<Identifier, SystemMetadata> map = new HashMap<Identifier, SystemMetadata>();
73
		for (Identifier key: keys) {
74
			SystemMetadata value = load(key);
75
			map.put(key, value);
76
		}
77
		return map;
78
	}
79

    
80
	@Override
81
	public Set<Identifier> loadAllKeys() {
82
		Set<Identifier> pids = new HashSet<Identifier>();
83
		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
		} catch (Exception e) {
97
			throw new RuntimeException(e.getMessage(), e);
98
		}
99
		
100
		return pids;
101
	}
102

    
103
}
(4-4/4)