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 
24*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime;
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski /** The purpose of this class is to open a specified text document and save this
28*b1cdbd2cSJim Jagielski  * file to a specified URL. The type of the saved file is
29*b1cdbd2cSJim Jagielski  * "swriter: StarOffice XML (Writer)".
30*b1cdbd2cSJim Jagielski  */
31*b1cdbd2cSJim Jagielski public class DocumentSaver {
32*b1cdbd2cSJim Jagielski     /** The main method of the application.
33*b1cdbd2cSJim Jagielski      * @param args The program needs two arguments:
34*b1cdbd2cSJim Jagielski      * - full file name to open,
35*b1cdbd2cSJim Jagielski      * - full file name to save.
36*b1cdbd2cSJim Jagielski      */
main(String args[])37*b1cdbd2cSJim Jagielski     public static void main(String args[]) {
38*b1cdbd2cSJim Jagielski         if ( args.length < 2 ) {
39*b1cdbd2cSJim Jagielski             System.out.println("usage: java -jar DocumentSaver.jar" +
40*b1cdbd2cSJim Jagielski                                "\"<URL|path to load>\" \"<URL|path to save>\"");
41*b1cdbd2cSJim Jagielski             System.out.println("\ne.g.:");
42*b1cdbd2cSJim Jagielski             System.out.println("java -jar DocumentSaver " +
43*b1cdbd2cSJim Jagielski                                "\"file:///f:/TestPrint.doc\"" +
44*b1cdbd2cSJim Jagielski                                "\"file:///f:/TestPrint.odt\"");
45*b1cdbd2cSJim Jagielski             System.exit(1);
46*b1cdbd2cSJim Jagielski         }
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski         com.sun.star.uno.XComponentContext xContext = null;
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski         try {
51*b1cdbd2cSJim Jagielski             // get the remote office component context
52*b1cdbd2cSJim Jagielski             xContext = com.sun.star.comp.helper.Bootstrap.bootstrap();
53*b1cdbd2cSJim Jagielski             System.out.println("Connected to a running office ...");
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski             // get the remote office service manager
56*b1cdbd2cSJim Jagielski             com.sun.star.lang.XMultiComponentFactory xMCF =
57*b1cdbd2cSJim Jagielski                 xContext.getServiceManager();
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski             Object oDesktop = xMCF.createInstanceWithContext(
60*b1cdbd2cSJim Jagielski                 "com.sun.star.frame.Desktop", xContext);
61*b1cdbd2cSJim Jagielski 
62*b1cdbd2cSJim Jagielski             com.sun.star.frame.XComponentLoader xCompLoader =
63*b1cdbd2cSJim Jagielski                 (com.sun.star.frame.XComponentLoader)
64*b1cdbd2cSJim Jagielski                      UnoRuntime.queryInterface(
65*b1cdbd2cSJim Jagielski                          com.sun.star.frame.XComponentLoader.class, oDesktop);
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski             java.io.File sourceFile = new java.io.File(args[0]);
68*b1cdbd2cSJim Jagielski             StringBuffer sLoadUrl = new StringBuffer("file:///");
69*b1cdbd2cSJim Jagielski             sLoadUrl.append(sourceFile.getCanonicalPath().replace('\\', '/'));
70*b1cdbd2cSJim Jagielski 
71*b1cdbd2cSJim Jagielski             sourceFile = new java.io.File(args[1]);
72*b1cdbd2cSJim Jagielski             StringBuffer sSaveUrl = new StringBuffer("file:///");
73*b1cdbd2cSJim Jagielski             sSaveUrl.append(sourceFile.getCanonicalPath().replace('\\', '/'));
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski             com.sun.star.beans.PropertyValue[] propertyValue =
76*b1cdbd2cSJim Jagielski                 new com.sun.star.beans.PropertyValue[1];
77*b1cdbd2cSJim Jagielski             propertyValue[0] = new com.sun.star.beans.PropertyValue();
78*b1cdbd2cSJim Jagielski             propertyValue[0].Name = "Hidden";
79*b1cdbd2cSJim Jagielski             propertyValue[0].Value = new Boolean(true);
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski             Object oDocToStore = xCompLoader.loadComponentFromURL(
82*b1cdbd2cSJim Jagielski                 sLoadUrl.toString(), "_blank", 0, propertyValue );
83*b1cdbd2cSJim Jagielski             com.sun.star.frame.XStorable xStorable =
84*b1cdbd2cSJim Jagielski                 (com.sun.star.frame.XStorable)UnoRuntime.queryInterface(
85*b1cdbd2cSJim Jagielski                     com.sun.star.frame.XStorable.class, oDocToStore );
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski             propertyValue = new com.sun.star.beans.PropertyValue[ 2 ];
88*b1cdbd2cSJim Jagielski             propertyValue[0] = new com.sun.star.beans.PropertyValue();
89*b1cdbd2cSJim Jagielski             propertyValue[0].Name = "Overwrite";
90*b1cdbd2cSJim Jagielski             propertyValue[0].Value = new Boolean(true);
91*b1cdbd2cSJim Jagielski             propertyValue[1] = new com.sun.star.beans.PropertyValue();
92*b1cdbd2cSJim Jagielski             propertyValue[1].Name = "FilterName";
93*b1cdbd2cSJim Jagielski             propertyValue[1].Value = "StarOffice XML (Writer)";
94*b1cdbd2cSJim Jagielski             xStorable.storeAsURL( sSaveUrl.toString(), propertyValue );
95*b1cdbd2cSJim Jagielski 
96*b1cdbd2cSJim Jagielski             System.out.println("\nDocument \"" + sLoadUrl + "\" saved under \"" +
97*b1cdbd2cSJim Jagielski                                sSaveUrl + "\"\n");
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski             com.sun.star.util.XCloseable xCloseable = (com.sun.star.util.XCloseable)
100*b1cdbd2cSJim Jagielski                 UnoRuntime.queryInterface(com.sun.star.util.XCloseable.class,
101*b1cdbd2cSJim Jagielski                                           oDocToStore );
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski             if (xCloseable != null ) {
104*b1cdbd2cSJim Jagielski                 xCloseable.close(false);
105*b1cdbd2cSJim Jagielski             } else
106*b1cdbd2cSJim Jagielski             {
107*b1cdbd2cSJim Jagielski                 com.sun.star.lang.XComponent xComp = (com.sun.star.lang.XComponent)
108*b1cdbd2cSJim Jagielski                     UnoRuntime.queryInterface(
109*b1cdbd2cSJim Jagielski                         com.sun.star.lang.XComponent.class, oDocToStore );
110*b1cdbd2cSJim Jagielski                 xComp.dispose();
111*b1cdbd2cSJim Jagielski             }
112*b1cdbd2cSJim Jagielski             System.out.println("document closed!");
113*b1cdbd2cSJim Jagielski             System.exit(0);
114*b1cdbd2cSJim Jagielski         }
115*b1cdbd2cSJim Jagielski         catch( Exception e ) {
116*b1cdbd2cSJim Jagielski             e.printStackTrace(System.err);
117*b1cdbd2cSJim Jagielski             System.exit(1);
118*b1cdbd2cSJim Jagielski         }
119*b1cdbd2cSJim Jagielski     }
120*b1cdbd2cSJim Jagielski }
121