populate.java
上传用户:dinglihq
上传日期:2013-02-04
资源大小:99958k
文件大小:6k
源码类别:

Java编程

开发平台:

Java

  1. /*
  2.  * @(#)populate.java 1.8 03/04/22
  3.  *
  4.  * Copyright 1997-2003 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  * 
  10.  * - Redistributions of source code must retain the above copyright
  11.  *   notice, this list of conditions and the following disclaimer.
  12.  * 
  13.  * - Redistribution in binary form must reproduce the above copyright
  14.  *   notice, this list of conditions and the following disclaimer in the
  15.  *   documentation and/or other materials provided with the distribution.
  16.  * 
  17.  * Neither the name of Sun Microsystems, Inc. or the names of contributors
  18.  * may be used to endorse or promote products derived from this software
  19.  * without specific prior written permission.
  20.  * 
  21.  * This software is provided "AS IS," without a warranty of any kind. ALL
  22.  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
  23.  * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
  24.  * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND
  25.  * ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES OR LIABILITIES
  26.  * SUFFERED BY LICENSEE AS A RESULT OF  OR RELATING TO USE, MODIFICATION
  27.  * OR DISTRIBUTION OF THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
  28.  * SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
  29.  * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
  30.  * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
  31.  * ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS
  32.  * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  33.  * 
  34.  * You acknowledge that Software is not designed, licensed or intended
  35.  * for use in the design, construction, operation or maintenance of any
  36.  * nuclear facility.
  37.  */
  38. import javax.mail.*;
  39. import javax.mail.internet.*;
  40. /*
  41.  * Copy folder hierarchies between different Stores. This is a useful 
  42.  * utility to populate new (and possibly empty) mail stores. Specify
  43.  * both the source and destination folders as URLs.
  44.  *
  45.  * @author John Mani
  46.  */
  47. public class populate {
  48.     static boolean force = false;
  49.     static boolean skipSCCS = false;
  50.     static boolean clear = false;
  51.     public static void main(String argv[]) {
  52.      String srcURL = null;
  53.      String dstURL = null;
  54. boolean debug = false;
  55. int optind;
  56. for (optind = 0; optind < argv.length; optind++) {
  57.     if (argv[optind].equals("-s")) {
  58. srcURL = argv[++optind];
  59.     } else if (argv[optind].equals("-d")) {
  60. dstURL = argv[++optind];
  61.     } else if (argv[optind].equals("-D")) {
  62. debug = true;
  63.     } else if (argv[optind].equals("-f")) {
  64. force = true;
  65.     } else if (argv[optind].equals("-S")) {
  66. skipSCCS = true;
  67.     } else if (argv[optind].equals("-c")) {
  68. clear = true;
  69.     } else if (argv[optind].equals("--")) {
  70. optind++;
  71. break;
  72.     } else if (argv[optind].startsWith("-")) {
  73. printUsage();
  74. System.exit(1);
  75.     } else {
  76. break;
  77.     }
  78. }
  79. try {
  80.     if (srcURL == null || dstURL == null) {
  81. printUsage();
  82. System.exit(1);
  83.     }
  84.     Session session = Session.getInstance(
  85. System.getProperties(), null);
  86.     session.setDebug(debug);
  87.     // Get source folder
  88.     Folder srcFolder = session.getFolder(new URLName(srcURL));
  89.     if (!srcFolder.exists()) {
  90. System.out.println("source folder does not exist");
  91. srcFolder.getStore().close();
  92. System.exit(1);
  93.     }
  94.     // Set up destination folder
  95.     URLName dstURLName = new URLName(dstURL);
  96.     Folder dstFolder;
  97.     // Check if the destination URL has a folder specified. If
  98.     // not, we use the source folder name
  99.     if (dstURLName.getFile() == null) {
  100. Store s = session.getStore(dstURLName);
  101. s.connect();
  102. dstFolder = s.getFolder(srcFolder.getName());
  103.     } else
  104. dstFolder = session.getFolder(new URLName(dstURL));
  105.     if (clear && dstFolder.exists()) {
  106. if (!dstFolder.delete(true)) {
  107.     System.out.println("couldn't delete " +
  108. dstFolder.getFullName());
  109.     return;
  110. }
  111.     }
  112.     copy(srcFolder, dstFolder);
  113.     // Close the respective stores.
  114.     srcFolder.getStore().close();
  115.     dstFolder.getStore().close();
  116. } catch (MessagingException mex) {
  117.     System.out.println(mex.getMessage());
  118.     mex.printStackTrace();
  119. }
  120.     }
  121.     private static void copy(Folder src, Folder dst)
  122. throws MessagingException {
  123. System.out.println("Populating " + dst.getFullName());
  124. if (!dst.exists()) {
  125.     // Create it.
  126.     if (!dst.create(src.getType())) {
  127. System.out.println("couldn't create " + dst.getFullName());
  128. return;
  129.     }
  130.     // Copy over any messges from src to dst
  131.     if ((src.getType() & Folder.HOLDS_MESSAGES) != 0) {
  132. src.open(Folder.READ_ONLY);
  133. src.copyMessages(src.getMessages(), dst);
  134. src.close(false);
  135.     }
  136. } else  {
  137.     System.out.println(dst.getFullName() + " already exists");
  138.     // Copy over any messges from src to dst
  139.     if (force && (src.getType() & Folder.HOLDS_MESSAGES) != 0) {
  140. src.open(Folder.READ_ONLY);
  141. src.copyMessages(src.getMessages(), dst);
  142. src.close(false);
  143.     }
  144. }
  145. // Copy over subfolders
  146. if ((src.getType() & Folder.HOLDS_FOLDERS) != 0) {
  147. Folder[] sf = src.list();
  148. for (int  i = 0; i < sf.length; i++) {
  149.     // skip SCCS directories?
  150.     if (skipSCCS && sf[i].getName().equals("SCCS"))
  151. continue;
  152.     copy(sf[i], dst.getFolder(sf[i].getName()));
  153. }
  154.      }
  155.     }
  156.     private static void printUsage() {
  157. System.out.println("populate [-D] [-f] [-S] [-c] " +
  158.    "-s source_url -d dest_url");
  159. System.out.println("URLs are of the form: " +
  160.       "protocol://username:password@hostname/foldername");
  161. System.out.println("The destination URL does not need a foldername," +
  162.       " in which case, the source foldername is used");
  163.     }
  164. }