/plugins/XSLT/tags/xslt-0_4_1/xslt/StylesheetParameterTableModel.java

#
Java | 237 lines | 122 code | 59 blank | 56 comment | 18 complexity | 6a49c62accb2f9739411a4bb4159d35a MD5 | raw file

✨ Summary
  1. /*
  2. * StylesheetParameterTableModel.java - Table model for XSL stylesheet parameters
  3. *
  4. * Copyright (c) 2003 Robert McKinnon
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU General Public License
  8. * as published by the Free Software Foundation; either version 2
  9. * of the License, or any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program; if not, write to the Free Software
  18. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  19. */
  20. package xslt;
  21. import org.gjt.sp.jedit.jEdit;
  22. import javax.swing.table.AbstractTableModel;
  23. import java.util.Iterator;
  24. import java.util.LinkedList;
  25. import java.util.List;
  26. /**
  27. * Table model for XSL stylesheet parameters.
  28. *
  29. * @author Robert McKinnon
  30. */
  31. public class StylesheetParameterTableModel extends AbstractTableModel {
  32. private static final String NAME = jEdit.getProperty("XSLTProcessor.parameters.name.header");
  33. private static final String VALUE = jEdit.getProperty("XSLTProcessor.parameters.value.header");
  34. private static final String[] COLUMN_NAMES = {NAME, VALUE};
  35. private static final int NAME_COL = 0;
  36. private static final int VALUE_COL = 1;
  37. /** List of instances of Parameter */
  38. private List parameterList = new LinkedList();
  39. /**
  40. * Removes all of the elements from this model. The model will
  41. * be empty after this call returns (unless it throws an exception).
  42. */
  43. public void clear() {
  44. int index = parameterList.size() - 1;
  45. parameterList.clear();
  46. if(index >= 0) {
  47. fireTableRowsDeleted(0, index);
  48. }
  49. }
  50. /**
  51. * Implements method from interface {@link javax.swing.table.TableModel}.
  52. */
  53. public int getColumnCount() {
  54. return COLUMN_NAMES.length;
  55. }
  56. /**
  57. * Implements method from interface {@link javax.swing.table.TableModel}.
  58. */
  59. public int getRowCount() {
  60. return parameterList.size();
  61. }
  62. /**
  63. * Implements method from interface {@link javax.swing.table.TableModel}.
  64. */
  65. public Object getValueAt(int row, int col) {
  66. Parameter parameter = getParameter(row);
  67. if(col == NAME_COL) {
  68. return parameter.getName();
  69. } else if(col == VALUE_COL) {
  70. return parameter.getValue();
  71. } else {
  72. throw new IllegalArgumentException();
  73. }
  74. }
  75. /**
  76. * Implements method from interface {@link javax.swing.table.TableModel}.
  77. */
  78. public boolean isCellEditable(int rowIndex, int columnIndex) {
  79. return true;
  80. }
  81. private Parameter getParameter(int row) {
  82. return (Parameter)parameterList.get(row);
  83. }
  84. public String getParameterName(int row) {
  85. return getParameter(row).getName();
  86. }
  87. public String getParameterValue(int row) {
  88. return getParameter(row).getValue();
  89. }
  90. /**
  91. * Overrides method from class {@link AbstractTableModel}.
  92. */
  93. public String getColumnName(int col) {
  94. return COLUMN_NAMES[col];
  95. }
  96. /**
  97. * Overrides method from class {@link AbstractTableModel}.
  98. */
  99. public Class getColumnClass(int col) {
  100. return String.class;
  101. }
  102. /**
  103. * Overrides method from class {@link AbstractTableModel}.
  104. */
  105. public void setValueAt(Object value, int row, int col) {
  106. Parameter parameter = getParameter(row);
  107. String text = (String)value;
  108. if(col == NAME_COL) {
  109. if(text.equals("")) {// delete parameter
  110. parameterList.remove(row);
  111. fireTableRowsDeleted(row, row);
  112. } else {
  113. row = removeDuplicates(text, row);
  114. parameter.setName(text);
  115. fireTableCellUpdated(row, col);
  116. }
  117. } else if(col == VALUE_COL) {
  118. parameter.setValue(text);
  119. fireTableCellUpdated(row, col);
  120. } else {
  121. throw new IllegalArgumentException();
  122. }
  123. }
  124. public void removeParameter(int row) {
  125. parameterList.remove(row);
  126. fireTableRowsDeleted(row, row);
  127. }
  128. /**
  129. * Adds a parameter to the table.
  130. */
  131. public void addParameter(String name, String value) {
  132. removeDuplicates("", -1);
  133. Parameter parameter = new Parameter(name, value);
  134. parameterList.add(parameter);
  135. int newRow = parameterList.size() - 1;
  136. fireTableRowsInserted(newRow, newRow);
  137. }
  138. private int removeDuplicates(String newName, int row) {
  139. Iterator iterator = parameterList.iterator();
  140. int i = 0;
  141. while(iterator.hasNext()) {
  142. Parameter parameter = (Parameter)iterator.next();
  143. if(parameter.getName().equals(newName) && i != row) {
  144. iterator.remove();
  145. row--;
  146. fireTableRowsDeleted(i, i);
  147. }
  148. i++;
  149. }
  150. return row;
  151. }
  152. /**
  153. * Class to hold parameter name and value information.
  154. */
  155. private class Parameter {
  156. private String name;
  157. private String value;
  158. public Parameter(String name, String value) {
  159. this.name = name;
  160. this.value = value;
  161. }
  162. public String getName() {
  163. return name;
  164. }
  165. public String getValue() {
  166. return value;
  167. }
  168. public void setName(String name) {
  169. this.name = name;
  170. }
  171. public void setValue(String value) {
  172. this.value = value;
  173. }
  174. public boolean hasNoName() {
  175. return name.equals("");
  176. }
  177. }
  178. }