File Source: movabletypeimporter.java

         /* 
    P/P   *  Method: net.sourceforge.pebble.util.importer.MovableTypeImporter__static_init
          */
     1  /*
     2   * Copyright (c) 2003-2006, Simon Brown
     3   * All rights reserved.
     4   *
     5   * Redistribution and use in source and binary forms, with or without
     6   * modification, are permitted provided that the following conditions are met:
     7   *
     8   *   - Redistributions of source code must retain the above copyright
     9   *     notice, this list of conditions and the following disclaimer.
    10   *
    11   *   - Redistributions in binary form must reproduce the above copyright
    12   *     notice, this list of conditions and the following disclaimer in
    13   *     the documentation and/or other materials provided with the
    14   *     distribution.
    15   *
    16   *   - Neither the name of Pebble nor the names of its contributors may
    17   *     be used to endorse or promote products derived from this software
    18   *     without specific prior written permission.
    19   *
    20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    21   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    23   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
    24   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    25   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    26   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    27   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    28   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    29   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    30   * POSSIBILITY OF SUCH DAMAGE.
    31   */
    32  package net.sourceforge.pebble.util.importer;
    33  
    34  import net.sourceforge.pebble.Configuration;
    35  import net.sourceforge.pebble.PebbleContext;
    36  import net.sourceforge.pebble.dao.CategoryDAO;
    37  import net.sourceforge.pebble.dao.DAOFactory;
    38  import net.sourceforge.pebble.dao.file.FileDAOFactory;
    39  import net.sourceforge.pebble.domain.Blog;
    40  import net.sourceforge.pebble.domain.BlogEntry;
    41  import net.sourceforge.pebble.domain.BlogService;
    42  import net.sourceforge.pebble.domain.Category;
    43  import net.sourceforge.pebble.domain.Comment;
    44  import net.sourceforge.pebble.domain.State;
    45  import net.sourceforge.pebble.domain.TrackBack;
    46  
    47  import java.io.BufferedReader;
    48  import java.io.File;
    49  import java.io.FileInputStream;
    50  import java.io.InputStreamReader;
    51  import java.text.SimpleDateFormat;
    52  import java.util.ArrayList;
    53  import java.util.Date;
    54  import java.util.List;
    55  import java.util.Locale;
    56  
    57  /**
    58   * Simple utility to import posts Movable Type into Pebble.
    59   *
    60   * @author    Simon Brown
    61   */
         /* 
    P/P   *  Method: void net.sourceforge.pebble.util.importer.MovableTypeImporter()
          */
    62  public class MovableTypeImporter {
    63  
    64    /**
    65     * Starts the importer.
    66     */
    67    public static void main(String[] args) throws Exception {
             /* 
    P/P       *  Method: void main(String[])
              * 
              *  Preconditions:
              *    args != null
              *    (soft) init'ed(args[0])
              *    (soft) init'ed(args[1])
              *    (soft) init'ed(args[2])
              * 
              *  Presumptions:
              *    java.lang.System.out != null
              * 
              *  Preconditions:
              *    (soft) init'ed(net.sourceforge.pebble.PebbleContext__static_init.new PebbleContext(PebbleContext__static_init#1).configuration)
              * 
              *  Postconditions:
              *    net.sourceforge.pebble.PebbleContext__static_init.new PebbleContext(PebbleContext__static_init#1).configuration == One-of{old net.sourceforge.pebble.PebbleContext__static_init.new PebbleContext(PebbleContext__static_init#1).configuration, &new Configuration(main#2)}
              *    (soft) init'ed(net.sourceforge.pebble.PebbleContext__static_init.new PebbleContext(PebbleContext__static_init#1).configuration)
              *    new Configuration(main#2) num objects <= 1
              * 
              *  Test Vectors:
              *    args.length: {3}, {0..2, 4..+Inf}
              *    net.sourceforge.pebble.PebbleContext__static_init.new PebbleContext(PebbleContext__static_init#1).configuration: Inverse{null}, Addr_Set{null}
              */
    68      if (args.length != 3) {
    69        System.out.println("Usage : net.sourceforge.pebble.util.importer.MovableTypeImporter %1 %2 %3");
    70        System.out.println("   %1 : location of MT export file");
    71        System.out.println("   %2 : location of Pebble blog");
    72        System.out.println("   %3 : time zone (e.g. Europe/London)");
    73  
    74        return;
    75      }
    76  
    77      File file = new File(args[0]);
    78      if(null == PebbleContext.getInstance().getConfiguration()){
    79        //to prevent NullPointerException upon UpdateNotificationPingsClient.sendUpdateNotificationPing()
    80        Configuration config = new Configuration();
    81        config.setDataDirectory(args[1]);
    82        config.setUrl("http://www.yourdomain.com/blog/");
    83        PebbleContext.getInstance().setConfiguration(config);
    84      }
    85  
    86      DAOFactory.setConfiguredFactory(new FileDAOFactory());
    87      Blog blog = new Blog(args[1]);
    88      blog.setProperty(Blog.TIMEZONE_KEY, args[2]);
    89  
    90      importBlog(blog, file);
    91    }
    92  
    93    /**
    94     * Imports a Movable Type blog from an export file.
    95     *
    96     * @param blog    the SimpleBlo to import to
    97     * @param file    the Movable Type export file
    98     * @throws Exception  if something goes wrong
    99     */
   100    private static void importBlog(Blog blog, File file) throws Exception {
             /* 
    P/P       *  Method: void importBlog(Blog, File)
              * 
              *  Preconditions:
              *    file != null
              *    (soft) blog != null
              * 
              *  Presumptions:
              *    java.lang.System.out != null
              */
   101      System.out.println("Importing " + file.getName());
   102  
   103      BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF8"));
   104      BlogEntry blogEntry = null;
   105      do {
   106        blogEntry = readBlogEntry(blog, reader);
   107      } while (blogEntry != null);
   108  
   109      System.out.println(" " + blog.getNumberOfBlogEntries());
   110    }
   111  
   112    private static BlogEntry readBlogEntry(Blog blog, BufferedReader reader) throws Exception {
             /* 
    P/P       *  Method: BlogEntry readBlogEntry(Blog, BufferedReader)
              * 
              *  Preconditions:
              *    reader != null
              *    (soft) blog != null
              * 
              *  Presumptions:
              *    java.io.BufferedReader:readLine(...)@120 != null
              *    java.io.BufferedReader:readLine(...)@122 != null
              *    java.io.BufferedReader:readLine(...)@124 != null
              *    java.io.BufferedReader:readLine(...)@126 != null
              *    java.io.BufferedReader:readLine(...)@128 != null
              *    ...
              * 
              *  Postconditions:
              *    return_value in Addr_Set{null,&new BlogEntry(readBlogEntry#7)}
              *    new BlogEntry(readBlogEntry#7) num objects <= 1
              * 
              *  Test Vectors:
              *    java.io.BufferedReader:readLine(...)@113: Inverse{null}, Addr_Set{null}
              *    java.lang.String:equals(...)@162: {0}, {1}
              *    java.lang.String:equals(...)@165: {1}, {0}
              *    java.lang.String:equals(...)@174: {0}, {1}
              *    java.lang.String:equals(...)@177: {1}, {0}
              *    java.lang.String:equals(...)@186: {0}, {1}
              *    java.lang.String:equals(...)@189: {1}, {0}
              *    java.lang.String:equals(...)@198: {0}, {1}
              *    java.lang.String:equals(...)@201: {1}, {0}
              *    java.lang.String:equals(...)@242: {0}, {1}
              *    ...
              */
   113      String line = reader.readLine();
   114      if (line == null) {
   115        return null;
   116      }
   117      SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a", Locale.ENGLISH);
   118      String author = line.substring("AUTHOR: ".length());
   119  //    System.out.println("Author:" + author);
   120      String title = reader.readLine().substring("TITLE: ".length());
   121  //    System.out.println("Title:" + title);
   122      String status = reader.readLine().substring("STATUS: ".length());
   123  //    System.out.println("Status:" + status);
   124      String allowComments = reader.readLine().substring("ALLOW COMMENTS: ".length());
   125  //    System.out.println("Allow comments:" + allowComments);
   126      String convertBreaks = reader.readLine().substring("CONVERT BREAKS: ".length());
   127  //    System.out.println("Convert breaks:" + convertBreaks);
   128      String allowPings = reader.readLine().substring("ALLOW PINGS: ".length());
   129  //    System.out.println("Allow pings:" + allowPings);
   130  //    String primaryCategory = "";
   131      List<String> categories = new ArrayList<String>(1);
   132      line = reader.readLine();
   133      //    System.out.println("Primary category:" + primaryCategory);
   134      if(line.length() != 0){
   135        // the entry is categorized
   136  //      primaryCategory = line.substring("PRIMARY CATEGORY: ".length());
   137        //    System.out.println("Primary category:" + primaryCategory);
   138  //      if (primaryCategory.trim().length() > 0) {
   139          line = reader.readLine();
   140          while(line.length() > 0){
   141            if(line.indexOf("CATEGORY: ") != -1){
   142              String category = line.substring(line.indexOf("CATEGORY: ")+10);
   143              if(category.trim().length() > 0){
   144                categories.add(category);
   145              }
   146  //            categories.add(line.substring(line.indexOf("CATEGORY: ")+10));
   147            }
   148            line = reader.readLine();
   149          }
   150  //      System.out.println("Category:" + category);
   151  //      }else{
   152  //        reader.readLine(); // blank line
   153  //      }
   154      }
   155      Date date = sdf.parse(reader.readLine().substring("DATE: ".length()));
   156  //    System.out.println("Date:" + date);
   157  
   158      reader.readLine();
   159      reader.readLine();
   160      StringBuffer body = new StringBuffer();
   161      String bodyLine = reader.readLine();
   162      while (!bodyLine.equals("-----")) {
   163        body.append(bodyLine);
   164        bodyLine = reader.readLine();
   165        if (!bodyLine.equals("-----")) {
   166          body.append("<br />");
   167        }
   168      }
   169  //    System.out.println("Body:" + body);
   170  
   171      reader.readLine();
   172      StringBuffer extendedBody = new StringBuffer();
   173      String extendedBodyLine = reader.readLine();
   174      while (!extendedBodyLine.equals("-----")) {
   175        extendedBody.append(extendedBodyLine);
   176        extendedBodyLine = reader.readLine();
   177        if (!extendedBodyLine.equals("-----")) {
   178          extendedBody.append("<br />");
   179        }
   180      }
   181  //    System.out.println("Extended body:" + extendedBody);
   182  
   183      reader.readLine();
   184      StringBuffer excerpt = new StringBuffer();
   185      String excerptLine = reader.readLine();
   186      while (!excerptLine.equals("-----")) {
   187        excerpt.append(excerptLine);
   188        excerptLine = reader.readLine();
   189        if (!excerptLine.equals("-----")) {
   190          excerpt.append("<br />");
   191        }
   192      }
   193  //    System.out.println("Excerpt:" + excerpt);
   194  
   195      reader.readLine();
   196      StringBuffer keywords = new StringBuffer();
   197      String keywordsLine = reader.readLine();
   198      while (!keywordsLine.equals("-----")) {
   199        keywords.append(keywordsLine);
   200        keywordsLine = reader.readLine();
   201        if (!keywordsLine.equals("-----")) {
   202          keywords.append("<br />");
   203        }
   204      }
   205  //    System.out.println("Keywords:" + keywords);
   206  
   207      // create a new Pebble entry, add and store
   208      BlogEntry entry = new BlogEntry(blog);
   209      entry.setTitle(title);
   210      if (extendedBody.length() != 0) {
   211        entry.setBody(body+"<br />"+extendedBody);
   212        entry.setExcerpt(body.toString());
   213      }else{
   214        entry.setBody(body.toString());
   215      }
   216      entry.setDate(date);
   217      if (excerpt.length() != 0) {
   218        entry.setExcerpt(excerpt.toString());
   219      }else if(extendedBody.length() != 0){
   220        entry.setExcerpt(body.toString());
   221      }
   222      entry.setAuthor(author);
   223      entry.setCommentsEnabled(allowComments.equals("1"));
   224      entry.setTrackBacksEnabled(allowPings.equals("1"));
   225  
   226      for (String categoryStr : categories) {
   227        if(categoryStr != null && categoryStr.trim().length() > 0) {
   228          Category category = new Category(categoryStr.trim(), categoryStr.trim());
   229          DAOFactory factory = DAOFactory.getConfiguredFactory();
   230          CategoryDAO dao = factory.getCategoryDAO();
   231          dao.addCategory(category, blog);
   232          blog.addCategory(category);
   233          entry.addCategory(category);
   234        }
   235      }
   236      entry.setPublished("Publish".equals(status));
   237  
   238      BlogService service = new BlogService();
   239      service.putBlogEntry(entry);
   240  
   241      line = reader.readLine();
   242      while (!line.equals("--------")) {
   243        if (line.equals("COMMENT:")) {
   244          String commentAuthor = reader.readLine().substring("AUTHOR: ".length());
   245          String commentEmail = reader.readLine().substring("EMAIL: ".length());
   246          String commentIpAddress = reader.readLine().substring("IP: ".length());
   247          String commentUrl = reader.readLine().substring("URL: ".length());
   248          Date commentDate = sdf.parse(reader.readLine().substring("DATE: ".length()));
   249  
   250          StringBuffer commentBody = new StringBuffer();
   251          String commentBodyLine = reader.readLine();
   252          while (!commentBodyLine.equals("-----")) {
   253            commentBody.append(commentBodyLine);
   254            commentBodyLine = reader.readLine();
   255            if (!commentBodyLine.equals("-----")) {
   256              commentBody.append("<br />");
   257            }
   258          }
   259  
   260          Comment comment = entry.createComment(null, commentBody.toString(), commentAuthor, commentEmail, commentUrl, commentIpAddress, commentDate, State.APPROVED);
   261          entry.addComment(comment);
   262        } else if (line.equals("PING:")) {
   263          String pingTitle = reader.readLine().substring("TITLE: ".length());
   264          String pingUrl = reader.readLine().substring("URL: ".length());
   265          String pingIpAddress = reader.readLine().substring("IP: ".length());
   266          String pingBlogName = reader.readLine().substring("BLOG NAME: ".length());
   267          Date pingDate = sdf.parse(reader.readLine().substring("DATE: ".length()));
   268  
   269          StringBuffer pingBody = new StringBuffer();
   270          String pingBodyLing = reader.readLine();
   271          while (!pingBodyLing.equals("-----")) {
   272            pingBody.append(pingBodyLing);
   273            pingBodyLing = reader.readLine();
   274            if (!pingBodyLing.equals("-----")) {
   275              pingBody.append("<br />");
   276            }
   277          }
   278  
   279          TrackBack trackBack = entry.createTrackBack(pingTitle, pingBody.toString(), pingUrl, pingBlogName, pingIpAddress, pingDate, State.APPROVED);
   280          entry.addTrackBack(trackBack);
   281        }
   282        line = reader.readLine();
   283      }
   284  
   285      service.putBlogEntry(entry);
   286  
   287  //    System.out.println("--------------------------------------------------");
   288      System.out.print(".");
   289  
   290      return entry;
   291    }
   292  
   293  }








SofCheck Inspector Build Version : 2.22510
movabletypeimporter.java 2010-Jun-25 19:40:32
movabletypeimporter.class 2010-Jul-19 20:23:38