View Javadoc

1   /*
2    * Copyright 2004-2008 the Seasar Foundation and the Others.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13   * either express or implied. See the License for the specific language
14   * governing permissions and limitations under the License.
15   */
16  package org.seasar.eclipse.common.viewer;
17  
18  import java.util.ArrayList;
19  import java.util.List;
20  
21  import org.eclipse.jface.viewers.CellEditor;
22  import org.eclipse.jface.viewers.ICellModifier;
23  import org.eclipse.jface.viewers.ITableLabelProvider;
24  import org.eclipse.jface.viewers.LabelProvider;
25  import org.eclipse.jface.viewers.TableViewer;
26  import org.eclipse.swt.graphics.Image;
27  import org.eclipse.swt.widgets.Item;
28  import org.seasar.framework.util.ArrayMap;
29  
30  /**
31   * @author taichi
32   * @see org.seasar.eclipse.common.viewer.ColumnDescriptor
33   */
34  public class TableProvider extends LabelProvider implements
35          ITableLabelProvider, ICellModifier {
36  
37      private ArrayMap columnDescs;
38  
39      private TableViewer viewer;
40  
41      public TableProvider(TableViewer viewer, ColumnDescriptor[] cds) {
42          this.viewer = viewer;
43          this.columnDescs = new ArrayMap(cds.length);
44          List<String> keys = new ArrayList<String>(cds.length);
45          List<CellEditor> editors = new ArrayList<CellEditor>(cds.length);
46          for (ColumnDescriptor cd : cds) {
47              String name = cd.getName();
48              if (columnDescs.containsKey(name)) {
49                  name = name + "@" + System.identityHashCode(cd);
50              }
51              this.columnDescs.put(name, cd);
52              keys.add(name);
53              editors.add(cd.getCellEditor());
54          }
55          this.viewer.setColumnProperties(keys.toArray(new String[keys
56                  .size()]));
57          this.viewer.setCellEditors(editors
58                  .toArray(new CellEditor[editors.size()]));
59          this.viewer.setCellModifier(this);
60      }
61  
62      protected ColumnDescriptor getDescriptor(String name) {
63          return (ColumnDescriptor) this.columnDescs.get(name);
64      }
65  
66      protected ColumnDescriptor getDescriptor(int index) {
67          return (ColumnDescriptor) this.columnDescs.get(index);
68      }
69  
70      /*
71       * (non-Javadoc)
72       * 
73       * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object,
74       *      int)
75       */
76      public Image getColumnImage(Object element, int columnIndex) {
77          ColumnDescriptor cd = getDescriptor(columnIndex);
78          return cd != null ? cd.getImage(element) : null;
79      }
80  
81      /*
82       * (non-Javadoc)
83       * 
84       * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object,
85       *      int)
86       */
87      public String getColumnText(Object element, int columnIndex) {
88          ColumnDescriptor cd = getDescriptor(columnIndex);
89          return cd != null ? cd.getText(element) : "";
90      }
91  
92      /*
93       * (non-Javadoc)
94       * 
95       * @see org.eclipse.jface.viewers.ICellModifier#canModify(java.lang.Object,
96       *      java.lang.String)
97       */
98      public boolean canModify(Object element, String property) {
99          ColumnDescriptor cd = getDescriptor(property);
100         return cd != null ? cd.canModify() : false;
101     }
102 
103     /*
104      * (non-Javadoc)
105      * 
106      * @see org.eclipse.jface.viewers.ICellModifier#getValue(java.lang.Object,
107      *      java.lang.String)
108      */
109     public Object getValue(Object element, String property) {
110         ColumnDescriptor cd = getDescriptor(property);
111         return cd != null ? cd.getValue(element) : null;
112     }
113 
114     /*
115      * (non-Javadoc)
116      * 
117      * @see org.eclipse.jface.viewers.ICellModifier#modify(java.lang.Object,
118      *      java.lang.String, java.lang.Object)
119      */
120     public void modify(Object element, String property, Object value) {
121         if (element instanceof Item) {
122             element = ((Item) element).getData();
123         }
124         ColumnDescriptor cd = getDescriptor(property);
125         if (cd != null) {
126             cd.setValue(element, value);
127             this.viewer.update(element, new String[] { property });
128         }
129     }
130 }