1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.opencastproject.assetmanager.impl.query;
22
23 import org.opencastproject.assetmanager.api.Version;
24 import org.opencastproject.assetmanager.api.query.Predicate;
25 import org.opencastproject.assetmanager.api.query.VersionField;
26 import org.opencastproject.assetmanager.impl.RuntimeTypes;
27 import org.opencastproject.assetmanager.impl.persistence.QSnapshotDto;
28
29 import com.mysema.query.jpa.JPASubQuery;
30
31 public class VersionFieldImpl extends AbstractSnapshotField<Version, Long> implements VersionField {
32 private static final QSnapshotDto Q_SNAPSHOT_ALIAS = new QSnapshotDto("s");
33
34 public VersionFieldImpl() {
35 super(Q_SNAPSHOT.version);
36 }
37
38 @Override protected Long extract(Version version) {
39 return RuntimeTypes.convert(version).value();
40 }
41
42 @Override public Predicate isLatest() {
43 return mkFirstLatestPredicate(true);
44 }
45
46 @Override public Predicate isFirst() {
47 return mkFirstLatestPredicate(false);
48 }
49
50
51
52
53
54 private Predicate mkFirstLatestPredicate(boolean isLatest) {
55 return mkPredicate(Q_SNAPSHOT.version.eq(
56 new JPASubQuery().from(Q_SNAPSHOT_ALIAS)
57 .where(Q_SNAPSHOT_ALIAS.mediaPackageId.eq(Q_SNAPSHOT.mediaPackageId))
58 .unique(isLatest ? Q_SNAPSHOT_ALIAS.version.max() : Q_SNAPSHOT_ALIAS.version.min())));
59 }
60 }