|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Object
|
+--java.awt.Component
|
+--java.awt.Container
|
+--javax.swing.JComponent
|
+--javax.swing.JPanel
|
+--com.adventnet.snmp.ui.LineGraphBeanWrapper
This implements a multiline graph.
| Inner Class Summary | |
(package private) class |
LineGraphBeanWrapper.StaticPolling
|
| Inner classes inherited from class javax.swing.JPanel |
javax.swing.JPanel.AccessibleJPanel |
| Inner classes inherited from class javax.swing.JComponent |
javax.swing.JComponent.AccessibleJComponent,
javax.swing.JComponent.IntVector,
javax.swing.JComponent.KeyboardBinding,
javax.swing.JComponent.KeyboardState |
| Inner classes inherited from class java.awt.Component |
java.awt.Component.AWTTreeLock |
| Field Summary | |
(package private) boolean |
absoluteCounters
boolean for the absolute counters. |
(package private) boolean |
absTime
Whether to show relative or absolute time on the X axis |
(package private) java.awt.Color |
bgColor
The background color |
(package private) int |
c_index
|
(package private) boolean |
check
|
(package private) static int |
count
|
(package private) boolean |
counter64Test
|
(package private) java.util.Vector[] |
data
The data to be graphed, i.e. |
(package private) java.util.Date |
date
|
(package private) byte |
DAY
constant used to mention the xunits in DAY |
(package private) java.awt.Image |
dbuf
|
(package private) java.awt.Image |
dbuf2
|
(package private) int |
dotRad
|
(package private) java.awt.Color |
fgColor
The foreground color |
(package private) java.awt.Graphics |
graph
|
(package private) java.awt.Graphics |
graph1
|
(package private) byte |
HOUR
constant used to mention the xunits in HOUR |
(package private) int |
ht
|
(package private) boolean |
inComp
|
(package private) java.io.BufferedReader |
is
|
(package private) boolean |
isAutoSetXLabel
allow the bean to set the label for the X axis by bean itself automatically |
(package private) boolean |
isGraphResized
|
(package private) boolean |
isScrollBarEnabled
|
(package private) boolean |
isXRangeChanged
|
(package private) int |
labelHt
|
(package private) byte |
labelType
|
(package private) java.math.BigInteger |
lastValue
|
(package private) java.math.BigInteger[] |
lastValues
|
(package private) int |
lastx
|
(package private) int |
lasty
|
(package private) java.awt.Color |
lcolor
The primary line color |
(package private) java.awt.Font |
lfont
|
(package private) java.lang.String |
lfontName
The labels font name, e.g. |
(package private) int |
lfontSize
The labels font size. |
(package private) java.lang.String |
lfontStyle
The labels font style. |
(package private) java.util.Vector |
line1
|
(package private) java.awt.Color |
lineColor
The first line color |
(package private) java.lang.String |
linecolors
line colors for multiline - not fully impl. |
(package private) java.awt.Color[] |
lineColors
|
(package private) java.lang.String |
lineLabels
The labels to be used for each oid - separated by | (pipe). |
(package private) int |
markLen
|
(package private) int |
maxScaleYWid
|
(package private) int |
maxX1
|
(package private) byte |
MINUTE
constant used to mention the xunits in MINUTE |
(package private) byte |
MONTH
|
(package private) int |
noofpages
|
(package private) int |
noOfValues
|
(package private) java.lang.String[] |
olabels
|
(package private) java.io.BufferedWriter |
os
|
(package private) int |
prevht
|
(package private) int |
prevTime
|
(package private) int |
prevwid
|
(package private) boolean |
readGraphFile
|
(package private) boolean |
reset
|
(package private) byte |
SECONDS
constant used to mention the xunits in SECONDS |
(package private) boolean |
showErrorMessages
|
(package private) boolean |
showTitle
Whether to show a title at all. |
(package private) boolean |
showXLabel
Whether to show the X label |
(package private) boolean |
showYLabel
Whether to show the Y label |
(package private) long |
startTime
|
(package private) boolean |
storeValues
|
(package private) java.awt.Font |
tfont
|
(package private) java.lang.String |
tfontName
The title font name, e.g. |
(package private) int |
tfontSize
The title font size |
(package private) java.lang.String |
tfontStyle
The title font style. |
(package private) int |
time1
|
(package private) boolean |
timeAvg
Whether to time average the value shown |
(package private) boolean |
timeSpan
|
(package private) java.lang.String |
Title
The title for the graph. |
(package private) int |
titleX
|
(package private) int |
titleY
|
(package private) java.math.BigInteger[] |
values
|
(package private) boolean |
valuesLegendOpen
|
(package private) byte |
WEEK
constant used to mention the xunits in WEEK |
(package private) int |
wid
|
(package private) int |
x0
|
(package private) int |
xDiffMax
The maximum range on on the X scale. |
(package private) int |
xDiffMax1
|
(package private) int |
xEnd
|
(package private) int |
xGrid
This defines # of vertical grid lines |
(package private) int[] |
xGrids
|
(package private) java.lang.String |
xLabel
The label for the X axis |
(package private) int |
xLabelx
|
(package private) int |
xLabely
|
(package private) int |
xMark
This defines # of value marks on X axis |
(package private) int |
xMarkOff
|
(package private) int[] |
xMarks
|
(package private) int |
xMax
The maximum value on the X scale |
(package private) int |
xMax1
|
(package private) int |
xMin
The minimum value on the X scale |
(package private) int |
xMin1
|
(package private) byte |
xUnits
The X Units label |
(package private) int |
y0
|
(package private) double |
yBigMax
The maximum value on the Y scale |
(package private) double |
yBigMin
The minimum value on the Y scale |
(package private) byte |
YEAR
|
(package private) int |
yEnd
|
(package private) int |
yGrid
This defines # of horizontal grid lines |
(package private) int[] |
yGrids
|
(package private) java.lang.String |
yLabel
The label for the Y axis |
(package private) int |
yLabelWid
|
(package private) int |
yLabelx
|
(package private) int |
yLabely
|
(package private) int |
yMark
This defines # of value marks on Y axis |
(package private) int |
yMarkOff
|
(package private) int[] |
yMarks
|
(package private) long |
yMax
The maximum value on the Y scale |
(package private) long |
yMin
The minimum value on the Y scale |
(package private) java.lang.String |
yUnits
The Y units label - unsupported at this time. |
| Fields inherited from class javax.swing.JComponent |
_bounds,
accessibleContext,
listenerList,
paintingChild,
TOOL_TIP_TEXT_KEY,
ui,
UNDEFINED_CONDITION,
WHEN_ANCESTOR_OF_FOCUSED_COMPONENT,
WHEN_FOCUSED,
WHEN_IN_FOCUSED_WINDOW |
| Fields inherited from class java.awt.Container |
component,
containerListener,
layoutMgr,
ncomponents |
| Fields inherited from class java.awt.Component |
actionListenerK,
adjustmentListenerK,
appContext,
background,
BOTTOM_ALIGNMENT,
CENTER_ALIGNMENT,
componentListener,
componentListenerK,
componentOrientation,
containerListenerK,
cursor,
dropTarget,
enabled,
eventMask,
focusListener,
focusListenerK,
font,
foreground,
hasFocus,
height,
incRate,
inputMethodListener,
inputMethodListenerK,
isInc,
isPacked,
itemListenerK,
keyListener,
keyListenerK,
LEFT_ALIGNMENT,
locale,
LOCK,
minSize,
mouseListener,
mouseListenerK,
mouseMotionListener,
mouseMotionListenerK,
newEventsOnly,
ownedWindowK,
parent,
peer,
peerFont,
popups,
prefSize,
RIGHT_ALIGNMENT,
textListenerK,
TOP_ALIGNMENT,
valid,
visible,
width,
windowListenerK,
x,
y |
| Constructor Summary | |
LineGraphBeanWrapper()
This constructor sets the min size |
|
LineGraphBeanWrapper(int w,
int h)
|
|
| Method Summary | |
void |
addMouseListener(java.awt.event.MouseListener l)
Adds the specified mouse listener to receive mouse events |
(package private) boolean |
addPoint(int lineNum,
double[] nextPoint)
|
(package private) void |
calculateGrid()
|
(package private) void |
drawGraph()
|
(package private) void |
drawValuesLegend(int x,
int y,
java.awt.Graphics maing)
draw a box with values at mouse location |
(package private) java.lang.String |
fmt(int i)
get two digit values for HH:MM:SS |
(package private) boolean |
getAbsoluteCounters()
To get whether the value plotted by the graph should be the absolute value or the difference between successive counters. |
(package private) boolean |
getAbstime()
Get whether to show relative or absolute time on the X axis |
(package private) boolean |
getAutoXlabel()
get the status whether the bean is able to set the label for the X axis by bean itself automatically |
(package private) java.awt.Color |
getBgcolor()
Get the background color |
(package private) java.awt.Color |
getFgcolor()
Get the foreground color |
(package private) long |
getFromX(int x)
Compute the value from x point |
(package private) long |
getFromX1(int x)
|
(package private) java.awt.Color |
getLcolor()
Get the primary line color |
(package private) java.lang.String |
getLfontname()
Get the labels font name, e.g. |
(package private) int |
getLfontsize()
Get the labels font size. |
(package private) java.lang.String |
getLfontstyle()
Get the labels font style. |
(package private) java.awt.Color |
getLinecolor()
Get the first line color |
(package private) java.lang.String |
getLinecolors()
Deprecated and Replaced by getLineColors |
(package private) java.awt.Color[] |
getLineColors()
Get line colors for multiline |
(package private) java.lang.String |
getLineLabels()
Get the labels to be used for each oid - separated by | (pipe). |
(package private) java.lang.String |
getLogFileName()
|
(package private) int |
getPollDuration()
|
boolean |
getShowErrorMessages()
|
(package private) boolean |
getShowtitle()
Get whether to show a title at all. |
(package private) boolean |
getShowxlabel()
Get whether to show the X label |
(package private) boolean |
getShowylabel()
Get whether to show the Y label |
(package private) int |
getStyleNo(java.lang.String style)
|
(package private) java.lang.String |
getTfontname()
Get the title font name, e.g. |
(package private) int |
getTfontsize()
Get the title font size |
(package private) java.lang.String |
getTfontstyle()
Get the title font style. |
(package private) int |
getTime()
|
(package private) boolean |
getTimeavg()
Deprecated. Use isTimeavg() instead. |
(package private) java.lang.String |
getTimeStr(long t)
return HH:MM:SS |
(package private) java.lang.String |
getTitle()
Get the title for the graph. |
(package private) int |
getX(double xval)
Compute the x point from value |
(package private) int |
getX1(double xval)
|
(package private) int |
getXdiffmax()
Get the maximum range on on the X scale. |
(package private) int |
getXgrid()
Get this defines # of vertical grid lines |
(package private) java.lang.String |
getXlabel()
Get the label for the X axis |
(package private) int |
getXmark()
Get this defines # of value marks on X axis |
(package private) int |
getXmax()
Get the maximum value on the X scale |
(package private) int |
getXmin()
Get the minimum value on the X scale |
(package private) int |
getXscale()
|
(package private) byte |
getXunits()
Get the X Units label |
(package private) int |
getY(double yval)
Compute the y point from value |
(package private) int |
getYgrid()
Get this defines # of horizontal grid lines |
(package private) java.lang.String |
getYlabel()
Get the label for the Y axis |
(package private) int |
getYmark()
Get this defines # of value marks on Y axis |
(package private) long |
getYmax()
Get the maximum value on the Y scale |
(package private) java.math.BigInteger |
getYmaxAsBigInt()
Get the maximum value on the Y scale as BigInteger. |
(package private) long |
getYmin()
Get the minimum value on the Y scale |
(package private) java.math.BigInteger |
getYminAsBigInt()
Get the minimum value on the Y scale as BigInteger. |
(package private) java.lang.String |
getYunits()
Get the Y units label - unsupported at this time. |
(package private) boolean |
isLogEnabled()
|
(package private) boolean |
isPopupExists()
|
(package private) boolean |
isTimeavg()
Get whether to time average the value shown. |
(package private) void |
logErrorMessage(java.lang.String error)
|
(package private) void |
logInfoMessage(java.lang.String info)
|
java.awt.Dimension |
minimumSize()
Returns the preferred size of this component. |
void |
mouseClicked(java.awt.event.MouseEvent e)
|
void |
mouseDragged(java.awt.event.MouseEvent e)
|
void |
mouseEntered(java.awt.event.MouseEvent e)
|
void |
mouseExited(java.awt.event.MouseEvent e)
|
void |
mouseMoved(java.awt.event.MouseEvent e)
|
void |
mousePressed(java.awt.event.MouseEvent e)
|
void |
mouseReleased(java.awt.event.MouseEvent e)
|
void |
paintComponent(java.awt.Graphics g)
|
java.awt.Dimension |
preferredSize()
Returns the preferred size of this component. |
void |
readPollDataFromFile(java.lang.String file)
|
void |
removeMouseListener(java.awt.event.MouseListener l)
Removes the specified mouse listener |
(package private) void |
restartGraph()
Restart the graph for its initial State |
(package private) void |
setAbsoluteCounters(boolean absoluteCounters)
set whether counter values should be absolute or difference between successive counters. |
(package private) void |
setAbstime(boolean absTime)
Set whether to show relative or absolute time on the X axis |
(package private) void |
setAutoXlabel(boolean autoset)
set whether the unit value of x axis is changed according to the duration of graph time. |
(package private) void |
setBgcolor(java.awt.Color bgColor)
Set the background color |
(package private) void |
setDataSize(int size)
This method will set the number of lines to be plotted in the graph. |
(package private) void |
setFgcolor(java.awt.Color fgColor)
Set the foreground color |
(package private) void |
setFont(java.awt.Font titleFont,
java.awt.Font labelFont)
|
(package private) void |
setLcolor(java.awt.Color lcolor)
Set the primary line color |
(package private) void |
setLfontname(java.lang.String lfontName)
Set the labels font name, e.g. |
(package private) void |
setLfontsize(int lfontSize)
Set the labels font size. |
(package private) void |
setLfontstyle(java.lang.String lfontStyle)
Set the labels font style. |
(package private) void |
setLinecolor(java.awt.Color lineColor)
Set the first line color |
(package private) void |
setLineColors(java.awt.Color[] lineColors)
Set line colors for multiline |
(package private) void |
setLinecolors(java.lang.String linecolors)
Depreceted and Replaced by setLineColors |
(package private) void |
setLineLabels(java.lang.String lineLabels)
Set the labels to be used for each oid - separated by | (pipe). |
(package private) void |
setLogEnabled(boolean storeValues)
|
(package private) void |
setLogFileName(java.lang.String graphFile)
|
void |
setNumericResult(long num)
Implementation of ResultListener method - plots value |
(package private) void |
setPollDuration(int time)
|
void |
setResult(java.math.BigInteger diff)
This updates the graph with the new value |
void |
setResult(int lineNum,
java.math.BigInteger diff)
This updates the graph with the new value |
(package private) void |
setResult(int lineNum,
long diff)
This updates the graph with the new value |
void |
setResult(long diff)
This updates the graph with the new value |
void |
setResult(ResultEvent e)
Implementation of ResultListener method,plots values if more than one |
void |
setShowErrorMessages(boolean showMessages)
|
(package private) void |
setShowtitle(boolean showTitle)
Set whether to show a title at all. |
(package private) void |
setShowxlabel(boolean showXLabel)
Set whether to show the X label |
(package private) void |
setShowylabel(boolean showYLabel)
Set whether to show the Y label |
void |
setStringResult(java.lang.String value)
Implementation of ResultListener method |
(package private) void |
setTfontname(java.lang.String tfontName)
Set the title font name, e.g. |
(package private) void |
setTfontsize(int tfontSize)
Set the title font size |
(package private) void |
setTfontstyle(java.lang.String tfontStyle)
Set the title font style. |
(package private) void |
setTimeavg(boolean timeAvg)
Set whether to time average the value shown |
(package private) void |
setTitle(java.lang.String Title)
Set the title for the graph. |
(package private) void |
setup()
This is needed to setup the graph scales, etc. |
(package private) void |
setValues()
This method sets any component values that need to be set. |
(package private) void |
setXdiffmax(int xDiffMax)
Set the maximum range on on the X scale. |
(package private) void |
setXgrid(int xGrid)
Set this defines # of vertical grid lines |
(package private) void |
setXlabel(java.lang.String xLabel)
Set the label for the X axis |
(package private) void |
setXmark(int xMark)
Set this defines # of value marks on X axis |
(package private) void |
setXmax(int xMax)
Set the maximum value on the X scale |
(package private) void |
setXmin(int xMin)
Set the minimum value on the X scale |
(package private) void |
setXscale(int xrange)
This method is to set the x-axis scale |
(package private) void |
setXunits(byte xunits)
Set the X Units label |
(package private) void |
setYgrid(int yGrid)
Set this defines # of horizontal grid lines |
(package private) void |
setYlabel(java.lang.String yLabel)
Set the label for the Y axis |
(package private) void |
setYmark(int yMark)
Set this defines # of value marks on Y axis |
(package private) void |
setYmax(long yMax)
Set the maximum value on the Y scale |
(package private) void |
setYmaxAsBigInt(java.math.BigInteger yBigmax)
Set the maximum value on the Y scale as BigInteger. |
(package private) void |
setYmin(long yMin)
Set the minimum value on the Y scale |
(package private) void |
setYminAsBigInt(java.math.BigInteger yBigMin)
Set the minimum value on the Y scale as BigInteger. |
(package private) void |
setYunits(java.lang.String yUnits)
Set the Y units label - unsupported at this time. |
void |
updateComponent(java.awt.Graphics g)
|
| Methods inherited from class javax.swing.JPanel |
|
| Methods inherited from class javax.swing.JComponent |
_paintImmediately,
addAncestorListener,
addNotify,
addPropertyChangeListener,
addPropertyChangeListener,
addVetoableChangeListener,
alwaysOnTop,
bindingForKeyStroke,
checkIfChildObscuredBySibling,
computeVisibleRect,
computeVisibleRect,
contains,
createToolTip,
enableSerialization,
firePropertyChange,
firePropertyChange,
firePropertyChange,
firePropertyChange,
firePropertyChange,
firePropertyChange,
firePropertyChange,
firePropertyChange,
firePropertyChange,
fireVetoableChange,
getActionForKeyStroke,
getAlignmentX,
getAlignmentY,
getAutoscrolls,
getBorder,
getBounds,
getClientProperty,
getComponentGraphics,
getConditionForKeyStroke,
getDebugGraphicsOptions,
getGraphics,
getHeight,
getInsets,
getInsets,
getLocation,
getMaximumSize,
getMinimumSize,
getNextFocusableComponent,
getPreferredSize,
getRegisteredKeyStrokes,
getRootPane,
getSize,
getToolTipLocation,
getToolTipText,
getToolTipText,
getTopLevelAncestor,
getVisibleRect,
getWidth,
getX,
getY,
grabFocus,
hasFocus,
isDoubleBuffered,
isFocusCycleRoot,
isFocusTraversable,
isLightweightComponent,
isManagingFocus,
isOpaque,
isOptimizedDrawingEnabled,
isPaintingTile,
isRequestFocusEnabled,
isValidateRoot,
paint,
paintBorder,
paintChildren,
paintImmediately,
paintImmediately,
print,
printAll,
processComponentKeyEvent,
processFocusEvent,
processKeyBinding,
processKeyBindings,
processKeyBindingsForAllComponents,
processKeyEvent,
processMouseMotionEvent,
putClientProperty,
rectangleIsObscured,
rectangleIsObscuredBySibling,
registerKeyboardAction,
registerKeyboardAction,
registerWithKeyboardManager,
removeAncestorListener,
removeNotify,
removePropertyChangeListener,
removePropertyChangeListener,
removeVetoableChangeListener,
repaint,
repaint,
requestDefaultFocus,
requestFocus,
resetKeyboardActions,
reshape,
revalidate,
scrollRectToVisible,
setAlignmentX,
setAlignmentY,
setAutoscrolls,
setBackground,
setBorder,
setDebugGraphicsOptions,
setDoubleBuffered,
setEnabled,
setFont,
setForeground,
setMaximumSize,
setMinimumSize,
setNextFocusableComponent,
setOpaque,
setPaintingChild,
setPreferredSize,
setRequestFocusEnabled,
setToolTipText,
setUI,
setVisible,
shouldDebugGraphics,
superProcessMouseMotionEvent,
unregisterKeyboardAction,
unregisterWithKeyboardManager,
update |
| Methods inherited from class java.awt.Container |
add,
add,
add,
add,
add,
addContainerListener,
addImpl,
applyOrientation,
countComponents,
deliverEvent,
dispatchEventImpl,
dispatchEventToSelf,
doLayout,
eventEnabled,
findComponentAt,
findComponentAt,
getComponent,
getComponentAt,
getComponentAt,
getComponentCount,
getComponents_NoClientCode,
getComponents,
getCursorTarget,
getLayout,
getMouseEventTarget,
getWindow,
insets,
invalidate,
invalidateTree,
isAncestorOf,
layout,
lightweightPrint,
list,
list,
locate,
nextFocus,
paintComponents,
postProcessKeyEvent,
postsOldMouseEvents,
preProcessKeyEvent,
printComponents,
printHeavyweightComponents,
processContainerEvent,
processEvent,
proxyEnableEvents,
proxyRequestFocus,
remove,
remove,
removeAll,
removeContainerListener,
setCursor,
setFocusOwner,
setLayout,
transferFocus,
updateCursor,
validate,
validateTree |
| Methods inherited from class java.awt.Component |
action,
add,
addComponentListener,
addFocusListener,
addInputMethodListener,
addKeyListener,
addMouseMotionListener,
areInputMethodsEnabled,
bounds,
checkImage,
checkImage,
coalesceEvents,
constructComponentName,
contains,
createImage,
createImage,
disable,
disableEvents,
dispatchEvent,
enable,
enable,
enableEvents,
enableInputMethods,
getBackground,
getBounds,
getColorModel,
getComponentOrientation,
getCursor,
getDropTarget,
getFont_NoClientCode,
getFont,
getFontMetrics,
getForeground,
getInputContext,
getInputMethodRequests,
getIntrinsicCursor,
getLocale,
getLocation,
getLocationOnScreen,
getName,
getNativeContainer,
getParent_NoClientCode,
getParent,
getPeer,
getSize,
getToolkit,
getToolkitImpl,
getTreeLock,
gotFocus,
handleEvent,
hide,
imageUpdate,
inside,
isDisplayable,
isEnabled,
isEnabledImpl,
isLightweight,
isShowing,
isValid,
isVisible,
keyDown,
keyUp,
list,
list,
list,
location,
lostFocus,
mouseDown,
mouseDrag,
mouseEnter,
mouseExit,
mouseMove,
mouseUp,
move,
nextFocus,
paintAll,
postEvent,
prepareImage,
prepareImage,
processComponentEvent,
processInputMethodEvent,
processMouseEvent,
remove,
removeComponentListener,
removeFocusListener,
removeInputMethodListener,
removeKeyListener,
removeMouseMotionListener,
repaint,
repaint,
repaint,
resize,
resize,
setBounds,
setBounds,
setComponentOrientation,
setDropTarget,
setLocale,
setLocation,
setLocation,
setName,
setSize,
setSize,
show,
show,
size,
toString,
transferFocus |
| Methods inherited from class java.lang.Object |
clone,
equals,
finalize,
getClass,
hashCode,
notify,
notifyAll,
wait,
wait,
wait |
| Field Detail |
int wid
int ht
int prevwid
int prevht
byte labelType
boolean isGraphResized
boolean isXRangeChanged
boolean isScrollBarEnabled
boolean timeSpan
boolean storeValues
int noOfValues
int maxX1
boolean showErrorMessages
byte YEAR
byte MONTH
final byte DAY
final byte HOUR
final byte MINUTE
final byte SECONDS
final byte WEEK
java.lang.String Title
boolean showTitle
java.lang.String tfontName
java.lang.String tfontStyle
int tfontSize
java.awt.Font tfont
int titleX
int titleY
java.awt.Color bgColor
java.awt.Color fgColor
java.awt.Color lineColor
java.lang.String xLabel
boolean isAutoSetXLabel
java.lang.String yLabel
boolean showXLabel
boolean showYLabel
byte xUnits
java.lang.String yUnits
java.lang.String lfontName
java.lang.String lfontStyle
int lfontSize
java.awt.Font lfont
int xLabelx
int xLabely
int yLabelx
int yLabely
int yLabelWid
int labelHt
int xMax
int xMax1
int xMin
int xMin1
boolean absTime
int xDiffMax
int xDiffMax1
long yMax
double yBigMin
double yBigMax
long yMin
int x0