All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nom.tam.fits.TableData Maven / Gradle / Ivy

package nom.tam.fits;

import nom.tam.util.ComplexValue;

/*
 * #%L
 * nom.tam FITS library
 * %%
 * Copyright (C) 2004 - 2024 nom-tam-fits
 * %%
 * This is free and unencumbered software released into the public domain.
 *
 * Anyone is free to copy, modify, publish, use, compile, sell, or
 * distribute this software, either in source code form or as a compiled
 * binary, for any purpose, commercial or non-commercial, and by any
 * means.
 *
 * In jurisdictions that recognize copyright laws, the author or authors
 * of this software dedicate any and all copyright interest in the
 * software to the public domain. We make this dedication for the benefit
 * of the public at large and to the detriment of our heirs and
 * successors. We intend this dedication to be an overt act of
 * relinquishment in perpetuity of all present and future rights to this
 * software under copyright law.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 * #L%
 */

/**
 * 

* Interface for accessing binary and ASCII table data. *

*

* Note, that this interface is the big sister {@link nom.tam.util.DataTable}, with nearly identical method signstures. * But there are differences too, such as the type of argument of setting row data, and when and what excpetions are * thrown. This one also has includes additional methods for table manipulation. Overall it would have been a more * prudent design to consolidate the two interfaces but this is what we have so we stick to it. However, mabe this is * something an upcoming major release may address... *

* * @see nom.tam.util.DataTable */ public interface TableData { /** * Add a column to the table, without updating the header of an encompassing HDU. You should not use this method on * tables already in an HDU, since it will not update the HDUs headers. Instead you can either use * {@link TableHDU#addColumn(Object)} or else create a new HDU for the table once the editing is copmleted -- adding * or migrating any custom header entries as necessary after. * * @param newCol the new column information. it should be either a primitive array, in which each element * stores a scalar value for every row, or else an Object[] where type of all * of the constituents is identical. Multidimensional data should have the same layout in * each row, but varied length one-dimensional arrays are OK. The arrat's length must * match the number of rows already contained in the table, unless the table is still * empty. * * @return the number of columns in the adapted table * * @see TableHDU#addColumn(Object) * @see #deleteColumns(int, int) * @see #addRow(Object[]) * * @throws FitsException if the operation failed */ int addColumn(Object newCol) throws FitsException; /** * Add a row at the end of the table without updating the header of an encompassing HDU. You should not use this * method on tables already in an HDU, since it will not update the HDUs headers. Instead you can use * {@link TableHDU#addRow(Object[])} or else create a new HDU for the table once the editing is completed -- adding * or migrating any custom header entries as necessary after. * * @param newRow An array of elements to be added. Each element of o should be an array of primitives or a * String. * * @throws FitsException if the operation failed * * @return the number of rows in the adapted table * * @see TableHDU#addColumn(Object) * @see #setRowEntries(int, Object...) * @see #deleteRows(int, int) * @see #addColumn(Object) */ int addRow(Object[] newRow) throws FitsException; /** * Like {@link #addRow(Object[])}, but with a vararg list of row entries. * * @param entries A vararg list of elements to be added. Each element of o should be an array of primitives * or a String. * * @throws FitsException if the operation failed * * @return the number of rows in the adapted table * * @see #setRow(int, Object[]) * @see #addRowEntries(Object...) * @see #deleteRows(int, int) */ default int addRowEntries(Object... entries) throws FitsException { return addRow(entries); } /** * Removes a set of consecutive columns from this table, without updating assocu=iated the header information for * the columns that were removed. You should not use this method on tables already in an HDU, since it will not * update the HDUs headers. Instead you should always create a new HDU for the table after editing, adding or * migrating any custom header entries as necessary after. * * @param col the 0-based index of the first column to remove * @param len the number of subsequent columns to remove * * @throws FitsException if the table could not be modified * * @see #addColumn(Object) * @see #deleteRows(int, int) * @see #updateAfterDelete(int, Header) */ void deleteColumns(int col, int len) throws FitsException; /** * Removes a set of consecutive rows from this table without updating any associated header information for an * encompassing HDU. You should not use this method on tables already in an HDU, since it will not update the HDUs * headers. Instead you should always create a new HDU for the table after editing, adding or migrating any custom * header entries as necessary after. * * @param row the 0-based index of the first row to remove * @param len the number of subsequent rows to remove * * @throws FitsException if the table could not be modified * * @see #addRow(Object[]) * @see #deleteColumns(int, int) */ void deleteRows(int row, int len) throws FitsException; /** *

* Returns the data for a particular column in as an array of elements. See {@link #addColumn(Object)} for more * information about the format of data elements in general. *

* * @param col The 0-based column index. * * @return an array of primitives (for scalar columns), or else an Object[] array, or * possibly null * * @throws FitsException if the table could not be accessed * * @see #setColumn(int, Object) * @see #getElement(int, int) * @see #getNCols() */ Object getColumn(int col) throws FitsException; /** *

* Returns the data element in this table. Elements are always stored as arrays even when scalar types. Thus a * single double value will be returned as a double[1]. For most column types the storage * type of the array matches that of their native Java type, but there are exceptions: *

*
    *
  • Character arrays in FITS are stored as byte[] or short[], depending on the * {@link nom.tam.fits.FitsFactory#setUseUnicodeChars(boolean)} setting, not unicode Java char[]. * Therefore, this call will return byte[] or short[], the same as for a byte or 16-bit * integer array. As a result if a new table is created with the returned data, the new table column will change its * FITS column type from A to B or I.
  • *
  • Complex values in FITS are stored as float[2] or double[2], not as a * {@link ComplexValue} type. Therefore, this call will return float[] or double[], the * same as for a float array. As a result if a new table is created with the returned data, the new table column * will change it's FITS column type from C to F, or from M to * D,.
  • *
* * @param row the 0-based row index of the element * @param col the 0-based column index of the element * * @return A primitive array containing the data for the the specified (row, col) entry in the table. * * @throws FitsException if the table could not be accessed * * @see #setElement(int, int, Object) * @see #getNRows() * @see #getNCols() */ Object getElement(int row, int col) throws FitsException; /** * Returns the number of columns contained in this table. * * @return the current number of columns in the table. * * @see #getNRows() * @see #getColumn(int) * @see #setColumn(int, Object) */ int getNCols(); /** * Returns the number of columns contained in this table. * * @return the current number of columns in the table. * * @see #getNRows() * @see #getColumn(int) * @see #setColumn(int, Object) */ int getNRows(); /** * Returns an array of elements in a particualr table row. See {@link #getElement(int, int)} for more information * about the format of each element in the row. * * @param row the 0-based row index * * @return an object containing the row data (for all column) of the specified row, or possubly * null. See {@link #getElement(int, int)} for more information about the * format of each element in the row. * * @throws FitsException if the table could not be accessed * * @see #getNRows() * @see #setRow(int, Object[]) * @see #getColumn(int) * @see #getElement(int, int) */ Object[] getRow(int row) throws FitsException; /** * Sets new data for a table column. See {@link #addColumn(Object)} for more information on the column data format. * * @param col the 0-based column index * @param newCol an object containing the new column data (for all rows) of the specified column. See * {@link #getColumn(int)} for more information on the column data format. * * @throws FitsException if the table could not be modified * * @see #getNCols() * @see #getColumn(int) * @see #setRow(int, Object[]) * @see #setElement(int, int, Object) */ void setColumn(int col, Object newCol) throws FitsException; /** * Sets new data element in this table. See {@link #getElement(int, int)} for more information about the format of * elements. * * @param row the 0-based row index of the element * @param col the 0-based column index of the element * @param element the new element at the specified table location as a primitive array. * * @throws FitsException if the table could not be modified * * @see #getElement(int, int) * @see #getNRows() * @see #getNCols() */ void setElement(int row, int col, Object element) throws FitsException; /** * Sets new data for a table row. See {@link #getElement(int, int)} for more information about the format of * elements. * * @param row the 0-based row index * @param newRow an object containing the row data (for all column) of the specified row. See * {@link #getElement(int, int)} for more information about the format of each element in * the row. * * @throws FitsException if the table could not be modified * * @see #setRowEntries(int, Object...) * @see #getNRows() * @see #getRow(int) * @see #setColumn(int, Object) * @see #setElement(int, int, Object) */ void setRow(int row, Object[] newRow) throws FitsException; /** * Like {@link #setRow(int, Object[])} but with vararg list of entries. * * @param row the 0-based row index * @param entries an object containing the row data (for all column) of the specified row. See * {@link #getElement(int, int)} for more information about the format of each element in * the row. * * @throws FitsException if the table could not be modified * * @see #setRow(int, Object[]) * @see #addRowEntries(Object...) * @see #setElement(int, int, Object) */ default void setRowEntries(int row, Object... entries) throws FitsException { setRow(row, entries); } /** * Updates the table dimensions in the header following deletion. Whoever calls {@link #deleteColumns(int, int)} on * this table should call this method after the deletion(s), at least once after all desired column deletions have * been processed). * * @param oldNcol The number of columns in the table before the first call to * {@link #deleteColumns(int, int)}. * @param hdr The table header * * @throws FitsException if the header could not be updated * * @deprecated It is not entirely foolproof for keeping the header in sync -- it is better to (re)wrap * tables in a new HDU after column deletions, and then edit the new header as * necessary to incorporate custom entries. May be removed from the API in the future. */ void updateAfterDelete(int oldNcol, Header hdr) throws FitsException; }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy