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.Map;
6
import java.util.Set;
7

    
8
import org.apache.log4j.Logger;
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.Hazelcast;
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.properties.PropertyService;
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 
29
    implements MapStore<Identifier, SystemMetadata>, MapLoader<Identifier, SystemMetadata> {
30

    
31
  private Logger logMetacat = null;
32

    
33
	@Override
34
	public void delete(Identifier arg0) {
35
		// we do not delete system metadata
36
	}
37

    
38
	@Override
39
	public void deleteAll(Collection<Identifier> arg0) {
40
		// we do not delete system metadata	
41
	}
42

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

    
57
	@Override
58
	public void storeAll(Map<Identifier, SystemMetadata> map) {
59
		for (Identifier key: map.keySet()) {
60
			store(key, map.get(key));
61
		}
62
	}
63

    
64
	@Override
65
	public SystemMetadata load(Identifier pid) {
66
		SystemMetadata sm = null;
67
    logMetacat = Logger.getLogger(SystemMetadataMap.class);
68
    
69
    try {
70
			logMetacat.debug("loading from store: " + pid.getValue());
71
			sm = IdentifierManager.getInstance().getSystemMetadata(pid.getValue());
72
		} catch (McdbDocNotFoundException e) {
73
			//throw new RuntimeException(e.getMessage(), e);
74
			// not found => null
75
			return null;
76
		}
77
		catch (Exception e) {
78
			throw new RuntimeException(e.getMessage(), e);
79
		}
80
		return sm;
81
	}
82

    
83
	@Override
84
	public Map<Identifier, SystemMetadata> loadAll(Collection<Identifier> keys) {
85
		Map<Identifier, SystemMetadata> map = new HashMap<Identifier, SystemMetadata>();
86
		for (Identifier key: keys) {
87
			SystemMetadata value = load(key);
88
			map.put(key, value);
89
		}
90
		return map;
91
	}
92

    
93
	@Override
94
	public Set<Identifier> loadAllKeys() {
95
	  
96
	    //Set<Identifier> pids = new HashSet<Identifier>();
97
	  String identifiersSet;
98
    try {
99
        identifiersSet = 
100
            PropertyService.getProperty("dataone.hazelcast.storageCluster.identifiersSet");
101
        
102
    } catch (PropertyNotFoundException e1) {
103
        identifiersSet = "hzIdentifiers";
104
        
105
    }
106
    Set<Identifier> pids = Hazelcast.getSet(identifiersSet);
107
		
108
		try {
109
			ObjectList ol = IdentifierManager.getInstance().querySystemMetadata(
110
					null, //startTime, 
111
					null, //endTime, 
112
					null, //objectFormatId, 
113
					false, //replicaStatus, 
114
					0, //start, 
115
					-1 //count
116
					);
117
			for (ObjectInfo o: ol.getObjectInfoList()) {
118
				Identifier pid = o.getIdentifier();
119
				if ( !pids.contains(pid) ) {
120
		        pids.add(pid);
121
		        
122
				}				
123
			}
124
			
125
		} catch (Exception e) {
126
			throw new RuntimeException(e.getMessage(), e);
127
			
128
		}
129
		
130
		return pids;
131
	}
132

    
133
}
(3-3/3)