avatar

859

Allow erasing just by payload, like the non-DB form of TimeQueue allows. by mrs, 06 Apr, 2009 01:19 AM
Diff this changeset:
DBTimeQueue.java
mrs  package com.jbidwatcher.util.db;
mrs  
mrs  import java.util.List;
mrs  import java.util.Date;
mrs  
mrs  /**
mrs   * Created by IntelliJ IDEA.
mrs   * User: Morgan
mrs   * Date: Apr 4, 2009
mrs 10  * Time: 10:40:23 PM
mrs 11  *
mrs 12  *
mrs 13  */
mrs 14 @SuppressWarnings({"unchecked"})
mrs 15 public class DBTimeQueue extends ActiveRecord {
mrs 16   private void setRepeatCount(int howMany) { setInteger("repeat_count", howMany); }
mrs 17   public int getRepeatCount() { return getInteger("repeat_count"); }
mrs 18   private void setInterval(int repeat) { setInteger("repeat_interval", repeat); }
mrs 19   public Integer getInterval() { return getInteger("repeat_interval"); }
mrs 20   private void setFireAt(long when) { setDate("fire_at", new Date(when)); }
mrs 21   private void setPayload(String payload) { setString("payload", payload); }
mrs 22   public String getPayload() { return getString("payload"); }
mrs 23   private void setDestination(String destination) { setString("destination", destination); }
mrs 24   public String getDestination() { return getString("destination"); }
mrs 25 
mrs 26   public String toString() {
mrs 27     StringBuffer sb = new StringBuffer("{ ");
mrs 28     sb.append("destination => \"").append(getDestination());
mrs 29     sb.append("\", ");
mrs 30     sb.append("payload => \"").append(getPayload());
mrs 31     sb.append("\", ");
mrs 32     sb.append("fire_at => ").append(getDate("fire_at"));
mrs 33     if (getInterval() != null && getInterval() != 0) {
mrs 34       sb.append("\", ");
mrs 35       sb.append("interval => ").append(getInterval());
mrs 36       sb.append("\", ");
mrs 37       sb.append("repeat_count => ").append(getRepeatCount());
mrs 38     }
mrs 39     sb.append(" }");
mrs 40     return sb.toString();
mrs 41   }
mrs 42 
mrs 43   public static DBTimeQueue addEvent(String destination, String payload, long when, int repeat, int howmany) {
mrs 44     DBTimeQueue rval = new DBTimeQueue();
mrs 45     rval.setDestination(destination);
mrs 46     rval.setPayload(payload);
mrs 47     rval.setFireAt(when);
mrs 48     rval.setInterval(repeat);
mrs 49     rval.setRepeatCount(howmany);
mrs 50     rval.saveDB();
mrs 51 
mrs 52     return rval;
mrs 53   }
mrs 54 
mrs 55   /*-*********************-*/
mrs 56   /* Database access stuff */
mrs 57   /*-*********************-*/
mrs 58   private static Table sDB = null;
mrs 59   protected static String getTableName() { return "time_queue"; }
mrs 60 
mrs 61   protected Table getDatabase() {
mrs 62     if (sDB == null) sDB = openDB(getTableName());
mrs 63     return sDB;
mrs 64   }
mrs 65 
mrs 66   public static List<DBTimeQueue> getSorted() {
mrs 67     return (List<DBTimeQueue>) findAllBy(DBTimeQueue.class, null, null, "fire_at");
mrs 68   }
mrs 69 
mrs 70   public static List<DBTimeQueue> getUnsorted() {
mrs 71     return (List<DBTimeQueue>) findAllBy(DBTimeQueue.class, null, null);
mrs 72   }
mrs 73 
mrs 74   public static boolean erase(Object destination, Object payload) {
mrs 75     List<DBTimeQueue> targets;
mrs 76     if(destination != null) {
mrs 77       String[] keys = {"destination", "payload"};
mrs 78       String[] values = {destination.toString(), payload.toString()};
mrs 79       targets = (List<DBTimeQueue>) findAllMulti(DBTimeQueue.class, keys, values, null);
mrs 80     } else {
mrs 81       targets = (List<DBTimeQueue>) findAllBy(DBTimeQueue.class, "payload", payload.toString(), null);
mrs 82     }
mrs 83     boolean allDeleted = true;
mrs 84     if(targets != null) {
mrs 85       for (DBTimeQueue target : targets) {
mrs 86         allDeleted = target.delete() && allDeleted;
mrs 87       }
mrs 88     }
mrs 89     return allDeleted;
mrs 90   }
mrs 91 
mrs 92   public static List<DBTimeQueue> allBefore(long fire_at) {
mrs 93     return (List<DBTimeQueue>) findAllComparator(DBTimeQueue.class, "fire_at", "<=", formatDate(new Date(fire_at)), "fire_at ASC");
mrs 94   }
mrs 95 }

Check out the code: svn co jbidwatcher/trunk/src/com/jbidwatcher/util/db/DBTimeQueue.java