package org.javersion.store.jdbc; import static java.util.Arrays.asList; import static org.javersion.store.sql.QEntity.entity; import static org.javersion.store.sql.QEntityVersion.entityVersion; import java.util.Collection; import org.javersion.core.VersionNode; import org.javersion.path.PropertyPath; import com.querydsl.core.dml.StoreClause; import com.querydsl.core.group.Group; import com.querydsl.sql.dml.SQLUpdateClause; public class CustomEntityVersionStore extends EntityVersionStoreJdbc<String, String, JEntityVersion<String>> { private static PropertyPath NAME = PropertyPath.ROOT.property("name"); @SuppressWarnings("unused") protected CustomEntityVersionStore() {} public CustomEntityVersionStore(EntityStoreOptions<String, String, JEntityVersion<String>> options) { super(options); } @Override public EntityUpdateBatch<String, String, JEntityVersion<String>> updateBatch(Collection<String> docIds) { return new UpdateBatch(this, docIds); } public static class UpdateBatch extends EntityUpdateBatch<String, String, JEntityVersion<String>> { protected final SQLUpdateClause entityUpdateBatch; public UpdateBatch(CustomEntityVersionStore store, String docId) { this(store, asList(docId)); } public UpdateBatch(CustomEntityVersionStore store, Collection<String> docIds) { super(store, docIds); entityUpdateBatch = options.queryFactory.update(options.entity); } @Override public void execute() { super.execute(); if (isNotEmpty(entityUpdateBatch)) { entityUpdateBatch.execute(); } } @Override protected void insertEntity(String docId, VersionNode<PropertyPath, Object, String> version) { entityCreateBatch .set(options.entity.id, docId) .set(entity.name, (String) version.getProperties().get(NAME)) .addBatch(); } @Override protected void updateEntity(String docId, VersionNode<PropertyPath, Object, String> version) { entityUpdateBatch .set(entity.name, (String) version.getProperties().get(NAME)) .where(entity.id.eq(docId)) .addBatch(); } @Override protected void setMeta(String meta, StoreClause versionBatch) { versionBatch.set(entityVersion.comment, meta); } } @Override protected String getMeta(Group versionAndParents) { return versionAndParents.getOne(entityVersion.comment); } }