001    /*
002     * Copyright 2002-2006 the original author or authors.
003     * 
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005     * use this file except in compliance with the License. You may obtain a copy of
006     * the License at
007     * 
008     * http://www.apache.org/licenses/LICENSE-2.0
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012     * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013     * License for the specific language governing permissions and limitations under
014     * the License.
015     */
016    package org.springframework.richclient.samples.simple.ui;
017    
018    import javax.swing.JTable;
019    import javax.swing.table.TableColumnModel;
020    
021    import org.springframework.richclient.samples.simple.domain.Contact;
022    import org.springframework.richclient.samples.simple.domain.ContactDataStore;
023    import org.springframework.richclient.table.support.AbstractObjectTable;
024    
025    /**
026     * This class provides a concrete implementation of a table showing {@link Contact} objects.
027     * @author lstreepy
028     */
029    public class ContactTable extends AbstractObjectTable {
030    
031            /** The data store holding all our contacts. */
032            private ContactDataStore dataStore;
033    
034            /**
035             * Default constructor.
036             */
037            public ContactTable(ContactDataStore dataStore) {
038                    super("contacts", new String[] { "lastName", "firstName", "address.address1", "address.city", "address.state",
039                                    "address.zip" });
040                    this.dataStore = dataStore;
041            }
042    
043            protected void configureTable(JTable table) {
044                    // Adjust the table column widths
045                    TableColumnModel tcm = table.getColumnModel();
046                    tcm.getColumn(0).setPreferredWidth(100);
047                    tcm.getColumn(1).setPreferredWidth(100);
048                    tcm.getColumn(2).setPreferredWidth(200);
049                    tcm.getColumn(3).setPreferredWidth(50);
050                    tcm.getColumn(4).setPreferredWidth(10);
051                    tcm.getColumn(5).setPreferredWidth(50);
052            }
053    
054            /**
055             * Provide the initial data for the table. Note that this is hard coded for this sample. You would normally access a
056             * persistent store, or some other source to get the data for the table.
057             */
058            protected Object[] getDefaultInitialData() {
059                    return dataStore.getAllContacts();
060            }
061    
062            /**
063             * Get the array of selected Contact objects in the table.
064             * @return array of Contacts, zero length if nothing is selected
065             */
066            public Contact[] getSelectedContacts() {
067                    int[] selected = getTable().getSelectedRows();
068                    Contact[] contacts = new Contact[selected.length];
069                    for (int i = 0; i < selected.length; i++) {
070                            contacts[i] = (Contact) getTableModel().getElementAt(selected[i]);
071                    }
072                    return contacts;
073            }
074    
075            public Contact getSelectedContact() {
076                    return (Contact) getSelectedContacts()[0];
077            }
078    }