--- /dev/null
+package net.pterodactylus.sone.data.impl;
+
+import static com.google.common.base.Preconditions.checkState;
+
+import net.pterodactylus.sone.database.SoneBuilder;
+import net.pterodactylus.sone.freenet.wot.Identity;
+import net.pterodactylus.sone.freenet.wot.OwnIdentity;
+
+/**
+ * Abstract {@link SoneBuilder} implementation.
+ *
+ * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
+ */
+public abstract class AbstractSoneBuilder implements SoneBuilder {
+
+ protected Identity identity;
+ protected boolean local;
+
+ @Override
+ public SoneBuilder from(Identity identity) {
+ this.identity = identity;
+ return this;
+ }
+
+ @Override
+ public SoneBuilder local() {
+ this.local = true;
+ return this;
+ }
+
+ protected void validate() throws IllegalStateException {
+ checkState(identity != null, "identity must not be null");
+ checkState(!local || (identity instanceof OwnIdentity),
+ "can not create local Sone from remote identity");
+ }
+
+}