A more consistent way of handling the interfacing of JDO queries.
diff --git a/taverna-server-webapp/src/main/java/org/taverna/server/master/ManagementState.java b/taverna-server-webapp/src/main/java/org/taverna/server/master/ManagementState.java
index 31d5356..c65a334 100644
--- a/taverna-server-webapp/src/main/java/org/taverna/server/master/ManagementState.java
+++ b/taverna-server-webapp/src/main/java/org/taverna/server/master/ManagementState.java
@@ -110,9 +110,9 @@
private static final int KEY = 42; // whatever
private WebappState get() {
- Query q = query("id == " + KEY);
+ Query<WebappState> q = query("id == " + KEY);
q.setUnique(true);
- return (WebappState) q.execute();
+ return q.executeUnique();
}
private boolean loadedState;
diff --git a/taverna-server-webapp/src/main/java/org/taverna/server/master/notification/atom/EventDAO.java b/taverna-server-webapp/src/main/java/org/taverna/server/master/notification/atom/EventDAO.java
index aaab2a1..8bec456 100644
--- a/taverna-server-webapp/src/main/java/org/taverna/server/master/notification/atom/EventDAO.java
+++ b/taverna-server-webapp/src/main/java/org/taverna/server/master/notification/atom/EventDAO.java
@@ -83,9 +83,7 @@
@Nonnull
@WithinSingleTransaction
public List<Event> getEvents(@Nonnull UsernamePrincipal user) {
- @SuppressWarnings("unchecked")
- List<String> ids = (List<String>) namedQuery("eventsForUser").execute(
- user.getName());
+ List<String> ids = eventsForUser(user);
if (log.isDebugEnabled())
log.debug("found " + ids.size() + " events for user " + user);
@@ -97,6 +95,12 @@
return result;
}
+ @SuppressWarnings("unchecked")
+ private List<String> eventsForUser(UsernamePrincipal user) {
+ return (List<String>) namedQuery("eventsForUser").execute(
+ user.getName());
+ }
+
/**
* Get a particular event.
*
@@ -109,9 +113,7 @@
@Nonnull
@WithinSingleTransaction
public Event getEvent(@Nonnull UsernamePrincipal user, @Nonnull String id) {
- @SuppressWarnings("unchecked")
- List<String> ids = (List<String>) namedQuery("eventForUserAndId")
- .execute(user.getName(), id);
+ List<String> ids = eventsForUserAndId(user, id);
if (log.isDebugEnabled())
log.debug("found " + ids.size() + " events for user " + user
+ " with id = " + id);
@@ -121,6 +123,12 @@
return detach(getById(ids.get(0)));
}
+ @SuppressWarnings("unchecked")
+ private List<String> eventsForUserAndId(UsernamePrincipal user, String id) {
+ return (List<String>) namedQuery("eventForUserAndId").execute(
+ user.getName(), id);
+ }
+
/**
* Delete a particular event.
*
@@ -140,9 +148,7 @@
Date death = new DateTime().plusDays(-expiryAgeDays).toDate();
death = new Timestamp(death.getTime()); // UGLY SQL HACK
- @SuppressWarnings("unchecked")
- List<String> ids = (List<String>) namedQuery("eventsFromBefore")
- .execute(death);
+ List<String> ids = eventsFromBefore(death);
if (log.isDebugEnabled() && !ids.isEmpty())
log.debug("found " + ids.size()
+ " events to be squelched (older than " + death + ")");
@@ -151,6 +157,11 @@
delete(getById(id));
}
+ @SuppressWarnings("unchecked")
+ private List<String> eventsFromBefore(Date death) {
+ return (List<String>) namedQuery("eventsFromBefore").execute(death);
+ }
+
@Override
public boolean isAvailable() {
return true;
diff --git a/taverna-server-webapp/src/main/java/org/taverna/server/master/usage/UsageRecordRecorder.java b/taverna-server-webapp/src/main/java/org/taverna/server/master/usage/UsageRecordRecorder.java
index dc9289b..d8989b5 100644
--- a/taverna-server-webapp/src/main/java/org/taverna/server/master/usage/UsageRecordRecorder.java
+++ b/taverna-server-webapp/src/main/java/org/taverna/server/master/usage/UsageRecordRecorder.java
@@ -24,7 +24,6 @@
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.List;
import javax.annotation.PreDestroy;
@@ -155,9 +154,7 @@
@WithinSingleTransaction
public List<JobUsageRecord> getUsageRecords() {
- @SuppressWarnings("unchecked")
- Collection<String> urs = (Collection<String>) namedQuery("allByDate")
- .execute();
+ List<String> urs = allByDate();
List<JobUsageRecord> result = new ArrayList<>();
for (String ur : urs)
try {
@@ -168,6 +165,11 @@
return result;
}
+ @SuppressWarnings("unchecked")
+ private List<String> allByDate() {
+ return (List<String>) namedQuery("allByDate").execute();
+ }
+
@PreDestroy
public void close() {
if (writer != null)
diff --git a/taverna-server-webapp/src/main/java/org/taverna/server/master/utils/JDOSupport.java b/taverna-server-webapp/src/main/java/org/taverna/server/master/utils/JDOSupport.java
index 29a6c53..96f6a11 100644
--- a/taverna-server-webapp/src/main/java/org/taverna/server/master/utils/JDOSupport.java
+++ b/taverna-server-webapp/src/main/java/org/taverna/server/master/utils/JDOSupport.java
@@ -99,13 +99,14 @@
* @return The query, which should be executed to retrieve the results.
*/
@Nonnull
- protected Query query(@Nonnull String filter) {
+ protected Query<T> query(@Nonnull String filter) {
return pm().newQuery(contextClass, filter);
}
/**
* Get an instance of a named query attached to the context class (as an
- * annotation).
+ * annotation). Note that the result is a <i>raw</i> {@link Query} because
+ * not all queries return instances of the context class.
*
* @param name
* The name of the query.
@@ -113,6 +114,7 @@
* @see javax.jdo.annotations.Query
*/
@Nonnull
+ @SuppressWarnings("rawtypes")
protected Query namedQuery(@Nonnull String name) {
return pm().newNamedQuery(contextClass, name);
}
diff --git a/taverna-server-webapp/src/main/java/org/taverna/server/master/worker/RunDatabaseDAO.java b/taverna-server-webapp/src/main/java/org/taverna/server/master/worker/RunDatabaseDAO.java
index 18f0e49..1c75d22 100644
--- a/taverna-server-webapp/src/main/java/org/taverna/server/master/worker/RunDatabaseDAO.java
+++ b/taverna-server-webapp/src/main/java/org/taverna/server/master/worker/RunDatabaseDAO.java
@@ -64,7 +64,7 @@
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
@SuppressWarnings("unchecked")
- private List<String> nameRuns() {
+ private List<String> names() {
if (log.isDebugEnabled())
log.debug("fetching all run names");
return (List<String>) namedQuery("names").execute();
@@ -77,16 +77,20 @@
public int countRuns() {
if (log.isDebugEnabled())
log.debug("counting the number of runs");
+ return count();
+ }
+
+ private Integer count() {
return (Integer) namedQuery("count").execute();
}
@SuppressWarnings("unchecked")
- private List<String> expiredRuns() {
+ private List<String> timedout() {
return (List<String>) namedQuery("timedout").execute();
}
@SuppressWarnings("unchecked")
- private List<String> unterminatedRuns() {
+ private List<String> unterminated() {
return (List<String>) namedQuery("unterminated").execute();
}
@@ -122,7 +126,7 @@
private List<RunConnection> allRuns() {
try {
List<RunConnection> rcs = new ArrayList<>();
- List<String> names = nameRuns();
+ List<String> names = names();
for (String id : names) {
try {
if (id != null)
@@ -171,7 +175,7 @@
@WithinSingleTransaction
public Map<String, TavernaRun> listRuns(UsernamePrincipal user, Policy p) {
Map<String, TavernaRun> result = new HashMap<>();
- for (String id : nameRuns())
+ for (String id : names())
try {
RemoteRunDelegate rrd = pickRun(id).fromDBform(facade);
if (p.permitAccess(user, rrd))
@@ -264,7 +268,7 @@
public List<String> doClean() {
if (log.isDebugEnabled())
log.debug("deleting runs that timed out before " + new Date());
- List<String> toDelete = expiredRuns();
+ List<String> toDelete = timedout();
if (log.isDebugEnabled())
log.debug("found " + toDelete.size() + " runs to delete");
for (String id : toDelete) {
@@ -290,7 +294,7 @@
@WithinSingleTransaction
public List<RemoteRunDelegate> getPotentiallyNotifiable() {
List<RemoteRunDelegate> toNotify = new ArrayList<>();
- for (String id : unterminatedRuns())
+ for (String id : unterminated())
try {
RunConnection rc = getById(id);
toNotify.add(rc.fromDBform(facade));