/* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * 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 . */ package com.sun.star.wizards.common; import java.util.ArrayList; import java.util.List; 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.ucb.Command; import com.sun.star.ucb.GlobalTransferCommandArgument; import com.sun.star.ucb.NameClash; import com.sun.star.ucb.OpenCommandArgument2; import com.sun.star.ucb.OpenMode; import com.sun.star.ucb.TransferCommandOperation; import com.sun.star.ucb.XCommandProcessor; import com.sun.star.ucb.XContentAccess; import com.sun.star.ucb.XContentIdentifier; import com.sun.star.ucb.XContentIdentifierFactory; import com.sun.star.ucb.XContentProvider; import com.sun.star.ucb.XDynamicResultSet; import com.sun.star.uno.UnoRuntime; /** * 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; private FileAccess fa; public UCB(XMultiServiceFactory xmsf) throws Exception { ucb = xmsf.createInstanceWithArguments( "com.sun.star.ucb.UniversalContentBroker", new Object[0] ); fa = new FileAccess(xmsf); } public void deleteDirContent(String dir) throws Exception { if (!fa.exists(dir,true)) { return; } List l = listFiles(dir,null); for (int i = 0; i files = listFiles(sourceDir,verifier); for (int i = 0; i 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 = PropertyNames.PROPERTY_TITLE; aArg.Properties[0].Handle = -1; XDynamicResultSet xSet; xSet = UnoRuntime.queryInterface( XDynamicResultSet.class,executeCommand(xContent, "open", aArg)); XResultSet xResultSet = xSet.getStaticResultSet(); List files = new ArrayList(); 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 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); } }