blob: 5bf25a9a7141a761521076e6b5b68660e3acf305 [file] [log] [blame]
/**************************************************************
*
* 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 complex.ucb;
/**
* @author ab106281
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
import java.util.List;
import java.util.Vector;
import com.sun.star.beans.Property;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.sdbc.XResultSet;
import com.sun.star.sdbc.XRow;
// import com.sun.star.uno.XComponentContext;
import com.sun.star.ucb.*;
// import com.sun.star.bridge.XUnoUrlResolver;
import com.sun.star.uno.UnoRuntime;
// import com.sun.star.uno.XComponentContext;
// import com.sun.star.lang.XMultiComponentFactory;
// import com.sun.star.beans.XPropertySet;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openoffice.test.OfficeConnection;
import static org.junit.Assert.*;
/**
* @author rpiterman
* This class is used to copy the content of a folder to
* another folder.
* There is an incosistency with argument order.
* It should be always: dir,filename.
*/
public class UCB {
private Object ucb;
// public String[] getTestMethodNames() {
// return new String[] {"checkWrongFtpConnection"};
// }
public void init(XMultiServiceFactory xmsf) throws Exception {
String[] keys = new String[2];
keys[0] = "Local";
keys[1] = "Office";
ucb =
xmsf.createInstanceWithArguments(
"com.sun.star.ucb.UniversalContentBroker",
keys);
}
public void delete(String filename) throws Exception {
executeCommand(getContent(filename), "delete", Boolean.TRUE);
}
/**
* target name can be "", in which case the name stays lige the source name
* @param xContent
* @param aCommandName
* @param aArgument
* @return
* @throws com.sun.star.ucb.CommandAbortedException
* @throws com.sun.star.uno.Exception
*/
public Object executeCommand(
Object xContent,
String aCommandName,
Object aArgument)
throws com.sun.star.ucb.CommandAbortedException, com.sun.star.uno.Exception {
XCommandProcessor xCmdProcessor =
UnoRuntime.queryInterface(XCommandProcessor.class, xContent);
Command aCommand = new Command();
aCommand.Name = aCommandName;
aCommand.Handle = -1; // not available
aCommand.Argument = aArgument;
return xCmdProcessor.execute(aCommand, 0, null);
}
private List listFiles(String path, Verifier verifier) throws Exception {
Object xContent = getContent(path);
OpenCommandArgument2 aArg = new OpenCommandArgument2();
aArg.Mode = OpenMode.ALL;
aArg.Priority = 32768;
// Fill info for the properties wanted.
aArg.Properties = new Property[] { new Property()};
aArg.Properties[0].Name = "Title";
aArg.Properties[0].Handle = -1;
XDynamicResultSet xSet;
xSet =
UnoRuntime.queryInterface(XDynamicResultSet.class, executeCommand(xContent, "open", aArg));
XResultSet xResultSet = xSet.getStaticResultSet();
List files = new Vector();
if (xResultSet.first())
{
// obtain XContentAccess interface for child content access and XRow for properties
XContentAccess xContentAccess = UnoRuntime.queryInterface(XContentAccess.class, xResultSet);
XRow xRow = UnoRuntime.queryInterface(XRow.class, xResultSet);
do
{
// Obtain URL of child.
String aId = xContentAccess.queryContentIdentifierString();
// First column: Title (column numbers are 1-based!)
String aTitle = xRow.getString(1);
if (aTitle.length() == 0 && xRow.wasNull())
{
//ignore
}
else
{
files.add(aTitle);
}
} while (xResultSet.next()); // next child
}
if (verifier != null)
{
for (int i = 0; i < files.size(); i++)
{
if (!verifier.verify(files.get(i)))
{
files.remove(i--);
}
}
}
return files;
}
public Object getContentProperty(
Object content,
String propName,
Class type)
throws Exception {
Property[] pv = new Property[1];
pv[0] = new Property();
pv[0].Name = propName;
pv[0].Handle = -1;
Object row = executeCommand(content, "getPropertyValues", pv);
XRow xrow = UnoRuntime.queryInterface(XRow.class, row);
if (type.equals(String.class))
{
return xrow.getString(1);
}
else if (type.equals(Boolean.class))
{
return xrow.getBoolean(1) ? Boolean.TRUE : Boolean.FALSE;
}
else if (type.equals(Integer.class))
{
return new Integer(xrow.getInt(1));
}
else if (type.equals(Short.class))
{
return new Short(xrow.getShort(1));
}
else
{
return null;
}
}
public Object getContent(String path) throws Exception
{
XContentIdentifier id = (UnoRuntime.queryInterface(XContentIdentifierFactory.class, ucb)).createContentIdentifier(path);
return (UnoRuntime.queryInterface(XContentProvider.class, ucb)).queryContent(id);
}
public static interface Verifier {
public boolean verify(Object object);
}
@Test public void checkWrongFtpConnection() {
//localhost ;Lo-1.Germany.sun.com; 10.16.65.155
try {
XMultiServiceFactory xLocMSF = getMSF();
String acountUrl = "ftp://noname:nopasswd@nohost";
System.out.println(acountUrl);
init(xLocMSF);
Object content = getContent(acountUrl);
OpenCommandArgument2 aArg = new OpenCommandArgument2();
aArg.Mode = OpenMode.ALL; // FOLDER, DOCUMENTS -> simple filter
aArg.Priority = 32768; // Ignored by most implementations
System.out.println("now executing open");
executeCommand(content, "open", aArg);
fail("Expected 'IllegalArgumentException' was not thrown.");
} catch (com.sun.star.lang.IllegalArgumentException ex) {
//TODO error message;
System.out.println("Correct exception thrown: " + ex.getClass().toString());
} catch(com.sun.star.ucb.InteractiveNetworkException ex) {
System.out.println("This Exception is correctly thrown when no Proxy in StarOffice is used.");
System.out.println("To reproduce the bug behaviour, use a Proxy and try again.");
} catch (Exception ex) {
ex.printStackTrace();
String exceptionName = ex.toString();
System.out.println("ExName: '"+exceptionName+"'");
fail("Wrong exception thrown: " + exceptionName);
}
// System.exit(0);
}
private XMultiServiceFactory getMSF()
{
final XMultiServiceFactory xMSF1 = UnoRuntime.queryInterface(XMultiServiceFactory.class, connection.getComponentContext().getServiceManager());
return xMSF1;
}
// setup and close connections
@BeforeClass public static void setUpConnection() throws Exception {
System.out.println("setUpConnection()");
connection.setUp();
}
@AfterClass public static void tearDownConnection()
throws InterruptedException, com.sun.star.uno.Exception
{
System.out.println("tearDownConnection()");
connection.tearDown();
}
private static final OfficeConnection connection = new OfficeConnection();
}