package net.pterodactylus.sone.database;
+import java.util.Collection;
+
+import net.pterodactylus.sone.core.Core;
import net.pterodactylus.sone.data.Sone;
+import com.google.common.base.Optional;
+import com.google.inject.ImplementedBy;
+
/**
* Interface for objects that can provide {@link Sone}s by their ID.
*
* @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
*/
+@ImplementedBy(Core.class)
public interface SoneProvider {
/**
- * Returns the Sone with the given ID, if it exists.
+ * Returns the Sone with the given ID, or {@link Optional#absent()} if it
+ * does not exist.
*
* @param soneId
* The ID of the Sone to return
- * @return The Sone with the given ID, or {@code null}
+ * @return The Sone with the given ID, or {@link Optional#absent()}
+ */
+ public Optional<Sone> getSone(String soneId);
+
+ /**
+ * Returns all Sones.
+ *
+ * @return All Sones
+ */
+ public Collection<Sone> getSones();
+
+ /**
+ * Returns all local Sones.
+ *
+ * @return All local Sones
+ */
+ public Collection<Sone> getLocalSones();
+
+ /**
+ * Returns all remote Sones.
+ *
+ * @return All remote Sones
*/
- public Sone getSone(String soneId);
+ public Collection<Sone> getRemoteSones();
}