On Friday 08 February 2008 14:45, you wrote:
> In future, please keep indenting and functional changes in separate commits. 
> This makes it much easier to read the commits. Thanks.

In fact .. it's going to be make the process of applying patches from upstream 
significantly more convoluted. I suggest you revert the whole patch and try 
again without the indenting changes.
> 
> On Friday 08 February 2008 01:25, you wrote:
> > 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);
> > 
> > _______________________________________________
> > cvs mailing list
> > cvs at freenetproject.org
> > http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs
> > 
> > 
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: 
<https://emu.freenetproject.org/pipermail/devl/attachments/20080208/4d04b540/attachment.pgp>

Reply via email to