1 17 package org.alfresco.tools; 18 19 import java.io.File ; 20 import java.io.InputStream ; 21 import java.util.Collection ; 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 45 public final class Export extends Tool 46 { 47 48 private ExportContext context; 49 50 55 public static void main(String [] args) 56 { 57 Tool tool = new Export(); 58 tool.start(args); 59 } 60 61 64 @Override 65 String getToolName() 66 { 67 return "Alfresco Repository Exporter"; 68 } 69 70 76 @Override 77 ToolContext processArgs(String [] 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 i++; 179 } 180 181 return context; 182 } 183 184 187 @Override 188 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 213 @Override 214 void execute() throws ToolException 215 { 216 ExporterService exporter = getServiceRegistry().getExporterService(); 217 MimetypeService mimetypeService = getServiceRegistry().getMimetypeService(); 218 219 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 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 251 private class FileHandler extends FileExportPackageHandler 252 { 253 261 public FileHandler(File destDir, File dataFile, File contentDir, boolean overwrite, MimetypeService mimetypeService) 262 { 263 super(destDir, dataFile, contentDir, overwrite, mimetypeService); 264 } 265 266 271 protected void log(String message) 272 { 273 Export.this.log(message); 274 } 275 } 276 277 282 private class ZipHandler extends ACPExportPackageHandler 283 { 284 292 public ZipHandler(File destDir, File zipFile, File dataFile, File contentDir, boolean overwrite, MimetypeService mimetypeService) 293 { 294 super(destDir, zipFile, dataFile, contentDir, overwrite, mimetypeService); 295 } 296 297 302 protected void log(String message) 303 { 304 Export.this.log(message); 305 } 306 } 307 308 313 private class ExportContext extends ToolContext 314 { 315 316 private StoreRef storeRef; 317 318 private String path; 319 320 private String destDir; 321 322 private String packageDir; 323 324 private String packageName; 325 326 private boolean children = true; 327 328 private boolean self = false; 329 330 private boolean overwrite = false; 331 332 private boolean zipped = false; 333 334 337 @Override 338 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 fileDestDir = new File (destDir); 353 if (fileDestDir.exists() == false) 354 { 355 throw new ToolException("Destination directory " + fileDestDir.getAbsolutePath() + " does not exist."); 356 } 357 } 358 } 359 360 365 private Location getLocation() 366 { 367 Location location = new Location(storeRef); 368 location.setPath(path); 369 return location; 370 } 371 372 377 private File getDestDir() 378 { 379 File dir = (destDir == null) ? null : new File (destDir); 380 return dir; 381 } 382 383 388 private File getPackageDir() 389 { 390 File dir = null; 391 if (packageDir != null) 392 { 393 dir = new File (packageDir); 394 } 395 else if (packageName.indexOf('.') != -1) 396 { 397 dir = new File (packageName.substring(0, packageName.indexOf('.'))); 398 } 399 else 400 { 401 dir = new File (packageName); 402 } 403 return dir; 404 } 405 406 411 private File getPackageFile() 412 { 413 String packageFile = (packageName.indexOf('.') != -1) ? packageName : packageName + ".xml"; 414 File file = new File (packageFile); 415 return file; 416 } 417 418 423 private File getZipFile() 424 { 425 int iExt = packageName.indexOf('.'); 426 String zipFile = ((iExt != -1) ? packageName.substring(0, iExt) : packageName) + ".acp"; 427 return new File (zipFile); 428 } 429 } 430 431 432 437 private class ExportProgress 438 implements Exporter 439 { 440 443 public void start(ExporterContext exportNodeRef) 444 { 445 } 446 447 450 public void startNamespace(String prefix, String uri) 451 { 452 logVerbose("Exporting namespace " + uri + " (prefix: " + prefix + ")"); 453 } 454 455 458 public void endNamespace(String prefix) 459 { 460 } 461 462 465 public void startNode(NodeRef nodeRef) 466 { 467 logVerbose("Exporting node " + nodeRef.toString()); 468 } 469 470 473 public void endNode(NodeRef nodeRef) 474 { 475 } 476 477 480 public void startAspects(NodeRef nodeRef) 481 { 482 } 483 484 487 public void endAspects(NodeRef nodeRef) 488 { 489 } 490 491 494 public void startAspect(NodeRef nodeRef, QName aspect) 495 { 496 } 497 498 501 public void endAspect(NodeRef nodeRef, QName aspect) 502 { 503 } 504 505 508 public void startACL(NodeRef nodeRef) 509 { 510 } 511 512 515 public void permission(NodeRef nodeRef, AccessPermission permission) 516 { 517 } 518 519 522 public void endACL(NodeRef nodeRef) 523 { 524 } 525 526 529 public void startProperties(NodeRef nodeRef) 530 { 531 } 532 533 536 public void endProperties(NodeRef nodeRef) 537 { 538 } 539 540 543 public void startProperty(NodeRef nodeRef, QName property) 544 { 545 } 546 547 550 public void endProperty(NodeRef nodeRef, QName property) 551 { 552 } 553 554 557 public void value(NodeRef nodeRef, QName property, Object value) 558 { 559 } 560 561 564 public void value(NodeRef nodeRef, QName property, Collection values) 565 { 566 } 567 568 571 public void content(NodeRef nodeRef, QName property, InputStream content, ContentData contentData) 572 { 573 } 574 575 578 public void startAssoc(NodeRef nodeRef, QName assoc) 579 { 580 } 581 582 585 public void endAssoc(NodeRef nodeRef, QName assoc) 586 { 587 } 588 589 592 public void startAssocs(NodeRef nodeRef) 593 { 594 } 595 596 599 public void endAssocs(NodeRef nodeRef) 600 { 601 } 602 603 606 public void warning(String warning) 607 { 608 log("Warning: " + warning); 609 } 610 611 614 public void end() 615 { 616 } 617 618 621 public void startReference(NodeRef nodeRef, QName childName) 622 { 623 } 624 625 628 public void endReference(NodeRef nodeRef) 629 { 630 632 } 633 634 } 635 636 } 637 | Popular Tags |