134dd1e25SAndrew Rist /**************************************************************
234dd1e25SAndrew Rist  *
334dd1e25SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
434dd1e25SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
534dd1e25SAndrew Rist  * distributed with this work for additional information
634dd1e25SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
734dd1e25SAndrew Rist  * to you under the Apache License, Version 2.0 (the
834dd1e25SAndrew Rist  * "License"); you may not use this file except in compliance
934dd1e25SAndrew Rist  * with the License.  You may obtain a copy of the License at
1034dd1e25SAndrew Rist  *
1134dd1e25SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
1234dd1e25SAndrew Rist  *
1334dd1e25SAndrew Rist  * Unless required by applicable law or agreed to in writing,
1434dd1e25SAndrew Rist  * software distributed under the License is distributed on an
1534dd1e25SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1634dd1e25SAndrew Rist  * KIND, either express or implied.  See the License for the
1734dd1e25SAndrew Rist  * specific language governing permissions and limitations
1834dd1e25SAndrew Rist  * under the License.
1934dd1e25SAndrew Rist  *
2034dd1e25SAndrew Rist  *************************************************************/
2134dd1e25SAndrew Rist 
2234dd1e25SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir import com.sun.star.ucb.NameClash;
25cdf0e10cSrcweir import com.sun.star.ucb.TransferCommandOperation;
26cdf0e10cSrcweir import com.sun.star.ucb.GlobalTransferCommandArgument;
27cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime;
28cdf0e10cSrcweir import com.sun.star.uno.XInterface;
29cdf0e10cSrcweir 
30cdf0e10cSrcweir /**
31cdf0e10cSrcweir  * Copying, Moving and Creating Links to a Resource
32cdf0e10cSrcweir  */
33cdf0e10cSrcweir public class ResourceManager {
34cdf0e10cSrcweir 
35cdf0e10cSrcweir     /**
36cdf0e10cSrcweir      * Member properties
37cdf0e10cSrcweir      */
38cdf0e10cSrcweir     private  Helper      m_helper;
39cdf0e10cSrcweir     private  XInterface  m_ucb;
40cdf0e10cSrcweir     private  String      m_contenturl = "";
41cdf0e10cSrcweir     private  String      m_srcURL = "";
42cdf0e10cSrcweir     private  String      m_targetFolderURL = "";
43cdf0e10cSrcweir     private  String      m_newTitle = "";
44cdf0e10cSrcweir     private  String      m_transOperation = "";
45cdf0e10cSrcweir 
46cdf0e10cSrcweir     /**
47cdf0e10cSrcweir      * Constructor.
48cdf0e10cSrcweir      *
49cdf0e10cSrcweir      *@param      String[]   This construtor requires the arguments:
50cdf0e10cSrcweir      *                          -url=...             (optional)
51cdf0e10cSrcweir      *                          -targetFolderURL=... (optional)
52cdf0e10cSrcweir      *                          -newTitle=...        (optional)
53cdf0e10cSrcweir      *                          -transOper=...       (optional)
54cdf0e10cSrcweir      *                          -workdir=...         (optional)
55cdf0e10cSrcweir      *                       See Help (method printCmdLineUsage()).
56cdf0e10cSrcweir      *                       Without the arguments a new connection to a
57cdf0e10cSrcweir      *                       running office cannot created.
58cdf0e10cSrcweir      *@exception  java.lang.Exception
59cdf0e10cSrcweir      */
ResourceManager( String args[] )60cdf0e10cSrcweir     public ResourceManager( String args[] ) throws java.lang.Exception {
61cdf0e10cSrcweir 
62cdf0e10cSrcweir         // Parse arguments
63cdf0e10cSrcweir         parseArguments( args );
64cdf0e10cSrcweir 
65cdf0e10cSrcweir         // Init
66cdf0e10cSrcweir         m_helper       = new Helper( getContentURL() );
67cdf0e10cSrcweir 
68cdf0e10cSrcweir         // Get xUCB
69cdf0e10cSrcweir         m_ucb          = m_helper.getUCB();
70cdf0e10cSrcweir     }
71cdf0e10cSrcweir 
72cdf0e10cSrcweir     /**
73cdf0e10cSrcweir      *  Copy, move or create a link for a resource.
74cdf0e10cSrcweir      *  This method requires the main and the optional arguments to be set in order to work.
75cdf0e10cSrcweir      *  See Constructor.
76cdf0e10cSrcweir      *
77*a893be29SPedro Giffuni      *@return boolean  Returns true if resource successfully transferred, false otherwise
78cdf0e10cSrcweir      *@exception  com.sun.star.ucb.CommandAbortedException
79cdf0e10cSrcweir      *@exception  com.sun.star.uno.Exception
80cdf0e10cSrcweir      */
transferResource()81cdf0e10cSrcweir     public boolean transferResource()
82cdf0e10cSrcweir         throws com.sun.star.ucb.CommandAbortedException, com.sun.star.uno.Exception {
83cdf0e10cSrcweir         String sourceURL       = getContentURL();      // URL of the source object
84cdf0e10cSrcweir         String targetFolderURL = getTargetFolderURL(); // URL of the target folder
85cdf0e10cSrcweir         String newTitle        = getNewTitle();        // New name for the resource
86cdf0e10cSrcweir         String transOperation  = getTransOperation();
87cdf0e10cSrcweir         return transferResource( sourceURL, targetFolderURL, newTitle, transOperation );
88cdf0e10cSrcweir     }
89cdf0e10cSrcweir 
90cdf0e10cSrcweir     /**
91cdf0e10cSrcweir      *  Copy, move or create a link for a resource.
92cdf0e10cSrcweir      *
93cdf0e10cSrcweir      *@param  String   Source URL
94cdf0e10cSrcweir      *@param  String   Target folder URL
95*a893be29SPedro Giffuni      *@param  String   Transferring operation (copy, move, link)
96*a893be29SPedro Giffuni      *@return boolean  Returns true if resource successfully transferred, false otherwise
97cdf0e10cSrcweir      *@exception  com.sun.star.ucb.CommandAbortedException
98cdf0e10cSrcweir      *@exception  com.sun.star.uno.Exception
99cdf0e10cSrcweir      */
transferResource( String sourceURL, String targetFolderURL, String newTitle, String transOperation )100cdf0e10cSrcweir     public boolean transferResource(
101cdf0e10cSrcweir             String sourceURL, String targetFolderURL,
102cdf0e10cSrcweir             String newTitle, String transOperation )
103cdf0e10cSrcweir         throws com.sun.star.ucb.CommandAbortedException, com.sun.star.uno.Exception {
104cdf0e10cSrcweir 
105cdf0e10cSrcweir         boolean result = false;
106cdf0e10cSrcweir         if ( m_ucb != null && sourceURL != null && !sourceURL.equals( "" ) &&
107cdf0e10cSrcweir              targetFolderURL != null && !targetFolderURL.equals( "" ) &&
108cdf0e10cSrcweir              newTitle != null && transOperation != null && !transOperation.equals( "" ) &&
109cdf0e10cSrcweir              ( transOperation.equals( "copy" ) || transOperation.equals( "move" ) ||
110cdf0e10cSrcweir                transOperation.equals( "link" ))) {
111cdf0e10cSrcweir 
112cdf0e10cSrcweir             /////////////////////////////////////////////////////////////////////
113cdf0e10cSrcweir             // Copy, move or create a link for a resource to another location...
114cdf0e10cSrcweir             /////////////////////////////////////////////////////////////////////
115cdf0e10cSrcweir             GlobalTransferCommandArgument arg = new GlobalTransferCommandArgument();
116cdf0e10cSrcweir             if ( transOperation.equals( "copy" )) {
117cdf0e10cSrcweir                 arg.Operation = TransferCommandOperation.COPY;
118cdf0e10cSrcweir             } else if ( transOperation.equals( "move" )) {
119cdf0e10cSrcweir                 arg.Operation = TransferCommandOperation.MOVE;
120cdf0e10cSrcweir             } else if ( transOperation.equals( "link" )) {
121cdf0e10cSrcweir                 arg.Operation = TransferCommandOperation.LINK;
122cdf0e10cSrcweir             }
123cdf0e10cSrcweir             arg.SourceURL = sourceURL;
124cdf0e10cSrcweir             arg.TargetURL = targetFolderURL;
125cdf0e10cSrcweir 
126cdf0e10cSrcweir             // object get a new unique name
127cdf0e10cSrcweir             arg.NewTitle  = newTitle;
128cdf0e10cSrcweir 
129cdf0e10cSrcweir             // fail, if object with same name exists in target folder
130cdf0e10cSrcweir             arg.NameClash = NameClash.ERROR;
131cdf0e10cSrcweir 
132cdf0e10cSrcweir             // Let UCB execute the command "globalTransfer".
133cdf0e10cSrcweir             m_helper.executeCommand( m_ucb, "globalTransfer", arg );
134cdf0e10cSrcweir             result = true;
135cdf0e10cSrcweir         }
136cdf0e10cSrcweir         return result;
137cdf0e10cSrcweir     }
138cdf0e10cSrcweir 
139cdf0e10cSrcweir     /**
140cdf0e10cSrcweir      *  Get connect URL.
141cdf0e10cSrcweir      *
142cdf0e10cSrcweir      *@return   String    That contains the connect URL
143cdf0e10cSrcweir      */
getContentURL()144cdf0e10cSrcweir     public String getContentURL() {
145cdf0e10cSrcweir         return m_contenturl;
146cdf0e10cSrcweir     }
147cdf0e10cSrcweir 
148cdf0e10cSrcweir     /**
149cdf0e10cSrcweir      * Get trasfering Operation.
150cdf0e10cSrcweir      *
151cdf0e10cSrcweir      *@return String    That contains the trasfering Operation
152cdf0e10cSrcweir      */
getTransOperation()153cdf0e10cSrcweir     public String getTransOperation() {
154cdf0e10cSrcweir         return m_transOperation;
155cdf0e10cSrcweir     }
156cdf0e10cSrcweir 
157cdf0e10cSrcweir     /**
158cdf0e10cSrcweir      * Get target folder URL.
159cdf0e10cSrcweir      *
160cdf0e10cSrcweir      *@return String    That contains the target folder URL
161cdf0e10cSrcweir      */
getTargetFolderURL()162cdf0e10cSrcweir     public String getTargetFolderURL() {
163cdf0e10cSrcweir         return m_targetFolderURL;
164cdf0e10cSrcweir     }
165cdf0e10cSrcweir 
166cdf0e10cSrcweir     /**
167*a893be29SPedro Giffuni      * Get new title for the resource to be transferred.
168cdf0e10cSrcweir      *
169*a893be29SPedro Giffuni      *@return String    That contains a new title for the transferred
170cdf0e10cSrcweir      *                  resource. Can be empty. In this case resource
171cdf0e10cSrcweir      *                  will keep the title it has in the source folder.
172cdf0e10cSrcweir      */
getNewTitle()173cdf0e10cSrcweir     public String getNewTitle() {
174cdf0e10cSrcweir         return m_newTitle;
175cdf0e10cSrcweir     }
176cdf0e10cSrcweir 
177cdf0e10cSrcweir     /**
178cdf0e10cSrcweir      * Parse arguments
179cdf0e10cSrcweir      *
180cdf0e10cSrcweir      *@param      String[]   Arguments
181cdf0e10cSrcweir      *@exception  java.lang.Exception
182cdf0e10cSrcweir      */
parseArguments( String[] args )183cdf0e10cSrcweir     public void parseArguments( String[] args ) throws java.lang.Exception {
184cdf0e10cSrcweir 
185cdf0e10cSrcweir         String workdir = "";
186cdf0e10cSrcweir 
187cdf0e10cSrcweir         for ( int i = 0; i < args.length; i++ ) {
188cdf0e10cSrcweir             if ( args[i].startsWith( "-url=" )) {
189cdf0e10cSrcweir                 m_contenturl    = args[i].substring( 5 );
190cdf0e10cSrcweir             } else if ( args[i].startsWith( "-targetFolderURL=" )) {
191cdf0e10cSrcweir                 m_targetFolderURL = args[i].substring( 17 );
192cdf0e10cSrcweir             } else if ( args[i].startsWith( "-newTitle=" )) {
193cdf0e10cSrcweir                 m_newTitle = args[i].substring( 10 );
194cdf0e10cSrcweir             } else if ( args[i].startsWith( "-transOper=" )) {
195cdf0e10cSrcweir                 m_transOperation = args[i].substring( 11 );
196cdf0e10cSrcweir             } else if ( args[i].startsWith( "-workdir=" )) {
197cdf0e10cSrcweir                 workdir = args[i].substring( 9 );
198cdf0e10cSrcweir             } else if ( args[i].startsWith( "-help" ) ||
199cdf0e10cSrcweir                         args[i].startsWith( "-?" )) {
200cdf0e10cSrcweir                 printCmdLineUsage();
201cdf0e10cSrcweir                 System.exit( 0 );
202cdf0e10cSrcweir             }
203cdf0e10cSrcweir         }
204cdf0e10cSrcweir 
205cdf0e10cSrcweir 		if ( m_contenturl == null || m_contenturl.equals( "" )) {
206cdf0e10cSrcweir             m_contenturl = Helper.prependCurrentDirAsAbsoluteFileURL( "data/data.txt" );;
207cdf0e10cSrcweir         }
208cdf0e10cSrcweir 
209cdf0e10cSrcweir         if ( m_targetFolderURL == null || m_targetFolderURL.equals( "" )) {
210cdf0e10cSrcweir             m_targetFolderURL = Helper.getAbsoluteFileURLFromSystemPath( workdir );
211cdf0e10cSrcweir         }
212cdf0e10cSrcweir 
213cdf0e10cSrcweir         if ( m_newTitle == null || m_newTitle.equals( "" )) {
214cdf0e10cSrcweir             m_newTitle = "transfered-resource-" + System.currentTimeMillis();
215cdf0e10cSrcweir         }
216cdf0e10cSrcweir 
217cdf0e10cSrcweir         if ( m_transOperation == null || m_transOperation.equals( "" )) {
218cdf0e10cSrcweir             m_transOperation = "copy";
219cdf0e10cSrcweir         }
220cdf0e10cSrcweir     }
221cdf0e10cSrcweir 
222cdf0e10cSrcweir     /**
223cdf0e10cSrcweir      * Print the commands options
224cdf0e10cSrcweir      */
printCmdLineUsage()225cdf0e10cSrcweir     public void printCmdLineUsage() {
226cdf0e10cSrcweir         System.out.println(
227cdf0e10cSrcweir             "Usage: ResourceManager -url=... -targetFolderURL=... -newTitle=... -transOper=... -workdir=..." );
228cdf0e10cSrcweir         System.out.println(
229cdf0e10cSrcweir             "Defaults: -url=<currentdir>/data/data.txt> -targetFolderURL=<workdir> -newTitle=transfered-resource-<uniquepostfix> -transOper=copy -workdir=<currentdir>");
230cdf0e10cSrcweir         System.out.println(
231cdf0e10cSrcweir             "\nExample : -url=file:///temp/MyFile.txt -targetFolderURL=file:///test/ -newTitle=RenamedFile.txt -transOper=copy " );
232cdf0e10cSrcweir     }
233cdf0e10cSrcweir 
234cdf0e10cSrcweir     /**
235cdf0e10cSrcweir      *  Create a new connection with the specific args to a running office and
236cdf0e10cSrcweir      *  copy, move or create links a resource.
237cdf0e10cSrcweir      *
238cdf0e10cSrcweir      *@param  String[]   Arguments
239cdf0e10cSrcweir      */
main( String args[] )240cdf0e10cSrcweir     public static void main ( String args[] ) {
241cdf0e10cSrcweir 
242cdf0e10cSrcweir         System.out.println( "\n" );
243cdf0e10cSrcweir 		System.out.println(
244cdf0e10cSrcweir             "-----------------------------------------------------------------" );
245cdf0e10cSrcweir 		System.out.println(
246cdf0e10cSrcweir             "ResourceManager - copies/moves a resource." );
247cdf0e10cSrcweir 		System.out.println(
248cdf0e10cSrcweir             "-----------------------------------------------------------------" );
249cdf0e10cSrcweir 
250cdf0e10cSrcweir         try {
251cdf0e10cSrcweir             ResourceManager transResource = new ResourceManager( args );
252cdf0e10cSrcweir             String sourceURL       = transResource.getContentURL();
253cdf0e10cSrcweir             String targetFolderURL = transResource.getTargetFolderURL();
254cdf0e10cSrcweir             String newTitle        = transResource.getNewTitle();
255cdf0e10cSrcweir             String transOperation  = transResource.getTransOperation();
256cdf0e10cSrcweir             boolean result = transResource.transferResource(
257cdf0e10cSrcweir                                 sourceURL, targetFolderURL, newTitle, transOperation );
258cdf0e10cSrcweir             if ( result )
259cdf0e10cSrcweir                 System.out.println( "\nTransfering resource succeeded." );
260cdf0e10cSrcweir             else
261*a893be29SPedro Giffuni                 System.out.println( "Transferring resource failed." );
262cdf0e10cSrcweir 
263cdf0e10cSrcweir             System.out.println( "   Source URL        : " + sourceURL );
264cdf0e10cSrcweir             System.out.println( "   Target Folder URL : " + targetFolderURL );
265cdf0e10cSrcweir             System.out.println( "   New name          : " + newTitle );
266cdf0e10cSrcweir             System.out.println( "   Transfer Operation: " + transOperation );
267cdf0e10cSrcweir 
268cdf0e10cSrcweir 
269cdf0e10cSrcweir         } catch ( com.sun.star.ucb.CommandAbortedException e ) {
270cdf0e10cSrcweir             System.out.println( "Error: " + e );
271cdf0e10cSrcweir         } catch ( com.sun.star.uno.Exception e ) {
272cdf0e10cSrcweir             System.out.println( "Error: " + e );
273cdf0e10cSrcweir         } catch ( java.lang.Exception e ) {
274cdf0e10cSrcweir             System.out.println( "Error: " + e );
275cdf0e10cSrcweir         }
276cdf0e10cSrcweir         System.exit( 0 );
277cdf0e10cSrcweir     }
278cdf0e10cSrcweir }
279