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 package complex.embedding;
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski import com.sun.star.uno.XInterface;
25*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory;
26*b1cdbd2cSJim Jagielski import com.sun.star.lang.XSingleServiceFactory;
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski import com.sun.star.bridge.XUnoUrlResolver;
29*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime;
30*b1cdbd2cSJim Jagielski import com.sun.star.uno.XInterface;
31*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet;
32*b1cdbd2cSJim Jagielski import com.sun.star.frame.XLoadable;
33*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XDrawPagesSupplier;
34*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XDrawPages;
35*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XDrawPage;
36*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XShape;
37*b1cdbd2cSJim Jagielski import com.sun.star.graphic.XGraphic;
38*b1cdbd2cSJim Jagielski 
39*b1cdbd2cSJim Jagielski import com.sun.star.embed.*;
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski import share.LogWriter;
42*b1cdbd2cSJim Jagielski import complex.embedding.TestHelper;
43*b1cdbd2cSJim Jagielski import complex.embedding.EmbeddingTest;
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski public class Test01 implements EmbeddingTest {
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski 	XMultiServiceFactory m_xMSF;
48*b1cdbd2cSJim Jagielski 	TestHelper m_aTestHelper;
49*b1cdbd2cSJim Jagielski 
Test01( XMultiServiceFactory xMSF, LogWriter aLogWriter )50*b1cdbd2cSJim Jagielski 	public Test01( XMultiServiceFactory xMSF, LogWriter aLogWriter )
51*b1cdbd2cSJim Jagielski 	{
52*b1cdbd2cSJim Jagielski 		m_xMSF = xMSF;
53*b1cdbd2cSJim Jagielski 		m_aTestHelper = new TestHelper( aLogWriter, "Test01: " );
54*b1cdbd2cSJim Jagielski 	}
55*b1cdbd2cSJim Jagielski 
test()56*b1cdbd2cSJim Jagielski     public boolean test()
57*b1cdbd2cSJim Jagielski 	{
58*b1cdbd2cSJim Jagielski 		try
59*b1cdbd2cSJim Jagielski 		{
60*b1cdbd2cSJim Jagielski 			Object oDoc = m_xMSF.createInstance( "com.sun.star.comp.Draw.DrawingDocument" );
61*b1cdbd2cSJim Jagielski 			XLoadable xLoad = (XLoadable) UnoRuntime.queryInterface( XLoadable.class, oDoc );
62*b1cdbd2cSJim Jagielski 			if ( xLoad == null )
63*b1cdbd2cSJim Jagielski 			{
64*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Can not get XLoadable!" );
65*b1cdbd2cSJim Jagielski 				return false;
66*b1cdbd2cSJim Jagielski 			}
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski 			xLoad.initNew();
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski 			XDrawPagesSupplier xDPSupply = (XDrawPagesSupplier) UnoRuntime.queryInterface( XDrawPagesSupplier.class, oDoc );
71*b1cdbd2cSJim Jagielski 			if ( xDPSupply == null )
72*b1cdbd2cSJim Jagielski 			{
73*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Can not get XDrawPagesSupplier!" );
74*b1cdbd2cSJim Jagielski 				return false;
75*b1cdbd2cSJim Jagielski 			}
76*b1cdbd2cSJim Jagielski 
77*b1cdbd2cSJim Jagielski 			XDrawPages xDrawPages = xDPSupply.getDrawPages();
78*b1cdbd2cSJim Jagielski 			if ( xDrawPages == null )
79*b1cdbd2cSJim Jagielski 			{
80*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Can not get XDrawPages object!" );
81*b1cdbd2cSJim Jagielski 				return false;
82*b1cdbd2cSJim Jagielski 			}
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski 			if ( xDrawPages.getCount() == 0 )
85*b1cdbd2cSJim Jagielski 			{
86*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "There must be at least one page in the document!" );
87*b1cdbd2cSJim Jagielski 				return false;
88*b1cdbd2cSJim Jagielski 			}
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski 			Object oPage = xDrawPages.getByIndex( 0 );
91*b1cdbd2cSJim Jagielski 			XDrawPage xPage = (XDrawPage) UnoRuntime.queryInterface( XDrawPage.class, oPage );
92*b1cdbd2cSJim Jagielski 			if ( xPage == null )
93*b1cdbd2cSJim Jagielski 			{
94*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Can not get access to drawing page!" );
95*b1cdbd2cSJim Jagielski 				return false;
96*b1cdbd2cSJim Jagielski 			}
97*b1cdbd2cSJim Jagielski 
98*b1cdbd2cSJim Jagielski 			XMultiServiceFactory xDrFactory = ( XMultiServiceFactory ) UnoRuntime.queryInterface( XMultiServiceFactory.class,
99*b1cdbd2cSJim Jagielski 																								  oDoc );
100*b1cdbd2cSJim Jagielski 			if ( xDrFactory == null )
101*b1cdbd2cSJim Jagielski 			{
102*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Can not get drawing factory!" );
103*b1cdbd2cSJim Jagielski 				return false;
104*b1cdbd2cSJim Jagielski 			}
105*b1cdbd2cSJim Jagielski 
106*b1cdbd2cSJim Jagielski 			Object oShape = xDrFactory.createInstance( "com.sun.star.drawing.OLE2Shape" );
107*b1cdbd2cSJim Jagielski 			XShape xShape = ( XShape ) UnoRuntime.queryInterface( XShape.class, oShape );
108*b1cdbd2cSJim Jagielski 			if ( xShape == null )
109*b1cdbd2cSJim Jagielski 			{
110*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Can not create new shape!" );
111*b1cdbd2cSJim Jagielski 				return false;
112*b1cdbd2cSJim Jagielski 			}
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski 			XPropertySet xShapeProps = ( XPropertySet ) UnoRuntime.queryInterface( XPropertySet.class, oShape );
115*b1cdbd2cSJim Jagielski 			if ( xShapeProps == null )
116*b1cdbd2cSJim Jagielski 			{
117*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Can not get access to shapes properties!" );
118*b1cdbd2cSJim Jagielski 				return false;
119*b1cdbd2cSJim Jagielski 			}
120*b1cdbd2cSJim Jagielski 
121*b1cdbd2cSJim Jagielski 			xPage.add( xShape );
122*b1cdbd2cSJim Jagielski 			xShapeProps.setPropertyValue( "CLSID", "078B7ABA-54FC-457F-8551-6147e776a997" );
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski 			Object oEmbObj = xShapeProps.getPropertyValue( "EmbeddedObject" );
125*b1cdbd2cSJim Jagielski 			XEmbeddedObject xEmbObj = ( XEmbeddedObject ) UnoRuntime.queryInterface( XEmbeddedObject.class, oEmbObj );
126*b1cdbd2cSJim Jagielski 			if ( xEmbObj == null )
127*b1cdbd2cSJim Jagielski 			{
128*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "Embedded object can not be accessed!" );
129*b1cdbd2cSJim Jagielski 				return false;
130*b1cdbd2cSJim Jagielski 			}
131*b1cdbd2cSJim Jagielski 
132*b1cdbd2cSJim Jagielski 			XEmbeddedClient xClient = xEmbObj.getClientSite();
133*b1cdbd2cSJim Jagielski 			if ( xClient == null )
134*b1cdbd2cSJim Jagielski 			{
135*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "The client for the object must be set!" );
136*b1cdbd2cSJim Jagielski 				return false;
137*b1cdbd2cSJim Jagielski 			}
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski 			Object oReplacement = xShapeProps.getPropertyValue( "Graphic" );
140*b1cdbd2cSJim Jagielski 			XGraphic xReplGraph = ( XGraphic ) UnoRuntime.queryInterface( XGraphic.class, oReplacement );
141*b1cdbd2cSJim Jagielski 			if ( xReplGraph == null )
142*b1cdbd2cSJim Jagielski 			{
143*b1cdbd2cSJim Jagielski 				m_aTestHelper.Error( "The replacement graphic should be available!" );
144*b1cdbd2cSJim Jagielski 				return false;
145*b1cdbd2cSJim Jagielski 			}
146*b1cdbd2cSJim Jagielski 
147*b1cdbd2cSJim Jagielski 			return true;
148*b1cdbd2cSJim Jagielski 		}
149*b1cdbd2cSJim Jagielski 		catch( Exception e )
150*b1cdbd2cSJim Jagielski 		{
151*b1cdbd2cSJim Jagielski 			m_aTestHelper.Error( "Exception: " + e );
152*b1cdbd2cSJim Jagielski 			return false;
153*b1cdbd2cSJim Jagielski 		}
154*b1cdbd2cSJim Jagielski     }
155*b1cdbd2cSJim Jagielski }
156*b1cdbd2cSJim Jagielski 
157