change signature dialog
[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.openapi.project.Project;
19 import com.intellij.psi.PsiCodeFragment;
20 import com.intellij.ui.RowEditableTableModel;
21 import org.jetbrains.annotations.Nullable;
22 import org.jetbrains.plugins.groovy.debugger.fragments.GroovyCodeFragment;
23 import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter;
24 import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod;
25 import org.jetbrains.plugins.groovy.refactoring.GroovyRefactoringBundle;
26
27 import javax.swing.table.AbstractTableModel;
28 import java.util.ArrayList;
29 import java.util.List;
30
31 /**
32  * @author Maxim.Medvedev
33  */
34 public class GrParameterTableModel extends AbstractTableModel implements RowEditableTableModel {
35   private final List<GrParameterInfo> infos;
36   private final GrMethod myMethod;
37   private final GrChangeSignatureDialog myDialog;
38   private final Project myProject;
39
40   public GrParameterTableModel(GrMethod method, GrChangeSignatureDialog dialog, Project project) {
41     myMethod = method;
42     myDialog = dialog;
43     final GrParameter[] parameters = myMethod.getParameters();
44     infos = new ArrayList<GrParameterInfo>(parameters.length);
45     for (int i = 0; i < parameters.length; i++) {
46       GrParameter parameter = parameters[i];
47       infos.add(new GrParameterInfo(parameter, i));
48     }
49     myProject=project;
50   }
51
52   public void addRow() {
53     final int row = infos.size();
54     infos.add(new GrParameterInfo(myProject, myMethod));
55     fireTableRowsInserted(row, row);
56   }
57
58   public void removeRow(int index) {
59     infos.remove(index);
60     fireTableRowsDeleted(index, index);
61   }
62
63   public void exchangeRows(int index1, int index2) {
64     final GrParameterInfo info = infos.get(index1);
65     infos.set(index1, infos.get(index2));
66     infos.set(index2, info);
67     fireTableRowsUpdated(Math.min(index1, index2), Math.max(index1, index2));
68   }
69
70
71   public int getRowCount() {
72     return infos.size();
73   }
74
75   public int getColumnCount() {
76     return 4;
77   }
78
79   @Nullable
80   public Object getValueAt(int rowIndex, int columnIndex) {
81     if (rowIndex < 0 || rowIndex >= infos.size()) return null;
82     final GrParameterInfo info = infos.get(rowIndex);
83     switch (columnIndex) {
84       case 0:
85         return info.getType();
86       case 1:
87         return info.getName();
88       case 2:
89         return info.getDefaultInitializer();
90       case 3:
91         return info.getDefaultValue();
92       default:
93         throw new IllegalArgumentException();
94     }
95   }
96
97   @Override
98   public void setValueAt(Object value, int rowIndex, int columnIndex) {
99     if (rowIndex < 0 || rowIndex >= infos.size()) return;
100     if (columnIndex < 0 || columnIndex > 3) return;
101
102     /*String s = value instanceof String ? (String)value : "";
103     s = s.trim();
104     final GrParameterInfo info = infos.get(rowIndex);
105     switch (columnIndex) {
106       case 0:
107         info.setType(s);
108       case 1:
109         info.setName(s);
110       case 2:
111         info.setDefaultInitializer(s);
112       case 3:
113         info.setDefaultValue(s);
114     }*/
115     fireTableCellUpdated(rowIndex, columnIndex);
116   }
117
118
119   @Override
120   public String getColumnName(int column) {
121     switch (column) {
122       case 0:
123         return GroovyRefactoringBundle.message("column.name.type");
124       case 1:
125         return GroovyRefactoringBundle.message("column.name.name");
126       case 2:
127         return GroovyRefactoringBundle.message("column.name.default.initializer");
128       case 3:
129         return GroovyRefactoringBundle.message("column.name.default.value");
130       default:
131         throw new IllegalArgumentException();
132     }
133   }
134
135   @Override
136   public Class<?> getColumnClass(int columnIndex) {
137     switch (columnIndex) {
138       case 0:
139         return PsiCodeFragment.class;
140       case 1:
141       case 2:
142       case 3:
143         return GroovyCodeFragment.class;
144       default:
145         throw  new IllegalArgumentException();
146     }
147   }
148
149   @Override
150   public boolean isCellEditable(int rowIndex, int columnIndex) {
151     return true;
152   }
153
154   public List<GrParameterInfo> getParameterInfos() {
155     return infos;
156   }
157 }