public class FTableScrollPane extends javax.swing.JPanel implements java.io.Serializable, FormComponent, DBComponent, JspConvertable, FormDependentComponent, MultiLanguage
Modifier and Type | Class and Description |
---|---|
class |
FTableScrollPane.TableChangeListener |
class |
FTableScrollPane.TableMouseListener |
javax.swing.JPanel.AccessibleJPanel
javax.swing.JComponent.AccessibleJComponent
listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
Constructor and Description |
---|
FTableScrollPane() |
Modifier and Type | Method and Description |
---|---|
void |
addCellEditorListener(javax.swing.event.CellEditorListener l) |
void |
addListSelectionListener(javax.swing.event.ListSelectionListener x)
Deprecated.
|
void |
addMouseListener(java.awt.event.MouseListener l) |
void |
addQuoteComponent(java.awt.Component com) |
void |
addRowIndexColumn() |
void |
addTableColumnModelListener(javax.swing.event.TableColumnModelListener l) |
void |
addTableModelListener(javax.swing.event.TableModelListener l) |
void |
clear()
Clear all cell value in the table
|
void |
deleteRow(int row)
Delete the 'row data' at the 'row' index
|
void |
editingStopped()
Deprecated.
|
void |
fireTableStructureChanged() |
int |
getActualRowCount()
Ignore automatically added empty row and return actual row count.
|
java.awt.Color |
getBackground()
Deprecated.
|
java.awt.Color |
getCellBorderColor() |
int |
getCellBorderWidth() |
javax.swing.table.TableCellEditor |
getCellEditor(int row,
int column)
Return an appropriate editor for the cell specified
by this this row and column.
|
java.util.Vector |
getCheckedRows() |
int[] |
getColHiding()
for obtaining an array of hiding cols id
|
java.lang.String[] |
getColHidingByName()
for obtaining an array of hiding cols' name
|
ColumnsHeaderNodeVector |
getColumnNodeVector()
Get the column information
|
ColumnsHeaderNodeVector |
getColumnNodeVectorWithoutCheckAll()
return column information without checkAll column.
|
java.lang.String[] |
getContentItems() |
java.lang.String |
getContentItemValue(java.lang.String contentItem) |
DatatablesConfig |
getDatatablesConfig() |
java.lang.String |
getDatatablesConfigJson() |
DBSave |
getDBSave() |
java.lang.Object |
getDBValue() |
DBSave |
getDefaultDBSave() |
int |
getEditingColumn()
This returns the index of the editing column.
|
int |
getEditingRow()
This returns the index of the editing row.
|
java.awt.Color |
getEvenRowColor() |
int |
getFBorder() |
java.awt.Font |
getFont()
Deprecated.
|
java.awt.Color |
getForeground()
Deprecated.
|
Form |
getForm() |
java.awt.Color |
getHeaderColor() |
java.lang.Object |
getHideColValueAt(int row,
java.lang.String colName)
Get the cel value indicated by its row and HideColumn-name
|
java.lang.String |
getID() |
MultiLineData |
getMultiLineData() |
java.lang.String |
getName() |
javax.swing.JPanel |
getNewCmpPanel()
Deprecated.
|
java.awt.Color |
getOddRowColor() |
java.util.Properties |
getPackedProperties() |
int |
getPageNumber() |
int |
getPagination() |
int |
getPaginationType() |
java.lang.String[] |
getPropertyNames() |
java.lang.String |
getPropertyValue(java.lang.String propertyName) |
java.util.Map |
getQuoteComponent() |
int |
getRowCount()
Returns the number of rows in this table
|
java.util.HashMap |
getRowData(int row)
Get the 'row data'
|
java.util.Vector |
getRowList()
Get the 'row list'
|
java.util.Vector |
getRowList(boolean isForDisplay)
Get the 'row list'
|
javax.swing.JScrollPane |
getScrollPane() |
int |
getSelectedColumn()
Deprecated.
, it only support on Applet artifact now, and JSP artifact doesn't.
|
int |
getSelectedRow()
Returns the index of the first selected row, -1 if no row is selected.
|
java.awt.Color |
getSelectedRowColor() |
java.lang.String |
getSortColumnItemID() |
HTMLEventDescriptor[] |
getSupportedHTMLEvents() |
FTable |
getTable() |
TableColors |
getTableColors() |
TableNewUIParameters |
getTableNewUIParameters() |
TableUIParameters |
getTableUIParameters()
Deprecated.
3.0
|
int |
getUiType() |
java.lang.Object |
getValueAt(int row,
int col)
Get the cel value indicated by its row and column
|
java.lang.Object |
getValueAt(int row,
java.lang.String colName)
Get the cel value indicated by its row and column-name
|
javax.swing.JViewport |
getViewport() |
boolean |
isAddRowEnabled() |
boolean |
isAjaxForm() |
boolean |
isAutoRowIncMode()
for getting the table row increasing mode
|
boolean |
isCheckAllEnabled() |
boolean |
isDeleteRowEnabled() |
boolean |
isEditing()
Returns true is the table is editing a cell.
|
boolean |
isExecuteDV() |
boolean |
isJspDelButton() |
boolean |
isJspSaveButton() |
boolean |
isOpaque()
Deprecated.
|
boolean |
isShowFooterInfo() |
boolean |
isSortEnabled() |
boolean |
isUseNewUI()
Deprecated.
3.7 HotFix AF-3187
|
int |
newRow()
Create a new 'row data'.
|
int |
newRow(java.util.HashMap rowData)
Insert a 'row data'
|
void |
newRows(java.util.Vector rowList)
Insert some 'row data'
|
void |
queryIsModCol() |
void |
quoteComponentRemoveTable() |
void |
removeCellEditorListener(javax.swing.event.CellEditorListener l) |
void |
removeListSelectionListener(javax.swing.event.ListSelectionListener x)
Deprecated.
|
void |
removeMouseListener(java.awt.event.MouseListener l) |
void |
removeTableColumnModelListener(javax.swing.event.TableColumnModelListener l) |
void |
removeTableModelListener(javax.swing.event.TableModelListener l) |
void |
remvoeQuoteComponent(java.awt.Component com) |
void |
resetColHiding()
for cleaning the m_hideCols data to null
|
void |
setAddRowEnabled(boolean b) |
void |
setAjaxForm(boolean isAjaxForm) |
void |
setAutoRowIncMode(boolean isAutoInc)
for setting the table row increasing mode
|
void |
setBackground(java.awt.Color c)
Deprecated.
|
void |
setCellBorderColor(java.awt.Color c) |
void |
setCellBorderWidth(int cellBorderWidth) |
void |
setCheckAllEnabled(boolean b) |
void |
setColHiding(java.lang.String colName)
process initial setup of hiding cols data
this method will check the validity of col id
|
void |
setColHiding(java.lang.String[] hideCols)
process initial setup of hiding cols data
this method will check the validity of col id
|
void |
setColumnName(ColumnsHeaderNodeVector items)
Set the column information
|
void |
setColumnNodeVectorWithoutCheckAll(ColumnsHeaderNodeVector items) |
void |
setContentItemValue(java.lang.String contentItem,
java.lang.Object value) |
void |
setDatatablesConfig(DatatablesConfig datatablesConfig) |
void |
setDatatablesConfigJson(java.lang.String json) |
void |
setDBSave(DBSave dbSave) |
void |
setDBValue(java.lang.Object obj) |
void |
setDeleteRowEnabled(boolean b) |
void |
setEnabled(boolean b)
Deprecated.
|
void |
setEvenRowColor(java.awt.Color c) |
void |
setExecuteDV(boolean flag) |
void |
setFBorder(int fBorder) |
void |
setFont(java.awt.Font font)
Deprecated.
|
void |
setForeground(java.awt.Color c)
Deprecated.
|
void |
setForm(Form form) |
void |
setHeaderColor(java.awt.Color c) |
void |
setID(java.lang.String id) |
void |
setJspDelButton(boolean jspDelButton) |
void |
setJspSaveButton(boolean jspSaveButton) |
void |
setLocale(java.util.Locale locale) |
void |
setMultiLineData(MultiLineData data) |
void |
setName(java.lang.String name) |
void |
setOddRowColor(java.awt.Color c) |
void |
setOpaque(boolean isOpaque)
Deprecated.
|
void |
setPackedProperties(java.util.Properties pros) |
void |
setPageNumber(int pageNumber) |
void |
setPagination(int aPagination) |
void |
setPaginationType(int aPaginationType) |
void |
setPopupMenuEnabled(boolean b) |
void |
setPropertyValue(java.lang.String propertyName,
java.lang.Object value) |
void |
setRowList(java.util.Vector rowList)
Insert the 'row list'
|
void |
setSelectedRowColor(java.awt.Color c) |
void |
setShowFooterInfo(boolean b) |
void |
setSortColumnItemID(java.lang.String sortColumnItemID) |
void |
setSortEnabled(boolean b) |
void |
setTableColors(TableColors tableColors) |
void |
setTableNewUIParameters(TableNewUIParameters newUIPara) |
void |
setTableUIParameters(TableUIParameters tableUIParameters)
Deprecated.
3.0
|
void |
setUiType(int type) |
void |
setUseNewUI(boolean useNewUI)
Deprecated.
3.7 HotFix AF-3187
|
void |
setValueAt(java.lang.Object aValue,
int row,
int column)
Set the cel value indicated by its row and column
|
void |
setValueAt(java.lang.Object aValue,
int row,
java.lang.String colName)
Set the cel value indicated by its row and column-name
|
void |
sortByColumnIndex(int columnIndex,
boolean isAscent) |
void |
sortByColumnName(java.lang.String columnName,
boolean isAscent) |
java.lang.String |
toString() |
void |
update(ColumnsHeaderNodeVector items) |
void |
updateColProperties() |
void |
updateColumnSize() |
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setFocusTraversalKeys, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocation, setLocation, setSize, setSize, show, show, size, transferFocus, transferFocusBackward, transferFocusUpCycle
public void addRowIndexColumn()
public void resetColHiding()
none
- public void setColHiding(java.lang.String[] hideCols)
String[]
- hide columns which's name is in array, and showes the otherspublic void setColHiding(java.lang.String colName)
String
- colName of one and only col's name which to be hidden, and showes the otherspublic int[] getColHiding()
none
- public java.lang.String[] getColHidingByName()
none
- public void setAutoRowIncMode(boolean isAutoInc)
true
- for add new row automaticallypublic boolean isAutoRowIncMode()
none
- public void fireTableStructureChanged()
public int getRowCount()
public int getActualRowCount()
public void setFBorder(int fBorder)
public int getFBorder()
public java.util.HashMap getRowData(int row)
row
- the row numberpublic void deleteRow(int row)
row
- the row indexpublic java.lang.Object getValueAt(int row, int col)
row
- the row numbercol
- the column numberpublic java.lang.Object getValueAt(int row, java.lang.String colName)
row
- the row numbercolName
- the column namepublic java.lang.Object getHideColValueAt(int row, java.lang.String colName)
row
- the row numbercolName
- the HideColumn namepublic void setValueAt(java.lang.Object aValue, int row, int column)
aValue
- the cell valuerow
- the row numbercol
- the column numberpublic void setValueAt(java.lang.Object aValue, int row, java.lang.String colName)
aValue
- the cell valuerow
- the row numbercolName
- the column namepublic TableUIParameters getTableUIParameters()
public void setTableUIParameters(TableUIParameters tableUIParameters)
tableUIParameters
- TableUIParameterspublic boolean isOpaque()
isOpaque
in class javax.swing.JComponent
public java.awt.Font getFont()
getFont
in interface java.awt.MenuContainer
getFont
in class java.awt.Component
public java.awt.Color getBackground()
getBackground
in class java.awt.Component
public void setBackground(java.awt.Color c)
setBackground
in class javax.swing.JComponent
public java.awt.Color getForeground()
getForeground
in class java.awt.Component
public void setForeground(java.awt.Color c)
setForeground
in class javax.swing.JComponent
public java.awt.Color getHeaderColor()
public void setHeaderColor(java.awt.Color c)
public java.awt.Color getOddRowColor()
public void setOddRowColor(java.awt.Color c)
public java.awt.Color getEvenRowColor()
public void setEvenRowColor(java.awt.Color c)
public java.awt.Color getSelectedRowColor()
public void setSelectedRowColor(java.awt.Color c)
public java.awt.Color getCellBorderColor()
public void setCellBorderColor(java.awt.Color c)
public void setOpaque(boolean isOpaque)
setOpaque
in class javax.swing.JComponent
public void setFont(java.awt.Font font)
setFont
in class javax.swing.JComponent
public java.lang.String getName()
getName
in interface FormComponent
getName
in class java.awt.Component
public void setPopupMenuEnabled(boolean b)
public void setColumnName(ColumnsHeaderNodeVector items)
public void updateColumnSize()
public ColumnsHeaderNodeVector getColumnNodeVector()
public ColumnsHeaderNodeVector getColumnNodeVectorWithoutCheckAll()
public void setColumnNodeVectorWithoutCheckAll(ColumnsHeaderNodeVector items)
items
- public void update(ColumnsHeaderNodeVector items)
public void setName(java.lang.String name)
setName
in interface FormComponent
setName
in class java.awt.Component
public int newRow()
public java.lang.String toString()
toString
in class java.awt.Component
public void clear()
public void newRows(java.util.Vector rowList)
rowList
- the 'row list'-each in the list is a 'row data'public int newRow(java.util.HashMap rowData)
rowDatat
- he 'row data'public void setRowList(java.util.Vector rowList)
rowList
- the 'row list' - each in the list is a 'row data'public void setPageNumber(int pageNumber)
public int getPageNumber()
public void addListSelectionListener(javax.swing.event.ListSelectionListener x)
public void removeListSelectionListener(javax.swing.event.ListSelectionListener x)
public javax.swing.JPanel getNewCmpPanel()
public void setEnabled(boolean b)
setEnabled
in class javax.swing.JComponent
public int getSelectedRow()
public int getSelectedColumn()
public javax.swing.JScrollPane getScrollPane()
public javax.swing.JViewport getViewport()
public java.util.Vector getRowList()
public java.util.Vector getRowList(boolean isForDisplay)
isForDisplay
- - row data use column value formatpublic FTable getTable()
public void editingStopped()
public void updateColProperties()
public void queryIsModCol()
public boolean isEditing()
public int getEditingColumn()
public int getEditingRow()
public javax.swing.table.TableCellEditor getCellEditor(int row, int column)
row
- - the row of the cell to edit, where 0 is the firstcolumn
- - the column of the cell to edit, where 0 is the firstpublic MultiLineData getMultiLineData()
public void setMultiLineData(MultiLineData data)
public java.lang.String getID()
getID
in interface FormComponent
public void setID(java.lang.String id)
setID
in interface FormComponent
public java.util.Properties getPackedProperties()
getPackedProperties
in interface FormComponent
public void setPackedProperties(java.util.Properties pros)
setPackedProperties
in interface FormComponent
public java.lang.Object getDBValue()
getDBValue
in interface DBComponent
public void setDBValue(java.lang.Object obj)
setDBValue
in interface DBComponent
public DBSave getDefaultDBSave()
getDefaultDBSave
in interface DBComponent
public DBSave getDBSave()
getDBSave
in interface DBComponent
public void setDBSave(DBSave dbSave)
setDBSave
in interface DBComponent
public Form getForm()
getForm
in interface FormDependentComponent
public void setForm(Form form)
setForm
in interface FormDependentComponent
public void setAjaxForm(boolean isAjaxForm)
setAjaxForm
in interface FormDependentComponent
public boolean isAjaxForm()
public HTMLEventDescriptor[] getSupportedHTMLEvents()
getSupportedHTMLEvents
in interface JspConvertable
public java.lang.String[] getPropertyNames()
getPropertyNames
in interface MultiLanguage
public java.lang.String getPropertyValue(java.lang.String propertyName)
getPropertyValue
in interface MultiLanguage
public void setPropertyValue(java.lang.String propertyName, java.lang.Object value)
setPropertyValue
in interface MultiLanguage
public java.lang.String[] getContentItems()
getContentItems
in interface MultiLanguage
public java.lang.String getContentItemValue(java.lang.String contentItem)
getContentItemValue
in interface MultiLanguage
public void setContentItemValue(java.lang.String contentItem, java.lang.Object value)
setContentItemValue
in interface MultiLanguage
public void removeCellEditorListener(javax.swing.event.CellEditorListener l)
public void addCellEditorListener(javax.swing.event.CellEditorListener l)
public boolean isUseNewUI()
public void setUiType(int type)
public int getUiType()
public void setUseNewUI(boolean useNewUI)
useNewUI
- booleanpublic TableNewUIParameters getTableNewUIParameters()
public void setTableNewUIParameters(TableNewUIParameters newUIPara)
newUIPara
- TableNewUIParameterspublic TableColors getTableColors()
public void setTableColors(TableColors tableColors)
public void setCheckAllEnabled(boolean b)
public boolean isCheckAllEnabled()
public void setAddRowEnabled(boolean b)
public boolean isAddRowEnabled()
public void setDeleteRowEnabled(boolean b)
public boolean isDeleteRowEnabled()
public void setSortEnabled(boolean b)
public boolean isSortEnabled()
public void setSortColumnItemID(java.lang.String sortColumnItemID)
public java.lang.String getSortColumnItemID()
public void setShowFooterInfo(boolean b)
public boolean isShowFooterInfo()
public void setPagination(int aPagination)
public int getPagination()
public void setPaginationType(int aPaginationType)
public int getPaginationType()
public boolean isJspDelButton()
public void setJspDelButton(boolean jspDelButton)
public boolean isJspSaveButton()
public void setJspSaveButton(boolean jspSaveButton)
public void setExecuteDV(boolean flag)
public boolean isExecuteDV()
public void addMouseListener(java.awt.event.MouseListener l)
addMouseListener
in class java.awt.Component
public void removeMouseListener(java.awt.event.MouseListener l)
removeMouseListener
in class java.awt.Component
public void addTableModelListener(javax.swing.event.TableModelListener l)
public void removeTableModelListener(javax.swing.event.TableModelListener l)
public void addTableColumnModelListener(javax.swing.event.TableColumnModelListener l)
public void removeTableColumnModelListener(javax.swing.event.TableColumnModelListener l)
public void sortByColumnIndex(int columnIndex, boolean isAscent)
public void sortByColumnName(java.lang.String columnName, boolean isAscent)
public java.util.Vector getCheckedRows()
public void setLocale(java.util.Locale locale)
setLocale
in class java.awt.Component
public void addQuoteComponent(java.awt.Component com)
public void quoteComponentRemoveTable()
public java.util.Map getQuoteComponent()
public void remvoeQuoteComponent(java.awt.Component com)
public int getCellBorderWidth()
public void setCellBorderWidth(int cellBorderWidth)
public DatatablesConfig getDatatablesConfig()
public java.lang.String getDatatablesConfigJson()
public void setDatatablesConfig(DatatablesConfig datatablesConfig)
public void setDatatablesConfigJson(java.lang.String json)
Copyright ? 2022. All Rights Reserved.