package com.evolveum.midpoint.repo.sql.util; import com.evolveum.midpoint.repo.sql.data.common.any.*; import org.hibernate.transform.BasicTransformerAdapter; import org.hibernate.transform.ResultTransformer; import org.jetbrains.annotations.NotNull; import java.io.Serializable; import java.util.Arrays; import java.util.Collections; import java.util.List; /** * @author lazyman */ public class GetObjectResult implements Serializable { public static final Class[] EXT_COUNT_CLASSES = new Class[]{ROExtString.class, ROExtLong.class, ROExtDate.class, ROExtReference.class, ROExtPolyString.class, ROExtBoolean.class}; public static final ResultStyle RESULT_STYLE = new ResultStyle() { @Override public ResultTransformer getResultTransformer() { return new BasicTransformerAdapter() { @Override public Object transformTuple(Object[] tuple, String[] aliases) { return new GetObjectResult((String) tuple[0], (byte[]) tuple[1], tuple.length > 2 ? (Short) tuple[2] : null, tuple.length > 3 ? (Short) tuple[3] : null, tuple.length > 4 ? (Short) tuple[4] : null, tuple.length > 5 ? (Short) tuple[5] : null, tuple.length > 6 ? (Short) tuple[6] : null, tuple.length > 7 ? (Short) tuple[7] : null); } }; } @Override public List<String> getIdentifiers(String rootAlias) { return Collections.singletonList(rootAlias + ".oid"); } @Override public List<String> getContentAttributes(String rootAlias) { return Arrays.asList( rootAlias + ".fullObject", rootAlias + ".stringsCount", rootAlias + ".longsCount", rootAlias + ".datesCount", rootAlias + ".referencesCount", rootAlias + ".polysCount", rootAlias + ".booleansCount"); } }; @NotNull private final String oid; @NotNull private final byte[] fullObject; private Short stringsCount; private Short longsCount; private Short datesCount; private Short referencesCount; private Short polysCount; private Short booleansCount; public GetObjectResult(@NotNull String oid, @NotNull byte[] fullObject, Short stringsCount, Short longsCount, Short datesCount, Short referencesCount, Short polysCount, Short booleansCount) { this.oid = oid; this.fullObject = fullObject; this.stringsCount = stringsCount; this.longsCount = longsCount; this.datesCount = datesCount; this.referencesCount = referencesCount; this.polysCount = polysCount; this.booleansCount = booleansCount; } public Short[] getCountProjection() { return new Short[]{getStringsCount(), getLongsCount(), getDatesCount(), getReferencesCount(), getPolysCount(), getBooleansCount()}; } @NotNull public String getOid() { return oid; } @NotNull public byte[] getFullObject() { return fullObject; } public Short getStringsCount() { if (stringsCount == null) { stringsCount = 0; } return stringsCount; } public Short getLongsCount() { if (longsCount == null) { longsCount = 0; } return longsCount; } public Short getDatesCount() { if (datesCount == null) { datesCount = 0; } return datesCount; } public Short getReferencesCount() { if (referencesCount == null) { referencesCount = 0; } return referencesCount; } public Short getPolysCount() { if (polysCount == null) { polysCount = 0; } return polysCount; } public Short getBooleansCount() { if (booleansCount == null) { booleansCount = 0; } return booleansCount; } }