[freenet-cvs] r17693 - in trunk/apps/thingamablog/src/net/sf/thingamablog: blog gui/properties xml

dieppe at freenetproject.org dieppe at freenetproject.org
Fri Feb 8 01:25:30 UTC 2008


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);




More information about the cvs mailing list