25ddf9c1b22bd9fca4f732931093f0f6cfff0731
[Sone.git] / src / main / java / net / pterodactylus / sone / freenet / wot / Identity.java
1 /*
2  * Sone - Identity.java - Copyright © 2010–2016 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  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
33  */
34 public interface Identity {
35
36         public static final Function<Identity, Set<String>> TO_CONTEXTS = new Function<Identity, Set<String>>() {
37                 @Override
38                 public Set<String> apply(Identity identity) {
39                         return (identity == null) ? Collections.<String>emptySet() : identity.getContexts();
40                 }
41         };
42
43         public static final Function<Identity, Map<String, String>> TO_PROPERTIES = new Function<Identity, Map<String, String>>() {
44                 @Override
45                 public Map<String, String> apply(Identity input) {
46                         return (input == null) ? Collections.<String, String>emptyMap() : input.getProperties();
47                 }
48         };
49
50         /**
51          * Returns the ID of the identity.
52          *
53          * @return The ID of the identity
54          */
55         public String getId();
56
57         /**
58          * Returns the nickname of the identity.
59          *
60          * @return The nickname of the identity
61          */
62         public String getNickname();
63
64         /**
65          * Returns the request URI of the identity.
66          *
67          * @return The request URI of the identity
68          */
69         public String getRequestUri();
70
71         /**
72          * Returns all contexts of this identity.
73          *
74          * @return All contexts of this identity
75          */
76         public Set<String> getContexts();
77
78         /**
79          * Returns whether this identity has the given context.
80          *
81          * @param context
82          *            The context to check for
83          * @return {@code true} if this identity has the given context,
84          *         {@code false} otherwise
85          */
86         public boolean hasContext(String context);
87
88         /**
89          * Adds the given context to this identity.
90          *
91          * @param context
92          *            The context to add
93          */
94         public Identity addContext(String context);
95
96         /**
97          * Sets all contexts of this identity.
98          *
99          * @param contexts
100          *            All contexts of the identity
101          */
102         public void setContexts(Collection<String> contexts);
103
104         /**
105          * Removes the given context from this identity.
106          *
107          * @param context
108          *            The context to remove
109          */
110         public Identity removeContext(String context);
111
112         /**
113          * Returns all properties of this identity.
114          *
115          * @return All properties of this identity
116          */
117         public Map<String, String> getProperties();
118
119         /**
120          * Returns the value of the property with the given name.
121          *
122          * @param name
123          *            The name of the property
124          * @return The value of the property
125          */
126         public String getProperty(String name);
127
128         /**
129          * Sets the property with the given name to the given value.
130          *
131          * @param name
132          *            The name of the property
133          * @param value
134          *            The value of the property
135          */
136         public Identity setProperty(String name, String value);
137
138         /**
139          * Sets all properties of this identity.
140          *
141          * @param properties
142          *            The new properties of this identity
143          */
144         public void setProperties(Map<String, String> properties);
145
146         /**
147          * Removes the property with the given name.
148          *
149          * @param name
150          *            The name of the property to remove
151          */
152         public Identity removeProperty(String name);
153
154         /**
155          * Retrieves the trust that this identity receives from the given own
156          * identity. If this identity is not in the own identity’s trust tree, a
157          * {@link Trust} is returned that has all its elements set to {@code null}.
158          * If the trust can not be retrieved, {@code null} is returned.
159          *
160          * @param ownIdentity
161          *            The own identity to get the trust for
162          * @return The trust assigned to this identity, or {@code null} if the trust
163          *         could not be retrieved
164          */
165         public Trust getTrust(OwnIdentity ownIdentity);
166
167         /**
168          * Sets the trust given by an own identity to this identity.
169          *
170          * @param ownIdentity
171          *            The own identity that gave trust to this identity
172          * @param trust
173          *            The trust given by the given own identity
174          */
175         public Identity setTrust(OwnIdentity ownIdentity, Trust trust);
176
177         /**
178          * Removes trust assignment from the given own identity for this identity.
179          *
180          * @param ownIdentity
181          *            The own identity that removed the trust assignment for this
182          *            identity
183          */
184         public Identity removeTrust(OwnIdentity ownIdentity);
185
186 }