1 19 20 28 29 package org.netbeans.modules.xml.wsdl.ui.view; 30 31 import java.util.ArrayList ; 32 import java.util.Collection ; 33 import java.util.HashMap ; 34 import java.util.Iterator ; 35 import java.util.List ; 36 import java.util.Map ; 37 38 import javax.swing.table.AbstractTableModel ; 39 import javax.swing.table.DefaultTableModel ; 40 41 import org.netbeans.modules.xml.schema.model.GlobalSimpleType; 42 import org.netbeans.modules.xml.schema.model.Schema; 43 import org.netbeans.modules.xml.schema.model.SchemaModelFactory; 44 import org.openide.DialogDisplayer; 45 import org.openide.NotifyDescriptor; 46 import org.openide.util.NbBundle; 47 48 49 53 public class PartAndElementOrTypeTableModel extends AbstractTableModel { 54 55 private List <PartAndElementOrType> mPartAndElementOrTypeList = new ArrayList (); 56 private Map <String , String > namespaceToPrefixMap = new HashMap <String , String >(); 57 58 59 public PartAndElementOrTypeTableModel(Map <String , String > namespaceToPrefixMap) { 60 this.namespaceToPrefixMap = namespaceToPrefixMap; 61 } 62 63 public List <PartAndElementOrTypeTableModel.PartAndElementOrType> getPartAndElementOrType() { 64 return this.mPartAndElementOrTypeList; 65 } 66 67 public String getColumnName(int column) { 68 if(column == 0) { 69 return NbBundle.getMessage(PartAndElementOrTypeTableModel.class, "PartAndElementOrTypeTableMode.Column1.text"); 70 } else { 71 return NbBundle.getMessage(PartAndElementOrTypeTableModel.class, "PartAndElementOrTypeTableMode.Column2.text"); 72 } 73 } 74 75 public int getColumnCount() { 76 return 2; 77 } 78 79 public int getRowCount() { 80 return mPartAndElementOrTypeList.size(); 81 } 82 83 public Object getValueAt(int rowIndex, int columnIndex) { 84 PartAndElementOrType partAndElementOrType = mPartAndElementOrTypeList.get(rowIndex); 85 if(columnIndex == 0) { 86 return partAndElementOrType.getPartName(); 87 } else if(columnIndex == 1) { 88 return partAndElementOrType.getElementOrType(); 89 } 90 91 return "Missing Value"; 92 } 93 94 public void setValueAt(Object aValue, int rowIndex, int columnIndex) { 95 if (rowIndex < 0 || columnIndex < 0 || rowIndex >= getRowCount() || columnIndex >= getColumnCount()) 96 return; 97 PartAndElementOrTypeTableModel.PartAndElementOrType item = this.mPartAndElementOrTypeList.get(rowIndex); 98 if(columnIndex == 0) { 99 String partName = (String ) aValue; 100 String oldPartName = (String ) this.getValueAt(rowIndex, 0); 101 if (oldPartName != null && oldPartName.equals(partName)) return; 102 if(isPartNameExists(partName)) { 103 NotifyDescriptor.Message nd = new NotifyDescriptor.Message("Part \""+ partName + " is already exist ", NotifyDescriptor.WARNING_MESSAGE); 104 DialogDisplayer.getDefault().notify(nd); 105 } else if(!isValidPartName(partName)) { 106 NotifyDescriptor.Message nd = new NotifyDescriptor.Message("Name \"" + partName + "\" is not a valid NCName", NotifyDescriptor.WARNING_MESSAGE); 107 DialogDisplayer.getDefault().notify(nd); 108 109 } else { 110 111 item.setPartName(partName); 112 } 113 } else if(columnIndex == 1) { 114 if(aValue instanceof ElementOrType) { 115 ElementOrType eorT = (ElementOrType) aValue; 116 item.setElementOrType(eorT); 117 } 118 119 } 122 fireTableCellUpdated(rowIndex, columnIndex); 123 124 } 125 126 public boolean isCellEditable(int row, int col) { 127 return true; 128 } 129 130 136 public Class getColumnClass(int c) { 137 return getValueAt(0, c).getClass(); 138 } 139 140 public void removeSelectedRow(int row) { 141 int size = this.mPartAndElementOrTypeList.size(); 142 if(row >= size) { 143 throw new IllegalArgumentException ("can not delete row "+ row+1 +"total rows are"+ size); 144 } 145 146 this.mPartAndElementOrTypeList.remove(row); 147 super.fireTableRowsDeleted(row, row); 148 } 149 150 public void addNewRow() { 151 GlobalSimpleType stringSimpleType = null; 153 Schema schema = SchemaModelFactory.getDefault().getPrimitiveTypesModel().getSchema(); 154 Collection <GlobalSimpleType> simpleTypes = schema.getSimpleTypes(); 155 for (GlobalSimpleType st : simpleTypes) { 156 if (st.getName().equals("string")) { 157 stringSimpleType = st; 158 break; 159 } 160 } 161 162 163 PartAndElementOrType p = new PartAndElementOrType(generateUniquePartName(), 164 new ElementOrType(stringSimpleType, namespaceToPrefixMap)); 165 this.mPartAndElementOrTypeList.add(p); 166 int row = this.mPartAndElementOrTypeList.indexOf(p); 167 super.fireTableRowsInserted(row, row); 168 } 169 170 private String generateUniquePartName() { 171 String newNamePrefix = "part"; 172 int counter = 1; 173 String generatedName = newNamePrefix + counter++; 174 175 while(isPartNameExists(generatedName)) { 176 generatedName = newNamePrefix + counter++; 177 } 178 179 return generatedName; 180 } 181 182 private boolean isPartNameExists(String newPartName) { 183 Iterator <PartAndElementOrType> it = this.mPartAndElementOrTypeList.iterator(); 184 while(it.hasNext()) { 185 PartAndElementOrType row = it.next(); 186 String partName = row.getPartName(); 187 if(partName != null && partName.equals(newPartName)) { 189 return true; 190 } 191 } 192 193 return false; 194 } 195 196 private boolean isValidPartName(String newPartName) { 197 return org.netbeans.modules.xml.xam.dom.Utils.isValidNCName(newPartName); 198 } 199 200 public class PartAndElementOrType { 201 202 private String mPartName; 203 204 private ElementOrType mElementOrType; 205 206 public PartAndElementOrType(String partName, ElementOrType elementOrType) { 207 this.mPartName = partName; 208 this.mElementOrType = elementOrType; 209 } 210 211 public String getPartName() { 212 return this.mPartName; 213 } 214 215 public void setPartName(String partName) { 216 this.mPartName = partName; 217 } 218 219 public ElementOrType getElementOrType() { 220 return this.mElementOrType; 221 } 222 223 public void setElementOrType(ElementOrType elementOrType) { 224 this.mElementOrType = elementOrType; 225 } 226 } 227 228 } 229 | Popular Tags |