class MediaInfoDocumentImpl extends LabeledStatementDocumentImpl implements MediaInfoDocument {

	@Override
	public MediaInfoDocument withStatement(Statement statement) {
		Map<String, List<Statement>> newGroups = addStatementToGroups(statement, claims);
		return new MediaInfoDocumentImpl(getEntityId(), labels, newGroups, revisionId);
	}

	public  MediaInfoDocumentImpl(
			MediaInfoIdValue id,
			List<MonolingualTextValue> labels,
			List<StatementGroup> statements,
			long revisionId);
	@JsonCreator public  MediaInfoDocumentImpl(
			@JsonProperty("id") String jsonId,
			@JsonProperty("labels") @JsonDeserialize(contentAs=TermImpl.class) Map<String, MonolingualTextValue> labels,
			@JsonProperty("claims") Map<String, List<StatementImpl.PreStatement>> claims,
			@JsonProperty("statements") Map<String, List<StatementImpl.PreStatement>> statements,
			@JsonProperty("lastrevid") long revisionId,
			@JacksonInject("siteIri") String siteIri);
	protected  MediaInfoDocumentImpl(
			MediaInfoIdValue subject,
			Map<String, MonolingualTextValue> labels,
			Map<String, List<Statement>> claims,
			long revisionId);

}