1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski package ifc.document; 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski import com.sun.star.beans.Property; 26*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyAttribute; 27*b1cdbd2cSJim Jagielski import com.sun.star.i18n.XForbiddenCharacters; 28*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 29*b1cdbd2cSJim Jagielski import java.lang.reflect.Method; 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski //import java.awt.print.PrinterJob; 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski //import javax.print.PrintService; 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski import lib.MultiPropertyTest; 36*b1cdbd2cSJim Jagielski import lib.Status; 37*b1cdbd2cSJim Jagielski import lib.StatusException; 38*b1cdbd2cSJim Jagielski 39*b1cdbd2cSJim Jagielski 40*b1cdbd2cSJim Jagielski /* 41*b1cdbd2cSJim Jagielski * Generic test for all properties contained in this service 42*b1cdbd2cSJim Jagielski */ 43*b1cdbd2cSJim Jagielski public class _Settings extends MultiPropertyTest { 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski /** 46*b1cdbd2cSJim Jagielski * This property accepts only values in a range of 1-3 47*b1cdbd2cSJim Jagielski * @see com.sun.star.document.PrinterIndependentLayout 48*b1cdbd2cSJim Jagielski */ _PrinterIndependentLayout()49*b1cdbd2cSJim Jagielski public void _PrinterIndependentLayout() { 50*b1cdbd2cSJim Jagielski try{ 51*b1cdbd2cSJim Jagielski Short oldVal = (Short) oObj.getPropertyValue("PrinterIndependentLayout"); 52*b1cdbd2cSJim Jagielski Short newVal = oldVal.intValue() == 1 ? new Short("3") : new Short("1"); 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski 55*b1cdbd2cSJim Jagielski testProperty("PrinterIndependentLayout", oldVal, newVal); 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski } catch (com.sun.star.beans.UnknownPropertyException e) { 58*b1cdbd2cSJim Jagielski throw new StatusException(Status.failed("the property 'PrinterIndependentLayout' is unknown.")); 59*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.WrappedTargetException e) { 60*b1cdbd2cSJim Jagielski throw new StatusException(Status.failed("the property 'PrinterIndependentLayout' could not be tested.")); 61*b1cdbd2cSJim Jagielski } 62*b1cdbd2cSJim Jagielski } 63*b1cdbd2cSJim Jagielski _PrinterName()64*b1cdbd2cSJim Jagielski public void _PrinterName() { 65*b1cdbd2cSJim Jagielski Object[] oServices = null; 66*b1cdbd2cSJim Jagielski Exception ex = null; 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski try { 69*b1cdbd2cSJim Jagielski Class cPrinterJob = Class.forName("java.awt.print.PrinterJob"); 70*b1cdbd2cSJim Jagielski Method lookupMethod = cPrinterJob.getDeclaredMethod("lookupPrintServices", new Class[0]); 71*b1cdbd2cSJim Jagielski Object retValue = lookupMethod.invoke(cPrinterJob, new Object[0]); 72*b1cdbd2cSJim Jagielski oServices = (Object[])retValue; 73*b1cdbd2cSJim Jagielski } 74*b1cdbd2cSJim Jagielski catch(java.lang.ClassNotFoundException e) { 75*b1cdbd2cSJim Jagielski ex = e; 76*b1cdbd2cSJim Jagielski } 77*b1cdbd2cSJim Jagielski catch(java.lang.NoSuchMethodException e) { 78*b1cdbd2cSJim Jagielski ex = e; 79*b1cdbd2cSJim Jagielski } 80*b1cdbd2cSJim Jagielski catch(java.lang.IllegalAccessException e) { 81*b1cdbd2cSJim Jagielski ex = e; 82*b1cdbd2cSJim Jagielski } 83*b1cdbd2cSJim Jagielski catch(java.lang.reflect.InvocationTargetException e) { 84*b1cdbd2cSJim Jagielski ex = e; 85*b1cdbd2cSJim Jagielski } 86*b1cdbd2cSJim Jagielski 87*b1cdbd2cSJim Jagielski if (ex != null) { 88*b1cdbd2cSJim Jagielski // get Java version: 89*b1cdbd2cSJim Jagielski String javaVersion = System.getProperty("java.version"); 90*b1cdbd2cSJim Jagielski throw new StatusException(Status.failed( 91*b1cdbd2cSJim Jagielski "Cannot execute test with current Java version (Java 1.4 required) " + 92*b1cdbd2cSJim Jagielski javaVersion + ": " + ex.getMessage())); 93*b1cdbd2cSJim Jagielski } 94*b1cdbd2cSJim Jagielski // PrintService[] services = PrinterJob.lookupPrintServices(); 95*b1cdbd2cSJim Jagielski 96*b1cdbd2cSJim Jagielski if (oServices.length > 1) { 97*b1cdbd2cSJim Jagielski testProperty("PrinterName", getPrinterNameWithReflection(oServices[0]), 98*b1cdbd2cSJim Jagielski getPrinterNameWithReflection(oServices[1])); 99*b1cdbd2cSJim Jagielski } else { 100*b1cdbd2cSJim Jagielski log.println( 101*b1cdbd2cSJim Jagielski "checking this property needs at least two printers to be installed on your system"); 102*b1cdbd2cSJim Jagielski throw new StatusException(Status.failed( 103*b1cdbd2cSJim Jagielski "only one printer installed so I can't change it")); 104*b1cdbd2cSJim Jagielski } 105*b1cdbd2cSJim Jagielski } 106*b1cdbd2cSJim Jagielski _ForbiddenCharacters()107*b1cdbd2cSJim Jagielski public void _ForbiddenCharacters() { 108*b1cdbd2cSJim Jagielski boolean res = true; 109*b1cdbd2cSJim Jagielski 110*b1cdbd2cSJim Jagielski try { 111*b1cdbd2cSJim Jagielski //check if it is read only as specified 112*b1cdbd2cSJim Jagielski res &= isReadOnly("ForbiddenCharacters"); 113*b1cdbd2cSJim Jagielski 114*b1cdbd2cSJim Jagielski if (!isReadOnly("ForbiddenCharacters")) { 115*b1cdbd2cSJim Jagielski log.println( 116*b1cdbd2cSJim Jagielski "The Property 'ForbiddenCharacters' isn't readOnly as specified"); 117*b1cdbd2cSJim Jagielski } 118*b1cdbd2cSJim Jagielski 119*b1cdbd2cSJim Jagielski //check if the property has the right type 120*b1cdbd2cSJim Jagielski Object pValue = oObj.getPropertyValue("ForbiddenCharacters"); 121*b1cdbd2cSJim Jagielski XForbiddenCharacters fc = (XForbiddenCharacters) UnoRuntime.queryInterface( 122*b1cdbd2cSJim Jagielski XForbiddenCharacters.class, 123*b1cdbd2cSJim Jagielski pValue); 124*b1cdbd2cSJim Jagielski res &= (fc != null); 125*b1cdbd2cSJim Jagielski } catch (com.sun.star.beans.UnknownPropertyException e) { 126*b1cdbd2cSJim Jagielski log.println( 127*b1cdbd2cSJim Jagielski "Exception while checking property 'ForbiddenCharacters' " + 128*b1cdbd2cSJim Jagielski e.getMessage()); 129*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.WrappedTargetException e) { 130*b1cdbd2cSJim Jagielski log.println( 131*b1cdbd2cSJim Jagielski "Exception while checking property 'ForbiddenCharacters' " + 132*b1cdbd2cSJim Jagielski e.getMessage()); 133*b1cdbd2cSJim Jagielski } 134*b1cdbd2cSJim Jagielski 135*b1cdbd2cSJim Jagielski tRes.tested("ForbiddenCharacters", res); 136*b1cdbd2cSJim Jagielski } 137*b1cdbd2cSJim Jagielski isReadOnly(String PropertyName)138*b1cdbd2cSJim Jagielski protected boolean isReadOnly(String PropertyName) { 139*b1cdbd2cSJim Jagielski boolean res = false; 140*b1cdbd2cSJim Jagielski Property[] props = oObj.getPropertySetInfo().getProperties(); 141*b1cdbd2cSJim Jagielski 142*b1cdbd2cSJim Jagielski for (int i = 0; i < props.length; i++) { 143*b1cdbd2cSJim Jagielski if (props[i].Name.equals(PropertyName)) { 144*b1cdbd2cSJim Jagielski res = ((props[i].Attributes & PropertyAttribute.READONLY) != 0); 145*b1cdbd2cSJim Jagielski } 146*b1cdbd2cSJim Jagielski } 147*b1cdbd2cSJim Jagielski 148*b1cdbd2cSJim Jagielski return res; 149*b1cdbd2cSJim Jagielski } 150*b1cdbd2cSJim Jagielski getPrinterNameWithReflection(Object pService)151*b1cdbd2cSJim Jagielski private String getPrinterNameWithReflection(Object pService) { 152*b1cdbd2cSJim Jagielski String pName = null; 153*b1cdbd2cSJim Jagielski try { 154*b1cdbd2cSJim Jagielski Class cPrintService = Class.forName("javax.print.PrintService"); 155*b1cdbd2cSJim Jagielski Method getNameMethod = cPrintService.getDeclaredMethod("getName", new Class[0]); 156*b1cdbd2cSJim Jagielski Object retValue = getNameMethod.invoke(pService, new Object[0]); 157*b1cdbd2cSJim Jagielski pName = (String)retValue; 158*b1cdbd2cSJim Jagielski } 159*b1cdbd2cSJim Jagielski // ignore all excptions: we already ran into one of these if Java is too old 160*b1cdbd2cSJim Jagielski catch(java.lang.ClassNotFoundException e) { 161*b1cdbd2cSJim Jagielski } 162*b1cdbd2cSJim Jagielski catch(java.lang.NoSuchMethodException e) { 163*b1cdbd2cSJim Jagielski } 164*b1cdbd2cSJim Jagielski catch(java.lang.IllegalAccessException e) { 165*b1cdbd2cSJim Jagielski } 166*b1cdbd2cSJim Jagielski catch(java.lang.reflect.InvocationTargetException e) { 167*b1cdbd2cSJim Jagielski } 168*b1cdbd2cSJim Jagielski return pName; 169*b1cdbd2cSJim Jagielski } 170*b1cdbd2cSJim Jagielski } 171