Merge branch 'master' into changeSignature
[idea/community.git] / plugins / groovy / src / org / jetbrains / plugins / groovy / refactoring / changeSignature / GrParameterTableModel.java
1 /*
2  * Copyright 2000-2010 JetBrains s.r.o.
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, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.jetbrains.plugins.groovy.refactoring.changeSignature;
17
18 import com.intellij.ui.RowEditableTableModel;
19 import org.jetbrains.annotations.Nullable;
20 import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter;
21 import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod;
22 import org.jetbrains.plugins.groovy.refactoring.GroovyRefactoringBundle;
23
24 import javax.swing.table.AbstractTableModel;
25 import java.util.ArrayList;
26 import java.util.List;
27
28 /**
29  * @author Maxim.Medvedev
30  */
31 public class GrParameterTableModel extends AbstractTableModel implements RowEditableTableModel {
32   private final List<GrParameterInfo> infos;
33   private final GrMethod myMethod;
34   private final GrChangeSignatureDialog myDialog;
35
36
37   public GrParameterTableModel(GrMethod method, GrChangeSignatureDialog dialog) {
38     myMethod = method;
39     myDialog = dialog;
40     final GrParameter[] parameters = myMethod.getParameters();
41     infos = new ArrayList<GrParameterInfo>(parameters.length);
42     for (int i = 0; i < parameters.length; i++) {
43       GrParameter parameter = parameters[i];
44       infos.add(new GrParameterInfo(parameter, i));
45     }
46   }
47
48   public void addRow() {
49     final int row = infos.size();
50     infos.add(new GrParameterInfo());
51     fireTableRowsInserted(row, row);
52   }
53
54   public void removeRow(int index) {
55     infos.remove(index);
56     fireTableRowsDeleted(index, index);
57   }
58
59   public void exchangeRows(int index1, int index2) {
60     final GrParameterInfo info = infos.get(index1);
61     infos.set(index1, infos.get(index2));
62     infos.set(index2, info);
63     fireTableRowsUpdated(Math.min(index1, index2), Math.max(index1, index2));
64   }
65
66
67   public int getRowCount() {
68     return infos.size();
69   }
70
71   public int getColumnCount() {
72     return 4;
73   }
74
75   @Nullable
76   public Object getValueAt(int rowIndex, int columnIndex) {
77     if (rowIndex < 0 || rowIndex >= infos.size()) return null;
78     final GrParameterInfo info = infos.get(rowIndex);
79     switch (columnIndex) {
80       case 0:
81         return info.getType();
82       case 1:
83         return info.getName();
84       case 2:
85         return info.getDefaultInitializer();
86       case 3:
87         return info.getDefaultValue();
88       default:
89         throw new IllegalArgumentException();
90     }
91   }
92
93   @Override
94   public void setValueAt(Object value, int rowIndex, int columnIndex) {
95     if (rowIndex < 0 || rowIndex >= infos.size()) return;
96     if (columnIndex < 0 || columnIndex > 3) return;
97
98     String s = value instanceof String ? (String)value : "";
99     s = s.trim();
100     final GrParameterInfo info = infos.get(rowIndex);
101     switch (columnIndex) {
102       case 0:
103         info.setType(s);
104       case 1:
105         info.setName(s);
106       case 2:
107         info.setDefaultInitializer(s);
108       case 3:
109         info.setDefaultValue(s);
110     }
111     fireTableCellUpdated(rowIndex, columnIndex);
112   }
113
114
115   @Override
116   public String getColumnName(int column) {
117     switch (column) {
118       case 0:
119         return GroovyRefactoringBundle.message("column.name.type");
120       case 1:
121         return GroovyRefactoringBundle.message("column.name.name");
122       case 2:
123         return GroovyRefactoringBundle.message("column.name.default.initializer");
124       case 3:
125         return GroovyRefactoringBundle.message("column.name.default.value");
126       default:
127         throw new IllegalArgumentException();
128     }
129   }
130
131   @Override
132   public Class<?> getColumnClass(int columnIndex) {
133     if (columnIndex < 0 || columnIndex > 3) throw new IllegalArgumentException();
134     return String.class;
135   }
136
137   
138 }