KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > alfresco > tools > Export


1 /*
2  * Copyright (C) 2005 Alfresco, Inc.
3  *
4  * Licensed under the Mozilla Public License version 1.1
5  * with a permitted attribution clause. You may obtain a
6  * copy of the License at
7  *
8  * http://www.alfresco.org/legal/license.txt
9  *
10  * Unless required by applicable law or agreed to in writing,
11  * software distributed under the License is distributed on an
12  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13  * either express or implied. See the License for the specific
14  * language governing permissions and limitations under the
15  * License.
16  */

17 package org.alfresco.tools;
18
19 import java.io.File JavaDoc;
20 import java.io.InputStream JavaDoc;
21 import java.util.Collection JavaDoc;
22
23 import org.alfresco.repo.exporter.FileExportPackageHandler;
24 import org.alfresco.repo.exporter.ACPExportPackageHandler;
25 import org.alfresco.service.cmr.repository.ContentData;
26 import org.alfresco.service.cmr.repository.MimetypeService;
27 import org.alfresco.service.cmr.repository.NodeRef;
28 import org.alfresco.service.cmr.repository.StoreRef;
29 import org.alfresco.service.cmr.security.AccessPermission;
30 import org.alfresco.service.cmr.view.ExportPackageHandler;
31 import org.alfresco.service.cmr.view.Exporter;
32 import org.alfresco.service.cmr.view.ExporterContext;
33 import org.alfresco.service.cmr.view.ExporterCrawlerParameters;
34 import org.alfresco.service.cmr.view.ExporterException;
35 import org.alfresco.service.cmr.view.ExporterService;
36 import org.alfresco.service.cmr.view.Location;
37 import org.alfresco.service.namespace.QName;
38
39
40 /**
41  * Alfresco Repository Export Tool
42  *
43  * @author David Caruana
44  */

45 public final class Export extends Tool
46 {
47     /** Export Context */
48     private ExportContext context;
49
50     /**
51      * Entry Point
52      *
53      * @param args
54      */

55     public static void main(String JavaDoc[] args)
56     {
57         Tool tool = new Export();
58         tool.start(args);
59     }
60
61     /* (non-Javadoc)
62      * @see org.alfresco.tools.Tool#getToolName()
63      */

64     @Override JavaDoc
65     String JavaDoc getToolName()
66     {
67         return "Alfresco Repository Exporter";
68     }
69     
70     /**
71      * Process Export Tool command line arguments
72      *
73      * @param args the arguments
74      * @return the export context
75      */

76     @Override JavaDoc
77     /*package*/ ToolContext processArgs(String JavaDoc[] args)
78     {
79         context = new ExportContext();
80         context.setLogin(true);
81
82         int i = 0;
83         while (i < args.length)
84         {
85             if (args[i].equals("-h") || args[i].equals("-help"))
86             {
87                 context.setHelp(true);
88                 break;
89             }
90             else if (args[i].equals("-s") || args[i].equals("-store"))
91             {
92                 i++;
93                 if (i == args.length || args[i].length() == 0)
94                 {
95                     throw new ToolException("The value <store> for the parameter -store must be specified");
96                 }
97                 context.storeRef = new StoreRef(args[i]);
98             }
99             else if (args[i].equals("-p") || args[i].equals("-path"))
100             {
101                 i++;
102                 if (i == args.length || args[i].length() == 0)
103                 {
104                     throw new ToolException("The value <path> for the parameter -path must be specified");
105                 }
106                 context.path = args[i];
107             }
108             else if (args[i].equals("-d") || args[i].equals("-dir"))
109             {
110                 i++;
111                 if (i == args.length || args[i].length() == 0)
112                 {
113                     throw new ToolException("The value <dir> for the parameter -dir must be specified");
114                 }
115                 context.destDir = args[i];
116             }
117             else if (args[i].equals("-packagedir"))
118             {
119                 i++;
120                 if (i == args.length || args[i].length() == 0)
121                 {
122                     throw new ToolException("The value <packagedir> for the parameter -packagedir must be specified");
123                 }
124                 context.packageDir = args[i];
125             }
126             else if (args[i].equals("-user"))
127             {
128                 i++;
129                 if (i == args.length || args[i].length() == 0)
130                 {
131                     throw new ToolException("The value <user> for the option -user must be specified");
132                 }
133                 context.setUsername(args[i]);
134             }
135             else if (args[i].equals("-pwd"))
136             {
137                 i++;
138                 if (i == args.length || args[i].length() == 0)
139                 {
140                     throw new ToolException("The value <password> for the option -pwd must be specified");
141                 }
142                 context.setPassword(args[i]);
143             }
144             else if (args[i].equals("-root"))
145             {
146                 context.self = true;
147             }
148             else if (args[i].equals("-nochildren"))
149             {
150                 context.children = false;
151             }
152             else if (args[i].equals("-zip"))
153             {
154                 context.zipped = true;
155             }
156             else if (args[i].equals("-overwrite"))
157             {
158                 context.overwrite = true;
159             }
160             else if (args[i].equals("-quiet"))
161             {
162                 context.setQuiet(true);
163             }
164             else if (args[i].equals("-verbose"))
165             {
166                 context.setVerbose(true);
167             }
168             else if (i == (args.length - 1))
169             {
170                 context.packageName = args[i];
171             }
172             else
173             {
174                 throw new ToolException("Unknown option " + args[i]);
175             }
176
177             // next argument
178
i++;
179         }
180
181         return context;
182     }
183
184     /* (non-Javadoc)
185      * @see org.alfresco.tools.Tool#displayHelp()
186      */

187     @Override JavaDoc
188     /*package*/ void displayHelp()
189     {
190         System.out.println("Usage: export -user username -s[tore] store [options] packagename");
191         System.out.println("");
192         System.out.println("username: username for login");
193         System.out.println("store: the store to extract from in the form of scheme://store_name");
194         System.out.println("packagename: the filename to export to (with or without extension)");
195         System.out.println("");
196         System.out.println("Options:");
197         System.out.println(" -h[elp] display this help");
198         System.out.println(" -p[ath] the path within the store to extract from (default: /)");
199         System.out.println(" -d[ir] the destination directory to export to (default: current directory)");
200         System.out.println(" -pwd password for login");
201         System.out.println(" -packagedir the directory to place extracted content (default: dir/<packagename>)");
202         System.out.println(" -root extract the item located at export path");
203         System.out.println(" -nochildren do not extract children of the item at export path");
204         System.out.println(" -overwrite force overwrite of existing export package if it already exists");
205         System.out.println(" -quiet do not display any messages during export");
206         System.out.println(" -verbose report export progress");
207         System.out.println(" -zip export in zip format");
208     }
209         
210     /* (non-Javadoc)
211      * @see org.alfresco.tools.Tool#execute()
212      */

213     @Override JavaDoc
214     void execute() throws ToolException
215     {
216         ExporterService exporter = getServiceRegistry().getExporterService();
217         MimetypeService mimetypeService = getServiceRegistry().getMimetypeService();
218
219         // create export package handler
220
ExportPackageHandler exportHandler = null;
221         if (context.zipped)
222         {
223             exportHandler = new ZipHandler(context.getDestDir(), context.getZipFile(), context.getPackageFile(), context.getPackageDir(), context.overwrite, mimetypeService);
224         }
225         else
226         {
227             exportHandler = new FileHandler(context.getDestDir(), context.getPackageFile(), context.getPackageDir(), context.overwrite, mimetypeService);
228         }
229
230         // export Repository content to export package
231
ExporterCrawlerParameters parameters = new ExporterCrawlerParameters();
232         parameters.setExportFrom(context.getLocation());
233         parameters.setCrawlSelf(context.self);
234         parameters.setCrawlChildNodes(context.children);
235         
236         try
237         {
238             exporter.exportView(exportHandler, parameters, new ExportProgress());
239         }
240         catch(ExporterException e)
241         {
242             throw new ToolException("Failed to export", e);
243         }
244     }
245
246     /**
247      * Handler for exporting Repository content streams to file system files
248      *
249      * @author David Caruana
250      */

251     private class FileHandler extends FileExportPackageHandler
252     {
253         /**
254          * Construct
255          *
256          * @param destDir
257          * @param dataFile
258          * @param contentDir
259          * @param overwrite
260          */

261         public FileHandler(File JavaDoc destDir, File JavaDoc dataFile, File JavaDoc contentDir, boolean overwrite, MimetypeService mimetypeService)
262         {
263             super(destDir, dataFile, contentDir, overwrite, mimetypeService);
264         }
265
266         /**
267          * Log Export Message
268          *
269          * @param message message to log
270          */

271         protected void log(String JavaDoc message)
272         {
273             Export.this.log(message);
274         }
275     }
276     
277     /**
278      * Handler for exporting Repository content streams to zip file
279      *
280      * @author David Caruana
281      */

282     private class ZipHandler extends ACPExportPackageHandler
283     {
284         /**
285          * Construct
286          *
287          * @param destDir
288          * @param zipFile
289          * @param dataFile
290          * @param contentDir
291          */

292         public ZipHandler(File JavaDoc destDir, File JavaDoc zipFile, File JavaDoc dataFile, File JavaDoc contentDir, boolean overwrite, MimetypeService mimetypeService)
293         {
294             super(destDir, zipFile, dataFile, contentDir, overwrite, mimetypeService);
295         }
296
297         /**
298          * Log Export Message
299          *
300          * @param message message to log
301          */

302         protected void log(String JavaDoc message)
303         {
304             Export.this.log(message);
305         }
306     }
307
308     /**
309      * Export Tool Context
310      *
311      * @author David Caruana
312      */

313     private class ExportContext extends ToolContext
314     {
315         /** Store Reference to export from */
316         private StoreRef storeRef;
317         /** Path to export from */
318         private String JavaDoc path;
319         /** Destination directory to export to */
320         private String JavaDoc destDir;
321         /** The package directory within the destination directory to export to */
322         private String JavaDoc packageDir;
323         /** The package name to export to */
324         private String JavaDoc packageName;
325         /** Export children */
326         private boolean children = true;
327         /** Export self */
328         private boolean self = false;
329         /** Force overwrite of existing package */
330         private boolean overwrite = false;
331         /** Zipped? */
332         private boolean zipped = false;
333
334         /* (non-Javadoc)
335          * @see org.alfresco.tools.ToolContext#validate()
336          */

337         @Override JavaDoc
338         /*package*/ void validate()
339         {
340             super.validate();
341             
342             if (storeRef == null)
343             {
344                 throw new ToolException("Store to export from has not been specified.");
345             }
346             if (packageName == null)
347             {
348                 throw new ToolException("Package name has not been specified.");
349             }
350             if (destDir != null)
351             {
352                 File JavaDoc fileDestDir = new File JavaDoc(destDir);
353                 if (fileDestDir.exists() == false)
354                 {
355                     throw new ToolException("Destination directory " + fileDestDir.getAbsolutePath() + " does not exist.");
356                 }
357             }
358         }
359
360         /**
361          * Get the location within the Repository to export from
362          *
363          * @return the location
364          */

365         private Location getLocation()
366         {
367             Location location = new Location(storeRef);
368             location.setPath(path);
369             return location;
370         }
371
372         /**
373          * Get the destination directory
374          *
375          * @return the destination directory (or null if current directory)
376          */

377         private File JavaDoc getDestDir()
378         {
379             File JavaDoc dir = (destDir == null) ? null : new File JavaDoc(destDir);
380             return dir;
381         }
382
383         /**
384          * Get the package directory
385          *
386          * @return the package directory within the destination directory
387          */

388         private File JavaDoc getPackageDir()
389         {
390             File JavaDoc dir = null;
391             if (packageDir != null)
392             {
393                 dir = new File JavaDoc(packageDir);
394             }
395             else if (packageName.indexOf('.') != -1)
396             {
397                 dir = new File JavaDoc(packageName.substring(0, packageName.indexOf('.')));
398             }
399             else
400             {
401                 dir = new File JavaDoc(packageName);
402             }
403             return dir;
404         }
405
406         /**
407          * Get the xml export file
408          *
409          * @return the package file
410          */

411         private File JavaDoc getPackageFile()
412         {
413             String JavaDoc packageFile = (packageName.indexOf('.') != -1) ? packageName : packageName + ".xml";
414             File JavaDoc file = new File JavaDoc(packageFile);
415             return file;
416         }
417
418         /**
419          * Get the zip file
420          *
421          * @return the zip file
422          */

423         private File JavaDoc getZipFile()
424         {
425             int iExt = packageName.indexOf('.');
426             String JavaDoc zipFile = ((iExt != -1) ? packageName.substring(0, iExt) : packageName) + ".acp";
427             return new File JavaDoc(zipFile);
428         }
429     }
430
431     
432     /**
433      * Report Export Progress
434      *
435      * @author David Caruana
436      */

437     private class ExportProgress
438         implements Exporter
439     {
440         /* (non-Javadoc)
441          * @see org.alfresco.service.cmr.view.Exporter#start()
442          */

443         public void start(ExporterContext exportNodeRef)
444         {
445         }
446
447         /* (non-Javadoc)
448          * @see org.alfresco.service.cmr.view.Exporter#startNamespace(java.lang.String, java.lang.String)
449          */

450         public void startNamespace(String JavaDoc prefix, String JavaDoc uri)
451         {
452             logVerbose("Exporting namespace " + uri + " (prefix: " + prefix + ")");
453         }
454
455         /* (non-Javadoc)
456          * @see org.alfresco.service.cmr.view.Exporter#endNamespace(java.lang.String)
457          */

458         public void endNamespace(String JavaDoc prefix)
459         {
460         }
461
462         /* (non-Javadoc)
463          * @see org.alfresco.service.cmr.view.Exporter#startNode(org.alfresco.service.cmr.repository.NodeRef)
464          */

465         public void startNode(NodeRef nodeRef)
466         {
467             logVerbose("Exporting node " + nodeRef.toString());
468         }
469
470         /* (non-Javadoc)
471          * @see org.alfresco.service.cmr.view.Exporter#endNode(org.alfresco.service.cmr.repository.NodeRef)
472          */

473         public void endNode(NodeRef nodeRef)
474         {
475         }
476
477         /* (non-Javadoc)
478          * @see org.alfresco.service.cmr.view.Exporter#startAspects(org.alfresco.service.cmr.repository.NodeRef)
479          */

480         public void startAspects(NodeRef nodeRef)
481         {
482         }
483
484         /* (non-Javadoc)
485          * @see org.alfresco.service.cmr.view.Exporter#endAspects(org.alfresco.service.cmr.repository.NodeRef)
486          */

487         public void endAspects(NodeRef nodeRef)
488         {
489         }
490         
491         /* (non-Javadoc)
492          * @see org.alfresco.service.cmr.view.Exporter#startAspect(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName)
493          */

494         public void startAspect(NodeRef nodeRef, QName aspect)
495         {
496         }
497
498         /* (non-Javadoc)
499          * @see org.alfresco.service.cmr.view.Exporter#endAspect(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName)
500          */

501         public void endAspect(NodeRef nodeRef, QName aspect)
502         {
503         }
504
505         /* (non-Javadoc)
506          * @see org.alfresco.service.cmr.view.Exporter#startACL(org.alfresco.service.cmr.repository.NodeRef)
507          */

508         public void startACL(NodeRef nodeRef)
509         {
510         }
511
512         /* (non-Javadoc)
513          * @see org.alfresco.service.cmr.view.Exporter#permission(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.security.AccessPermission)
514          */

515         public void permission(NodeRef nodeRef, AccessPermission permission)
516         {
517         }
518
519         /* (non-Javadoc)
520          * @see org.alfresco.service.cmr.view.Exporter#endACL(org.alfresco.service.cmr.repository.NodeRef)
521          */

522         public void endACL(NodeRef nodeRef)
523         {
524         }
525         
526         /* (non-Javadoc)
527          * @see org.alfresco.service.cmr.view.Exporter#startProperties(org.alfresco.service.cmr.repository.NodeRef)
528          */

529         public void startProperties(NodeRef nodeRef)
530         {
531         }
532
533         /* (non-Javadoc)
534          * @see org.alfresco.service.cmr.view.Exporter#endProperties(org.alfresco.service.cmr.repository.NodeRef)
535          */

536         public void endProperties(NodeRef nodeRef)
537         {
538         }
539         
540         /* (non-Javadoc)
541          * @see org.alfresco.service.cmr.view.Exporter#startProperty(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName)
542          */

543         public void startProperty(NodeRef nodeRef, QName property)
544         {
545         }
546
547         /* (non-Javadoc)
548          * @see org.alfresco.service.cmr.view.Exporter#endProperty(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName)
549          */

550         public void endProperty(NodeRef nodeRef, QName property)
551         {
552         }
553
554         /* (non-Javadoc)
555          * @see org.alfresco.service.cmr.view.Exporter#value(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName, java.io.Serializable)
556          */

557         public void value(NodeRef nodeRef, QName property, Object JavaDoc value)
558         {
559         }
560
561         /* (non-Javadoc)
562          * @see org.alfresco.service.cmr.view.Exporter#value(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName, java.util.Collection)
563          */

564         public void value(NodeRef nodeRef, QName property, Collection JavaDoc values)
565         {
566         }
567
568         /* (non-Javadoc)
569          * @see org.alfresco.service.cmr.view.Exporter#content(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName, java.io.InputStream)
570          */

571         public void content(NodeRef nodeRef, QName property, InputStream JavaDoc content, ContentData contentData)
572         {
573         }
574
575         /* (non-Javadoc)
576          * @see org.alfresco.service.cmr.view.Exporter#startAssoc(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName)
577          */

578         public void startAssoc(NodeRef nodeRef, QName assoc)
579         {
580         }
581
582         /* (non-Javadoc)
583          * @see org.alfresco.service.cmr.view.Exporter#endAssoc(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName)
584          */

585         public void endAssoc(NodeRef nodeRef, QName assoc)
586         {
587         }
588
589         /* (non-Javadoc)
590          * @see org.alfresco.service.cmr.view.Exporter#startAssocs(org.alfresco.service.cmr.repository.NodeRef)
591          */

592         public void startAssocs(NodeRef nodeRef)
593         {
594         }
595
596         /* (non-Javadoc)
597          * @see org.alfresco.service.cmr.view.Exporter#endAssocs(org.alfresco.service.cmr.repository.NodeRef)
598          */

599         public void endAssocs(NodeRef nodeRef)
600         {
601         }
602
603         /* (non-Javadoc)
604          * @see org.alfresco.service.cmr.view.Exporter#warning(java.lang.String)
605          */

606         public void warning(String JavaDoc warning)
607         {
608             log("Warning: " + warning);
609         }
610
611         /* (non-Javadoc)
612          * @see org.alfresco.service.cmr.view.Exporter#end()
613          */

614         public void end()
615         {
616         }
617
618         /* (non-Javadoc)
619          * @see org.alfresco.service.cmr.view.Exporter#startReference(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName)
620          */

621         public void startReference(NodeRef nodeRef, QName childName)
622         {
623         }
624
625         /* (non-Javadoc)
626          * @see org.alfresco.service.cmr.view.Exporter#endReference(org.alfresco.service.cmr.repository.NodeRef)
627          */

628         public void endReference(NodeRef nodeRef)
629         {
630             // TODO Auto-generated method stub
631

632         }
633
634     }
635
636 }
637
Popular Tags