Hi,
After some coding and researches I have found that following code works
and adds UserDefinedAttributes to a Paragraph or a Text.
But "TextDefinedAttributes" is missing from the documentation (IDL
Reference). Why this? What is the service that has this Property?
This is the code:
********************************************************************************
public class OoHelloWorld {
XMultiComponentFactory xMCF;
XComponentContext xContext;
String
nameSpace="urn:ooo:names:tc:opendocument:xmlns:semantic-text:1.0";
public OoHelloWorld() {
try {
xContext = Bootstrap.bootstrap();
System.out.println("Connessione Avviata...");
// Ottengo il Service Manager
xMCF = xContext.getServiceManager();
} catch (BootstrapException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
OoHelloWorld oW=new OoHelloWorld();
oW.mainTest();
System.out.println("Uscita!");
System.exit(0);
}
private void mainTest() {
if (xMCF!=null) {
System.out.println("Avviato!");
try {
XComponent xComponent = openOoWriter(xContext, xMCF);
//Interfaccia documento di testo
XTextDocument xTextDocument =
(XTextDocument)UnoRuntime.queryInterface(XTextDocument.class, xComponent);
//Interfaccia del Testo
XText xText = xTextDocument.getText();
// Cursore
XTextCursor xTextCursor = xText.createTextCursor();
XPropertySet xCursorProps = (XPropertySet)
UnoRuntime.queryInterface(XPropertySet.class, xTextCursor);
// Inserisco il primo con i relativi paragrafi
xCursorProps.setPropertyValue("ParaStyleName", "Heading 1");
xText.insertString( xTextCursor, "1363", false );
xText.insertControlCharacter(xTextCursor,
ControlCharacter.PARAGRAPH_BREAK, false);
xText.insertString( xTextCursor, "This is the first
Paragraph", false );
xText.insertControlCharacter(xTextCursor,
ControlCharacter.PARAGRAPH_BREAK, false);
addAttributeToParagraph(xText,2,2,"semantic-text:id_emen","22222");
xText.insertString( xTextCursor, "This is the second
Paragraph", false );
xText.insertControlCharacter(xTextCursor,
ControlCharacter.PARAGRAPH_BREAK, false);
addAttributeToParagraph(xText,3,3,"semantic-text:id_emen","333333");
addAttributeToParagraph(xText,1,3,"semantic-text:ddl","1363");
// Inserisco il secondo con i relativi paragrafi
xCursorProps.setPropertyValue("ParaStyleName", "Heading 1");
xText.insertString( xTextCursor, "1364", false );
xText.insertControlCharacter(xTextCursor,
ControlCharacter.PARAGRAPH_BREAK, false);
xText.insertString( xTextCursor, "This is the first
Paragraph", false );
addAttributeToText(xTextCursor,"semantic-text:text","N/A");
xText.insertControlCharacter(xTextCursor,
ControlCharacter.PARAGRAPH_BREAK, false);
addAttributeToParagraph(xText,5,5,"semantic-text:id_emen","444444");
addAttributeToParagraph(xText,4,5,"semantic-text:ddl","1364");
} catch ( com.sun.star.uno.Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
else
System.out.println("Service Manager non disponibile!");
}
private void addAttributeToParagraph(XText xText,
int startParagraph,
int endParagraph,
String XMLAttrName,
String XMLAttrVal)
throws UnknownPropertyException, PropertyVetoException,
IllegalArgumentException, WrappedTargetException {
XEnumerationAccess xParaAccess = (XEnumerationAccess)
UnoRuntime.queryInterface(XEnumerationAccess.class, xText);
XEnumeration xParaEnum = xParaAccess.createEnumeration();
int contParagraph=1;
while (xParaEnum.hasMoreElements()) {
XServiceInfo xInfo;
try {
xInfo = (XServiceInfo)
UnoRuntime.queryInterface(XServiceInfo.class, xParaEnum.nextElement());
if (contParagraph>=startParagraph &&
contParagraph<=endParagraph ) {
XPropertySet xSet = (XPropertySet)
UnoRuntime.queryInterface(XPropertySet.class, xInfo);
// Creo il nuovo attributo XML
System.out.println("Aggiungo l'attributo al
"+contParagraph +"° paragrafo.");
XNameContainer uda = createMyAttribute(xSet,
"ParaUserDefinedAttributes",
"CDATA",
XMLAttrName,
XMLAttrVal);
// lo aggiungo alla proprietà del paragrafo
xSet.setPropertyValue("ParaUserDefinedAttributes", uda);
}
} catch (NoSuchElementException e1) {
System.out.println("Attenzione non vi sono paragrafi!");
e1.printStackTrace();
return;
} catch (WrappedTargetException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
return;
}
contParagraph++;
}
}
private void addAttributeToText(XTextCursor xTextCursor,
String XMLAttrName,
String XMLAttrVal) throws
UnknownPropertyException, PropertyVetoException,
IllegalArgumentException, WrappedTargetException {
XPropertySet xCursorProps = (XPropertySet)
UnoRuntime.queryInterface(XPropertySet.class, xTextCursor);
// Creo il nuovo attributo XML
XNameContainer uda = createMyAttribute(xCursorProps,
"TextUserDefinedAttributes",
"CDATA",
XMLAttrName,
XMLAttrVal);
// lo aggiungo alla proprietà del paragrafo
xCursorProps.setPropertyValue("TextUserDefinedAttributes", uda);
}
private XNameContainer createMyAttribute(XPropertySet xSet,
String propertyName,
String XMLAttrType,
String XMLAttrName,
String XMLAttrValue) throws
UnknownPropertyException, WrappedTargetException {
AttributeData attr = new AttributeData();
attr.Namespace = nameSpace;
attr.Type = XMLAttrType;
attr.Value = XMLAttrValue;
XNameContainer uda = null;
try{
uda = (XNameContainer) AnyConverter.toObject(
new Type(XNameContainer.class),
xSet.getPropertyValue(propertyName));
uda.insertByName(XMLAttrName, attr);
} catch (com.sun.star.lang.IllegalArgumentException e){
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ElementExistException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return uda;
}
private XComponent openOoWriter(XComponentContext xContext,
XMultiComponentFactory xMCF) throws Exception, IOException,
IllegalArgumentException {
// Servizio Desktop
Object oDesktop =
xMCF.createInstanceWithContext("com.sun.star.frame.Desktop", xContext);
//System.out.println(oDesktop.getClass().getName());
// Interfaccia xDesktop
XDesktop xDesktop = (com.sun.star.frame.XDesktop)
UnoRuntime.queryInterface(com.sun.star.frame.XDesktop.class, oDesktop);
PropertyValue xEmptyArgs[] = new PropertyValue[0];
// Interfaccia Loader dei Componenti
XComponentLoader xComponentLoader = (XComponentLoader)
UnoRuntime.queryInterface(com.sun.star.frame.XComponentLoader.class,
xDesktop);
// Interfaccia per il Componente sWriter
XComponent xComponent =
xComponentLoader.loadComponentFromURL("private:factory/swriter",
"_blank", 0, xEmptyArgs);
return xComponent;
}
}
********************************************************************************
Bye
Roberto
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]