Author: dieppe
Date: 2008-02-08 01:25:29 +0000 (Fri, 08 Feb 2008)
New Revision: 17693

Modified:
   trunk/apps/thingamablog/src/net/sf/thingamablog/blog/TBWeblog.java
   
trunk/apps/thingamablog/src/net/sf/thingamablog/gui/properties/TBGeneralPanel.java
   
trunk/apps/thingamablog/src/net/sf/thingamablog/gui/properties/TBWizardDialog.java
   trunk/apps/thingamablog/src/net/sf/thingamablog/xml/TBPersistFactory.java
Log:
Author : dieppe
Updates : add a combobox in the creation process, to ask if the blog is a flog 
or not. Allow to put freenet key in the url field if the blog is a 
flog.



Modified: trunk/apps/thingamablog/src/net/sf/thingamablog/blog/TBWeblog.java
===================================================================
--- trunk/apps/thingamablog/src/net/sf/thingamablog/blog/TBWeblog.java  
2008-02-08 00:42:57 UTC (rev 17692)
+++ trunk/apps/thingamablog/src/net/sf/thingamablog/blog/TBWeblog.java  
2008-02-08 01:25:29 UTC (rev 17693)
@@ -114,6 +114,9 @@
        private File homeDir;
        private File tmplDir;
        private File outputDir;
+
+        // Should be internet or freenet
+        private String type;


        /**
@@ -1393,4 +1396,12 @@

         return null;
     }
+
+    public void setType(String type) {
+        this.type=type;
+    }
+    
+    public String getType() {
+        return this.type;
+    }
 }

Modified: 
trunk/apps/thingamablog/src/net/sf/thingamablog/gui/properties/TBGeneralPanel.java
===================================================================
--- 
trunk/apps/thingamablog/src/net/sf/thingamablog/gui/properties/TBGeneralPanel.java
  2008-02-08 00:42:57 UTC (rev 17692)
+++ 
trunk/apps/thingamablog/src/net/sf/thingamablog/gui/properties/TBGeneralPanel.java
  2008-02-08 01:25:29 UTC (rev 17693)
@@ -30,285 +30,277 @@
 /**
  * @author Bob Tantlinger
  *
- * 
- * 
+ *
+ *
  */
-public class TBGeneralPanel extends PropertyPanel
-{
+public class TBGeneralPanel extends PropertyPanel {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
-
+    
     private static final I18n i18n = 
I18n.getInstance("net.sf.thingamablog.gui.properties");

     private TBWeblog weblog;
-       
-       private JTextField titleField;
-       private JTextArea descrArea;
-       private JTextField basePathField;
-       private JTextField urlField;
-       private JTextField arcUrlField;
-       private JTextField mediaUrlField;
-       
-       private JComboBox localeCombo;
-       private JComboBox dateFormatCombo;
-       private JComboBox timeFormatCombo;
-       
-       private static Locale LOCS[] = DateFormat.getAvailableLocales();
-
-       private String[] getDateFormats(Locale locale) {
-               String s = i18n.str("DateFormatOptions",locale);
-               return tokenize(s);
-       }
-       private String[] getTimeFormats(Locale locale) {
-               String s = i18n.str("TimeFormatOptions",locale);
-               return tokenize(s);
-       }
-       private String[] tokenize(String s) {
-               StringTokenizer st = new StringTokenizer(s,"|");
-               String[] formats = new String[st.countTokens()];
-               for (int i = 0; i < formats.length; i++) {
-                       formats[i] = st.nextToken();
-               }
-               return formats;
-       }
-       /*
-       private static final String DATE_FORMATS[] =
-       {
-               "EEEE, MMMM dd, yyyy", //$NON-NLS-1$
-               "EEE, MMM dd, yyyy", //$NON-NLS-1$
-               "EEEE, dd MMMM, yyyy", //$NON-NLS-1$
-               "EEEE dd MMMM yyyy", //$NON-NLS-1$
-               "EEEE",
-               "MMMM dd, yyyy", //$NON-NLS-1$
-               "MMMM dd yyyy", //$NON-NLS-1$           
-       
-               "MM/dd/yyyy",                    //$NON-NLS-1$
-               "MM/dd/yy", //$NON-NLS-1$
-               "dd/MM/yyyy", //$NON-NLS-1$
-               "dd/MM/yy", //$NON-NLS-1$
-       
-               "dd MMMM yyyy", //$NON-NLS-1$
-               "dd MMMM", //$NON-NLS-1$
-               
-               "yyyy-MM-dd", //$NON-NLS-1$
-               "yy-MM-dd", //$NON-NLS-1$
-               "yy.MM.dd", //$NON-NLS-1$
-               "yyyy.MM.dd", //$NON-NLS-1$
-               "EEEE, MM/dd/yyyy", //$NON-NLS-1$
-               "EEE, MM/dd/yyyy" //$NON-NLS-1$
-       };

-       private static final SimpleDateFormat GMT_TIME_FORMAT = 
-               new SimpleDateFormat("k:mm.ss z"); //$NON-NLS-1$
-       private static final String TIME_FORMATS[] =
-       {
-               "h:mm a", //$NON-NLS-1$
-               "h:mm.ss a", //$NON-NLS-1$
-               "h:mm a z", //$NON-NLS-1$
-               "h:mm.ss a z", //$NON-NLS-1$
-               "h:mm a zzzz", //$NON-NLS-1$
-               "h:mm.ss a zzzz", //$NON-NLS-1$
-               "k:mm", //$NON-NLS-1$
-               "k:mm.ss", //$NON-NLS-1$
-               //GMT_TIME_FORMAT       
-       };      
-    */
-       
-    public TBGeneralPanel(TBWeblog blog)
-    {
-       weblog = blog;
-       
-       TextEditPopupManager popupMan = TextEditPopupManager.getInstance();
-               titleField = new JTextField();
-               titleField.setText(weblog.getTitle());
-               popupMan.registerJTextComponent(titleField);
-               
-               descrArea = new JTextArea(3, 2);
-               //descrArea.setMinimumSize(descrArea.getPreferredSize());       
        
-               descrArea.setLineWrap(true);
-               descrArea.setWrapStyleWord(true);
-               descrArea.setText(weblog.getDescription());
-               popupMan.registerJTextComponent(descrArea);
-
-               
-               //DateFormat.getAvailableLocales()
-               localeCombo = new JComboBox(LOCS);
-               //localeCombo = new JComboBox();
-               localeCombo.setSelectedItem(weblog.getLocale());
-               localeCombo.setRenderer(new ComboRenderer());
-               localeCombo.addActionListener(new ActionListener()
-               {
-                       public void actionPerformed(ActionEvent e)
-                       {
-                               String[] dateFormats = 
getDateFormats((Locale)localeCombo.getSelectedItem());
-                               replaceComboItem(dateFormatCombo,dateFormats);
-                               String[] timeFormats = 
getTimeFormats((Locale)localeCombo.getSelectedItem());
-                               replaceComboItem(timeFormatCombo,timeFormats);  
                                                        
-                       }
-               });
-               
-               dateFormatCombo = new 
JComboBox(getDateFormats(weblog.getLocale()));
-               
dateFormatCombo.setSelectedItem(weblog.getPageGenerator().getDateFormat());
-               dateFormatCombo.setRenderer(new ComboRenderer());
-               
-               timeFormatCombo = new 
JComboBox(getTimeFormats(weblog.getLocale()));
-               
timeFormatCombo.setSelectedItem(weblog.getPageGenerator().getTimeFormat());
-               timeFormatCombo.setRenderer(new ComboRenderer());
-               
-               basePathField = new JTextField();
-               basePathField.setText(weblog.getBasePath());
-               popupMan.registerJTextComponent(basePathField);
-               
-               urlField = new JTextField();
-               urlField.setText(weblog.getBaseUrl());
-               popupMan.registerJTextComponent(urlField);
-               
-               arcUrlField = new JTextField();
-               arcUrlField.setText(weblog.getArchiveUrl());
-               popupMan.registerJTextComponent(arcUrlField);
-               
-               mediaUrlField = new JTextField();
-               mediaUrlField.setText(weblog.getMediaUrl());
-               popupMan.registerJTextComponent(mediaUrlField);
-               
-               setLayout(new BorderLayout(5, 5));
-               setBorder(new EmptyBorder(5, 5, 5, 5));
-               LabelledItemPanel lip1 = new LabelledItemPanel();
-               lip1.setBorder(new TitledBorder(i18n.str("weblog"))); 
//$NON-NLS-1$
-               lip1.addItem(i18n.str("site_title"), titleField); //$NON-NLS-1$
-               //JPanel descPanel = new JPanel(new BorderLayout());
-               //descPanel.add(new JScrollPane(descrArea), 
BorderLayout.CENTER);
-               //lip1.addItem("Description", descPanel);
-               lip1.addItem(i18n.str("description"), new 
JScrollPane(descrArea)); //$NON-NLS-1$
-               lip1.addItem(i18n.str("language"), localeCombo); //$NON-NLS-1$
-               lip1.addItem(i18n.str("date_format"), dateFormatCombo); 
//$NON-NLS-1$
-               lip1.addItem(i18n.str("time_format"), timeFormatCombo); 
//$NON-NLS-1$
-               
-               LabelledItemPanel lip2 = new LabelledItemPanel();
-               lip2.setBorder(new TitledBorder(i18n.str("location"))); 
//$NON-NLS-1$
-               lip2.addItem(i18n.str("base_path"), basePathField); 
//$NON-NLS-1$
-               lip2.addItem(i18n.str("base_url"), urlField); //$NON-NLS-1$
-               lip2.addItem(i18n.str("archive_url"), arcUrlField); 
//$NON-NLS-1$
-               lip2.addItem(i18n.str("media_url"), mediaUrlField); 
//$NON-NLS-1$
-               
-               add(lip1, BorderLayout.CENTER);
-               add(lip2, BorderLayout.SOUTH);
-                                               
+    private JTextField titleField;
+    private JTextArea descrArea;
+    private JTextField basePathField;
+    private JTextField urlField;
+    private JTextField arcUrlField;
+    private JTextField mediaUrlField;
+    
+    private JComboBox localeCombo;
+    private JComboBox dateFormatCombo;
+    private JComboBox timeFormatCombo;
+    private JComboBox typeCombo;
+    
+    private static Locale LOCS[] = DateFormat.getAvailableLocales();
+    private static String TYPE[] = {"internet","freenet"};
+    
+    private String[] getDateFormats(Locale locale) {
+        String s = i18n.str("DateFormatOptions",locale);
+        return tokenize(s);
     }
+    private String[] getTimeFormats(Locale locale) {
+        String s = i18n.str("TimeFormatOptions",locale);
+        return tokenize(s);
+    }
+    private String[] tokenize(String s) {
+        StringTokenizer st = new StringTokenizer(s,"|");
+        String[] formats = new String[st.countTokens()];
+        for (int i = 0; i < formats.length; i++) {
+            formats[i] = st.nextToken();
+        }
+        return formats;
+    }
+        /*
+        private static final String DATE_FORMATS[] =
+        {
+                "EEEE, MMMM dd, yyyy", //$NON-NLS-1$
+                "EEE, MMM dd, yyyy", //$NON-NLS-1$
+                "EEEE, dd MMMM, yyyy", //$NON-NLS-1$
+                "EEEE dd MMMM yyyy", //$NON-NLS-1$
+                "EEEE",
+                "MMMM dd, yyyy", //$NON-NLS-1$
+                "MMMM dd yyyy", //$NON-NLS-1$
+         
+                "MM/dd/yyyy",                   //$NON-NLS-1$
+                "MM/dd/yy", //$NON-NLS-1$
+                "dd/MM/yyyy", //$NON-NLS-1$
+                "dd/MM/yy", //$NON-NLS-1$
+         
+                "dd MMMM yyyy", //$NON-NLS-1$
+                "dd MMMM", //$NON-NLS-1$
+         
+                "yyyy-MM-dd", //$NON-NLS-1$
+                "yy-MM-dd", //$NON-NLS-1$
+                "yy.MM.dd", //$NON-NLS-1$
+                "yyyy.MM.dd", //$NON-NLS-1$
+                "EEEE, MM/dd/yyyy", //$NON-NLS-1$
+                "EEE, MM/dd/yyyy" //$NON-NLS-1$
+        };
+         
+        private static final SimpleDateFormat GMT_TIME_FORMAT =
+                new SimpleDateFormat("k:mm.ss z"); //$NON-NLS-1$
+        private static final String TIME_FORMATS[] =
+        {
+                "h:mm a", //$NON-NLS-1$
+                "h:mm.ss a", //$NON-NLS-1$
+                "h:mm a z", //$NON-NLS-1$
+                "h:mm.ss a z", //$NON-NLS-1$
+                "h:mm a zzzz", //$NON-NLS-1$
+                "h:mm.ss a zzzz", //$NON-NLS-1$
+                "k:mm", //$NON-NLS-1$
+                "k:mm.ss", //$NON-NLS-1$
+                //GMT_TIME_FORMAT
+        };
+         */
+    
+    public TBGeneralPanel(TBWeblog blog) {
+        weblog = blog;
+        
+        TextEditPopupManager popupMan = TextEditPopupManager.getInstance();
+        titleField = new JTextField();
+        titleField.setText(weblog.getTitle());
+        popupMan.registerJTextComponent(titleField);
+        
+        descrArea = new JTextArea(3, 2);
+        //descrArea.setMinimumSize(descrArea.getPreferredSize());
+        descrArea.setLineWrap(true);
+        descrArea.setWrapStyleWord(true);
+        descrArea.setText(weblog.getDescription());
+        popupMan.registerJTextComponent(descrArea);
+        
+        
+        //DateFormat.getAvailableLocales()
+        localeCombo = new JComboBox(LOCS);
+        //localeCombo = new JComboBox();
+        localeCombo.setSelectedItem(weblog.getLocale());
+        localeCombo.setRenderer(new ComboRenderer());
+        localeCombo.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                String[] dateFormats = 
getDateFormats((Locale)localeCombo.getSelectedItem());
+                replaceComboItem(dateFormatCombo,dateFormats);
+                String[] timeFormats = 
getTimeFormats((Locale)localeCombo.getSelectedItem());
+                replaceComboItem(timeFormatCombo,timeFormats);
+            }
+        });
+        
+        dateFormatCombo = new JComboBox(getDateFormats(weblog.getLocale()));
+        
dateFormatCombo.setSelectedItem(weblog.getPageGenerator().getDateFormat());
+        dateFormatCombo.setRenderer(new ComboRenderer());
+        
+        timeFormatCombo = new JComboBox(getTimeFormats(weblog.getLocale()));
+        
timeFormatCombo.setSelectedItem(weblog.getPageGenerator().getTimeFormat());
+        timeFormatCombo.setRenderer(new ComboRenderer());
+        
+        typeCombo = new JComboBox(TYPE);
+        typeCombo.setSelectedItem(weblog.getType());
+        
+        basePathField = new JTextField();
+        basePathField.setText(weblog.getBasePath());
+        popupMan.registerJTextComponent(basePathField);
+        
+        urlField = new JTextField();
+        urlField.setText(weblog.getBaseUrl());
+        popupMan.registerJTextComponent(urlField);
+        
+        arcUrlField = new JTextField();
+        arcUrlField.setText(weblog.getArchiveUrl());
+        popupMan.registerJTextComponent(arcUrlField);
+        
+        mediaUrlField = new JTextField();
+        mediaUrlField.setText(weblog.getMediaUrl());
+        popupMan.registerJTextComponent(mediaUrlField);
+        
+        setLayout(new BorderLayout(5, 5));
+        setBorder(new EmptyBorder(5, 5, 5, 5));
+        LabelledItemPanel lip1 = new LabelledItemPanel();
+        lip1.setBorder(new TitledBorder(i18n.str("weblog"))); //$NON-NLS-1$
+        lip1.addItem(i18n.str("site_title"), titleField); //$NON-NLS-1$
+        //JPanel descPanel = new JPanel(new BorderLayout());
+        //descPanel.add(new JScrollPane(descrArea), BorderLayout.CENTER);
+        //lip1.addItem("Description", descPanel);
+        lip1.addItem(i18n.str("description"), new JScrollPane(descrArea)); 
//$NON-NLS-1$
+        lip1.addItem(i18n.str("language"), localeCombo); //$NON-NLS-1$
+        lip1.addItem(i18n.str("date_format"), dateFormatCombo); //$NON-NLS-1$
+        lip1.addItem(i18n.str("time_format"), timeFormatCombo); //$NON-NLS-1$
+        lip1.addItem(i18n.str("type"), typeCombo);
+        
+        LabelledItemPanel lip2 = new LabelledItemPanel();
+        lip2.setBorder(new TitledBorder(i18n.str("location"))); //$NON-NLS-1$
+        lip2.addItem(i18n.str("base_path"), basePathField); //$NON-NLS-1$
+        lip2.addItem(i18n.str("base_url"), urlField); //$NON-NLS-1$
+        lip2.addItem(i18n.str("archive_url"), arcUrlField); //$NON-NLS-1$
+        lip2.addItem(i18n.str("media_url"), mediaUrlField); //$NON-NLS-1$      
 
+        
+        add(lip1, BorderLayout.CENTER);
+        add(lip2, BorderLayout.SOUTH);
+        
+    }
     private void replaceComboItem(JComboBox combo, String[] items) {
-       combo.removeAllItems();
-       for (int i = 0; i < items.length; i++) {
-               combo.addItem(items[i]);
-       }
-       }
+        combo.removeAllItems();
+        for (int i = 0; i < items.length; i++) {
+            combo.addItem(items[i]);
+        }
+    }

     /* (non-Javadoc)
      * @see 
net.sf.thingamablog.gui.properties.PropertyPanel#savePropertiesToWeblog()
      */
-    public void saveProperties()
-    {
-        weblog.setPublishAll(true);        
+    public void saveProperties() {
+        weblog.setPublishAll(true);
         weblog.setBlogUrls(
-               basePathField.getText(), urlField.getText(), 
-               arcUrlField.getText(), mediaUrlField.getText());
+                basePathField.getText(), urlField.getText(),
+                arcUrlField.getText(), mediaUrlField.getText());
         weblog.setLocale((Locale)localeCombo.getSelectedItem());
         weblog.setTitle(titleField.getText());
         weblog.setDescription(descrArea.getText());
         
weblog.getPageGenerator().setDateFormat(dateFormatCombo.getSelectedItem().toString());
-               
weblog.getPageGenerator().setTimeFormat(timeFormatCombo.getSelectedItem().toString());
-                                       
+        
weblog.getPageGenerator().setTimeFormat(timeFormatCombo.getSelectedItem().toString());
+        weblog.setType(typeCombo.getSelectedItem().toString());
     }

-

-    public boolean isValidData()
-    {
-               String base = urlField.getText();
-               String arc = arcUrlField.getText();
-               String media = mediaUrlField.getText();
-               
-               if(basePathField.getText() == null || 
basePathField.getText().equals("")) //$NON-NLS-1$
-               {               
-                       JOptionPane.showMessageDialog(this,
-                               i18n.str("no_base_path_prompt"), //$NON-NLS-1$
-                               i18n.str("warning"), 
JOptionPane.WARNING_MESSAGE); //$NON-NLS-1$
-                               return false;
-               }
-               
-               if(!isValidUrl(base))
-                       return false;
-               if(!isValidUrl(arc))
-                       return false;
-               if(!isValidUrl(media))
-                       return false;   
-               
-               if(!arc.startsWith(base))
-               {
-                       JOptionPane.showMessageDialog(this,
-                               i18n.str("bad_arc_url_prompt"), //$NON-NLS-1$
-                               i18n.str("warning"), 
JOptionPane.WARNING_MESSAGE); //$NON-NLS-1$
-                       
-                       return false;   
-               }
-               
-               if(!media.startsWith(base))
-               {
-                       JOptionPane.showMessageDialog(this,
-                               i18n.str("bad_media_url_prompt"), //$NON-NLS-1$
-                               i18n.str("warning"), 
JOptionPane.WARNING_MESSAGE); //$NON-NLS-1$
-                       
-                       return false;   
-               }
-               
-               return true;
+    
+    public boolean isValidData() {
+        String base = urlField.getText();
+        String arc = arcUrlField.getText();
+        String media = mediaUrlField.getText();
+        
+        if(basePathField.getText() == null || 
basePathField.getText().equals("")) //$NON-NLS-1$
+        {
+            JOptionPane.showMessageDialog(this,
+                    i18n.str("no_base_path_prompt"), //$NON-NLS-1$
+                    i18n.str("warning"), JOptionPane.WARNING_MESSAGE); 
//$NON-NLS-1$
+            return false;
+        }
+        
+        if(typeCombo.getSelectedItem().equals("internet") && 
(!isValidUrl(base) || !isValidUrl(arc) || !isValidUrl(media)))
+            return false;
+        
+        if(typeCombo.getSelectedItem().equals("freenet") && (!isValidKey(base) 
|| !isValidKey(arc) || !isValidKey(media)))
+            return false;
+        
+        if(!arc.startsWith(base)) {
+            JOptionPane.showMessageDialog(this,
+                    i18n.str("bad_arc_url_prompt"), //$NON-NLS-1$
+                    i18n.str("warning"), JOptionPane.WARNING_MESSAGE); 
//$NON-NLS-1$
+            
+            return false;
+        }
+        
+        if(!media.startsWith(base)) {
+            JOptionPane.showMessageDialog(this,
+                    i18n.str("bad_media_url_prompt"), //$NON-NLS-1$
+                    i18n.str("warning"), JOptionPane.WARNING_MESSAGE); 
//$NON-NLS-1$
+            
+            return false;
+        }
+        
+        return true;
     }

-    private boolean isValidUrl(String u)
-    {
-       try
-       {
-               new URL(u);
-       }
-       catch(Exception ex)//malformed url
-       {
-                       JOptionPane.showMessageDialog(this,
-                               u + i18n.str("invalid_url_prompt"), 
//$NON-NLS-1$
-                               i18n.str("warning"), 
JOptionPane.WARNING_MESSAGE); //$NON-NLS-1$
-               return false;
-       }
-       return true;            
+    private boolean isValidUrl(String u) {
+        try {
+            new URL(u);
+        } catch(Exception ex)//malformed url
+        {
+            JOptionPane.showMessageDialog(this,
+                    u + i18n.str("invalid_url_prompt"), //$NON-NLS-1$
+                    i18n.str("warning"), JOptionPane.WARNING_MESSAGE); 
//$NON-NLS-1$
+            return false;
+        }
+        return true;
     }

-
+    private boolean isValidKey(String key) {
+        // TODO : Check if the key match a USK key
+        return true;
+    }

-       private class ComboRenderer extends DefaultListCellRenderer
-       {
-               /**
-         * 
+    private class ComboRenderer extends DefaultListCellRenderer {
+        /**
+         *
          */
         private static final long serialVersionUID = 1L;
         private Date date = new Date();
-               
-               public Component getListCellRendererComponent(JList list,
-                       Object value, int index, boolean isSelected, boolean 
cellHasFocus)
-               {
-                       if(value instanceof Locale)
-                       {
-                               Locale loc = (Locale)value;
-                               value = loc.getDisplayName();
-                       }
-                       else 
-                       {
-                               Locale loc = 
(Locale)localeCombo.getSelectedItem();
-                               SimpleDateFormat df = new 
SimpleDateFormat(value.toString(),loc);
-                               value = df.format(date);                        
        
-                       }
-                       
-                       return super.getListCellRendererComponent(
-                               list, value, index, isSelected, cellHasFocus);
-               }
-       }
-
+        
+        public Component getListCellRendererComponent(JList list,
+                Object value, int index, boolean isSelected, boolean 
cellHasFocus) {
+            if(value instanceof Locale) {
+                Locale loc = (Locale)value;
+                value = loc.getDisplayName();
+            } else {
+                Locale loc = (Locale)localeCombo.getSelectedItem();
+                SimpleDateFormat df = new 
SimpleDateFormat(value.toString(),loc);
+                value = df.format(date);
+            }
+            
+            return super.getListCellRendererComponent(
+                    list, value, index, isSelected, cellHasFocus);
+        }
+    }
+    
 }

Modified: 
trunk/apps/thingamablog/src/net/sf/thingamablog/gui/properties/TBWizardDialog.java
===================================================================
--- 
trunk/apps/thingamablog/src/net/sf/thingamablog/gui/properties/TBWizardDialog.java
  2008-02-08 00:42:57 UTC (rev 17692)
+++ 
trunk/apps/thingamablog/src/net/sf/thingamablog/gui/properties/TBWizardDialog.java
  2008-02-08 01:25:29 UTC (rev 17693)
@@ -19,6 +19,7 @@

 import javax.swing.BorderFactory;
 import javax.swing.JButton;
+import javax.swing.JComboBox;
 import javax.swing.JDialog;
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
@@ -51,216 +52,200 @@
 /**
  * @author Bob Tantlinger
  *
- * 
- * 
+ *
+ *
  */
-public class TBWizardDialog extends JDialog
-{
+public class TBWizardDialog extends JDialog {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
-
+    
     private static final I18n i18n = 
I18n.getInstance("net.sf.thingamablog.gui.properties"); //$NON-NLS-1$

     private static final String CANCEL = i18n.str("cancel"); //$NON-NLS-1$
-       private static final String FINISH = i18n.str("finish");         
//$NON-NLS-1$
-       
-       private CardLayout wizLayout;
-       private JPanel wizPanel;
-       
-       private PropertyPanel starterPanel;
-       private TitleDescrPanel titlePanel;
-       private CategoriesPanel catPanel;
-       private AuthorsPanel authPanel;
+    private static final String FINISH = i18n.str("finish");    //$NON-NLS-1$
+    
+    private CardLayout wizLayout;
+    private JPanel wizPanel;
+    
+    private PropertyPanel starterPanel;
+    private TitleDescrPanel titlePanel;
+    private CategoriesPanel catPanel;
+    private AuthorsPanel authPanel;
     private PropertyPanel emailPanel;
-       private PropertyPanel templPanel;
-       private PropertyPanel transportPanel;
-       private PropertyPanel donePanel;
-       private Vector panels = new Vector();   
-               
-       private JButton nextButton, backButton, doneButton;
-       
-       private boolean isCancelled;
-       
-       private TBWeblog weblog;
+    private PropertyPanel templPanel;
+    private PropertyPanel transportPanel;
+    private PropertyPanel donePanel;
+    private Vector panels = new Vector();

-       private TextEditPopupManager popupManager = 
TextEditPopupManager.getInstance();
+    private JButton nextButton, backButton, doneButton;

+    private boolean isCancelled;
+    
+    private TBWeblog weblog;
+    
+    private TextEditPopupManager popupManager = 
TextEditPopupManager.getInstance();
+    
     private TemplatePack selectedPack;
-       
-       public TBWizardDialog(Frame f, File dir, WeblogBackend backend)
-       {
-               super(f, true);
-               setTitle(i18n.str("new_weblog")); //$NON-NLS-1$
-               
-               WindowAdapter windowAdapter = new WindowAdapter()
-               {
-                       public void windowClosing(WindowEvent windowEvent)
-                       {
-                               cancelDialog();
-                       }
-               };
-               addWindowListener(windowAdapter);
-               
-               weblog = new TBWeblog(dir);
-               weblog.setBackend(backend);
-               weblog.setPublishTransport(new 
net.sf.thingamablog.transport.FTPTransport());
-               //weblog.setAuthorStore(authStore);
-               //weblog.setCategoryStore(catStore);
-               
-               wizLayout = new CardLayout();
-               wizPanel = new JPanel(wizLayout);
-               
-               starterPanel = new StarterPanel();
-               starterPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
-               panels.add(starterPanel);
-               
-               titlePanel = new TitleDescrPanel();
-               titlePanel.setBorder(new EmptyBorder(10, 10, 10, 10));
-               panels.add(titlePanel);
-               
-               catPanel = new CategoriesPanel();
-               catPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
-               panels.add(catPanel);
-               
-               authPanel = new AuthorsPanel();
-               authPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
-               panels.add(authPanel);
+    
+    public TBWizardDialog(Frame f, File dir, WeblogBackend backend) {
+        super(f, true);
+        setTitle(i18n.str("new_weblog")); //$NON-NLS-1$

+        WindowAdapter windowAdapter = new WindowAdapter() {
+            public void windowClosing(WindowEvent windowEvent) {
+                cancelDialog();
+            }
+        };
+        addWindowListener(windowAdapter);
+        
+        weblog = new TBWeblog(dir);
+        weblog.setBackend(backend);
+        weblog.setPublishTransport(new 
net.sf.thingamablog.transport.FTPTransport());
+        //weblog.setAuthorStore(authStore);
+        //weblog.setCategoryStore(catStore);
+        
+        wizLayout = new CardLayout();
+        wizPanel = new JPanel(wizLayout);
+        
+        starterPanel = new StarterPanel();
+        starterPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
+        panels.add(starterPanel);
+        
+        titlePanel = new TitleDescrPanel();
+        titlePanel.setBorder(new EmptyBorder(10, 10, 10, 10));
+        panels.add(titlePanel);
+        
+        catPanel = new CategoriesPanel();
+        catPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
+        panels.add(catPanel);
+        
+        authPanel = new AuthorsPanel();
+        authPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
+        panels.add(authPanel);
+        
         emailPanel = new EmailPanel();
         emailPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
         panels.add(emailPanel);
-               
-               templPanel = new TemplatePanel();
-               templPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
-               panels.add(templPanel);
-               
-               transportPanel = new TransportPanel();
-               transportPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
-               panels.add(transportPanel);
-               
-               donePanel = new DonePanel();
-               donePanel.setBorder(new EmptyBorder(10, 10, 10, 10));
-               panels.add(donePanel);
-               
-               wizPanel.add(starterPanel, "1"); //$NON-NLS-1$
-               wizPanel.add(titlePanel, "2"); //$NON-NLS-1$
-               wizPanel.add(catPanel, "3"); //$NON-NLS-1$
-               wizPanel.add(authPanel, "4"); //$NON-NLS-1$
+        
+        templPanel = new TemplatePanel();
+        templPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
+        panels.add(templPanel);
+        
+        transportPanel = new TransportPanel();
+        transportPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
+        panels.add(transportPanel);
+        
+        donePanel = new DonePanel();
+        donePanel.setBorder(new EmptyBorder(10, 10, 10, 10));
+        panels.add(donePanel);
+        
+        wizPanel.add(starterPanel, "1"); //$NON-NLS-1$
+        wizPanel.add(titlePanel, "2"); //$NON-NLS-1$
+        wizPanel.add(catPanel, "3"); //$NON-NLS-1$
+        wizPanel.add(authPanel, "4"); //$NON-NLS-1$
         wizPanel.add(emailPanel, "5"); //$NON-NLS-1$
-               wizPanel.add(templPanel, "6"); //$NON-NLS-1$
-               wizPanel.add(transportPanel, "7"); //$NON-NLS-1$
-               wizPanel.add(donePanel, "8");    //$NON-NLS-1$
-               
-               ActionListener listener = new ButtonHandler();
-               nextButton = new JButton(i18n.str("next-")); //$NON-NLS-1$
-               nextButton.addActionListener(listener);
-               backButton = new JButton(i18n.str("-back")); //$NON-NLS-1$
-               backButton.setEnabled(false);
-               backButton.addActionListener(listener);
-               doneButton = new JButton(CANCEL);
-               doneButton.addActionListener(listener);
-               
-               JPanel controlPanel = new JPanel(new 
FlowLayout(FlowLayout.RIGHT));
-               controlPanel.setBorder(new EtchedBorder());
-               JPanel buttonPanel = new JPanel(new GridLayout(1, 3, 5, 5));    
        
-               buttonPanel.add(backButton);
-               buttonPanel.add(nextButton);
-               buttonPanel.add(doneButton);
-               controlPanel.add(buttonPanel);
-               
-               JLabel img = new JLabel();
-               img.setVerticalAlignment(SwingConstants.TOP);
-               img.setOpaque(true);
-               img.setBackground(Color.WHITE);
-               img.setIcon(UIUtils.getIcon(UIUtils.MISC, "wizard.jpg")); 
//$NON-NLS-1$
-               
-               getContentPane().add(wizPanel, BorderLayout.CENTER);
-               getContentPane().add(controlPanel, BorderLayout.SOUTH);
-               getContentPane().add(img, BorderLayout.WEST);
-               
-               pack();
+        wizPanel.add(templPanel, "6"); //$NON-NLS-1$
+        wizPanel.add(transportPanel, "7"); //$NON-NLS-1$
+        wizPanel.add(donePanel, "8");   //$NON-NLS-1$
+        
+        ActionListener listener = new ButtonHandler();
+        nextButton = new JButton(i18n.str("next-")); //$NON-NLS-1$
+        nextButton.addActionListener(listener);
+        backButton = new JButton(i18n.str("-back")); //$NON-NLS-1$
+        backButton.setEnabled(false);
+        backButton.addActionListener(listener);
+        doneButton = new JButton(CANCEL);
+        doneButton.addActionListener(listener);
+        
+        JPanel controlPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
+        controlPanel.setBorder(new EtchedBorder());
+        JPanel buttonPanel = new JPanel(new GridLayout(1, 3, 5, 5));
+        buttonPanel.add(backButton);
+        buttonPanel.add(nextButton);
+        buttonPanel.add(doneButton);
+        controlPanel.add(buttonPanel);
+        
+        JLabel img = new JLabel();
+        img.setVerticalAlignment(SwingConstants.TOP);
+        img.setOpaque(true);
+        img.setBackground(Color.WHITE);
+        img.setIcon(UIUtils.getIcon(UIUtils.MISC, "wizard.jpg")); //$NON-NLS-1$
+        
+        getContentPane().add(wizPanel, BorderLayout.CENTER);
+        getContentPane().add(controlPanel, BorderLayout.SOUTH);
+        getContentPane().add(img, BorderLayout.WEST);
+        
+        pack();
         setSize(560, getHeight());
-               setResizable(false);
-       }
-       
-       public TBWeblog getWeblog()
-       {
-               return weblog;
-       }
-       
-       public boolean hasUserCancelled()
-       {
-               return isCancelled;
-       }
-       
-       private void doFinish()
-       {               
-               /*for(int i = 0; i < panels.size(); i++)
-               {
-                       PropertyPanel p = (PropertyPanel)panels.elementAt(i);
-                       p.saveProperties();
-               }*/
+        setResizable(false);
+    }
+    
+    public TBWeblog getWeblog() {
+        return weblog;
+    }
+    
+    public boolean hasUserCancelled() {
+        return isCancelled;
+    }
+    
+    private void doFinish() {
+                /*for(int i = 0; i < panels.size(); i++)
+                {
+                        PropertyPanel p = (PropertyPanel)panels.elementAt(i);
+                        p.saveProperties();
+                }*/

-        try
-        {
+        try {
             selectedPack.installPack(weblog.getHomeDirectory());
-        }
-        catch(Exception ex)
-        {
+        } catch(Exception ex) {
             UIUtils.showError(this, ex);
         }
-               
-               //add a couple ping services
-               WeblogsDotComPing ping = new WeblogsDotComPing();

+        //add a couple ping services
+        WeblogsDotComPing ping = new WeblogsDotComPing();
+        
         //removed because the TAMB ping server has been shutdown...
-               /*ping.setServiceName("Updated Thingamablogs");
-               
ping.setServiceUrl("http://thingamablog.sourceforge.net/rpc.php";);
-               ping.setEnabled(true);          
-               weblog.addPingService(ping);*/
-               
-               ping = new WeblogsDotComPing();
-               ping.setServiceName("weblogs.com"); //$NON-NLS-1$
-               ping.setServiceUrl("http://rpc.weblogs.com/RPC2";); //$NON-NLS-1$
-               ping.setEnabled(false);
-               weblog.addPingService(ping);    
-               
-               dispose();
-       }
-       
-       private void cancelDialog()
-       {
-               isCancelled = true;
-               try{
-                       weblog.deleteAll();
-               }catch(BackendException ex){}
-               dispose();              
-       }
+                /*ping.setServiceName("Updated Thingamablogs");
+                
ping.setServiceUrl("http://thingamablog.sourceforge.net/rpc.php";);
+                ping.setEnabled(true);
+                weblog.addPingService(ping);*/
+        
+        ping = new WeblogsDotComPing();
+        ping.setServiceName("weblogs.com"); //$NON-NLS-1$
+        ping.setServiceUrl("http://rpc.weblogs.com/RPC2";); //$NON-NLS-1$
+        ping.setEnabled(false);
+        weblog.addPingService(ping);
+        
+        dispose();
+    }

-    public void dispose()
-    {       
-        WeblogPreviewer.getInstance().clearPreviewData();        
+    private void cancelDialog() {
+        isCancelled = true;
+        try{
+            weblog.deleteAll();
+        }catch(BackendException ex){}
+        dispose();
+    }
+    
+    public void dispose() {
+        WeblogPreviewer.getInstance().clearPreviewData();
         super.dispose();
     }

-
-       private JLabel createHeaderLabel(String text)
-       {
-               JLabel label = new JLabel("<html><h2>" + text + 
"</h2></html>"); //$NON-NLS-1$ //$NON-NLS-2$
-               return label;
-       }

-       
+    private JLabel createHeaderLabel(String text) {
+        JLabel label = new JLabel("<html><h2>" + text + "</h2></html>"); 
//$NON-NLS-1$ //$NON-NLS-2$
+        return label;
+    }

-    private PropertyPanel getCurrentPanel()
-    {
-        for(int i = 0; i < panels.size(); i++)
-        {
+    
+    
+    private PropertyPanel getCurrentPanel() {
+        for(int i = 0; i < panels.size(); i++) {
             PropertyPanel p = (PropertyPanel)panels.elementAt(i);
-            if(p.isVisible())
-            {
+            if(p.isVisible()) {
                 //return p.isValidData();
                 return p;
             }
@@ -268,244 +253,224 @@

         return null;
     }
-       
-       private class ButtonHandler implements ActionListener
-       {
-               public void actionPerformed(ActionEvent e)
-               {
-                       if(e.getSource() == nextButton)
-                       {
-                               if(!donePanel.isVisible())
-                               {                               
-                                       //if(isCurrentPanelValid())
+    
+    private class ButtonHandler implements ActionListener {
+        public void actionPerformed(ActionEvent e) {
+            if(e.getSource() == nextButton) {
+                if(!donePanel.isVisible()) {
+                    //if(isCurrentPanelValid())
                     PropertyPanel p = getCurrentPanel();
-                    if(p != null && p.isValidData())
-                    {
-                                               p.saveProperties();
+                    if(p != null && p.isValidData()) {
+                        p.saveProperties();
                         wizLayout.next(wizPanel);

                     }
-                               }
-                                                                               
                                
-                               if(donePanel.isVisible())
-                               {
-                                       doneButton.setText(FINISH);
-                                       nextButton.setEnabled(false);
-                               }
-                               backButton.setEnabled(true);
-                       }
-                       else if(e.getSource() == backButton)
-                       {
-                               if(!starterPanel.isVisible())
-                                       wizLayout.previous(wizPanel);           
                
-                               if(starterPanel.isVisible())
-                                       backButton.setEnabled(false);           
                
-                               if(doneButton.getText().equals(FINISH))
-                                       doneButton.setText(CANCEL);
-                               nextButton.setEnabled(true);
-                       }
-                       else if(e.getSource() == doneButton)
-                       {
-                               //the new Weblog was canceled, so delete the 
-                               //directory structure that was created when
-                               //the Weblog was instantiated
-                               if(doneButton.getText().equals(FINISH))
-                               {
-                                       doFinish();                             
-                               }
-                               else
-                               {
-                                       cancelDialog(); 
-                               }                                               
                
-                       }
-               }
-       }
-       
-
-
-       
-       private class StarterPanel extends PropertyPanel
-       {
-               /**
-         * 
+                }
+                
+                if(donePanel.isVisible()) {
+                    doneButton.setText(FINISH);
+                    nextButton.setEnabled(false);
+                }
+                backButton.setEnabled(true);
+            } else if(e.getSource() == backButton) {
+                if(!starterPanel.isVisible())
+                    wizLayout.previous(wizPanel);
+                if(starterPanel.isVisible())
+                    backButton.setEnabled(false);
+                if(doneButton.getText().equals(FINISH))
+                    doneButton.setText(CANCEL);
+                nextButton.setEnabled(true);
+            } else if(e.getSource() == doneButton) {
+                //the new Weblog was canceled, so delete the
+                //directory structure that was created when
+                //the Weblog was instantiated
+                if(doneButton.getText().equals(FINISH)) {
+                    doFinish();
+                } else {
+                    cancelDialog();
+                }
+            }
+        }
+    }
+    
+    
+    
+    
+    private class StarterPanel extends PropertyPanel {
+        /**
+         *
          */
         private static final long serialVersionUID = 1L;
         private JTextField pathField = new JTextField(20);
-               private JTextField urlField = new JTextField(20);
-               
-               public StarterPanel()
-               {                       
-                       JLabel header = 
createHeaderLabel(i18n.str("weblog_wizard"));                    //$NON-NLS-1$
-                       String text =
-                       i18n.str("welcome_panel_text"); //$NON-NLS-1$
-                       
-                       
-                       LabelledItemPanel lip = new LabelledItemPanel();
-                       lip.addItem(i18n.str("base_path"), pathField); 
//$NON-NLS-1$
-                       lip.addItem(i18n.str("base_url"), urlField); 
//$NON-NLS-1$
-                       
-                       popupManager.registerJTextComponent(pathField);
-                       popupManager.registerJTextComponent(urlField);
-                       
-                       setLayout(new BorderLayout());  
-                       add(header, BorderLayout.NORTH);
-                       add(new MultilineText(text), BorderLayout.CENTER);
-                       add(lip, BorderLayout.SOUTH);                   
-               }
-               
-               public boolean isValidData()
-               {
+        private JTextField urlField = new JTextField(20);
+        private String TYPE[] = {"internet","freenet"};
+        private JComboBox typeCombo = new JComboBox(TYPE);
+        
+        public StarterPanel() {
+            JLabel header = createHeaderLabel(i18n.str("weblog_wizard"));      
                 //$NON-NLS-1$
+            String text =
+                    i18n.str("welcome_panel_text"); //$NON-NLS-1$
+            
+            
+            LabelledItemPanel lip = new LabelledItemPanel();
+            lip.addItem(i18n.str("base_path"), pathField); //$NON-NLS-1$
+            lip.addItem(i18n.str("base_url"), urlField); //$NON-NLS-1$
+            lip.addItem(i18n.str("type"), typeCombo);
+            
+            popupManager.registerJTextComponent(pathField);
+            popupManager.registerJTextComponent(urlField);
+            
+            setLayout(new BorderLayout());
+            add(header, BorderLayout.NORTH);
+            add(new MultilineText(text), BorderLayout.CENTER);
+            add(lip, BorderLayout.SOUTH);
+        }
+        
+        public boolean isValidData() {
             if(pathField.getText().equals("")) //$NON-NLS-1$
             {
                 JOptionPane.showMessageDialog(TBWizardDialog.this,
-                    i18n.str("invalid_path_prompt"), i18n.str("invalid_path"), 
 //$NON-NLS-1$ //$NON-NLS-2$
-                    JOptionPane.WARNING_MESSAGE);
+                        i18n.str("invalid_path_prompt"), 
i18n.str("invalid_path"),  //$NON-NLS-1$ //$NON-NLS-2$
+                        JOptionPane.WARNING_MESSAGE);
                 return false;
             }

             if(urlField.getText().equals("")) //$NON-NLS-1$
             {
                 JOptionPane.showMessageDialog(TBWizardDialog.this,
-                    i18n.str("invalid_url_prompt"), i18n.str("invalid_url"),  
//$NON-NLS-1$ //$NON-NLS-2$
-                    JOptionPane.WARNING_MESSAGE);
+                        i18n.str("invalid_url_prompt"), 
i18n.str("invalid_url"),  //$NON-NLS-1$ //$NON-NLS-2$
+                        JOptionPane.WARNING_MESSAGE);
                 return false;
             }

-            try
-                       {
-                               new URL(urlField.getText());                    
        
-                       }
-                       catch(MalformedURLException ex) //invalid url
-                       {
-                               urlField.setText("http://"; + 
urlField.getText()); //$NON-NLS-1$
-                       }                       
-                       
-                       return true;
-               }
+            if(typeCombo.getSelectedItem().toString().equals("internet")) {
+                try {
+                    new URL(urlField.getText());
+                } catch(MalformedURLException ex) //invalid url
+                {
+                    urlField.setText("http://"; + urlField.getText()); 
//$NON-NLS-1$
+                }
+            } else {
+                return isValidKey(urlField.getText());
+            }
+            
+            return true;
+        }

-                       
-               public void saveProperties()
-               {
-                       String path = pathField.getText();
-                       String url = urlField.getText();
-                       if(!url.endsWith("/")) //$NON-NLS-1$
-                               url += "/";; //$NON-NLS-1$
-                       String arcUrl = url + "archives"; //$NON-NLS-1$
-                       String mediaUrl = url + "media"; //$NON-NLS-1$
-                       
-                       weblog.setBlogUrls(path, url, arcUrl, mediaUrl);        
                                        
-               }
-       }
-       
-       private class TitleDescrPanel extends PropertyPanel
-       {
-               /**
-         * 
+        public Boolean isValidKey(String key){
+            // TODO : Check if the key match a USK key
+            return true;
+        }
+        
+        public void saveProperties() {
+            String path = pathField.getText();
+            String url = urlField.getText();
+            if(!url.endsWith("/")) //$NON-NLS-1$
+                url += "/";; //$NON-NLS-1$
+                
+                String arcUrl = url + "archives"; //$NON-NLS-1$
+                String mediaUrl = url + "media"; //$NON-NLS-1$
+                
+                weblog.setBlogUrls(path, url, arcUrl, mediaUrl);
+                weblog.setType(typeCombo.getSelectedItem().toString());
+        }
+    }
+    
+    private class TitleDescrPanel extends PropertyPanel {
+        /**
+         *
          */
         private static final long serialVersionUID = 1L;
         private JTextField titleField = new JTextField();
-               private JTextArea textArea = new JTextArea(4, 4);
-               
-               public TitleDescrPanel()
-               {
-                       setLayout(new BorderLayout());
-                       
-                       JPanel instrPanel = new JPanel(new BorderLayout());
-                       JLabel header = 
createHeaderLabel(i18n.str("title_and_description")); //$NON-NLS-1$
-                       String text =
-                       i18n.str("title_panel_text"); //$NON-NLS-1$
-                       instrPanel.add(header, BorderLayout.NORTH);
-                       instrPanel.add(new MultilineText(text), 
BorderLayout.CENTER);
-                       
-                       popupManager.registerJTextComponent(titleField);
-                       popupManager.registerJTextComponent(textArea);
-                       
-                       LabelledItemPanel lip = new LabelledItemPanel();
-                       lip.addItem(i18n.str("site_title"), titleField); 
//$NON-NLS-1$
-                       lip.addItem(i18n.str("description"), new 
JScrollPane(textArea)); //$NON-NLS-1$
-                       
-                       add(instrPanel, BorderLayout.NORTH);
-                       add(lip, BorderLayout.CENTER);                          
                
-               }
-               
-               public boolean isValidData()
-               {                       
-                       if(titleField.getText().equals("")) //$NON-NLS-1$
-                       {
-                               
JOptionPane.showMessageDialog(TBWizardDialog.this, 
-                                       i18n.str("invalid_title_prompt"), 
i18n.str("title"), JOptionPane.WARNING_MESSAGE); //$NON-NLS-1$ //$NON-NLS-2$
-                               return false;
-                       }
-                       return true;    
-               }
-               
-               public void saveProperties()
-               {
-                       weblog.setTitle(titleField.getText());
-                       weblog.setDescription(textArea.getText());
-               }       
+        private JTextArea textArea = new JTextArea(4, 4);

-        public String getTitle()
-        {
+        public TitleDescrPanel() {
+            setLayout(new BorderLayout());
+            
+            JPanel instrPanel = new JPanel(new BorderLayout());
+            JLabel header = 
createHeaderLabel(i18n.str("title_and_description")); //$NON-NLS-1$
+            String text =
+                    i18n.str("title_panel_text"); //$NON-NLS-1$
+            instrPanel.add(header, BorderLayout.NORTH);
+            instrPanel.add(new MultilineText(text), BorderLayout.CENTER);
+            
+            popupManager.registerJTextComponent(titleField);
+            popupManager.registerJTextComponent(textArea);
+            
+            LabelledItemPanel lip = new LabelledItemPanel();
+            lip.addItem(i18n.str("site_title"), titleField); //$NON-NLS-1$
+            lip.addItem(i18n.str("description"), new JScrollPane(textArea)); 
//$NON-NLS-1$
+            
+            add(instrPanel, BorderLayout.NORTH);
+            add(lip, BorderLayout.CENTER);
+        }
+        
+        public boolean isValidData() {
+            if(titleField.getText().equals("")) //$NON-NLS-1$
+            {
+                JOptionPane.showMessageDialog(TBWizardDialog.this,
+                        i18n.str("invalid_title_prompt"), i18n.str("title"), 
JOptionPane.WARNING_MESSAGE); //$NON-NLS-1$ //$NON-NLS-2$
+                return false;
+            }
+            return true;
+        }
+        
+        public void saveProperties() {
+            weblog.setTitle(titleField.getText());
+            weblog.setDescription(textArea.getText());
+        }
+        
+        public String getTitle() {
             return titleField.getText();
         }

-        public String getDescription()
-        {
+        public String getDescription() {
             return textArea.getText();
         }
-       }
-       
-       private class CategoriesPanel extends PropertyPanel
-       {
-               /**
-         * 
+    }
+    
+    private class CategoriesPanel extends PropertyPanel {
+        /**
+         *
          */
         private static final long serialVersionUID = 1L;
         private EditableList list;
-               private WeblogEditableListModel model;
-               
-               public CategoriesPanel()
-               {
-                       setLayout(new BorderLayout(5, 5));
-                       
-                       JPanel instrPanel = new JPanel(new BorderLayout());
-                       JLabel header = 
createHeaderLabel(i18n.str("categories")); //$NON-NLS-1$
-                       String text =
-                       i18n.str("categories_panel_text"); //$NON-NLS-1$
-                       instrPanel.add(header, BorderLayout.NORTH);
-                       instrPanel.add(new MultilineText(text), 
BorderLayout.CENTER);
-                       
-                       model = new 
WeblogEditableListModel(WeblogEditableListModel.CATEGORIES);
-                       list = new EditableList(model);
-                       setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 
12));
-                       
-                       add(instrPanel, BorderLayout.NORTH);
-                       add(list, BorderLayout.CENTER); 
+        private WeblogEditableListModel model;
+        
+        public CategoriesPanel() {
+            setLayout(new BorderLayout(5, 5));

+            JPanel instrPanel = new JPanel(new BorderLayout());
+            JLabel header = createHeaderLabel(i18n.str("categories")); 
//$NON-NLS-1$
+            String text =
+                    i18n.str("categories_panel_text"); //$NON-NLS-1$
+            instrPanel.add(header, BorderLayout.NORTH);
+            instrPanel.add(new MultilineText(text), BorderLayout.CENTER);

-               }
-               
-               public boolean isValidData()
-               {                       
-                       return true;
-               }
-               
-               public void saveProperties()
-               {
-                       //ListModel lm = catList.getModel();                    
-                       try
-                       {
-                               model.syncListWithWeblog(weblog);
-                       }
-                       catch(Exception ex)
-                       {
-                               ex.printStackTrace();
-                       }
-               }
+            model = new 
WeblogEditableListModel(WeblogEditableListModel.CATEGORIES);
+            list = new EditableList(model);
+            setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
+            
+            add(instrPanel, BorderLayout.NORTH);
+            add(list, BorderLayout.CENTER);
+            
+            
+        }

-        public String[] getCategories()
-        {
+        public boolean isValidData() {
+            return true;
+        }
+        
+        public void saveProperties() {
+            //ListModel lm = catList.getModel();
+            try {
+                model.syncListWithWeblog(weblog);
+            } catch(Exception ex) {
+                ex.printStackTrace();
+            }
+        }
+        
+        public String[] getCategories() {
             List data = list.getListData();
             String[] cats = new String[data.size()];
             for(int i = 0; i < cats.length; i++)
@@ -513,59 +478,50 @@
             return cats;
         }

-        public WeblogEditableListModel getModel()
-        {
+        public WeblogEditableListModel getModel() {
             return model;
         }
-       }
-       
-       private class AuthorsPanel extends PropertyPanel
-       {
-               /**
-         * 
+    }
+    
+    private class AuthorsPanel extends PropertyPanel {
+        /**
+         *
          */
         private static final long serialVersionUID = 1L;
         private EditableList list;
-               private WeblogEditableListModel model;
-               
-               public AuthorsPanel()
-               {
-                       setLayout(new BorderLayout(5, 5));
-                       
-                       JPanel instrPanel = new JPanel(new BorderLayout());
-                       JLabel header = createHeaderLabel(i18n.str("authors")); 
//$NON-NLS-1$
-                       String text =
-                       i18n.str("authors_panel_text"); //$NON-NLS-1$
-                       instrPanel.add(header, BorderLayout.NORTH);
-                       instrPanel.add(new MultilineText(text), 
BorderLayout.CENTER);
-                       
-                       model = new 
WeblogEditableListModel(WeblogEditableListModel.AUTHORS);
-                       list = new EditableList(model);
-                       setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 
12));
-                       
-                       add(instrPanel, BorderLayout.NORTH);
-                       add(list, BorderLayout.CENTER);                         
                                                
-               }
-               
-               public boolean isValidData()
-               {                       
-                       return true;
-               }
-               
-               public void saveProperties()
-               {
-                       try
-                       {
-                               model.syncListWithWeblog(weblog);
-                       }
-                       catch(Exception ex)
-                       {
-                               ex.printStackTrace();
-                       }
-               }
+        private WeblogEditableListModel model;

-        public Author[] getAuthors()
-        {
+        public AuthorsPanel() {
+            setLayout(new BorderLayout(5, 5));
+            
+            JPanel instrPanel = new JPanel(new BorderLayout());
+            JLabel header = createHeaderLabel(i18n.str("authors")); 
//$NON-NLS-1$
+            String text =
+                    i18n.str("authors_panel_text"); //$NON-NLS-1$
+            instrPanel.add(header, BorderLayout.NORTH);
+            instrPanel.add(new MultilineText(text), BorderLayout.CENTER);
+            
+            model = new 
WeblogEditableListModel(WeblogEditableListModel.AUTHORS);
+            list = new EditableList(model);
+            setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
+            
+            add(instrPanel, BorderLayout.NORTH);
+            add(list, BorderLayout.CENTER);
+        }
+        
+        public boolean isValidData() {
+            return true;
+        }
+        
+        public void saveProperties() {
+            try {
+                model.syncListWithWeblog(weblog);
+            } catch(Exception ex) {
+                ex.printStackTrace();
+            }
+        }
+        
+        public Author[] getAuthors() {
             List data = list.getListData();
             Author[] a = new Author[data.size()];
             for(int i = 0; i < a.length; i++)
@@ -573,30 +529,27 @@
             return a;
         }

-        public WeblogEditableListModel getModel()
-        {
+        public WeblogEditableListModel getModel() {
             return model;
         }
-       }
+    }

-    private class EmailPanel extends PropertyPanel
-    {
-
+    private class EmailPanel extends PropertyPanel {
+        
         /**
-         * 
+         *
          */
         private static final long serialVersionUID = 1L;
         TBEmailPanel emailPanel;

-        public EmailPanel()
-        {
+        public EmailPanel() {
             setLayout(new BorderLayout(5, 5));

             JPanel instrPanel = new JPanel(new BorderLayout());
             JLabel header = createHeaderLabel("Email"); //$NON-NLS-1$
             String text =
-            i18n.str("specify_mail_server_prompt"); //$NON-NLS-1$
-                
+                    i18n.str("specify_mail_server_prompt"); //$NON-NLS-1$
+            
             instrPanel.add(header, BorderLayout.NORTH);
             instrPanel.add(new MultilineText(text), BorderLayout.CENTER);

@@ -608,120 +561,106 @@
         /* (non-Javadoc)
          * @see net.sf.thingamablog.gui.properties.PropertyPanel#isValidData()
          */
-        public boolean isValidData()
-        {            
+        public boolean isValidData() {
             return emailPanel.isValidData();
         }
-
+        
         /* (non-Javadoc)
          * @see 
net.sf.thingamablog.gui.properties.PropertyPanel#saveProperties()
          */
-        public void saveProperties()
-        {
-            emailPanel.saveProperties();            
+        public void saveProperties() {
+            emailPanel.saveProperties();
         }

     }
-       
-       private class TransportPanel extends PropertyPanel
-       {
-               /**
-         * 
+    
+    private class TransportPanel extends PropertyPanel {
+        /**
+         *
          */
         private static final long serialVersionUID = 1L;
         TBPublishTransportPanel pubPanel;
-               
-               public TransportPanel()
-               {
-                       setLayout(new BorderLayout());
-                       
-                       JPanel instrPanel = new JPanel(new BorderLayout());
-                       JLabel header = 
createHeaderLabel(i18n.str("publishing")); //$NON-NLS-1$
-                       String text = 
-                       i18n.str("publishing_panel_text"); //$NON-NLS-1$
-                       instrPanel.add(header, BorderLayout.NORTH);
-                       instrPanel.add(new MultilineText(text), 
BorderLayout.CENTER);
-
-                       pubPanel = new TBPublishTransportPanel(weblog);
-                       add(instrPanel, BorderLayout.NORTH);
-                       add(pubPanel, BorderLayout.CENTER);                     
                                
-               }
-               
-               public boolean isValidData()
-               {                       
-                       return pubPanel.isValidData();
-               }
-               
-               public void saveProperties()
-               {
-                       pubPanel.saveProperties();
-               }               
-       }
-       
-       private class TemplatePanel extends PropertyPanel
-       {
-               /**
-         * 
+        
+        public TransportPanel() {
+            setLayout(new BorderLayout());
+            
+            JPanel instrPanel = new JPanel(new BorderLayout());
+            JLabel header = createHeaderLabel(i18n.str("publishing")); 
//$NON-NLS-1$
+            String text =
+                    i18n.str("publishing_panel_text"); //$NON-NLS-1$
+            instrPanel.add(header, BorderLayout.NORTH);
+            instrPanel.add(new MultilineText(text), BorderLayout.CENTER);
+            
+            pubPanel = new TBPublishTransportPanel(weblog);
+            add(instrPanel, BorderLayout.NORTH);
+            add(pubPanel, BorderLayout.CENTER);
+        }
+        
+        public boolean isValidData() {
+            return pubPanel.isValidData();
+        }
+        
+        public void saveProperties() {
+            pubPanel.saveProperties();
+        }
+    }
+    
+    private class TemplatePanel extends PropertyPanel {
+        /**
+         *
          */
         private static final long serialVersionUID = 1L;
-        //private JComboBox tmplCombo; 
+        //private JComboBox tmplCombo;
         //private TemplatePropertiesPanel propertyPanel;
         private TemplateSelectionPanel selPanel;
-               
-               public TemplatePanel()
-               {
-                       JPanel instrPanel = new JPanel(new BorderLayout());
-                       JLabel header = 
createHeaderLabel(i18n.str("templates")); //$NON-NLS-1$
-                       String text =
-                       i18n.str("templates_panel_text"); //$NON-NLS-1$
-                       instrPanel.add(header, BorderLayout.NORTH);
-                       instrPanel.add(new MultilineText(text), 
BorderLayout.CENTER);
-                        
-            selPanel = new TemplateSelectionPanel(weblog);                     
-                       
+        
+        public TemplatePanel() {
+            JPanel instrPanel = new JPanel(new BorderLayout());
+            JLabel header = createHeaderLabel(i18n.str("templates")); 
//$NON-NLS-1$
+            String text =
+                    i18n.str("templates_panel_text"); //$NON-NLS-1$
+            instrPanel.add(header, BorderLayout.NORTH);
+            instrPanel.add(new MultilineText(text), BorderLayout.CENTER);
+            
+            selPanel = new TemplateSelectionPanel(weblog);
+            
             setLayout(new BorderLayout(5, 5));
-                       add(instrPanel, BorderLayout.NORTH);
-                       add(selPanel, BorderLayout.CENTER);                     
                                        
-               }
-               
-               public boolean isValidData()
-               {                       
-                       if(selPanel.getSelectedPack() == null)
+            add(instrPanel, BorderLayout.NORTH);
+            add(selPanel, BorderLayout.CENTER);
+        }
+        
+        public boolean isValidData() {
+            if(selPanel.getSelectedPack() == null)
                 return false;
             return true;
-               }
-               
-        public void saveProperties()
-        {           
+        }
+        
+        public void saveProperties() {
             selectedPack = selPanel.getSelectedPack();
         }
-       }       
-       
-       private class DonePanel extends PropertyPanel
-       {
-               /**
-         * 
+    }
+    
+    private class DonePanel extends PropertyPanel {
+        /**
+         *
          */
         private static final long serialVersionUID = 1L;
-
-        public DonePanel()
-               {
-                       JLabel header = createHeaderLabel(i18n.str("done")); 
//$NON-NLS-1$
-                       String text =
-                       i18n.str("finished_panel_text"); //$NON-NLS-1$
-                       
-                       setLayout(new BorderLayout());
-                       add(header, BorderLayout.NORTH);
-                       add(new MultilineText(text), BorderLayout.CENTER);      
-               }
-               
-               public boolean isValidData()
-               {                       
-                       return true;
-               }
-               
-               public void saveProperties()
-               {                       
-               }               
-       }
+        
+        public DonePanel() {
+            JLabel header = createHeaderLabel(i18n.str("done")); //$NON-NLS-1$
+            String text =
+                    i18n.str("finished_panel_text"); //$NON-NLS-1$
+            
+            setLayout(new BorderLayout());
+            add(header, BorderLayout.NORTH);
+            add(new MultilineText(text), BorderLayout.CENTER);
+        }
+        
+        public boolean isValidData() {
+            return true;
+        }
+        
+        public void saveProperties() {
+        }
+    }
 }

Modified: 
trunk/apps/thingamablog/src/net/sf/thingamablog/xml/TBPersistFactory.java
===================================================================
--- trunk/apps/thingamablog/src/net/sf/thingamablog/xml/TBPersistFactory.java   
2008-02-08 00:42:57 UTC (rev 17692)
+++ trunk/apps/thingamablog/src/net/sf/thingamablog/xml/TBPersistFactory.java   
2008-02-08 01:25:29 UTC (rev 17693)
@@ -14,7 +14,7 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
@@ -62,361 +62,328 @@


 /**
- * 
+ *
  * Factory for persisting a Thingamablog XML "database"
- * 
+ *
  * @author Bob Tantlinger
  *
  */
-public class TBPersistFactory
-{
+public class TBPersistFactory {
     //private static final Logger logger = 
Logger.getLogger("net.sf.thingamablog.xml");

     /**
-        * Saves the current data to an XML file
-        * 
-        * @param blogList The list of weblogs
-        * @param feedRootFolder The root FeedFolder
-        * @param path The path to save the file to
-        * @throws IOException If an IO error occurs
-        * @throws JDOMException If a JDOM error occurs
-        */
-       public synchronized static void save(WeblogList blogList, FeedFolder 
feedRootFolder, String path)
-       throws IOException, JDOMException
-       {
-               String mainRoot = "Thingamablog";               
-               //Document document = XMLUtils.initDocument(mainRoot, mainRoot, 
new File(path));
-               Document document = new Document(new Element(mainRoot));
-               Comment comment =
-                       new Comment("Generated by Thingamablog. DO NOT EDIT 
THIS FILE!!!");
-               document.getContent().add(0, comment);
-                               
-               Element weblogsRoot = new Element("Weblogs");
-               Element feedsRoot = new Element("Feeds");               
-               saveWeblogsToXML(blogList, weblogsRoot);
-               saveFeedFolder(feedRootFolder, feedsRoot);
-               
-               Element root = document.getRootElement();
-               root.addContent(weblogsRoot);
-               root.addContent(feedsRoot);                     
-               
-               XMLUtils.writeXML(document, path, true);
-       }
-       
-       public static void loadData(String path, WeblogList list, FeedFolder 
rootFolder, WeblogBackend b1, FeedBackend b2)
-       throws IOException, JDOMException
-       {
-               File f = new File(path);
-               Document doc = createDocument(f);
-               loadWeblogList(doc, f, list, b1);
-               loadFeedTree(doc, rootFolder, b2);              
-       }
-       
-       private static Document createDocument(File file)
-       throws IOException, JDOMException
-       {
-               SAXBuilder builder = new SAXBuilder(false);
-               builder.setEntityResolver(new TBEntityResolver());
-               Document document = builder.build(file);
-               return document;
-       }
-       
-       
-
-       private static void saveFeedFolder(FeedFolder folder, Element element)
-       {
-               FeedFolder sub[] = folder.getFolders();
-               for(int i = 0; i < sub.length; i++)
-               {
-                       Element category = new Element("Folder");
-                       category.setAttribute("name", sub[i].getName());
-                       element.addContent(category);
-                       saveFeedFolder(sub[i], category);
-               }
-               
-               Feed feeds[] = folder.getFeeds();
-               for(int j = 0; j < feeds.length; j++)
-               {
-                       Element link = new Element("Feed");
-                       link.setText(feeds[j].getURL());
-                       
-                       String title = feeds[j].getTitle();
-                       if(title != null)                       
-                               link.setAttribute("title", title);
-                       else
-                       link.setAttribute("title", "Untitled");                 
-                       
-                       link.setAttribute("archive", feeds[j].isLimitItems() + 
"");
-                       link.setAttribute("limit", feeds[j].getItemLimit() + 
"");                               
-                       
-                       Date updateDate = feeds[j].getLastUpdated();
-                       if(updateDate != null)
-                               link.setAttribute("update_date", 
updateDate.getTime() + "");
-                       //link.setAttribute("update_failed", 
feeds[j].isLastUpdateFailed() + "");
-                       if(feeds[j].isLastUpdateFailed())
-                               link.setAttribute("update_failed", 
feeds[j].getLastUpdateFailedReason());
-                       
-                       element.addContent(link);
-               }
-       }       
-       
-       /**
-        * Loads the FeedFolder heirarchy from an XML file
-        * 
-        * @param rootFolder The root FeedFolder
-        * @param path The path to the XML file
-        * @param backend The backend for the feeds
-        * @throws IOException If an IO error occurs
-        * @throws JDOMException If a JDOM error occurs
-        */
-       public static void loadFeedTree(FeedFolder rootFolder, String path, 
FeedBackend backend) 
-       throws IOException, JDOMException 
-       {
-               Document document = createDocument(new File(path));
-               if(document == null)
-                       return;
-               
-               loadFeedTree(document, rootFolder, backend);
-       }
-       
-       private static void loadFeedTree(Document document, FeedFolder 
rootFolder, FeedBackend backend)
-       {
-               Element root = document.getRootElement();
-               Element feedRoot = root.getChild("Feeds");              
-
-               if(feedRoot != null) 
-               {                       
-                       loadFeeds(rootFolder, feedRoot, backend);               
        
-               }       
-       }
-       
-       private static void loadFeeds(FeedFolder folder, Element element, 
FeedBackend backend)
-       {
-               List contents = element.getChildren();
-               Iterator contentsIt = contents.iterator();
-
-               while(contentsIt.hasNext())
-               {
-                       Element ele = (Element) contentsIt.next();
-
-                       /** The element is a category */
-                       if(ele.getName().equals("Folder")) 
-                       {
-                               FeedFolder subFolder = loadFeedFolder(ele);
-                               folder.addFolder(subFolder);
-                               loadFeeds(subFolder, ele, backend);
-                       }
-                       /** The element is a favorite */
-                       else if (ele.getName().equals("Feed")) 
-                       {
-                               folder.addFeed(loadFeed(ele, backend));
-                       }
-               }
-       }       
-       
-       private static FeedFolder loadFeedFolder(Element element) 
-       {
-
-               /** Name of the category */
-               String folderName = element.getAttributeValue("name");
-
-               /** Create a new category */
-               FeedFolder sub = new FeedFolder(folderName);
-               return sub;
-       }
-       
-       private static Feed loadFeed(Element element, FeedBackend backend)
-       {
-               String url = "";
-               String title = "";
-               Date updated = null;
-               boolean /*lastUpdateFailed = false,*/ archive = true;
-               String failReason = null;
-               int limit = 50;
-               
-               // Url of the feed 
-               if (element.getText() != null)
-                       url = element.getText();
-
-               // Title of the feed 
-               if (element.getAttributeValue("title") != null)
-                       title = element.getAttributeValue("title");
-               
-               if(element.getAttributeValue("update_date") != null)
-               {
-                       try
-                       {                       
-                               long epoch = 
Long.parseLong(element.getAttributeValue("update_date"));
-                               updated = new Date(epoch);                      
        
-                       }
-                       catch(Exception ex){}
-               }
-               
-               try
-               {
-                       limit = 
Integer.parseInt(element.getAttributeValue("limit", "50"));
-               }catch(Exception ex){}
-               
-               archive = element.getAttributeValue("archive", 
"true").equals("true");
-               
-               if(element.getAttributeValue("update_failed") != null)
-               {
-                       failReason = element.getAttributeValue("update_failed");
-               }
-               
-               Feed f = new Feed(url);
-               f.setTitle(title);
-               f.setBackend(backend);
-               f.setLastUpdated(updated);              
-               f.setLastUpdateFailed(failReason != null);
-               f.setLimitItems(archive);
-               f.setItemLimit(limit);
-               if(failReason != null)
-                       f.setLastUpdateFailedReason(failReason);
-               return f;
-       }
-       
-
-       private static void saveWeblogsToXML(WeblogList blogList, Element root)
-       throws IOException, JDOMException
-       {
-               for(int i = 0; i < blogList.getWeblogCount(); i++)
-               {
-                       Weblog blog = blogList.getWeblogAt(i);
-                       Element bElement = createWeblogElement(blog);
-                       root.addContent(bElement);
-               }       
-       }
-       
-       private static Element createWeblogElement(Weblog blog)
-       {
-               Element element = new Element("Weblog");
-               element.setAttribute("title", blog.getTitle());
-               element.setAttribute("key", blog.getKey());
-               element.setAttribute("last_publish", 
blog.getLastPublishDate().getTime() + "");
+     * Saves the current data to an XML file
+     *
+     * @param blogList The list of weblogs
+     * @param feedRootFolder The root FeedFolder
+     * @param path The path to save the file to
+     * @throws IOException If an IO error occurs
+     * @throws JDOMException If a JDOM error occurs
+     */
+    public synchronized static void save(WeblogList blogList, FeedFolder 
feedRootFolder, String path)
+    throws IOException, JDOMException {
+        String mainRoot = "Thingamablog";
+        //Document document = XMLUtils.initDocument(mainRoot, mainRoot, new 
File(path));
+        Document document = new Document(new Element(mainRoot));
+        Comment comment =
+                new Comment("Generated by Thingamablog. DO NOT EDIT THIS 
FILE!!!");
+        document.getContent().add(0, comment);
+        
+        Element weblogsRoot = new Element("Weblogs");
+        Element feedsRoot = new Element("Feeds");
+        saveWeblogsToXML(blogList, weblogsRoot);
+        saveFeedFolder(feedRootFolder, feedsRoot);
+        
+        Element root = document.getRootElement();
+        root.addContent(weblogsRoot);
+        root.addContent(feedsRoot);
+        
+        XMLUtils.writeXML(document, path, true);
+    }
+    
+    public static void loadData(String path, WeblogList list, FeedFolder 
rootFolder, WeblogBackend b1, FeedBackend b2)
+    throws IOException, JDOMException {
+        File f = new File(path);
+        Document doc = createDocument(f);
+        loadWeblogList(doc, f, list, b1);
+        loadFeedTree(doc, rootFolder, b2);
+    }
+    
+    private static Document createDocument(File file)
+    throws IOException, JDOMException {
+        SAXBuilder builder = new SAXBuilder(false);
+        builder.setEntityResolver(new TBEntityResolver());
+        Document document = builder.build(file);
+        return document;
+    }
+    
+    
+    
+    private static void saveFeedFolder(FeedFolder folder, Element element) {
+        FeedFolder sub[] = folder.getFolders();
+        for(int i = 0; i < sub.length; i++) {
+            Element category = new Element("Folder");
+            category.setAttribute("name", sub[i].getName());
+            element.addContent(category);
+            saveFeedFolder(sub[i], category);
+        }
+        
+        Feed feeds[] = folder.getFeeds();
+        for(int j = 0; j < feeds.length; j++) {
+            Element link = new Element("Feed");
+            link.setText(feeds[j].getURL());
+            
+            String title = feeds[j].getTitle();
+            if(title != null)
+                link.setAttribute("title", title);
+            else
+                link.setAttribute("title", "Untitled");
+            
+            link.setAttribute("archive", feeds[j].isLimitItems() + "");
+            link.setAttribute("limit", feeds[j].getItemLimit() + "");
+            
+            Date updateDate = feeds[j].getLastUpdated();
+            if(updateDate != null)
+                link.setAttribute("update_date", updateDate.getTime() + "");
+            //link.setAttribute("update_failed", feeds[j].isLastUpdateFailed() 
+ "");
+            if(feeds[j].isLastUpdateFailed())
+                link.setAttribute("update_failed", 
feeds[j].getLastUpdateFailedReason());
+            
+            element.addContent(link);
+        }
+    }
+    
+    /**
+     * Loads the FeedFolder heirarchy from an XML file
+     *
+     * @param rootFolder The root FeedFolder
+     * @param path The path to the XML file
+     * @param backend The backend for the feeds
+     * @throws IOException If an IO error occurs
+     * @throws JDOMException If a JDOM error occurs
+     */
+    public static void loadFeedTree(FeedFolder rootFolder, String path, 
FeedBackend backend)
+    throws IOException, JDOMException {
+        Document document = createDocument(new File(path));
+        if(document == null)
+            return;
+        
+        loadFeedTree(document, rootFolder, backend);
+    }
+    
+    private static void loadFeedTree(Document document, FeedFolder rootFolder, 
FeedBackend backend) {
+        Element root = document.getRootElement();
+        Element feedRoot = root.getChild("Feeds");
+        
+        if(feedRoot != null) {
+            loadFeeds(rootFolder, feedRoot, backend);
+        }
+    }
+    
+    private static void loadFeeds(FeedFolder folder, Element element, 
FeedBackend backend) {
+        List contents = element.getChildren();
+        Iterator contentsIt = contents.iterator();
+        
+        while(contentsIt.hasNext()) {
+            Element ele = (Element) contentsIt.next();
+            
+            /** The element is a category */
+            if(ele.getName().equals("Folder")) {
+                FeedFolder subFolder = loadFeedFolder(ele);
+                folder.addFolder(subFolder);
+                loadFeeds(subFolder, ele, backend);
+            }
+            /** The element is a favorite */
+            else if (ele.getName().equals("Feed")) {
+                folder.addFeed(loadFeed(ele, backend));
+            }
+        }
+    }
+    
+    private static FeedFolder loadFeedFolder(Element element) {
+        
+        /** Name of the category */
+        String folderName = element.getAttributeValue("name");
+        
+        /** Create a new category */
+        FeedFolder sub = new FeedFolder(folderName);
+        return sub;
+    }
+    
+    private static Feed loadFeed(Element element, FeedBackend backend) {
+        String url = "";
+        String title = "";
+        Date updated = null;
+        boolean /*lastUpdateFailed = false,*/ archive = true;
+        String failReason = null;
+        int limit = 50;
+        
+        // Url of the feed
+        if (element.getText() != null)
+            url = element.getText();
+        
+        // Title of the feed
+        if (element.getAttributeValue("title") != null)
+            title = element.getAttributeValue("title");
+        
+        if(element.getAttributeValue("update_date") != null) {
+            try {
+                long epoch = 
Long.parseLong(element.getAttributeValue("update_date"));
+                updated = new Date(epoch);
+            } catch(Exception ex){}
+        }
+        
+        try {
+            limit = Integer.parseInt(element.getAttributeValue("limit", "50"));
+        }catch(Exception ex){}
+        
+        archive = element.getAttributeValue("archive", "true").equals("true");
+        
+        if(element.getAttributeValue("update_failed") != null) {
+            failReason = element.getAttributeValue("update_failed");
+        }
+        
+        Feed f = new Feed(url);
+        f.setTitle(title);
+        f.setBackend(backend);
+        f.setLastUpdated(updated);
+        f.setLastUpdateFailed(failReason != null);
+        f.setLimitItems(archive);
+        f.setItemLimit(limit);
+        if(failReason != null)
+            f.setLastUpdateFailedReason(failReason);
+        return f;
+    }
+    
+    
+    private static void saveWeblogsToXML(WeblogList blogList, Element root)
+    throws IOException, JDOMException {
+        for(int i = 0; i < blogList.getWeblogCount(); i++) {
+            Weblog blog = blogList.getWeblogAt(i);
+            Element bElement = createWeblogElement(blog);
+            root.addContent(bElement);
+        }
+    }
+    
+    private static Element createWeblogElement(Weblog blog) {
+        Element element = new Element("Weblog");
+        element.setAttribute("title", blog.getTitle());
+        element.setAttribute("key", blog.getKey());
+        element.setAttribute("last_publish", 
blog.getLastPublishDate().getTime() + "");
         element.setAttribute("publish_failed", blog.isPublishFailed() + "");
-               Element descr = new Element("Description");
-               descr.addContent(blog.getDescription());                
-               element.addContent(descr);
-               element.addContent(createPingServicesElement(blog));
-               element.addContent(createPublishTransportElement(blog));
+        Element descr = new Element("Description");
+        descr.addContent(blog.getDescription());
+        element.addContent(descr);
+        element.addContent(createPingServicesElement(blog));
+        element.addContent(createPublishTransportElement(blog));
         element.addContent(createMailSettingsElement(blog));
-               
-               if(blog instanceof TBWeblog)
-               {
-                       TBWeblog tbBlog = (TBWeblog)blog;
-                       return createTBWeblogElement(tbBlog, element);
-               }
-               return element;
-       }
-       
-       private static Element createPingServicesElement(Weblog blog)
-       {
-               Element element = new Element("PingServices");
-               PingService ps[] = blog.getPingServices();
-               for(int i = 0; i < ps.length; i++)
-               {
-                       if(ps[i] instanceof WeblogsDotComPing)
-                       {
-                               Element ping = new Element("WeblogsDotComPing");
-                               ping.setAttribute("name", 
ps[i].getServiceName());
-                               ping.setAttribute("url", ps[i].getServiceUrl());
-                               ping.setAttribute("enabled", ps[i].isEnabled() 
+ "");
-                               element.addContent(ping);
-                       }
-               }
-               return element;
-       }
-       
-       private static Element createTBWeblogElement(TBWeblog blog, Element 
element)
-       {
-               element.setName("TBWeblog");
-               element.setAttribute("url", blog.getBaseUrl());
-               element.setAttribute("arc_url", blog.getArchiveUrl());
-               element.setAttribute("media_url", blog.getMediaUrl());
-               element.setAttribute("base_path", blog.getBasePath());          
-               element.setAttribute("base_date", 
blog.getArchiveBaseDate().getTime() + "");
-               element.setAttribute("arc_policy", blog.getArchivePolicy() + 
"");
-               element.setAttribute("day_interval", 
blog.getArchiveByDayInterval() + "");
-               element.setAttribute("arc_ext", blog.getArchivesExtension());
-               element.setAttribute("cat_ext", blog.getCategoriesExtension());
+        
+        if(blog instanceof TBWeblog) {
+            TBWeblog tbBlog = (TBWeblog)blog;
+            return createTBWeblogElement(tbBlog, element);
+        }
+        return element;
+    }
+    
+    private static Element createPingServicesElement(Weblog blog) {
+        Element element = new Element("PingServices");
+        PingService ps[] = blog.getPingServices();
+        for(int i = 0; i < ps.length; i++) {
+            if(ps[i] instanceof WeblogsDotComPing) {
+                Element ping = new Element("WeblogsDotComPing");
+                ping.setAttribute("name", ps[i].getServiceName());
+                ping.setAttribute("url", ps[i].getServiceUrl());
+                ping.setAttribute("enabled", ps[i].isEnabled() + "");
+                element.addContent(ping);
+            }
+        }
+        return element;
+    }
+    
+    private static Element createTBWeblogElement(TBWeblog blog, Element 
element) {
+        element.setName("TBWeblog");
+        element.setAttribute("url", blog.getBaseUrl());
+        element.setAttribute("arc_url", blog.getArchiveUrl());
+        element.setAttribute("media_url", blog.getMediaUrl());
+        element.setAttribute("base_path", blog.getBasePath());
+        element.setAttribute("base_date", blog.getArchiveBaseDate().getTime() 
+ "");
+        element.setAttribute("arc_policy", blog.getArchivePolicy() + "");
+        element.setAttribute("day_interval", blog.getArchiveByDayInterval() + 
"");
+        element.setAttribute("arc_ext", blog.getArchivesExtension());
+        element.setAttribute("cat_ext", blog.getCategoriesExtension());
         element.setAttribute("gen_cat_feed", blog.isGenerateCategoryFeeds() + 
"");
         element.setAttribute("cat_feed_ext", 
blog.getCategoriesFeedExtension());
-               element.setAttribute("entry_ext", blog.getEntryPageExtension());
-               element.setAttribute("gen_rss", blog.isGenerateRssFeed() + "");
-               element.setAttribute("gen_arc_index", 
blog.isGenerateArchiveIndex() + "");
-               element.setAttribute("gen_entries", blog.isGenerateEntryPages() 
+ "");
-               element.setAttribute("fp_filename", 
blog.getFrontPageFileName());
-               element.setAttribute("rss_filename", blog.getRssFileName());
-               element.setAttribute("arc_index_filename", 
blog.getArchiveIndexFileName());
-               element.setAttribute("locale", blog.getLocale().toString());
-               element.setAttribute("publish_all", blog.isPublishAll() + "");
-                                               
-               Element outdatedArcs = new Element("OutdatedArchives");
-               ArchiveRange ar[] = blog.getOutdatedArchives();
-               for(int i = 0; i < ar.length; i++)
-               {
-                       Element arcRange = new Element("Archive");
-                       arcRange.setAttribute("start", 
ar[i].getStartDate().getTime() + "");
-                       arcRange.setAttribute("end", 
ar[i].getExpirationDate().getTime() + "");
-                       outdatedArcs.addContent(arcRange);              
-               }
-               element.addContent(outdatedArcs);
-               
-               Element outdatedCats = new Element("OutdatedCategories");
-               String cats[] = blog.getOutdatedCategories();
-               for(int i = 0; i < cats.length; i++)
-               {
-                       Element category = new Element("Category");
-                       category.setText(cats[i]);
-                       outdatedCats.addContent(category);              
-               }
-               element.addContent(outdatedCats);
-               
-               Element outdatedEntries = new Element("OutdatedEntries");
-               long ids[] = blog.getOutdatedEntryIDs();
-               for(int i = 0; i < ids.length; i++)
-               {
-                   Element ent = new Element("Entry");
-                   ent.setText(ids[i] + "");
-                   outdatedEntries.addContent(ent);
-               }
-               element.addContent(outdatedEntries);
-               
-               Element genElement = new Element("Generator");
-               PageGenerator gen = blog.getPageGenerator();
-               genElement.setAttribute("charset", gen.getCharset());
-               genElement.setAttribute("range_format", 
gen.getArchiveRangeFormat());
-               genElement.setAttribute("span_range", gen.isSpanArcRange() + 
"");
-               genElement.setAttribute("date_format", gen.getDateFormat());
-               genElement.setAttribute("time_format", gen.getTimeFormat());
-               genElement.setAttribute("front_asc", gen.isFrontPageAscending() 
+ "");
-               genElement.setAttribute("cat_asc", 
gen.isCategoryPageAscending() + "");
-               genElement.setAttribute("arc_asc", gen.isArchivePageAscending() 
+ "");
-               genElement.setAttribute("limit_front", gen.isLimitFrontPage() + 
"");
-               genElement.setAttribute("front_page_limit", 
gen.getFrontPageLimit() + "");
-               genElement.setAttribute("limit_cat", gen.isLimitCategoryPage() 
+ "");
-               genElement.setAttribute("cat_page_limit", 
gen.getCategoryPageLimit() + "");
-               genElement.setAttribute("limit_rss_body", gen.isLimitRssEntry() 
+ "");
-               
-               
-               Element customTagsElement = new Element("CustomTags");
-               CustomTag tags[] = gen.getCustomTags();
-               for(int i = 0; i < tags.length; i++)
-               {
-                       Element tag = new Element("Tag");
-                       tag.setAttribute("name", tags[i].getName());
-                       tag.setText(tags[i].getValue());
-                       customTagsElement.addContent(tag);
-               }
-               
-               genElement.addContent(customTagsElement);       
-               element.addContent(genElement);
-               return element;         
-       }
+        element.setAttribute("entry_ext", blog.getEntryPageExtension());
+        element.setAttribute("gen_rss", blog.isGenerateRssFeed() + "");
+        element.setAttribute("gen_arc_index", blog.isGenerateArchiveIndex() + 
"");
+        element.setAttribute("gen_entries", blog.isGenerateEntryPages() + "");
+        element.setAttribute("fp_filename", blog.getFrontPageFileName());
+        element.setAttribute("rss_filename", blog.getRssFileName());
+        element.setAttribute("arc_index_filename", 
blog.getArchiveIndexFileName());
+        element.setAttribute("locale", blog.getLocale().toString());
+        element.setAttribute("publish_all", blog.isPublishAll() + "");
+        element.setAttribute("type", blog.getType());
+        
+        Element outdatedArcs = new Element("OutdatedArchives");
+        ArchiveRange ar[] = blog.getOutdatedArchives();
+        for(int i = 0; i < ar.length; i++) {
+            Element arcRange = new Element("Archive");
+            arcRange.setAttribute("start", ar[i].getStartDate().getTime() + 
"");
+            arcRange.setAttribute("end", ar[i].getExpirationDate().getTime() + 
"");
+            outdatedArcs.addContent(arcRange);
+        }
+        element.addContent(outdatedArcs);
+        
+        Element outdatedCats = new Element("OutdatedCategories");
+        String cats[] = blog.getOutdatedCategories();
+        for(int i = 0; i < cats.length; i++) {
+            Element category = new Element("Category");
+            category.setText(cats[i]);
+            outdatedCats.addContent(category);
+        }
+        element.addContent(outdatedCats);
+        
+        Element outdatedEntries = new Element("OutdatedEntries");
+        long ids[] = blog.getOutdatedEntryIDs();
+        for(int i = 0; i < ids.length; i++) {
+            Element ent = new Element("Entry");
+            ent.setText(ids[i] + "");
+            outdatedEntries.addContent(ent);
+        }
+        element.addContent(outdatedEntries);
+        
+        Element genElement = new Element("Generator");
+        PageGenerator gen = blog.getPageGenerator();
+        genElement.setAttribute("charset", gen.getCharset());
+        genElement.setAttribute("range_format", gen.getArchiveRangeFormat());
+        genElement.setAttribute("span_range", gen.isSpanArcRange() + "");
+        genElement.setAttribute("date_format", gen.getDateFormat());
+        genElement.setAttribute("time_format", gen.getTimeFormat());
+        genElement.setAttribute("front_asc", gen.isFrontPageAscending() + "");
+        genElement.setAttribute("cat_asc", gen.isCategoryPageAscending() + "");
+        genElement.setAttribute("arc_asc", gen.isArchivePageAscending() + "");
+        genElement.setAttribute("limit_front", gen.isLimitFrontPage() + "");
+        genElement.setAttribute("front_page_limit", gen.getFrontPageLimit() + 
"");
+        genElement.setAttribute("limit_cat", gen.isLimitCategoryPage() + "");
+        genElement.setAttribute("cat_page_limit", gen.getCategoryPageLimit() + 
"");
+        genElement.setAttribute("limit_rss_body", gen.isLimitRssEntry() + "");
+        
+        
+        Element customTagsElement = new Element("CustomTags");
+        CustomTag tags[] = gen.getCustomTags();
+        for(int i = 0; i < tags.length; i++) {
+            Element tag = new Element("Tag");
+            tag.setAttribute("name", tags[i].getName());
+            tag.setText(tags[i].getValue());
+            customTagsElement.addContent(tag);
+        }
+        
+        genElement.addContent(customTagsElement);
+        element.addContent(genElement);
+        return element;
+    }

-    private static Element createMailSettingsElement(Weblog blog)
-    {        
+    private static Element createMailSettingsElement(Weblog blog) {
         Element mailSettings = new Element("MailSettings");
         mailSettings.setAttribute("enabled", blog.isImportFromEmailEnabled() + 
"");
         if(blog.getLastEmailCheck() != null)
@@ -432,36 +399,32 @@
         transport.setAttribute("port", rpt.getPort() + "");
         transport.setAttribute("user", rpt.getUserName());
         if(rpt.isSavePassword())
-            transport.setAttribute("password", 
-            PasswordUtil.encrypt(rpt.getPassword(), PasswordUtil.KEY));
+            transport.setAttribute("password",
+                    PasswordUtil.encrypt(rpt.getPassword(), PasswordUtil.KEY));

         mailSettings.addContent(transport);
         return mailSettings;
     }
-       
-       private static Element createPublishTransportElement(Weblog blog)
-       {
-               Element transport = new Element("Transport");
-               PublishTransport pt = blog.getPublishTransport();
-               if(pt instanceof RemoteTransport)
-               {
-                       RemoteTransport rpt = (RemoteTransport)pt;
-                       transport.setAttribute("type", "sftp");
-                       transport.setAttribute("server", rpt.getAddress());
-                       transport.setAttribute("port", rpt.getPort() + "");
-                       transport.setAttribute("user", rpt.getUserName());
-                       if(rpt.isSavePassword())
-                               transport.setAttribute("password", 
-                               PasswordUtil.encrypt(rpt.getPassword(), 
PasswordUtil.KEY));
-                       if(rpt instanceof FTPTransport)
-                       {
-                               FTPTransport ftp = (FTPTransport)rpt;
-                               transport.setAttribute("type", "ftp");
-                               transport.setAttribute("passive", 
ftp.isPassiveMode()+"");
+    
+    private static Element createPublishTransportElement(Weblog blog) {
+        Element transport = new Element("Transport");
+        PublishTransport pt = blog.getPublishTransport();
+        if(pt instanceof RemoteTransport) {
+            RemoteTransport rpt = (RemoteTransport)pt;
+            transport.setAttribute("type", "sftp");
+            transport.setAttribute("server", rpt.getAddress());
+            transport.setAttribute("port", rpt.getPort() + "");
+            transport.setAttribute("user", rpt.getUserName());
+            if(rpt.isSavePassword())
+                transport.setAttribute("password",
+                        PasswordUtil.encrypt(rpt.getPassword(), 
PasswordUtil.KEY));
+            if(rpt instanceof FTPTransport) {
+                FTPTransport ftp = (FTPTransport)rpt;
+                transport.setAttribute("type", "ftp");
+                transport.setAttribute("passive", ftp.isPassiveMode()+"");
                 Element e = new Element("ASCIITypes");
                 List exts = ftp.getASCIIExtensions();
-                for(Iterator it = exts.iterator(); it.hasNext();)
-                {
+                for(Iterator it = exts.iterator(); it.hasNext();) {
                     String ex = it.next().toString();
                     Element c = new Element("ext");
                     c.setText(ex);
@@ -469,283 +432,252 @@
                 }

                 transport.addContent(e);
-                       }                                       
-               }
-               else
-               {
-                       transport.setAttribute("type", "local");
-               }
-               
-               return transport;
-       }
-       
-
-       /**
-        * Creates a WeblogList from an XML file
-        * 
-        * @param path The path to the XML file
-        * @param backend The backend to connect the weblogs to
-        * @param authStore The author store for the weblogs
-        * @param catStore The category store for the weblogs
-        * @return A list of weblogs
-        * @throws IOException If an IO error occurs
-        * @throws JDOMException If a JDOM error occurs
-        */
-       public static WeblogList loadWeblogsFromXML(String path, WeblogBackend 
backend) 
-       throws IOException, JDOMException
-       {
-               WeblogList list = new WeblogList();
-               File f = new File(path);                
-               Document document = createDocument(f);          
-               loadWeblogList(document, f, list, backend);                     
-
-               return list;
-       }
-       
-       private static void loadWeblogList(Document document, File path, 
WeblogList list, WeblogBackend backend)
-       {
-               if(document == null)//couldn't load xml file
-                       return;//return empty WeblogList
-                       
-               Element root = document.getRootElement();
-               List weblogs = root.getChild("Weblogs").getChildren();
-               Iterator weblogsIt = weblogs.iterator();
-               //children should all be weblogs
-               while(weblogsIt.hasNext())
-               {
-                       Element blogElement = (Element)weblogsIt.next();
-                       Weblog w = createWeblogFromElement(blogElement,path);
-                       if(w != null)
-                       {                               
-                               w.setBackend(backend);
-                               list.addWeblog(w);
-                       }
-               }
-               list.sortList();                
-       }
-       
-       private static Weblog createWeblogFromElement(Element blogEle, File 
path)
-       {
-               Weblog weblog = null;
-               //different weblog types might be added later
-               //for now we're only dealing with TBWeblogs
-               if(blogEle.getName().equals("TBWeblog"))
-                       weblog = createTBWeblogFromElement(blogEle, path);
-               
-               if(weblog == null)
-                       return null;
-               
-               
weblog.setPublishTransport(loadPublishTransportFromXML(blogEle));
-               loadPingServicesFromXML(blogEle, weblog);
+            }
+        } else {
+            transport.setAttribute("type", "local");
+        }
+        
+        return transport;
+    }
+    
+    
+    /**
+     * Creates a WeblogList from an XML file
+     *
+     * @param path The path to the XML file
+     * @param backend The backend to connect the weblogs to
+     * @param authStore The author store for the weblogs
+     * @param catStore The category store for the weblogs
+     * @return A list of weblogs
+     * @throws IOException If an IO error occurs
+     * @throws JDOMException If a JDOM error occurs
+     */
+    public static WeblogList loadWeblogsFromXML(String path, WeblogBackend 
backend)
+    throws IOException, JDOMException {
+        WeblogList list = new WeblogList();
+        File f = new File(path);
+        Document document = createDocument(f);
+        loadWeblogList(document, f, list, backend);
+        
+        return list;
+    }
+    
+    private static void loadWeblogList(Document document, File path, 
WeblogList list, WeblogBackend backend) {
+        if(document == null)//couldn't load xml file
+            return;//return empty WeblogList
+        
+        Element root = document.getRootElement();
+        List weblogs = root.getChild("Weblogs").getChildren();
+        Iterator weblogsIt = weblogs.iterator();
+        //children should all be weblogs
+        while(weblogsIt.hasNext()) {
+            Element blogElement = (Element)weblogsIt.next();
+            Weblog w = createWeblogFromElement(blogElement,path);
+            if(w != null) {
+                w.setBackend(backend);
+                list.addWeblog(w);
+            }
+        }
+        list.sortList();
+    }
+    
+    private static Weblog createWeblogFromElement(Element blogEle, File path) {
+        Weblog weblog = null;
+        //different weblog types might be added later
+        //for now we're only dealing with TBWeblogs
+        if(blogEle.getName().equals("TBWeblog"))
+            weblog = createTBWeblogFromElement(blogEle, path);
+        
+        if(weblog == null)
+            return null;
+        
+        weblog.setPublishTransport(loadPublishTransportFromXML(blogEle));
+        loadPingServicesFromXML(blogEle, weblog);
         loadEmailSettingsFromXML(blogEle, weblog);
-               weblog.setTitle(blogEle.getAttributeValue("title", "Untitled"));
-               String description = "";
-               Element desc = blogEle.getChild("Description");
-               if(desc != null)
-                       description = desc.getText();
-               weblog.setDescription(description);
-               try
-               {
-                       long time = Long.parseLong(
-                               blogEle.getAttributeValue("last_publish", 
-                               System.currentTimeMillis() + ""));
-                       weblog.setLastPublishDate(new Date(time));
-               }
-               catch(Exception ex){}
+        weblog.setTitle(blogEle.getAttributeValue("title", "Untitled"));
+        String description = "";
+        Element desc = blogEle.getChild("Description");
+        if(desc != null)
+            description = desc.getText();
+        weblog.setDescription(description);
+        try {
+            long time = Long.parseLong(
+                    blogEle.getAttributeValue("last_publish",
+                    System.currentTimeMillis() + ""));
+            weblog.setLastPublishDate(new Date(time));
+        } catch(Exception ex){}
         
weblog.setPublishFailed(Boolean.parseBoolean(blogEle.getAttributeValue("publish_failed",
 "false")));
-               
+        
         return weblog; //element wasn't a known type
-       }
-       
-       private static TBWeblog createTBWeblogFromElement(Element element, File 
path)
-       {
-               String key = element.getAttributeValue("key");
-               if(key == null)
-                       return null; //can't continue if this weblog doesnt 
have a unique key
-                       
-               TBWeblog tb = new TBWeblog(path.getParentFile(), key);
-               String genericUrl = "http://www.mysite.com";;
-               String basePath = element.getAttributeValue("base_path", "/");
-               String url = element.getAttributeValue("url", genericUrl);
-               String arcUrl = element.getAttributeValue("arc_url", 
genericUrl);
-               String mediaUrl = element.getAttributeValue("media_url", 
genericUrl);
-               tb.setBlogUrls(basePath, url, arcUrl, mediaUrl);
-               
-               tb.setCategoriesExtension(element.getAttributeValue("cat_ext", 
".html"));
-               tb.setArchivesExtension(element.getAttributeValue("arc_ext", 
".html"));
-               tb.setEntryPageExtension(element.getAttributeValue("entry_ext", 
".html"));
-               
tb.setFrontPageFileName(element.getAttributeValue("fp_filename", "blog.html"));
-               tb.setRssFileName(element.getAttributeValue("rss_filename", 
"rss.xml"));
-               
tb.setArchiveIndexFileName(element.getAttributeValue("arc_index_filename", 
"list.html"));
-               
+    }
+    
+    private static TBWeblog createTBWeblogFromElement(Element element, File 
path) {
+        String key = element.getAttributeValue("key");
+        if(key == null)
+            return null; //can't continue if this weblog doesnt have a unique 
key
+        
+        TBWeblog tb = new TBWeblog(path.getParentFile(), key);
+        String genericUrl = "http://www.mysite.com";;
+        String basePath = element.getAttributeValue("base_path", "/");
+        String url = element.getAttributeValue("url", genericUrl);
+        String arcUrl = element.getAttributeValue("arc_url", genericUrl);
+        String mediaUrl = element.getAttributeValue("media_url", genericUrl);
+        tb.setBlogUrls(basePath, url, arcUrl, mediaUrl);
+        
+        tb.setCategoriesExtension(element.getAttributeValue("cat_ext", 
".html"));
+        tb.setArchivesExtension(element.getAttributeValue("arc_ext", ".html"));
+        tb.setEntryPageExtension(element.getAttributeValue("entry_ext", 
".html"));
+        tb.setFrontPageFileName(element.getAttributeValue("fp_filename", 
"blog.html"));
+        tb.setRssFileName(element.getAttributeValue("rss_filename", 
"rss.xml"));
+        
tb.setArchiveIndexFileName(element.getAttributeValue("arc_index_filename", 
"list.html"));
+        
         tb.setGenerateCategoryFeeds(element.getAttributeValue("gen_cat_feed", 
"false").equals("true"));
         
tb.setCategoriesFeedExtension(element.getAttributeValue("cat_feed_ext", 
".rss"));

-               tb.setGenerateRssFeed(element.getAttributeValue("gen_rss", 
"true").equals("true"));
-               
tb.setGenerateArchiveIndex(element.getAttributeValue("gen_arc_index", 
"true").equals("true"));
-               
tb.setGenerateEntryPages(element.getAttributeValue("gen_entries", 
"false").equals("true"));
-               
-               tb.setLocale(createLocale(element.getAttributeValue("locale", 
Locale.getDefault().toString())));
-               tb.setPublishAll(element.getAttributeValue("publish_all", 
"true").equals("true"));
-                  
-               int arcPolicy = TBWeblog.ARCHIVE_MONTHLY;
-               int dayInterval = 5;
-               Date arcBaseDate = new Date(0);
-               try
-               {
-                       arcPolicy = Integer.parseInt(
-                               element.getAttributeValue("arc_policy", 
Integer.toString(TBWeblog.ARCHIVE_MONTHLY)));
-                       dayInterval = 
Integer.parseInt(element.getAttributeValue("day_interval", "5"));
-                       long time = 
Long.parseLong(element.getAttributeValue("base_date"));
-                       arcBaseDate = new Date(time);
-               }
-               catch(Exception ex){}
-               tb.setArchivePolicy(arcPolicy);
-               tb.setArchiveByDayInterval(dayInterval);
-               tb.setArchiveBaseDate(arcBaseDate);
-               
-               //load outdated archives from xml
-               Element outdatedArcs = element.getChild("OutdatedArchives");
-               if(outdatedArcs != null)
-               {               
-                       Iterator itr = (outdatedArcs.getChildren()).iterator();
-                       while(itr.hasNext()) 
-                       {
-                               Date start = new Date();
-                               Date exp = new Date();
-                               Element e = (Element)itr.next();
-                               if(e.getName().equals("Archive"))
-                               {
-                                       try
-                                       {
-                                               long d1 = 
Long.parseLong(e.getAttributeValue("start"));
-                                               long d2 = 
Long.parseLong(e.getAttributeValue("end"));
-                                               start.setTime(d1);
-                                               exp.setTime(d2);
-                                               tb.addOutdatedArchive(new 
ArchiveRange(start, exp));
-                                       }
-                                       catch(Exception ex){}
-                               }
-                       }
-               }
-               
-               //load outdated cats from xml
-               Element outdatedCats = element.getChild("OutdatedCategories");
-               if(outdatedCats != null)
-               {               
-                       Iterator itr = (outdatedCats.getChildren()).iterator();
-                       while(itr.hasNext()) 
-                       {
-                               Element e = (Element)itr.next();
-                               if(e.getName().equals("Category"))
-                               {
-                                       tb.addOutdatedCategory(e.getText());
-                               }
-                       }
-               }
-               
-               //load outdated entries from xml
-               Element outdatedEnts = element.getChild("OutdatedEntries");
-               if(outdatedEnts != null)
-               {               
-                       Iterator itr = (outdatedEnts.getChildren()).iterator();
-                       while(itr.hasNext()) 
-                       {
-                               Element e = (Element)itr.next();
-                               if(e.getName().equals("Entry"))
-                               {
-                                       try{
-                                           long id = 
Long.parseLong(e.getText());
-                                           tb.addOutdatedEntryID(new Long(id));
-                                       }catch(Exception ex){}                  
            
-                               }
-                       }
-               }
-               
-               loadGeneratorSettingsFromXML(tb, element);
-               return tb;              
-       }
-       
-       private static void loadGeneratorSettingsFromXML(TBWeblog tbw, Element 
element)
-       {
-               //set up the page generator defaults
-               PageGenerator gen = tbw.getPageGenerator();
-               Element genElement = element.getChild("Generator");
-               if(genElement == null)
-                       return;
-               
-               gen.setCharset(genElement.getAttributeValue("charset", 
"UTF-8"));
-               gen.setDateFormat(genElement.getAttributeValue("date_format"));
-               gen.setTimeFormat(genElement.getAttributeValue("time_format"));
-               String s = genElement.getAttributeValue("span_range");
-               boolean span = s != null && s.equals("true");           
-               
gen.setArchiveRangeFormat(genElement.getAttributeValue("range_format"), span);
-               s = genElement.getAttributeValue("front_asc");
-               gen.setFrontPageAscending(s != null && s.equals("true"));
-               s = genElement.getAttributeValue("arc_asc");
-               gen.setArchivePageAscending(s != null && s.equals("true"));
-               s = genElement.getAttributeValue("cat_asc");
-               gen.setCategoryPageAscending(s != null && s.equals("true"));
-               
-               int fpLimit = 10;
-               int catLimit = 20;
-               try
-               {
-                       fpLimit = 
Integer.parseInt(genElement.getAttributeValue("front_page_limit"));
-                       catLimit = 
Integer.parseInt(genElement.getAttributeValue("cat_page_limit"));
-               }
-               catch(Exception ex){}
-               
-               
gen.setLimitFrontPage(genElement.getAttributeValue("limit_front", 
"true").equals("true"));
-               gen.setFrontPageLimit(fpLimit);         
-               
gen.setLimitCategoryPage(genElement.getAttributeValue("limit_cat", 
"true").equals("true"));
-               gen.setCategoryPageLimit(catLimit);
-               s = genElement.getAttributeValue("limit_rss_body");
-               gen.setLimitRssEntry(s != null && s.equals("true"));
-               
-               Element custTags = genElement.getChild("CustomTags");
-               if(custTags == null)return;
-               Iterator itr = custTags.getChildren().iterator();               
-               while(itr.hasNext()) 
-               {
-                       Element e = (Element)itr.next();
-                       if(e.getName().equals("Tag"))
-                       {
-                               String name = e.getAttributeValue("name");
-                               if(name == null)
-                                       continue;
-                               String value = e.getText();
-                               CustomTag tag = new CustomTag(name, value);
-                               gen.addCustomTag(tag);  
-                       }
-               }               
-       }
-       
-       
-       
-       private static void loadPingServicesFromXML(Element parent, Weblog blog)
-       {
-               Element services = parent.getChild("PingServices");
-               if(services == null)
-                       services = new Element("PingServices");
-                       
-               Iterator itr = (services.getChildren()).iterator();
-               while(itr.hasNext()) 
-               {
-                       Element service = (Element)itr.next();
-                       if(service.getName().equals("WeblogsDotComPing"))
-                       {
-                               WeblogsDotComPing ping = new 
WeblogsDotComPing();
-                               
ping.setServiceUrl(service.getAttributeValue("url"));
-                               
ping.setServiceName(service.getAttributeValue("name"));
-                               
ping.setEnabled(service.getAttributeValue("enabled", "true").equals("true"));
-                               blog.addPingService(ping);                
-                       }
-               }
-       }
+        tb.setGenerateRssFeed(element.getAttributeValue("gen_rss", 
"true").equals("true"));
+        tb.setGenerateArchiveIndex(element.getAttributeValue("gen_arc_index", 
"true").equals("true"));
+        tb.setGenerateEntryPages(element.getAttributeValue("gen_entries", 
"false").equals("true"));
+        
+        tb.setLocale(createLocale(element.getAttributeValue("locale", 
Locale.getDefault().toString())));
+        tb.setPublishAll(element.getAttributeValue("publish_all", 
"true").equals("true"));
+        tb.setType(element.getAttributeValue("type").toString());
+        
+        int arcPolicy = TBWeblog.ARCHIVE_MONTHLY;
+        int dayInterval = 5;
+        Date arcBaseDate = new Date(0);
+        try {
+            arcPolicy = Integer.parseInt(
+                    element.getAttributeValue("arc_policy", 
Integer.toString(TBWeblog.ARCHIVE_MONTHLY)));
+            dayInterval = 
Integer.parseInt(element.getAttributeValue("day_interval", "5"));
+            long time = Long.parseLong(element.getAttributeValue("base_date"));
+            arcBaseDate = new Date(time);
+        } catch(Exception ex){}
+        tb.setArchivePolicy(arcPolicy);
+        tb.setArchiveByDayInterval(dayInterval);
+        tb.setArchiveBaseDate(arcBaseDate);
+        
+        //load outdated archives from xml
+        Element outdatedArcs = element.getChild("OutdatedArchives");
+        if(outdatedArcs != null) {
+            Iterator itr = (outdatedArcs.getChildren()).iterator();
+            while(itr.hasNext()) {
+                Date start = new Date();
+                Date exp = new Date();
+                Element e = (Element)itr.next();
+                if(e.getName().equals("Archive")) {
+                    try {
+                        long d1 = Long.parseLong(e.getAttributeValue("start"));
+                        long d2 = Long.parseLong(e.getAttributeValue("end"));
+                        start.setTime(d1);
+                        exp.setTime(d2);
+                        tb.addOutdatedArchive(new ArchiveRange(start, exp));
+                    } catch(Exception ex){}
+                }
+            }
+        }
+        
+        //load outdated cats from xml
+        Element outdatedCats = element.getChild("OutdatedCategories");
+        if(outdatedCats != null) {
+            Iterator itr = (outdatedCats.getChildren()).iterator();
+            while(itr.hasNext()) {
+                Element e = (Element)itr.next();
+                if(e.getName().equals("Category")) {
+                    tb.addOutdatedCategory(e.getText());
+                }
+            }
+        }
+        
+        //load outdated entries from xml
+        Element outdatedEnts = element.getChild("OutdatedEntries");
+        if(outdatedEnts != null) {
+            Iterator itr = (outdatedEnts.getChildren()).iterator();
+            while(itr.hasNext()) {
+                Element e = (Element)itr.next();
+                if(e.getName().equals("Entry")) {
+                    try{
+                        long id = Long.parseLong(e.getText());
+                        tb.addOutdatedEntryID(new Long(id));
+                    }catch(Exception ex){}
+                }
+            }
+        }
+        
+        loadGeneratorSettingsFromXML(tb, element);
+        return tb;
+    }

-    private static void loadEmailSettingsFromXML(Element parent, Weblog blog)
-    {
+    private static void loadGeneratorSettingsFromXML(TBWeblog tbw, Element 
element) {
+        //set up the page generator defaults
+        PageGenerator gen = tbw.getPageGenerator();
+        Element genElement = element.getChild("Generator");
+        if(genElement == null)
+            return;
+        
+        gen.setCharset(genElement.getAttributeValue("charset", "UTF-8"));
+        gen.setDateFormat(genElement.getAttributeValue("date_format"));
+        gen.setTimeFormat(genElement.getAttributeValue("time_format"));
+        String s = genElement.getAttributeValue("span_range");
+        boolean span = s != null && s.equals("true");
+        
gen.setArchiveRangeFormat(genElement.getAttributeValue("range_format"), span);
+        s = genElement.getAttributeValue("front_asc");
+        gen.setFrontPageAscending(s != null && s.equals("true"));
+        s = genElement.getAttributeValue("arc_asc");
+        gen.setArchivePageAscending(s != null && s.equals("true"));
+        s = genElement.getAttributeValue("cat_asc");
+        gen.setCategoryPageAscending(s != null && s.equals("true"));
+        
+        int fpLimit = 10;
+        int catLimit = 20;
+        try {
+            fpLimit = 
Integer.parseInt(genElement.getAttributeValue("front_page_limit"));
+            catLimit = 
Integer.parseInt(genElement.getAttributeValue("cat_page_limit"));
+        } catch(Exception ex){}
+        
+        gen.setLimitFrontPage(genElement.getAttributeValue("limit_front", 
"true").equals("true"));
+        gen.setFrontPageLimit(fpLimit);
+        gen.setLimitCategoryPage(genElement.getAttributeValue("limit_cat", 
"true").equals("true"));
+        gen.setCategoryPageLimit(catLimit);
+        s = genElement.getAttributeValue("limit_rss_body");
+        gen.setLimitRssEntry(s != null && s.equals("true"));
+        
+        Element custTags = genElement.getChild("CustomTags");
+        if(custTags == null)return;
+        Iterator itr = custTags.getChildren().iterator();
+        while(itr.hasNext()) {
+            Element e = (Element)itr.next();
+            if(e.getName().equals("Tag")) {
+                String name = e.getAttributeValue("name");
+                if(name == null)
+                    continue;
+                String value = e.getText();
+                CustomTag tag = new CustomTag(name, value);
+                gen.addCustomTag(tag);
+            }
+        }
+    }
+    
+    
+    
+    private static void loadPingServicesFromXML(Element parent, Weblog blog) {
+        Element services = parent.getChild("PingServices");
+        if(services == null)
+            services = new Element("PingServices");
+        
+        Iterator itr = (services.getChildren()).iterator();
+        while(itr.hasNext()) {
+            Element service = (Element)itr.next();
+            if(service.getName().equals("WeblogsDotComPing")) {
+                WeblogsDotComPing ping = new WeblogsDotComPing();
+                ping.setServiceUrl(service.getAttributeValue("url"));
+                ping.setServiceName(service.getAttributeValue("name"));
+                ping.setEnabled(service.getAttributeValue("enabled", 
"true").equals("true"));
+                blog.addPingService(ping);
+            }
+        }
+    }
+    
+    private static void loadEmailSettingsFromXML(Element parent, Weblog blog) {
         Element mailSettings = parent.getChild("MailSettings");
         if(mailSettings == null)
             return;
@@ -762,126 +694,102 @@
         configureRemoteTransport(blog.getMailTransport(), transport, 110);
     }

-    private static int parseInt(String intStr, int defaultVal)
-    {
-        try
-        {
+    private static int parseInt(String intStr, int defaultVal) {
+        try {
             defaultVal = Integer.parseInt(intStr);
-        }
-        catch(Exception ex){}
+        } catch(Exception ex){}

         return defaultVal;
     }

-    private static Date parseDate(String epocString)
-    {
+    private static Date parseDate(String epocString) {
         long d = 0;
-        try
-        {
+        try {
             d = Long.parseLong(epocString);
-        }
-        catch(Exception ex){}
+        } catch(Exception ex){}

         return new Date(d);
     }
-       
-       private static Locale createLocale(String str)
-       {               
-               Vector v = new Vector();
-               if(str != null)
-               {               
-                       StringTokenizer st = new StringTokenizer(str, "_");
-                       while (st.hasMoreTokens()) 
-                       {
-                               v.add(st.nextToken());                   
-                       }
-               }
-               
-               Locale loc = Locale.getDefault();
-               if(v.size() == 3)
-                       loc = new Locale(v.elementAt(0).toString(), 
-                               v.elementAt(1).toString(), 
v.elementAt(2).toString());
-               else if(v.size() == 2)
-                       loc = new Locale(v.elementAt(0).toString(), 
-                               v.elementAt(1).toString());
-               else if(v.size() == 1)
-                   loc = new Locale(v.elementAt(0).toString());
-               
-               return loc;             
-       }
-       
-       private static PublishTransport loadPublishTransportFromXML(Element 
parent)
-       {
-               Element transport = parent.getChild("Transport");
-               if(transport == null)
-                       transport = new Element("Transport");           
-               PublishTransport pubTransport = null;
-               String type = transport.getAttributeValue("type", "local");
-               
-               if(type.equals("ftp") || type.equals("sftp"))
-               {
-                       RemotePublishTransport rtp = null;
-                       int port = 22;
-                       if(type.equals("ftp"))
-                       {
-                               FTPTransport ftp = new FTPTransport();
-                               
ftp.setPassiveMode(transport.getAttributeValue("passive", 
"true").equals("true"));
-                               Element asciiElem = 
transport.getChild("ASCIITypes");
+    
+    private static Locale createLocale(String str) {
+        Vector v = new Vector();
+        if(str != null) {
+            StringTokenizer st = new StringTokenizer(str, "_");
+            while (st.hasMoreTokens()) {
+                v.add(st.nextToken());
+            }
+        }
+        
+        Locale loc = Locale.getDefault();
+        if(v.size() == 3)
+            loc = new Locale(v.elementAt(0).toString(),
+                    v.elementAt(1).toString(), v.elementAt(2).toString());
+        else if(v.size() == 2)
+            loc = new Locale(v.elementAt(0).toString(),
+                    v.elementAt(1).toString());
+        else if(v.size() == 1)
+            loc = new Locale(v.elementAt(0).toString());
+        
+        return loc;
+    }
+    
+    private static PublishTransport loadPublishTransportFromXML(Element 
parent) {
+        Element transport = parent.getChild("Transport");
+        if(transport == null)
+            transport = new Element("Transport");
+        PublishTransport pubTransport = null;
+        String type = transport.getAttributeValue("type", "local");
+        
+        if(type.equals("ftp") || type.equals("sftp")) {
+            RemotePublishTransport rtp = null;
+            int port = 22;
+            if(type.equals("ftp")) {
+                FTPTransport ftp = new FTPTransport();
+                ftp.setPassiveMode(transport.getAttributeValue("passive", 
"true").equals("true"));
+                Element asciiElem = transport.getChild("ASCIITypes");
                 ArrayList lst = new ArrayList();
-                if(asciiElem == null)
-                {                    
+                if(asciiElem == null) {
                     lst.add("cgi");
                     lst.add("pl");
                     lst.add("php");
-                    lst.add("asp");                    
-                }
-                else
-                {
+                    lst.add("asp");
+                } else {
                     List ch = asciiElem.getChildren();
-                    for(int i = 0; i < ch.size(); i++)
-                    {
+                    for(int i = 0; i < ch.size(); i++) {
                         Element e = (Element)ch.get(i);
                         if(e.getName() == "ext");
-                            lst.add(e.getText());
+                        lst.add(e.getText());
                     }

                 }
                 ftp.setASCIIExtentions(lst);
                 rtp = ftp;
-                               port = 21;
-                       }
-                       else
-                               rtp = new SFTPTransport();
-                       
-                       configureRemoteTransport(rtp, transport, port);
-                       pubTransport = rtp;
-               }
-               else            
-                       pubTransport = new LocalTransport();
-               
-               return pubTransport;
-       }
+                port = 21;
+            } else
+                rtp = new SFTPTransport();
+            
+            configureRemoteTransport(rtp, transport, port);
+            pubTransport = rtp;
+        } else
+            pubTransport = new LocalTransport();
+        
+        return pubTransport;
+    }

-    private static void configureRemoteTransport(RemoteTransport rtp, Element 
transport, int defaultPort)
-    {        
-        try
-        {
+    private static void configureRemoteTransport(RemoteTransport rtp, Element 
transport, int defaultPort) {
+        try {
             defaultPort = 
Integer.parseInt(transport.getAttributeValue("port"));
         }catch(Exception ex){}

-        rtp.setPort(defaultPort);                  
+        rtp.setPort(defaultPort);
         rtp.setAddress(transport.getAttributeValue("server"));
         rtp.setUserName(transport.getAttributeValue("user"));
-        String password = transport.getAttributeValue("password");          
+        String password = transport.getAttributeValue("password");
         rtp.setSavePassword(password != null);
-        if(rtp.isSavePassword())
-        {
-            try
-            {
+        if(rtp.isSavePassword()) {
+            try {
                 password = PasswordUtil.decrypt(password, PasswordUtil.KEY);
-            }
-            catch(Exception ex)
-            {
+            } catch(Exception ex) {
                 password = "";
             }
             rtp.setPassword(password);


Reply via email to