// Path: SpongePowered/ch.vorburger.minecraft.learning/src/main/java/ch/vorburger/learning/ServiceEvaluation.java
// public class ServiceEvaluation {
// 	// TODO https://immutables.github.io
// 
// 	private final boolean correct;
// 	private final int totalScore;
// 	private final Optional<String> comment;
// 	private final Optional<String> url;
// 	
// 	public ServiceEvaluation(boolean correct, int totalScore) {
// 		this.correct = correct;
// 		this.totalScore = totalScore;
// 		this.comment = Optional.empty();
// 		this.url = Optional.empty();
// 	}
// 
// 	public ServiceEvaluation(boolean correct, int totalScore, String comment) {
// 		this.correct = correct;
// 		this.totalScore = totalScore;
// 		this.comment = Optional.of(comment);
// 		this.url = Optional.empty();
// 	}
// 
// 	public ServiceEvaluation(boolean correct, int totalScore, String comment, String url) {
// 		this.correct = correct;
// 		this.totalScore = totalScore;
// 		this.comment = Optional.of(comment);
// 		this.url = Optional.of(url);
// 	}
// 
// 	public boolean isCorrect() {
// 		return correct;
// 	}
// 	
// 	public int getTotalScore() {
// 		return totalScore;
// 	}
// 	
// 	public Optional<String> getComment() {
// 		return comment;
// 	}
// 	
// 	public Optional<String> getURL() {
// 		return url;
// 	}
// }
// 
// Path: SpongePowered/ch.vorburger.minecraft.learning/src/main/java/ch/vorburger/learning/LearningService.java
// public interface LearningService {
// 
// 	ServiceQuestion newQuestion(UserID uid) throws LearningServiceException;
// 	
// 	ServiceEvaluation answerFreeTextQuestion(String questionID, String answer) throws LearningServiceException;
// 
// 	ServiceEvaluation answerMultipleChoiceQuestion(String questionID, int choice) throws LearningServiceException;
// 
// }
// 
// Path: SpongePowered/ch.vorburger.minecraft.learning/src/main/java/ch/vorburger/learning/LearningServiceException.java
// public class LearningServiceException extends Exception {
// 	private static final long serialVersionUID = 5426151440815984742L;
// 
// 	public LearningServiceException(String message) {
// 		super(message);
// 	}
// 
// 	public LearningServiceException(String message, Throwable cause) {
// 		super(message, cause);
// 	}
// 
// }
// 
// Path: SpongePowered/ch.vorburger.minecraft.learning/src/main/java/ch/vorburger/learning/ServiceQuestion.java
// public class ServiceQuestion {
// 	// TODO https://immutables.github.io
// 
// 	private final String id;
// 	private final String text;
// 	private final List<String> choices;
// 
// 	/**
// 	 * Free text question.
// 	 */
// 	public ServiceQuestion(String id, String text) {
// 		super();
// 		this.id = id;
// 		this.text = text;
// 		this.choices = Collections.emptyList();
// 	}
// 	
// 	/**
// 	 * Multiple Choice question.
// 	 */
// 	public ServiceQuestion(String id, String text, List<String> choices) {
// 		super();
// 		this.id = id;
// 		this.text = text;
// 		this.choices = Collections.unmodifiableList(choices);
// 		
// 		if (choices.isEmpty())
// 			throw new IllegalArgumentException("choices.isEmpty(), so it's a free-text not multiple choice question");
// 	}
// 
// 	public String getId() {
// 		return id;
// 	}
// 
// 	public String getText() {
// 		return text;
// 	}
// 
// 	public List<String> getChoices() {
// 		return choices;
// 	}
// 	
// 	@Override
// 	public int hashCode() {
// 		return Objects.hash(id, text, choices);
// 	}
// 	
// 	@Override
// 	public boolean equals(@Nullable Object other) {
// 		return EvenMoreObjects.equalsHelper(this, other,
// 				(one, another) -> Objects.equals(one.id, another.id)
// 				               && Objects.equals(one.text, another.text)
// 				               && Objects.equals(one.choices, another.choices));
// 	}
// 
// }
// 
// Path: SpongePowered/ch.vorburger.minecraft.learning/src/main/java/ch/vorburger/learning/UserID.java
// public class UserID {
// 	// TODO https://immutables.github.io
// 	
// 	private final String scheme;
// 	private final String uuid;
// 	// TODO private final Locale locale;
// 	
// 	public UserID(String scheme, String uuid) {
// 		super();
// 		this.scheme = scheme;
// 		this.uuid = uuid;
// 	}
// 
// 	public String getScheme() {
// 		return scheme;
// 	}
// 	
// 	public String getUuid() {
// 		return uuid;
// 	}
// 	
// 	@Override
// 	public int hashCode() {
// 		return Objects.hash(scheme, uuid);
// 	}
// 	
// 	@Override
// 	public boolean equals(@Nullable Object other) {
// 		return EvenMoreObjects.equalsHelper(this, other,
// 				(one, another) -> Objects.equals(one.scheme, another.scheme)
// 				               && Objects.equals(one.uuid, another.uuid));
// 	}
// 	
// 	@Override
// 	public String toString() {
// 		return new StringBuilder(scheme).append("::").append(uuid).toString();
// 	}
// 	
// }


import ch.vorburger.learning.ServiceEvaluation;
import ch.vorburger.learning.LearningService;
import ch.vorburger.learning.LearningServiceException;
import ch.vorburger.learning.ServiceQuestion;
import ch.vorburger.learning.UserID;
package ch.vorburger.learning.server;


public class LearningServiceImpl implements LearningService {

	@Override
	public ServiceQuestion newQuestion(UserID uid) {
		// TODO this needs to go into the AdditionLearnlet
		return new ServiceQuestion("1", "What is 1 + 1?");
	}

	@Override
// Path: SpongePowered/ch.vorburger.minecraft.learning/src/main/java/ch/vorburger/learning/ServiceEvaluation.java
// public class ServiceEvaluation {
// 	// TODO https://immutables.github.io
// 
// 	private final boolean correct;
// 	private final int totalScore;
// 	private final Optional<String> comment;
// 	private final Optional<String> url;
// 	
// 	public ServiceEvaluation(boolean correct, int totalScore) {
// 		this.correct = correct;
// 		this.totalScore = totalScore;
// 		this.comment = Optional.empty();
// 		this.url = Optional.empty();
// 	}
// 
// 	public ServiceEvaluation(boolean correct, int totalScore, String comment) {
// 		this.correct = correct;
// 		this.totalScore = totalScore;
// 		this.comment = Optional.of(comment);
// 		this.url = Optional.empty();
// 	}
// 
// 	public ServiceEvaluation(boolean correct, int totalScore, String comment, String url) {
// 		this.correct = correct;
// 		this.totalScore = totalScore;
// 		this.comment = Optional.of(comment);
// 		this.url = Optional.of(url);
// 	}
// 
// 	public boolean isCorrect() {
// 		return correct;
// 	}
// 	
// 	public int getTotalScore() {
// 		return totalScore;
// 	}
// 	
// 	public Optional<String> getComment() {
// 		return comment;
// 	}
// 	
// 	public Optional<String> getURL() {
// 		return url;
// 	}
// }
// 
// Path: SpongePowered/ch.vorburger.minecraft.learning/src/main/java/ch/vorburger/learning/LearningService.java
// public interface LearningService {
// 
// 	ServiceQuestion newQuestion(UserID uid) throws LearningServiceException;
// 	
// 	ServiceEvaluation answerFreeTextQuestion(String questionID, String answer) throws LearningServiceException;
// 
// 	ServiceEvaluation answerMultipleChoiceQuestion(String questionID, int choice) throws LearningServiceException;
// 
// }
// 
// Path: SpongePowered/ch.vorburger.minecraft.learning/src/main/java/ch/vorburger/learning/LearningServiceException.java
// public class LearningServiceException extends Exception {
// 	private static final long serialVersionUID = 5426151440815984742L;
// 
// 	public LearningServiceException(String message) {
// 		super(message);
// 	}
// 
// 	public LearningServiceException(String message, Throwable cause) {
// 		super(message, cause);
// 	}
// 
// }
// 
// Path: SpongePowered/ch.vorburger.minecraft.learning/src/main/java/ch/vorburger/learning/ServiceQuestion.java
// public class ServiceQuestion {
// 	// TODO https://immutables.github.io
// 
// 	private final String id;
// 	private final String text;
// 	private final List<String> choices;
// 
// 	/**
// 	 * Free text question.
// 	 */
// 	public ServiceQuestion(String id, String text) {
// 		super();
// 		this.id = id;
// 		this.text = text;
// 		this.choices = Collections.emptyList();
// 	}
// 	
// 	/**
// 	 * Multiple Choice question.
// 	 */
// 	public ServiceQuestion(String id, String text, List<String> choices) {
// 		super();
// 		this.id = id;
// 		this.text = text;
// 		this.choices = Collections.unmodifiableList(choices);
// 		
// 		if (choices.isEmpty())
// 			throw new IllegalArgumentException("choices.isEmpty(), so it's a free-text not multiple choice question");
// 	}
// 
// 	public String getId() {
// 		return id;
// 	}
// 
// 	public String getText() {
// 		return text;
// 	}
// 
// 	public List<String> getChoices() {
// 		return choices;
// 	}
// 	
// 	@Override
// 	public int hashCode() {
// 		return Objects.hash(id, text, choices);
// 	}
// 	
// 	@Override
// 	public boolean equals(@Nullable Object other) {
// 		return EvenMoreObjects.equalsHelper(this, other,
// 				(one, another) -> Objects.equals(one.id, another.id)
// 				               && Objects.equals(one.text, another.text)
// 				               && Objects.equals(one.choices, another.choices));
// 	}
// 
// }
// 
// Path: SpongePowered/ch.vorburger.minecraft.learning/src/main/java/ch/vorburger/learning/UserID.java
// public class UserID {
// 	// TODO https://immutables.github.io
// 	
// 	private final String scheme;
// 	private final String uuid;
// 	// TODO private final Locale locale;
// 	
// 	public UserID(String scheme, String uuid) {
// 		super();
// 		this.scheme = scheme;
// 		this.uuid = uuid;
// 	}
// 
// 	public String getScheme() {
// 		return scheme;
// 	}
// 	
// 	public String getUuid() {
// 		return uuid;
// 	}
// 	
// 	@Override
// 	public int hashCode() {
// 		return Objects.hash(scheme, uuid);
// 	}
// 	
// 	@Override
// 	public boolean equals(@Nullable Object other) {
// 		return EvenMoreObjects.equalsHelper(this, other,
// 				(one, another) -> Objects.equals(one.scheme, another.scheme)
// 				               && Objects.equals(one.uuid, another.uuid));
// 	}
// 	
// 	@Override
// 	public String toString() {
// 		return new StringBuilder(scheme).append("::").append(uuid).toString();
// 	}
// 	
// }


// Path: SpongePowered/ch.vorburger.minecraft.learning/src/main/java/ch/vorburger/learning/server/LearningServiceImpl.java
import ch.vorburger.learning.ServiceEvaluation;
import ch.vorburger.learning.LearningService;
import ch.vorburger.learning.LearningServiceException;
import ch.vorburger.learning.ServiceQuestion;
import ch.vorburger.learning.UserID;

package ch.vorburger.learning.server;


public class LearningServiceImpl implements LearningService {

	@Override
	public ServiceQuestion newQuestion(UserID uid) {
		// TODO this needs to go into the AdditionLearnlet
		return new ServiceQuestion("1", "What is 1 + 1?");
	}

	@Override
	public ServiceEvaluation answerFreeTextQuestion(String questionID, String answer) throws LearningServiceException {