public int getColumnIndex(String columnName) { String[] standardColumnNames = getStandardColumnNames(); int index = Arrays.binarySearch(standardColumnNames, columnName); if(index < 0) { int elementIndex = ArrayUtils.getElementIndex(columnName, getAdditionalColumnNames()); if (elementIndex >= 0) { index = standardColumnNames.length + elementIndex; } } return index; }
public String[] getAdditionalColumnNames() { String[] standardColumnNames = getStandardColumnNames(); int columnCount = getColumnCount(); final int columnCountMin = standardColumnNames.length; String[] additionalColumnNames = new String[columnCount - columnCountMin]; for (int i = 0; i < additionalColumnNames.length; i++) { additionalColumnNames[i] = getColumnName(columnCountMin + i); } return additionalColumnNames; }
public void removePlacemarkAt(int index) { if (placemarkList.size() > index) { final Placemark placemark = placemarkList.get(index); removePlacemark(placemark); } }
@Override public Object getValueAt(int rowIndex, int columnIndex) { if (columnIndex < getStandardColumnNames().length) { return getStandardColumnValueAt(rowIndex, columnIndex); } return getAdditionalValue(rowIndex, columnIndex); }
@Override public String getColumnName(int columnIndex) { if (columnIndex < getStandardColumnNames().length) { return getStandardColumnNames()[columnIndex]; } int newIndex = columnIndex - getStandardColumnNames().length; if (newIndex < getNumSelectedBands()) { return selectedBands[newIndex].getName(); } newIndex -= getNumSelectedBands(); if (selectedGrids != null && newIndex < selectedGrids.length) { return selectedGrids[newIndex].getName(); } return "?"; }
private void writePlacemarkDataTableText(final Writer writer) { String[] additionalColumnNames = placemarkTableModel.getAdditionalColumnNames(); String[] standardColumnNames = placemarkTableModel.getStandardColumnNames(); int columnCount = placemarkTableModel.getColumnCount(); List<Placemark> placemarkList = new ArrayList<>(); List<Object[]> valueList = new ArrayList<>(); for (int sortedRow = 0; sortedRow < placemarkTable.getRowCount(); ++sortedRow) { ListSelectionModel selectionModel = placemarkTable.getSelectionModel(); if (selectionModel.isSelectionEmpty() || selectionModel.isSelectedIndex(sortedRow)) { final int modelRow = placemarkTable.convertRowIndexToModel(sortedRow); placemarkList.add(placemarkTableModel.getPlacemarkAt(modelRow)); Object[] values = new Object[columnCount]; for (int col = 0; col < columnCount; col++) { values[col] = placemarkTableModel.getValueAt(modelRow, col); } valueList.add(values); } } PlacemarkIO.writePlacemarksWithAdditionalData(writer, placemarkDescriptor.getRoleLabel(), product.getName(), placemarkList, valueList, standardColumnNames, additionalColumnNames); }
@Override public void setValueAt(Object value, int rowIndex, int columnIndex) { if (value == null) { return; } if (columnIndex < getStandardColumnNames().length) { Placemark placemark = placemarkList.get(rowIndex); if (columnIndex == 0) { setPixelPosX(value, placemark); } else if (columnIndex == 1) { setPixelPosY(value, placemark); } else if (columnIndex == 2) { this.setGeoPosLon(value, placemark); } else if (columnIndex == 3) { setGeoPosLat(value, placemark); } else if (columnIndex == getStandardColumnNames().length - 1) { String strValue = value.toString(); placemark.setLabel(strValue); } else { throw new IllegalStateException( "Column[" + columnIndex + "] '" + getColumnName(columnIndex) + "' is not editable"); } } }
private List<PlacemarkData> getExtraDataFromTable(List<Placemark> placemarkList) { List<PlacemarkData> list = new ArrayList<>(); String[] additionalColumnNames = placemarkTableModel.getAdditionalColumnNames(); for (int rowIndex= 0; rowIndex < placemarkTableModel.getRowCount(); rowIndex++) { Placemark placemark = placemarkTableModel.getPlacemarkAt(rowIndex); if (placemarkList.contains(placemark)) { Map<String, Object> extraData = new LinkedHashMap<>(); for (String additionalColumnName : additionalColumnNames) { int columnIndex = placemarkTableModel.getColumnIndex(additionalColumnName); if (columnIndex >= 0) { Object valueAt = placemarkTableModel.getValueAt(rowIndex, columnIndex); extraData.put(additionalColumnName, valueAt); } } list.add(new PlacemarkData(placemark, extraData.isEmpty() ? null : extraData)); } } return list; }
@Override public int getColumnCount() { int count = getStandardColumnNames().length; if (selectedBands != null) { count += selectedBands.length; } if (selectedGrids != null) { count += selectedGrids.length; } return count; }
public void setProduct(Product product) { if (this.product == product) { return; } if (this.product != null) { this.product.removeProductNodeListener(placemarkListener); } this.product = product; if (this.product != null) { this.product.addProductNodeListener(placemarkListener); } placemarkList.clear(); initPlacemarkList(this.product); selectedBands = new Band[0]; selectedGrids = new TiePointGrid[0]; fireTableStructureChanged(); }
public void setSelectedBands(Band[] selectedBands) { this.selectedBands = selectedBands != null ? selectedBands : new Band[0]; fireTableStructureChanged(); }
public boolean addPlacemark(Placemark placemark) { if (placemarkList.add(placemark)) { final int insertedRowIndex = placemarkList.indexOf(placemark); fireTableRowsInserted(insertedRowIndex, insertedRowIndex); return true; } return false; }
public boolean removePlacemark(Placemark placemark) { final int index = placemarkList.indexOf(placemark); if (index != -1) { placemarkList.remove(placemark); fireTableRowsDeleted(index, index); return true; } return false; }
private void fireTableDataChanged(ProductNodeEvent event) { if (event.getSourceNode() instanceof Placemark) { Placemark placemark = (Placemark) event.getSourceNode(); // BEAM-1117: VISAT slows down using pins with GCP geo-coded images final int index = placemarkList.indexOf(placemark); if (index != -1) { AbstractPlacemarkTableModel.this.fireTableRowsUpdated(index, index); } } } }
@Override public void nodeDataChanged(ProductNodeEvent event) { if (event.getSourceNode() instanceof Band) { Band sourceBand = (Band) event.getSourceNode(); if (selectedBands != null) { for (Band band : selectedBands) { if (band == sourceBand) { AbstractPlacemarkTableModel.this.fireTableDataChanged(); return; } } } } if (event.getSourceNode() instanceof TiePointGrid) { TiePointGrid sourceTPG = (TiePointGrid) event.getSourceNode(); if (selectedGrids != null) { for (TiePointGrid tpg : selectedGrids) { if (tpg == sourceTPG) { AbstractPlacemarkTableModel.this.fireTableDataChanged(); return; } } } } }
@Override public void nodeAdded(ProductNodeEvent event) { ProductNode sourceNode = event.getSourceNode(); if (sourceNode instanceof Placemark && sourceNode.getOwner() == placemarkDescriptor.getPlacemarkGroup( product)) { placemarkTableModel.addPlacemark((Placemark) sourceNode); updateUIState(); } }
private Object getAdditionalValue(int rowIndex, int columnIndex) { final Placemark placemark = placemarkList.get(rowIndex); int index = columnIndex - getStandardColumnNames().length; final Object defaultGeometry = placemark.getFeature().getDefaultGeometry(); if (!(defaultGeometry instanceof Point)) { Point2D.Double sceneCoords = new Point2D.Double(point.getX(), point.getY()); if (index < getNumSelectedBands()) { final Band band = selectedBands[index]; final AffineTransform modelToImageTransform; index -= getNumSelectedBands(); if (index < selectedGrids.length) { final TiePointGrid grid = selectedGrids[index];
@Override public Class getColumnClass(int columnIndex) { if (columnIndex >= 0 && columnIndex < getStandardColumnNames().length - 1) { return Double.class; } return Object.class; }
public void setSelectedGrids(TiePointGrid[] selectedGrids) { this.selectedGrids = selectedGrids != null ? selectedGrids : new TiePointGrid[0]; fireTableStructureChanged(); }
@Override public void nodeRemoved(ProductNodeEvent event) { ProductNode sourceNode = event.getSourceNode(); if (sourceNode instanceof Placemark) { final Placemark placemark = (Placemark) sourceNode; removePlacemarksFromRelatedPlacemarks(placemark); if (sourceNode.getOwner() == placemarkDescriptor.getPlacemarkGroup(product)) { placemarkTableModel.removePlacemark(placemark); int selectedRow = placemarkTable.getSelectedRow(); if (selectedRow >= getPlacemarkGroup(product).getNodeCount()) { selectedRow = getPlacemarkGroup(product).getNodeCount() - 1; } if (selectedRow >= 0) { placemarkTable.getSelectionModel().setSelectionInterval(selectedRow, selectedRow); } updateUIState(); } } }