blob: 1b099727775f1e50c538fd454137a0f986e72e2b [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 ifc.ui;
import com.sun.star.beans.PropertyValue;
import com.sun.star.beans.XPropertySet;
import com.sun.star.container.XIndexAccess;
import com.sun.star.container.XIndexContainer;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.lang.XServiceInfo;
import com.sun.star.lang.XSingleComponentFactory;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.XComponentContext;
import com.sun.star.ui.UIElementType;
import com.sun.star.ui.XImageManager;
import com.sun.star.ui.XUIConfigurationManager;
import java.io.PrintWriter;
import lib.MultiMethodTest;
public class _XUIConfigurationManager extends MultiMethodTest {
public XUIConfigurationManager oObj;
private String msResourceUrl = "private:resource/menubar/menubar";
private String msMyResourceUrl = "private:resource/menubar/mymenubar";
private XIndexContainer mxSettings = null;
private XIndexAccess mxMenuBarSettings = null;
private XMultiServiceFactory mxMSF = null;
private String sShortCutManagerServiceName = null;
/**
* Some stuff before the tests:
* extract the multi service factory.
*/
protected void before() {
mxMSF = (XMultiServiceFactory)tParam.getMSF();
sShortCutManagerServiceName = (String)tEnv.getObjRelation("XConfigurationManager.ShortCutManager");
}
/**
* reset all changes: do at the end.
*/
public void _reset() {
requiredMethod("removeSettings()");
oObj.reset();
tRes.tested("reset()", true);
}
public void _getUIElementsInfo() {
boolean result = true;
try {
PropertyValue[][]props = oObj.getUIElementsInfo(UIElementType.UNKNOWN);
for (int i=0; i<props.length; i++)
for(int j=0; j<props[i].length; j++)
log.println("Prop["+i+"]["+j+"]: " + props[i][j].Name + " " + props[i][j].Value.toString());
}
catch(com.sun.star.lang.IllegalArgumentException e) {
result = false;
e.printStackTrace(log);
}
tRes.tested("getUIElementsInfo()", result);
}
public void _createSettings() {
mxSettings = oObj.createSettings();
util.dbg.printInterfaces(mxSettings);
tRes.tested("createSettings()", mxSettings != null);
}
public void _hasSettings() {
boolean result = false;
try {
result = oObj.hasSettings(msResourceUrl);
}
catch(com.sun.star.lang.IllegalArgumentException e) {
log.println(e);
result = false;
}
tRes.tested("hasSettings()", result);
}
public void _getSettings() {
requiredMethod("hasSettings()");
boolean result = true;
try {
mxMenuBarSettings = oObj.getSettings(msResourceUrl, true);
result = mxMenuBarSettings != null;
for (int i=0; i<mxMenuBarSettings.getCount(); i++) {
Object[] o = (Object[])mxMenuBarSettings.getByIndex(i);
log.println("+++++++++ i = " + i);
for (int j=0; j<o.length; j++) {
PropertyValue prop = (PropertyValue)o[j];
log.println("Property" + j + ": " + prop.Name + " " + prop.Value.toString());
}
}
}
catch(com.sun.star.container.NoSuchElementException e) {
result = false;
e.printStackTrace(log);
}
catch(com.sun.star.lang.IllegalArgumentException e) {
result = false;
e.printStackTrace(log);
}
catch(com.sun.star.lang.IndexOutOfBoundsException e) {
result = false;
e.printStackTrace(log);
}
catch(com.sun.star.lang.WrappedTargetException e) {
result = false;
e.printStackTrace(log);
}
tRes.tested("getSettings()", result);
}
public void _replaceSettings() {
requiredMethod("getSettings()");
boolean result = true;
PropertyValue[] prop = createMenuBarEntry("My Entry", mxMenuBarSettings, mxMSF, log);
if (prop == null) {
tRes.tested("replaceSettings()", false);
return;
}
createMenuBarItem("Click for Macro", (XIndexContainer)UnoRuntime.queryInterface(
XIndexContainer.class, prop[3].Value), log);
XIndexContainer x = (XIndexContainer)UnoRuntime.queryInterface(XIndexContainer.class, mxMenuBarSettings);
try {
x.insertByIndex(x.getCount(), prop);
}
catch(com.sun.star.lang.IllegalArgumentException e) {
result = false;
e.printStackTrace(log);
}
catch(com.sun.star.lang.IndexOutOfBoundsException e) {
result = false;
e.printStackTrace(log);
}
catch(com.sun.star.lang.WrappedTargetException e) {
result = false;
e.printStackTrace(log);
}
try {
oObj.replaceSettings(msResourceUrl, mxMenuBarSettings);
}
catch(com.sun.star.container.NoSuchElementException e) {
result = false;
e.printStackTrace(log);
}
catch(com.sun.star.lang.IllegalArgumentException e) {
result = false;
e.printStackTrace(log);
}
catch(com.sun.star.lang.IllegalAccessException e) {
result = false;
e.printStackTrace(log);
}
_getSettings();
tRes.tested("replaceSettings()", result);
}
public void _removeSettings() {
requiredMethod("insertSettings()");
boolean result = true;
try {
oObj.removeSettings(msMyResourceUrl);
}
catch(com.sun.star.container.NoSuchElementException e) {
result = false;
e.printStackTrace(log);
}
catch(com.sun.star.lang.IllegalArgumentException e) {
result = false;
e.printStackTrace(log);
}
catch(com.sun.star.lang.IllegalAccessException e) {
e.printStackTrace(log);
result = false;
}
tRes.tested("removeSettings()", result);
}
public void _insertSettings() {
requiredMethod("createSettings()");
requiredMethod("replaceSettings()");
boolean result = true;
util.dbg.printInterfaces(mxSettings);
PropertyValue[] prop = createMenuBarEntry("A new entry", mxSettings, mxMSF, log);
if (prop == null) {
tRes.tested("replaceSettings()", false);
return;
}
createMenuBarItem("A new sub entry", (XIndexContainer)UnoRuntime.queryInterface(
XIndexContainer.class, prop[3].Value), log);
XIndexContainer x = (XIndexContainer)UnoRuntime.queryInterface(XIndexContainer.class,mxSettings);
try {
int count = x.getCount();
x.insertByIndex(count, prop);
}
catch(com.sun.star.lang.IllegalArgumentException e) {
result = false;
e.printStackTrace(log);
}
catch(com.sun.star.lang.IndexOutOfBoundsException e) {
result = false;
e.printStackTrace(log);
}
catch(com.sun.star.lang.WrappedTargetException e) {
result = false;
e.printStackTrace(log);
}
try {
oObj.insertSettings(msMyResourceUrl, mxSettings);
}
catch(com.sun.star.container.ElementExistException e) {
e.printStackTrace(log);
result = false;
}
catch(com.sun.star.lang.IllegalArgumentException e) {
e.printStackTrace(log);
result = false;
}
catch(com.sun.star.lang.IllegalAccessException e) {
e.printStackTrace(log);
result = false;
}
tRes.tested("insertSettings()", result);
}
/**
* Only a short test.
* See complex.imageManager.CheckImageManager for a more extensive test of
* this implementation.
*/
public void _getImageManager() {
Object o = oObj.getImageManager();
log.println("###### ImageManager ");
XImageManager xImageManager = (XImageManager)UnoRuntime.queryInterface(XImageManager.class, o);
tRes.tested("getImageManager()", xImageManager != null);
}
/**
* get a shortcut manager
*/
public void _getShortCutManager() {
Object o = oObj.getShortCutManager();
XServiceInfo xSI = (XServiceInfo)UnoRuntime.queryInterface(XServiceInfo.class,o);
String[] serviceNames = xSI.getSupportedServiceNames();
boolean bSupportedServiceFound = false;
for (int i=0; i<serviceNames.length; i++) {
log.println("SuppService: " + serviceNames[i]);
if (serviceNames[i].equals(sShortCutManagerServiceName)) {
bSupportedServiceFound = true;
}
}
tRes.tested("getShortCutManager()", bSupportedServiceFound);
}
public void _getEventsManager() {
Object o = oObj.getEventsManager();
tRes.tested("getEventsManager()", o == null);
}
/**
* Create a menu bar entry for adding to the menu bar of the Office.
* @param sLabelName The name of the new entry.
* @param xMenuBarSettings The existing menu bar settings, used for creating the new entry.
* @return An array of properties of the new entry.
*/
public static PropertyValue[] createMenuBarEntry(String sLabelName, XIndexAccess xMenuBarSettings, XMultiServiceFactory xMSF, PrintWriter log) {
PropertyValue[] prop = new PropertyValue[4];
prop[0] = new PropertyValue();
prop[0].Name = "CommandURL";
prop[0].Value = "vnd.openoffice.org:MyMenu";
prop[1] = new PropertyValue();
prop[1].Name = "Label";
prop[1].Value = sLabelName;
prop[2] = new PropertyValue();
prop[2].Name = "Type";
prop[2].Value = new Short((short)0);
prop[3] = new PropertyValue();
prop[3].Name = "ItemDescriptorContainer";
XSingleComponentFactory xFactory = (XSingleComponentFactory)UnoRuntime.queryInterface(
XSingleComponentFactory.class, xMenuBarSettings);
try {
XPropertySet xProp = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, xMSF);
XComponentContext xContext = (XComponentContext)UnoRuntime.queryInterface(
XComponentContext.class, xProp.getPropertyValue("DefaultContext"));
prop[3].Value = xFactory.createInstanceWithContext(xContext);
}
catch(com.sun.star.uno.Exception e) {
log.println("Could not create an instance for ItemDescriptorContainer property.");
e.printStackTrace(log);
return null;
}
return prop;
}
/**
* Create a sub entry to the menu bar.
* @param sLabelName The name of the entry in the UI.
* @param xDescriptionContainer The parent entry in the menu bar where
* this entry is added.
*/
public static void createMenuBarItem(String sLabelName, XIndexContainer xDescriptionContainer, PrintWriter log) {
PropertyValue[]aMenuItem = new PropertyValue[3];
// create a menu item
aMenuItem[0] = new PropertyValue();
aMenuItem[0].Name = "CommandURL";
aMenuItem[0].Value = "macro:///Standard.Module1.Test()";
aMenuItem[1] = new PropertyValue();
aMenuItem[1].Name = "Label";
aMenuItem[1].Value = sLabelName;
aMenuItem[2] = new PropertyValue();
aMenuItem[2].Name = "Type";
aMenuItem[2].Value = new Short((short)0);
try {
xDescriptionContainer.insertByIndex(0, aMenuItem);
}
catch(com.sun.star.lang.IllegalArgumentException e) {
e.printStackTrace(log);
}
catch(com.sun.star.lang.IndexOutOfBoundsException e) {
e.printStackTrace(log);
}
catch(com.sun.star.lang.WrappedTargetException e) {
e.printStackTrace(log);
}
}
}