OpenOffice.org provides automatic numbering for texts. For instance, paragraphs can be numbered or listed with bullets in a hierarchical manner, chapter headings can be numbered and lines can be counted and numbered.

string - Contains the name of the paragraph style that marks a paragraph as a chapter heading.

Note that the NumberingRules service is returned by value like most properties in the OpenOffice.org API, therefore you must get the rules from the XPropertySet, change them and put the NumberingRules object back into the property.

The following is an example for the NumberingRules service:

/** This method demonstrates how to set numbering types and numbering levels using the
com.sun.star.text.NumberingRules service
*/
protected void NumberingExample() {
try {
// Go to the end of the document
mxDocCursor.gotoEnd(false);
// Get the RelativeTextContentInsert interface of the document
XRelativeTextContentInsert xRelative = (XRelativeTextContentInsert)
UnoRuntime.queryInterface(XRelativeTextContentInsert.class, mxDocText);
// Use the document's factory to create the NumberingRules service, and get it's
// XIndexAccess interface
XIndexAccess xNum = (XIndexAccess) UnoRuntime.queryInterface(XIndexAccess.class,
mxDocFactory.createInstance("com.sun.star.text.NumberingRules"));
// Also get the NumberingRule's XIndexReplace interface
XIndexReplace xReplace = (XIndexReplace) UnoRuntime.queryInterface(
XIndexReplace.class, xNum);
// Create an array of XPropertySets, one for each of the three paragraphs we're about
// to create
XPropertySet xParas[] = new XPropertySet[3];
for (int i = 0 ; i < 3 ; ++ i) {
// Create a new paragraph
XTextContent xNewPara = (XTextContent) UnoRuntime.queryInterface(
XTextContent.class, mxDocFactory.createInstance(
"com.sun.star.text.Paragraph"));
// Get the XPropertySet interface of the new paragraph and put it in our array
xParas[i] = (XPropertySet) UnoRuntime.queryInterface(
XPropertySet.class, xNewPara);
// Insert the new paragraph into the document after the fish section. As it is
// an insert
// relative to the fish section, the first paragraph inserted will be below
// the next two
xRelative.insertTextContentAfter (xNewPara, mxFishSection);
// Separate from the above, but also needs to be done three times
// Get the PropertyValue sequence for this numbering level
PropertyValue[] aProps = (PropertyValue []) xNum.getByIndex(i);
// Iterate over the PropertyValue's for this numbering level, looking for the
// 'NumberingType' property
for (int j = 0 ; j < aProps.length ; ++j) {
if (aProps[j].Name.equals ("NumberingType")) {
// Once we find it, set it's value to a new type,
// dependent on which
// numbering level we're currently on
switch ( i ) {
case 0 : aProps[j].Value = new Short(NumberingType.ROMAN_UPPER);
break;
case 1 : aProps[j].Value = new Short(NumberingType.CHARS_UPPER_LETTER);
break;
case 2 : aProps[j].Value = new Short(NumberingType.ARABIC);
break;
}
// Put the updated PropertyValue sequence back into the
// NumberingRules service
xReplace.replaceByIndex (i, aProps);
break;
}
}
}
// Get the XParagraphCursor interface of our text cursor
XParagraphCursor xParaCursor = (XParagraphCursor) UnoRuntime.queryInterface(
XParagraphCursor.class, mxDocCursor);
// Go to the end of the document, then select the preceding paragraphs
mxDocCursor.gotoEnd(false);
xParaCursor.gotoPreviousParagraph false);
xParaCursor.gotoPreviousParagraph true);
xParaCursor.gotoPreviousParagraph true);
// Get the XPropertySet of the cursor's currently selected text
XPropertySet xCursorProps = (XPropertySet) UnoRuntime.queryInterface(
XPropertySet.class, mxDocCursor);
// Set the updated Numbering rules to the cursor's property set
xCursorProps.setPropertyValue ("NumberingRules", xNum);
mxDocCursor.gotoEnd(false);
// Set the first paragraph that was inserted to a numbering level of 2 (thus it will
// have Arabic style numbering)
xParas[0].setPropertyValue ("NumberingLevel", new Short ((short) 2));
// Set the second paragraph that was inserted to a numbering level of 1 (thus it will
// have 'Chars Upper Letter' style numbering)
xParas[1].setPropertyValue ("NumberingLevel", new Short((short) 1));
// Set the third paragraph that was inserted to a numbering level of 0 (thus it will
// have 'Roman Upper' style numbering)
xParas[2].setPropertyValue("NumberingLevel", new Short((short) 0));
} catch (Exception e) {
e.printStackTrace (System.out);
}
}