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
			// not found => null
67
			return null;
68
		}
69
		catch (Exception e) {
70
			throw new RuntimeException(e.getMessage(), e);
71
		}
72
		return sm;
73
	}
74

    
75
	@Override
76
	public Map<Identifier, SystemMetadata> loadAll(Collection<Identifier> keys) {
77
		Map<Identifier, SystemMetadata> map = new HashMap<Identifier, SystemMetadata>();
78
		for (Identifier key: keys) {
79
			SystemMetadata value = load(key);
80
			map.put(key, value);
81
		}
82
		return map;
83
	}
84

    
85
	@Override
86
	public Set<Identifier> loadAllKeys() {
87
		Set<Identifier> pids = new HashSet<Identifier>();
88
		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
		} catch (Exception e) {
102
			throw new RuntimeException(e.getMessage(), e);
103
		}
104
		
105
		return pids;
106
	}
107

    
108
}
(3-3/3)