[ooo-build-commit] ooeclipse: Branch 'master'

Cédric Bosdonnat cbosdo at kemper.freedesktop.org
Thu Nov 26 12:56:49 PST 2009


 core/plugin.xml                                                                       |   16 
 core/schema/language.exsd                                                             |   48 +
 core/source/org/openoffice/ide/eclipse/core/actions/ConvertToManifestAction.java      |   17 
 core/source/org/openoffice/ide/eclipse/core/actions/Messages.java                     |   53 +
 core/source/org/openoffice/ide/eclipse/core/internal/helpers/LanguagesHelper.java     |  191 ----
 core/source/org/openoffice/ide/eclipse/core/internal/helpers/UnoidlProjectHelper.java |    5 
 core/source/org/openoffice/ide/eclipse/core/internal/model/UnoFactory.java            |    9 
 core/source/org/openoffice/ide/eclipse/core/internal/model/UnoidlProject.java         |   19 
 core/source/org/openoffice/ide/eclipse/core/model/IUnoFactoryConstants.java           |    4 
 core/source/org/openoffice/ide/eclipse/core/model/IUnoidlProject.java                 |   11 
 core/source/org/openoffice/ide/eclipse/core/model/OOoContainer.java                   |    2 
 core/source/org/openoffice/ide/eclipse/core/model/language/AbstractLanguage.java      |  108 ++
 core/source/org/openoffice/ide/eclipse/core/model/language/ILanguage.java             |   71 -
 core/source/org/openoffice/ide/eclipse/core/model/language/ILanguageUI.java           |   65 -
 core/source/org/openoffice/ide/eclipse/core/model/language/IProjectHandler.java       |    8 
 core/source/org/openoffice/ide/eclipse/core/model/language/LanguageExportPart.java    |   55 +
 core/source/org/openoffice/ide/eclipse/core/model/language/LanguagesHelper.java       |  163 +++
 core/source/org/openoffice/ide/eclipse/core/model/pack/FileType.java                  |   10 
 core/source/org/openoffice/ide/eclipse/core/model/pack/ManifestModel.java             |   20 
 core/source/org/openoffice/ide/eclipse/core/model/pack/UnoPackage.java                |    5 
 core/source/org/openoffice/ide/eclipse/core/wizards/NewUnoProjectWizard.java          |   56 -
 core/source/org/openoffice/ide/eclipse/core/wizards/PackageExportWizard2.java         |  119 ++
 core/source/org/openoffice/ide/eclipse/core/wizards/messages.properties               |   26 
 core/source/org/openoffice/ide/eclipse/core/wizards/pages/ManifestExportPage.java     |  345 ++++++++
 core/source/org/openoffice/ide/eclipse/core/wizards/pages/NewUnoProjectPage.java      |    8 
 core/source/org/openoffice/ide/eclipse/core/wizards/pages/UnoPackageExportPage.java   |  410 ++++++++++
 cpp/source/org/openoffice/ide/eclipse/cpp/CppBuilder.java                             |   12 
 cpp/source/org/openoffice/ide/eclipse/cpp/CppProjectHandler.java                      |    8 
 cpp/source/org/openoffice/ide/eclipse/cpp/CppUI.java                                  |   54 -
 cpp/source/org/openoffice/ide/eclipse/cpp/Language.java                               |   12 
 cpp/source/org/openoffice/ide/eclipse/cpp/OOoSdkProjectJob.java                       |   55 -
 java/plugin.xml                                                                       |    9 
 java/source/org/openoffice/ide/eclipse/java/JavaExportPart.java                       |  109 ++
 java/source/org/openoffice/ide/eclipse/java/JavaProjectHandler.java                   |   29 
 java/source/org/openoffice/ide/eclipse/java/JavaUI.java                               |   64 -
 java/source/org/openoffice/ide/eclipse/java/JavaWizardPage.java                       |    5 
 java/source/org/openoffice/ide/eclipse/java/Language.java                             |   12 
 java/source/org/openoffice/ide/eclipse/java/build/FilesVisitor.java                   |   47 +
 java/source/org/openoffice/ide/eclipse/java/build/UnoManifestProvider.java            |   20 
 java/source/org/openoffice/ide/eclipse/java/client/JODContainerPage.java              |    3 
 java/source/org/openoffice/ide/eclipse/java/messages.properties                       |    2 
 41 files changed, 1715 insertions(+), 570 deletions(-)

New commits:
commit 650ab52282f44d3d13b0a01d4d5fd3e29c287bb3
Author: Cédric Bosdonnat <cedricbosdo at openoffice.org>
Date:   Thu Nov 26 21:56:11 2009 +0100

    [core] New export wizard
    
    Started to implement a better export wizard, similar to the JAR export
    wizard from JDT. Took that occasion to refactor some parts of the
    Language extension point to make it cleaner.

diff --git a/core/plugin.xml b/core/plugin.xml
index 5cd2931..77558da 100755
--- a/core/plugin.xml
+++ b/core/plugin.xml
@@ -243,14 +243,17 @@
    <extension
          point="org.eclipse.ui.propertyPages">
       <page
-            adaptable="true"
             class="org.openoffice.ide.eclipse.core.preferences.ProjectPropertiesPage"
             id="org.openoffice.ide.eclipse.core.projectproperties"
-            name="%project.propertypage.name"
-            objectClass="org.eclipse.core.resources.IProject">
+            name="%project.propertypage.name">
          <filter
                name="nature"
                value="org.openoffice.ide.eclipse.core.unonature"/>
+         <enabledWhen>
+            <adapt
+                  type="org.eclipse.core.resources.IProject">
+            </adapt>
+         </enabledWhen>
       </page>
    </extension>
    <extension
@@ -286,6 +289,13 @@
             icon="/icons/export_package.gif"
             id="org.openoffice.ide.eclipse.core.export.package"
             name="OpenOffice.org package"/>
+      <wizard
+            category="org.openoffice.ide.eclipse.core.uno"
+            class="org.openoffice.ide.eclipse.core.wizards.PackageExportWizard2"
+            icon="icons/export_package.gif"
+            id="org.openoffice.ide.eclipse.core.wizard.test"
+            name="Test Wizard">
+      </wizard>
    </extension>
    <extension
          point="org.eclipse.ui.startup">
diff --git a/core/schema/language.exsd b/core/schema/language.exsd
index c20cbc1..366424c 100644
--- a/core/schema/language.exsd
+++ b/core/schema/language.exsd
@@ -1,6 +1,6 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <!-- Schema file written by PDE -->
-<schema targetNamespace="org.openoffice.ide.eclipse">
+<schema targetNamespace="org.openoffice.ide.eclipse.core" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
       <appInfo>
          <meta.schema plugin="org.openoffice.ide.eclipse.core" id="language" name="Uno-idl project language binding Extension point"/>
@@ -11,6 +11,11 @@
    </annotation>
 
    <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
       <complexType>
          <sequence>
             <element ref="language"/>
@@ -49,6 +54,10 @@
          </documentation>
       </annotation>
       <complexType>
+         <choice minOccurs="0" maxOccurs="unbounded">
+            <element ref="newWizardPage" minOccurs="0" maxOccurs="1"/>
+            <element ref="exportBuildPart" minOccurs="0" maxOccurs="1"/>
+         </choice>
          <attribute name="name" type="string" use="required">
             <annotation>
                <documentation>
@@ -62,7 +71,42 @@
                   Class implementing the org.openoffice.ide.eclipse.core.model.ILanguage.
                </documentation>
                <appInfo>
-                  <meta.attribute kind="java" basedOn="org.openoffice.ide.eclipse.core.model.ILanguage"/>
+                  <meta.attribute kind="java" basedOn="org.openoffice.ide.eclipse.core.model.language.AbstractLanguage:"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="newWizardPage">
+      <annotation>
+         <documentation>
+            Sepcifies the language specific page to use in UNO project creation wizard
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.openoffice.ide.eclipse.core.model.language.LanguageWizardPage:"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="exportBuildPart">
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  Part at the end of the UNO export wizard. It generally contains build scripts related controls.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.openoffice.ide.eclipse.core.model.language.LanguageExportPart:"/>
                </appInfo>
             </annotation>
          </attribute>
diff --git a/core/source/org/openoffice/ide/eclipse/core/actions/ConvertToManifestAction.java b/core/source/org/openoffice/ide/eclipse/core/actions/ConvertToManifestAction.java
index 6905381..70e9ad6 100644
--- a/core/source/org/openoffice/ide/eclipse/core/actions/ConvertToManifestAction.java
+++ b/core/source/org/openoffice/ide/eclipse/core/actions/ConvertToManifestAction.java
@@ -55,14 +55,26 @@ import org.openoffice.ide.eclipse.core.model.pack.ManifestModel;
 import org.openoffice.ide.eclipse.core.model.pack.PackagePropertiesModel;
 import org.openoffice.ide.eclipse.core.model.pack.UnoPackage;
 
+/**
+ * Action converting the legacy package.properties into manifest.xml file.
+ * 
+ * @author cbosdo
+ *
+ */
 public class ConvertToManifestAction implements IObjectActionDelegate {
 
     private IFile mPackageFile;
 
+    /**
+     * {@inheritDoc}
+     */
     public void setActivePart(IAction pAction, IWorkbenchPart pTargetPart) {
         // No need of the target part
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void run( IAction pAction ) {
         PackagePropertiesModel propsModel = new PackagePropertiesModel( mPackageFile );
         
@@ -111,11 +123,12 @@ public class ConvertToManifestAction implements IObjectActionDelegate {
                 manifestFile.refreshLocal( IResource.DEPTH_ZERO, null );
             } catch (CoreException e) {
             }
-            
-            manifestModel.dispose();
         }
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void selectionChanged(IAction pAction, ISelection pSelection) {
         if ( !pSelection.isEmpty() && pSelection instanceof IStructuredSelection ) {
             IStructuredSelection sel = (IStructuredSelection)pSelection;
diff --git a/core/source/org/openoffice/ide/eclipse/core/actions/Messages.java b/core/source/org/openoffice/ide/eclipse/core/actions/Messages.java
index 486829e..20a8c39 100644
--- a/core/source/org/openoffice/ide/eclipse/core/actions/Messages.java
+++ b/core/source/org/openoffice/ide/eclipse/core/actions/Messages.java
@@ -1,22 +1,69 @@
+/*************************************************************************
+ *
+ * The Contents of this file are made available subject to the terms of
+ * the GNU Lesser General Public License Version 2.1
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2009 by Cédric Bosdonnat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ * 
+ * The Initial Developer of the Original Code is: Cédric Bosdonnat.
+ *
+ * Copyright: 2009 by Cédric Bosdonnat, Inc.
+ *
+ * All Rights Reserved.
+ * 
+ ************************************************************************/
 package org.openoffice.ide.eclipse.core.actions;
 
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
 
+/**
+ * Messages for the package.
+ * 
+ * @author cedricbosdo
+ *
+ */
 public class Messages {
     private static final String BUNDLE_NAME = "org.openoffice.ide.eclipse.core.actions.messages"; //$NON-NLS-1$
 
     private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
             .getBundle(BUNDLE_NAME);
 
+    /**
+     * Default constructor.
+     */
     private Messages() {
     }
 
-    public static String getString(String key) {
+    /**
+     * Get the string from it's key.
+     * 
+     * @param pKey the key of the string
+     * 
+     * @return the internationalized string
+     */
+    public static String getString(String pKey) {
+        String string = '!' + pKey + '!';
         try {
-            return RESOURCE_BUNDLE.getString(key);
+            string =  RESOURCE_BUNDLE.getString(pKey);
         } catch (MissingResourceException e) {
-            return '!' + key + '!';
         }
+        return string;
     }
 }
diff --git a/core/source/org/openoffice/ide/eclipse/core/internal/helpers/LanguagesHelper.java b/core/source/org/openoffice/ide/eclipse/core/internal/helpers/LanguagesHelper.java
deleted file mode 100644
index c59a0a0..0000000
--- a/core/source/org/openoffice/ide/eclipse/core/internal/helpers/LanguagesHelper.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*************************************************************************
- *
- * $RCSfile: LanguagesHelper.java,v $
- *
- * $Revision: 1.7 $
- *
- * last change: $Author: cedricbosdo $ $Date: 2007/11/25 20:32:31 $
- *
- * The Contents of this file are made available subject to the terms of
- * the GNU Lesser General Public License Version 2.1
- *
- * Sun Microsystems Inc., October, 2000
- *
- *
- * GNU Lesser General Public License Version 2.1
- * =============================================
- * Copyright 2000 by Sun Microsystems, Inc.
- * 901 San Antonio Road, Palo Alto, CA 94303, USA
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- * 
- * The Initial Developer of the Original Code is: Sun Microsystems, Inc..
- *
- * Copyright: 2002 by Sun Microsystems, Inc.
- *
- * All Rights Reserved.
- *
- * Contributor(s): Cedric Bosdonnat
- *
- *
- ************************************************************************/
-package org.openoffice.ide.eclipse.core.internal.helpers;
-
-import java.util.Vector;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.IExtensionRegistry;
-import org.eclipse.core.runtime.Platform;
-import org.openoffice.ide.eclipse.core.model.language.ILanguage;
-
-/**
- * Helper class for implementation languages handling.
- * 
- * @author cedricbosdo
- *
- */
-public class LanguagesHelper {
-    
-    /**
-     * @return all the available uno-idl implementation language names
-     * installed on the platform.
-     */
-    public static String[] getAvailableLanguageNames() {
-        
-        String[] result = null;
-        
-        IConfigurationElement[] languages = getLanguagesDefs();
-        result = new String[languages.length];
-        
-        for (int i = 0; i < languages.length; i++) {
-            result[i] = languages[i].getAttribute("name"); //$NON-NLS-1$
-        }
-        
-        return result;
-    }
-    
-    /**
-     * Returns the language name as specified in the <code>plugin.xml</code>
-     * file from the language object.
-     * 
-     * @param pLanguage the language object
-     * @return the language name
-     */
-    public static String getNameFromLanguage(ILanguage pLanguage) {
-        
-        String name = null;
-        
-        IConfigurationElement[] languages = getLanguagesDefs();
-        int i = 0;
-        
-        while (name == null && i < languages.length) {
-            IConfigurationElement languagei = languages[i];
-            if (languagei.getAttribute("class").equals( //$NON-NLS-1$
-                    pLanguage.getClass().getName())) {
-                
-                name = languagei.getAttribute("name"); //$NON-NLS-1$
-            }
-            i++;
-        }
-        
-        return name;
-    }
-    
-    /**
-     * <p>Returns the language corresponding to a language name. The result may
-     * be null if:
-     *   <ul>
-     *       <li>There is no such language name</li>
-     *      <li>The corresponding class cannot be found</li>
-     *      <li>The corresponding class doesn't implement ILanguage</li>
-     *   </ul>
-     * </p>
-     * 
-     * @param pName the language name to find
-     * 
-     * @return the language object if found, <code>null</code> otherwise.
-     */
-    public static ILanguage getLanguageFromName(String pName) {
-        
-        ILanguage language = null;
-        
-        IConfigurationElement[] languages = getLanguagesDefs();
-        int i = 0;
-        
-        while (language == null && i < languages.length) {
-            IConfigurationElement languagei = languages[i];
-            if (languagei.getAttribute("name").equals(pName)) { //$NON-NLS-1$
-                try {
-                    Object oLanguage = languagei.
-                        createExecutableExtension("class"); //$NON-NLS-1$
-                    
-                    if (oLanguage instanceof ILanguage) {
-                        language = (ILanguage)oLanguage;
-                    }
-                    
-                } catch (Exception e) {
-                    // No such class
-                }
-            }
-            i++;
-        }
-        
-        return language;
-    }
-    
-    /**
-     * Convenience method returning the language definitions from the plugins
-     * extensions points descriptions.
-     * 
-     * @return the array of the configuration element for the languages.
-     */
-    private static IConfigurationElement[] getLanguagesDefs() {
-        IConfigurationElement[] result = null;
-        
-        IExtensionRegistry registry = Platform.getExtensionRegistry();
-        IExtensionPoint point = registry.getExtensionPoint(
-                "org.openoffice.ide.eclipse.core.language"); //$NON-NLS-1$
-        if (point != null) {
-            
-            IExtension[] extensions = point.getExtensions();
-            Vector<IConfigurationElement> languages = new Vector<IConfigurationElement>();
-            
-            for (int i = 0; i < extensions.length; i++) {
-                
-                IConfigurationElement[] elements = extensions[i].
-                        getConfigurationElements();
-            
-                for (int j = 0; j < elements.length; j++) {
-                    IConfigurationElement elementj = elements[j];
-                    if (elementj.getName().equals("language")) { //$NON-NLS-1$
-                        languages.add(elementj);
-                    }
-                }
-            }
-            
-            result = new IConfigurationElement[languages.size()];
-            for (int i = 0, length = languages.size(); i < length; i++) {
-                result[i] = languages.get(i);
-            }
-            
-            // clean the vector
-            languages.clear();
-        }
-        
-        return result;
-    }
-}
diff --git a/core/source/org/openoffice/ide/eclipse/core/internal/helpers/UnoidlProjectHelper.java b/core/source/org/openoffice/ide/eclipse/core/internal/helpers/UnoidlProjectHelper.java
index 94e6f11..1e6878b 100644
--- a/core/source/org/openoffice/ide/eclipse/core/internal/helpers/UnoidlProjectHelper.java
+++ b/core/source/org/openoffice/ide/eclipse/core/internal/helpers/UnoidlProjectHelper.java
@@ -72,7 +72,7 @@ import org.openoffice.ide.eclipse.core.model.SDKContainer;
 import org.openoffice.ide.eclipse.core.model.UnoFactoryData;
 import org.openoffice.ide.eclipse.core.model.config.IOOo;
 import org.openoffice.ide.eclipse.core.model.config.ISdk;
-import org.openoffice.ide.eclipse.core.model.language.ILanguage;
+import org.openoffice.ide.eclipse.core.model.language.AbstractLanguage;
 import org.openoffice.ide.eclipse.core.model.pack.UnoPackage;
 
 /**
@@ -158,7 +158,7 @@ public class UnoidlProjectHelper {
         unoProject.setOutputExtension(comp);
 
         // Set the language
-        ILanguage language = (ILanguage)pData.getProperty(
+        AbstractLanguage language = (AbstractLanguage)pData.getProperty(
                 IUnoFactoryConstants.PROJECT_LANGUAGE);
         unoProject.setLanguage(language);
         
@@ -506,7 +506,6 @@ public class UnoidlProjectHelper {
      * 
      * @param pPrj the project to package
      * @param pDest the package destination file
-     * @param pDir the directory containing the files to package
      * 
      * @return the minimal {@link UnoPackage}
      */
diff --git a/core/source/org/openoffice/ide/eclipse/core/internal/model/UnoFactory.java b/core/source/org/openoffice/ide/eclipse/core/internal/model/UnoFactory.java
index 20b900a..4a5a231 100644
--- a/core/source/org/openoffice/ide/eclipse/core/internal/model/UnoFactory.java
+++ b/core/source/org/openoffice/ide/eclipse/core/internal/model/UnoFactory.java
@@ -64,7 +64,7 @@ import org.openoffice.ide.eclipse.core.model.IUnoidlProject;
 import org.openoffice.ide.eclipse.core.model.ProjectsManager;
 import org.openoffice.ide.eclipse.core.model.UnoFactoryData;
 import org.openoffice.ide.eclipse.core.model.description.DescriptionModel;
-import org.openoffice.ide.eclipse.core.model.language.ILanguage;
+import org.openoffice.ide.eclipse.core.model.language.AbstractLanguage;
 import org.openoffice.ide.eclipse.core.model.language.IProjectHandler;
 import org.openoffice.ide.eclipse.core.utils.WorkbenchHelper;
 
@@ -149,7 +149,7 @@ public final class UnoFactory {
         String prjName = (String)pData.getProperty(IUnoFactoryConstants.PROJECT_NAME);
         IUnoidlProject prj = ProjectsManager.getProject(prjName);
         
-        ILanguage lang = (ILanguage)pData.getProperty(IUnoFactoryConstants.PROJECT_LANGUAGE);
+        AbstractLanguage lang = (AbstractLanguage)pData.getProperty(IUnoFactoryConstants.PROJECT_LANGUAGE);
         IProjectHandler langProjectHandler = lang.getProjectHandler();
         String languageOption = langProjectHandler.getSkeletonMakerLanguage(pData);
         
@@ -173,6 +173,7 @@ public final class UnoFactory {
             // Get the unorc file
             String unorc = "-env:BOOTSTRAPINI=\"" + prj.getOOo().getUnorcPath() + "\""; //$NON-NLS-1$ //$NON-NLS-2$
 
+            // Get the service for which to generate the skeleton
             UnoFactoryData[] inner =  pData.getInnerData();
             String service = ""; //$NON-NLS-1$
             int i = 0;
@@ -195,7 +196,7 @@ public final class UnoFactory {
             
             String implementationName = langProjectHandler.getImplementationName(prj, service);
             
-            
+            // Run the uno-skeletonmaker command
             String command = "uno-skeletonmaker" +    //$NON-NLS-1$
                 " " + unorc +  //$NON-NLS-1$
                 " component " + languageOption +  //$NON-NLS-1$
@@ -207,6 +208,7 @@ public final class UnoFactory {
 
             Process process = prj.getSdk().runTool(prj, command, pMonitor);
     
+            // Process the error output to add it to the log if needed
             InputStream err = process.getErrorStream();
             StringWriter writer = new StringWriter();
             
@@ -229,6 +231,7 @@ public final class UnoFactory {
                 } catch (java.io.IOException e) { }
             }
             
+            // Refresh the project to reflect the changes
             UnoidlProjectHelper.refreshProject(prj, null);
 
             // opens the generated files
diff --git a/core/source/org/openoffice/ide/eclipse/core/internal/model/UnoidlProject.java b/core/source/org/openoffice/ide/eclipse/core/internal/model/UnoidlProject.java
index cae817d..258e889 100755
--- a/core/source/org/openoffice/ide/eclipse/core/internal/model/UnoidlProject.java
+++ b/core/source/org/openoffice/ide/eclipse/core/internal/model/UnoidlProject.java
@@ -63,7 +63,6 @@ import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 import org.openoffice.ide.eclipse.core.PluginLogger;
 import org.openoffice.ide.eclipse.core.builders.TypesBuilder;
-import org.openoffice.ide.eclipse.core.internal.helpers.LanguagesHelper;
 import org.openoffice.ide.eclipse.core.internal.helpers.UnoidlProjectHelper;
 import org.openoffice.ide.eclipse.core.model.IUnoidlProject;
 import org.openoffice.ide.eclipse.core.model.OOoContainer;
@@ -71,8 +70,9 @@ import org.openoffice.ide.eclipse.core.model.SDKContainer;
 import org.openoffice.ide.eclipse.core.model.config.IConfigListener;
 import org.openoffice.ide.eclipse.core.model.config.IOOo;
 import org.openoffice.ide.eclipse.core.model.config.ISdk;
-import org.openoffice.ide.eclipse.core.model.language.ILanguage;
+import org.openoffice.ide.eclipse.core.model.language.AbstractLanguage;
 import org.openoffice.ide.eclipse.core.model.language.IProjectHandler;
+import org.openoffice.ide.eclipse.core.model.language.LanguagesHelper;
 
 /**
  * This class implements the UNO-IDL and project nature interface.
@@ -144,7 +144,7 @@ public class UnoidlProject implements IUnoidlProject, IProjectNature {
 
     private IOOo mOOo;
     
-    private ILanguage mLanguage;
+    private AbstractLanguage mLanguage;
     
     private String mIdlDir;
     
@@ -256,7 +256,7 @@ public class UnoidlProject implements IUnoidlProject, IProjectNature {
     /**
      * {@inheritDoc}
      */
-    public ILanguage getLanguage() {
+    public AbstractLanguage getLanguage() {
         return mLanguage;
     }
     
@@ -284,7 +284,7 @@ public class UnoidlProject implements IUnoidlProject, IProjectNature {
     /**
      * {@inheritDoc}
      */
-    public void setLanguage(ILanguage pNewLanguage) {
+    public void setLanguage(AbstractLanguage pNewLanguage) {
         
         if (mLanguage == null && pNewLanguage != null) {
             mLanguage = pNewLanguage; 
@@ -604,7 +604,7 @@ public class UnoidlProject implements IUnoidlProject, IProjectNature {
             in = new FileInputStream(configFile);
             properties.load(in);
         
-            properties.setProperty(LANGUAGE, LanguagesHelper.getNameFromLanguage(mLanguage));
+            properties.setProperty(LANGUAGE, mLanguage.getName());
             properties.setProperty(OOO_NAME, mOOo.getName());
             properties.setProperty(SDK_NAME, mSdk.getId());
             properties.setProperty(IDL_DIR, mIdlDir);
@@ -626,6 +626,13 @@ public class UnoidlProject implements IUnoidlProject, IProjectNature {
         }
     }
     
+    /**
+     * {@inheritDoc}
+     */
+    public IFolder[] getBinFolders() {
+        return getLanguage().getProjectHandler().getBinFolders( this );
+    }
+    
     //*************************************************************************
     // IProjectNature Implementation
     //*************************************************************************
diff --git a/core/source/org/openoffice/ide/eclipse/core/model/IUnoFactoryConstants.java b/core/source/org/openoffice/ide/eclipse/core/model/IUnoFactoryConstants.java
index b137a35..d6e880e 100644
--- a/core/source/org/openoffice/ide/eclipse/core/model/IUnoFactoryConstants.java
+++ b/core/source/org/openoffice/ide/eclipse/core/model/IUnoFactoryConstants.java
@@ -46,7 +46,7 @@ package org.openoffice.ide.eclipse.core.model;
 // Imports used for the javadocs
 import org.openoffice.ide.eclipse.core.model.config.IOOo;
 import org.openoffice.ide.eclipse.core.model.config.ISdk;
-import org.openoffice.ide.eclipse.core.model.language.ILanguage;
+import org.openoffice.ide.eclipse.core.model.language.AbstractLanguage;
 
 /**
  * This interface contains the keys for the data to provide to the UNO
@@ -79,7 +79,7 @@ public interface IUnoFactoryConstants {
     public static final String PROJECT_COMP    = "project_comp"; //$NON-NLS-1$
     
     /**
-     * The object should be an instance of {@link ILanguage}.
+     * The object should be an instance of {@link AbstractLanguage}.
      */
     public static final String PROJECT_LANGUAGE = "project_language"; //$NON-NLS-1$
     
diff --git a/core/source/org/openoffice/ide/eclipse/core/model/IUnoidlProject.java b/core/source/org/openoffice/ide/eclipse/core/model/IUnoidlProject.java
index 96deb0a..c63c1be 100644
--- a/core/source/org/openoffice/ide/eclipse/core/model/IUnoidlProject.java
+++ b/core/source/org/openoffice/ide/eclipse/core/model/IUnoidlProject.java
@@ -48,7 +48,7 @@ import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.runtime.IPath;
 import org.openoffice.ide.eclipse.core.model.config.IOOo;
 import org.openoffice.ide.eclipse.core.model.config.ISdk;
-import org.openoffice.ide.eclipse.core.model.language.ILanguage;
+import org.openoffice.ide.eclipse.core.model.language.AbstractLanguage;
 
 /**
  * Interface for a UNO project.
@@ -75,7 +75,7 @@ public interface IUnoidlProject {
     /**
      * @return the project implementation language.
      */
-    public ILanguage getLanguage();
+    public AbstractLanguage getLanguage();
     
     /**
      * @return the project name.
@@ -98,7 +98,7 @@ public interface IUnoidlProject {
      * 
      * @param pLanguage the new language
      */
-    public void setLanguage(ILanguage pLanguage);
+    public void setLanguage(AbstractLanguage pLanguage);
     
     /**
      * Sets the selected OOo.
@@ -310,4 +310,9 @@ public interface IUnoidlProject {
      * Saves the UNO project configuration in a hidden file.
      */
     public void saveAllProperties();
+
+    /**
+     * @return the language dependent binaries folders.
+     */
+    public IFolder[] getBinFolders();
 }
diff --git a/core/source/org/openoffice/ide/eclipse/core/model/OOoContainer.java b/core/source/org/openoffice/ide/eclipse/core/model/OOoContainer.java
index 253b31b..b1647ef 100644
--- a/core/source/org/openoffice/ide/eclipse/core/model/OOoContainer.java
+++ b/core/source/org/openoffice/ide/eclipse/core/model/OOoContainer.java
@@ -357,7 +357,7 @@ public class OOoContainer {
         }
         
         // Fourth attempt: Get a registered OOo
-        if (found == null) {
+        if (found == null && sInstance.mElements.size() > 0) {
             found = sInstance.mElements.values().iterator().next();
         }
         
diff --git a/core/source/org/openoffice/ide/eclipse/core/model/language/AbstractLanguage.java b/core/source/org/openoffice/ide/eclipse/core/model/language/AbstractLanguage.java
new file mode 100644
index 0000000..a6cc345
--- /dev/null
+++ b/core/source/org/openoffice/ide/eclipse/core/model/language/AbstractLanguage.java
@@ -0,0 +1,108 @@
+/*************************************************************************
+ *
+ * The Contents of this file are made available subject to the terms of
+ * the GNU Lesser General Public License Version 2.1
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2009 by Cédric Bosdonnat
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ * 
+ * The Initial Developer of the Original Code is: Cédric Bosdonnat.
+ *
+ * Copyright: 2009 by Cédric Bosdonnat
+ *
+ * All Rights Reserved.
+ * 
+ ************************************************************************/
+package org.openoffice.ide.eclipse.core.model.language;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+
+/**
+ * Base class for the language extensions.
+ * 
+ * @author cbosdo
+ *
+ */
+public abstract class AbstractLanguage {
+
+    private IConfigurationElement mConfig;
+    
+    /**
+     * @param pConfig the configuration element for the language
+     */
+    protected void setConfigurationElement(  IConfigurationElement pConfig ) {
+        mConfig = pConfig;
+    }
+    
+    /**
+     * @return the language display name
+     */
+    public String getName( ) {
+        return mConfig.getAttribute( "name" ); //$NON-NLS-1$
+    }
+    
+    /**
+     * @return the wizard page for the New UNO project wizard or <code>null</code> if none
+     *         has been defined.
+     */
+    public LanguageWizardPage getNewWizardPage( ) {
+        LanguageWizardPage result = null;
+        IConfigurationElement[] children = mConfig.getChildren( "newWizardPage" ); //$NON-NLS-1$
+        if ( children.length > 0 ) {
+            // There can't be more than one
+            try {
+                Object o = children[0].createExecutableExtension( "class" ); //$NON-NLS-1$
+                if ( o instanceof LanguageWizardPage ) {
+                    result = ( LanguageWizardPage )o;
+                }
+            } catch ( Exception e ) {
+            }
+        }
+        return result;
+    }
+    
+    /**
+     * @return the export build part for the UNO export wizard or <code>null</code> if none
+     *         has been defined.
+     */
+    public LanguageExportPart getExportBuildPart( ) {
+        LanguageExportPart result = null;
+        IConfigurationElement[] children = mConfig.getChildren( "exportBuildPart" ); //$NON-NLS-1$
+        if ( children.length > 0 ) {
+            // There can't be more than one
+            try {
+                Object o = children[0].createExecutableExtension( "class" ); //$NON-NLS-1$
+                if ( o instanceof LanguageExportPart ) {
+                    result = ( LanguageExportPart )o;
+                }
+            } catch ( Exception e ) {
+            }
+        }
+        return result;
+    }
+    
+    /**
+     * @return the utility class for projects handling.
+     */
+    public abstract IProjectHandler getProjectHandler();
+    
+    /**
+     * @return the utility class for building.
+     */
+    public abstract ILanguageBuilder getLanguageBuidler();
+}
diff --git a/core/source/org/openoffice/ide/eclipse/core/model/language/ILanguage.java b/core/source/org/openoffice/ide/eclipse/core/model/language/ILanguage.java
deleted file mode 100644
index b74526d..0000000
--- a/core/source/org/openoffice/ide/eclipse/core/model/language/ILanguage.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*************************************************************************
- *
- * $RCSfile: ILanguage.java,v $
- *
- * $Revision: 1.2 $
- *
- * last change: $Author: cedricbosdo $ $Date: 2007/11/25 20:32:30 $
- *
- * The Contents of this file are made available subject to the terms of
- * the GNU Lesser General Public License Version 2.1
- *
- * Sun Microsystems Inc., October, 2000
- *
- *
- * GNU Lesser General Public License Version 2.1
- * =============================================
- * Copyright 2000 by Sun Microsystems, Inc.
- * 901 San Antonio Road, Palo Alto, CA 94303, USA
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- * 
- * The Initial Developer of the Original Code is: Sun Microsystems, Inc..
- *
- * Copyright: 2002 by Sun Microsystems, Inc.
- *
- * All Rights Reserved.
- *
- * Contributor(s): Cedric Bosdonnat
- *
- *
- ************************************************************************/
-package org.openoffice.ide.eclipse.core.model.language;
-
-/**
- * This interface has to be implemented to add a new supported language 
- * to the plugin. It only handles the interactions between the 
- * <code>UnoidlProject</code> and the language class.
- * 
- * @author cedricbosdo
- * @see org.openoffice.ide.eclipse.core.internal.model.UnoidlProject
- *
- */
-public interface ILanguage {
-    
-    /**
-     * @return the utility class for projects handling.
-     */
-    public IProjectHandler getProjectHandler();
-    
-    /**
-     * @return the utility class for building.
-     */
-    public ILanguageBuilder getLanguageBuidler();
-    
-    /**
-     * @return the utility class for UI operation.
-     */
-    public ILanguageUI getLanguageUI();
-}
diff --git a/core/source/org/openoffice/ide/eclipse/core/model/language/ILanguageUI.java b/core/source/org/openoffice/ide/eclipse/core/model/language/ILanguageUI.java
deleted file mode 100644
index 1870310..0000000
--- a/core/source/org/openoffice/ide/eclipse/core/model/language/ILanguageUI.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*************************************************************************
- *
- * $RCSfile: ILanguageUI.java,v $
- *
- * $Revision: 1.2 $
- *
- * last change: $Author: cedricbosdo $ $Date: 2007/11/25 20:32:30 $
- *
- * The Contents of this file are made available subject to the terms of
- * the GNU Lesser General Public License Version 2.1
- *
- * Sun Microsystems Inc., October, 2000
- *
- *
- * GNU Lesser General Public License Version 2.1
- * =============================================
- * Copyright 2000 by Sun Microsystems, Inc.
- * 901 San Antonio Road, Palo Alto, CA 94303, USA
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- * 
- * The Initial Developer of the Original Code is: Sun Microsystems, Inc..
- *
- * Copyright: 2002 by Sun Microsystems, Inc.
- *
- * All Rights Reserved.
- *
- * Contributor(s): Cedric Bosdonnat
- *
- *
- ************************************************************************/
-package org.openoffice.ide.eclipse.core.model.language;
-
-import org.openoffice.ide.eclipse.core.model.UnoFactoryData;
-
-/**
- * Provides an access to the UI elements of the {@link ILanguage}.
- * 
- * @author cedricbosdo
- */
-public interface ILanguageUI {
-
-    /**
-     * Returns the wizard page to insert after the new UNO project page. This
-     * page should contains language specific properties.
-     * 
-     * @param pData data representing the project informations
-     * @return the page or <code>null</code> if there is no need of any language
-     *         page. 
-     */
-    public LanguageWizardPage getWizardPage(UnoFactoryData pData);
-
-}
diff --git a/core/source/org/openoffice/ide/eclipse/core/model/language/IProjectHandler.java b/core/source/org/openoffice/ide/eclipse/core/model/language/IProjectHandler.java
index 35d8e24..e7dc245 100644
--- a/core/source/org/openoffice/ide/eclipse/core/model/language/IProjectHandler.java
+++ b/core/source/org/openoffice/ide/eclipse/core/model/language/IProjectHandler.java
@@ -43,6 +43,7 @@
  ************************************************************************/
 package org.openoffice.ide.eclipse.core.model.language;
 
+import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -141,4 +142,11 @@ public interface IProjectHandler {
      * <code>File</code> class constructor.
      */
     public String getLibraryPath(IUnoidlProject pPrj);
+
+    /**
+     * @param pUnoidlProject the UNO project from which to get the binary folders
+     * 
+     * @return the binary folders
+     */
+    public IFolder[] getBinFolders(IUnoidlProject pUnoidlProject);
 }
diff --git a/core/source/org/openoffice/ide/eclipse/core/model/language/LanguageExportPart.java b/core/source/org/openoffice/ide/eclipse/core/model/language/LanguageExportPart.java
new file mode 100644
index 0000000..460cd5e
--- /dev/null
+++ b/core/source/org/openoffice/ide/eclipse/core/model/language/LanguageExportPart.java
@@ -0,0 +1,55 @@
+/*************************************************************************
+ *
+ * The Contents of this file are made available subject to the terms of
+ * the GNU Lesser General Public License Version 2.1
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2009 by Cédric Bosdonnat
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ * 
+ * The Initial Developer of the Original Code is: Cédric Bosdonnat.
+ *
+ * Copyright: 2009 by Cédric Bosdonnat
+ *
+ * All Rights Reserved.
+ * 
+ ************************************************************************/
+package org.openoffice.ide.eclipse.core.model.language;
+
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * Abstract class for the language specific controls part in the OXT export
+ * wizard.
+ * 
+ * @author cbosdo
+ *
+ */
+public abstract class LanguageExportPart {
+
+    /**
+     * Create the controls in the part.
+     * @param pParent the parent composite where to create the controls
+     */
+    public abstract void createControls(Composite pParent);
+
+    /**
+     * Cleans the controls.
+     */
+    public abstract void dispose();
+
+}
diff --git a/core/source/org/openoffice/ide/eclipse/core/model/language/LanguagesHelper.java b/core/source/org/openoffice/ide/eclipse/core/model/language/LanguagesHelper.java
new file mode 100644
index 0000000..76e47f3
--- /dev/null
+++ b/core/source/org/openoffice/ide/eclipse/core/model/language/LanguagesHelper.java
@@ -0,0 +1,163 @@
+/*************************************************************************
+ *
+ * $RCSfile: LanguagesHelper.java,v $
+ *
+ * $Revision: 1.7 $
+ *
+ * last change: $Author: cedricbosdo $ $Date: 2007/11/25 20:32:31 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * the GNU Lesser General Public License Version 2.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ * 
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc..
+ *
+ * Copyright: 2002 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): Cedric Bosdonnat
+ *
+ *
+ ************************************************************************/
+package org.openoffice.ide.eclipse.core.model.language;
+
+import java.util.Vector;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+
+/**
+ * Helper class for implementation languages handling.
+ * 
+ * @author cedricbosdo
+ *
+ */
+public class LanguagesHelper {
+    
+    /**
+     * @return all the available uno-idl implementation language names
+     * installed on the platform.
+     */
+    public static String[] getAvailableLanguageNames() {
+        
+        String[] result = null;
+        
+        IConfigurationElement[] languages = getLanguagesDefs();
+        result = new String[languages.length];
+        
+        for (int i = 0; i < languages.length; i++) {
+            result[i] = languages[i].getAttribute("name"); //$NON-NLS-1$
+        }
+        
+        return result;
+    }
+    
+    /**
+     * <p>Returns the language corresponding to a language name. The result may
+     * be <code>null</code> if:
+     *   <ul>
+     *       <li>There is no such language name</li>
+     *      <li>The corresponding class cannot be found</li>
+     *      <li>The corresponding class doesn't implement ILanguage</li>
+     *   </ul>
+     * </p>
+     * 
+     * @param pName the language name to find
+     * 
+     * @return the language object if found, <code>null</code> otherwise.
+     */
+    public static AbstractLanguage getLanguageFromName(String pName) {
+        
+        AbstractLanguage language = null;
+        
+        IConfigurationElement[] languages = getLanguagesDefs();
+        int i = 0;
+        
+        while (language == null && i < languages.length) {
+            IConfigurationElement languagei = languages[i];
+            if (languagei.getAttribute("name").equals(pName)) { //$NON-NLS-1$
+                try {
+                    Object o = languagei.createExecutableExtension( "class" ); //$NON-NLS-1$
+                    
+                    if ( o instanceof AbstractLanguage ) {
+                        language = (AbstractLanguage)o;
+                        language.setConfigurationElement( languagei );
+                    }
+                    
+                } catch (Exception e) {
+                    // No such class
+                }
+            }
+            i++;
+        }
+        
+        return language;
+    }
+    
+    /**
+     * Convenience method returning the language definitions from the plugins
+     * extensions points descriptions.
+     * 
+     * @return the array of the configuration element for the languages.
+     */
+    private static IConfigurationElement[] getLanguagesDefs() {
+        IConfigurationElement[] result = null;
+        
+        IExtensionRegistry registry = Platform.getExtensionRegistry();
+        IExtensionPoint point = registry.getExtensionPoint(
+                "org.openoffice.ide.eclipse.core.language"); //$NON-NLS-1$
+        if (point != null) {
+            
+            IExtension[] extensions = point.getExtensions();
+            Vector<IConfigurationElement> languages = new Vector<IConfigurationElement>();
+            
+            for (int i = 0; i < extensions.length; i++) {
+                
+                IConfigurationElement[] elements = extensions[i].
+                        getConfigurationElements();
+            
+                for (int j = 0; j < elements.length; j++) {
+                    IConfigurationElement elementj = elements[j];
+                    if (elementj.getName().equals("language")) { //$NON-NLS-1$
+                        languages.add(elementj);
+                    }
+                }
+            }
+            
+            result = new IConfigurationElement[languages.size()];
+            for (int i = 0, length = languages.size(); i < length; i++) {
+                result[i] = languages.get(i);
+            }
+            
+            // clean the vector
+            languages.clear();
+        }
+        
+        return result;
+    }
+}
diff --git a/core/source/org/openoffice/ide/eclipse/core/model/pack/FileType.java b/core/source/org/openoffice/ide/eclipse/core/model/pack/FileType.java
index a2eb0d9..2fbad4d 100644
--- a/core/source/org/openoffice/ide/eclipse/core/model/pack/FileType.java
+++ b/core/source/org/openoffice/ide/eclipse/core/model/pack/FileType.java
@@ -35,6 +35,12 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map.Entry;
 
+/**
+ * Class representing the file types for the entries of the manifest.xml file.
+ * 
+ * @author Cédric Bosdonnat
+ *
+ */
 public class FileType {
     
     public static final String MIME_XCU = "application/vnd.sun.star.configuration-data"; //$NON-NLS-1$
@@ -61,10 +67,6 @@ public class FileType {
         mMimeType = pMime;
     }
     
-    public void dispose() {
-        mParams.clear();
-    }
-    
     /**
      * @return the mimeType
      */
diff --git a/core/source/org/openoffice/ide/eclipse/core/model/pack/ManifestModel.java b/core/source/org/openoffice/ide/eclipse/core/model/pack/ManifestModel.java
index 0ed1f31..6160fe9 100644
--- a/core/source/org/openoffice/ide/eclipse/core/model/pack/ManifestModel.java
+++ b/core/source/org/openoffice/ide/eclipse/core/model/pack/ManifestModel.java
@@ -34,7 +34,6 @@ import java.io.File;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.text.MessageFormat;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Locale;
@@ -45,6 +44,12 @@ import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
 
+/**
+ * Class representing the data contained in the manifest.xml file.
+ * 
+ * @author Cédric Bosdonnat
+ *
+ */
 public class ManifestModel {
     
     private static final String EXT_XCS = ".xcs"; //$NON-NLS-1$
@@ -53,14 +58,6 @@ public class ManifestModel {
     
     private HashMap<String, FileType> mEntries = new HashMap<String, FileType>();
     
-    public void dispose( ) {
-        Collection< FileType > values = mEntries.values();
-        for ( FileType value : values ) {
-            value.dispose( );
-        }
-        mEntries.clear();
-    }
-    
     /**
      * Add a file or directory to the package.
      * 
@@ -240,14 +237,15 @@ public class ManifestModel {
     }
     
     /**
-     * Output the manifest.xml file
+     * Output the manifest.xml file.
      * 
      * @param pOut where to write the manifest.
      * @throws IOException if something happened when writing to the output stream
      */
     public void write( OutputStream pOut ) throws IOException {
         Iterator<Entry<String, FileType> > iter = mEntries.entrySet().iterator();
-        String entryPattern = "<manifest:file-entry manifest:full-path=\"{0}\" manifest:media-type=\"{1}\"/>\n"; //$NON-NLS-1$
+        String entryPattern = "<manifest:file-entry manifest:full-path=\"{0}\"" + //$NON-NLS-1$
+                " manifest:media-type=\"{1}\"/>\n"; //$NON-NLS-1$
         pOut.write( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n".getBytes() ); //$NON-NLS-1$
         pOut.write( "<manifest:manifest>\n".getBytes() ); //$NON-NLS-1$
         while ( iter.hasNext() ) {
diff --git a/core/source/org/openoffice/ide/eclipse/core/model/pack/UnoPackage.java b/core/source/org/openoffice/ide/eclipse/core/model/pack/UnoPackage.java
index c70b5df..2e479f0 100644
--- a/core/source/org/openoffice/ide/eclipse/core/model/pack/UnoPackage.java
+++ b/core/source/org/openoffice/ide/eclipse/core/model/pack/UnoPackage.java
@@ -104,7 +104,7 @@ public class UnoPackage {
      * </p>
      * 
      * @param pOut the file of the package.
-     * @param pDir the root directory of the package content. 
+     * @param pPrj the project to export 
      */
     public UnoPackage( File pOut, IProject pPrj ) {
         if (! (pOut.getName().endsWith(ZIP) || pOut.getName().endsWith(UNOPKG) || 
@@ -128,7 +128,6 @@ public class UnoPackage {
      */
     public void dispose() {
         mDestination = null;
-        mManifest.dispose();
         mZipEntries.clear();
     }
     
@@ -290,7 +289,7 @@ public class UnoPackage {
     /**
      * Add a localized description of the package.
      * 
-     * @param pDescriptionFile the file containing the description for that locale
+     * @param pFile the file containing the description for that locale
      * @param pLocale the locale of the description. Can be <code>null</code>.
      */
     public void addPackageDescription(IFile pFile, Locale pLocale) {
diff --git a/core/source/org/openoffice/ide/eclipse/core/wizards/NewUnoProjectWizard.java b/core/source/org/openoffice/ide/eclipse/core/wizards/NewUnoProjectWizard.java
index ec71815..a054022 100755
--- a/core/source/org/openoffice/ide/eclipse/core/wizards/NewUnoProjectWizard.java
+++ b/core/source/org/openoffice/ide/eclipse/core/wizards/NewUnoProjectWizard.java
@@ -64,7 +64,7 @@ import org.openoffice.ide.eclipse.core.model.IUnoFactoryConstants;
 import org.openoffice.ide.eclipse.core.model.IUnoidlProject;
 import org.openoffice.ide.eclipse.core.model.OOoContainer;
 import org.openoffice.ide.eclipse.core.model.UnoFactoryData;
-import org.openoffice.ide.eclipse.core.model.language.ILanguage;
+import org.openoffice.ide.eclipse.core.model.language.AbstractLanguage;
 import org.openoffice.ide.eclipse.core.model.language.LanguageWizardPage;
 import org.openoffice.ide.eclipse.core.utils.WorkbenchHelper;
 import org.openoffice.ide.eclipse.core.wizards.pages.NewUnoProjectPage;
@@ -159,28 +159,8 @@ public class NewUnoProjectWizard extends BasicNewProjectResourceWizard implement
         
         if (mMainPage.equals(pPage)) {
             
-            // Create/Remove the language page if needed
-            ILanguage lang = mMainPage.getChosenLanguage();
-            if (lang != null) {
-                UnoFactoryData data = new UnoFactoryData();
-                setLanguagePage(lang.getLanguageUI().getWizardPage(
-                        mMainPage.fillData(data, false)));
-                
-                // Cleaning
-                data.dispose();
-            } else {
-                setLanguagePage(null);
-            }
-            
             // change the language page if possible
-            if (mLanguagePage != null) { 
-                UnoFactoryData data = new UnoFactoryData();
-                mLanguagePage.setProjectInfos(
-                        mMainPage.fillData(data, false));
-                
-                // cleaning
-                data.dispose();
-            }
+            updateLoanguagePage( );
         
             try {
                 // Compute the default service name
@@ -239,7 +219,7 @@ public class NewUnoProjectWizard extends BasicNewProjectResourceWizard implement
             }
         }
     }
-    
+
     /**
      * {@inheritDoc}
      */
@@ -325,6 +305,36 @@ public class NewUnoProjectWizard extends BasicNewProjectResourceWizard implement
     }
 
     /**
+     * Adapts the language specific page using the selected language.
+     */
+    private void updateLoanguagePage() {
+        // Create/Remove the language page if needed
+        AbstractLanguage lang = mMainPage.getChosenLanguage();
+        if (lang != null) {
+            UnoFactoryData data = new UnoFactoryData();
+            LanguageWizardPage page = lang.getNewWizardPage();
+            if ( page != null ) {
+                page.setProjectInfos( mMainPage.fillData( data, false ) );
+            }
+            setLanguagePage( page );
+            
+            // Cleaning
+            data.dispose();
+        } else {
+            setLanguagePage(null);
+        }
+        
+        if (mLanguagePage != null) { 
+            UnoFactoryData data = new UnoFactoryData();
+            mLanguagePage.setProjectInfos(
+                    mMainPage.fillData(data, false));
+            
+            // cleaning
+            data.dispose();
+        }
+    }
+    
+    /**
      * Thread executing the project creation tasks.
      * 
      * @author cedricbosdo
diff --git a/core/source/org/openoffice/ide/eclipse/core/wizards/PackageExportWizard2.java b/core/source/org/openoffice/ide/eclipse/core/wizards/PackageExportWizard2.java
new file mode 100644
index 0000000..c5740f0
--- /dev/null
+++ b/core/source/org/openoffice/ide/eclipse/core/wizards/PackageExportWizard2.java
@@ -0,0 +1,119 @@
+/*************************************************************************
+ *
+ * The Contents of this file are made available subject to the terms of
+ * the GNU Lesser General Public License Version 2.1
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2009 by Cédric Bosdonnat
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ * 
+ * The Initial Developer of the Original Code is: Cédric Bosdonnat.
+ *
+ * Copyright: 2009 by Cédric Bosdonnat
+ *
+ * All Rights Reserved.
+ * 
+ ************************************************************************/
+package org.openoffice.ide.eclipse.core.wizards;
+
+import java.util.Iterator;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.IExportWizard;
+import org.eclipse.ui.IWorkbench;
+import org.openoffice.ide.eclipse.core.OOEclipsePlugin;
+import org.openoffice.ide.eclipse.core.model.IUnoidlProject;
+import org.openoffice.ide.eclipse.core.model.ProjectsManager;
+import org.openoffice.ide.eclipse.core.wizards.pages.ManifestExportPage;
+import org.openoffice.ide.eclipse.core.wizards.pages.UnoPackageExportPage;
+
+/**
+ * Class for the new OXT export wizard.
+ * 
+ * @author Cédric Bosdonnat
+ * 
+ */
+public class PackageExportWizard2 extends Wizard implements IExportWizard {
+
+    private static final String DIALOG_SETTINGS_KEY = "oxt.export"; //$NON-NLS-1$
+    
+    private UnoPackageExportPage mMainPage;
+    private ManifestExportPage mManifestPage;
+
+    private boolean mHasNewDialogSettings;
+
+    /**
+     * Constructor.
+     */
+    public PackageExportWizard2() {
+        IDialogSettings workbenchSettings = OOEclipsePlugin.getDefault().getDialogSettings();
+        IDialogSettings section = workbenchSettings.getSection( DIALOG_SETTINGS_KEY );
+        if ( section == null ) {
+            mHasNewDialogSettings = true;
+        } else {
+            mHasNewDialogSettings = false;
+            setDialogSettings( section );
+        }
+    }
+    
+    @Override
+    public boolean performFinish() {
+        // TODO Auto-generated method stub
+        if ( mHasNewDialogSettings ) {
+            IDialogSettings workbenchSettings = OOEclipsePlugin.getDefault().getDialogSettings();
+            IDialogSettings section = workbenchSettings.getSection(DIALOG_SETTINGS_KEY);
+            section = workbenchSettings.addNewSection(DIALOG_SETTINGS_KEY);
+            setDialogSettings(section);
+        }
+        
+        mMainPage.saveWidgetValues();
+        
+        return true;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void init(IWorkbench pWorkbench, IStructuredSelection pSelection) {
+        // Try hard to find a selected UNO project
+        IUnoidlProject prj = null;
+        Iterator<?> it = pSelection.iterator();
+        while (it.hasNext() && prj == null) {
+            Object o = it.next();
+            if (o instanceof IAdaptable) {
+                IResource res = (IResource) ((IAdaptable) o)
+                        .getAdapter(IResource.class);
+                if (res != null) {
+                    prj = ProjectsManager
+                            .getProject(res.getProject().getName());
+                }
+            }
+        }
+        
+        setWindowTitle( "OXT Export" );
+
+        mManifestPage = new ManifestExportPage("page2", prj); //$NON-NLS-1$
+        mMainPage = new UnoPackageExportPage("page1", prj, //$NON-NLS-1$
+                mManifestPage);
+        addPage(mMainPage);
+        addPage(mManifestPage);
+    }
+}
diff --git a/core/source/org/openoffice/ide/eclipse/core/wizards/messages.properties b/core/source/org/openoffice/ide/eclipse/core/wizards/messages.properties
index 741f0b2..db3a8d8 100644
--- a/core/source/org/openoffice/ide/eclipse/core/wizards/messages.properties
+++ b/core/source/org/openoffice/ide/eclipse/core/wizards/messages.properties
@@ -48,7 +48,7 @@ NewUnoProjectPage.ProjectCreationError=Error during the project folder creation
 NewUnoProjectPage.WhiteSpacesWarning=It is not recommended to have any whitespace in the project path:\nthe project might fail to build
 NewUnoProjectPage.CustomSourcesLabel=Sources
 NewScopedElementWizardPage.Published=Published. Defines wether the type is stable \
-		enought to be used by client code.
+        enough to be used by client code.
 NewUnoProjectPage.InvalidCompError=Implementation extension is a single word which begin with a letter and can contain numbers
 NewUnoProjectPage.UnoGroupTitle=UNO Project parameters
 NewUnoFilePage.WrongExtensionError=A UNO-IDL file has the .idl extension
@@ -97,3 +97,27 @@ ServiceWizardSet.ServiceCreationError=Error happened during service creation
 ServiceWizardSet.IsIdlTypeExistingWarning=Error determining if the idl file exists: {0}
 BaseUnoConnectionPage.Description=Set some important informations for the UNO development
 BaseUnoConnectionPage.Title=UNO configuration
+
+ManifestExportPage.Browse=Browse
+ManifestExportPage.DefineManifestText=Specify the manifest.xml
+ManifestExportPage.Description=Define the options for the OXT package build scripts
+ManifestExportPage.GenerateManifestText=Generate the manifest file
+ManifestExportPage.LoadDialogMessage=Select the manifest.xml file to use for the OXT package:
+ManifestExportPage.LoadDialogTitle=Manifest.xml file selection
+ManifestExportPage.LoadRowLabel=Manifest file
+ManifestExportPage.SaveDialogMessage=Select a place where to save the manifest file
+ManifestExportPage.SaveDialogTitle=Save manifest file
+ManifestExportPage.SaveManifestText=Save the manifest in the workspace
+ManifestExportPage.SaveRowLabel=Manifest file
+ManifestExportPage.Title=Build scripts options
+ManifestExportPage.UserManifestText=Use existing manifest file from the workspace
+
+UnoPackageExportPage.AutoDeploy=Automatically deploy on associated OpenOffice.org installation
+UnoPackageExportPage.Browse=Browse
+UnoPackageExportPage.Description=Define which resources should be exported in the OXT
+UnoPackageExportPage.Options=Options:
+UnoPackageExportPage.OverwriteWithoutWarning=Overwrite files without warning
+UnoPackageExportPage.OxtFile=OXT file:
+UnoPackageExportPage.Project=Project to export:
+UnoPackageExportPage.SelectDestination=Select the export destination:
+UnoPackageExportPage.Title=OXT File specification
diff --git a/core/source/org/openoffice/ide/eclipse/core/wizards/pages/ManifestExportPage.java b/core/source/org/openoffice/ide/eclipse/core/wizards/pages/ManifestExportPage.java
new file mode 100644
index 0000000..a92b8b9
--- /dev/null
+++ b/core/source/org/openoffice/ide/eclipse/core/wizards/pages/ManifestExportPage.java
@@ -0,0 +1,345 @@
+/*************************************************************************
+ *
+ * The Contents of this file are made available subject to the terms of
+ * the GNU Lesser General Public License Version 2.1
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2009 by Cédric Bosdonnat
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ * 
+ * The Initial Developer of the Original Code is: Cédric Bosdonnat.
+ *
+ * Copyright: 2009 by Cédric Bosdonnat
+ *
+ * All Rights Reserved.
+ * 
+ ************************************************************************/
+package org.openoffice.ide.eclipse.core.wizards.pages;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
+import org.eclipse.ui.dialogs.ISelectionStatusValidator;
+import org.eclipse.ui.dialogs.SaveAsDialog;
+import org.eclipse.ui.model.WorkbenchContentProvider;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+import org.openoffice.ide.eclipse.core.OOEclipsePlugin;
+import org.openoffice.ide.eclipse.core.model.IUnoidlProject;
+import org.openoffice.ide.eclipse.core.model.language.LanguageExportPart;
+import org.openoffice.ide.eclipse.core.wizards.Messages;
+
+/**
+ * Second page of the new OXT package export wizard.
+ * 
+ * @author Cédric Bosdonnat
+ *
+ */
+public class ManifestExportPage extends WizardPage {
+
+    public static final int HORIZONTAL_INDENT = 20;
+    
+    private static final String MANIFEST_FILENAME = "manifest.xml"; //$NON-NLS-1$
+    
+    private static final int LAYOUT_COLS = 3;
+    
+    private IUnoidlProject mProject;
+    private LanguageExportPart mLangPart;
+
+    private Button mGenerateManifestBtn;
+    private Button mReuseManifestBtn;
+
+    private Button mSaveManifestBtn;
+    private Label mSaveRowLbl;
+    private Text mSaveRowTxt;
+    private Button mSaveRowBtn;
+    private Label mLoadRowLbl;
+    private Text mLoadRowTxt;
+    private Button mLoadRowBtn;
+
+    /**
+     * Constructor.
+     * 
+     * @param pPageName the page name
+     * @param pProject the project to export 
+     */
+    public ManifestExportPage( String pPageName, IUnoidlProject pProject ) {
+        super(pPageName);
+        setTitle( Messages.getString("ManifestExportPage.Title") ); //$NON-NLS-1$
+        setDescription( Messages.getString("ManifestExportPage.Description") ); //$NON-NLS-1$
+        
+        mProject = pProject;
+    }
+    
+    /**
+     * @param pProject the UNO project selected for the wizard.
+     */
+    public void setProject( IUnoidlProject pProject ) {
+        mProject = pProject;
+        reloadLanguagePart();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void createControl(Composite pParent) {
+        Composite body = new Composite( pParent, SWT.NONE );
+        body.setLayout( new GridLayout( ) );
+        body.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
+        setControl( body );
+        
+        // Add the controls
+        Label title = new Label( body, SWT.NONE );
+        title.setText( Messages.getString("ManifestExportPage.DefineManifestText") ); //$NON-NLS-1$
+        
+        createOptionsGroup( body );
+        
+        // Add the language specific controls
+        reloadLanguagePart();
+        
+        // Load the default values
+        mGenerateManifestBtn.setSelection( true );
+    }
+
+    /**
+     * Create the manifest save/reuse options.
+     * 
+     * @param pParent the parent composite where to create the controls
+     */
+    private void createOptionsGroup( Composite pParent ) {
+        Composite body = new Composite( pParent, SWT.NONE );
+        body.setLayout( new GridLayout( ) );
+        GridData gd = new GridData( SWT.FILL, SWT.BEGINNING, true, false );
+        gd.horizontalIndent = HORIZONTAL_INDENT;
+        body.setLayoutData( gd );
+        
+        mGenerateManifestBtn = new Button( body, SWT.RADIO );
+        mGenerateManifestBtn.setText( Messages.getString("ManifestExportPage.GenerateManifestText") ); //$NON-NLS-1$
+        mGenerateManifestBtn.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, true, false ) );
+        mGenerateManifestBtn.addSelectionListener( new SelectionListener() {
+            
+            public void widgetSelected(SelectionEvent pE) {
+                boolean selection = mGenerateManifestBtn.getSelection();
+                mSaveManifestBtn.setEnabled( selection );
+                
+                boolean saveSelection = mSaveManifestBtn.getSelection();
+                mSaveRowLbl.setEnabled( selection && saveSelection );
+                mSaveRowTxt.setEnabled( selection && saveSelection );
+                mSaveRowBtn.setEnabled( selection && saveSelection );
+            }
+            
+            public void widgetDefaultSelected(SelectionEvent pE) {
+                widgetSelected( pE );
+            }
+        });
+        
+        // Create the controls for the manifest generation
+        Composite saveOptions = new Composite( body, SWT.NONE );
+        saveOptions.setLayout( new GridLayout( LAYOUT_COLS, false ) );
+        gd = new GridData( SWT.FILL, SWT.BEGINNING, true, false );
+        gd.horizontalIndent = HORIZONTAL_INDENT;
+        saveOptions.setLayoutData( gd );
+        
+        createManifestSaveOptions( saveOptions );
+        
+        mReuseManifestBtn = new Button( body, SWT.RADIO );
+        mReuseManifestBtn.setText( Messages.getString("ManifestExportPage.UserManifestText") ); //$NON-NLS-1$
+        mReuseManifestBtn.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, true, false ) );
+        mReuseManifestBtn.addSelectionListener( new SelectionListener() {
+            
+            public void widgetSelected(SelectionEvent pE) {
+                boolean enabled = mReuseManifestBtn.getSelection();
+                mLoadRowLbl.setEnabled( enabled );
+                mLoadRowTxt.setEnabled( enabled );
+                mLoadRowBtn.setEnabled( enabled );
+            }
+            
+            public void widgetDefaultSelected(SelectionEvent pE) {
+                widgetSelected( pE );
+            }
+        });
+        
+        // Create the controls for the manifest file selection
+        Composite loadOptions = new Composite( body, SWT.NONE );
+        loadOptions.setLayout( new GridLayout( LAYOUT_COLS, false ) );
+        gd = new GridData( SWT.FILL, SWT.BEGINNING, true, false );
+        gd.horizontalIndent = HORIZONTAL_INDENT;
+        loadOptions.setLayoutData( gd );
+        
+        createManifestLoadRow( loadOptions );
+    }
+
+    /**
+     * Create the manifest file save row.
+     * 
+     * @param pParent the parent composite where to create the controls
+     */
+    private void createManifestSaveOptions( Composite pParent ) {
+        mSaveManifestBtn = new Button( pParent, SWT.CHECK );
+        mSaveManifestBtn.setText( Messages.getString("ManifestExportPage.SaveManifestText") ); //$NON-NLS-1$
+        
+        GridData gd = new GridData( SWT.FILL, SWT.BEGINNING, true, false );
+        gd.horizontalSpan = LAYOUT_COLS;
+        mSaveManifestBtn.setLayoutData( gd );
+        mSaveManifestBtn.addSelectionListener( new SelectionListener() {
+            
+            public void widgetSelected(SelectionEvent pE) {
+                boolean enabled = mSaveManifestBtn.getSelection();
+                mSaveRowLbl.setEnabled( enabled );
+                mSaveRowTxt.setEnabled( enabled );
+                mSaveRowBtn.setEnabled( enabled );
+            }
+            
+            public void widgetDefaultSelected(SelectionEvent pE) {
+                widgetSelected( pE );
+            }
+        });
+        
+        mSaveRowLbl = new Label( pParent, SWT.NONE );
+        mSaveRowLbl.setText( Messages.getString("ManifestExportPage.SaveRowLabel") ); //$NON-NLS-1$
+        mSaveRowLbl.setLayoutData( new GridData( SWT.BEGINNING, SWT.CENTER, false, false ) );
+        mSaveRowLbl.setEnabled( false );
+        
+        mSaveRowTxt = new Text( pParent, SWT.SINGLE | SWT.BORDER );
+        mSaveRowTxt.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, false ) );
+        mSaveRowTxt.setEnabled( false );
+        
+        mSaveRowBtn = new Button( pParent, SWT.PUSH );
+        mSaveRowBtn.setText( Messages.getString("ManifestExportPage.Browse") ); //$NON-NLS-1$
+        mSaveRowBtn.setLayoutData( new GridData( SWT.END, SWT.CENTER, false, false ) );
+        mSaveRowBtn.setEnabled( false );
+        mSaveRowBtn.addSelectionListener( new SelectionAdapter() {
+            
+            @Override
+            public void widgetSelected(SelectionEvent pE) {
+                SaveAsDialog dlg = new SaveAsDialog( getShell() );
+                dlg.create();
+                dlg.getShell().setText( Messages.getString("ManifestExportPage.SaveDialogTitle") ); //$NON-NLS-1$
+                dlg.setMessage( Messages.getString("ManifestExportPage.SaveDialogMessage") ); //$NON-NLS-1$
+                dlg.setOriginalFile( mProject.getFile( MANIFEST_FILENAME ) );
+                if ( dlg.open() == Window.OK ) {
+                    mSaveRowTxt.setText( dlg.getResult().toString() );
+                }
+            }
+        });
+    }
+    
+    /**
+     * Create the manifest file load row.
+     * 
+     * @param pParent the parent composite where to create the controls
+     */
+    private void createManifestLoadRow( Composite pParent ) {
+        mLoadRowLbl = new Label( pParent, SWT.NONE );
+        mLoadRowLbl.setText( Messages.getString("ManifestExportPage.LoadRowLabel") ); //$NON-NLS-1$
+        mLoadRowLbl.setLayoutData( new GridData( SWT.BEGINNING, SWT.CENTER, false, false ) );
+        mLoadRowLbl.setEnabled( false );
+        
+        mLoadRowTxt = new Text( pParent, SWT.SINGLE | SWT.BORDER );
+        mLoadRowTxt.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, false ) );
+        mLoadRowTxt.setEnabled( false );
+        
+        mLoadRowBtn = new Button( pParent, SWT.PUSH );
+        mLoadRowBtn.setText( Messages.getString("ManifestExportPage.Browse") ); //$NON-NLS-1$
+        mLoadRowBtn.setLayoutData( new GridData( SWT.END, SWT.CENTER, false, false ) );
+        mLoadRowBtn.setEnabled( false );
+        mLoadRowBtn.addSelectionListener( new SelectionAdapter() {
+            
+            @Override
+            public void widgetSelected(SelectionEvent pE) {
+                // Create a workspace file selection dialog
+                ElementTreeSelectionDialog dlg = new ElementTreeSelectionDialog( 
+                        getShell(), new WorkbenchLabelProvider(), new WorkbenchContentProvider() );
+                dlg.setAllowMultiple( false );
+                dlg.setValidator( new ISelectionStatusValidator() {
+                    
+                    public IStatus validate(Object[] pSelection) {
+                        Status status = new Status( IStatus.ERROR, OOEclipsePlugin.OOECLIPSE_PLUGIN_ID, new String() );
+                        // only single selection
+                        if ( pSelection.length == 1 && ( pSelection[0] instanceof IFile ) ) {
+                            status = new Status( IStatus.OK, OOEclipsePlugin.OOECLIPSE_PLUGIN_ID, new String() );
+                        }
+                        return status;
+                    }
+                });
+                
+                dlg.addFilter( new ViewerFilter() {
+                    
+                    @Override
+                    public boolean select(Viewer pViewer, Object pParentElement, Object pElement) {
+                        boolean select = true;
+                        if ( pElement instanceof IResource ) {
+                            IResource res = ( IResource )pElement;
+                            select &= !res.getName().startsWith( "." ); //$NON-NLS-1$
+                            select &= ( res instanceof IContainer ) ||
+                                ( res.getName().equals( MANIFEST_FILENAME ) );
+                        }
+                        return select;
+                    }
+                });
+                dlg.setTitle( Messages.getString("ManifestExportPage.LoadDialogTitle") ); //$NON-NLS-1$
+                dlg.setMessage( Messages.getString("ManifestExportPage.LoadDialogMessage") ); //$NON-NLS-1$
+                dlg.setStatusLineAboveButtons( true );
+                dlg.setInput( ResourcesPlugin.getWorkspace().getRoot() );
+                if ( dlg.open() == Window.OK ) {
+                    Object result = dlg.getFirstResult();
+                    IFile file = ( IFile )result;
+                    mLoadRowTxt.setText( file.getFullPath().toString() );
+                }
+            }
+        });
+    }
+    
+    /**
+     * Change the language specific part from the selected project.
+     */
+    private void reloadLanguagePart( ) {
+        if ( mLangPart != null ) {
+            mLangPart.dispose( );
+        }
+        
+        // Add the language specific controls
+        if ( mProject != null ) {
+            mLangPart = mProject.getLanguage().getExportBuildPart();
+            if ( mLangPart != null ) {
+                Composite body = ( Composite ) getControl();
+                if ( body != null ) {
+                    // The body can be null before the page creation
+                    mLangPart.createControls( body );
+                    body.layout();
+                }
+            }
+        }
+    }
+}
diff --git a/core/source/org/openoffice/ide/eclipse/core/wizards/pages/NewUnoProjectPage.java b/core/source/org/openoffice/ide/eclipse/core/wizards/pages/NewUnoProjectPage.java
index 21cd392..9c2215a 100755
--- a/core/source/org/openoffice/ide/eclipse/core/wizards/pages/NewUnoProjectPage.java
+++ b/core/source/org/openoffice/ide/eclipse/core/wizards/pages/NewUnoProjectPage.java
@@ -79,12 +79,12 @@ import org.openoffice.ide.eclipse.core.gui.rows.IFieldChangedListener;
 import org.openoffice.ide.eclipse.core.gui.rows.LabeledRow;
 import org.openoffice.ide.eclipse.core.gui.rows.TextRow;
 import org.openoffice.ide.eclipse.core.i18n.ImagesConstants;
-import org.openoffice.ide.eclipse.core.internal.helpers.LanguagesHelper;
 import org.openoffice.ide.eclipse.core.internal.helpers.UnoidlProjectHelper;
 import org.openoffice.ide.eclipse.core.model.IUnoFactoryConstants;
 import org.openoffice.ide.eclipse.core.model.IUnoidlProject;
 import org.openoffice.ide.eclipse.core.model.UnoFactoryData;
-import org.openoffice.ide.eclipse.core.model.language.ILanguage;
+import org.openoffice.ide.eclipse.core.model.language.AbstractLanguage;
+import org.openoffice.ide.eclipse.core.model.language.LanguagesHelper;
 import org.openoffice.ide.eclipse.core.wizards.Messages;
 import org.openoffice.ide.eclipse.core.wizards.NewUnoProjectWizard;
 
@@ -213,8 +213,8 @@ public class NewUnoProjectPage extends WizardNewProjectCreationPage
     /**
      * @return the chosen implementation language.
      */
-    public ILanguage getChosenLanguage() {
-        ILanguage language = null;
+    public AbstractLanguage getChosenLanguage() {
+        AbstractLanguage language = null;
         if (mLanguageRow != null) {
             String value = mLanguageRow.getValue();
             language = LanguagesHelper.getLanguageFromName(value);
diff --git a/core/source/org/openoffice/ide/eclipse/core/wizards/pages/UnoPackageExportPage.java b/core/source/org/openoffice/ide/eclipse/core/wizards/pages/UnoPackageExportPage.java
new file mode 100644
index 0000000..fe6147b
--- /dev/null
+++ b/core/source/org/openoffice/ide/eclipse/core/wizards/pages/UnoPackageExportPage.java
@@ -0,0 +1,410 @@
+/*************************************************************************
+ *
+ * The Contents of this file are made available subject to the terms of
+ * the GNU Lesser General Public License Version 2.1
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2009 by Cédric Bosdonnat
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ * 
+ * The Initial Developer of the Original Code is: Cédric Bosdonnat.
+ *
+ * Copyright: 2009 by Cédric Bosdonnat
+ *
+ * All Rights Reserved.
+ * 
+ ************************************************************************/
+package org.openoffice.ide.eclipse.core.wizards.pages;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.internal.ide.DialogUtil;
+import org.eclipse.ui.internal.ide.dialogs.ResourceTreeAndListGroup;
+import org.eclipse.ui.model.WorkbenchContentProvider;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+import org.openoffice.ide.eclipse.core.model.IUnoidlProject;
+import org.openoffice.ide.eclipse.core.model.ProjectsManager;
+import org.openoffice.ide.eclipse.core.wizards.Messages;
+
+/**
+ * First page of the new UNO extension export wizard.
+ * 
+ * @author Cédric Bosdonnat
+ *
+ */
+ at SuppressWarnings("restriction")
+public class UnoPackageExportPage extends WizardPage {
+
+    private static final int DESTINATION_PART_COLS = 3;
+
+    private static final String OVERWRITE_FILES = "overwrite.files"; //$NON-NLS-1$
+    private static final String AUTODEPLOY = "autodeploy"; //$NON-NLS-1$
+    private static final String DESTINATION_HISTORY = "destination.history"; //$NON-NLS-1$
+    
+    private static final int MAX_DESTINATION_STORED = 5;
+    
+    private Combo mProjectsList;
+    private ResourceTreeAndListGroup mResourceGroup;
+    private Combo mDestinationCombo;
+    private Button mOverwriteBox;
+    private Button mAutodeployBox;
+    
+    private IUnoidlProject mSelectedProject;
+
+    private ManifestExportPage mManifestPage;
+
+    /**
+     * Constructor.
+     * 
+     * @param pPageName the page id
+     * @param pPrj the project to export
+     * @param pManifestPage the manifest page of the wizard
+     */
+    public UnoPackageExportPage( String pPageName, IUnoidlProject pPrj, ManifestExportPage pManifestPage ) {
+        super(pPageName);
+        
+        setTitle( Messages.getString("UnoPackageExportPage.Title") ); //$NON-NLS-1$
+        setDescription( Messages.getString("UnoPackageExportPage.Description") ); //$NON-NLS-1$
+        
+        mSelectedProject = pPrj;
+        mManifestPage = pManifestPage;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void createControl(Composite pParent) {
+        Composite body = new Composite( pParent, SWT.NONE );
+        body.setLayout( new GridLayout( ) );
+        body.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
+        setControl( body );
+        
+        createProjectSelection( );
+        createResourcesGroup( );
+        createDestinationGroup( );
+        createOptionsGroup( );
+        
+        // Load the data into the fields
+        restoreWidgetValues();
+        loadData( );
+    }
+
+    
+    
+    /**
+     * Loads the data in the different controls of the page.
+     */
+    private void loadData() {
+        // Select the project
+        String[] items = mProjectsList.getItems();
+        int i = 0;
+        boolean selected = false;
+        while ( mSelectedProject != null && i < items.length && !selected ) {
+            if ( items[i].equals( mSelectedProject.getName() ) ) {
+                mProjectsList.select( i );
+                selected = true;
+            }
+            i++;
+        }
+        
+        // TODO Load the previously selected paths
+        
+        // TODO Load the saved checkboxes states
+    }
+
+    /**
+     * Creates the project selection part of the dialog.
+     */
+    private void createProjectSelection() {
+        Composite body = (Composite)getControl();
+        Composite selectionBody = new Composite( body, SWT.NONE );
+        selectionBody.setLayout( new GridLayout( 2, false ) );
+        selectionBody.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, true, false ) );
+        
+        Label lbl = new Label( selectionBody, SWT.NORMAL );
+        lbl.setText( Messages.getString("UnoPackageExportPage.Project") ); //$NON-NLS-1$
+        lbl.setLayoutData( new GridData( SWT.BEGINNING, SWT.CENTER, false, false ) );
+        
+        IUnoidlProject[] prjs = ProjectsManager.getProjects();
+        String[] prjNames = new String[prjs.length];
+        for (int i = 0; i < prjs.length; i++) {
+            IUnoidlProject prj = prjs[i];
+            prjNames[i] = prj.getName();
+        }
+        
+        mProjectsList = new Combo( selectionBody, SWT.DROP_DOWN | SWT.READ_ONLY );
+        mProjectsList.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, false ) );
+        mProjectsList.setItems( prjNames );
+        
+        mProjectsList.addModifyListener( new ModifyListener() {
+            
+            public void modifyText(ModifyEvent pE) {
+                int id = mProjectsList.getSelectionIndex();
+                List<Object> input = new ArrayList<Object>();
+                if ( id != -1 ) {
+                    String name = mProjectsList.getItem( id );
+                    IUnoidlProject unoprj = ProjectsManager.getProject( name );
+                    
+                    // Change the project in the manifest page
+                    mManifestPage.setProject( unoprj );
+                    
+                    // Change the resource group input
+                    input.addAll( getFilteredChildren( unoprj ) );
+                    mResourceGroup.setRoot( input );
+                }
+            }
+        });
+    }
+
+    /**
+     * Creates the project's resources selection part of the dialog.
+     */
+    private void createResourcesGroup() {
+        Composite body = (Composite)getControl();
+        Composite selectionBody = new Composite( body, SWT.NONE );
+        selectionBody.setLayout( new GridLayout( 2, false ) );
+        selectionBody.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, true, false ) );
+        
+        mResourceGroup = new ResourceTreeAndListGroup(selectionBody, new ArrayList<Object>(),
+                getResourceProvider(IResource.FOLDER),
+                WorkbenchLabelProvider.getDecoratingWorkbenchLabelProvider(),
+                getResourceProvider(IResource.FILE), WorkbenchLabelProvider
+                        .getDecoratingWorkbenchLabelProvider(), SWT.NONE,
+                DialogUtil.inRegularFontMode(selectionBody));
+    }
+    
+    /**
+     * Creates the package destination part of the dialog.
+     */
+    private void createDestinationGroup() {
+        Composite body = (Composite)getControl();
+        Composite groupBody = new Composite( body, SWT.NONE );
+        groupBody.setLayout( new GridLayout( ) );
+        groupBody.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, true, false ) );
+        
+        Label titleLbl = new Label( groupBody, SWT.NONE );
+        titleLbl.setText( Messages.getString("UnoPackageExportPage.SelectDestination") ); //$NON-NLS-1$
+        titleLbl.setLayoutData( new GridData( SWT.BEGINNING, SWT.BEGINNING, false, false ) );
+        
+        Composite rowBody = new Composite( groupBody, SWT.NONE );
+        rowBody.setLayout( new GridLayout( DESTINATION_PART_COLS, false ) );
+        rowBody.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, true, false ) );
+        
+        Label lbl = new Label( rowBody, SWT.None );
+        lbl.setText( Messages.getString("UnoPackageExportPage.OxtFile") ); //$NON-NLS-1$
+        lbl.setLayoutData( new GridData( SWT.BEGINNING, SWT.CENTER, false, false ) );
+        
+        mDestinationCombo = new Combo( rowBody, SWT.DROP_DOWN );
+        mDestinationCombo.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, false ) );
+        
+        Button btn = new Button( rowBody, SWT.PUSH );
+        btn.setText( Messages.getString("UnoPackageExportPage.Browse") ); //$NON-NLS-1$
+        btn.setLayoutData( new GridData( SWT.BEGINNING, SWT.CENTER, false, false ) );
+        btn.addSelectionListener( new SelectionListener() {
+            
+            public void widgetSelected(SelectionEvent pE) {
+                FileDialog dlg = new FileDialog( getShell(), SWT.SAVE );
+                String path = dlg.open();
+                if ( path != null ) {
+                    mDestinationCombo.setText( path );
+                }
+            }
+            
+            public void widgetDefaultSelected(SelectionEvent pE) {
+                widgetSelected( pE );
+            }
+        });
+    }
+    
+    /**
+     * Creates the options part of the dialog (the one at the bottom).
+     */
+    private void createOptionsGroup() {
+        Composite body = (Composite)getControl();
+        Composite groupBody = new Composite( body, SWT.NONE );
+        groupBody.setLayout( new GridLayout( ) );
+        groupBody.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, true, false ) );
+        
+        Label titleLbl = new Label( groupBody, SWT.NONE );
+        titleLbl.setText( Messages.getString("UnoPackageExportPage.Options") ); //$NON-NLS-1$
+        titleLbl.setLayoutData( new GridData( SWT.BEGINNING, SWT.BEGINNING, false, false ) );
+        
+        Composite rowsBody = new Composite( groupBody, SWT.NONE );
+        rowsBody.setLayout( new GridLayout( ) );
+        rowsBody.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, true, false ) );
+        
+        mOverwriteBox = new Button( rowsBody, SWT.CHECK );
+        mOverwriteBox.setText( Messages.getString("UnoPackageExportPage.OverwriteWithoutWarning") ); //$NON-NLS-1$
+        mOverwriteBox.setLayoutData( new GridData( SWT.BEGINNING, SWT.BEGINNING, false, false ) );
+        
+        mAutodeployBox = new Button( rowsBody, SWT.CHECK );
+        mAutodeployBox.setText( Messages.getString("UnoPackageExportPage.AutoDeploy") ); //$NON-NLS-1$
+        mAutodeployBox.setLayoutData( new GridData( SWT.BEGINNING, SWT.BEGINNING, false, false ) );
+    }
+    
+    /*
+     * Data handling and filtering methods
+     */
+    
+    /**
+     * Get the children of a projects without the ones to hide in the resource selection controls.
+     * 
+     * @param pUnoprj the project for which to get the children
+     * @return the resources to show
+     */
+    private List<Object> getFilteredChildren(IUnoidlProject pUnoprj) {
+        ArrayList<Object> result = new ArrayList<Object>();
+        IProject prj = ResourcesPlugin.getWorkspace().getRoot().getProject( pUnoprj.getName() );
+        
+        try {
+            IResource[] members = prj.members();
+            for (int i = 0; i < members.length; i++) {
+                if ( !isHiddenResource( members[i] ) ) {
+                    result.add(members[i]);
+                }
+            }
+        } catch ( CoreException e ) {
+        }
+        return result;
+    }
+    
+    /**
+     * @param pRes the resource to be checked
+     * 
+     * @return <code>true</code> if the resource is hidden in the lists, <code>false</code>
+     *      otherwise.
+     */
+    private boolean isHiddenResource( IResource pRes ) {
+        boolean hidden = false;
+        
+        // Hide the binaries: they are always included from somewhere else
+        IUnoidlProject unoprj = ProjectsManager.getProject( pRes.getProject().getName() );
+        hidden |= unoprj.getFolder( unoprj.getBuildPath() ).equals( pRes );
+        
+        IFolder[] bins = unoprj.getBinFolders();
+        for (IFolder bin : bins) {
+            hidden |= bin.equals( pRes );
+        }
+        
+        // Hide the hidden files
+        hidden |= pRes.getName().startsWith( "." ); //$NON-NLS-1$
+        
+        // Hide files which are always included in the package
+        hidden |= pRes.getName().equals( "description.xml" ); //$NON-NLS-1$
+        hidden |= pRes.getName().equals( "MANIFEST.MF" ); //$NON-NLS-1$
+        hidden |= pRes.getName().equals( "manifest.xml" ); //$NON-NLS-1$
+        
+        return hidden;
+    }
+
+    /**
+     * @param pResourceType the type of the resources to return by the provider.
+     * 
+     * @return a content provider for <code>IResource</code>s that returns 
+     * only children of the given resource type.
+     */
+    private ITreeContentProvider getResourceProvider( final int pResourceType ) {
+        return new WorkbenchContentProvider() {
+            public Object[] getChildren( Object pObject ) {
+                ArrayList<IResource> results = new ArrayList<IResource>();
+                
+                if (pObject instanceof ArrayList<?>) {
+                    ArrayList<?> objs = (ArrayList<?>)pObject;
+                    for (Object o : objs) {
+                        if ( o instanceof IResource ) {
+                            results.add( ( IResource ) o );
+                        }
+                    }
+                } else if (pObject instanceof IContainer) {
+                    IResource[] members = null;
+                    try {
+                        members = ((IContainer) pObject).members();
+
+                        //filter out the desired resource types
+                        for (int i = 0; i < members.length; i++) {
+                            //And the test bits with the resource types to see if they are what we want
+                            if ((members[i].getType() & pResourceType) > 0 && !isHiddenResource( members[i] ) ) {
+                                results.add(members[i]);
+                            }
+                        }
+                    } catch (CoreException e) {
+                    }
+                }
+                return results.toArray( );
+            }
+        };
+    }
+
+    /**
+     * Stores the controls values for the next instance of the page.
+     */
+    public void saveWidgetValues() {
+        IDialogSettings settings = getDialogSettings();
+        if ( settings != null ) {
+            settings.put( OVERWRITE_FILES, mOverwriteBox.getSelection() );
+            settings.put( AUTODEPLOY, mAutodeployBox.getSelection() );
+            
+            String[] topItems = new String[ MAX_DESTINATION_STORED ];
+            topItems[0] = mDestinationCombo.getText();
+            int i = 0;
+            int count = mDestinationCombo.getItemCount();
+            while ( i < count && i < MAX_DESTINATION_STORED - 1 ) {
+                topItems[i + 1] = mDestinationCombo.getItem( i );
+            }
+            settings.put( DESTINATION_HISTORY, topItems );
+        }
+    }
+    
+    /**
+     * Loads the saved values of the controls states.
+     */
+    public void restoreWidgetValues() {
+        IDialogSettings settings = getDialogSettings();
+        if ( settings != null ) {
+            mOverwriteBox.setSelection( settings.getBoolean( OVERWRITE_FILES ) );
+            mAutodeployBox.setSelection( settings.getBoolean( AUTODEPLOY ) );
+            String[] items = settings.getArray( DESTINATION_HISTORY );
+            for (String item : items) {
+                if ( item != null && !item.isEmpty() ) {
+                    mDestinationCombo.add( item );
+                }
+            }
+        }
+    }
+}
diff --git a/cpp/source/org/openoffice/ide/eclipse/cpp/CppBuilder.java b/cpp/source/org/openoffice/ide/eclipse/cpp/CppBuilder.java
index bcca7f8..1afdb6f 100644
--- a/cpp/source/org/openoffice/ide/eclipse/cpp/CppBuilder.java
+++ b/cpp/source/org/openoffice/ide/eclipse/cpp/CppBuilder.java
@@ -60,21 +60,33 @@ public class CppBuilder implements ILanguageBuilder {
     
     public static final String INCLUDE = "include"; //$NON-NLS-1$
 
+    /**
+     * {@inheritDoc}
+     */
     public IPath createLibrary(IUnoidlProject pUnoProject) throws Exception {
         // TODO Auto-generated method stub
         return null;
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void fillUnoPackage(UnoPackage pUnoPackage, IUnoidlProject pPrj) {
         // TODO Auto-generated method stub
 
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public String[] getBuildEnv(IUnoidlProject pUnoProject) {
         // TODO Auto-generated method stub
         return null;
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void generateFromTypes(ISdk pSdk, IOOo pOoo, IProject pPrj,
             File pTypesFile, File pBuildFolder, String pRootModule,
             IProgressMonitor pMonitor) {
diff --git a/cpp/source/org/openoffice/ide/eclipse/cpp/CppProjectHandler.java b/cpp/source/org/openoffice/ide/eclipse/cpp/CppProjectHandler.java
index 68a2733..20e69d7 100644
--- a/cpp/source/org/openoffice/ide/eclipse/cpp/CppProjectHandler.java
+++ b/cpp/source/org/openoffice/ide/eclipse/cpp/CppProjectHandler.java
@@ -195,6 +195,14 @@ public class CppProjectHandler implements IProjectHandler {
     }
     
     /**
+     * {@inheritDoc}
+     */
+    public IFolder[] getBinFolders(IUnoidlProject pUnoidlProject) {
+        // TODO Auto-generated method stub
+        return new IFolder[0];
+    }
+    
+    /**
      * Utility method providing the necessary macros to add depending on the OS.
      * 
      * @param pOs the OS for which to get the macros
diff --git a/cpp/source/org/openoffice/ide/eclipse/cpp/CppUI.java b/cpp/source/org/openoffice/ide/eclipse/cpp/CppUI.java
deleted file mode 100644
index 546ac5e..0000000
--- a/cpp/source/org/openoffice/ide/eclipse/cpp/CppUI.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*************************************************************************
- *
- * The Contents of this file are made available subject to the terms of
- * the GNU Lesser General Public License Version 2.1
- *
- * GNU Lesser General Public License Version 2.1
- * =============================================
- * Copyright 2009 by Novell, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- * 
- * The Initial Developer of the Original Code is: Cédric Bosdonnat.
- *
- * Copyright: 2009 by Novell, Inc.
- *
- * All Rights Reserved.
- * 
- ************************************************************************/
-package org.openoffice.ide.eclipse.cpp;
-
-import org.openoffice.ide.eclipse.core.model.UnoFactoryData;
-import org.openoffice.ide.eclipse.core.model.language.ILanguageUI;
-import org.openoffice.ide.eclipse.core.model.language.LanguageWizardPage;
-
-/**
- * Class for the C++ UI extensions to the core: nothing done here.
- * @author cbosdonnat
- *
- */
-public class CppUI implements ILanguageUI {
-
-    /**
-     * There is no need for C++ only options: then no page.
-     * 
-     * @param pData not used
-     * 
-     * @return <code>null</code>
-     */
-    public LanguageWizardPage getWizardPage(UnoFactoryData pData) {
-        return null;
-    }
-}
diff --git a/cpp/source/org/openoffice/ide/eclipse/cpp/Language.java b/cpp/source/org/openoffice/ide/eclipse/cpp/Language.java
index 9c80949..dc2da7d 100644
--- a/cpp/source/org/openoffice/ide/eclipse/cpp/Language.java
+++ b/cpp/source/org/openoffice/ide/eclipse/cpp/Language.java
@@ -30,9 +30,8 @@
  ************************************************************************/
 package org.openoffice.ide.eclipse.cpp;
 
-import org.openoffice.ide.eclipse.core.model.language.ILanguage;
+import org.openoffice.ide.eclipse.core.model.language.AbstractLanguage;
 import org.openoffice.ide.eclipse.core.model.language.ILanguageBuilder;
-import org.openoffice.ide.eclipse.core.model.language.ILanguageUI;
 import org.openoffice.ide.eclipse.core.model.language.IProjectHandler;
 
 /**
@@ -41,7 +40,7 @@ import org.openoffice.ide.eclipse.core.model.language.IProjectHandler;
  * @author cbosdonnat
  *
  */
-public class Language implements ILanguage {
+public class Language extends AbstractLanguage {
 
     /**
      * {@inheritDoc}
@@ -53,13 +52,6 @@ public class Language implements ILanguage {
     /**
      * {@inheritDoc}
      */
-    public ILanguageUI getLanguageUI() {
-        return new CppUI( );
-    }
-
-    /**
-     * {@inheritDoc}
-     */
     public IProjectHandler getProjectHandler() {
         return new CppProjectHandler( );
     }
diff --git a/cpp/source/org/openoffice/ide/eclipse/cpp/OOoSdkProjectJob.java b/cpp/source/org/openoffice/ide/eclipse/cpp/OOoSdkProjectJob.java
index cd5b5bd..c589cf6 100644
--- a/cpp/source/org/openoffice/ide/eclipse/cpp/OOoSdkProjectJob.java
+++ b/cpp/source/org/openoffice/ide/eclipse/cpp/OOoSdkProjectJob.java
@@ -155,31 +155,10 @@ public class OOoSdkProjectJob extends Job {
                     
                     File libFile = new File( dirPath.toFile(), syslibname );
                     if ( libFile.exists() ) {
-                        String dest = folder.getFile( libname ).getLocation().toOSString();
                         String orig = libFile.getAbsolutePath();
                         
                         // Run ln to link the files: present on all *NIX platforms
-                        String[] command = { 
-                            "ln", "-s", //$NON-NLS-1$ //$NON-NLS-2$
-                            orig, dest
-                        };
-                        try {
-                            Process proc = Runtime.getRuntime().exec( command );
-                            
-                            StringBuffer buf = getErrorString( proc );
-                            if ( !buf.toString().trim().equals( new String( ) ) ) {
-                                String msg = Messages.getString("OOoSdkProjectJob.LinkError") + //$NON-NLS-1$ 
-                                    libname + "\n"; //$NON-NLS-1$
-                                msg += buf.toString();
-                                PluginLogger. error( msg );
-                            }
-                            
-                            proc.waitFor();
-                            
-                        } catch ( Exception e ) {
-                            PluginLogger.error( Messages.getString("OOoSdkProjectJob.LinkError") + //$NON-NLS-1$ 
-                                    libname, e );
-                        }
+                        doLink( orig, folder, libname );
                     }
                 }
             }
@@ -188,6 +167,38 @@ public class OOoSdkProjectJob extends Job {
     }
 
     /**
+     * Create the link for a library.
+     * 
+     * @param pOrig the file to link from
+     * @param pFolder the folder where to create the link
+     * @param pLibname the name of the library in the new folder
+     */
+    private void doLink( String pOrig, IFolder pFolder, String pLibname ) {
+        String dest = pFolder.getFile( pLibname ).getLocation().toOSString();
+        String[] command = { 
+            "ln", "-s", //$NON-NLS-1$ //$NON-NLS-2$
+            pOrig, dest
+        };
+        try {
+            Process proc = Runtime.getRuntime().exec( command );
+
+            StringBuffer buf = getErrorString( proc );
+            if ( !buf.toString().trim().equals( new String( ) ) ) {
+                String msg = Messages.getString("OOoSdkProjectJob.LinkError") + //$NON-NLS-1$ 
+                    pLibname + "\n"; //$NON-NLS-1$
+                msg += buf.toString();
+                PluginLogger. error( msg );
+            }
+
+            proc.waitFor();
+
+        } catch ( Exception e ) {
+            PluginLogger.error( Messages.getString("OOoSdkProjectJob.LinkError") + //$NON-NLS-1$ 
+                    pLibname, e );
+        }
+    }
+
+    /**
      * Utility method creating the headers in the SDK project.
      * 
      * @param pProject the project in which to create the headers
diff --git a/java/plugin.xml b/java/plugin.xml
index 7343ff0..6e86efb 100644
--- a/java/plugin.xml
+++ b/java/plugin.xml
@@ -5,7 +5,14 @@
          point="org.openoffice.ide.eclipse.core.language">
       <language
             class="org.openoffice.ide.eclipse.java.Language"
-            name="Java"/>
+            name="Java">
+         <newWizardPage
+               class="org.openoffice.ide.eclipse.java.JavaWizardPage">
+         </newWizardPage>
+         <exportBuildPart
+               class="org.openoffice.ide.eclipse.java.JavaExportPart">
+         </exportBuildPart>
+      </language>
    </extension>
    <extension
          id="org.openoffice.ide.eclipse.java.builder"
diff --git a/java/source/org/openoffice/ide/eclipse/java/JavaExportPart.java b/java/source/org/openoffice/ide/eclipse/java/JavaExportPart.java
new file mode 100644
index 0000000..0df5abf
--- /dev/null
+++ b/java/source/org/openoffice/ide/eclipse/java/JavaExportPart.java
@@ -0,0 +1,109 @@
+/*************************************************************************
+ *
+ * The Contents of this file are made available subject to the terms of
+ * the GNU Lesser General Public License Version 2.1
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2009 by Cédric Bosdonnat
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ * 
+ * The Initial Developer of the Original Code is: Cédric Bosdonnat.
+ *
+ * Copyright: 2009 by Cédric Bosdonnat
+ *
+ * All Rights Reserved.
+ * 
+ ************************************************************************/
+package org.openoffice.ide.eclipse.java;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.openoffice.ide.eclipse.core.model.language.LanguageExportPart;
+import org.openoffice.ide.eclipse.core.wizards.pages.ManifestExportPage;
+
+/**
+ * Dialog part for the Ant scripts export configuration.
+ * 
+ * @author Cédric Bosdonnat
+ *
+ */
+public class JavaExportPart extends LanguageExportPart {
+
+    private static final String DEFAULT_ANT_FILENAME = "build.xml"; //$NON-NLS-1$
+    
+    private Button mSaveScripts;
+    private Composite mNameRow;
+    private Label mNameRowLbl;
+    private Text mNameRowTxt;
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void createControls(Composite pParent) {
+        mSaveScripts = new Button( pParent, SWT.CHECK );
+        mSaveScripts.setText( Messages.getString("JavaExportPart.SaveAntScript") ); //$NON-NLS-1$
+        mSaveScripts.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, true, false ) );
+        mSaveScripts.addSelectionListener( new SelectionListener() {
+            
+            public void widgetSelected( SelectionEvent pE ) {
+                boolean enabled = mSaveScripts.getSelection();
+                mNameRowLbl.setEnabled( enabled );
+                mNameRowTxt.setEnabled( enabled );
+            }
+            
+            public void widgetDefaultSelected( SelectionEvent pE ) {
+                widgetSelected( pE );
+            }
+        });
+
+        mNameRow = new Composite( pParent, SWT.NONE );
+        mNameRow.setLayout( new GridLayout( 2, false ) );
+        GridData gd = new GridData( SWT.FILL, SWT.BEGINNING, true, false );
+        gd.horizontalIndent = ManifestExportPage.HORIZONTAL_INDENT;
+        mNameRow.setLayoutData( gd );
+        
+        mNameRowLbl = new Label( mNameRow, SWT.NONE );
+        mNameRowLbl.setLayoutData( new GridData( SWT.BEGINNING, SWT.CENTER, false, false ) );
+        mNameRowLbl.setText( Messages.getString("JavaExportPart.AntFile") ); //$NON-NLS-1$
+        mNameRowLbl.setEnabled( false );
+        
+        mNameRowTxt = new Text( mNameRow, SWT.BORDER | SWT.SINGLE );
+        mNameRowTxt.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, false ) );
+        mNameRowTxt.setText( DEFAULT_ANT_FILENAME );
+        mNameRowTxt.setEnabled( false );
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void dispose() {
+        if ( mSaveScripts != null ) {
+            mSaveScripts.dispose();
+            mNameRow.dispose();
+        }
+    }
+
+}
diff --git a/java/source/org/openoffice/ide/eclipse/java/JavaProjectHandler.java b/java/source/org/openoffice/ide/eclipse/java/JavaProjectHandler.java
index 3c8c710..36136f8 100644
--- a/java/source/org/openoffice/ide/eclipse/java/JavaProjectHandler.java
+++ b/java/source/org/openoffice/ide/eclipse/java/JavaProjectHandler.java
@@ -44,11 +44,14 @@
 package org.openoffice.ide.eclipse.java;
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.Vector;
 
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IWorkspaceRoot;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
@@ -57,6 +60,7 @@ import org.eclipse.core.runtime.Path;
 import org.eclipse.jdt.core.IClasspathEntry;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.launching.JavaRuntime;
 import org.openoffice.ide.eclipse.core.PluginLogger;
 import org.openoffice.ide.eclipse.core.model.IUnoFactoryConstants;
@@ -261,6 +265,31 @@ public class JavaProjectHandler implements IProjectHandler {
     public String getRegistrationClassName(IUnoidlProject pProject) {
         return pProject.getProperty(P_REGISTRATION_CLASSNAME);
     }
+
+    /**
+     * {@inheritDoc}
+     */
+    public IFolder[] getBinFolders(IUnoidlProject pUnoidlProject) {
+        ArrayList< IFolder > folders = new ArrayList<IFolder>();
+        
+        IWorkspaceRoot workspace = ResourcesPlugin.getWorkspace().getRoot();
+        IProject prj = workspace.getProject( pUnoidlProject.getName() );
+        IJavaProject javaPrj = JavaCore.create( prj );
+        try {
+            folders.add( workspace.getFolder( javaPrj.getOutputLocation() ) );
+        
+            IClasspathEntry[] entries = javaPrj.getRawClasspath();
+            for (IClasspathEntry entry : entries) {
+                if ( entry.getEntryKind() == IClasspathEntry.CPE_SOURCE  && 
+                        entry.getOutputLocation() != null ) {
+                    folders.add( workspace.getFolder( entry.getOutputLocation() ) );
+                }
+            }
+        } catch ( JavaModelException e ) {
+        }
+        
+        return folders.toArray( new IFolder[folders.size()] );
+    }
     
     //--------------------------------------------- Jar finding private methods
     
diff --git a/java/source/org/openoffice/ide/eclipse/java/JavaUI.java b/java/source/org/openoffice/ide/eclipse/java/JavaUI.java
deleted file mode 100644
index cd1f1fd..0000000
--- a/java/source/org/openoffice/ide/eclipse/java/JavaUI.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*************************************************************************
- *
- * $RCSfile: JavaUI.java,v $
- *
- * $Revision: 1.2 $
- *
- * last change: $Author: cedricbosdo $ $Date: 2007/11/25 20:32:38 $
- *
- * The Contents of this file are made available subject to the terms of
- * the GNU Lesser General Public License Version 2.1
- *
- * Sun Microsystems Inc., October, 2000
- *
- *
- * GNU Lesser General Public License Version 2.1
- * =============================================
- * Copyright 2000 by Sun Microsystems, Inc.
- * 901 San Antonio Road, Palo Alto, CA 94303, USA
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- * 
- * The Initial Developer of the Original Code is: Sun Microsystems, Inc..
- *
- * Copyright: 2002 by Sun Microsystems, Inc.
- *
- * All Rights Reserved.
- *
- * Contributor(s): Cedric Bosdonnat
- *
- *
- ************************************************************************/
-package org.openoffice.ide.eclipse.java;
-
-import org.openoffice.ide.eclipse.core.model.UnoFactoryData;
-import org.openoffice.ide.eclipse.core.model.language.ILanguageUI;
-import org.openoffice.ide.eclipse.core.model.language.LanguageWizardPage;
-
-/**
- * The language UI implementation for Java.
- * 
- * @author cedricbosdo
- *
- */
-public class JavaUI implements ILanguageUI {
-
-    /**
-     * {@inheritDoc}
-     */
-    public LanguageWizardPage getWizardPage(UnoFactoryData pData) {
-        return new JavaWizardPage(pData);
-    }
-}
diff --git a/java/source/org/openoffice/ide/eclipse/java/JavaWizardPage.java b/java/source/org/openoffice/ide/eclipse/java/JavaWizardPage.java
index 313c334..cce0895 100644
--- a/java/source/org/openoffice/ide/eclipse/java/JavaWizardPage.java
+++ b/java/source/org/openoffice/ide/eclipse/java/JavaWizardPage.java
@@ -73,12 +73,9 @@ public class JavaWizardPage extends LanguageWizardPage {
     
     /**
      * Constructor.
-     * 
-     * @param pData the uno factory data to use to set the page.
      */
-    public JavaWizardPage(UnoFactoryData pData) {
+    public JavaWizardPage() {
         super();
-        setProjectInfos(pData);
         setImageDescriptor(OOoJavaPlugin.getDefault().getImageRegistry().
                 getDescriptor(OOoJavaPlugin.WIZBAN));
         setTitle(Messages.getString("JavaWizardPage.PageTitle")); //$NON-NLS-1$
diff --git a/java/source/org/openoffice/ide/eclipse/java/Language.java b/java/source/org/openoffice/ide/eclipse/java/Language.java
index 295ab62..6245535 100644
--- a/java/source/org/openoffice/ide/eclipse/java/Language.java
+++ b/java/source/org/openoffice/ide/eclipse/java/Language.java
@@ -43,9 +43,8 @@
  ************************************************************************/
 package org.openoffice.ide.eclipse.java;
 
-import org.openoffice.ide.eclipse.core.model.language.ILanguage;
+import org.openoffice.ide.eclipse.core.model.language.AbstractLanguage;
 import org.openoffice.ide.eclipse.core.model.language.ILanguageBuilder;
-import org.openoffice.ide.eclipse.core.model.language.ILanguageUI;
 import org.openoffice.ide.eclipse.core.model.language.IProjectHandler;
 
 /**
@@ -53,7 +52,7 @@ import org.openoffice.ide.eclipse.core.model.language.IProjectHandler;
  * 
  * @author cedricbosdo
  */
-public class Language implements ILanguage {
+public class Language extends AbstractLanguage {
 
     /**
      * {@inheritDoc}
@@ -65,13 +64,6 @@ public class Language implements ILanguage {
     /**
      * {@inheritDoc}
      */
-    public ILanguageUI getLanguageUI() {
-        return new JavaUI();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
     public IProjectHandler getProjectHandler() {
         return new JavaProjectHandler();
     }
diff --git a/java/source/org/openoffice/ide/eclipse/java/build/FilesVisitor.java b/java/source/org/openoffice/ide/eclipse/java/build/FilesVisitor.java
index 605ae92..ea2f084 100644
--- a/java/source/org/openoffice/ide/eclipse/java/build/FilesVisitor.java
+++ b/java/source/org/openoffice/ide/eclipse/java/build/FilesVisitor.java
@@ -1,3 +1,33 @@
+/*************************************************************************
+ *
+ * The Contents of this file are made available subject to the terms of
+ * the GNU Lesser General Public License Version 2.1
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2009 by Cédric Bosdonnat
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ * 
+ * The Initial Developer of the Original Code is: Cédric Bosdonnat.
+ *
+ * Copyright: 2009 by Cédric Bosdonnat
+ *
+ * All Rights Reserved.
+ * 
+ ************************************************************************/
 package org.openoffice.ide.eclipse.java.build;
 
 import java.util.ArrayList;
@@ -7,15 +37,29 @@ import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceVisitor;
 import org.eclipse.core.runtime.CoreException;
 
+/**
+ * Resource visitor collecting the files of a directory.
+ * 
+ * @author Cédric Bosdonnat
+ *
+ */
 public class FilesVisitor implements IResourceVisitor {
 
     ArrayList<IFile> mFiles = new ArrayList<IFile>();
     ArrayList<IResource> mExceptions = new ArrayList<IResource>();
     
+    /**
+     * Adds a resource to skip during the visit.
+     * 
+     * @param pRes the resource to skip
+     */
     public void addException( IResource pRes ) {
         mExceptions.add( pRes );
     }
     
+    /**
+     * {@inheritDoc}
+     */
     public boolean visit(IResource pResource) throws CoreException {
         
         if ( pResource.getType() == IResource.FILE ) {
@@ -33,6 +77,9 @@ public class FilesVisitor implements IResourceVisitor {
         return visitChildren;
     }
 
+    /**
+     * @return all the files found during the visit.
+     */
     public IFile[] getFiles( ) {
         return mFiles.toArray( new IFile[ mFiles.size() ] );
     }
diff --git a/java/source/org/openoffice/ide/eclipse/java/build/UnoManifestProvider.java b/java/source/org/openoffice/ide/eclipse/java/build/UnoManifestProvider.java
index bdc856f..b8b83f3 100644
--- a/java/source/org/openoffice/ide/eclipse/java/build/UnoManifestProvider.java
+++ b/java/source/org/openoffice/ide/eclipse/java/build/UnoManifestProvider.java
@@ -37,20 +37,34 @@ import java.util.jar.Attributes.Name;
 import org.eclipse.jdt.internal.ui.jarpackager.ManifestProvider;
 import org.eclipse.jdt.ui.jarpackager.JarPackageData;
 
+/**
+ * Class providing the MANIFEST.MF contents to the Jar writer.
+ * 
+ * @author Cédric Bosdonnat
+ *
+ */
 @SuppressWarnings("restriction")
 public class UnoManifestProvider extends ManifestProvider {
 
     private String mRegClass;
 
+    /**
+     * Constructor.
+     * 
+     * @param pRegClassname the registration class name
+     */
     public UnoManifestProvider( String pRegClassname ) {
         mRegClass = pRegClassname;
     }
     
+    /**
+     * {@inheritDoc}
+     */
     @Override
-    protected void putAdditionalEntries(Manifest manifest,
-            JarPackageData jarPackage) {
+    protected void putAdditionalEntries(Manifest pManifest,
+            JarPackageData pJarPackage) {
         
         Name name = new Attributes.Name( "RegistrationClassName" ); //$NON-NLS-1$
-        manifest.getMainAttributes().put( name, mRegClass );
+        pManifest.getMainAttributes().put( name, mRegClass );
     }
 }
diff --git a/java/source/org/openoffice/ide/eclipse/java/client/JODContainerPage.java b/java/source/org/openoffice/ide/eclipse/java/client/JODContainerPage.java
index 0269ed1..0023394 100644
--- a/java/source/org/openoffice/ide/eclipse/java/client/JODContainerPage.java
+++ b/java/source/org/openoffice/ide/eclipse/java/client/JODContainerPage.java
@@ -104,7 +104,8 @@ public class JODContainerPage extends WizardPage implements
         body.setLayout( new GridLayout( LAYOUT_COLS, false ) );
         
         // SLF4J boolean row
-        mSlf4jRow = new BooleanRow( body, new String(), Messages.getString("JODContainerPage.SLF4JLabel") ); //$NON-NLS-1$
+        mSlf4jRow = new BooleanRow( body, new String(), 
+                Messages.getString("JODContainerPage.SLF4JLabel") ); //$NON-NLS-1$
         mSlf4jRow.setValue( mSlf4j );
         mSlf4jRow.setFieldChangedListener( new IFieldChangedListener() {
             
diff --git a/java/source/org/openoffice/ide/eclipse/java/messages.properties b/java/source/org/openoffice/ide/eclipse/java/messages.properties
index a49c3f6..383268b 100644
--- a/java/source/org/openoffice/ide/eclipse/java/messages.properties
+++ b/java/source/org/openoffice/ide/eclipse/java/messages.properties
@@ -3,6 +3,8 @@ Language.NatureSettingFailed=Setting Java nature failed
 Language.UnreadableOutputError=Unreadable output error
 Language.CreateCodeError=Code generation failed
 Language.GetClasspathError=Failed to get the project classpath
+JavaExportPart.AntFile=Ant build file
+JavaExportPart.SaveAntScript=Save as Ant script
 JavaWizardPage.IncludeTestClasses=Include base classes for tests
 JavaWizardPage.JavaVersion=Java version
 JavaWizardPage.JavaVersionTooltip=Defines the minimal required java version of the project.


More information about the ooo-build-commit mailing list