Page 1 of 1

TableBean - Simple Bean Binding [Need feedback]

Posted: Fri Oct 27, 2006 4:02 am
by Tomahawk
Download tablebean-0.1-dist.zip

Το σκεπτικο ειναι απλα να κανεις annotate τα fields απο μια κλαση σου με στοιχεια οπως την κλαση του,σε τι στηλη αντιστοιχει και τα getters και setters του και αυτοματα να φτιαξεις ενα TableModel (και οχι μονο) που να μιλαει απευθειας με τα objects σου.

Ξερω οτι υπαρχουν διαφορες λυσεις για binding αλλα εφαγα ενα κολλημα ξαφνικα και ηθελα να δοκιμασω μια ιδεα ακομα και αν υπαρχει.

Ο κωδικας που ειναι να γραψεις ,οπως φαινεται και στο demo package ,ειναι αυτος :

Code: Select all

@IsBean(type = "PersonBean")
public class PersonBean {

    @IsField(clazz = Integer.class, collumn = "ID", getter = "getId", setter = "setId")
    private Integer id;

    @IsField(clazz = String.class, collumn = "NAME", getter = "getName", setter = "setName")
    private String name;

    @IsField(clazz = Date.class, collumn = "LAST LOGIN", getter = "getLogin", setter = "setLogin")
    private Date login;

    @IsField(clazz = Boolean.class, collumn = "MALE", getter = "isMale", setter = "setMale")
    private Boolean male;

    ...... 
    (getters,setters,constructors)
και

Code: Select all

PersonBean[] beans = ..... ;
ITableRow[] rows = BeanManager.parse(beans, "PersonBean");
JTable table = new JTable(new DefaultTableBeanModel( rows ));
Δοκιμαστε το και give me feedback :)

Note 1: παιζει με reflection αν προτιμησει καποιος annotations.Αλλα μπορει να το αποφυγει κανοντας implement το ITableModel και γραφοντας τα CellPredicates με το χερι.CellPredicate ειναι κατι σαν adapter η bridge αναμεσα στα get και set του object και των get και set του TableModel ωστε να παρεχεται καποιου ειδους ανεξαρτησια.
Note 2: Στο demo το SAVE button σωζει τα MODEL objects (τα source beans οχι αυτα που βλεπει το table model) σε xml αρχειο και τα κανει load at startup.Αυτο υποτιθεται για να φανει οτι αλλαγες στο table προκαλουν αλλαγες και στα source objects.

Btw δεν υποτιθεται οτι ειναι safe.Το κρασαρεις ανετα με κακη χρηση.

Posted: Sun Dec 03, 2006 5:49 pm
by Tomahawk
link updated.


Btw επειδη αλλαγες στα model objects δεν εχουν τροπο να ενημερωσουν το tableModel οτι κατι αλλαξε ωστε να κανει refresh το view και να ειναι σχετικα bi-directional αν καποιος ενδιαφερετε πειτε μου να τη προσθεσω τη δυνατοτητα αυτη.

Aυτο το σκεπτικο ειναι υλοποιημενο ,καλυτερα προφανως, απο ενα api ονοματι GlazedLists.