Project

General

Profile

« Previous | Next » 

Revision 55911

Added new classes for selection criteria implementation

View differences:

modules/dnet-openaireplus-mapping-utils/branches/solr75/src/main/java/eu/dnetlib/data/bulktag/Constraint.java
1
package eu.dnetlib.data.bulktag;
2

  
3
import eu.dnetlib.data.bulktag.selectioncriteria.Selection;
4
import eu.dnetlib.data.bulktag.selectioncriteria.VerbResolver;
5
import org.springframework.beans.factory.annotation.Autowired;
6

  
7
import java.io.Serializable;
8
import java.lang.reflect.InvocationTargetException;
9

  
10

  
11
public class Constraint implements Serializable {
12
    private String verb;
13
    private String field;
14
    private String value;
15
    private Selection selection;
16

  
17
//    @Autowired
18
//    private VerbResolver resolver;
19

  
20
    public Constraint() {
21
    }
22

  
23
    public String getVerb() {
24
        return verb;
25
    }
26

  
27
    public void setVerb(String verb) {
28
        this.verb = verb;
29
    }
30

  
31
    public String getField() {
32
        return field;
33
    }
34

  
35
    public void setField(String field) {
36
        this.field = field;
37
    }
38

  
39
    public String getValue() {
40
        return value;
41
    }
42

  
43
    public void setValue(String value) {
44
        this.value = value;
45
    }
46

  
47

  
48

  
49
    public void setSelection(Selection sel){
50
        selection = sel;
51
    }
52

  
53
    public void setSelection(VerbResolver resolver) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
54
        selection = resolver.getSelectionCriteria(verb,value);
55
    }
56

  
57

  
58
    public boolean verifyCriteria(String metadata){
59
        return selection.apply(metadata);
60
    }
61

  
62
   /* public boolean verifyCriteria(String metadata) throws InvocationTargetException, IllegalAccessException {
63
        Method method;
64
        boolean ret = false;
65
        if(verb.contains("equal")){
66
            method = getStringMethod(metadata,verb);
67
        }else{
68
            method = getCharSequenceMethod(metadata,verb);
69
        }
70
        if (method == null)
71
            return false;
72
        ret = (boolean)method.invoke(metadata,value);
73
        if(verb.startsWith("not_"))
74
            return !ret;
75
        return ret;
76
    }
77

  
78
    private Method getCharSequenceMethod(String metadata, String verb) {
79
        try{
80
            if(verb.startsWith("not_")) {
81
                return metadata.getClass().getMethod(verb.substring(4), CharSequence.class);
82
            }
83
            else{
84
                return metadata.getClass().getMethod(verb, CharSequence.class);
85
            }
86

  
87
        }catch(NoSuchMethodException nsme){
88

  
89
        }
90

  
91
        return null;
92
    }
93

  
94
    private Method getStringMethod(String metadata, String verb) {
95
        try{
96
            if(verb.startsWith("not_")) {
97
                return metadata.getClass().getMethod(verb.substring(4), String.class);
98
            }
99
            else{
100
                return metadata.getClass().getMethod(verb, String.class);
101
            }
102

  
103
        }catch(NoSuchMethodException nsme){
104

  
105
        }
106
        return null;
107
    }*/
108

  
109
}
modules/dnet-openaireplus-mapping-utils/branches/solr75/src/main/java/eu/dnetlib/data/bulktag/selectioncriteria/VerbResolver.java
1
package eu.dnetlib.data.bulktag.selectioncriteria;
2

  
3
import org.reflections.Reflections;
4

  
5
import java.io.Serializable;
6
import java.lang.reflect.InvocationTargetException;
7
import java.util.Map;
8
import java.util.stream.Collectors;
9

  
10
public class VerbResolver implements Serializable {
11
    private final Map<String, Class<Selection>> map;
12

  
13
    public VerbResolver(){
14
        this.map = new Reflections("eu.dnetlib").getTypesAnnotatedWith(VerbClass.class).stream()
15
                .collect(Collectors.toMap(v -> v.getAnnotation(VerbClass.class).value(), v->(Class<Selection>)v));
16
    }
17

  
18

  
19
    public Selection getSelectionCriteria(String name, String param) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
20

  
21
            return map.get(name).getDeclaredConstructor((String.class)).newInstance(param);
22

  
23
    }
24
}
25

  
modules/dnet-openaireplus-mapping-utils/branches/solr75/src/main/java/eu/dnetlib/data/bulktag/selectioncriteria/VerbClass.java
1
package eu.dnetlib.data.bulktag.selectioncriteria;
2

  
3
import java.lang.annotation.ElementType;
4
import java.lang.annotation.Retention;
5
import java.lang.annotation.RetentionPolicy;
6
import java.lang.annotation.Target;
7

  
8
@Retention(RetentionPolicy.RUNTIME)
9
@Target(ElementType.TYPE)
10
public @interface VerbClass {
11

  
12
    public String value();
13
}
14

  
modules/dnet-openaireplus-mapping-utils/branches/solr75/src/main/java/eu/dnetlib/data/bulktag/selectioncriteria/Selection.java
1
package eu.dnetlib.data.bulktag.selectioncriteria;
2

  
3
public interface Selection {
4

  
5
    boolean apply(String value);
6
}
modules/dnet-openaireplus-mapping-utils/branches/solr75/src/main/java/eu/dnetlib/data/bulktag/selectioncriteria/EqualVerb.java
1
package eu.dnetlib.data.bulktag.selectioncriteria;
2

  
3

  
4
@VerbClass("equals")
5
public class EqualVerb implements Selection {
6

  
7
    private String param;
8

  
9

  
10
    public EqualVerb(final String param) {
11
        this.param = param;
12
    }
13

  
14

  
15
    @Override
16
    public boolean apply(String value) {
17
        return value.equalsIgnoreCase(param);
18
    }
19
}
modules/dnet-openaireplus-mapping-utils/branches/solr75/src/main/java/eu/dnetlib/data/bulktag/selectioncriteria/NotEqualVerb.java
1
package eu.dnetlib.data.bulktag.selectioncriteria;
2

  
3

  
4
@VerbClass("not_equals")
5
public class NotEqualVerb implements Selection {
6

  
7
    private String param;
8

  
9

  
10
    public NotEqualVerb(final String param) {
11
        this.param = param;
12
    }
13

  
14

  
15
    @Override
16
    public boolean apply(String value) {
17
        return !value.equalsIgnoreCase(param);
18
    }
19
}
modules/dnet-openaireplus-mapping-utils/branches/solr75/src/main/java/eu/dnetlib/data/bulktag/selectioncriteria/VerbResolverFactory.java
1
package eu.dnetlib.data.bulktag.selectioncriteria;
2

  
3
public class VerbResolverFactory {
4

  
5
    public static VerbResolver newInstance(){
6

  
7
        return new VerbResolver();
8
    }
9

  
10
}
modules/dnet-openaireplus-mapping-utils/branches/solr75/src/main/java/eu/dnetlib/data/bulktag/selectioncriteria/ContainsVerb.java
1
package eu.dnetlib.data.bulktag.selectioncriteria;
2

  
3
@VerbClass("contains")
4
public class ContainsVerb implements Selection {
5

  
6
    private String param;
7

  
8

  
9
    public ContainsVerb(final String param) {
10
        this.param = param;
11
    }
12

  
13
    @Override
14
    public boolean apply(String value) {
15
        return value.contains(param);
16
    }
17
}
modules/dnet-openaireplus-mapping-utils/branches/solr75/src/main/java/eu/dnetlib/data/bulktag/selectioncriteria/NotContainsVerb.java
1
package eu.dnetlib.data.bulktag.selectioncriteria;
2

  
3
@VerbClass("not_contains")
4
public class NotContainsVerb implements Selection {
5

  
6
    private String param;
7

  
8

  
9
    public NotContainsVerb(final String param) {
10
        this.param = param;
11
    }
12

  
13
    @Override
14
    public boolean apply(String value) {
15
        return !value.contains(param);
16
    }
17
}
modules/dnet-openaireplus-mapping-utils/branches/solr75/src/main/java/eu/dnetlib/data/bulktag/SelectionConstraints.java
1
package eu.dnetlib.data.bulktag;
2

  
3
import com.google.common.reflect.TypeToken;
4
import com.google.gson.Gson;
5
import eu.dnetlib.data.bulktag.selectioncriteria.VerbResolver;
6

  
7
import java.io.Serializable;
8
import java.lang.reflect.Type;
9
import java.util.Collection;
10
import java.util.List;
11
import java.util.Map;
12

  
13
public class SelectionConstraints implements Serializable {
14
    private List<Constraints>criteria;
15
//    private VerbResolver resolver;
16
//
17
//    public VerbResolver getResolver() {
18
//        return resolver;
19
//    }
20

  
21
    public SelectionConstraints() {
22
    }
23

  
24
    public List<Constraints> getCriteria() {
25
        return criteria;
26
    }
27

  
28
    public void setCriteria(List<Constraints> criteria) {
29
        this.criteria = criteria;
30
    }
31

  
32
    public void setSc(String json){
33
        Type collectionType = new TypeToken<Collection<Constraints>>(){}.getType();
34
        criteria = new Gson().fromJson(json, collectionType);
35
    }
36

  
37
    //Constraints in or
38
//    public boolean verifyCriteria(Map<String,String> param){
39
//        for(Constraints selc: criteria){
40
//            if(selc.verifyCriteria(param)){
41
//                return true;
42
//            }
43
//        }
44
//        return false;
45
//    }
46

  
47
    public boolean verifyCriteria(Map<String,List<String>> param){
48
        for(Constraints selc: criteria){
49
            if(selc.verifyCriteria(param)){
50
                return true;
51
            }
52
        }
53
        return false;
54
    }
55
    public void setSelection(VerbResolver resolver) {
56

  
57
        for(Constraints cs : criteria){
58
            cs.setSelection(resolver);
59
        }
60
    }
61
}

Also available in: Unified diff