Project

General

Profile

1 6395 leinfelder
package edu.ucsb.nceas.metacat.dataone.hazelcast;
2
3 6893 cjones
import java.sql.SQLException;
4 6395 leinfelder
import java.util.Collection;
5 6426 leinfelder
import java.util.HashMap;
6 6395 leinfelder
import java.util.Map;
7
import java.util.Set;
8
9 6868 cjones
import org.apache.log4j.Logger;
10 6395 leinfelder
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 6888 cjones
import com.hazelcast.core.Hazelcast;
16 6395 leinfelder
import com.hazelcast.core.MapLoader;
17
import com.hazelcast.core.MapStore;
18
19
import edu.ucsb.nceas.metacat.IdentifierManager;
20
import edu.ucsb.nceas.metacat.McdbDocNotFoundException;
21 6888 cjones
import edu.ucsb.nceas.metacat.properties.PropertyService;
22
import edu.ucsb.nceas.utilities.PropertyNotFoundException;
23 6395 leinfelder
24
/**
25
 * Storage implementation for Hazelcast System Metadata
26
 * @author leinfelder
27
 *
28
 */
29 6868 cjones
public class SystemMetadataMap
30
    implements MapStore<Identifier, SystemMetadata>, MapLoader<Identifier, SystemMetadata> {
31 6395 leinfelder
32 6868 cjones
  private Logger logMetacat = null;
33
34 6471 jones
	@Override
35 6395 leinfelder
	public void delete(Identifier arg0) {
36
		// we do not delete system metadata
37
	}
38
39 6471 jones
	@Override
40 6395 leinfelder
	public void deleteAll(Collection<Identifier> arg0) {
41
		// we do not delete system metadata
42
	}
43
44 6471 jones
	@Override
45 6395 leinfelder
	public void store(Identifier pid, SystemMetadata sm) {
46
		try {
47 6434 leinfelder
			//System.out.println("Storing System Metadata to store: " + pid.getValue());
48 6451 leinfelder
			if (!IdentifierManager.getInstance().systemMetadataExists(pid.getValue())) {
49 6395 leinfelder
				IdentifierManager.getInstance().createSystemMetadata(sm);
50 6893 cjones
51 6395 leinfelder
			} else {
52
				IdentifierManager.getInstance().updateSystemMetadata(sm);
53 6893 cjones
54 6395 leinfelder
			}
55 6893 cjones
56 6395 leinfelder
		} catch (McdbDocNotFoundException e) {
57 6456 leinfelder
			throw new RuntimeException(e.getMessage(), e);
58 6893 cjones
59
		} catch (SQLException e) {
60
	      throw new RuntimeException(e.getMessage(), e);
61
62
    }
63 6395 leinfelder
	}
64
65 6471 jones
	@Override
66 6395 leinfelder
	public void storeAll(Map<Identifier, SystemMetadata> map) {
67
		for (Identifier key: map.keySet()) {
68
			store(key, map.get(key));
69
		}
70
	}
71
72 6471 jones
	@Override
73 6395 leinfelder
	public SystemMetadata load(Identifier pid) {
74
		SystemMetadata sm = null;
75 6868 cjones
    logMetacat = Logger.getLogger(SystemMetadataMap.class);
76
77
    try {
78
			logMetacat.debug("loading from store: " + pid.getValue());
79 6395 leinfelder
			sm = IdentifierManager.getInstance().getSystemMetadata(pid.getValue());
80
		} catch (McdbDocNotFoundException e) {
81 6496 leinfelder
			//throw new RuntimeException(e.getMessage(), e);
82
			// not found => null
83
			return null;
84
		}
85
		catch (Exception e) {
86 6456 leinfelder
			throw new RuntimeException(e.getMessage(), e);
87 6395 leinfelder
		}
88
		return sm;
89
	}
90
91 6471 jones
	@Override
92 6395 leinfelder
	public Map<Identifier, SystemMetadata> loadAll(Collection<Identifier> keys) {
93 6426 leinfelder
		Map<Identifier, SystemMetadata> map = new HashMap<Identifier, SystemMetadata>();
94 6395 leinfelder
		for (Identifier key: keys) {
95
			SystemMetadata value = load(key);
96
			map.put(key, value);
97
		}
98
		return map;
99
	}
100
101 6471 jones
	@Override
102 6395 leinfelder
	public Set<Identifier> loadAllKeys() {
103 6888 cjones
104
	    //Set<Identifier> pids = new HashSet<Identifier>();
105
	  String identifiersSet;
106
    try {
107
        identifiersSet =
108
            PropertyService.getProperty("dataone.hazelcast.storageCluster.identifiersSet");
109
110
    } catch (PropertyNotFoundException e1) {
111
        identifiersSet = "hzIdentifiers";
112
113
    }
114
    Set<Identifier> pids = Hazelcast.getSet(identifiersSet);
115
116 6395 leinfelder
		try {
117
			ObjectList ol = IdentifierManager.getInstance().querySystemMetadata(
118
					null, //startTime,
119
					null, //endTime,
120
					null, //objectFormatId,
121
					false, //replicaStatus,
122
					0, //start,
123
					-1 //count
124
					);
125
			for (ObjectInfo o: ol.getObjectInfoList()) {
126
				Identifier pid = o.getIdentifier();
127 6888 cjones
				if ( !pids.contains(pid) ) {
128
		        pids.add(pid);
129
130
				}
131 6395 leinfelder
			}
132 6888 cjones
133 6456 leinfelder
		} catch (Exception e) {
134
			throw new RuntimeException(e.getMessage(), e);
135 6888 cjones
136 6395 leinfelder
		}
137
138
		return pids;
139
	}
140
141
}