Author: dieppe
Date: 2008-02-19 20:28:19 +0000 (Tue, 19 Feb 2008)
New Revision: 18078

Added:
   
trunk/apps/thingamablog/src/net/sf/thingamablog/transport/DefaultMIMETypes.java
   trunk/apps/thingamablog/src/net/sf/thingamablog/transport/FCPTransport.java
Modified:
   trunk/apps/thingamablog/src/net/sf/thingamablog/blog/TBWeblog.java
   trunk/apps/thingamablog/src/net/sf/thingamablog/blog/Weblog.java
   
trunk/apps/thingamablog/src/net/sf/thingamablog/gui/app/ThingamablogFrame.java
   
trunk/apps/thingamablog/src/net/sf/thingamablog/gui/properties/TBPublishTransportPanel.java
   
trunk/apps/thingamablog/src/net/sf/thingamablog/gui/properties/TBWeblogPropertiesDialog.java
   
trunk/apps/thingamablog/src/net/sf/thingamablog/gui/properties/TBWizardDialog.java
   
trunk/apps/thingamablog/src/net/sf/thingamablog/util/freenet/fcp/ClientPutComplexDir.java
   
trunk/apps/thingamablog/src/net/sf/thingamablog/util/freenet/fcp/fcpManager.java
   trunk/apps/thingamablog/src/net/sf/thingamablog/xml/TBPersistFactory.java
Log:
Thingamablog *should* be able to insert flog now. There are still problems 
(for example, the css is not inserted, don't know why yet), so it's not 
functionnal yet.



Modified: trunk/apps/thingamablog/src/net/sf/thingamablog/blog/TBWeblog.java
===================================================================
--- trunk/apps/thingamablog/src/net/sf/thingamablog/blog/TBWeblog.java  
2008-02-19 18:18:30 UTC (rev 18077)
+++ trunk/apps/thingamablog/src/net/sf/thingamablog/blog/TBWeblog.java  
2008-02-19 20:28:19 UTC (rev 18078)
@@ -39,6 +39,7 @@
 import net.atlanticbb.tantlinger.i18n.I18n;
 import net.atlanticbb.tantlinger.io.IOUtils;
 import net.sf.thingamablog.generator.PageGenerator;
+import net.sf.thingamablog.transport.FCPTransport;


 /**
@@ -91,10 +92,6 @@

         // Should be internet or freenet
         private String type;
-        // If type == freenet, then insertURI is set to the insertURI of the 
flog, else, set to null
-        private String insertURI;
-        // Number of the current edition (flog only)
-        private String edition="0";

        //private Vector outdatedTopLevelPages = new Vector();
        private Vector outdatedCategoryPages = new Vector();
@@ -146,6 +143,24 @@
                key = System.currentTimeMillis() + "";
                init(dir);
        }
+                
+       public void publish(PublishProgress progress) throws BackendException
+       {
+            if(!(getPublishTransport() instanceof FCPTransport)){
+                super.publish(progress);
+            } else {
+                super.doFlogPublish(progress);
+            }
+       }
+        
+        public void publishAll(PublishProgress progress) throws 
BackendException
+       {
+            if(!(getPublishTransport() instanceof FCPTransport)){
+                super.publishAll(progress);
+            } else {
+                super.doFlogPublish(progress);
+            }
+       }

        private void init(File dir)
        {               
@@ -1408,20 +1423,5 @@
     public String getType() {
         return this.type;
     }
-
-    public void setInsertURI(String insertURI) {
-        this.insertURI = insertURI;
-    }

-    public String getInsertUri() {
-        return this.insertURI;
-    }
-    
-    public void setEdition(String edition){
-        this.edition=edition;
-    }
-    
-    public String getEdition(){
-        return this.edition;
-    }
 }

Modified: trunk/apps/thingamablog/src/net/sf/thingamablog/blog/Weblog.java
===================================================================
--- trunk/apps/thingamablog/src/net/sf/thingamablog/blog/Weblog.java    
2008-02-19 18:18:30 UTC (rev 18077)
+++ trunk/apps/thingamablog/src/net/sf/thingamablog/blog/Weblog.java    
2008-02-19 20:28:19 UTC (rev 18078)
@@ -35,6 +35,7 @@
 import java.util.logging.Logger;

 import net.sf.thingamablog.transport.EMailTransport;
+import net.sf.thingamablog.transport.FCPTransport;
 import net.sf.thingamablog.transport.LocalTransport;
 import net.sf.thingamablog.transport.MailTransportProgress;
 import net.sf.thingamablog.transport.PublishTransport;
@@ -81,9 +82,6 @@

        /** The home directory of the web files */
        protected  File webFilesDirectory = new 
File(System.getProperty("user.home"));
-        
-        /** The type of the weblog (f/blog) */
-        protected String type;

        private Date lastEmailCheck = new Date();
     private int outdatedAfterMinutes = 30;
@@ -356,6 +354,80 @@
                System.out.println("PUBLISH COMPLETE");                         
        }

+        public synchronized void doFlogPublish(PublishProgress progress) 
throws BackendException
+        {            
+            if(isPublishing())
+                return;
+            isPublishing = true;
+            publishFailed = false;
+        
+            Hashtable ht = null;
+                try
+               {               
+                       ht = weblogFiles(true);
+               }
+                catch (IOException ioe)
+               {
+                       isPublishing = false;
+                       publishFailed = true;
+                       progress.publishFailed("Error building pages: " + 
ioe.getLocalizedMessage());
+                       return;
+               }
+            markWebFilesAsUpdated();
+            File webFiles[] = getUpdatedWebFiles();
+            long totalBytes = 0;                               
+            //count the total bytes for this publish
+            for(int i = 0; i < webFiles.length; i++)
+            totalBytes += webFiles[i].length();
+            for(Enumeration e = ht.keys() ; e.hasMoreElements() ;) 
+            {
+                    try
+                    {
+                        File f = (File)e.nextElement();
+                        totalBytes += f.length();
+                    }   
+                    catch(ClassCastException cce){}
+            }
+               
+            progress.publishStarted(totalBytes);
+        
+            if(!transport.connect())
+            {
+                isPublishing = false;
+                publishFailed = true;
+                publishComplete(ht, true);
+                progress.publishFailed(transport.getFailureReason());
+                return;
+            }            
+            //publish weblog files, if any
+            boolean failed = false;
+            //we are publishing a flog with fcp
+            FCPTransport fcp = (FCPTransport) transport;
+            boolean result = fcp.publishFile(ht,progress);
+            if(!result)
+                               {
+                                       
//progress.publishFailed(transport.getFailureReason());
+                                       failed = true;                          
        
+                               }            
+            if(transport.isConnected())
+            transport.disconnect();
+            
+            if(!failed)
+            {                  
+               progress.publishCompleted();//publish completed okay
+               lastPublishDate = new Date();                   
+            }
+            else
+            {
+               if(!progress.isAborted())
+                   progress.publishFailed(transport.getFailureReason());
+            }                  
+            publishFailed = failed && !progress.isAborted();
+            publishComplete(ht, failed);
+            isPublishing = false;
+            System.out.println("PUBLISH COMPLETE");    
+        }
+        
        private boolean publishWebFiles(File webFiles[], PublishProgress 
progress)
        {
                String webPaths[] = getWebFilesServerPaths(webFiles);
@@ -1331,12 +1403,4 @@
     {
         lastEmailCheck = d;
     }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-    
-    public String getType() {
-        return this.type;
-    }
 }

Modified: 
trunk/apps/thingamablog/src/net/sf/thingamablog/gui/app/ThingamablogFrame.java
===================================================================
--- 
trunk/apps/thingamablog/src/net/sf/thingamablog/gui/app/ThingamablogFrame.java  
    2008-02-19 18:18:30 UTC (rev 18077)
+++ 
trunk/apps/thingamablog/src/net/sf/thingamablog/gui/app/ThingamablogFrame.java  
    2008-02-19 20:28:19 UTC (rev 18078)
@@ -3491,7 +3491,9 @@
                {
                        if(curSelWeblog != null)
                        {
-                            if(curSelWeblog.getType().equals("internet")){
+                            if(curSelWeblog instanceof TBWeblog){
+                                TBWeblog tb = (TBWeblog) curSelWeblog;
+                                if(tb.getType().equals("internet")){
                                try
                                {                               
                                        
//Browser.displayURL(curSelWeblog.getFrontPageUrl());
@@ -3515,6 +3517,18 @@
                                     logger.log(Level.WARNING, ex.getMessage(), 
ex);
                                 }
                             }
+                            }else{
+                                try
+                               {                               
+                                       
//Browser.displayURL(curSelWeblog.getFrontPageUrl());
+                    Desktop.browse(new URL(curSelWeblog.getFrontPageUrl()));
+                               }
+                               catch(Exception ex)
+                               {
+                                       ex.printStackTrace();
+                                       logger.log(Level.WARNING, 
ex.getMessage(), ex);
+                               }
+                            }
                        }
                }
        }

Modified: 
trunk/apps/thingamablog/src/net/sf/thingamablog/gui/properties/TBPublishTransportPanel.java
===================================================================
--- 
trunk/apps/thingamablog/src/net/sf/thingamablog/gui/properties/TBPublishTransportPanel.java
 2008-02-19 18:18:30 UTC (rev 18077)
+++ 
trunk/apps/thingamablog/src/net/sf/thingamablog/gui/properties/TBPublishTransportPanel.java
 2008-02-19 20:28:19 UTC (rev 18078)
@@ -28,6 +28,8 @@
 import java.awt.FlowLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
 import java.nio.charset.Charset;
 import java.util.Iterator;
 import java.util.SortedMap;
@@ -45,6 +47,7 @@
 import net.atlanticbb.tantlinger.ui.text.TextEditPopupManager;
 import net.sf.thingamablog.blog.TBWeblog;
 import net.sf.thingamablog.gui.LabelledItemPanel;
+import net.sf.thingamablog.transport.FCPTransport;
 import net.sf.thingamablog.transport.FTPTransport;
 import net.sf.thingamablog.transport.LocalTransport;
 import net.sf.thingamablog.transport.PublishTransport;
@@ -69,6 +72,7 @@
        private final String SFTP = "SFTP"; //$NON-NLS-1$
        private final String LOCAL = "Local"; //$NON-NLS-1$
         private final String FCP = "FCP";
+        private String InsertURI;

        private TBWeblog weblog;
        private JComboBox encodingsCombo;
@@ -82,15 +86,15 @@
     private JTabbedPane ftpTabs = new JTabbedPane();
     private ASCIIPanel asciiPanel = new ASCIIPanel();

-       public TBPublishTransportPanel(TBWeblog wb)
+       public TBPublishTransportPanel(TBWeblog wb, String InsertURI)
        {
                weblog = wb;
                 String types[];
                 tLayout = new CardLayout();
                 // If we are currently building a blog, the publish process 
can be FTP, SFTP, or LOCAL
-                if (weblog.getType().toString().equals("internet")) {
+                if (weblog.getType().toString().equals("internet")) {          
          
                     types=new String[3];
-                    types[0]="LOCAL";
+                    types[0]="Local";
                     types[1]="FTP";
                     types[2]="SFTP";                    
                     ftpPanel = new RemoteTransportPanel(true);
@@ -105,8 +109,15 @@
                  }
                 // Else, we are building a flog, and the transport process is 
LOCAL or FCP
                 else {
+                    // The InsertURI parameter is here only for the 
TBWizardDialog process (yes I know, it's quite ugly)
+                    if(weblog.getPublishTransport()==null || 
weblog.getPublishTransport() instanceof LocalTransport){
+                        this.InsertURI=InsertURI;
+                    } else {
+                        FCPTransport fcp = (FCPTransport) 
weblog.getPublishTransport();
+                        this.InsertURI=fcp.getInsertURI();
+                    }
                     types=new String[2];
-                    types[0]="LOCAL";
+                    types[0]="Local";
                     types[1]="FCP";                    
                     fcpPanel = new FcpTransportPanel();
                     fcpPanel.setBorder(new 
TitledBorder(i18n.str("fcp_transport")));
@@ -168,6 +179,10 @@
                        transportTypeCombo.setSelectedItem(LOCAL);
                        tLayout.show(transportsPanel, LOCAL);
                } else {
+                        FCPTransport t =(FCPTransport)wb.getPublishTransport();
+                        fcpPanel.setMachineNameField(t.getHostname());
+                        fcpPanel.setPortField(Integer.parseInt(t.getPort()));
+                        fcpPanel.setTitle(wb.getTitle());
                         transportTypeCombo.setSelectedItem(FCP);
                         tLayout.show(transportsPanel, FCP);
                 }
@@ -235,9 +250,21 @@
                {
                        transport = new LocalTransport();
                } else {
-//                        FCPTransport pt = new FCPTransport();
-//                        pt.setPort(fcpPanel.getPort());
-//                        pt.setMachineName(fcpPanel.getMachineName());
+                        FCPTransport pt = new FCPTransport();
+                        
pt.setNode(fcpPanel.getMachineNameField(),fcpPanel.getPortField());
+                        pt.setInsertURI(InsertURI);
+                        pt.setEdition("1");
+                        pt.setTitle(fcpPanel.getTitle());
+                        if(weblog.getPublishTransport() == null || 
weblog.getPublishTransport() instanceof LocalTransport){
+                            String url = weblog.getBaseUrl();
+                            if(!url.endsWith("/"))
+                               url += "/";;
+                            url += fcpPanel.getTitle() + "/1/";
+                            String arcUrl = url;
+                            String mediaUrl = url;                            
+                            weblog.setBlogUrls(weblog.getBasePath(), url, 
arcUrl, mediaUrl);
+                        }
+                        transport = pt;
                 }

                weblog.setPublishTransport(transport);
@@ -254,6 +281,8 @@
                return validateOptions(ftpPanel);
         if(o == SFTP)
                return validateOptions(sftpPanel);
+        if(o == FCP)
+            return validateOptions(fcpPanel);

         return true;
     }
@@ -270,6 +299,16 @@
                return true;
     }

+    private boolean validateOptions(FcpTransportPanel fcp)
+    {
+        if (fcp.getTitle().contains("/")) {
+            JOptionPane.showMessageDialog(TBPublishTransportPanel.this, 
+               i18n.str("invalid_title_prompt_contains_slash"), 
i18n.str("title"), JOptionPane.WARNING_MESSAGE); //$NON-NLS-1$ //$NON-NLS-2$
+            return false;
+        }
+        return true;
+    }
+    
     private class RemoteTransportPanel extends JPanel
     {
        /**
@@ -425,10 +464,12 @@
                 private static final long serialVersionUID = 1L;               
                private JTextField portField;
                private JTextField machineNameField;
+                private JTextField titleField;
                public FcpTransportPanel()
                {
                         portField = new JTextField();
                         machineNameField = new JTextField();
+                        titleField = new JTextField();

                        TextEditPopupManager pm = 
TextEditPopupManager.getInstance();
                        pm.registerJTextComponent(machineNameField);
@@ -443,6 +484,7 @@
                        p.add(new JPanel(), BorderLayout.CENTER);
                        lip.addItem(i18n.str("port"), p);
                         lip.addItem(i18n.str("machineName"),machineNameField);
+                        lip.addItem(i18n.str("freesite_path"),titleField);
                        setLayout(new BorderLayout());
                        add(lip, BorderLayout.CENTER);  
                }
@@ -467,6 +509,14 @@
         public void setMachineNameField(String machineNameField) {
             this.machineNameField.setText(machineNameField);
         }
+        
+        public void setTitle(String title){
+            this.titleField.setText(title);
+        }
+        
+        public String getTitle(){
+            return this.titleField.getText();
+        } 

     }
 }
\ No newline at end of file

Modified: 
trunk/apps/thingamablog/src/net/sf/thingamablog/gui/properties/TBWeblogPropertiesDialog.java
===================================================================
--- 
trunk/apps/thingamablog/src/net/sf/thingamablog/gui/properties/TBWeblogPropertiesDialog.java
        2008-02-19 18:18:30 UTC (rev 18077)
+++ 
trunk/apps/thingamablog/src/net/sf/thingamablog/gui/properties/TBWeblogPropertiesDialog.java
        2008-02-19 20:28:19 UTC (rev 18078)
@@ -85,7 +85,7 @@
         opts.add(new DialogPanel(new TBTemplatesPanel(tbw), 
i18n.str("templates"))); //$NON-NLS-1$
         opts.add(new DialogPanel(new TBEmailPanel(tbw), i18n.str("email"))); 
//$NON-NLS-1$
         opts.add(new DialogPanel(new XmlRpcPingPanel(tbw), 
i18n.str("pinging")));               //$NON-NLS-1$
-               opts.add(new DialogPanel(new TBPublishTransportPanel(tbw), 
i18n.str("publishing"))); //$NON-NLS-1$
+               opts.add(new DialogPanel(new TBPublishTransportPanel(tbw,null), 
i18n.str("publishing"))); //$NON-NLS-1$

                optionPanel = new JPanel(optionLayout);
                for(int i = 0; i < opts.size(); i++)

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-19 18:18:30 UTC (rev 18077)
+++ 
trunk/apps/thingamablog/src/net/sf/thingamablog/gui/properties/TBWizardDialog.java
  2008-02-19 20:28:19 UTC (rev 18078)
@@ -92,6 +92,8 @@
        private TextEditPopupManager popupManager = 
TextEditPopupManager.getInstance();

     private TemplatePack selectedPack;
+    
+        private String InsertURI;

        public TBWizardDialog(Frame f, File dir, WeblogBackend backend)
        {
@@ -360,6 +362,7 @@
                         typeCombo.addActionListener(listener);
                         generateKeyButton.addActionListener(listener);
                         generateKeyButton.setEnabled(false);
+                        insertUriField.setEditable(false);

                        LabelledItemPanel lip = new LabelledItemPanel();
                        lip.addItem(i18n.str("base_path"), pathField); 
//$NON-NLS-1$
@@ -413,6 +416,12 @@
                 boolean valid = true;        
                 valid = valid && isValidSSK(urlField.getText());
                 valid = valid && isValidSSK(insertUriField.getText());
+                if (pathField.getText().contains("/")) {
+                    JOptionPane.showMessageDialog(TBWizardDialog.this,
+                                    i18n.str("invalid_path_prompt"), 
i18n.str("invalid_path"),  //$NON-NLS-1$ //$NON-NLS-2$
+                                    JOptionPane.WARNING_MESSAGE);
+                    valid = false;
+                }
                 return valid;
             } else {
                 insertUriField.setText("none");                
@@ -436,13 +445,7 @@

                        weblog.setBlogUrls(path, url, arcUrl, mediaUrl);
                         weblog.setType(typeCombo.getSelectedItem().toString());
-                        if(weblog.getType().equals("freenet")){
-                            weblog.setInsertURI(insertUriField.getText());
-                            weblog.setEdition("1");
-                        } else {
-                            weblog.setInsertURI("noflog");
-                            weblog.setEdition("noflog");
-                        }
+                        InsertURI=insertUriField.getText();
                }

                 private class TypeListener implements ActionListener {
@@ -464,12 +467,15 @@
                                     keys=Manager.generateKeyPair();
                                 } catch (IOException ex) {                     
               
                                     
JOptionPane.showMessageDialog(TBWizardDialog.this,
-                                    hostname + " : " + port + " : " + ex, 
i18n.str("key_generation_failure"),  //$NON-NLS-1$ //$NON-NLS-2$
+                                    hostname + ":" + port + " : " + ex, 
i18n.str("key_generation_failure"),  //$NON-NLS-1$ //$NON-NLS-2$
                                     JOptionPane.ERROR_MESSAGE);
                                     return;
                                 }
-                            insertUriField.setText(keys[0]);
-                            urlField.setText(keys[1]);
+                            // We put "USK" instead of "SSK"
+                            keys[0] = keys[0].substring("SSK".length());
+                            keys[1] = keys[1].substring("SSK".length());
+                            insertUriField.setText("USK" + keys[0]);
+                            urlField.setText("USK" + keys[1]);
                             generateKeyButton.setText(i18n.str("cancel"));
                         } else {
                             urlField.setText("");
@@ -726,7 +732,7 @@
                        instrPanel.add(header, BorderLayout.NORTH);
                        instrPanel.add(new MultilineText(text), 
BorderLayout.CENTER);

-                       pubPanel = new TBPublishTransportPanel(weblog);
+                       pubPanel = new 
TBPublishTransportPanel(weblog,InsertURI);
                        add(instrPanel, BorderLayout.NORTH);
                        add(pubPanel, BorderLayout.CENTER);                     
                                
                }

Added: 
trunk/apps/thingamablog/src/net/sf/thingamablog/transport/DefaultMIMETypes.java
===================================================================
--- 
trunk/apps/thingamablog/src/net/sf/thingamablog/transport/DefaultMIMETypes.java 
                            (rev 0)
+++ 
trunk/apps/thingamablog/src/net/sf/thingamablog/transport/DefaultMIMETypes.java 
    2008-02-19 20:28:19 UTC (rev 18078)
@@ -0,0 +1,785 @@
+package net.sf.thingamablog.transport;
+
+import java.util.HashMap;
+import java.util.Vector;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Holds the default MIME types.
+ */
+public class DefaultMIMETypes {
+
+       /** Default MIME type - what to set it to if we don't know any better */
+       public static final String DEFAULT_MIME_TYPE = 
"application/octet-stream";
+
+       /** MIME types: number -> name */
+       private static final Vector mimeTypesByNumber = new Vector();
+
+       /** MIME types: name -> number */
+       private static final HashMap mimeTypesByName = new HashMap();
+
+       /** MIME types by extension. One extension maps to one MIME type, but 
not necessarily
+        * the other way around. */
+       private static final HashMap mimeTypesByExtension = new HashMap();
+
+       /** Primary extension by MIME type number. */
+       private static final HashMap primaryExtensionByMimeNumber = new 
HashMap();
+        
+        private static Logger logger = 
Logger.getLogger("net.sf.thingamablog.transport");
+
+       /**
+        * Just to be able to use thaw.core.Logger.
+        */
+       public DefaultMIMETypes() {
+
+       }
+
+
+       /**
+        * Add a MIME type, without any extensions.
+        * @param number The number of the MIME type for compression. This 
*must not change*
+        * for a given type, or the metadata format will be affected.
+        * @param type The actual MIME type string. Do not include ;charset= 
etc; these are
+        * parameters and there is a separate mechanism for them.
+        */
+       protected static synchronized void addMIMEType(final short number, 
final String type) {
+               if(DefaultMIMETypes.mimeTypesByNumber.size() > number) {
+                       final String s = (String) 
DefaultMIMETypes.mimeTypesByNumber.get(number);
+                       if(s != null) throw new 
IllegalArgumentException("Already used: "+number);
+               } else {
+                       DefaultMIMETypes.mimeTypesByNumber.add(number, null);
+               }
+               DefaultMIMETypes.mimeTypesByNumber.set(number, type);
+               DefaultMIMETypes.mimeTypesByName.put(type, new Short(number));
+       }
+
+       /**
+        * Add a MIME type.
+        * @param number The number of the MIME type for compression. This 
*must not change*
+        * for a given type, or the metadata format will be affected.
+        * @param type The actual MIME type string. Do not include ;charset= 
etc; these are
+        * parameters and there is a separate mechanism for them.
+        * @param extensions An array of common extensions for files of this 
type. Must be
+        * unique for the type.
+        */
+       protected static synchronized void addMIMEType(final short number, 
final String type, final String[] extensions, final String outExtension) {
+               DefaultMIMETypes.addMIMEType(number, type);
+               final Short t = new Short(number);
+               if(extensions != null) {
+                       for(int i=0;i<extensions.length;i++) {
+                               final String ext = extensions[i].toLowerCase();
+                               
if(DefaultMIMETypes.mimeTypesByExtension.containsKey(ext)) {
+                                       // No big deal
+                                       final Short s = (Short) 
DefaultMIMETypes.mimeTypesByExtension.get(ext);
+                                       logger.log(Level.INFO, "Extension 
"+ext+" assigned to "+DefaultMIMETypes.byNumber(s.shortValue())+" in preference 
to "+number+":"+type);
+                               } else {
+                                       // If only one, make it primary
+                                       if((outExtension == null) && 
(extensions.length == 1))
+                                               
DefaultMIMETypes.primaryExtensionByMimeNumber.put(t, ext);
+                                       
DefaultMIMETypes.mimeTypesByExtension.put(ext, t);
+                               }
+                       }
+               }
+               if(outExtension != null)
+                       DefaultMIMETypes.primaryExtensionByMimeNumber.put(t, 
outExtension);
+
+       }
+
+       /**
+        * Add a MIME type, with extensions separated by spaces. This is more 
or less
+        * the format in /etc/mime-types.
+        */
+       protected static synchronized void addMIMEType(final short number, 
final String type, final String extensions) {
+               DefaultMIMETypes.addMIMEType(number, type, extensions.split(" 
"), null);
+       }
+
+       /**
+        * Add a MIME type, with extensions separated by spaces. This is more 
or less
+        * the format in /etc/mime-types.
+        */
+       protected static synchronized void addMIMEType(final short number, 
final String type, final String extensions, final String outExtension) {
+               DefaultMIMETypes.addMIMEType(number, type, extensions.split(" 
"), outExtension);
+       }
+
+       /**
+        * Get a known MIME type by number.
+        */
+       public synchronized static String byNumber(final short x) {
+               if((x > DefaultMIMETypes.mimeTypesByNumber.size()) || (x < 0))
+                       return null;
+               return (String) DefaultMIMETypes.mimeTypesByNumber.get(x);
+       }
+
+       /**
+        * Get the number of a MIME type, or -1 if it is not in the table of 
known MIME
+        * types, in which case it will have to be sent uncompressed.
+        */
+       public synchronized static short byName(final String s) {
+               final Short x = (Short) DefaultMIMETypes.mimeTypesByName.get(s);
+               if(x != null) return x.shortValue();
+               else return -1;
+       }
+
+       /* From toad's /etc/mime.types
+        * cat /etc/mime.types | sed "/^$/d;/#/d" | tr --squeeze '\t' ' ' |
+        * (y=0; while read x; do echo "$x" |
+        * sed -n "s/^\([^ ]*\)$/addMIMEType\($y, \"\1\"\);/p;s/^\([^ (),]\+\) 
\(.*\)$/addMIMEType\($y, \"\1\", \"\2\"\);/p;"; y=$((y+1)); done)
+        */
+
+       // FIXME should we support aliases?
+
+       static {
+               DefaultMIMETypes.addMIMEType((short)0, 
"application/activemessage");
+               DefaultMIMETypes.addMIMEType((short)1, 
"application/andrew-inset", "ez");
+               DefaultMIMETypes.addMIMEType((short)2, "application/applefile");
+               DefaultMIMETypes.addMIMEType((short)3, 
"application/atomicmail");
+               DefaultMIMETypes.addMIMEType((short)4, 
"application/batch-SMTP");
+               DefaultMIMETypes.addMIMEType((short)5, "application/beep+xml");
+               DefaultMIMETypes.addMIMEType((short)6, "application/cals-1840");
+               DefaultMIMETypes.addMIMEType((short)7, 
"application/commonground");
+               DefaultMIMETypes.addMIMEType((short)8, "application/cu-seeme", 
"csm cu");
+               DefaultMIMETypes.addMIMEType((short)9, "application/cybercash");
+               DefaultMIMETypes.addMIMEType((short)10, "application/dca-rft");
+               DefaultMIMETypes.addMIMEType((short)11, "application/dec-dx");
+               DefaultMIMETypes.addMIMEType((short)12, 
"application/docbook+xml");
+               DefaultMIMETypes.addMIMEType((short)13, "application/dsptype", 
"tsp");
+               DefaultMIMETypes.addMIMEType((short)14, "application/dvcs");
+               DefaultMIMETypes.addMIMEType((short)15, 
"application/edi-consent");
+               DefaultMIMETypes.addMIMEType((short)16, "application/edifact");
+               DefaultMIMETypes.addMIMEType((short)17, "application/edi-x12");
+               DefaultMIMETypes.addMIMEType((short)18, "application/eshop");
+               DefaultMIMETypes.addMIMEType((short)19, 
"application/font-tdpfr");
+               DefaultMIMETypes.addMIMEType((short)20, 
"application/futuresplash", "spl");
+               DefaultMIMETypes.addMIMEType((short)21, 
"application/ghostview");
+               DefaultMIMETypes.addMIMEType((short)22, "application/hta", 
"hta");
+               DefaultMIMETypes.addMIMEType((short)23, "application/http");
+               DefaultMIMETypes.addMIMEType((short)24, 
"application/hyperstudio");
+               DefaultMIMETypes.addMIMEType((short)25, "application/iges");
+               DefaultMIMETypes.addMIMEType((short)26, "application/index");
+               DefaultMIMETypes.addMIMEType((short)27, 
"application/index.cmd");
+               DefaultMIMETypes.addMIMEType((short)28, 
"application/index.obj");
+               DefaultMIMETypes.addMIMEType((short)29, 
"application/index.response");
+               DefaultMIMETypes.addMIMEType((short)30, 
"application/index.vnd");
+               DefaultMIMETypes.addMIMEType((short)31, "application/iotp");
+               DefaultMIMETypes.addMIMEType((short)32, "application/ipp");
+               DefaultMIMETypes.addMIMEType((short)33, "application/isup");
+               DefaultMIMETypes.addMIMEType((short)34, 
"application/mac-compactpro", "cpt");
+               DefaultMIMETypes.addMIMEType((short)35, "application/marc");
+               DefaultMIMETypes.addMIMEType((short)36, 
"application/mac-binhex40", "hqx");
+               DefaultMIMETypes.addMIMEType((short)37, 
"application/macwriteii");
+               DefaultMIMETypes.addMIMEType((short)38, 
"application/mathematica", "nb");
+               DefaultMIMETypes.addMIMEType((short)39, 
"application/mathematica-old");
+               DefaultMIMETypes.addMIMEType((short)40, "application/msaccess", 
"mdb");
+               DefaultMIMETypes.addMIMEType((short)41, "application/msword", 
"doc dot", "doc");
+               DefaultMIMETypes.addMIMEType((short)42, 
"application/news-message-id");
+               DefaultMIMETypes.addMIMEType((short)43, 
"application/news-transmission");
+               DefaultMIMETypes.addMIMEType((short)44, 
"application/octet-stream", "bin");
+               DefaultMIMETypes.addMIMEType((short)45, 
"application/ocsp-request");
+               DefaultMIMETypes.addMIMEType((short)46, 
"application/ocsp-response");
+               DefaultMIMETypes.addMIMEType((short)47, "application/oda", 
"oda");
+               DefaultMIMETypes.addMIMEType((short)48, "application/ogg", 
"ogg");
+               DefaultMIMETypes.addMIMEType((short)49, 
"application/parityfec");
+               DefaultMIMETypes.addMIMEType((short)50, 
"application/pics-rules", "prf");
+               DefaultMIMETypes.addMIMEType((short)51, 
"application/pgp-encrypted");
+               DefaultMIMETypes.addMIMEType((short)52, "application/pgp-keys", 
"key");
+               DefaultMIMETypes.addMIMEType((short)53, "application/pdf", 
"pdf");
+               DefaultMIMETypes.addMIMEType((short)54, 
"application/pgp-signature", "pgp");
+               DefaultMIMETypes.addMIMEType((short)55, "application/pkcs10");
+               DefaultMIMETypes.addMIMEType((short)56, 
"application/pkcs7-mime");
+               DefaultMIMETypes.addMIMEType((short)57, 
"application/pkcs7-signature");
+               DefaultMIMETypes.addMIMEType((short)58, 
"application/pkix-cert");
+               DefaultMIMETypes.addMIMEType((short)59, "application/pkixcmp");
+               DefaultMIMETypes.addMIMEType((short)60, "application/pkix-crl");
+               DefaultMIMETypes.addMIMEType((short)61, 
"application/postscript", "ps ai eps", "ps");
+               DefaultMIMETypes.addMIMEType((short)62, 
"application/prs.alvestrand.titrax-sheet");
+               DefaultMIMETypes.addMIMEType((short)63, "application/prs.cww");
+               DefaultMIMETypes.addMIMEType((short)64, 
"application/prs.nprend");
+               DefaultMIMETypes.addMIMEType((short)65, "application/qsig");
+               DefaultMIMETypes.addMIMEType((short)66, "application/rar", 
"rar");
+               DefaultMIMETypes.addMIMEType((short)67, "application/rdf+xml", 
"rdf");
+               DefaultMIMETypes.addMIMEType((short)68, 
"application/remote-printing");
+               DefaultMIMETypes.addMIMEType((short)69, "application/riscos");
+               DefaultMIMETypes.addMIMEType((short)70, "application/rss+xml", 
"rss");
+               DefaultMIMETypes.addMIMEType((short)71, "application/rtf", 
"rtf");
+               DefaultMIMETypes.addMIMEType((short)72, "application/sdp");
+               DefaultMIMETypes.addMIMEType((short)73, 
"application/set-payment");
+               DefaultMIMETypes.addMIMEType((short)74, 
"application/set-payment-initiation");
+               DefaultMIMETypes.addMIMEType((short)75, 
"application/set-registration");
+               DefaultMIMETypes.addMIMEType((short)76, 
"application/set-registration-initiation");
+               DefaultMIMETypes.addMIMEType((short)77, "application/sgml");
+               DefaultMIMETypes.addMIMEType((short)78, 
"application/sgml-open-catalog");
+               DefaultMIMETypes.addMIMEType((short)79, "application/sieve");
+               DefaultMIMETypes.addMIMEType((short)80, "application/slate");
+               DefaultMIMETypes.addMIMEType((short)81, "application/smil", 
"smi smil", "smil");
+               DefaultMIMETypes.addMIMEType((short)82, 
"application/timestamp-query");
+               DefaultMIMETypes.addMIMEType((short)83, 
"application/timestamp-reply");
+               DefaultMIMETypes.addMIMEType((short)84, "application/vemmi");
+               DefaultMIMETypes.addMIMEType((short)85, 
"application/whoispp-query");
+               DefaultMIMETypes.addMIMEType((short)86, 
"application/whoispp-response");
+               DefaultMIMETypes.addMIMEType((short)87, "application/wita");
+               DefaultMIMETypes.addMIMEType((short)88, 
"application/wordperfect5.1", "wp5");
+               DefaultMIMETypes.addMIMEType((short)89, "application/x400-bp");
+               DefaultMIMETypes.addMIMEType((short)90, 
"application/xhtml+xml", "xht xhtml", "xhtml");
+               DefaultMIMETypes.addMIMEType((short)91, "application/xml", "xml 
xsl", "xml");
+               DefaultMIMETypes.addMIMEType((short)92, "application/xml-dtd");
+               DefaultMIMETypes.addMIMEType((short)93, 
"application/xml-external-parsed-entity");
+               DefaultMIMETypes.addMIMEType((short)94, "application/zip", 
"zip");
+               DefaultMIMETypes.addMIMEType((short)95, 
"application/vnd.3M.Post-it-Notes");
+               DefaultMIMETypes.addMIMEType((short)96, 
"application/vnd.accpac.simply.aso");
+               DefaultMIMETypes.addMIMEType((short)97, 
"application/vnd.accpac.simply.imp");
+               DefaultMIMETypes.addMIMEType((short)98, 
"application/vnd.acucobol");
+               DefaultMIMETypes.addMIMEType((short)99, 
"application/vnd.aether.imp");
+               DefaultMIMETypes.addMIMEType((short)100, 
"application/vnd.anser-web-certificate-issue-initiation");
+               DefaultMIMETypes.addMIMEType((short)101, 
"application/vnd.anser-web-funds-transfer-initiation");
+               DefaultMIMETypes.addMIMEType((short)102, 
"application/vnd.audiograph");
+               DefaultMIMETypes.addMIMEType((short)103, "application/vnd.bmi");
+               DefaultMIMETypes.addMIMEType((short)104, 
"application/vnd.businessobjects");
+               DefaultMIMETypes.addMIMEType((short)105, 
"application/vnd.canon-cpdl");
+               DefaultMIMETypes.addMIMEType((short)106, 
"application/vnd.canon-lips");
+               DefaultMIMETypes.addMIMEType((short)107, 
"application/vnd.cinderella", "cdy");
+               DefaultMIMETypes.addMIMEType((short)108, 
"application/vnd.claymore");
+               DefaultMIMETypes.addMIMEType((short)109, 
"application/vnd.commerce-battelle");
+               DefaultMIMETypes.addMIMEType((short)110, 
"application/vnd.commonspace");
+               DefaultMIMETypes.addMIMEType((short)111, 
"application/vnd.comsocaller");
+               DefaultMIMETypes.addMIMEType((short)112, 
"application/vnd.contact.cmsg");
+               DefaultMIMETypes.addMIMEType((short)113, 
"application/vnd.cosmocaller");
+               DefaultMIMETypes.addMIMEType((short)114, 
"application/vnd.ctc-posml");
+               DefaultMIMETypes.addMIMEType((short)115, 
"application/vnd.cups-postscript");
+               DefaultMIMETypes.addMIMEType((short)116, 
"application/vnd.cups-raster");
+               DefaultMIMETypes.addMIMEType((short)117, 
"application/vnd.cups-raw");
+               DefaultMIMETypes.addMIMEType((short)118, 
"application/vnd.cybank");
+               DefaultMIMETypes.addMIMEType((short)119, "application/vnd.dna");
+               DefaultMIMETypes.addMIMEType((short)120, 
"application/vnd.dpgraph");
+               DefaultMIMETypes.addMIMEType((short)121, "application/vnd.dxr");
+               DefaultMIMETypes.addMIMEType((short)122, 
"application/vnd.ecdis-update");
+               DefaultMIMETypes.addMIMEType((short)123, 
"application/vnd.ecowin.chart");
+               DefaultMIMETypes.addMIMEType((short)124, 
"application/vnd.ecowin.filerequest");
+               DefaultMIMETypes.addMIMEType((short)125, 
"application/vnd.ecowin.fileupdate");
+               DefaultMIMETypes.addMIMEType((short)126, 
"application/vnd.ecowin.series");
+               DefaultMIMETypes.addMIMEType((short)127, 
"application/vnd.ecowin.seriesrequest");
+               DefaultMIMETypes.addMIMEType((short)128, 
"application/vnd.ecowin.seriesupdate");
+               DefaultMIMETypes.addMIMEType((short)129, 
"application/vnd.enliven");
+               DefaultMIMETypes.addMIMEType((short)130, 
"application/vnd.epson.esf");
+               DefaultMIMETypes.addMIMEType((short)131, 
"application/vnd.epson.msf");
+               DefaultMIMETypes.addMIMEType((short)132, 
"application/vnd.epson.quickanime");
+               DefaultMIMETypes.addMIMEType((short)133, 
"application/vnd.epson.salt");
+               DefaultMIMETypes.addMIMEType((short)134, 
"application/vnd.epson.ssf");
+               DefaultMIMETypes.addMIMEType((short)135, 
"application/vnd.ericsson.quickcall");
+               DefaultMIMETypes.addMIMEType((short)136, 
"application/vnd.eudora.data");
+               DefaultMIMETypes.addMIMEType((short)137, "application/vnd.fdf");
+               DefaultMIMETypes.addMIMEType((short)138, 
"application/vnd.ffsns");
+               DefaultMIMETypes.addMIMEType((short)139, 
"application/vnd.flographit");
+               DefaultMIMETypes.addMIMEType((short)140, 
"application/vnd.framemaker");
+               DefaultMIMETypes.addMIMEType((short)141, 
"application/vnd.fsc.weblaunch");
+               DefaultMIMETypes.addMIMEType((short)142, 
"application/vnd.fujitsu.oasys");
+               DefaultMIMETypes.addMIMEType((short)143, 
"application/vnd.fujitsu.oasys2");
+               DefaultMIMETypes.addMIMEType((short)144, 
"application/vnd.fujitsu.oasys3");
+               DefaultMIMETypes.addMIMEType((short)145, 
"application/vnd.fujitsu.oasysgp");
+               DefaultMIMETypes.addMIMEType((short)146, 
"application/vnd.fujitsu.oasysprs");
+               DefaultMIMETypes.addMIMEType((short)147, 
"application/vnd.fujixerox.ddd");
+               DefaultMIMETypes.addMIMEType((short)148, 
"application/vnd.fujixerox.docuworks");
+               DefaultMIMETypes.addMIMEType((short)149, 
"application/vnd.fujixerox.docuworks.binder");
+               DefaultMIMETypes.addMIMEType((short)150, 
"application/vnd.fut-misnet");
+               DefaultMIMETypes.addMIMEType((short)151, 
"application/vnd.grafeq");
+               DefaultMIMETypes.addMIMEType((short)152, 
"application/vnd.groove-account");
+               DefaultMIMETypes.addMIMEType((short)153, 
"application/vnd.groove-identity-message");
+               DefaultMIMETypes.addMIMEType((short)154, 
"application/vnd.groove-injector");
+               DefaultMIMETypes.addMIMEType((short)155, 
"application/vnd.groove-tool-message");
+               DefaultMIMETypes.addMIMEType((short)156, 
"application/vnd.groove-tool-template");
+               DefaultMIMETypes.addMIMEType((short)157, 
"application/vnd.groove-vcard");
+               DefaultMIMETypes.addMIMEType((short)158, 
"application/vnd.hhe.lesson-player");
+               DefaultMIMETypes.addMIMEType((short)159, 
"application/vnd.hp-HPGL");
+               DefaultMIMETypes.addMIMEType((short)160, 
"application/vnd.hp-PCL");
+               DefaultMIMETypes.addMIMEType((short)161, 
"application/vnd.hp-PCLXL");
+               DefaultMIMETypes.addMIMEType((short)162, 
"application/vnd.hp-hpid");
+               DefaultMIMETypes.addMIMEType((short)163, 
"application/vnd.hp-hps");
+               DefaultMIMETypes.addMIMEType((short)164, 
"application/vnd.httphone");
+               DefaultMIMETypes.addMIMEType((short)165, 
"application/vnd.hzn-3d-crossword");
+               DefaultMIMETypes.addMIMEType((short)166, 
"application/vnd.ibm.MiniPay");
+               DefaultMIMETypes.addMIMEType((short)167, 
"application/vnd.ibm.afplinedata");
+               DefaultMIMETypes.addMIMEType((short)168, 
"application/vnd.ibm.modcap");
+               DefaultMIMETypes.addMIMEType((short)169, 
"application/vnd.informix-visionary");
+               DefaultMIMETypes.addMIMEType((short)170, 
"application/vnd.intercon.formnet");
+               DefaultMIMETypes.addMIMEType((short)171, 
"application/vnd.intertrust.digibox");
+               DefaultMIMETypes.addMIMEType((short)172, 
"application/vnd.intertrust.nncp");
+               DefaultMIMETypes.addMIMEType((short)173, 
"application/vnd.intu.qbo");
+               DefaultMIMETypes.addMIMEType((short)174, 
"application/vnd.intu.qfx");
+               DefaultMIMETypes.addMIMEType((short)175, 
"application/vnd.irepository.package+xml");
+               DefaultMIMETypes.addMIMEType((short)176, 
"application/vnd.is-xpr");
+               DefaultMIMETypes.addMIMEType((short)177, 
"application/vnd.japannet-directory-service");
+               DefaultMIMETypes.addMIMEType((short)178, 
"application/vnd.japannet-jpnstore-wakeup");
+               DefaultMIMETypes.addMIMEType((short)179, 
"application/vnd.japannet-payment-wakeup");
+               DefaultMIMETypes.addMIMEType((short)180, 
"application/vnd.japannet-registration");
+               DefaultMIMETypes.addMIMEType((short)181, 
"application/vnd.japannet-registration-wakeup");
+               DefaultMIMETypes.addMIMEType((short)182, 
"application/vnd.japannet-setstore-wakeup");
+               DefaultMIMETypes.addMIMEType((short)183, 
"application/vnd.japannet-verification");
+               DefaultMIMETypes.addMIMEType((short)184, 
"application/vnd.japannet-verification-wakeup");
+               DefaultMIMETypes.addMIMEType((short)185, 
"application/vnd.koan");
+               DefaultMIMETypes.addMIMEType((short)186, 
"application/vnd.lotus-1-2-3");
+               DefaultMIMETypes.addMIMEType((short)187, 
"application/vnd.lotus-approach");
+               DefaultMIMETypes.addMIMEType((short)188, 
"application/vnd.lotus-freelance");
+               DefaultMIMETypes.addMIMEType((short)189, 
"application/vnd.lotus-notes");
+               DefaultMIMETypes.addMIMEType((short)190, 
"application/vnd.lotus-organizer");
+               DefaultMIMETypes.addMIMEType((short)191, 
"application/vnd.lotus-screencam");
+               DefaultMIMETypes.addMIMEType((short)192, 
"application/vnd.lotus-wordpro");
+               DefaultMIMETypes.addMIMEType((short)193, "application/vnd.mcd");
+               DefaultMIMETypes.addMIMEType((short)194, 
"application/vnd.mediastation.cdkey");
+               DefaultMIMETypes.addMIMEType((short)195, 
"application/vnd.meridian-slingshot");
+               DefaultMIMETypes.addMIMEType((short)196, "application/vnd.mif", 
"mif");
+               DefaultMIMETypes.addMIMEType((short)197, 
"application/vnd.minisoft-hp3000-save");
+               DefaultMIMETypes.addMIMEType((short)198, 
"application/vnd.mitsubishi.misty-guard.trustweb");
+               DefaultMIMETypes.addMIMEType((short)199, 
"application/vnd.mobius.daf");
+               DefaultMIMETypes.addMIMEType((short)200, 
"application/vnd.mobius.dis");
+               DefaultMIMETypes.addMIMEType((short)201, 
"application/vnd.mobius.msl");
+               DefaultMIMETypes.addMIMEType((short)202, 
"application/vnd.mobius.plc");
+               DefaultMIMETypes.addMIMEType((short)203, 
"application/vnd.mobius.txf");
+               DefaultMIMETypes.addMIMEType((short)204, 
"application/vnd.motorola.flexsuite");
+               DefaultMIMETypes.addMIMEType((short)205, 
"application/vnd.motorola.flexsuite.adsi");
+               DefaultMIMETypes.addMIMEType((short)206, 
"application/vnd.motorola.flexsuite.fis");
+               DefaultMIMETypes.addMIMEType((short)207, 
"application/vnd.motorola.flexsuite.gotap");
+               DefaultMIMETypes.addMIMEType((short)208, 
"application/vnd.motorola.flexsuite.kmr");
+               DefaultMIMETypes.addMIMEType((short)209, 
"application/vnd.motorola.flexsuite.ttc");
+               DefaultMIMETypes.addMIMEType((short)210, 
"application/vnd.motorola.flexsuite.wem");
+               DefaultMIMETypes.addMIMEType((short)211, 
"application/vnd.mozilla.xul+xml", "xul");
+               DefaultMIMETypes.addMIMEType((short)212, 
"application/vnd.ms-artgalry");
+               DefaultMIMETypes.addMIMEType((short)213, 
"application/vnd.ms-asf");
+               DefaultMIMETypes.addMIMEType((short)214, 
"application/vnd.ms-excel", "xls xlb xlt", "xls");
+               DefaultMIMETypes.addMIMEType((short)215, 
"application/vnd.ms-lrm");
+               DefaultMIMETypes.addMIMEType((short)216, 
"application/vnd.ms-pki.seccat", "cat");
+               DefaultMIMETypes.addMIMEType((short)217, 
"application/vnd.ms-pki.stl", "stl");
+               DefaultMIMETypes.addMIMEType((short)218, 
"application/vnd.ms-powerpoint", "ppt pps", "pps");
+               DefaultMIMETypes.addMIMEType((short)219, 
"application/vnd.ms-project");
+               DefaultMIMETypes.addMIMEType((short)220, 
"application/vnd.ms-tnef");
+               DefaultMIMETypes.addMIMEType((short)221, 
"application/vnd.ms-works");
+               DefaultMIMETypes.addMIMEType((short)222, 
"application/vnd.mseq");
+               DefaultMIMETypes.addMIMEType((short)223, 
"application/vnd.msign");
+               DefaultMIMETypes.addMIMEType((short)224, 
"application/vnd.music-niff");
+               DefaultMIMETypes.addMIMEType((short)225, 
"application/vnd.musician");
+               DefaultMIMETypes.addMIMEType((short)226, 
"application/vnd.netfpx");
+               DefaultMIMETypes.addMIMEType((short)227, 
"application/vnd.noblenet-directory");
+               DefaultMIMETypes.addMIMEType((short)228, 
"application/vnd.noblenet-sealer");
+               DefaultMIMETypes.addMIMEType((short)229, 
"application/vnd.noblenet-web");
+               DefaultMIMETypes.addMIMEType((short)230, 
"application/vnd.novadigm.EDM");
+               DefaultMIMETypes.addMIMEType((short)231, 
"application/vnd.novadigm.EDX");
+               DefaultMIMETypes.addMIMEType((short)232, 
"application/vnd.novadigm.EXT");
+               DefaultMIMETypes.addMIMEType((short)233, 
"application/vnd.osa.netdeploy");
+               DefaultMIMETypes.addMIMEType((short)234, 
"application/vnd.palm");
+               DefaultMIMETypes.addMIMEType((short)235, 
"application/vnd.pg.format");
+               DefaultMIMETypes.addMIMEType((short)236, 
"application/vnd.pg.osasli");
+               DefaultMIMETypes.addMIMEType((short)237, 
"application/vnd.powerbuilder6");
+               DefaultMIMETypes.addMIMEType((short)238, 
"application/vnd.powerbuilder6-s");
+               DefaultMIMETypes.addMIMEType((short)239, 
"application/vnd.powerbuilder7");
+               DefaultMIMETypes.addMIMEType((short)240, 
"application/vnd.powerbuilder7-s");
+               DefaultMIMETypes.addMIMEType((short)241, 
"application/vnd.powerbuilder75");
+               DefaultMIMETypes.addMIMEType((short)242, 
"application/vnd.powerbuilder75-s");
+               DefaultMIMETypes.addMIMEType((short)243, 
"application/vnd.previewsystems.box");
+               DefaultMIMETypes.addMIMEType((short)244, 
"application/vnd.publishare-delta-tree");
+               DefaultMIMETypes.addMIMEType((short)245, 
"application/vnd.pvi.ptid1");
+               DefaultMIMETypes.addMIMEType((short)246, 
"application/vnd.pwg-xhtml-print+xml");
+               DefaultMIMETypes.addMIMEType((short)247, 
"application/vnd.rapid");
+               DefaultMIMETypes.addMIMEType((short)248, 
"application/vnd.s3sms");
+               DefaultMIMETypes.addMIMEType((short)249, 
"application/vnd.seemail");
+               DefaultMIMETypes.addMIMEType((short)250, 
"application/vnd.shana.informed.formdata");
+               DefaultMIMETypes.addMIMEType((short)251, 
"application/vnd.shana.informed.formtemplate");
+               DefaultMIMETypes.addMIMEType((short)252, 
"application/vnd.shana.informed.interchange");
+               DefaultMIMETypes.addMIMEType((short)253, 
"application/vnd.shana.informed.package");
+               DefaultMIMETypes.addMIMEType((short)254, 
"application/vnd.smaf", "mmf");
+               DefaultMIMETypes.addMIMEType((short)255, 
"application/vnd.sss-cod");
+               DefaultMIMETypes.addMIMEType((short)256, 
"application/vnd.sss-dtf");
+               DefaultMIMETypes.addMIMEType((short)257, 
"application/vnd.sss-ntf");
+               DefaultMIMETypes.addMIMEType((short)258, 
"application/vnd.stardivision.calc", "sdc");
+               DefaultMIMETypes.addMIMEType((short)259, 
"application/vnd.stardivision.draw", "sda");
+               DefaultMIMETypes.addMIMEType((short)260, 
"application/vnd.stardivision.impress", "sdd sdp");
+               DefaultMIMETypes.addMIMEType((short)261, 
"application/vnd.stardivision.math", "smf");
+               DefaultMIMETypes.addMIMEType((short)262, 
"application/vnd.stardivision.writer", "sdw vor");
+               DefaultMIMETypes.addMIMEType((short)263, 
"application/vnd.stardivision.writer-global", "sgl");
+               DefaultMIMETypes.addMIMEType((short)264, 
"application/vnd.street-stream");
+               DefaultMIMETypes.addMIMEType((short)265, 
"application/vnd.sun.xml.calc", "sxc");
+               DefaultMIMETypes.addMIMEType((short)266, 
"application/vnd.sun.xml.calc.template", "stc");
+               DefaultMIMETypes.addMIMEType((short)267, 
"application/vnd.sun.xml.draw", "sxd");
+               DefaultMIMETypes.addMIMEType((short)268, 
"application/vnd.sun.xml.draw.template", "std");
+               DefaultMIMETypes.addMIMEType((short)269, 
"application/vnd.sun.xml.impress", "sxi");
+               DefaultMIMETypes.addMIMEType((short)270, 
"application/vnd.sun.xml.impress.template", "sti");
+               DefaultMIMETypes.addMIMEType((short)271, 
"application/vnd.sun.xml.math", "sxm");
+               DefaultMIMETypes.addMIMEType((short)272, 
"application/vnd.sun.xml.writer", "sxw");
+               DefaultMIMETypes.addMIMEType((short)273, 
"application/vnd.sun.xml.writer.global", "sxg");
+               DefaultMIMETypes.addMIMEType((short)274, 
"application/vnd.sun.xml.writer.template", "stw");
+               DefaultMIMETypes.addMIMEType((short)275, "application/vnd.svd");
+               DefaultMIMETypes.addMIMEType((short)276, 
"application/vnd.swiftview-ics");
+               DefaultMIMETypes.addMIMEType((short)277, 
"application/vnd.symbian.install", "sis");
+               DefaultMIMETypes.addMIMEType((short)278, 
"application/vnd.triscape.mxs");
+               DefaultMIMETypes.addMIMEType((short)279, 
"application/vnd.trueapp");
+               DefaultMIMETypes.addMIMEType((short)280, 
"application/vnd.truedoc");
+               DefaultMIMETypes.addMIMEType((short)281, 
"application/vnd.tve-trigger");
+               DefaultMIMETypes.addMIMEType((short)282, 
"application/vnd.ufdl");
+               DefaultMIMETypes.addMIMEType((short)283, 
"application/vnd.uplanet.alert");
+               DefaultMIMETypes.addMIMEType((short)284, 
"application/vnd.uplanet.alert-wbxml");
+               DefaultMIMETypes.addMIMEType((short)285, 
"application/vnd.uplanet.bearer-choice");
+               DefaultMIMETypes.addMIMEType((short)286, 
"application/vnd.uplanet.bearer-choice-wbxml");
+               DefaultMIMETypes.addMIMEType((short)287, 
"application/vnd.uplanet.cacheop");
+               DefaultMIMETypes.addMIMEType((short)288, 
"application/vnd.uplanet.cacheop-wbxml");
+               DefaultMIMETypes.addMIMEType((short)289, 
"application/vnd.uplanet.channel");
+               DefaultMIMETypes.addMIMEType((short)290, 
"application/vnd.uplanet.channel-wbxml");
+               DefaultMIMETypes.addMIMEType((short)291, 
"application/vnd.uplanet.list");
+               DefaultMIMETypes.addMIMEType((short)292, 
"application/vnd.uplanet.list-wbxml");
+               DefaultMIMETypes.addMIMEType((short)293, 
"application/vnd.uplanet.listcmd");
+               DefaultMIMETypes.addMIMEType((short)294, 
"application/vnd.uplanet.listcmd-wbxml");
+               DefaultMIMETypes.addMIMEType((short)295, 
"application/vnd.uplanet.signal");
+               DefaultMIMETypes.addMIMEType((short)296, "application/vnd.vcx");
+               DefaultMIMETypes.addMIMEType((short)297, 
"application/vnd.vectorworks");
+               DefaultMIMETypes.addMIMEType((short)298, 
"application/vnd.vidsoft.vidconference");
+               DefaultMIMETypes.addMIMEType((short)299, 
"application/vnd.visio", "vsd");
+               DefaultMIMETypes.addMIMEType((short)300, 
"application/vnd.vividence.scriptfile");
+               DefaultMIMETypes.addMIMEType((short)301, 
"application/vnd.wap.sic");
+               DefaultMIMETypes.addMIMEType((short)302, 
"application/vnd.wap.slc");
+               DefaultMIMETypes.addMIMEType((short)303, 
"application/vnd.wap.wbxml", "wbxml");
+               DefaultMIMETypes.addMIMEType((short)304, 
"application/vnd.wap.wmlc", "wmlc");
+               DefaultMIMETypes.addMIMEType((short)305, 
"application/vnd.wap.wmlscriptc", "wmlsc");
+               DefaultMIMETypes.addMIMEType((short)306, 
"application/vnd.webturbo");
+               DefaultMIMETypes.addMIMEType((short)307, 
"application/vnd.wrq-hp3000-labelled");
+               DefaultMIMETypes.addMIMEType((short)308, 
"application/vnd.wt.stf");
+               DefaultMIMETypes.addMIMEType((short)309, 
"application/vnd.xara");
+               DefaultMIMETypes.addMIMEType((short)310, 
"application/vnd.xfdl");
+               DefaultMIMETypes.addMIMEType((short)311, 
"application/vnd.yellowriver-custom-menu");
+               DefaultMIMETypes.addMIMEType((short)312, "application/x-123", 
"wk");
+               DefaultMIMETypes.addMIMEType((short)313, 
"application/x-apple-diskimage", "dmg");
+               DefaultMIMETypes.addMIMEType((short)314, "application/x-bcpio", 
"bcpio");
+               DefaultMIMETypes.addMIMEType((short)315, 
"application/x-bittorrent", "torrent");
+               DefaultMIMETypes.addMIMEType((short)316, "application/x-cdf", 
"cdf");
+               DefaultMIMETypes.addMIMEType((short)317, 
"application/x-cdlink", "vcd");
+               DefaultMIMETypes.addMIMEType((short)318, 
"application/x-chess-pgn", "pgn");
+               DefaultMIMETypes.addMIMEType((short)319, "application/x-chm", 
"chm");
+               DefaultMIMETypes.addMIMEType((short)320, "application/x-core");
+               DefaultMIMETypes.addMIMEType((short)321, "application/x-cpio", 
"cpio");
+               DefaultMIMETypes.addMIMEType((short)322, "application/x-csh", 
"csh");
+               DefaultMIMETypes.addMIMEType((short)323, 
"application/x-debian-package", "deb");
+               DefaultMIMETypes.addMIMEType((short)324, 
"application/x-director", "dcr dir dxr");
+               DefaultMIMETypes.addMIMEType((short)325, "application/x-doom", 
"wad");
+               DefaultMIMETypes.addMIMEType((short)326, "application/x-dms", 
"dms");
+               DefaultMIMETypes.addMIMEType((short)327, "application/x-dvi", 
"dvi");
+               DefaultMIMETypes.addMIMEType((short)328, 
"application/x-executable");
+               DefaultMIMETypes.addMIMEType((short)329, "application/x-flac", 
"flac");
+               DefaultMIMETypes.addMIMEType((short)330, "application/x-font", 
"pfa pfb gsf pcf pcf.Z", "unknown-font-type");
+               DefaultMIMETypes.addMIMEType((short)331, 
"application/x-futuresplash", "spl");
+               DefaultMIMETypes.addMIMEType((short)332, 
"application/x-gnumeric", "gnumeric");
+               DefaultMIMETypes.addMIMEType((short)333, 
"application/x-go-sgf", "sgf");
+               DefaultMIMETypes.addMIMEType((short)334, 
"application/x-graphing-calculator", "gcf");
+               DefaultMIMETypes.addMIMEType((short)335, "application/x-gtar", 
"gtar tgz taz", "tgz");
+               DefaultMIMETypes.addMIMEType((short)336, "application/x-hdf", 
"hdf");
+               DefaultMIMETypes.addMIMEType((short)337, 
"application/x-httpd-php", "phtml pht php", "php");
+               DefaultMIMETypes.addMIMEType((short)338, 
"application/x-httpd-php-source", "phps");
+               DefaultMIMETypes.addMIMEType((short)339, 
"application/x-httpd-php3", "php3");
+               DefaultMIMETypes.addMIMEType((short)340, 
"application/x-httpd-php3-preprocessed", "php3p");
+               DefaultMIMETypes.addMIMEType((short)341, 
"application/x-httpd-php4", "php4");
+               DefaultMIMETypes.addMIMEType((short)342, "application/x-ica", 
"ica");
+               DefaultMIMETypes.addMIMEType((short)343, 
"application/x-internet-signup", "ins isp");
+               DefaultMIMETypes.addMIMEType((short)344, 
"application/x-iphone", "iii");
+               DefaultMIMETypes.addMIMEType((short)345, 
"application/x-java-applet");
+               DefaultMIMETypes.addMIMEType((short)346, 
"application/x-java-archive", "jar");
+               DefaultMIMETypes.addMIMEType((short)347, 
"application/x-java-bean");
+               DefaultMIMETypes.addMIMEType((short)348, 
"application/x-java-jnlp-file", "jnlp");
+               DefaultMIMETypes.addMIMEType((short)349, 
"application/x-java-serialized-object", "ser");
+               DefaultMIMETypes.addMIMEType((short)350, 
"application/x-java-vm", "class");
+               DefaultMIMETypes.addMIMEType((short)351, 
"application/x-javascript", "js");
+               DefaultMIMETypes.addMIMEType((short)352, 
"application/x-kdelnk");
+               DefaultMIMETypes.addMIMEType((short)353, 
"application/x-kchart", "chrt");
+               DefaultMIMETypes.addMIMEType((short)354, 
"application/x-killustrator", "kil");
+               DefaultMIMETypes.addMIMEType((short)355, 
"application/x-kpresenter", "kpr kpt");
+               DefaultMIMETypes.addMIMEType((short)356, "application/x-koan", 
"skp skd skt skm");
+               DefaultMIMETypes.addMIMEType((short)357, 
"application/x-kspread", "ksp");
+               DefaultMIMETypes.addMIMEType((short)358, "application/x-kword", 
"kwd kwt", "kwd");
+               DefaultMIMETypes.addMIMEType((short)359, "application/x-latex", 
"latex");
+               DefaultMIMETypes.addMIMEType((short)360, "application/x-lha", 
"lha");
+               DefaultMIMETypes.addMIMEType((short)361, "application/x-lzh", 
"lzh");
+               DefaultMIMETypes.addMIMEType((short)362, "application/x-lzx", 
"lzx");
+               DefaultMIMETypes.addMIMEType((short)363, "application/x-maker", 
"frm maker frame fm fb book fbdoc");
+               DefaultMIMETypes.addMIMEType((short)364, "application/x-mif", 
"mif");
+               DefaultMIMETypes.addMIMEType((short)365, 
"application/x-ms-wmz", "wmz");
+               DefaultMIMETypes.addMIMEType((short)366, 
"application/x-ms-wmd", "wmd");
+               DefaultMIMETypes.addMIMEType((short)367, 
"application/x-msdos-program", "com exe bat dll", "exe");
+               DefaultMIMETypes.addMIMEType((short)368, "application/x-msi", 
"msi");
+               DefaultMIMETypes.addMIMEType((short)369, 
"application/x-netcdf", "nc");
+               DefaultMIMETypes.addMIMEType((short)370, 
"application/x-ns-proxy-autoconfig", "pac");
+               DefaultMIMETypes.addMIMEType((short)371, "application/x-nwc", 
"nwc");
+               DefaultMIMETypes.addMIMEType((short)372, 
"application/x-object", "o");
+               DefaultMIMETypes.addMIMEType((short)373, 
"application/x-oz-application", "oza");
+               DefaultMIMETypes.addMIMEType((short)374, 
"application/x-pkcs7-certreqresp", "p7r");
+               DefaultMIMETypes.addMIMEType((short)375, 
"application/x-pkcs7-crl", "crl");
+               DefaultMIMETypes.addMIMEType((short)376, 
"application/x-python-code", "pyc pyo", "unknown-pyc-pyo");
+               DefaultMIMETypes.addMIMEType((short)377, 
"application/x-quicktimeplayer", "qtl");
+               DefaultMIMETypes.addMIMEType((short)378, 
"application/x-redhat-package-manager", "rpm");
+               DefaultMIMETypes.addMIMEType((short)379, "application/x-rx");
+               DefaultMIMETypes.addMIMEType((short)380, "application/x-sh");
+               DefaultMIMETypes.addMIMEType((short)381, "application/x-shar", 
"shar");
+               DefaultMIMETypes.addMIMEType((short)382, 
"application/x-shellscript");
+               DefaultMIMETypes.addMIMEType((short)383, 
"application/x-shockwave-flash", "swf swfl", "swf");
+               DefaultMIMETypes.addMIMEType((short)384, "application/x-sh", 
"sh");
+               DefaultMIMETypes.addMIMEType((short)385, 
"application/x-stuffit", "sit");
+               DefaultMIMETypes.addMIMEType((short)386, 
"application/x-sv4cpio", "sv4cpio");
+               DefaultMIMETypes.addMIMEType((short)387, 
"application/x-sv4crc", "sv4crc");
+               DefaultMIMETypes.addMIMEType((short)388, "application/x-tar", 
"tar");
+               DefaultMIMETypes.addMIMEType((short)389, "application/x-tcl", 
"tcl");
+               DefaultMIMETypes.addMIMEType((short)390, 
"application/x-tex-gf", "gf");
+               DefaultMIMETypes.addMIMEType((short)391, 
"application/x-tex-pk", "pk");
+               DefaultMIMETypes.addMIMEType((short)392, 
"application/x-texinfo", "texinfo texi", "texi");
+               DefaultMIMETypes.addMIMEType((short)393, "application/x-trash", 
"~ % bak old sik");
+               DefaultMIMETypes.addMIMEType((short)394, "application/x-troff", 
"t tr roff");
+               DefaultMIMETypes.addMIMEType((short)395, 
"application/x-troff-man", "man");
+               DefaultMIMETypes.addMIMEType((short)396, 
"application/x-troff-me", "me");
+               DefaultMIMETypes.addMIMEType((short)397, 
"application/x-troff-ms", "ms");
+               DefaultMIMETypes.addMIMEType((short)398, "application/x-ustar", 
"ustar");
+               DefaultMIMETypes.addMIMEType((short)399, 
"application/x-videolan");
+               DefaultMIMETypes.addMIMEType((short)400, 
"application/x-wais-source", "src");
+               DefaultMIMETypes.addMIMEType((short)401, "application/x-wingz", 
"wz");
+               DefaultMIMETypes.addMIMEType((short)402, 
"application/x-x509-ca-cert", "crt");
+               DefaultMIMETypes.addMIMEType((short)403, "application/x-xcf", 
"xcf");
+               DefaultMIMETypes.addMIMEType((short)404, "application/x-xfig", 
"fig");
+               DefaultMIMETypes.addMIMEType((short)405, "audio/32kadpcm");
+               DefaultMIMETypes.addMIMEType((short)406, "audio/basic", "au 
snd", "au");
+               DefaultMIMETypes.addMIMEType((short)407, "audio/g.722.1");
+               DefaultMIMETypes.addMIMEType((short)408, "audio/l16");
+               DefaultMIMETypes.addMIMEType((short)409, "audio/midi", "mid 
midi kar", "mid");
+               DefaultMIMETypes.addMIMEType((short)410, "audio/mp4a-latm");
+               DefaultMIMETypes.addMIMEType((short)411, "audio/mpa-robust");
+               DefaultMIMETypes.addMIMEType((short)412, "audio/mpeg", "mpga 
mpega mp2 mp3 m4a", "mp3");
+               DefaultMIMETypes.addMIMEType((short)413, "audio/mpegurl", 
"m3u");
+               DefaultMIMETypes.addMIMEType((short)414, "audio/parityfec");
+               DefaultMIMETypes.addMIMEType((short)415, "audio/prs.sid", 
"sid");
+               DefaultMIMETypes.addMIMEType((short)416, 
"audio/telephone-event");
+               DefaultMIMETypes.addMIMEType((short)417, "audio/tone");
+               DefaultMIMETypes.addMIMEType((short)418, "audio/vnd.cisco.nse");
+               DefaultMIMETypes.addMIMEType((short)419, "audio/vnd.cns.anp1");
+               DefaultMIMETypes.addMIMEType((short)420, "audio/vnd.cns.inf1");
+               DefaultMIMETypes.addMIMEType((short)421, 
"audio/vnd.digital-winds");
+               DefaultMIMETypes.addMIMEType((short)422, 
"audio/vnd.everad.plj");
+               DefaultMIMETypes.addMIMEType((short)423, 
"audio/vnd.lucent.voice");
+               DefaultMIMETypes.addMIMEType((short)424, 
"audio/vnd.nortel.vbk");
+               DefaultMIMETypes.addMIMEType((short)425, 
"audio/vnd.nuera.ecelp4800");
+               DefaultMIMETypes.addMIMEType((short)426, 
"audio/vnd.nuera.ecelp7470");
+               DefaultMIMETypes.addMIMEType((short)427, 
"audio/vnd.nuera.ecelp9600");
+               DefaultMIMETypes.addMIMEType((short)428, "audio/vnd.octel.sbc");
+               DefaultMIMETypes.addMIMEType((short)429, "audio/vnd.qcelp");
+               DefaultMIMETypes.addMIMEType((short)430, 
"audio/vnd.rhetorex.32kadpcm");
+               DefaultMIMETypes.addMIMEType((short)431, "audio/vnd.vmx.cvsd");
+               DefaultMIMETypes.addMIMEType((short)432, "audio/x-aiff", "aif 
aiff aifc", "aiff");
+               DefaultMIMETypes.addMIMEType((short)433, "audio/x-gsm", "gsm");
+               DefaultMIMETypes.addMIMEType((short)434, "audio/x-mpegurl", 
"m3u");
+               DefaultMIMETypes.addMIMEType((short)435, "audio/x-ms-wma", 
"wma");
+               DefaultMIMETypes.addMIMEType((short)436, "audio/x-ms-wax", 
"wax");
+               DefaultMIMETypes.addMIMEType((short)437, 
"audio/x-pn-realaudio-plugin");
+               DefaultMIMETypes.addMIMEType((short)438, 
"audio/x-pn-realaudio", "ra rm ram", "ra");
+               DefaultMIMETypes.addMIMEType((short)439, "audio/x-realaudio", 
"ra");
+               DefaultMIMETypes.addMIMEType((short)440, "audio/x-scpls", 
"pls");
+               DefaultMIMETypes.addMIMEType((short)441, "audio/x-sd2", "sd2");
+               DefaultMIMETypes.addMIMEType((short)442, "audio/x-wav", "wav");
+               DefaultMIMETypes.addMIMEType((short)443, "chemical/x-pdb", 
"pdb");
+               DefaultMIMETypes.addMIMEType((short)444, "chemical/x-xyz", 
"xyz");
+               DefaultMIMETypes.addMIMEType((short)445, "image/cgm");
+               DefaultMIMETypes.addMIMEType((short)446, "image/g3fax");
+               DefaultMIMETypes.addMIMEType((short)447, "image/gif", "gif");
+               DefaultMIMETypes.addMIMEType((short)448, "image/ief", "ief");
+               DefaultMIMETypes.addMIMEType((short)449, "image/jpeg", "jpeg 
jpg jpe", "jpeg");
+               DefaultMIMETypes.addMIMEType((short)450, "image/naplps");
+               DefaultMIMETypes.addMIMEType((short)451, "image/pcx", "pcx");
+               DefaultMIMETypes.addMIMEType((short)452, "image/png", "png");
+               DefaultMIMETypes.addMIMEType((short)453, "image/prs.btif");
+               DefaultMIMETypes.addMIMEType((short)454, "image/prs.pti");
+               DefaultMIMETypes.addMIMEType((short)455, "image/svg+xml", "svg 
svgz", "svg");
+               DefaultMIMETypes.addMIMEType((short)456, "image/tiff", "tiff 
tif", "tiff");
+               DefaultMIMETypes.addMIMEType((short)457, "image/vnd.cns.inf2");
+               DefaultMIMETypes.addMIMEType((short)458, "image/vnd.djvu", 
"djvu djv");
+               DefaultMIMETypes.addMIMEType((short)459, "image/vnd.dwg");
+               DefaultMIMETypes.addMIMEType((short)460, "image/vnd.dxf");
+               DefaultMIMETypes.addMIMEType((short)461, 
"image/vnd.fastbidsheet");
+               DefaultMIMETypes.addMIMEType((short)462, "image/vnd.fpx");
+               DefaultMIMETypes.addMIMEType((short)463, "image/vnd.fst");
+               DefaultMIMETypes.addMIMEType((short)464, 
"image/vnd.fujixerox.edmics-mmr");
+               DefaultMIMETypes.addMIMEType((short)465, 
"image/vnd.fujixerox.edmics-rlc");
+               DefaultMIMETypes.addMIMEType((short)466, "image/vnd.mix");
+               DefaultMIMETypes.addMIMEType((short)467, "image/vnd.net-fpx");
+               DefaultMIMETypes.addMIMEType((short)468, "image/vnd.svf");
+               DefaultMIMETypes.addMIMEType((short)469, "image/vnd.wap.wbmp", 
"wbmp");
+               DefaultMIMETypes.addMIMEType((short)470, "image/vnd.xiff");
+               DefaultMIMETypes.addMIMEType((short)471, "image/x-cmu-raster", 
"ras");
+               DefaultMIMETypes.addMIMEType((short)472, "image/x-coreldraw", 
"cdr");
+               DefaultMIMETypes.addMIMEType((short)473, 
"image/x-coreldrawpattern", "pat");
+               DefaultMIMETypes.addMIMEType((short)474, 
"image/x-coreldrawtemplate", "cdt");
+               DefaultMIMETypes.addMIMEType((short)475, 
"image/x-corelphotopaint", "cpt");
+               DefaultMIMETypes.addMIMEType((short)476, "image/x-icon", "ico");
+               DefaultMIMETypes.addMIMEType((short)477, "image/x-jg", "art");
+               DefaultMIMETypes.addMIMEType((short)478, "image/x-jng", "jng");
+               DefaultMIMETypes.addMIMEType((short)479, "image/x-ms-bmp", 
"bmp");
+               DefaultMIMETypes.addMIMEType((short)480, "image/x-photoshop", 
"psd");
+               DefaultMIMETypes.addMIMEType((short)481, 
"image/x-portable-anymap", "pnm");
+               DefaultMIMETypes.addMIMEType((short)482, 
"image/x-portable-bitmap", "pbm");
+               DefaultMIMETypes.addMIMEType((short)483, 
"image/x-portable-graymap", "pgm");
+               DefaultMIMETypes.addMIMEType((short)484, 
"image/x-portable-pixmap", "ppm");
+               DefaultMIMETypes.addMIMEType((short)485, "image/x-rgb", "rgb");
+               DefaultMIMETypes.addMIMEType((short)486, "image/x-xbitmap", 
"xbm");
+               DefaultMIMETypes.addMIMEType((short)487, "image/x-xpixmap", 
"xpm");
+               DefaultMIMETypes.addMIMEType((short)488, "image/x-xwindowdump", 
"xwd");
+               DefaultMIMETypes.addMIMEType((short)489, "inode/chardevice");
+               DefaultMIMETypes.addMIMEType((short)490, "inode/blockdevice");
+               DefaultMIMETypes.addMIMEType((short)491, 
"inode/directory-locked");
+               DefaultMIMETypes.addMIMEType((short)492, "inode/directory");
+               DefaultMIMETypes.addMIMEType((short)493, "inode/fifo");
+               DefaultMIMETypes.addMIMEType((short)494, "inode/socket");
+               DefaultMIMETypes.addMIMEType((short)495, 
"message/delivery-status");
+               DefaultMIMETypes.addMIMEType((short)496, 
"message/disposition-notification");
+               DefaultMIMETypes.addMIMEType((short)497, 
"message/external-body");
+               DefaultMIMETypes.addMIMEType((short)498, "message/http");
+               DefaultMIMETypes.addMIMEType((short)499, "message/s-http");
+               DefaultMIMETypes.addMIMEType((short)500, "message/news");
+               DefaultMIMETypes.addMIMEType((short)501, "message/partial");
+               DefaultMIMETypes.addMIMEType((short)502, "message/rfc822");
+               DefaultMIMETypes.addMIMEType((short)503, "model/iges", "igs 
iges");
+               DefaultMIMETypes.addMIMEType((short)504, "model/mesh", "msh 
mesh silo");
+               DefaultMIMETypes.addMIMEType((short)505, "model/vnd.dwf");
+               DefaultMIMETypes.addMIMEType((short)506, 
"model/vnd.flatland.3dml");
+               DefaultMIMETypes.addMIMEType((short)507, "model/vnd.gdl");
+               DefaultMIMETypes.addMIMEType((short)508, "model/vnd.gs-gdl");
+               DefaultMIMETypes.addMIMEType((short)509, "model/vnd.gtw");
+               DefaultMIMETypes.addMIMEType((short)510, "model/vnd.mts");
+               DefaultMIMETypes.addMIMEType((short)511, "model/vnd.vtu");
+               DefaultMIMETypes.addMIMEType((short)512, "model/vrml", "wrl 
vrml", "vrml");
+               DefaultMIMETypes.addMIMEType((short)513, 
"multipart/alternative");
+               DefaultMIMETypes.addMIMEType((short)514, 
"multipart/appledouble");
+               DefaultMIMETypes.addMIMEType((short)515, 
"multipart/byteranges");
+               DefaultMIMETypes.addMIMEType((short)516, "multipart/digest");
+               DefaultMIMETypes.addMIMEType((short)517, "multipart/encrypted");
+               DefaultMIMETypes.addMIMEType((short)518, "multipart/form-data");
+               DefaultMIMETypes.addMIMEType((short)519, 
"multipart/header-set");
+               DefaultMIMETypes.addMIMEType((short)520, "multipart/mixed");
+               DefaultMIMETypes.addMIMEType((short)521, "multipart/parallel");
+               DefaultMIMETypes.addMIMEType((short)522, "multipart/related");
+               DefaultMIMETypes.addMIMEType((short)523, "multipart/report");
+               DefaultMIMETypes.addMIMEType((short)524, "multipart/signed");
+               DefaultMIMETypes.addMIMEType((short)525, 
"multipart/voice-message");
+               DefaultMIMETypes.addMIMEType((short)526, "text/calendar", "ics 
icz", "ics");
+               DefaultMIMETypes.addMIMEType((short)527, 
"text/comma-separated-values", "csv");
+               DefaultMIMETypes.addMIMEType((short)528, "text/css", "css");
+               DefaultMIMETypes.addMIMEType((short)529, "text/directory");
+               DefaultMIMETypes.addMIMEType((short)530, "text/english");
+               DefaultMIMETypes.addMIMEType((short)531, "text/enriched");
+               DefaultMIMETypes.addMIMEType((short)532, "text/h323", "323");
+               DefaultMIMETypes.addMIMEType((short)533, "text/html", "htm html 
shtml", "html");
+               DefaultMIMETypes.addMIMEType((short)534, "text/iuls", "uls");
+               DefaultMIMETypes.addMIMEType((short)535, "text/mathml", "mml");
+               DefaultMIMETypes.addMIMEType((short)536, "text/parityfec");
+               DefaultMIMETypes.addMIMEType((short)537, "text/plain", "asc txt 
text diff pot", "txt");
+               DefaultMIMETypes.addMIMEType((short)538, "text/prs.lines.tag");
+               DefaultMIMETypes.addMIMEType((short)539, "text/rfc822-headers");
+               DefaultMIMETypes.addMIMEType((short)540, "text/richtext", 
"rtx");
+               DefaultMIMETypes.addMIMEType((short)541, "text/rtf", "rtf");
+               DefaultMIMETypes.addMIMEType((short)542, "text/scriptlet", "sct 
wsc");
+               DefaultMIMETypes.addMIMEType((short)543, "text/t140");
+               DefaultMIMETypes.addMIMEType((short)544, "text/texmacs", "tm 
ts");
+               DefaultMIMETypes.addMIMEType((short)545, 
"text/tab-separated-values", "tsv");
+               DefaultMIMETypes.addMIMEType((short)546, "text/uri-list");
+               DefaultMIMETypes.addMIMEType((short)547, "text/vnd.abc");
+               DefaultMIMETypes.addMIMEType((short)548, "text/vnd.curl");
+               DefaultMIMETypes.addMIMEType((short)549, 
"text/vnd.DMClientScript");
+               DefaultMIMETypes.addMIMEType((short)550, 
"text/vnd.flatland.3dml");
+               DefaultMIMETypes.addMIMEType((short)551, "text/vnd.fly");
+               DefaultMIMETypes.addMIMEType((short)552, 
"text/vnd.fmi.flexstor");
+               DefaultMIMETypes.addMIMEType((short)553, "text/vnd.in3d.3dml");
+               DefaultMIMETypes.addMIMEType((short)554, "text/vnd.in3d.spot");
+               DefaultMIMETypes.addMIMEType((short)555, 
"text/vnd.IPTC.NewsML");
+               DefaultMIMETypes.addMIMEType((short)556, "text/vnd.IPTC.NITF");
+               DefaultMIMETypes.addMIMEType((short)557, "text/vnd.latex-z");
+               DefaultMIMETypes.addMIMEType((short)558, 
"text/vnd.motorola.reflex");
+               DefaultMIMETypes.addMIMEType((short)559, 
"text/vnd.ms-mediapackage");
+               DefaultMIMETypes.addMIMEType((short)560, 
"text/vnd.sun.j2me.app-descriptor", "jad");
+               DefaultMIMETypes.addMIMEType((short)561, "text/vnd.wap.si");
+               DefaultMIMETypes.addMIMEType((short)562, "text/vnd.wap.sl");
+               DefaultMIMETypes.addMIMEType((short)563, "text/vnd.wap.wml", 
"wml");
+               DefaultMIMETypes.addMIMEType((short)564, 
"text/vnd.wap.wmlscript", "wmls");
+               DefaultMIMETypes.addMIMEType((short)565, "text/x-c++hdr", "h++ 
hpp hxx hh", "hh");
+               DefaultMIMETypes.addMIMEType((short)566, "text/x-c++src", "c++ 
cpp cxx cc", "cc");
+               DefaultMIMETypes.addMIMEType((short)567, "text/x-chdr", "h");
+               DefaultMIMETypes.addMIMEType((short)568, "text/x-crontab");
+               DefaultMIMETypes.addMIMEType((short)569, "text/x-csh", "csh");
+               DefaultMIMETypes.addMIMEType((short)570, "text/x-csrc", "c");
+               DefaultMIMETypes.addMIMEType((short)571, "text/x-java", "java");
+               DefaultMIMETypes.addMIMEType((short)572, "text/x-makefile");
+               DefaultMIMETypes.addMIMEType((short)573, "text/x-moc", "moc");
+               DefaultMIMETypes.addMIMEType((short)574, "text/x-pascal", "p 
pas", "pas");
+               DefaultMIMETypes.addMIMEType((short)575, "text/x-pcs-gcd", 
"gcd");
+               DefaultMIMETypes.addMIMEType((short)576, "text/x-perl", "pl 
pm", "pl");
+               DefaultMIMETypes.addMIMEType((short)577, "text/x-python", "py");
+               DefaultMIMETypes.addMIMEType((short)578, 
"text/x-server-parsed-html", "shmtl", "shtml");
+               DefaultMIMETypes.addMIMEType((short)579, "text/x-setext", 
"etx");
+               DefaultMIMETypes.addMIMEType((short)580, "text/x-sh", "sh");
+               DefaultMIMETypes.addMIMEType((short)581, "text/x-tcl", "tcl 
tk", "tcl");
+               DefaultMIMETypes.addMIMEType((short)582, "text/x-tex", "tex ltx 
sty cls", "tex");
+               DefaultMIMETypes.addMIMEType((short)583, "text/x-vcalendar", 
"vcs");
+               DefaultMIMETypes.addMIMEType((short)584, "text/x-vcard", "vcf");
+               DefaultMIMETypes.addMIMEType((short)585, "video/dl", "dl");
+               DefaultMIMETypes.addMIMEType((short)586, "video/fli", "fli");
+               DefaultMIMETypes.addMIMEType((short)587, "video/gl", "gl");
+               DefaultMIMETypes.addMIMEType((short)588, "video/mpeg", "mpeg 
mpg mpe", "mpeg");
+               DefaultMIMETypes.addMIMEType((short)589, "video/mp4", "mp4");
+               DefaultMIMETypes.addMIMEType((short)590, "video/quicktime", "qt 
mov", "mov");
+               DefaultMIMETypes.addMIMEType((short)591, "video/mp4v-es");
+               DefaultMIMETypes.addMIMEType((short)592, "video/parityfec");
+               DefaultMIMETypes.addMIMEType((short)593, "video/pointer");
+               DefaultMIMETypes.addMIMEType((short)594, "video/vnd.fvt");
+               DefaultMIMETypes.addMIMEType((short)595, 
"video/vnd.motorola.video");
+               DefaultMIMETypes.addMIMEType((short)596, 
"video/vnd.motorola.videop");
+               DefaultMIMETypes.addMIMEType((short)597, "video/vnd.mpegurl", 
"mxu");
+               DefaultMIMETypes.addMIMEType((short)598, "video/vnd.mts");
+               DefaultMIMETypes.addMIMEType((short)599, 
"video/vnd.nokia.interleaved-multimedia");
+               DefaultMIMETypes.addMIMEType((short)600, "video/vnd.vivo");
+               DefaultMIMETypes.addMIMEType((short)601, "video/x-dv", "dif 
dv");
+               DefaultMIMETypes.addMIMEType((short)602, "video/x-la-asf", "lsf 
lsx", "lsf");
+               DefaultMIMETypes.addMIMEType((short)603, "video/x-mng", "mng");
+               DefaultMIMETypes.addMIMEType((short)604, "video/x-ms-asf", "asf 
asx", "asf");
+               DefaultMIMETypes.addMIMEType((short)605, "video/x-ms-wm", "wm");
+               DefaultMIMETypes.addMIMEType((short)606, "video/x-ms-wmv", 
"wmv");
+               DefaultMIMETypes.addMIMEType((short)607, "video/x-ms-wmx", 
"wmx");
+               DefaultMIMETypes.addMIMEType((short)608, "video/x-ms-wvx", 
"wvx");
+               DefaultMIMETypes.addMIMEType((short)609, "video/x-msvideo", 
"avi");
+               DefaultMIMETypes.addMIMEType((short)610, "video/x-sgi-movie", 
"movie");
+               DefaultMIMETypes.addMIMEType((short)611, 
"x-conference/x-cooltalk", "ice");
+               DefaultMIMETypes.addMIMEType((short)612, "x-world/x-vrml", "vrm 
vrml wrl", "vrml");
+               DefaultMIMETypes.addMIMEType((short)613, 
"application/x-freenet-reference", "fref");
+               DefaultMIMETypes.addMIMEType((short)614, 
"application/x-freenet-index", "fidx");
+               DefaultMIMETypes.addMIMEType((short)615, 
"application/x-freenet-blob", "flob");
+       }
+
+       /** Guess a MIME type from a filename */
+       public synchronized static String guessMIMEType(final String arg) {
+               if (arg == null) {
+                        // Logger can't be used here (static method)
+                       System.out.println("WARNING : Unable to guess mime type 
for file 'null' ");
+                       return null;
+               }
+
+               final int x = arg.lastIndexOf('.');
+               if((x == -1) || (x == arg.length()-1))
+                       return DefaultMIMETypes.DEFAULT_MIME_TYPE;
+               final String ext = arg.substring(x+1).toLowerCase();
+               final Short mimeIndexOb = (Short) 
DefaultMIMETypes.mimeTypesByExtension.get(ext);
+               if(mimeIndexOb != null)
+                       return (String) 
DefaultMIMETypes.mimeTypesByNumber.get(mimeIndexOb.intValue());
+               else return DefaultMIMETypes.DEFAULT_MIME_TYPE;
+       }
+
+       public synchronized static String getExtension(final String type) {
+               final short typeNumber = DefaultMIMETypes.byName(type);
+               if(typeNumber < 0) return null;
+               return (String) 
DefaultMIMETypes.primaryExtensionByMimeNumber.get(new Short(typeNumber));
+       }
+
+       public synchronized static boolean isValidExt(final String 
expectedMimeType, final String oldExt) {
+               final Short s = (Short) 
DefaultMIMETypes.mimeTypesByExtension.get(oldExt);
+               if(s == null) return false;
+               final String type = DefaultMIMETypes.byNumber(s.shortValue());
+               return type.equals(expectedMimeType);
+       }
+
+       public synchronized static Vector getAllMIMETypes() {
+               return DefaultMIMETypes.mimeTypesByNumber;
+       }
+}

Added: 
trunk/apps/thingamablog/src/net/sf/thingamablog/transport/FCPTransport.java
===================================================================
--- trunk/apps/thingamablog/src/net/sf/thingamablog/transport/FCPTransport.java 
                        (rev 0)
+++ trunk/apps/thingamablog/src/net/sf/thingamablog/transport/FCPTransport.java 
2008-02-19 20:28:19 UTC (rev 18078)
@@ -0,0 +1,239 @@
+/*
+ * FCPTransport.java
+ *
+ * Created on 13 f?vrier 2008, 02:59
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package net.sf.thingamablog.transport;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.filechooser.FileNameExtensionFilter;
+import javax.swing.plaf.ProgressBarUI;
+import net.sf.thingamablog.blog.PublishProgress;
+
+import net.sf.thingamablog.util.freenet.fcp.Client;
+import net.sf.thingamablog.util.freenet.fcp.ClientPutComplexDir;
+import net.sf.thingamablog.util.freenet.fcp.Connection;
+import net.sf.thingamablog.util.freenet.fcp.DirectFileEntry;
+import net.sf.thingamablog.util.freenet.fcp.DiskFileEntry;
+import net.sf.thingamablog.util.freenet.fcp.FileEntry;
+import net.sf.thingamablog.util.freenet.fcp.Message;
+import net.sf.thingamablog.util.freenet.fcp.Verbosity;
+import net.sf.thingamablog.util.freenet.fcp.fcpManager;
+import src.net.sf.thingamablog.util.io.ReplacingOutputStream;
+
+/**
+ * There is *a lot* of code below that comes from jSite
+ * @author dieppe
+ */
+public class FCPTransport implements PublishTransport {
+    private static Logger logger = 
Logger.getLogger("net.sf.thingamablog.transport");
+    private fcpManager Manager = new fcpManager();
+    private String insertURI;
+    private Client client;
+    private String failMsg;
+    private boolean hasPublish = false;
+    private int edition;
+    private String title;
+    
+    /**
+     * Connects the transport
+     *
+     * @return true on success, false otherwise
+     */
+    public boolean connect(){
+        failMsg="";
+        if(Manager.isConnected()){
+            failMsg="Already connected";
+            return false;
+        }
+        try {
+            logger.info("Connecting to the node...");
+            Manager.getConnection().connect();
+            client = new Client(Manager.getConnection());
+            logger.info("Connected!");
+            return true;
+        } catch (IOException ioe) {
+            failMsg="Unable to connect to the node : " + ioe.getMessage();
+            logger.log(Level.WARNING,failMsg);
+            ioe.printStackTrace();
+        }
+        return false;
+    }
+    
+    /**
+     * Disconnects the transport
+     *
+     * @return true on success, false otherwise
+     */
+    public boolean disconnect(){
+        // We do the publish process during the disconnection (I hope it will 
be temporary, time I get a solution)
+        if (client.isDisconnected())
+            return true;
+        logger.info("Disconnecting from the node...");
+        Manager.getConnection().disconnect();
+        logger.info("Disconnected!");
+        if (hasPublish){
+            hasPublish=false;
+            edition++;
+        }
+        return true;
+    }
+    
+    /**
+     * Indicates if the transport is connected
+     *
+     * @return true if connected, false if not
+     */
+    public boolean isConnected(){
+        return Manager.isConnected();
+    }
+    
+    /**
+     * Returns the reason the connect or publishFile returned false.. i.e 
failed
+     *
+     * @return The reason for failing
+     */
+    public String getFailureReason(){
+        return failMsg;
+    }
+    
+    public boolean publishFile(String pubPath, File file, TransportProgress 
tp) {
+        logger.log(Level.WARNING,"You shouldn't be here! Only complete dir are 
publish with fcp.");
+        return false;
+    }
+    
+    public boolean publishFile(Hashtable ht, PublishProgress tp){
+        //We do the publish job for an entire directory
+        if(!Manager.isConnected()){
+            logger.log(Level.WARNING,"The connection to the node is not open 
!");
+            failMsg="Not connected";
+            return false;
+        }
+        System.out.println("Beginning of the publish process...");
+        String dirURI = "freenet:USK@" + insertURI + "/" + title + "/" + 
edition + "/";
+        System.out.println("Insert URI : " + dirURI);
+        ClientPutComplexDir putDir = new ClientPutComplexDir("Thingamablog 
insert", dirURI);
+        putDir.setDefaultName("blog.html");
+        putDir.setMaxRetries(-1);
+        int totalBytes = 0;
+        for(Enumeration e = ht.keys() ; e.hasMoreElements() ;) {
+            File file = (File)e.nextElement();
+            FileEntry fileEntry = createFileEntry(file, edition);            
+            if (fileEntry != null) {
+                System.out.println("File to insert : " + 
fileEntry.getFilename());
+                System.out.println("Method : " + fileEntry.getName());
+                System.out.println("Local path :" + ((DiskFileEntry) 
fileEntry).getLocalFilename());
+                totalBytes += file.length();
+                putDir.addFileEntry(fileEntry);
+            }
+        }
+        try {            
+            System.out.println("Executing the command...");
+            tp.publishStarted(totalBytes);
+            client.execute(putDir);
+            System.out.println("Command executed!");
+        } catch (IOException ioe) {
+            logger.log(Level.WARNING,"Publish process failed : " + 
ioe.getMessage());
+            return false;
+        }
+        String finalURI = null;
+        boolean success = false;
+        boolean finished = false;
+        boolean disconnected = false;
+        while (!finished) {
+            Message message = client.readMessage();
+            finished = (message == null) || (disconnected = 
client.isDisconnected());
+            logger.log(Level.INFO, "Message from the node :" + message);
+            if (!finished) {
+                String messageName = message.getName();
+                if ("URIGenerated".equals(messageName)) {
+                    finalURI = message.get("URI");
+                }
+                if ("SimpleProgress".equals(messageName)) {
+                    int total = Integer.parseInt(message.get("Total"));
+                    int succeeded = Integer.parseInt(message.get("Succeeded"));
+                    int fatal = Integer.parseInt(message.get("FatallyFailed"));
+                    int failed = Integer.parseInt(message.get("Failed"));
+                    boolean finalized = 
Boolean.parseBoolean(message.get("FinalizedTotal"));
+                    tp.bytesTransferred(succeeded);
+                }
+                success = "PutSuccessful".equals(messageName);
+                finished = success || "PutFailed".equals(messageName) || 
messageName.endsWith("Error");
+            }            
+        }
+        hasPublish=success;
+        return success;
+    }
+    
+    private FileEntry createFileEntry(File file, int edition){
+        String content = DefaultMIMETypes.guessMIMEType(file.getName());
+        System.out.println(content);
+        FileEntry fileEntry = new DiskFileEntry(file.getName(), content, 
file.getPath());
+        return fileEntry;
+    }
+    
+    public void setNode(String hostname, int port) {
+        Manager.setNode(hostname,port);
+    }
+    
+    public String getPort(){
+        return Manager.getNode().getPort() + "";
+    }
+    
+    public String getHostname(){
+        return Manager.getNode().getHostname();
+    }
+    
+    public String getInsertURI(){
+        return this.insertURI;
+    }
+    
+    public void setInsertURI(String insertURI){
+        this.insertURI=shortenURI(insertURI);
+    }
+    
+    public void setEdition(String edition){
+        this.edition=Integer.parseInt(edition);
+    }
+    
+    public int getEdition(){
+        return this.edition;
+    }
+    
+    private String shortenURI(String uri) {
+        if (uri.startsWith("freenet:")) {
+            uri = uri.substring("freenet:".length());
+        }
+        if (uri.startsWith("SSK@")) {
+            uri = uri.substring("SSK@".length());
+        }
+        if (uri.startsWith("USK@")) {
+            uri = uri.substring("USK@".length());
+        }
+        if (uri.endsWith("/")) {
+            uri = uri.substring(0, uri.length()-1);
+        }
+        return uri;
+    }
+    
+    public String getTitle(){
+        return this.title;
+    }
+    
+    public void setTitle(String title){
+        this.title=title;
+    }
+}

Modified: 
trunk/apps/thingamablog/src/net/sf/thingamablog/util/freenet/fcp/ClientPutComplexDir.java
===================================================================
--- 
trunk/apps/thingamablog/src/net/sf/thingamablog/util/freenet/fcp/ClientPutComplexDir.java
   2008-02-19 18:18:30 UTC (rev 18077)
+++ 
trunk/apps/thingamablog/src/net/sf/thingamablog/util/freenet/fcp/ClientPutComplexDir.java
   2008-02-19 20:28:19 UTC (rev 18078)
@@ -116,7 +116,7 @@
                                writer.write("Files." + fileIndex + 
".DataLength=" + ((DirectFileEntry) fileEntry).getDataLength() + LINEFEED);
                                payloadLength += ((DirectFileEntry) 
fileEntry).getDataLength();
                        } else if (fileEntry instanceof DiskFileEntry) {
-                               writer.write("Files." + fileIndex + 
".Filename=" + ((DiskFileEntry) fileEntry).getFilename() + LINEFEED);
+                               writer.write("Files." + fileIndex + 
".Filename=" + ((DiskFileEntry) fileEntry).getLocalFilename() + LINEFEED);
                        } else if (fileEntry instanceof RedirectFileEntry) {
                                writer.write("Files." + fileIndex + 
".TargetURI=" + ((RedirectFileEntry) fileEntry).getTargetURI() + LINEFEED);
                        }

Modified: 
trunk/apps/thingamablog/src/net/sf/thingamablog/util/freenet/fcp/fcpManager.java
===================================================================
--- 
trunk/apps/thingamablog/src/net/sf/thingamablog/util/freenet/fcp/fcpManager.java
    2008-02-19 18:18:30 UTC (rev 18077)
+++ 
trunk/apps/thingamablog/src/net/sf/thingamablog/util/freenet/fcp/fcpManager.java
    2008-02-19 20:28:19 UTC (rev 18078)
@@ -52,6 +52,10 @@
         return new String[] { keypairMessage.get("InsertURI"), 
keypairMessage.get("RequestURI") };
     }

+    public boolean isConnected(){
+        return connection.isConnected();
+    }
+    
     public Node getNode() {
         return node;
     }

Modified: 
trunk/apps/thingamablog/src/net/sf/thingamablog/xml/TBPersistFactory.java
===================================================================
--- trunk/apps/thingamablog/src/net/sf/thingamablog/xml/TBPersistFactory.java   
2008-02-19 18:18:30 UTC (rev 18077)
+++ trunk/apps/thingamablog/src/net/sf/thingamablog/xml/TBPersistFactory.java   
2008-02-19 20:28:19 UTC (rev 18078)
@@ -47,6 +47,7 @@
 import net.sf.thingamablog.generator.CustomTag;
 import net.sf.thingamablog.generator.PageGenerator;
 import net.sf.thingamablog.transport.EMailTransport;
+import net.sf.thingamablog.transport.FCPTransport;
 import net.sf.thingamablog.transport.FTPTransport;
 import net.sf.thingamablog.transport.LocalTransport;
 import net.sf.thingamablog.transport.PublishTransport;
@@ -334,7 +335,6 @@
                element.setAttribute("url", blog.getBaseUrl());
                element.setAttribute("arc_url", blog.getArchiveUrl());
                element.setAttribute("media_url", blog.getMediaUrl());
-                element.setAttribute("insertURI", blog.getInsertUri());
                element.setAttribute("base_path", blog.getBasePath());          
                element.setAttribute("base_date", 
blog.getArchiveBaseDate().getTime() + "");
                element.setAttribute("arc_policy", blog.getArchivePolicy() + 
"");
@@ -353,7 +353,6 @@
                element.setAttribute("locale", blog.getLocale().toString());
                element.setAttribute("publish_all", blog.isPublishAll() + "");
                element.setAttribute("type", blog.getType());
-                element.setAttribute("edition", blog.getEdition());

                Element outdatedArcs = new Element("OutdatedArchives");
                ArchiveRange ar[] = blog.getOutdatedArchives();
@@ -474,6 +473,16 @@
                 transport.addContent(e);
                        }                                       
                }
+                else if (pt instanceof FCPTransport)
+                {
+                    FCPTransport fpt = (FCPTransport) pt;
+                    transport.setAttribute("type","fcp");
+                    transport.setAttribute("hostname",fpt.getHostname());
+                    transport.setAttribute("port",fpt.getPort());
+                    transport.setAttribute("edition",fpt.getEdition()+"");
+                    transport.setAttribute("insertURI",fpt.getInsertURI());
+                    transport.setAttribute("title",fpt.getTitle());
+                }
                else
                {
                        transport.setAttribute("type", "local");
@@ -542,7 +551,6 @@
                loadPingServicesFromXML(blogEle, weblog);
         loadEmailSettingsFromXML(blogEle, weblog);
                weblog.setTitle(blogEle.getAttributeValue("title", "Untitled"));
-                weblog.setType(blogEle.getAttributeValue("type","internet"));
                String description = "";
                Element desc = blogEle.getChild("Description");
                if(desc != null)
@@ -592,8 +600,6 @@
                tb.setLocale(createLocale(element.getAttributeValue("locale", 
Locale.getDefault().toString())));
                tb.setPublishAll(element.getAttributeValue("publish_all", 
"true").equals("true"));
                tb.setType(element.getAttributeValue("type").toString());
-                tb.setInsertURI(element.getAttributeValue("insertURI"));
-                tb.setEdition(element.getAttributeValue("edition"));

                int arcPolicy = TBWeblog.ARCHIVE_MONTHLY;
                int dayInterval = 5;
@@ -863,6 +869,15 @@
                        configureRemoteTransport(rtp, transport, port);
                        pubTransport = rtp;
                }
+                else if (type.equals("fcp"))
+                {
+                    FCPTransport fcp = new FCPTransport();
+                    fcp.setNode(transport.getAttributeValue("hostname"), 
Integer.parseInt(transport.getAttributeValue("port")));
+                    fcp.setEdition(transport.getAttributeValue("edition"));
+                    fcp.setInsertURI(transport.getAttributeValue("insertURI"));
+                    fcp.setTitle(transport.getAttributeValue("title"));
+                    pubTransport = fcp;
+                }
                else            
                        pubTransport = new LocalTransport();



Reply via email to