Index: branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/java/org/gvsig/mkmvnproject/CreatePluginConsolePanel.java
===================================================================
--- branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/java/org/gvsig/mkmvnproject/CreatePluginConsolePanel.java	(revision 38542)
+++ branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/java/org/gvsig/mkmvnproject/CreatePluginConsolePanel.java	(revision 38543)
@@ -1,216 +0,0 @@
-/* gvSIG. Geographic Information System of the Valencian Government
- *
- * Copyright (C) 2007-2008 Infrastructures and Transports Department
- * of the Valencian Government (CIT)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA  02110-1301, USA.
- *
- */
-package org.gvsig.mkmvnproject;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Dimension;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.PipedInputStream;
-import java.io.PipedOutputStream;
-import java.io.PrintStream;
-
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTextArea;
-import javax.swing.SwingUtilities;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * A panel which shows the execution log messages of the create plugin process.
- * 
- * @author gvSIG Team
- * @version $Id$
- */
-public class CreatePluginConsolePanel extends JPanel {
-
-	private static final long serialVersionUID = -7213048219847956909L;
-
-	private static final Logger LOG = LoggerFactory
-			.getLogger(CreatePluginConsolePanel.class);
-
-	private JTextArea console;
-
-	private PrintStream printStream;
-	private PipedOutputStream pipedos;
-	private PipedInputStream pipedis;
-	private Thread consoleThread;
-
-	/**
-	 * Constructor.
-	 * 
-	 * @throws IOException
-	 *             if there is an error creating the console streams
-	 */
-	public CreatePluginConsolePanel() throws IOException {
-		super();
-		initialize();
-	}
-
-	/**
-	 * Constructor.
-	 * 
-	 * @param isDoubleBuffered
-	 *            if the panel must be double buffered.
-	 * @throws IOException
-	 *             if there is an error creating the console streams
-	 */
-	public CreatePluginConsolePanel(boolean isDoubleBuffered)
-			throws IOException {
-		super(isDoubleBuffered);
-		initialize();
-	}
-
-	/**
-	 * Initializes the panel GUI.
-	 * 
-	 * @throws IOException
-	 */
-	private void initialize() throws IOException {
-		Dimension dimension = new Dimension(600, 200);
-		setSize(dimension);
-		setLayout(new BorderLayout());
-
-		console = new JTextArea();
-		console.setEditable(false);
-		// console.setColumns(20);
-		// console.setRows(5);
-		console.setBackground(Color.WHITE);
-		console.setLineWrap(true);
-		console.setWrapStyleWord(true);
-
-		JScrollPane consoleScrollPane = new JScrollPane(console);
-		add(consoleScrollPane, BorderLayout.CENTER);
-
-		pipedis = new PipedInputStream();
-
-		pipedos = new PipedOutputStream(pipedis);
-
-		printStream = new PrintStream(pipedos);
-		consoleThread = new ConsoleThread(pipedis, console);
-		consoleThread.start();
-	}
-
-	/**
-	 * Returns a {@link PrintStream} which allows to write messages to the
-	 * console.
-	 * 
-	 * @return a {@link PrintStream} which allows to write messages to the
-	 *         console
-	 */
-	public PrintStream getPrintStream() {
-		return printStream;
-	}
-
-	/**
-	 * Returns a {@link PrintStream} which allows to write error messages to the
-	 * console.
-	 * 
-	 * @return a {@link PrintStream} which allows to write error messages to the
-	 *         console
-	 */
-	public PrintStream getErrorPrintStream() {
-		return getPrintStream();
-	}
-
-	/**
-	 * Closes the console. Once this method is called, any more calls to the
-	 * console {@link PrintStream} will throw an exception.
-	 */
-	public void closeConsole() {
-		printStream.flush();
-		printStream.close();
-		try {
-			pipedos.close();
-			pipedis.close();
-			// Wait for the thread to finish
-			consoleThread.join(500);
-		} catch (IOException e) {
-			LOG.warn("Error closing the internal piped streams", e);
-		} catch (InterruptedException e) {
-			// Nothing special to do
-			LOG.debug("Console thread interrupted while waiting to finish", e);
-		}
-	}
-
-	private static final class ConsoleThread extends Thread {
-
-		private final PipedInputStream pipedis;
-		private final JTextArea console;
-
-		/**
-		 * Constructor.
-		 */
-		public ConsoleThread(PipedInputStream pipedis, JTextArea console) {
-			super("Create plugin console update thread");
-			setDaemon(true);
-			this.pipedis = pipedis;
-			this.console = console;
-		}
-
-		@Override
-		public void run() {
-			try {
-				BufferedReader reader = new BufferedReader(
-						new InputStreamReader(pipedis));
-				String line;
-				while ((line = reader.readLine()) != null) {
-					SwingUtilities.invokeLater(new ConsoleUpdateRunnable(
-							console, line));
-				}
-				LOG.debug("Console input stream end, finish reading");
-				reader.close();
-			} catch (IOException e) {
-                LOG.warn("Error reading from the console string", e);
-			}
-		}
-
-	}
-
-	/**
-	 * Runnable used to update the console text field.
-	 * 
-	 * @author gvSIG Team
-	 * @version $Id$
-	 */
-	private static final class ConsoleUpdateRunnable implements Runnable {
-		private final String newLine;
-		private final JTextArea console;
-
-		/**
-		 * Constructor.
-		 */
-		public ConsoleUpdateRunnable(JTextArea console, String newLine) {
-			this.console = console;
-			this.newLine = newLine;
-		}
-
-		public void run() {
-			console.append(newLine);
-			console.append("\n");
-		}
-	}
-}
Index: branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/java/org/gvsig/mkmvnproject/CreatePluginConsoleWindow.java
===================================================================
--- branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/java/org/gvsig/mkmvnproject/CreatePluginConsoleWindow.java	(revision 38542)
+++ branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/java/org/gvsig/mkmvnproject/CreatePluginConsoleWindow.java	(revision 38543)
@@ -1,101 +0,0 @@
-/* gvSIG. Geographic Information System of the Valencian Government
- *
- * Copyright (C) 2007-2008 Infrastructures and Transports Department
- * of the Valencian Government (CIT)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA  02110-1301, USA.
- *
- */
-package org.gvsig.mkmvnproject;
-
-import java.awt.Dimension;
-import java.io.IOException;
-
-import org.gvsig.andami.ui.mdiManager.IWindow;
-import org.gvsig.andami.ui.mdiManager.IWindowListener;
-import org.gvsig.andami.ui.mdiManager.WindowInfo;
-
-/**
- * A gvSIG window which shows the execution log messages of the create plugin
- * process.
- * 
- * @author gvSIG Team
- * @version $Id$
- */
-public class CreatePluginConsoleWindow extends CreatePluginConsolePanel
-		implements IWindow, IWindowListener {
-
-	private static final long serialVersionUID = -5589080107545290284L;
-
-	private WindowInfo info;
-
-	private Object profile = WindowInfo.EDITOR_PROFILE;
-
-	/**
-	 * Constructor.
-	 * 
-	 * @throws IOException
-	 *             if there is an error creating the console streams
-	 */
-	public CreatePluginConsoleWindow() throws IOException {
-		super();
-		initializeWindow();
-	}
-
-	/**
-	 * Constructor.
-	 * 
-	 * @param isDoubleBuffered
-	 *            if the panel must be double buffered.
-	 * @throws IOException
-	 *             if there is an error creating the console streams
-	 */
-	public CreatePluginConsoleWindow(boolean isDoubleBuffered) throws IOException {
-		super(isDoubleBuffered);
-		initializeWindow();
-	}
-
-	/**
-	 * Initializes the window.
-	 */
-	private void initializeWindow() {
-		Dimension dimension = new Dimension(600, 300);
-		setSize(dimension);
-		int code = WindowInfo.ICONIFIABLE | WindowInfo.MAXIMIZABLE
-				| WindowInfo.RESIZABLE | WindowInfo.MODELESSDIALOG;
-		profile = WindowInfo.EDITOR_PROFILE;
-		info = new WindowInfo(code);
-		info.setTitle("Console");
-		info.setMinimumSize(dimension);
-	}
-
-	public WindowInfo getWindowInfo() {
-		return info;
-	}
-
-	public Object getWindowProfile() {
-		return profile;
-	}
-
-	public void windowActivated() {
-		// Nothing to do
-	}
-
-	public void windowClosed() {
-		super.closeConsole();
-	}
-
-}
Index: branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/java/org/gvsig/mkmvnproject/gui/CreatePluginConsoleWindow.java
===================================================================
--- branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/java/org/gvsig/mkmvnproject/gui/CreatePluginConsoleWindow.java	(revision 0)
+++ branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/java/org/gvsig/mkmvnproject/gui/CreatePluginConsoleWindow.java	(revision 38543)
@@ -0,0 +1,101 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.mkmvnproject.gui;
+
+import java.awt.Dimension;
+import java.io.IOException;
+
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.IWindowListener;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+
+/**
+ * A gvSIG window which shows the execution log messages of the create plugin
+ * process.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class CreatePluginConsoleWindow extends CreatePluginConsolePanel
+		implements IWindow, IWindowListener {
+
+	private static final long serialVersionUID = -5589080107545290284L;
+
+	private WindowInfo info;
+
+	private Object profile = WindowInfo.EDITOR_PROFILE;
+
+	/**
+	 * Constructor.
+	 * 
+	 * @throws IOException
+	 *             if there is an error creating the console streams
+	 */
+	public CreatePluginConsoleWindow() throws IOException {
+		super();
+		initializeWindow();
+	}
+
+	/**
+	 * Constructor.
+	 * 
+	 * @param isDoubleBuffered
+	 *            if the panel must be double buffered.
+	 * @throws IOException
+	 *             if there is an error creating the console streams
+	 */
+	public CreatePluginConsoleWindow(boolean isDoubleBuffered) throws IOException {
+		super(isDoubleBuffered);
+		initializeWindow();
+	}
+
+	/**
+	 * Initializes the window.
+	 */
+	private void initializeWindow() {
+		Dimension dimension = new Dimension(600, 300);
+		setSize(dimension);
+		int code = WindowInfo.ICONIFIABLE | WindowInfo.MAXIMIZABLE
+				| WindowInfo.RESIZABLE | WindowInfo.MODELESSDIALOG;
+		profile = WindowInfo.EDITOR_PROFILE;
+		info = new WindowInfo(code);
+		info.setTitle("Console");
+		info.setMinimumSize(dimension);
+	}
+
+	public WindowInfo getWindowInfo() {
+		return info;
+	}
+
+	public Object getWindowProfile() {
+		return profile;
+	}
+
+	public void windowActivated() {
+		// Nothing to do
+	}
+
+	public void windowClosed() {
+		super.closeConsole();
+	}
+
+}
Index: branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/java/org/gvsig/mkmvnproject/gui/settings/PlatformPropertiesWindow.java
===================================================================
--- branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/java/org/gvsig/mkmvnproject/gui/settings/PlatformPropertiesWindow.java	(revision 0)
+++ branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/java/org/gvsig/mkmvnproject/gui/settings/PlatformPropertiesWindow.java	(revision 38543)
@@ -0,0 +1,325 @@
+/* gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright © 2007-2012 gvSIG Association
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.mkmvnproject.gui.settings;
+
+import java.awt.BorderLayout;
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.GridLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollBar;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.i18n.Messages;
+
+
+/**
+ * This dialog lets the user write the file .gvsig.platform.properties
+ * 
+ * @author jldominguez
+ *
+ */
+public class PlatformPropertiesWindow extends JPanel
+implements IWindow, ActionListener, DocumentListener {
+    
+    private static final Logger logger =
+        LoggerFactory.getLogger(PlatformPropertiesWindow.class);
+    
+    private WindowInfo winfo = null;
+    private File targetFile = null;
+    private boolean isWindows = false;
+    
+    private JPanel northPanel = null;
+    
+    private JTextArea contentArea = null;
+    
+    private JPanel southPanel = null;
+    private JButton saveButton = null;
+    private JButton suggButton = null;
+    private JButton okButton = null;
+    private JButton cancelButton = null;
+    
+    private boolean validSettings = false; 
+    
+    public PlatformPropertiesWindow(
+        File non_existing_file, boolean is_win) {
+        
+        targetFile = non_existing_file;
+        isWindows = is_win;
+        init();
+    }
+
+    private void init() {
+        
+        this.setLayout(new BorderLayout());
+        
+        northPanel = new JPanel(new GridBagLayout());
+        GridBagConstraints c = new GridBagConstraints();  
+        c.insets = new Insets(1, 10, 1, 10);
+        c.weightx = 0.5; // 
+        c.fill = GridBagConstraints.HORIZONTAL;
+        c.gridx = 0;
+        
+        c.gridy = 0;
+        northPanel.add(new JLabel(" "), c);
+        c.gridy = 1;
+        northPanel.add(new JLabel(Messages.getText(
+            "_Mandatory_platform_properties_file_not_found")), c);
+        c.gridy = 2;
+        northPanel.add(new JLabel(Messages.getText(
+            "_Use_this_text_editor_to_write_it")), c);
+        c.gridy = 3;
+        northPanel.add(new JLabel(" "), c);
+        // =============================================
+        // =============================================
+        southPanel = new JPanel();
+        southPanel.setLayout(new GridLayout(1, 5, 8, 4));
+        // ------------
+        southPanel.add(getSaveButton());
+        southPanel.add(getSuggButton());
+        // ------------
+        southPanel.add(new JLabel(" "));
+        // ------------
+        southPanel.add(getOkButton());
+        southPanel.add(getCancelButton());
+        // =============================================
+        
+        this.add(northPanel, BorderLayout.NORTH);
+        
+        JScrollPane scroll = new JScrollPane();
+        scroll.setViewportView(getContentArea());
+        scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+        scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+        this.add(scroll, BorderLayout.CENTER);
+        
+        JPanel south2 = new JPanel(new GridBagLayout());
+        GridBagConstraints cs = new GridBagConstraints();
+        cs.insets = new Insets(15,15,15,15);
+        south2.add(southPanel, cs);
+        
+        this.add(south2, BorderLayout.SOUTH);
+    }
+
+    private JTextArea getContentArea() {
+        
+        if (contentArea == null) {
+            contentArea = new JTextArea();
+            loadSuggested(contentArea);
+            contentArea.getDocument().addDocumentListener(this);
+        }
+        return contentArea;
+    }
+
+    private JButton getCancelButton() {
+        if (cancelButton == null) {
+            cancelButton = new JButton(Messages.getText("_Cancel"));
+            cancelButton.addActionListener(this);
+        }
+        return cancelButton;
+    }
+
+    private JButton getSuggButton() {
+        if (suggButton == null) {
+            suggButton = new JButton(Messages.getText("_Suggested"));
+            suggButton.addActionListener(this);
+        }
+        return suggButton;
+    }
+
+    private JButton getOkButton() {
+        if (okButton == null) {
+            okButton = new JButton(Messages.getText("_Accept"));
+            okButton.addActionListener(this);
+            okButton.setEnabled(false);
+        }
+        return okButton;
+    }
+
+    private JButton getSaveButton() {
+        if (saveButton == null) {
+            saveButton = new JButton(Messages.getText("_Save"));
+            Font fnt = saveButton.getFont();
+            fnt = fnt.deriveFont(Font.BOLD);
+            saveButton.setFont(fnt);
+            saveButton.addActionListener(this);
+        }
+        return saveButton;
+    }
+
+    // ===================================================
+    // ===================================================
+
+    public WindowInfo getWindowInfo() {
+        if (winfo == null) {
+            winfo = new WindowInfo(WindowInfo.MODALDIALOG);
+            winfo.setWidth(550);
+            winfo.setHeight(350);
+            winfo.setTitle(
+                Messages.getText("_Checking_platform_properties"));
+        }
+        return winfo;
+    }
+
+    public Object getWindowProfile() {
+        return WindowInfo.DIALOG_PROFILE;
+    }
+    
+    public static final String SUGGESTED_WINDOWN_CONTENT =
+        "native_platform=win\n" +
+        "native_distribution=nt\n" +
+        "native_compiler=vs8\n" +
+        "native_arch=i386\n" +
+        "native_libraryType=dynamic";
+    
+    public static final String SUGGESTED_NON_WINDOWS_CONTENT =
+            "native_platform=linux\n" +
+            "native_distribution=all\n" +
+            "native_compiler=gcc4\n" +
+            "native_arch=i386\n" +
+            "native_libraryType=dynamic";
+
+
+    public void actionPerformed(ActionEvent e) {
+        
+        Object src = e.getSource();
+        if (src == getOkButton()) {
+            if (getSaveButton().isEnabled()) {
+                if (!userAcceptsNotSaving()) {
+                    return;
+                }
+            }
+            validSettings = true;
+            PluginServices.getMDIManager().closeWindow(this);
+        }
+        
+        if (src == getCancelButton()) {
+            validSettings = false;
+            PluginServices.getMDIManager().closeWindow(this);
+        }
+        
+        if (src == getSaveButton()) {
+            if (saveContent()) {
+                this.getSaveButton().setEnabled(false);
+            }
+            this.refreshOkButton();
+        }
+        
+        if (src == getSuggButton()) {
+            loadSuggested(getContentArea());
+            this.getSaveButton().setEnabled(true);
+        }
+        
+    }
+
+
+    /**
+     * @return
+     */
+    private boolean userAcceptsNotSaving() {
+        
+        String _msg =
+            Messages.getText("_There_are_unsaved_changes_Continue_question");
+        String _tit =
+            Messages.getText("_Not_saved");
+        int usr_opt = JOptionPane.showConfirmDialog(
+            this, _msg, _tit, JOptionPane.YES_NO_OPTION,
+            JOptionPane.WARNING_MESSAGE);
+        return (usr_opt == JOptionPane.YES_OPTION);
+    }
+
+    private boolean saveContent() {
+        
+        try {
+            if (targetFile.exists()) {
+                targetFile.delete();
+            }
+            targetFile.createNewFile();
+            
+            FileOutputStream fos = new FileOutputStream(targetFile);
+            String contnt = getContentArea().getText();
+            fos.write(contnt.getBytes());
+            fos.flush();
+            fos.close();
+            return true;
+        } catch (IOException ioe) {
+            logger.info("While writing file: " + ioe.getMessage(), ioe);
+            String _msg = Messages.getText("_Unable_to_store_file")
+                + ": " + targetFile.getAbsolutePath();
+            String _tit = Messages.getText("_Error");
+            JOptionPane.showMessageDialog(
+                this, _msg, _tit, JOptionPane.ERROR_MESSAGE);
+            return false;
+        }
+        
+    }
+
+    private void loadSuggested(JTextArea ta) {
+
+        if (isWindows) {
+            ta.setText(SUGGESTED_WINDOWN_CONTENT);
+        } else {
+            ta.setText(SUGGESTED_NON_WINDOWS_CONTENT);
+        }
+    }
+
+    public void insertUpdate(DocumentEvent e) {
+        this.getSaveButton().setEnabled(true);
+    }
+
+    public void removeUpdate(DocumentEvent e) {
+        this.getSaveButton().setEnabled(true);
+    }
+
+    public void changedUpdate(DocumentEvent e) {
+        // should not be called because this text area is simple
+    }
+    
+    public boolean validSettings() {
+        return validSettings;
+    }
+    
+    private void refreshOkButton() {
+        this.getOkButton().setEnabled(targetFile.exists());
+    }
+
+}
Index: branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/java/org/gvsig/mkmvnproject/gui/CreatePluginConsolePanel.java
===================================================================
--- branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/java/org/gvsig/mkmvnproject/gui/CreatePluginConsolePanel.java	(revision 0)
+++ branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/java/org/gvsig/mkmvnproject/gui/CreatePluginConsolePanel.java	(revision 38543)
@@ -0,0 +1,216 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.mkmvnproject.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PipedInputStream;
+import java.io.PipedOutputStream;
+import java.io.PrintStream;
+
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.SwingUtilities;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A panel which shows the execution log messages of the create plugin process.
+ * 
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class CreatePluginConsolePanel extends JPanel {
+
+	private static final long serialVersionUID = -7213048219847956909L;
+
+	private static final Logger LOG = LoggerFactory
+			.getLogger(CreatePluginConsolePanel.class);
+
+	private JTextArea console;
+
+	private PrintStream printStream;
+	private PipedOutputStream pipedos;
+	private PipedInputStream pipedis;
+	private Thread consoleThread;
+
+	/**
+	 * Constructor.
+	 * 
+	 * @throws IOException
+	 *             if there is an error creating the console streams
+	 */
+	public CreatePluginConsolePanel() throws IOException {
+		super();
+		initialize();
+	}
+
+	/**
+	 * Constructor.
+	 * 
+	 * @param isDoubleBuffered
+	 *            if the panel must be double buffered.
+	 * @throws IOException
+	 *             if there is an error creating the console streams
+	 */
+	public CreatePluginConsolePanel(boolean isDoubleBuffered)
+			throws IOException {
+		super(isDoubleBuffered);
+		initialize();
+	}
+
+	/**
+	 * Initializes the panel GUI.
+	 * 
+	 * @throws IOException
+	 */
+	private void initialize() throws IOException {
+		Dimension dimension = new Dimension(600, 200);
+		setSize(dimension);
+		setLayout(new BorderLayout());
+
+		console = new JTextArea();
+		console.setEditable(false);
+		// console.setColumns(20);
+		// console.setRows(5);
+		console.setBackground(Color.WHITE);
+		console.setLineWrap(true);
+		console.setWrapStyleWord(true);
+
+		JScrollPane consoleScrollPane = new JScrollPane(console);
+		add(consoleScrollPane, BorderLayout.CENTER);
+
+		pipedis = new PipedInputStream();
+
+		pipedos = new PipedOutputStream(pipedis);
+
+		printStream = new PrintStream(pipedos);
+		consoleThread = new ConsoleThread(pipedis, console);
+		consoleThread.start();
+	}
+
+	/**
+	 * Returns a {@link PrintStream} which allows to write messages to the
+	 * console.
+	 * 
+	 * @return a {@link PrintStream} which allows to write messages to the
+	 *         console
+	 */
+	public PrintStream getPrintStream() {
+		return printStream;
+	}
+
+	/**
+	 * Returns a {@link PrintStream} which allows to write error messages to the
+	 * console.
+	 * 
+	 * @return a {@link PrintStream} which allows to write error messages to the
+	 *         console
+	 */
+	public PrintStream getErrorPrintStream() {
+		return getPrintStream();
+	}
+
+	/**
+	 * Closes the console. Once this method is called, any more calls to the
+	 * console {@link PrintStream} will throw an exception.
+	 */
+	public void closeConsole() {
+		printStream.flush();
+		printStream.close();
+		try {
+			pipedos.close();
+			pipedis.close();
+			// Wait for the thread to finish
+			consoleThread.join(500);
+		} catch (IOException e) {
+			LOG.warn("Error closing the internal piped streams", e);
+		} catch (InterruptedException e) {
+			// Nothing special to do
+			LOG.debug("Console thread interrupted while waiting to finish", e);
+		}
+	}
+
+	private static final class ConsoleThread extends Thread {
+
+		private final PipedInputStream pipedis;
+		private final JTextArea console;
+
+		/**
+		 * Constructor.
+		 */
+		public ConsoleThread(PipedInputStream pipedis, JTextArea console) {
+			super("Create plugin console update thread");
+			setDaemon(true);
+			this.pipedis = pipedis;
+			this.console = console;
+		}
+
+		@Override
+		public void run() {
+			try {
+				BufferedReader reader = new BufferedReader(
+						new InputStreamReader(pipedis));
+				String line;
+				while ((line = reader.readLine()) != null) {
+					SwingUtilities.invokeLater(new ConsoleUpdateRunnable(
+							console, line));
+				}
+				LOG.debug("Console input stream end, finish reading");
+				reader.close();
+			} catch (IOException e) {
+                LOG.warn("Error reading from the console string", e);
+			}
+		}
+
+	}
+
+	/**
+	 * Runnable used to update the console text field.
+	 * 
+	 * @author gvSIG Team
+	 * @version $Id$
+	 */
+	private static final class ConsoleUpdateRunnable implements Runnable {
+		private final String newLine;
+		private final JTextArea console;
+
+		/**
+		 * Constructor.
+		 */
+		public ConsoleUpdateRunnable(JTextArea console, String newLine) {
+			this.console = console;
+			this.newLine = newLine;
+		}
+
+		public void run() {
+			console.append(newLine);
+			console.append("\n");
+		}
+	}
+}
Index: branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/java/org/gvsig/mkmvnproject/MakeMavenProjectExtension.java
===================================================================
--- branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/java/org/gvsig/mkmvnproject/MakeMavenProjectExtension.java	(revision 38542)
+++ branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/java/org/gvsig/mkmvnproject/MakeMavenProjectExtension.java	(revision 38543)
@@ -41,6 +41,8 @@
 import org.gvsig.andami.plugins.Extension;
 import org.gvsig.andami.ui.mdiManager.IWindow;
 import org.gvsig.i18n.Messages;
+import org.gvsig.mkmvnproject.gui.CreatePluginConsoleWindow;
+import org.gvsig.mkmvnproject.gui.settings.PlatformPropertiesWindow;
 
 /**
  * Extension to launch the project creation from templates.
@@ -54,6 +56,9 @@
     private static final String ANT_CHECK_JDK = "checkjdk.xml";
 
 	private static final String ANT_TARGET = "mkproject";
+	
+	public static final String GVSIG_PLATFORM_PROPERTIES_FILE_NAME =
+	    ".gvsig.platform.properties";
 
 	private static final Logger LOG = LoggerFactory
 			.getLogger(MakeMavenProjectExtension.class);
@@ -64,9 +69,13 @@
 
 	public void execute(String actionCommand) {
 	    
-	    if (!doJdkCheck()) {
+	    if (!checkJDK()) {
 	        return;
 	    }
+
+	    if (!checkPlatformProperties()) {
+	        return;
+	    }
 	    
         // ==========================================================
 		// TODO: add support to parallel executions in Andami??
@@ -100,9 +109,74 @@
 	}
 
 	/**
+	 * Checks existence of file:
+	 * 
+	 * USER_HOME/.gvsig.platform.properties
+	 * 
+	 * If not present, show text area with suggested content.
+	 * 
+     * @return whether the mentioned file is present or the
+     * user has created it here and accepts to continue.
+     *  
+     */
+    private boolean checkPlatformProperties() {
+        
+        String user_home = System.getProperty("user.home");
+        File the_file = new File(
+            user_home +
+            File.separator +
+            GVSIG_PLATFORM_PROPERTIES_FILE_NAME);
+
+        Component parent_window = getActiveWindowComponent();
+
+        try {
+            if (the_file.exists()) {
+                // ok file exists
+                LOG.info("Found platform properties file: "
+                    + the_file.getAbsolutePath());
+                return true;
+            }
+            
+            boolean is_windows = isThisWindows();
+            PlatformPropertiesWindow ppw = new PlatformPropertiesWindow(
+                the_file, is_windows);
+            PluginServices.getMDIManager().addCentredWindow(ppw);
+            // it's a modal dialog
+            return ppw.validSettings();
+            
+        } catch (Exception ex) {
+            
+            String _msg =
+                Messages.getText("_Error_while_checking_platform_properties")
+                + "\n\n[ " + ex.getMessage() + " ]";
+            String _tit = Messages.getText(
+                "_Checking_platform_properties");
+            JOptionPane.showMessageDialog(
+                parent_window,
+                _msg, _tit,
+                JOptionPane.ERROR_MESSAGE);
+        }
+        return false;
+        
+    }
+
+
+    /**
+     * @return whether we are running on a windows system
+     */
+    private boolean isThisWindows() {
+        String os = System.getProperty("os.name").toLowerCase();
+        return (os.indexOf("win") >= 0);
+    }
+
+    /**
+     * Check and possibly show JDK and JAVA_HOME settings and
+     * prompt user with suggestion.
      * 
+     * @return whether JDK is detected or user accepts to
+     * continue anyway
      */
-    private boolean doJdkCheck() {
+    private boolean checkJDK() {
         
         boolean this_is_jdk = false;
         try {
Index: branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/resources/config/text.properties
===================================================================
--- branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/resources/config/text.properties	(revision 38542)
+++ branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/resources/config/text.properties	(revision 38543)
@@ -12,4 +12,16 @@
 _On_Windows_run_JDK_use_devel_exe=En Windows, asegúrese de que gvSIG se ejecuta sobre un JDK y use 'gvsig-desktop-devel.exe' para iniciarlo
 _Make_maven_project_plugin=Complemento para crear proyecto maven
 _Requirements_for_this_plugin=Requisitos para este plugin
+_Mandatory_platform_properties_file_not_found=No se ha encontrado el archivo necesario: [USUARIO]/.gvsig.platform.properties
+_Use_this_text_editor_to_write_it=Use este editor de texto para crearlo
+_Cancel=Cancelar
+_Suggested=Ejemplo
+_Accept=Aceptar
+_Save=Guardar
+_Checking_platform_properties=Comprobando propiedades del sistema
+_There_are_unsaved_changes_Continue_question=Hay cambios no guardados. ¿Desea continuar?
+_Not_saved=No se ha guardado
+_Unable_to_store_file=No se pudo guardar archivo
+_Error=Error
 
+
Index: branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/resources/config/text_en.properties
===================================================================
--- branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/resources/config/text_en.properties	(revision 38542)
+++ branches/v2_0_0_prep/extensions/org.gvsig.mkmvnproject/src/main/resources/config/text_en.properties	(revision 38543)
@@ -12,3 +12,14 @@
 _On_Windows_run_JDK_use_devel_exe=On Windows, make sure you are running gvSIG on a JDK and start it with 'gvsig-desktop-devel.exe'
 _Make_maven_project_plugin=Make maven project plugin
 _Requirements_for_this_plugin=Requirements for this plugin
+_Mandatory_platform_properties_file_not_found=Mandatory file not found: [USER]/.gvsig.platform.properties
+_Use_this_text_editor_to_write_it=Use this text editor to create it
+_Cancel=Cancel
+_Suggested=Example
+_Accept=Accept
+_Save=Save
+_Checking_platform_properties=Checking platform properties
+_There_are_unsaved_changes_Continue_question=There are unsaved changes. Continue anyway?
+_Not_saved=Not saved
+_Unable_to_store_file=Unable to store file
+_Error=Error
\ No newline at end of file
