/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
package ifc.frame;
import lib.MultiMethodTest;
import lib.Status;
import lib.StatusException;
import util.SOfficeFactory;
import com.sun.star.beans.PropertyValue;
import com.sun.star.frame.XDesktop;
import com.sun.star.frame.XFrame;
import com.sun.star.frame.XSynchronousFrameLoader;
import com.sun.star.lang.XComponent;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.util.URL;
import com.sun.star.util.XURLTransformer;
/**
* Testing com.sun.star.frame.XSynchronousFrameLoader
* interface methods :
*
load()
cancel()
* This test needs the following object relations : *
'FrameLoader.URL'
(of type String
):
* an url of component to be loaded 'FrameLoader.Frame'
(optional)
* (of type com.sun.star.frame.XFrame
):
* a target frame where component to be loaded. If this
* relation is omitted then a text document created and its
* frame is used.
*
* @see com.sun.star.frame.XSynchronousFrameLoader
*/
public class _XSynchronousFrameLoader extends MultiMethodTest {
public XSynchronousFrameLoader oObj = null; // oObj filled by MultiMethodTest
private String url = null ;
private XFrame frame = null ;
private XComponent frameSup = null ;
private PropertyValue[] descr = null;
/**
* Retrieves all relations. If optional relation
* FrameLoader.Frame
not found
* creates a new document and otains its frame for loading.
*
* Also MediaDescriptor
is created using
* URL from FrameLoader.URL
relation.
*
* @throws StatusException If one of required relations not found.
*/
public void before() {
url = (String) tEnv.getObjRelation("FrameLoader.URL") ;
frame = (XFrame) tEnv.getObjRelation("FrameLoader.Frame") ;
if (url == null) {
throw new StatusException(Status.failed("Some relations not found")) ;
}
SOfficeFactory SOF = SOfficeFactory.getFactory(
(XMultiServiceFactory)tParam.getMSF() );
XURLTransformer xURLTrans = null;
// if frame is not contained in relations the writer frmame will be used.
if (frame == null) {
try {
log.println( "creating a textdocument" );
frameSup = SOF.createTextDoc( null );
Object oDsk = (
(XMultiServiceFactory)tParam.getMSF()).createInstance
("com.sun.star.frame.Desktop") ;
XDesktop dsk = (XDesktop) UnoRuntime.queryInterface
(XDesktop.class, oDsk) ;
frame = dsk.getCurrentFrame() ;
Object o = (
(XMultiServiceFactory)tParam.getMSF()).createInstance
("com.sun.star.util.URLTransformer") ;
xURLTrans = (XURLTransformer) UnoRuntime.queryInterface
(XURLTransformer.class, o) ;
} catch ( com.sun.star.uno.Exception e ) {
// Some exception occures.FAILED
e.printStackTrace( log );
throw new StatusException( "Couldn't create a document.", e );
}
}
URL[] urlS = new URL[1];
urlS[0] = new URL();
urlS[0].Complete = url;
boolean res = xURLTrans.parseStrict(urlS);
log.println("Parsing URL '" + url + "': " + res);
descr = new PropertyValue[1] ;
descr[0] = new PropertyValue();
descr[0].Name = "URL" ;
descr[0].Value = urlS[0] ;
}
/**
* Tries to load component to a frame.
* Has OK status if true
is returned.
*/
public void _load() {
boolean result = oObj.load(descr, frame) ;
tRes.tested("load()", result) ;
}
/**
* Tries to load component to a frame in separate thread to
* avoid blocking of the current thread and immediately
* cancels loading.
*
* Has OK status if flase
is returned,
* i.e. loading was not completed.
*/
public void _cancel() {
requiredMethod("load()") ;
final boolean[] result = new boolean[1] ;
(new Thread() {
public void run() {
result[0] = oObj.load(descr, frame);
}
}).start();
oObj.cancel() ;
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {}
tRes.tested("cancel()", !result[0]) ;
}
/**
* Disposes document if it was created for frame supplying.
*/
protected void after() {
if (frameSup != null) {
frameSup.dispose();
}
}
}