Project

General

Profile

1
package eu.dnetlib.data.mapreduce.hbase.index.config;
2

    
3
import java.io.StringReader;
4
import java.util.HashMap;
5
import java.util.List;
6
import java.util.Map;
7
import java.util.Set;
8

    
9
import com.google.common.base.Function;
10
import com.google.common.collect.Maps;
11
import com.google.common.collect.Sets;
12
import com.google.gson.Gson;
13
import com.typesafe.config.Config;
14
import com.typesafe.config.ConfigFactory;
15
import com.typesafe.config.ConfigObject;
16
import com.typesafe.config.ConfigValue;
17
import eu.dnetlib.data.mapreduce.OptionalConfig;
18
import eu.dnetlib.data.mapreduce.util.RelDescriptor;
19
import eu.dnetlib.data.proto.TypeProtos.Type;
20
import org.apache.commons.collections.CollectionUtils;
21

    
22
public class IndexConfig extends OptionalConfig {
23

    
24
	public static IndexConfig load(final String s) {
25
		return new IndexConfig(ConfigFactory.parseReader(new StringReader(s)));
26
	}
27

    
28
	public IndexConfig(final Config config) {
29
		super(config);
30
	}
31

    
32
	@SuppressWarnings("unchecked")
33
	public EntityConfigTable getConfigMap() {
34
		final ConfigObject modelMap = getConfig().getObject("index.conf");
35
		final Map<String, EntityConfig> map = Maps.transformValues(modelMap, new Function<ConfigValue, EntityConfig>() {
36

    
37
			@Override
38
			public EntityConfig apply(final ConfigValue value) {
39

    
40
				final HashMap<RelDescriptor, LinkDescriptor> links = Maps.newHashMap();
41
				for (final Object o : (List<?>) ((Map<String, ?>) value.unwrapped()).get("links")) {
42
					final Map<String, ?> map = (Map<String, ?>) o;
43

    
44
					final RelDescriptor relDescriptor = new RelDescriptor((String) map.get("relType"));
45
					final Set<String> fields = Sets.newHashSet((List<String>) map.get("fields"));
46
					final Type target = Type.valueOf((String) map.get("targetEntity"));
47
					final Boolean isChild = ((String) map.get("expandAs")).equals("child");
48
					final Boolean symmetric = (Boolean) map.get("symmetric");
49

    
50
					final LinkDescriptor ld = new LinkDescriptor(relDescriptor, target, isChild, symmetric, fields);
51

    
52
					if (map.containsKey("max")) {
53
						ld.setMax((Integer) map.get("max"));
54
					}
55

    
56
					links.put(relDescriptor, ld);
57
				}
58
				final List<String> includeFields = (List<String>) ((Map<String, ?>) value.unwrapped()).get("includeFields");
59
				final List<String> excludeFields = (List<String>) ((Map<String, ?>) value.unwrapped()).get("excludeFields");
60
				if(CollectionUtils.isNotEmpty(includeFields) & CollectionUtils.isNotEmpty(excludeFields)){
61
					throw new RuntimeException("Cannot create the index configuration: includeFields and excludeFields are both not null");
62
				}
63
				return new EntityConfig((Boolean) ((Map<String, ?>) value.unwrapped()).get("dups"), links, includeFields, excludeFields);
64
			}
65
		});
66

    
67
		final EntityConfigTable res = new EntityConfigTable();
68
		for (final String key : map.keySet()) {
69
			res.put(Type.valueOf(key), map.get(key));
70
		}
71
		return res;
72
	}
73

    
74
	@Override
75
	public String toString() {
76
		return new Gson().toJson(this);
77
	}
78

    
79
}
(6-6/8)