TableBean - Simple Bean Binding [Need feedback]

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
Post Reply
User avatar
Tomahawk
Mbyte level
Mbyte level
Posts: 536
Joined: Tue May 18, 2004 1:50 pm

TableBean - Simple Bean Binding [Need feedback]

Post by Tomahawk » Fri Oct 27, 2006 4:02 am

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.Το κρασαρεις ανετα με κακη χρηση.
User avatar
Tomahawk
Mbyte level
Mbyte level
Posts: 536
Joined: Tue May 18, 2004 1:50 pm

Post by Tomahawk » Sun Dec 03, 2006 5:49 pm

link updated.


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

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

Return to “Προγραμματισμός”