1 /*
2  * This file is part of the LibreOffice project.
3  *
4  * This Source Code Form is subject to the terms of the Mozilla Public
5  * License, v. 2.0. If a copy of the MPL was not distributed with this
6  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7  *
8  * This file incorporates work covered by the following license notice:
9  *
10  *   Licensed to the Apache Software Foundation (ASF) under one or more
11  *   contributor license agreements. See the NOTICE file distributed
12  *   with this work for additional information regarding copyright
13  *   ownership. The ASF licenses this file to you under the Apache
14  *   License, Version 2.0 (the "License"); you may not use this file
15  *   except in compliance with the License. You may obtain a copy of
16  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
17  */
18 package mod._sw;
19 
20 import com.sun.star.container.XIndexAccess;
21 import com.sun.star.container.XNameAccess;
22 import com.sun.star.container.XNamed;
23 import com.sun.star.frame.XController;
24 import com.sun.star.frame.XModel;
25 import com.sun.star.lang.XMultiServiceFactory;
26 import com.sun.star.text.ControlCharacter;
27 import com.sun.star.text.XText;
28 import com.sun.star.text.XTextContent;
29 import com.sun.star.text.XTextCursor;
30 import com.sun.star.text.XTextDocument;
31 import com.sun.star.text.XTextFrame;
32 import com.sun.star.text.XTextSection;
33 import com.sun.star.text.XTextSectionsSupplier;
34 import com.sun.star.text.XTextTable;
35 import com.sun.star.text.XWordCursor;
36 import com.sun.star.uno.UnoRuntime;
37 import com.sun.star.uno.XInterface;
38 import com.sun.star.view.XSelectionSupplier;
39 
40 import java.io.PrintWriter;
41 
42 import lib.TestCase;
43 import lib.TestEnvironment;
44 import lib.TestParameters;
45 import util.DesktopTools;
46 
47 import util.SOfficeFactory;
48 import util.WriterTools;
49 
50 public class SwXTextDocument extends TestCase {
51     XTextDocument xTextDoc;
52     XTextDocument xSecondTextDoc;
53 
54     @Override
cleanup(TestParameters tParam, PrintWriter log)55     protected void cleanup(TestParameters tParam, PrintWriter log) {
56         log.println("    disposing xTextDoc ");
57         DesktopTools.closeDoc(xSecondTextDoc);
58         DesktopTools.closeDoc(xTextDoc);
59     }
60 
61     /**
62      * creating a TestEnvironment for the interfaces to be tested
63      */
64     @Override
createTestEnvironment( TestParameters Param, PrintWriter log)65     public TestEnvironment createTestEnvironment(
66             TestParameters Param, PrintWriter log) throws Exception {
67         TestEnvironment tEnv = null;
68         XTextTable the_table = null;
69 
70         log.println("creating a textdocument");
71         xTextDoc = WriterTools.createTextDoc(Param.getMSF());
72 
73         XText oText = xTextDoc.getText();
74         XTextCursor oCursor = oText.createTextCursor();
75 
76         log.println("inserting some lines");
77 
78         for (int i = 0; i < 5; i++) {
79             oText.insertString(oCursor, "Paragraph Number: " + i, false);
80             oText.insertString(
81                     oCursor,
82                     " The quick brown fox jumps over the lazy Dog: SwXParagraph",
83                     false);
84             oText.insertControlCharacter(oCursor,
85                     ControlCharacter.PARAGRAPH_BREAK, false);
86             oText.insertString(
87                     oCursor,
88                     "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG: SwXParagraph",
89                     false);
90             oText.insertControlCharacter(oCursor,
91                     ControlCharacter.PARAGRAPH_BREAK, false);
92             oText.insertControlCharacter(oCursor, ControlCharacter.LINE_BREAK,
93                     false);
94         }
95         for (int i = 0; i < 11; i++) {
96             oText.insertString(oCursor, "xTextDoc ", false);
97 
98         }
99 
100         // insert two sections parent and child
101         XMultiServiceFactory oDocMSF = UnoRuntime.queryInterface(
102                 XMultiServiceFactory.class, xTextDoc);
103 
104         XInterface oTS;
105         XTextSection xTS;
106 
107         XTextSectionsSupplier oTSSupp = UnoRuntime.queryInterface(
108                 XTextSectionsSupplier.class, xTextDoc);
109         XNameAccess oTSSuppName = oTSSupp.getTextSections();
110 
111         oTS = (XInterface) oDocMSF
112                 .createInstance("com.sun.star.text.TextSection");
113 
114         XTextContent oTSC = UnoRuntime.queryInterface(XTextContent.class, oTS);
115         oText.insertTextContent(oCursor, oTSC, false);
116 
117         XWordCursor oWordC = UnoRuntime.queryInterface(XWordCursor.class,
118                 oCursor);
119         oCursor.setString("End of TextSection");
120         oCursor.gotoStart(false);
121         oCursor.setString("Start of TextSection ");
122         oWordC.gotoEndOfWord(false);
123 
124         XInterface oTS2 = (XInterface) oDocMSF
125                 .createInstance("com.sun.star.text.TextSection");
126         oTSC = UnoRuntime.queryInterface(XTextContent.class, oTS2);
127         oText.insertTextContent(oCursor, oTSC, false);
128 
129         XIndexAccess oTSSuppIndex = UnoRuntime.queryInterface(
130                 XIndexAccess.class, oTSSuppName);
131         log.println("getting a TextSection with the XTextSectionSupplier()");
132         xTS = UnoRuntime.queryInterface(XTextSection.class,
133                 oTSSuppIndex.getByIndex(0));
134 
135         XNamed xTSName = UnoRuntime.queryInterface(XNamed.class, xTS);
136         xTSName.setName("SwXTextSection");
137 
138         log.println("    adding TextTable");
139         the_table = SOfficeFactory.createTextTable(xTextDoc, 6, 4);
140 
141         XNamed the_name = UnoRuntime.queryInterface(XNamed.class, the_table);
142         the_name.setName("SwXTextDocument");
143         SOfficeFactory.insertTextContent(xTextDoc, the_table);
144 
145         log.println("    adding ReferenceMark");
146 
147         XInterface aMark = (XInterface) oDocMSF
148                 .createInstance("com.sun.star.text.ReferenceMark");
149         the_name = UnoRuntime.queryInterface(XNamed.class, aMark);
150         the_name.setName("SwXTextDocument");
151 
152         XTextContent oTC = UnoRuntime.queryInterface(XTextContent.class, aMark);
153         SOfficeFactory.insertTextContent(xTextDoc, oTC);
154 
155         log.println("    adding TextGraphic");
156         WriterTools.insertTextGraphic(xTextDoc, oDocMSF, Param.getComponentContext(),
157                 5200, 4200, 4400, 4000, "space-metal.jpg", "SwXTextDocument");
158 
159         log.println("    adding EndNote");
160 
161         XInterface aEndNote = (XInterface) oDocMSF
162                 .createInstance("com.sun.star.text.Endnote");
163         oTC = UnoRuntime.queryInterface(XTextContent.class, aEndNote);
164         SOfficeFactory.insertTextContent(xTextDoc, oTC);
165 
166         log.println("    adding Bookmark");
167         SOfficeFactory.insertTextContent(xTextDoc,
168                 SOfficeFactory.createBookmark(xTextDoc));
169 
170         log.println("    adding DocumentIndex");
171         oTC = SOfficeFactory.createIndex(xTextDoc,
172                 "com.sun.star.text.DocumentIndex");
173         SOfficeFactory.insertTextContent(xTextDoc, oTC);
174 
175         log.println("    adding TextFrame");
176 
177         XTextFrame frame = SOfficeFactory.createTextFrame(xTextDoc, 500, 500);
178         oTC = UnoRuntime.queryInterface(XTextContent.class, frame);
179         SOfficeFactory.insertTextContent(xTextDoc, oTC);
180 
181         log.println("creating a second textdocument");
182         xSecondTextDoc = WriterTools.createTextDoc(Param.getMSF());
183 
184         XText oText2 = xTextDoc.getText();
185         XTextCursor oTextCursor = oText2.createTextCursor();
186 
187         for (int i = 0; i < 11; i++) {
188             oText2.insertString(oTextCursor, "xTextDoc ", false);
189         }
190 
191         tEnv = new TestEnvironment(xTextDoc);
192 
193         XModel model1 = UnoRuntime.queryInterface(XModel.class, xTextDoc);
194         XModel model2 = UnoRuntime.queryInterface(XModel.class, xSecondTextDoc);
195 
196         XController cont1 = model1.getCurrentController();
197         XController cont2 = model2.getCurrentController();
198 
199         cont1.getFrame().setName("cont1");
200         cont2.getFrame().setName("cont2");
201 
202         XSelectionSupplier sel = UnoRuntime.queryInterface(
203                 XSelectionSupplier.class, cont1);
204 
205         log.println("Adding SelectionSupplier and Shape to select for XModel");
206         tEnv.addObjRelation("SELSUPP", sel);
207         tEnv.addObjRelation("TOSELECT", the_table);
208 
209         log.println("adding Controller as ObjRelation for XModel");
210         tEnv.addObjRelation("CONT1", cont1);
211         tEnv.addObjRelation("CONT2", cont2);
212 
213         return tEnv;
214     }
215 } // finish class SwXTextDocument
216