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