🔀 Merge branch 'release-79'
[Sone.git] / src / main / java / net / pterodactylus / sone / freenet / wot / Identity.java
1 /*
2  * Sone - Identity.java - Copyright Â© 2010–2019 David Roden
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
16  */
17
18 package net.pterodactylus.sone.freenet.wot;
19
20 import java.util.Collection;
21 import java.util.Collections;
22 import java.util.Map;
23 import java.util.Set;
24
25 import com.google.common.base.Function;
26
27 /**
28  * Interface for web of trust identities, defining all functions that can be
29  * performed on an identity. An identity is only a container for identity data
30  * and will not perform any updating in the WebOfTrust plugin itself.
31  */
32 public interface Identity {
33
34         public static final Function<Identity, Set<String>> TO_CONTEXTS = new Function<Identity, Set<String>>() {
35                 @Override
36                 public Set<String> apply(Identity identity) {
37                         return (identity == null) ? Collections.<String>emptySet() : identity.getContexts();
38                 }
39         };
40
41         public static final Function<Identity, Map<String, String>> TO_PROPERTIES = new Function<Identity, Map<String, String>>() {
42                 @Override
43                 public Map<String, String> apply(Identity input) {
44                         return (input == null) ? Collections.<String, String>emptyMap() : input.getProperties();
45                 }
46         };
47
48         /**
49          * Returns the ID of the identity.
50          *
51          * @return The ID of the identity
52          */
53         public String getId();
54
55         /**
56          * Returns the nickname of the identity.
57          *
58          * @return The nickname of the identity
59          */
60         public String getNickname();
61
62         /**
63          * Returns the request URI of the identity.
64          *
65          * @return The request URI of the identity
66          */
67         public String getRequestUri();
68
69         /**
70          * Returns all contexts of this identity.
71          *
72          * @return All contexts of this identity
73          */
74         public Set<String> getContexts();
75
76         /**
77          * Returns whether this identity has the given context.
78          *
79          * @param context
80          *            The context to check for
81          * @return {@code true} if this identity has the given context,
82          *         {@code false} otherwise
83          */
84         public boolean hasContext(String context);
85
86         /**
87          * Adds the given context to this identity.
88          *
89          * @param context
90          *            The context to add
91          */
92         public Identity addContext(String context);
93
94         /**
95          * Sets all contexts of this identity.
96          *
97          * @param contexts
98          *            All contexts of the identity
99          */
100         public void setContexts(Collection<String> contexts);
101
102         /**
103          * Removes the given context from this identity.
104          *
105          * @param context
106          *            The context to remove
107          */
108         public Identity removeContext(String context);
109
110         /**
111          * Returns all properties of this identity.
112          *
113          * @return All properties of this identity
114          */
115         public Map<String, String> getProperties();
116
117         /**
118          * Returns the value of the property with the given name.
119          *
120          * @param name
121          *            The name of the property
122          * @return The value of the property
123          */
124         public String getProperty(String name);
125
126         /**
127          * Sets the property with the given name to the given value.
128          *
129          * @param name
130          *            The name of the property
131          * @param value
132          *            The value of the property
133          */
134         public Identity setProperty(String name, String value);
135
136         /**
137          * Sets all properties of this identity.
138          *
139          * @param properties
140          *            The new properties of this identity
141          */
142         public void setProperties(Map<String, String> properties);
143
144         /**
145          * Removes the property with the given name.
146          *
147          * @param name
148          *            The name of the property to remove
149          */
150         public Identity removeProperty(String name);
151
152         /**
153          * Retrieves the trust that this identity receives from the given own
154          * identity. If this identity is not in the own identity’s trust tree, a
155          * {@link Trust} is returned that has all its elements set to {@code null}.
156          * If the trust can not be retrieved, {@code null} is returned.
157          *
158          * @param ownIdentity
159          *            The own identity to get the trust for
160          * @return The trust assigned to this identity, or {@code null} if the trust
161          *         could not be retrieved
162          */
163         public Trust getTrust(OwnIdentity ownIdentity);
164
165         /**
166          * Sets the trust given by an own identity to this identity.
167          *
168          * @param ownIdentity
169          *            The own identity that gave trust to this identity
170          * @param trust
171          *            The trust given by the given own identity
172          */
173         public Identity setTrust(OwnIdentity ownIdentity, Trust trust);
174
175         /**
176          * Removes trust assignment from the given own identity for this identity.
177          *
178          * @param ownIdentity
179          *            The own identity that removed the trust assignment for this
180          *            identity
181          */
182         public Identity removeTrust(OwnIdentity ownIdentity);
183
184 }