Hello,
I'm using the OfficeBean in a java project in windows, and
I'd like to
disable document recovery after a crash for some documents.
I've tried to use the NoRestore Property, with no success.
If I close the application after loading the document, and
then I
terminate soffice.bin, on the next start of openoffice I get
the
Recovery window.
Any ideas?
Here's an extract from my code, look down for the complete
working code
if you want to test:
PropertyValue[] loadProps = new PropertyValue[1];
loadProps[0] = new PropertyValue();
loadProps[0].Name = "NoRestore";
loadProps[0].Value = new Boolean(Boolean.TRUE);
System.out.println(System.currentTimeMillis() + " -
Loading blank
document");
oBean.loadFromURL("private:factory/swriter",loadPr
ops);
String docUrl =
createUNOFileURL("\\mobyv01\test\HP_DX2200_uT_P4_52
4.doc", oBean);
System.out.println(System.currentTimeMillis() + " -
Loading document: "
+ docUrl);
oBean.loadFromURL(docUrl, loadProps);
THIS IS THE COMPLETE CODE (TestConnection.java):
import java.awt.Frame;
import java.net.MalformedURLException;
import org.eclipse.swt.widgets.Shell;
import com.sun.star.beans.PropertyValue;
import com.sun.star.comp.beans.OOoBean;
import com.sun.star.comp.beans.OfficeDocument;
import com.sun.star.frame.XController;
import com.sun.star.frame.XDispatchHelper;
import com.sun.star.frame.XDispatchProvider;
import com.sun.star.frame.XFrame;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.uno.UnoRuntime;
public class TestConnection {
static com.sun.star.uno.XComponentContext xContext =
null;
static long SLEEPTIME = 3000;
/**
* param args
*/
public static void main(String[] args) {
try {
// get the remote office component context
// xContext =
com.sun.star.comp.helper.Bootstrap.bootstrap();
// System.out.println("Connected to a
running office ...");
Shell oShell = new Shell();
Frame oFrame = new Frame();
System.out.println("Creating bean");
OOoBean oBean = new OOoBean();
System.out.println("Created Bean");
if (oBean.getOOoConnection()!=null)
System.out.println("Connection is not
null");
else
System.out.println("Connection is
null");
oFrame.add(oBean);
oFrame.setVisible(true);
oFrame.setSize(500, 400);
//imposto le proprietà di apertura del
documento.
//In questo caso faccio in modo che non venga
chiesto il
recovery in caso di crash.
PropertyValue[] loadProps = new
PropertyValue[1];
loadProps[0] = new PropertyValue();
loadProps[0].Name = "NoRestore";
loadProps[0].Value = new Boolean(Boolean.TRUE);
System.out.println(System.currentTimeMillis() +
" - Loading
blank document");
oBean.loadFromURL("private:factory/swriter",loadPr
ops);
//Thread.sleep(SLEEPTIME);
String docUrl =
createUNOFileURL("\\mobyv01\test\HP_DX2200_uT_P4_52
4.doc", oBean);
System.out.println(System.currentTimeMillis() +
" - Loading
document: " + docUrl);
oBean.loadFromURL(docUrl, loadProps);
//System.out.println(System.currentTimeMillis()
+ " -
Aquiring system window");
//oBean.aquireSystemWindow();
System.out.println(System.currentTimeMillis() +
" - Saving
document");
oBean.storeToURL("file:///C:/prova/prova.doc",
null);
System.out.println(System.currentTimeMillis() +
" -
Document saved");
Thread.sleep(SLEEPTIME);
// prende il documento corrente
OfficeDocument oDoc = oBean.getDocument();
XMultiServiceFactory xFactory =
oBean.getMultiServiceFactory();
/* richiedo alla factory il servizio (?)
dispatchHelper,
dapprima creandolo come object (la factory è fatta in modo
* che restituisca sempre oggetti generici) e
poi la casto
al'interfaccia XDispatchHelper.
* Non posso fare il cast direttamente perché
il framework
di OOO mi obbliga ad utilizzare il metodo queryInterface,
* che esegue un cast "safe"
dell'oggetto. Se il cast non
riesce per qualche motivo, allora mi restituisce null.
*/
Object dispatchHelperObject =
xFactory.createInstance("com.sun.star.frame.DispatchHel
per");
XDispatchHelper xDispatchHelper =
(com.sun.star.frame.XDispatchHelper)
UnoRuntime.queryInterface(
com.sun.star.frame.XDispatchHelper.class,
dispatchHelperObject);
XController xController =
oDoc.getCurrentController();
/* questa non l'ho capita bene: Frame
implementa
l'interfaccia XDispatchProvider. Non so se ci sono altri
servizi o
* oggetti che la implementano.
*/
XFrame xFrame = xController.getFrame();
XDispatchProvider xDispatchProvider =
(XDispatchProvider)UnoRuntime.queryInterface(XDispatchProvid
er.class,
xFrame);
//adesso finalmente posso inviare
(dispatch) il comando
all'istanza remota (anche se in questo caso è in locale) di
OOO.
System.out.println(System.currentTimeMillis() +
" - mando
il comando close");
xDispatchHelper.executeDispatch(xDispatchProvider,
".uno:CloseDoc", null, 0, null);
System.out.println(System.currentTimeMillis() +
" - mandato
il comando close");
Thread.sleep(SLEEPTIME);
if
(oBean.getOOoDesktop().getCurrentComponent()==null) {
System.out.println("component is
null");
//oBean = new OOoBean();
}
oBean.loadFromURL("file:///C:/prova/prova.doc",
loadProps);
System.out.println(System.currentTimeMillis() +
" -
Stopping connection");
//oBean.stopOOoConnection();
//System.out.println("Connection
stopped");
} catch (Exception oEx) {
System.out.println("Errore in creazione
officebean");
oEx.printStackTrace();
}
}
/**
* Creating a correct File URL that OpenOffice can
handle. This is
* necessary to be platform independent.
*
* param filelocation
* return
*/
public static String createUNOFileURL(String
filelocation, OOoBean
oBean)
{
java.io.File newfile = new
java.io.File(filelocation);
java.net.URL before = null;
try
{
before = newfile.toURL();
}
catch (MalformedURLException e) {
System.out.println(e);
}
String myUNOFileURL = "";
try {
// Create a URL, which can be used by UNO
myUNOFileURL =
com.sun.star.uri.ExternalUriReferenceTranslator
.create(oBean.getOOoConnection().getComponentContext()).tran
slateToInternal(before.toExternalForm());
} catch (Exception oEx) {
System.out.println("Errore: ");
oEx.printStackTrace();
}
if (myUNOFileURL.length() == 0 &&
filelocation.length() > 0)
{
System.out.println("File URL conversion
faild. Filelocation " +
"contains illegal characters:
" + filelocation);
}
return myUNOFileURL;
}
}
------------------------------------------------------------
---------
To unsubscribe, e-mail: dev-unsubscribe api.openoffice.org
For additional commands, e-mail: dev-help api.openoffice.org
|