Project

General

Profile

Download (3.07 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.cdm.api.service.util;
2

    
3
import java.util.Arrays;
4
import java.util.EnumSet;
5
import java.util.HashSet;
6
import java.util.Set;
7

    
8
import eu.etaxonomy.cdm.model.common.RelationshipTermBase;
9
import eu.etaxonomy.cdm.model.common.RelationshipBase.Direction;
10

    
11
/**
12
 * Holds a RelationshipType ({@link RelationshipTermBase}) of type {@code <T>}
13
 * and gives it a direction which is one of:
14
 * <ul>
15
 * <li>direct, everted: {@link Direction.relatedTo}</li>
16
 * <li>inverse: {@link Direction.relatedFrom}</li>
17
 * <li>bidirectional: {@link Direction.relatedTo} and {@link Direction.relatedFrom}</li>
18
 * </ul>
19
 *
20
 * @author a.kohlbecker
21
 * @since Dec 7, 2012
22
 *
23
 *
24
 * @param <T> a sub class of ({@link RelationshipTermBase})
25
 */
26
public class AbstractRelationshipEdge<T extends RelationshipTermBase> {
27

    
28
    private Set<T> relationshipTypes;
29
    private EnumSet<Direction> directions;
30

    
31
    public AbstractRelationshipEdge(T relationshipType, Direction ... direction) {
32
        super();
33
        this.relationshipTypes = new HashSet<>();
34
        this.relationshipTypes.add(relationshipType);
35
        directions = EnumSet.copyOf(Arrays.asList(direction));
36
    }
37

    
38
    public AbstractRelationshipEdge(Set<T> relationshipTypes, Direction ... direction) {
39
        super();
40
        this.relationshipTypes = relationshipTypes;
41
        directions = EnumSet.copyOf(Arrays.asList(direction));
42
    }
43

    
44
    public Set<T> getRelationshipTypes() {
45
        return relationshipTypes;
46
    }
47

    
48
    public void setRelationshipTypes(Set<T> relationshipTypes) {
49
        this.relationshipTypes = relationshipTypes;
50
    }
51

    
52
    public EnumSet<Direction> getDirections() {
53
        return directions;
54
    }
55

    
56
    public void setDirections(EnumSet<Direction> directions) {
57
        this.directions = directions;
58
    }
59

    
60
    /**
61
     * set the <code>directions</code> to {@link Direction.relatedTo}
62
     */
63
    public void setIsEvers() {
64
        directions = EnumSet.of(Direction.relatedTo);
65
    }
66

    
67
    /**
68
     * set the <code>directions</code> to {@link Direction.relatedFrom}
69
     */
70
    public void setIsInvers() {
71
        directions = EnumSet.of(Direction.relatedFrom);
72
    }
73

    
74
    /**
75
     * set the <code>directions</code> to both {@link Direction.relatedTo} and
76
     * {@link Direction.relatedFrom}
77
     */
78
    public void setIsBidirectional() {
79
        directions = EnumSet.allOf(Direction.class);
80
    }
81

    
82
    /**
83
     * @return <code>true</code> if the <code>directions</code> is set to
84
     *         {@link Direction.relatedTo}
85
     */
86
    public boolean isEvers() {
87
        return directions.equals(EnumSet.of(Direction.relatedTo));
88
    }
89

    
90
    /**
91
     * @return <code>true</code> if the <code>directions</code> is set to
92
     *         {@link Direction.relatedFrom}
93
     */
94
    public boolean isInvers() {
95
        return directions.equals(EnumSet.of(Direction.relatedFrom));
96
    }
97

    
98
    /**
99
     * @return <code>true</code> if the <code>directions</code> is set to both
100
     *         {@link Direction.relatedTo} and {@link Direction.relatedFrom}
101
     */
102
    public boolean isBidirectional() {
103
        return directions.equals(EnumSet.allOf(Direction.class));
104
    }
105

    
106

    
107
}
(1-1/2)