Project

General

Profile

1 6395 leinfelder
package edu.ucsb.nceas.metacat.dataone.hazelcast;
2
3
import java.sql.SQLException;
4
import java.util.Collection;
5 6426 leinfelder
import java.util.HashMap;
6
import java.util.HashSet;
7 6395 leinfelder
import java.util.Map;
8
import java.util.Set;
9
10
import org.dataone.service.types.v1.Identifier;
11
import org.dataone.service.types.v1.ObjectInfo;
12
import org.dataone.service.types.v1.ObjectList;
13
import org.dataone.service.types.v1.SystemMetadata;
14
15
import com.hazelcast.core.MapLoader;
16
import com.hazelcast.core.MapStore;
17
18
import edu.ucsb.nceas.metacat.IdentifierManager;
19
import edu.ucsb.nceas.metacat.McdbDocNotFoundException;
20
import edu.ucsb.nceas.metacat.shared.ServiceException;
21
import edu.ucsb.nceas.utilities.PropertyNotFoundException;
22
23
/**
24
 * Storage implementation for Hazelcast System Metadata
25
 * @author leinfelder
26
 *
27
 */
28
public class SystemMetadataMap implements MapStore<Identifier, SystemMetadata>, MapLoader<Identifier, SystemMetadata> {
29
30
	@Override
31
	public void delete(Identifier arg0) {
32
		// we do not delete system metadata
33
	}
34
35
	@Override
36
	public void deleteAll(Collection<Identifier> arg0) {
37
		// we do not delete system metadata
38
	}
39
40
	@Override
41
	public void store(Identifier pid, SystemMetadata sm) {
42
		try {
43 6434 leinfelder
			//System.out.println("Storing System Metadata to store: " + pid.getValue());
44 6395 leinfelder
			if (!IdentifierManager.getInstance().identifierExists(pid.getValue())) {
45
				IdentifierManager.getInstance().createSystemMetadata(sm);
46
			} else {
47
				IdentifierManager.getInstance().updateSystemMetadata(sm);
48
			}
49
		} catch (McdbDocNotFoundException e) {
50
			// TODO Auto-generated catch block
51
			e.printStackTrace();
52
		}
53
	}
54
55
	@Override
56
	public void storeAll(Map<Identifier, SystemMetadata> map) {
57
		for (Identifier key: map.keySet()) {
58
			store(key, map.get(key));
59
		}
60
	}
61
62
	@Override
63
	public SystemMetadata load(Identifier pid) {
64
		SystemMetadata sm = null;
65
		try {
66 6426 leinfelder
			System.out.println("loading from store: " + pid.getValue());
67 6395 leinfelder
			sm = IdentifierManager.getInstance().getSystemMetadata(pid.getValue());
68
		} catch (McdbDocNotFoundException e) {
69
			// TODO Auto-generated catch block
70
			e.printStackTrace();
71
		}
72
		return sm;
73
	}
74
75
	@Override
76
	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
	@Override
86
	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
		} catch (PropertyNotFoundException e) {
102
			// TODO Auto-generated catch block
103
			e.printStackTrace();
104
		} catch (ServiceException e) {
105
			// TODO Auto-generated catch block
106
			e.printStackTrace();
107
		} catch (SQLException e) {
108
			// TODO Auto-generated catch block
109
			e.printStackTrace();
110
		}
111
112
		return pids;
113
	}
114
115
}