Index: DefaultSearchPanel.java
===================================================================
--- DefaultSearchPanel.java	(revision 46061)
+++ DefaultSearchPanel.java	(revision 46062)
@@ -29,11 +29,9 @@
 import javax.swing.ImageIcon;
 import javax.swing.JButton;
 import javax.swing.JComponent;
-import javax.swing.JLabel;
 import javax.swing.JMenuItem;
 import javax.swing.JOptionPane;
 import javax.swing.JPopupMenu;
-import javax.swing.JProgressBar;
 import javax.swing.JTable;
 import javax.swing.ListSelectionModel;
 import javax.swing.SwingUtilities;
@@ -618,9 +616,10 @@
         this.pnlCfgActions.add(configurableActions, BorderLayout.CENTER);
         
         this.taskStatusController = ToolsSwingLocator.getTaskStatusSwingManager().createTaskStatusController(
-                new JLabel(), 
-                new JLabel(), 
-                new JProgressBar());
+                this.lblStatusTitle, 
+                this.lblMsg, 
+                this.pgbStatus);
+		this.pgbStatus.setVisible(false);
 
         this.conditionPanels.add(
                 new SearchConditionPanelSimplified(
@@ -855,7 +854,7 @@
 
     @Override
     public void clear() {
-        this.lblMsg.setText("");
+        this.taskStatusController.setTitle("");
         if (this.conditionPanels == null) {
             return;
         }
@@ -911,30 +910,30 @@
         lblMsg.setText(ToolsLocator.getI18nManager().getTranslation("_Searching")+"...");
         setEnabled(false);
         Thread th = new Thread(() -> {
-            try {
-            SearchParameters searchParams;
-            try {
-                searchParams = this.fetch(this.parameters.getCopy()); // esto lo actualiza a la ultima // decidir si se devuelve clonado
+        try {
+				SearchParameters searchParams;
+				try {
+					searchParams = this.fetch(this.parameters.getCopy()); // esto lo actualiza a la ultima // decidir si se devuelve clonado
 
-                Date date = Calendar.getInstance().getTime();
-                DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
-                String strDate = dateFormat.format(date);
-                searchParams.setName("Params: " + strDate);
-            } catch (Exception ex) {
-                LOGGER.warn("Not able to create search parameters.", ex);
-                lblMsg.setText(ToolsLocator.getI18nManager().getTranslation("_Errors_fetching_new_query")+"...");
-                resetTable();
-                return;
-            }
-            doSearch(searchParams);
-                        } catch (Exception ex) {
-                LOGGER.warn("Search panel has errors during the search", ex);
-                resetTable();
-            } finally {
-                SwingUtilities.invokeLater(() -> {
-                    setEnabled(true);
-                });
-            }
+					Date date = Calendar.getInstance().getTime();
+					DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
+					String strDate = dateFormat.format(date);
+					searchParams.setName("Params: " + strDate);
+				} catch (Exception ex) {
+					LOGGER.warn("Not able to create search parameters.", ex);
+					this.taskStatusController.setTitle(ToolsLocator.getI18nManager().getTranslation("_Errors_fetching_new_query") + "...");
+					resetTable();
+					return;
+				}
+				doSearch(searchParams);
+			} catch (Exception ex) {
+				LOGGER.warn("Search panel has errors during the search", ex);
+				resetTable();
+			} finally {
+				SwingUtilities.invokeLater(() -> {
+					setEnabled(true);
+				});
+			}
         });
         th.start();
     }
@@ -942,7 +941,14 @@
     private void doSearch(SearchParameters searchParams)  {
             final MutableObject model = new MutableObject(null);       
             final MutableLong rowCount=new MutableLong();
+			Cursor savedCursor = this.getCursor();
+		    SimpleTaskStatus status = ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus("");
+			status.setAutoremove(true);
+			status.add();
+			this.taskStatusController.bind(status);
             try {
+				status.setTitle(ToolsLocator.getI18nManager().getTranslation("_Processing_search"));
+				SwingUtilities.invokeLater(() -> {this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));});
                 final List<Feature> features;
                  FeatureQuery myQuery;
 //                myQuery = this.getQuery().getCopy();
@@ -962,7 +968,8 @@
                 rowCount.setValue(tableModel.getRowCount());
             } catch (Exception ex) {
                 LOGGER.warn("Search not able to be executed. Can't get features or create table model", ex);
-                lblMsg.setText(ToolsLocator.getI18nManager().getTranslation("_Errors_getting_new_feature_set") + "...");
+                status.setTitle(ToolsLocator.getI18nManager().getTranslation("_Errors_getting_new_feature_set") + "...");
+				status.abort();
                 resetTable();
             } finally {
                 SwingUtilities.invokeLater(() -> {
@@ -976,18 +983,20 @@
                             ((SimpleFeaturesTableModelImpl) oldmodel).dispose();
                         }
                         if (resultModel.hasErrors()) {
-                            lblMsg.setText(i18n.getTranslation("_Errors_occurred_during_search"));
+                            status.setTitle(i18n.getTranslation("_Errors_occurred_during_search"));
                         } else {
-                            lblMsg.setText(String.format("%d " + i18n.getTranslation("_elements"), rowCount.getValue()));
+                            status.setTitle(String.format("%d " + i18n.getTranslation("_elements"), rowCount.getValue()));
                         }
                         if (this.parameters != null && this.parameters.getQuery() != null) {
                             this.history.add(searchParams);                   
                         }
                     } catch (Exception ex) {
                         LOGGER.warn(" Errors occurred during search getting old model", ex);
-                        lblMsg.setText(i18n.getTranslation("_Errors_occurred_during_search"));
+                        status.setTitle(i18n.getTranslation("_Errors_occurred_during_search"));
                     } finally {
                         setEnabled(true);
+						status.terminate();
+						this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
                     }
                 });
             }
@@ -1191,6 +1200,7 @@
             try {
                 this.processing = true;
                 this.setEnabled(false);
+				status.setTitle(ToolsLocator.getI18nManager().getTranslation("_Copying_rows_to_clipboard"));
                 SwingUtilities.invokeLater(() -> {this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));});
 
                 SimpleFeaturesTableModel model = null;
@@ -1224,7 +1234,7 @@
                 }
 
                 //from( 0, selection.length)
-                
+
                 status.setRangeOfValues(0, selection.length);
                 excelStr.append(LINE_BREAK);
                 for (int i : selection) {
@@ -1279,7 +1289,8 @@
             } finally {
                 this.processing = false;
                 SwingUtilities.invokeLater(() -> {this.setCursor(savedCursor);});
-                this.setEnabled(true);
+				status.setTitle(ToolsLocator.getI18nManager().getTranslation("_Copy_ended"));
+                this.updateComponentState();
             }
         }, "SearchPanelCopyRows");
         task.start();
@@ -1607,28 +1618,41 @@
             SearchPostProcessFactory factory,
             DynObject parameters
             ) {
+		Cursor savedCursor = this.getCursor();
+		SimpleTaskStatus status = ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus("");
+        status.setAutoremove(true);
+        status.add();
+        this.taskStatusController.bind(status);
         Thread task = new Thread(() -> {
             try {
+				SwingUtilities.invokeLater(() -> {this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));});
                 this.processing = true;
-                this.updateComponentState();
+                this.updateComponentState();				
                 SearchPostProcess process = factory.createProcess(factory, input, query, parameters);
 
                 if (parameters != null) {
                     process.setParameters(parameters);
                 }
                 //Ejecutar el execute en thread para no bloquear el software
-                SearchPostProcess.SearchPostProcessResult output = process.execute(input, query, parameters);
-                this.postProcessStore = output.getStore();
-                this.postProcessQuery = output.getQuery();
+                SearchPostProcess.SearchPostProcessResult output = process.execute(input, query, parameters, status);
+				if (output != null) {
+					this.postProcessStore = output.getStore();
+					this.postProcessQuery = output.getQuery();
+
+					doLoadSearchPostProccessResults(this.postProcessStore);
+
+				}
                 this.currentPostProcess = factory.getName();
-                SwingUtilities.invokeLater(() -> { // Añade a la cola de eventos un evento a ejecutar de código
-                    doLoadSearchPostProccessResults(this.postProcessStore);
-                });
+				status.terminate();
+				
             }catch (Exception ex){
                 LOGGER.warn("SearchPostProcess not able to be executed.", ex);
                 resetPostProcessTable();
-                
+				status.setTitle(ToolsLocator.getI18nManager().getTranslation("_Error_in_post_process_operation"));
+				status.message("");
+				status.abort();
             } finally {
+				SwingUtilities.invokeLater(() -> {this.setCursor(savedCursor);});
                 this.processing = false;
                 this.updateComponentState();
             }
@@ -1639,6 +1663,12 @@
     }
 
     private void doLoadSearchPostProccessResults(FeatureStore input) {
+		if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(() -> {
+				doLoadSearchPostProccessResults(input);
+			});
+            return;
+        }
 
         final List<Feature> featuresSearchPostProccessResults;
         final FeatureQuery finalQuery;
@@ -1680,6 +1710,7 @@
             SwingUtilities.invokeLater(this::updateComponentState);
             return;
         }
+        this.pgbStatus.setVisible(processing);
         this.setEnabled(!processing);
     }
     
@@ -1733,9 +1764,9 @@
         I18nManager i18n = ToolsLocator.getI18nManager();
         
         if (model.hasErrors()) {
-            lblMsg.setText(i18n.getTranslation("_Errors_occurred_load_search_post_process"));
+            this.taskStatusController.setTitle(i18n.getTranslation("_Errors_occurred_load_search_post_process"));
         } else {
-            lblMsg.setText(String.format("%d " + i18n.getTranslation("_elements"), model.getRowCount()));
+            this.taskStatusController.setTitle(String.format("%d " + i18n.getTranslation("_elements"), model.getRowCount()));
         }
     }
     
