|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectjava.awt.Component
java.awt.Container
thinlet.Thinlet
org.getopt.luke.Luke
public class Luke
This class allows you to browse a Lucene index in several ways - by document, by term, by query, and by most frequent terms.
Nested Class Summary |
---|
Nested classes/interfaces inherited from class java.awt.Container |
---|
java.awt.Container.AccessibleAWTContainer |
Nested classes/interfaces inherited from class java.awt.Component |
---|
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy |
Field Summary | |
---|---|
static int |
THEME_DEFAULT
Default salmon theme. |
static int |
THEME_GRAY
Gray theme. |
static int |
THEME_NAVY
Navy blue reverse theme. |
static int |
THEME_SANDSTONE
Sandstone theme. |
static int |
THEME_SKY
Sky blue theme. |
int[][] |
themes
Theme color contants. |
Fields inherited from class thinlet.Thinlet |
---|
block |
Fields inherited from class java.awt.Component |
---|
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT |
Fields inherited from interface java.awt.image.ImageObserver |
---|
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH |
Constructor Summary | |
---|---|
Luke()
Default constructor, loads preferences, initializes plugins and GUI. |
Method Summary | |
---|---|
void |
_actionCleanup(java.lang.Object filesTable)
|
void |
_runExport(java.io.File out,
boolean gzip,
java.util.Observer obs,
java.lang.Object dialog,
Ranges ranges)
|
void |
_showData(java.lang.Object dialog)
|
void |
_showPayloads(java.lang.Object dialog)
|
void |
abortExport(java.lang.Object dialog)
|
void |
actionAbout()
|
void |
actionAddDocument(java.lang.Object docTable)
|
void |
actionCheckIndex()
|
void |
actionCleanup()
This method will cleanup the current Directory of any content that is not the part of the index. |
void |
actionClose()
|
void |
actionCommit()
|
void |
actionConvert(java.lang.Object method)
Not implemented yet... |
void |
actionDeleteDocList(java.lang.Object docList)
|
void |
actionDesignSimilarity()
Switch the view to display the SimilarityDesigner plugin, if present. |
boolean |
actionEditAdd(java.lang.Object editdoc)
|
void |
actionEditAddField(java.lang.Object editdoc)
|
void |
actionEditDeleteField(java.lang.Object editfield)
|
void |
actionEditReplace(java.lang.Object editdoc)
|
void |
actionExit()
|
void |
actionExport()
|
void |
actionMLT(java.lang.Object docNum,
java.lang.Object docTable)
More Like this query from the current doc (or selected fields) |
void |
actionOpen()
Show an "Open Index" dialog. |
void |
actionOptimize()
Optimize the current index |
void |
actionReconstruct(java.lang.Object docNumText)
|
void |
actionReopen()
|
void |
actionSetDecoder(java.lang.Object fList,
java.lang.Object combo)
|
void |
actionSetFont(java.lang.Object selfont)
Set the default font in the UI. |
void |
actionSetNorm(java.lang.Object table)
|
void |
actionShowFonts()
Pop up a modal font selection dialog. |
void |
actionTheme(java.lang.Object menu)
Action handler to select color theme. |
void |
actionTopTerms(java.lang.Object nTerms)
Update the list of top terms. |
void |
actionUndelete()
Undelete all deleted documents in the current index. |
java.lang.Object |
addComponent(java.lang.Object parent,
java.lang.String compView,
java.lang.String handlerStr,
java.lang.Object[] argv)
Add a Thinlet component from XUL file. |
void |
browseTermDocs(java.lang.Object tTable)
Switch to a view that shows all documents containing selected term. |
void |
checkIndex(java.lang.Object dialog)
|
void |
clipCopyDoc(java.lang.Object table)
|
void |
clipCopyFields(java.lang.Object table)
|
void |
clipPositions(java.lang.Object pTable)
|
void |
clipTopTerms(java.lang.Object tTable)
|
void |
clipTV(java.lang.Object vTable)
|
void |
commitUserData(java.lang.Object dialog)
|
org.apache.lucene.analysis.Analyzer |
createAnalyzer(java.lang.Object srchOpts)
|
AccessibleHitCollector |
createCollector(java.lang.Object srchOpts)
|
org.apache.lucene.search.Query |
createQuery(java.lang.String queryString)
Create a Query instance that corresponds to values selected in the UI, such as analyzer class name and arguments, and default field. |
org.apache.lucene.search.Similarity |
createSimilarity(java.lang.Object srchOpts)
|
void |
deleteDoc(java.lang.Object docNum)
|
void |
deleteDocList(java.lang.Object searchTable)
|
void |
deleteTermDoc(java.lang.Object fText)
|
void |
deleteUserData(java.lang.Object dialog)
|
boolean |
destroy()
Shut down Luke. |
void |
displayNewNorm(java.lang.Object dialog)
|
void |
errorMsg(java.lang.String msg)
Show a modal error dialog with OK button. |
void |
explainResult(java.lang.Object sTable)
Pop up a modal dialog explaining the selected result. |
void |
explainStructure(java.lang.Object qTabs)
|
void |
export(java.lang.Object dialog)
|
void |
fixIndex(java.lang.Object dialog)
|
java.lang.Class[] |
getAnalyzers()
Return an array of available Analyzer implementations. |
org.apache.lucene.search.Similarity |
getCustomSimilarity()
Returns current custom similarity implementation. |
protected java.lang.String |
getDefaultField(java.lang.Object srchOptTabs)
|
org.apache.lucene.store.Directory |
getDirectory()
|
java.util.List<java.lang.String> |
getIndexDeletableNames(org.apache.lucene.store.Directory d)
|
java.util.List<java.lang.String> |
getIndexFileNames(org.apache.lucene.store.Directory d)
|
org.apache.lucene.index.IndexReader |
getIndexReader()
|
int |
getNumTerms()
|
LukePlugin |
getPlugin(java.lang.String className)
Get an already instantiated plugin, or null if such plugin was not loaded on startup. |
java.util.List |
getPlugins()
Return the list of active plugin instances. |
void |
gotoDoc(java.lang.Object sTable)
|
void |
goUrl(java.lang.Object url)
Open URL in the system default browser. |
void |
infoMsg(java.lang.String msg)
Show a modal info dialog with OK button. |
void |
initPlugins()
Initialize plugins. |
boolean |
isFSBased(org.apache.lucene.store.Directory dir)
|
boolean |
isSlowAccess()
Indicates whether I/O access should be optimized because the index is on a slow medium (e.g. |
void |
lostOwnership(java.awt.datatransfer.Clipboard arg0,
java.awt.datatransfer.Transferable arg1)
|
static void |
main(java.lang.String[] args)
Main method. |
void |
nextPage(java.lang.Object sTable)
|
void |
openBrowse(java.lang.Object path)
Browse for a directory, and put the selection result in the indicated widget. |
org.apache.lucene.store.FSDirectory |
openDirectory(java.lang.String dirImpl,
java.lang.String file,
boolean create)
|
void |
openIndex(java.lang.String name,
boolean force,
java.lang.String dirImpl,
boolean ro,
boolean ramdir,
boolean keepCommits,
org.apache.lucene.index.IndexCommit point,
int tiiDivisor)
Open indicated index and re-initialize all GUI and plugins. |
void |
openOk(java.lang.Object dialog)
Attempt to load the index with parameters specified in the dialog. |
void |
optimize(java.lang.Object dialog)
Optimize the index. |
void |
populateAnalyzers(java.lang.Object combo)
Populate a combobox with the current list of analyzers. |
void |
prevPage(java.lang.Object sTable)
|
void |
putUserData(java.lang.Object dialog)
|
boolean |
removeFile(java.io.File f)
Recursively remove files and directories including the indicated root file. |
void |
saveBrowse(java.lang.Object path,
java.lang.Object startButton)
Select an output file name, and put the selection result in the indicated widget. |
void |
saveField(java.lang.Object table)
|
void |
search(java.lang.Object qField)
Perform a search. |
void |
selectFont(java.lang.Object selfont)
Show preview of the selected font. |
void |
setCustomSimilarity(org.apache.lucene.search.Similarity s)
Set the current custom similarity implementation. |
void |
setIndexReader(org.apache.lucene.index.IndexReader reader,
java.lang.String indexName)
|
void |
setNorm(java.lang.Object dialog)
|
void |
setSlowAccess(boolean slowAccess)
Set whether the I/O access to this index is costly and should be minimized. |
void |
setTheme(int which)
Set color theme for the UI. |
void |
setupInit(java.lang.Object dialog)
Initialize MRU list of indexes in the open index dialog. |
void |
setupSelFont(java.lang.Object selfont)
Initialize the font selection dialog. |
void |
showAllTermDoc(java.lang.Object fText)
|
void |
showCommitFiles(java.lang.Object commitTable)
|
void |
showDoc(java.lang.Object docNum)
|
void |
showFirstTerm(java.lang.Object fCombo,
java.lang.Object fText)
|
void |
showFirstTermDoc(java.lang.Object fText)
|
void |
showNextDoc(java.lang.Object docNum)
|
void |
showNextTerm(java.lang.Object fCombo,
java.lang.Object fText)
|
void |
showNextTermDoc(java.lang.Object fText)
|
void |
showParsed()
Update the parsed and rewritten query views. |
void |
showPositions(java.lang.Object fText)
|
void |
showPrevDoc(java.lang.Object docNum)
|
void |
showSearchStatus(java.lang.String msg)
As showStatus(String) but also sets the "Last search time" label. |
void |
showSlowStatus(java.lang.String msg,
long counter)
|
void |
showStatus(java.lang.String msg)
Display a message on the status bar for 5 seconds. |
void |
showTerm(java.lang.Object fCombo,
java.lang.Object fText)
|
void |
showTermDocs(java.lang.Object tTable)
|
void |
showTField(java.lang.Object table)
|
void |
showTV(java.lang.Object table)
|
static Luke |
startLuke(java.lang.String[] args)
Start the GUI, and optionally open an index. |
void |
toggleKeep(java.lang.Object filesTable)
|
static void |
usage()
|
Methods inherited from class thinlet.Thinlet |
---|
add, add, add, changeField, characters, create, doLayout, endElement, find, find, get, get, getBoolean, getChoice, getClass, getColor, getComponent, getCount, getDesktop, getDOMAttribute, getDOMCount, getDOMNode, getDOMText, getFont, getIcon, getIcon, getIcon, getIndex, getInteger, getItem, getItems, getLangResource, getLangResourceDefault, getParent, getPreferredSize, getPreferredSize, getProperty, getRectangle, getSelectedIndex, getSelectedItem, getSelectedItems, getSize, getString, getUseVectors, getWidget, handleException, invoke, isFocusTraversable, paint, parse, parse, parse, parse, parseDOM, parseXML, processEvent, putProperty, remove, removeAll, repaint, requestFocus, run, set, setAllI18n, setBoolean, setChoice, setColor, setColors, setComponent, setFocus, setFont, setFont, setFont, setIcon, setInteger, setKeystroke, setLangResource, setLangResourceDefault, setMethod, setResourceBundle, setString, setUseVectors, startElement, update |
Methods inherited from class java.awt.Container |
---|
add, add, add, add, add, addContainerListener, addImpl, addNotify, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getInsets, getLayout, getListeners, getMaximumSize, getMinimumSize, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, paramString, preferredSize, print, printComponents, processContainerEvent, remove, remove, removeAll, removeContainerListener, removeNotify, setComponentZOrder, setFocusCycleRoot, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree |
Methods inherited from class java.awt.Component |
---|
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getAccessibleContext, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphics, getGraphicsConfiguration, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getToolkit, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, reshape, resize, resize, setBackground, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setMinimumSize, setName, setPreferredSize, setSize, setSize, setVisible, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
public static final int THEME_DEFAULT
public static final int THEME_GRAY
public static final int THEME_SANDSTONE
public static final int THEME_SKY
public static final int THEME_NAVY
public int[][] themes
Constructor Detail |
---|
public Luke()
Method Detail |
---|
public void setTheme(int which)
which
- one of the predefined themes. For custom themes use Thinlet.setColors(int, int, int, int, int, int, int, int, int)
.public void actionTheme(java.lang.Object menu)
menu
- public void populateAnalyzers(java.lang.Object combo)
combo
- public java.lang.Class[] getAnalyzers()
public java.util.List getPlugins()
public LukePlugin getPlugin(java.lang.String className)
className
- fully qualified plugin classname
public void showStatus(java.lang.String msg)
msg
- message to display. Too long messages will be truncated by the UI.public void showSearchStatus(java.lang.String msg)
showStatus(String)
but also sets the "Last search time" label.
msg
- public void showSlowStatus(java.lang.String msg, long counter)
public java.lang.Object addComponent(java.lang.Object parent, java.lang.String compView, java.lang.String handlerStr, java.lang.Object[] argv)
parent
- add the new component to this parentcompView
- path to the XUL resourcehandlerStr
- fully qualified classname of the handler to instantiate,
or null if the current class will become the handlerargv
- if not null, these arguments will be passed to the
appropriate constructor.
public void errorMsg(java.lang.String msg)
msg
- error messagepublic void infoMsg(java.lang.String msg)
msg
- info messagepublic void actionOpen()
public void openBrowse(java.lang.Object path)
path
- Thinlet widget to put the resultpublic void saveBrowse(java.lang.Object path, java.lang.Object startButton)
path
- Thinlet widget to put the resultpublic void setupInit(java.lang.Object dialog)
dialog
- public void openOk(java.lang.Object dialog)
NOTE: this method is invoked from the UI. If you need to open an index
programmatically, you should use #openIndex(String, boolean, boolean, boolean)
instead.
dialog
- UI dialog with parameterspublic void actionClose()
public void actionCommit()
public void putUserData(java.lang.Object dialog)
public void deleteUserData(java.lang.Object dialog)
public void commitUserData(java.lang.Object dialog)
public void actionReopen()
public void openIndex(java.lang.String name, boolean force, java.lang.String dirImpl, boolean ro, boolean ramdir, boolean keepCommits, org.apache.lucene.index.IndexCommit point, int tiiDivisor)
pName
- path to indexforce
- if true, and the index is locked, unlock it first. If false, and
the index is locked, an error will be reported.readOnly
- open in read-only mode, and disallow modifications.public org.apache.lucene.store.FSDirectory openDirectory(java.lang.String dirImpl, java.lang.String file, boolean create) throws java.lang.Exception
java.lang.Exception
public boolean isSlowAccess()
public void setSlowAccess(boolean slowAccess)
public void initPlugins()
public void showCommitFiles(java.lang.Object commitTable) throws java.lang.Exception
java.lang.Exception
public void actionTopTerms(java.lang.Object nTerms)
nTerms
- Thinlet widget containing the number of top terms to showpublic void clipTopTerms(java.lang.Object tTable)
public void browseTermDocs(java.lang.Object tTable)
tTable
- Thinlet table widget, where selected row contains a property named "term",
which is the selected Term
instancepublic void showTermDocs(java.lang.Object tTable)
public void actionUndelete()
public void actionConvert(java.lang.Object method)
public java.util.List<java.lang.String> getIndexDeletableNames(org.apache.lucene.store.Directory d)
public org.apache.lucene.store.Directory getDirectory()
public org.apache.lucene.index.IndexReader getIndexReader()
public void setIndexReader(org.apache.lucene.index.IndexReader reader, java.lang.String indexName)
public java.util.List<java.lang.String> getIndexFileNames(org.apache.lucene.store.Directory d)
public void actionCheckIndex()
public void checkIndex(java.lang.Object dialog)
public void fixIndex(java.lang.Object dialog)
public boolean isFSBased(org.apache.lucene.store.Directory dir)
public void actionCleanup()
public void toggleKeep(java.lang.Object filesTable)
public void _actionCleanup(java.lang.Object filesTable)
public boolean removeFile(java.io.File f)
f
- root file name
public void actionExport()
public void export(java.lang.Object dialog)
public void _runExport(java.io.File out, boolean gzip, java.util.Observer obs, java.lang.Object dialog, Ranges ranges)
public void abortExport(java.lang.Object dialog)
public void actionOptimize()
method
- Thinlet menuitem widget containing the choice of index format.
If the widget name is "optCompound" then the index will be optimized into compound
format; otherwise a plain multi-file format will be used.
NOTE: this method is usually invoked from the GUI, and it also re-initializes GUI and plugins.
public void optimize(java.lang.Object dialog)
public void showPrevDoc(java.lang.Object docNum)
public void showNextDoc(java.lang.Object docNum)
public void showDoc(java.lang.Object docNum)
public void actionAddDocument(java.lang.Object docTable)
public void actionReconstruct(java.lang.Object docNumText)
public boolean actionEditAdd(java.lang.Object editdoc)
public void actionEditReplace(java.lang.Object editdoc)
public void actionEditAddField(java.lang.Object editdoc)
public void actionEditDeleteField(java.lang.Object editfield)
public void actionMLT(java.lang.Object docNum, java.lang.Object docTable)
public void showTV(java.lang.Object table)
public void clipTV(java.lang.Object vTable)
public void actionSetNorm(java.lang.Object table) throws java.lang.Exception
java.lang.Exception
public void displayNewNorm(java.lang.Object dialog)
public void setNorm(java.lang.Object dialog)
public void showTField(java.lang.Object table)
public void _showData(java.lang.Object dialog)
public void saveField(java.lang.Object table)
public void clipCopyFields(java.lang.Object table)
public void clipCopyDoc(java.lang.Object table)
public void showFirstTerm(java.lang.Object fCombo, java.lang.Object fText)
public void showNextTerm(java.lang.Object fCombo, java.lang.Object fText)
public void showTerm(java.lang.Object fCombo, java.lang.Object fText)
public void showFirstTermDoc(java.lang.Object fText)
public void showNextTermDoc(java.lang.Object fText)
public void showPositions(java.lang.Object fText)
public void _showPayloads(java.lang.Object dialog)
public void clipPositions(java.lang.Object pTable)
public void showAllTermDoc(java.lang.Object fText)
public org.apache.lucene.analysis.Analyzer createAnalyzer(java.lang.Object srchOpts)
protected java.lang.String getDefaultField(java.lang.Object srchOptTabs)
public org.apache.lucene.search.Query createQuery(java.lang.String queryString) throws java.lang.Exception
java.lang.Exception
public org.apache.lucene.search.Similarity createSimilarity(java.lang.Object srchOpts)
public AccessibleHitCollector createCollector(java.lang.Object srchOpts) throws java.lang.Exception
java.lang.Exception
public void explainStructure(java.lang.Object qTabs)
public void showParsed()
public void search(java.lang.Object qField)
qField
- Thinlet widget containing the querypublic void prevPage(java.lang.Object sTable)
public void nextPage(java.lang.Object sTable)
public void explainResult(java.lang.Object sTable)
sTable
- Thinlet table widget containing selected search result.public void gotoDoc(java.lang.Object sTable)
public void deleteTermDoc(java.lang.Object fText)
public void deleteDoc(java.lang.Object docNum)
public void actionDeleteDocList(java.lang.Object docList)
public void deleteDocList(java.lang.Object searchTable)
public void actionAbout()
public void actionShowFonts()
public void setupSelFont(java.lang.Object selfont)
selfont
- font selection dialogpublic void selectFont(java.lang.Object selfont)
selfont
- font selection dialogpublic void actionSetFont(java.lang.Object selfont)
selfont
- font selection dialogpublic void actionSetDecoder(java.lang.Object fList, java.lang.Object combo)
public org.apache.lucene.search.Similarity getCustomSimilarity()
public void setCustomSimilarity(org.apache.lucene.search.Similarity s)
s
- public void actionDesignSimilarity()
public boolean destroy()
exitOnDestroy
is true (such as when Luke was
started from the main method), invoke also System.exit().
destroy
in class thinlet.Thinlet
public void actionExit()
public void goUrl(java.lang.Object url)
url
- public static Luke startLuke(java.lang.String[] args)
args
- index parameters
public static void main(java.lang.String[] args)
startLuke(String[])
instead.
args
- public static void usage()
public void lostOwnership(java.awt.datatransfer.Clipboard arg0, java.awt.datatransfer.Transferable arg1)
lostOwnership
in interface java.awt.datatransfer.ClipboardOwner
public int getNumTerms()
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |