// Path: src/main/java/nl/uva/larissa/json/model/Statement.java
// @JsonPropertyOrder({ "id", "actor", "verb", "object", "result", "context",
// 		"timestamp", "stored", "authority", "version" })
// @ValidRevisionUsage
// @ValidPlatformUsage
// public class Statement {
// 	@JsonProperty(required = false)
// 	@IsUUID
// 	private String id;
// 	@NotNull
// 	@Valid
// 	private Actor actor;
// 	@NotNull
// 	@Valid
// 	private Verb verb;
// 	@NotNull
// 	@Valid
// 	@JsonProperty("object")
// 	private StatementObject statementObject;
// 	private Result result;
// 	@Valid
// 	private Context context;
// 	// xAPI 1.0.1 4.1.7 A timestamp SHOULD be the current or a past time when it
// 	// is outside of a Sub-Statement.
// 	@Past
// 	private Date timestamp;
// 
// 	// should be set by the LRS, not the client
// 	@Null
// 	private Date stored;
// 	private Authority authority;
// 	private String version;
// 
// 	public String getId() {
// 		return id;
// 	}
// 
// 	public void setId(String id) {
// 		this.id = id;
// 	}
// 
// 	public Actor getActor() {
// 		return actor;
// 	}
// 
// 	public void setActor(Actor actor) {
// 		this.actor = actor;
// 	}
// 
// 	public Verb getVerb() {
// 		return verb;
// 	}
// 
// 	public void setVerb(Verb verb) {
// 		this.verb = verb;
// 	}
// 
// 	public StatementObject getStatementObject() {
// 		return statementObject;
// 	}
// 
// 	public void setStatementObject(StatementObject statementObject) {
// 		this.statementObject = statementObject;
// 	}
// 
// 	public Result getResult() {
// 		return result;
// 	}
// 
// 	public void setResult(Result result) {
// 		this.result = result;
// 	}
// 
// 	public Date getTimestamp() {
// 		return timestamp;
// 	}
// 
// 	public void setTimestamp(Date timestamp) {
// 		this.timestamp = timestamp;
// 	}
// 
// 	public Date getStored() {
// 		return stored;
// 	}
// 
// 	public void setStored(Date stored) {
// 		this.stored = stored;
// 	}
// 
// 	public Authority getAuthority() {
// 		return authority;
// 	}
// 
// 	public void setAuthority(Authority authority) {
// 		this.authority = authority;
// 	}
// 
// 	public String getVersion() {
// 		return version;
// 	}
// 
// 	public void setVersion(String version) {
// 		this.version = version;
// 	}
// 
// 	public Context getContext() {
// 		return context;
// 	}
// 
// 	public void setContext(Context context) {
// 		this.context = context;
// 	}
// }
// 
// Path: src/main/java/nl/uva/larissa/repository/couchdb/StatementDocument.java
// public class StatementDocument extends CouchDbDocument {
// 
// 	public static enum Type {
// 		PLAIN, VOIDED
// 	}
// 
// 	/**
// 	 * 
// 	 */
// 	private static final long serialVersionUID = 1533055980737805979L;
// 
// 	@JsonUnwrapped
// 	private Statement statement;
// 
// 	private Type type = Type.PLAIN;
// 
// 	private List<StatementDocument> referrers = new ArrayList<>();
// 	
// 	public List<StatementDocument> getReferrers() {
// 		return referrers;
// 	}
// 
// 	public void setReferrers(List<StatementDocument> referrers) {
// 		this.referrers = referrers;
// 	}
// 
// 	public Statement getStatement() {
// 		return statement;
// 	}
// 
// 	public void setStatement(Statement statement) {
// 		this.statement = statement;
// 	}
// 
// 	public Type getType() {
// 		return type;
// 	}
// 
// 	public void setType(Type type) {
// 		this.type = type;
// 	}
// 
// }


import java.util.List;
import org.jvnet.hk2.annotations.Contract;
import nl.uva.larissa.json.model.Statement;
import nl.uva.larissa.repository.couchdb.StatementDocument;
package nl.uva.larissa.json;




@Contract
public interface StatementParser {
	public Statement parseStatement(String json) throws ParseException;

	public StatementDocument parseStatementDocument(String doc)
			throws ParseException;

	public <T> T parse(Class<T> type, String json) throws ParseException;

	public List<Statement> parseStatementList(String json)
// Path: src/main/java/nl/uva/larissa/json/model/Statement.java
// @JsonPropertyOrder({ "id", "actor", "verb", "object", "result", "context",
// 		"timestamp", "stored", "authority", "version" })
// @ValidRevisionUsage
// @ValidPlatformUsage
// public class Statement {
// 	@JsonProperty(required = false)
// 	@IsUUID
// 	private String id;
// 	@NotNull
// 	@Valid
// 	private Actor actor;
// 	@NotNull
// 	@Valid
// 	private Verb verb;
// 	@NotNull
// 	@Valid
// 	@JsonProperty("object")
// 	private StatementObject statementObject;
// 	private Result result;
// 	@Valid
// 	private Context context;
// 	// xAPI 1.0.1 4.1.7 A timestamp SHOULD be the current or a past time when it
// 	// is outside of a Sub-Statement.
// 	@Past
// 	private Date timestamp;
// 
// 	// should be set by the LRS, not the client
// 	@Null
// 	private Date stored;
// 	private Authority authority;
// 	private String version;
// 
// 	public String getId() {
// 		return id;
// 	}
// 
// 	public void setId(String id) {
// 		this.id = id;
// 	}
// 
// 	public Actor getActor() {
// 		return actor;
// 	}
// 
// 	public void setActor(Actor actor) {
// 		this.actor = actor;
// 	}
// 
// 	public Verb getVerb() {
// 		return verb;
// 	}
// 
// 	public void setVerb(Verb verb) {
// 		this.verb = verb;
// 	}
// 
// 	public StatementObject getStatementObject() {
// 		return statementObject;
// 	}
// 
// 	public void setStatementObject(StatementObject statementObject) {
// 		this.statementObject = statementObject;
// 	}
// 
// 	public Result getResult() {
// 		return result;
// 	}
// 
// 	public void setResult(Result result) {
// 		this.result = result;
// 	}
// 
// 	public Date getTimestamp() {
// 		return timestamp;
// 	}
// 
// 	public void setTimestamp(Date timestamp) {
// 		this.timestamp = timestamp;
// 	}
// 
// 	public Date getStored() {
// 		return stored;
// 	}
// 
// 	public void setStored(Date stored) {
// 		this.stored = stored;
// 	}
// 
// 	public Authority getAuthority() {
// 		return authority;
// 	}
// 
// 	public void setAuthority(Authority authority) {
// 		this.authority = authority;
// 	}
// 
// 	public String getVersion() {
// 		return version;
// 	}
// 
// 	public void setVersion(String version) {
// 		this.version = version;
// 	}
// 
// 	public Context getContext() {
// 		return context;
// 	}
// 
// 	public void setContext(Context context) {
// 		this.context = context;
// 	}
// }
// 
// Path: src/main/java/nl/uva/larissa/repository/couchdb/StatementDocument.java
// public class StatementDocument extends CouchDbDocument {
// 
// 	public static enum Type {
// 		PLAIN, VOIDED
// 	}
// 
// 	/**
// 	 * 
// 	 */
// 	private static final long serialVersionUID = 1533055980737805979L;
// 
// 	@JsonUnwrapped
// 	private Statement statement;
// 
// 	private Type type = Type.PLAIN;
// 
// 	private List<StatementDocument> referrers = new ArrayList<>();
// 	
// 	public List<StatementDocument> getReferrers() {
// 		return referrers;
// 	}
// 
// 	public void setReferrers(List<StatementDocument> referrers) {
// 		this.referrers = referrers;
// 	}
// 
// 	public Statement getStatement() {
// 		return statement;
// 	}
// 
// 	public void setStatement(Statement statement) {
// 		this.statement = statement;
// 	}
// 
// 	public Type getType() {
// 		return type;
// 	}
// 
// 	public void setType(Type type) {
// 		this.type = type;
// 	}
// 
// }


// Path: src/main/java/nl/uva/larissa/json/StatementParser.java
import java.util.List;
import org.jvnet.hk2.annotations.Contract;
import nl.uva.larissa.json.model.Statement;
import nl.uva.larissa.repository.couchdb.StatementDocument;

package nl.uva.larissa.json;




@Contract
public interface StatementParser {
	public Statement parseStatement(String json) throws ParseException;

	public StatementDocument parseStatementDocument(String doc)
			throws ParseException;

	public <T> T parse(Class<T> type, String json) throws ParseException;

	public List<Statement> parseStatementList(String json)
			throws ParseException;;