Configuration

If you haven't downloaded the latest Floggy release, you can find it here .

Before starting the development you must configure the Floggy in your environment.

Using the framework

It is really simple! All you have to do is to implement the empty interface net.sourceforge.floggy.persistence.Persistable or extend a class that implements it.

IMPORTANT : All concrete classes which implement this interface must have a public default constructor .

import net.sourceforge.floggy.persistence.Persistable;

public class Person implements Persistable {

        // Static fields aren't persisted
        public static int SOME_STATIC_FIELD = 1;
        
        private String name;
        private Date birthday;
        private char gender;
        private Phone[] phones;
        
        // Transient fields aren't persisted 
        private transient int age;
        
        // Each persistable class must have a public default constructor.
        public Person() {
                // Do something ...
        }
        
        ...
}

... 

public class Phone implements Persistable {

        private String number;
        private String extension;
        private int type; // Mobile, Home, Work, etc
        
        public Phone() {
                // Do something ...
        }
        
        ...
}

Supported types and restrictions

Supported types

  • All primitive types: boolean, byte, char, double, float, int, long and short;
  • Package java.lang: Boolean, Byte, Character, Double, Float, Integer, Long, Short, String, StringBuffer;
  • Package java.util: Calendar, Date, Stack, Vector;
  • All objects which implements net.sourceforge.floggy.persistence.Persistable;
  • One-dimensional array of any supported type like byte[], Integer[], Date[] or Persistable[].
  • Coming soon : java.util.Hashtable

Restrictions

  • Bidirectional relationships;
  • n:n relationships.

PersistableManager

All operations, such as saving, loading, deleting and finding objects are made through a single class called net.sourceforge.floggy.persistence.PersistableManager .

The basic operations are explained in the following examples:

Saving a new object

Person p = new Person();
p.setName(...);
p.setBirthday(...);
p.setGender(...);
p.setPhones(...);

try {
        // A new object ID is generated.
        // You can use it in future operations.
        int id = PersistableManager.getInstance().save(p);
} catch (FloggyException e) {
        ...
}

Editing and saving a previously saved object

Person person = new Person();

try {
        // To load an object, use the object ID 
        // generated previously by a save() operation.
        PersistableManager.getInstance().load(person, id);

        // Now, edit and save the object.
        // The same object ID is returned.
        person.setName(...);
        id = PersistableManager.getInstance().save(person);
} catch (FloggyException e) {
        ...
}

Deleting a previously saved object

Person person = new Person();

try {
        // To load an object, use the object ID 
        // generated previously by a save() operation.
        PersistableManager.getInstance().load(person, id);

        // Delete the object.
        PersistableManager.getInstance().delete(person);
} catch (FloggyException e) {
        ...
}

Deleting all entities based on its class .

try {
        // Delete all objects based on its class.
        PersistableManager.getInstance().deleteAll(Person.class);
} catch (FloggyException e) {
        ...
}

Deleting all entities stored by the midlet .

try {
        // Delete all objetcs.
        PersistableManager.getInstance().deleteAll();
} catch (FloggyException e) {
        ...
}

Checking if the object is already persisted.

Person person = new Person();

try {
        // Checks if the object is persisted. This will return false
        boolean persisted= PersistableManager.getInstance().isPersisted(person);
        
        // To load an object, use the object ID 
        // generated previously by a save() operation.
        PersistableManager.getInstance().load(person, id);

        //This will return true
        persisted= PersistableManager.getInstance().isPersisted(person);
} catch (FloggyException e) {
        ...
}

Listing all objects

ObjectSet persons = PersistableManager.getInstance().find(Person.class, null, null);
for (int i = 0; i < persons.size(); i++) {
        Person p = (Person) persons.get(i);
        ...
}

Using a filter to find specific objects

...

ObjectSet persons = pm.find(Person.class, new MaleFilter(), null);
for (int i = 0; i < persons.size(); i++) {
        Person p = (Person) persons.get(i);
        ...
}

... 

public class MaleFilter implements net.sourceforge.floggy.persistence.Filter {

        public boolean matches(Persistable persistable) {
                Person p = (Person) persistable;
                return p.getGender() == 'M';
        }
        
} 

Using a comparator to sort the results of a search

// Sorting persons by their age (younger first)
ObjectSet persons = pm.find(Person.class, null, new AgeCompator());

... 

public class AgeComparator implements net.sourceforge.floggy.persistence.Comparator {

        public int compare(Persistable o1, Persistable o2) {
                Person p1 = (Person) o1;
                Person p2 = (Person) o2;
                
                if (p1.getBirthday().getTime() < p2.getBirthday().getTime()) {
                        return PRECEDES;
                } 
                if (p1.getBirthday().getTime() > p2.getBirthday().getTime()) {
                        return FOLLOWS; 
                } 
                
                return EQUIVALENT;
        }

}