Index: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.api/src/main/java/org/gvsig/expressionevaluator/ExpressionEvaluatorManager.java
===================================================================
--- trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.api/src/main/java/org/gvsig/expressionevaluator/ExpressionEvaluatorManager.java	(revision 44396)
+++ trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.api/src/main/java/org/gvsig/expressionevaluator/ExpressionEvaluatorManager.java	(revision 44397)
@@ -2,6 +2,8 @@
 package org.gvsig.expressionevaluator;
 
 import java.util.Collection;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.gvsig.tools.bookmarksandhistory.Bookmarks;
 import org.gvsig.tools.bookmarksandhistory.History;
 import org.gvsig.tools.script.ScriptManager;
@@ -15,10 +17,12 @@
     
     public Object evaluate(SymbolTable symbolTable, Code code);
     
-    public String evaluatePage(String source);    
+    public String evaluateDynamicText(String source);    
     
-    public String evaluatePage(SymbolTable symbolTable, String source);    
+    public String evaluateDynamicText(SymbolTable symbolTable, String source);    
     
+    public boolean isDynamicText(String source);
+    
     public Code compile(String source);
     
     public Code compile(LexicalAnalyzer lex, String source);
Index: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.api/src/main/java/org/gvsig/expressionevaluator/ExpressionUtils.java
===================================================================
--- trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.api/src/main/java/org/gvsig/expressionevaluator/ExpressionUtils.java	(revision 44396)
+++ trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.api/src/main/java/org/gvsig/expressionevaluator/ExpressionUtils.java	(revision 44397)
@@ -1,6 +1,7 @@
 package org.gvsig.expressionevaluator;
 
 import java.io.File;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
 import org.gvsig.tools.script.Script;
@@ -168,26 +169,41 @@
         MutableSymbolTable symbolTable = manager.createSymbolTable();
         return symbolTable;
     }
+    
+    public static boolean isDynamicText(String source) {
+        String[] sources = StringUtils.substringsBetween(source, "<%", "%>");
+        if( ArrayUtils.isEmpty(sources) ) {
+            return false;
+        }
+        return true;
+    }
 
-    public static String evaluatePage(String source) {
+    public static String evaluateDynamicText(String source) {
         ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
-        return manager.evaluatePage(source);
+        return manager.evaluateDynamicText(source);
     }
     
-    public static String evaluatePage(SymbolTable symbolTable, String source) {
+    public static String evaluateDynamicText(SymbolTable symbolTable, String source) {
         ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
-        return manager.evaluatePage(symbolTable, source);
+        return manager.evaluateDynamicText(symbolTable, source);
     }
 
     public static File evaluateFilename(File source) {
         return evaluateFilename(null, source);
     }
+
+    public static boolean isDynamicFilename(File source) {
+        if( source == null ) {
+            return false;
+        }
+        return isDynamicText(source.getPath());
+    }
     
     @SuppressWarnings("StringEquality")
     public static File evaluateFilename(SymbolTable symbolTable, File source) {
         ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
         String src =  source.getPath();
-        String r = manager.evaluatePage(symbolTable, src);
+        String r = manager.evaluateDynamicText(symbolTable, src);
         if( r == src ) { // !!! I compare that it is the same pointer, it is what I want.
             return source;
         }
Index: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/test/java/org/gvsig/expresionevaluator/impl/TestEvaluatePage.java
===================================================================
--- trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/test/java/org/gvsig/expresionevaluator/impl/TestEvaluatePage.java	(revision 44396)
+++ trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/test/java/org/gvsig/expresionevaluator/impl/TestEvaluatePage.java	(revision 44397)
@@ -41,19 +41,19 @@
     public void testSimple1() {
         
         SymbolTable symbolTable = createSymbolTable();
-        String s = ExpressionUtils.evaluatePage(symbolTable, "el precion es <%=precio%>");
+        String s = ExpressionUtils.evaluateDynamicText(symbolTable, "el precion es <%=precio%>");
 
         assertEquals("el precion es 200", s);
     }
     
     public void testSimple2() {
-        String s = ExpressionUtils.evaluatePage("el home es <%=HOME()%>");
+        String s = ExpressionUtils.evaluateDynamicText("el home es <%=HOME()%>");
 
         assertEquals("el home es "+ToolsLocator.getFoldersManager().getHome().toString(), s);
     }
 
     public void testSimple3() {
-        String s = ExpressionUtils.evaluatePage("un fichero temporal <%=UNIQUETEMPORARYFILE('nombre.txt')%>");
+        String s = ExpressionUtils.evaluateDynamicText("un fichero temporal <%=UNIQUETEMPORARYFILE('nombre.txt')%>");
         
         // El resultado viene a ser algo como:
         //   "un fichero temporal /tmp/tmp-gvsig/nombre-1-16d2f3e4f44.txt"
@@ -65,7 +65,7 @@
     public void test1() {
         
         SymbolTable symbolTable = createSymbolTable();
-        String s = ExpressionUtils.evaluatePage(symbolTable, "el precion es <%=precio%> y PI*100 es <%=TOINTEGER(PI*100)%>");
+        String s = ExpressionUtils.evaluateDynamicText(symbolTable, "el precion es <%=precio%> y PI*100 es <%=TOINTEGER(PI*100)%>");
 
         assertEquals("el precion es 200 y PI*100 es 314", s);
     }
Index: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/DefaultExpressionEvaluatorManager.java
===================================================================
--- trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/DefaultExpressionEvaluatorManager.java	(revision 44396)
+++ trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/DefaultExpressionEvaluatorManager.java	(revision 44397)
@@ -103,14 +103,23 @@
     }
 
     @Override
-    public String evaluatePage(String source) {
-        return evaluatePage(null, source);
+    public String evaluateDynamicText(String source) {
+        return evaluateDynamicText(null, source);
     }
     
     @Override
-    public String evaluatePage(SymbolTable symbolTable, String source) {
+    public boolean isDynamicText(String source) {
         String[] sources = StringUtils.substringsBetween(source, "<%", "%>");
         if( ArrayUtils.isEmpty(sources) ) {
+            return false;
+        }
+        return true;
+    }
+    
+    @Override
+    public String evaluateDynamicText(SymbolTable symbolTable, String source) {
+        String[] sources = StringUtils.substringsBetween(source, "<%", "%>");
+        if( ArrayUtils.isEmpty(sources) ) {
             return source;
         }
         String[] values = new String[sources.length];
Index: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/java/org/gvsig/expressionevaluator/swing/impl/FilteredListModel.java
===================================================================
--- trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/java/org/gvsig/expressionevaluator/swing/impl/FilteredListModel.java	(revision 44396)
+++ trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/java/org/gvsig/expressionevaluator/swing/impl/FilteredListModel.java	(revision 44397)
@@ -1,8 +1,3 @@
-/*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
 package org.gvsig.expressionevaluator.swing.impl;
 
 import java.util.ArrayList;
@@ -55,7 +50,7 @@
     }
 
     public void setFilter(String filter) {
-        if (StringUtils.isEmpty(filter)) {
+        if (StringUtils.isBlank(filter)) {
             this.filter = null;
             this.filteredElements = this.elements;
         } else {
@@ -88,7 +83,6 @@
     }
 
     public void sort(final boolean ascending) {
-//        this.sortForeground(ascending);
         this.sortBackground(ascending);
     }
     
Index: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/java/org/gvsig/expressionevaluator/swing/impl/ExpressionEvaluatorSwingLibraryImpl.java
===================================================================
--- trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/java/org/gvsig/expressionevaluator/swing/impl/ExpressionEvaluatorSwingLibraryImpl.java	(revision 44396)
+++ trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/java/org/gvsig/expressionevaluator/swing/impl/ExpressionEvaluatorSwingLibraryImpl.java	(revision 44397)
@@ -37,10 +37,10 @@
             new String[] { "element", "expressionbuilder-element-function-sql" },
             new String[] { "element", "expressionbuilder-element-group" },
             new String[] { "element", "expressionbuilder-element" },
-            new String[] { "action", "expressionbuilder-filter-values" },
+            new String[] { "action", "common-filter" },
             new String[] { "action", "expressionbuilder-insert-text" },
-            new String[] { "action", "expressionbuilder-sortdown" },
-            new String[] { "action", "expressionbuilder-sortup" },
+            new String[] { "action", "common-sortdown" },
+            new String[] { "action", "common-sortup" },
             new String[] { "action", "expressionbuilder-history" },
             new String[] { "action", "expressionbuilder-bookmarks" },
             new String[] { "action", "expressionbuilder-time-limit" }
Index: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/java/org/gvsig/expressionevaluator/swing/impl/DefaultJExpressionBuilderView2.java
===================================================================
--- trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/java/org/gvsig/expressionevaluator/swing/impl/DefaultJExpressionBuilderView2.java	(revision 44396)
+++ trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/java/org/gvsig/expressionevaluator/swing/impl/DefaultJExpressionBuilderView2.java	(revision 44397)
@@ -249,12 +249,12 @@
         btnSimpleElementInsert.setBorder(emptyborder2x2);
 
         btnSimpleElementSortDown.setActionCommand("+");
-        btnSimpleElementSortDown.setIcon(loadImage("datos/devel/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/resources/org/gvsig/expressionevaluator/swing/impl/expressionbuilder-sortdown.png"));
+        btnSimpleElementSortDown.setIcon(loadImage("datos/devel/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/resources/org/gvsig/expressionevaluator/swing/impl/common-sortdown.png"));
         btnSimpleElementSortDown.setName("btnSimpleElementSortDown");
         btnSimpleElementSortDown.setBorder(emptyborder2x2);
 
         btnSimpleElementSortUp.setActionCommand("+");
-        btnSimpleElementSortUp.setIcon(loadImage("datos/devel/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/resources/org/gvsig/expressionevaluator/swing/impl/expressionbuilder-sortup.png"));
+        btnSimpleElementSortUp.setIcon(loadImage("datos/devel/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/resources/org/gvsig/expressionevaluator/swing/impl/common-sortup.png"));
         btnSimpleElementSortUp.setName("btnSimpleElementSortUp");
         btnSimpleElementSortUp.setBorder(emptyborder2x2);
 
@@ -268,7 +268,7 @@
         txtSimpleElementFilter.setName("txtSimpleElementFilter");
 
         btnSimpleElementFilter.setActionCommand("+");
-        btnSimpleElementFilter.setIcon(loadImage("datos/devel/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/resources/org/gvsig/expressionevaluator/swing/impl/expressionbuilder-filter-values.png"));
+        btnSimpleElementFilter.setIcon(loadImage("datos/devel/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/resources/org/gvsig/expressionevaluator/swing/impl/common-filter.png"));
         btnSimpleElementFilter.setName("btnSimpleElementFilter");
         btnSimpleElementFilter.setBorder(emptyborder2x2);
 
Index: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/resources/org/gvsig/expressionevaluator/swing/impl/expressionbuilder-sortdown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/resources/org/gvsig/expressionevaluator/swing/impl/expressionbuilder-filter-values.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/resources/org/gvsig/expressionevaluator/swing/impl/expressionbuilder-sortup.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/resources/org/gvsig/expressionevaluator/swing/impl/common-sortup.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/resources/org/gvsig/expressionevaluator/swing/impl/common-sortup.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/resources/org/gvsig/expressionevaluator/swing/impl/common-sortdown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/resources/org/gvsig/expressionevaluator/swing/impl/common-sortdown.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/resources/org/gvsig/expressionevaluator/swing/impl/common-filter.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/resources/org/gvsig/expressionevaluator/swing/impl/common-filter.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/resources/images/export-to/common-sortup.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/resources/images/export-to/common-sortup.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/resources/images/export-to/common-sortdown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/resources/images/export-to/common-sortdown.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/resources/images/export-to/common-check-off.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/resources/images/export-to/common-check-off.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/resources/images/export-to/common-filter.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/resources/images/export-to/common-filter.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/resources/images/export-to/common-check-on.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/resources/images/export-to/common-check-on.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/export/swing/impl/ExportSwingLibraryImpl.java
===================================================================
--- trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/export/swing/impl/ExportSwingLibraryImpl.java	(revision 44396)
+++ trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.exportto/org.gvsig.exportto.swing/org.gvsig.exportto.swing.impl/src/main/java/org/gvsig/export/swing/impl/ExportSwingLibraryImpl.java	(revision 44397)
@@ -23,10 +23,13 @@
  */
 package org.gvsig.export.swing.impl;
 
+import java.net.URL;
 import org.gvsig.export.swing.ExportSwingLibrary;
 import org.gvsig.export.swing.ExportSwingLocator;
 import org.gvsig.tools.library.AbstractLibrary;
 import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.icontheme.IconTheme;
 
 /**
  * Library for Swing API initialization and configuration.
@@ -49,6 +52,19 @@
 
     @Override
     protected void doPostInitialize() throws LibraryException {
+        String[][] iconNames = new String[][] {
+            new String[] { "action", "common-filter" },
+            new String[] { "action", "common-sortdown" },
+            new String[] { "action", "common-sortup" },
+            new String[] { "action", "common-check-on" },
+            new String[] { "action", "common-check-off" }
+        };
+        IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
+        for (String[] icon : iconNames) {
+            URL url = this.getClass().getResource("/images/export-to/"+icon[1]+".png");
+            theme.registerDefault("Export", icon[0], icon[1], null, url);
+        }
+        
     }
 
 }
Index: trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DatabaseWorkspaceManager.java
===================================================================
--- trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DatabaseWorkspaceManager.java	(revision 44396)
+++ trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DatabaseWorkspaceManager.java	(revision 44397)
@@ -1,6 +1,8 @@
 package org.gvsig.fmap.dal;
 
+import java.io.File;
 import org.apache.commons.lang3.StringUtils;
+import org.gvsig.expressionevaluator.SymbolTable;
 import org.gvsig.fmap.dal.feature.FeatureStore;
 import org.gvsig.tools.resourcesstorage.ResourcesStorage;
 import org.gvsig.tools.util.LabeledValue;
@@ -9,7 +11,9 @@
  *
  * @author jjdelcerro
  */
-public interface DatabaseWorkspaceManager extends LabeledValue<DatabaseWorkspaceManager>{
+public interface DatabaseWorkspaceManager 
+        extends LabeledValue<DatabaseWorkspaceManager>, SymbolTable 
+    {
     
     public static final String CONFIG_CAN_ANONYMOUS_USER_WRITE_IN_THE_TABLES = "CanAnonymousUserWriteInTheTables";
 
@@ -173,4 +177,9 @@
     public void create(String id, String description);
 
     public void drop();
+    
+    public File getBaseFolder();
+    
+    public void setBaseFolder(File baseFolder);
+        
 }
Index: trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DatabaseWorkspaceStoresRepository.java
===================================================================
--- trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DatabaseWorkspaceStoresRepository.java	(revision 44396)
+++ trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DatabaseWorkspaceStoresRepository.java	(revision 44397)
@@ -1,14 +1,15 @@
 package org.gvsig.fmap.dal.impl;
 
+import java.io.File;
 import org.gvsig.fmap.dal.DatabaseWorkspaceManager;
 import java.util.HashMap;
 import java.util.Map;
+import org.gvsig.expressionevaluator.ExpressionUtils;
 import org.gvsig.fmap.dal.AbstractStoresRepository;
 import org.gvsig.fmap.dal.DALLocator;
 import org.gvsig.fmap.dal.DataManager;
-import org.gvsig.fmap.dal.DataServerExplorer;
-import org.gvsig.fmap.dal.DataServerExplorerParameters;
 import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.DataTypes;
 import org.gvsig.fmap.dal.StoresRepository;
 import org.gvsig.fmap.dal.feature.Feature;
 import org.gvsig.fmap.dal.feature.FeatureStore;
@@ -21,6 +22,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.FIELD_REPOSITORY_PARAMETERS;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynField;
 
 /**
  *
@@ -33,42 +36,42 @@
     {
     private static final Logger LOGGER = LoggerFactory.getLogger(DefaultDatabaseWorkspaceManager.class);
 
-    private final DataServerExplorerParameters connection;
+    private final DatabaseWorkspaceManager workspace;
     private Map<String,DataStoreParameters> repository;
 
-    public DatabaseWorkspaceStoresRepository(String name, String label, DataServerExplorerParameters connection) {
+    public DatabaseWorkspaceStoresRepository(String name, String label, DatabaseWorkspaceManager workspace) {
         super(name, label);
-        this.connection = connection;
+        this.workspace = workspace;
         this.repository = null;
     }
 
-    private FeatureStore getTable() {
-        String tableName = DatabaseWorkspaceManager.TABLE_REPOSITORY_NAME;
-        try {
-            DataManager dataManager = DALLocator.getDataManager();
-            DataServerExplorer server = dataManager.openServerExplorer(
-                    this.connection.getExplorerName(),
-                    this.connection
-            );
-            DataStoreParameters params = server.get(tableName);
-            if( params!=null ) {
-                FeatureStore store = (FeatureStore) dataManager.openStore(
-                        params.getDataStoreName(), 
-                        params
-                );
-                return store;
+    private void evaluateExpressionsInFiles(DataStoreParameters parameters) {
+        DynClass dynClass = parameters.getDynClass();
+        if( dynClass == null ) {
+            return;
+        }
+        File theBaseFolder = this.workspace.getBaseFolder();
+        if( theBaseFolder==null ) {
+            return;
+        }
+        for (DynField dynField : dynClass.getDynFields()) {
+            switch(dynField.getType()) {
+                case DataTypes.FILE:
+                case DataTypes.FOLDER:
+                    File f = (File) parameters.getDynValue(dynField.getName());
+                    if( ExpressionUtils.isDynamicFilename(f) ) {
+                        parameters.setDynValue(dynField.getName(), ExpressionUtils.evaluateFilename(this.workspace, f));
+                    }
+                    break;
             }
-        } catch (Exception ex) {
-            LOGGER.warn("Can't open table '"+tableName+"'.",ex);
         }
-        return null;
     }
 
     private void load() {
         try {
             this.repository = new HashMap<>();
             final DataManager dataManager = DALLocator.getDataManager();
-            FeatureStore store = this.getTable();
+            FeatureStore store = this.workspace.getTable(DatabaseWorkspaceManager.TABLE_REPOSITORY);
             store.accept(new Visitor() {
                 @Override
                 public void visit(Object obj) throws VisitCanceledException, BaseException {
@@ -80,6 +83,7 @@
                         LOGGER.warn("Can't restore parameters from repository entry '"+name+"'.");
                         return;
                     }
+                    evaluateExpressionsInFiles(params);
                     repository.put(name, params);
                 }
             });
Index: trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDatabaseWorkspaceManager.java
===================================================================
--- trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDatabaseWorkspaceManager.java	(revision 44396)
+++ trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDatabaseWorkspaceManager.java	(revision 44397)
@@ -1,12 +1,18 @@
 package org.gvsig.fmap.dal.impl;
 
 import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 import org.gvsig.fmap.dal.DatabaseWorkspaceManager;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.mutable.Mutable;
 import org.apache.commons.lang3.mutable.MutableObject;
 import org.gvsig.expressionevaluator.ExpressionBuilder;
 import org.gvsig.expressionevaluator.ExpressionUtils;
+import org.gvsig.expressionevaluator.SymbolTable;
+import org.gvsig.expressionevaluator.spi.AbstractSymbolTable;
 import org.gvsig.fmap.dal.DALLocator;
 import org.gvsig.fmap.dal.DataManager;
 import org.gvsig.fmap.dal.DataServerExplorer;
@@ -33,8 +39,15 @@
 import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.TABLE_RESOURCES;
 import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.TABLE_RESOURCES_NAME;
 import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynField;
+import org.gvsig.tools.exception.BaseException;
 import org.gvsig.tools.resourcesstorage.FilesResourcesStorage;
 import org.gvsig.tools.resourcesstorage.ResourcesStorage;
+import org.gvsig.tools.util.FileTools;
+import org.gvsig.tools.util.HasAFile;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -44,19 +57,77 @@
  */
 @SuppressWarnings("UseSpecificCatch")
 public class DefaultDatabaseWorkspaceManager 
-        implements DatabaseWorkspaceManager 
+        extends AbstractSymbolTable
+        implements DatabaseWorkspaceManager
     {
     
     private static final Logger LOGGER = LoggerFactory.getLogger(DefaultDatabaseWorkspaceManager.class);
+
+    private static final String CONFIG_NAME_BASEFOLDER = "BASEFOLDER";
+    private static final String CONFIG_NAME_ALTERNATIVE_RESOURCES_PATH = "ALTERNATIVE_RESOURCES_PATH";
     
+    private static abstract class CachedValue<T> {
+
+        protected T value = null;
+        private long lastAccess = 0;
+        private final int millis;
+
+        protected CachedValue(int millis) {
+            this.millis = millis;
+        }
+        
+        protected abstract void reload();
+
+        public boolean isExpired() {
+            long now = System.currentTimeMillis();
+            return now - lastAccess > millis;
+        }
+
+        public T get() {
+            if (isExpired()) {
+                reload();
+            }
+            lastAccess = System.currentTimeMillis();
+            return value;
+        }
+        
+        public void set(T value) {
+            this.value = value;
+            lastAccess = System.currentTimeMillis();
+        }
+    }
+
+    private class BaseFolder extends CachedValue<File> {
+        public BaseFolder() {
+            super(3000);
+        }
+
+        @Override
+        protected void reload() {
+            String s = DefaultDatabaseWorkspaceManager.this.get(CONFIG_NAME_BASEFOLDER);
+            if( StringUtils.isBlank(s) ) {
+                this.value = null;
+            } else {
+                this.value = new File(s);
+            }
+        }
+
+        @Override
+        public void set(File value) {
+            DefaultDatabaseWorkspaceManager.this.set(CONFIG_NAME_BASEFOLDER, value.toString());
+            super.set(value);
+        }
+    }
+    
     private final DataServerExplorerParameters serverParameters;
     private Boolean existsConfiguration = null;
     private StoresRepository storesRepository;
     private Mutable<File> alternativeResourcesFolder = null;
+    private BaseFolder baseFolder = null;
     
-    
     public DefaultDatabaseWorkspaceManager(DataServerExplorerParameters serverParameters) {
         this.serverParameters = serverParameters;
+        this.baseFolder = new BaseFolder();
     }
 
     @Override
@@ -289,6 +360,7 @@
                 return null;
             }
             String value = feature.getString(FIELD_CONFIGURATION_VALUE);
+            value = ExpressionUtils.evaluateDynamicText(this, value);
             return value;
             
         } catch (Exception ex) {
@@ -341,7 +413,7 @@
             this.storesRepository = new DatabaseWorkspaceStoresRepository(
                     id,
                     label,
-                    this.serverParameters
+                    this
             );
         }
         return this.storesRepository;
@@ -358,8 +430,50 @@
     }
 
     @Override
+    public File getBaseFolder() {
+        return this.baseFolder.get();
+    }
+    
+    @Override
+    public void setBaseFolder(File baseFolder) {
+        this.baseFolder.set(baseFolder);
+    }
+
+    private DataStoreParameters replaceInFilesToUseBaseFolder(DataStoreParameters parameters) {
+        DynClass dynClass = parameters.getDynClass();
+        if( dynClass == null ) {
+            return parameters;
+        }
+        File theBaseFolder = this.getBaseFolder();
+        if( theBaseFolder==null ) {
+            return parameters;
+        }
+        DataStoreParameters replaced = parameters;
+        for (DynField dynField : dynClass.getDynFields()) {
+            switch(dynField.getType()) {
+                case DataTypes.FILE:
+                case DataTypes.FOLDER:
+                    File f = (File) parameters.getDynValue(dynField.getName());
+                    if( f!=null ) {
+                        File f2 = FileTools.relativizeFile(theBaseFolder, f);
+                        if( f2!=f ) {
+                            f = new File("<%="+CONFIG_NAME_BASEFOLDER+"%>/"+f2.getPath());
+                            if( replaced == parameters ) {
+                                replaced = (DataStoreParameters) replaced.getCopy();
+                            }
+                            replaced.setDynValue(dynField.getName(), f);
+                        }
+                    }
+                    break;
+            }
+        }
+        return replaced;
+    }
+    
+    @Override
     public boolean writeStoresRepositoryEntry(String name, DataStoreParameters parameters) {
         try {
+            parameters = this.replaceInFilesToUseBaseFolder(parameters);
             byte[] data = parameters.toByteArray();
             if( data == null ) {
                 throw new RuntimeException("Can't convert parameters to byte array.");
@@ -417,7 +531,7 @@
     public ResourcesStorage getAlternativeResourcesStorage(String tableName) {
         if( this.alternativeResourcesFolder==null ) {
             this.alternativeResourcesFolder = new MutableObject<>(null);
-            String resourcesPath = this.get("ALTERNATIVE_RESOURCES_PATH");
+            String resourcesPath = this.get(CONFIG_NAME_ALTERNATIVE_RESOURCES_PATH);
             if( !StringUtils.isBlank(resourcesPath) ) {
                 try {
                     resourcesPath = (String) ExpressionUtils.evaluate(resourcesPath);
@@ -467,6 +581,76 @@
         this.set(CONFIG_NAME_STORESREPOSITORYID,id);
         this.set(CONFIG_NAME_STORESREPOSITORYLABEL,description);
         this.set(CONFIG_CAN_ANONYMOUS_USER_WRITE_IN_THE_TABLES,"true");
-        this.set("ALTERNATIVE_RESOURCES_PATH","");
+        this.set(CONFIG_NAME_ALTERNATIVE_RESOURCES_PATH,"");
+        File theBaseFolder = this.getBaseFolder();
+        if( this.serverParameters instanceof HasAFile && theBaseFolder==null ) {
+            File f = ((HasAFile)this.serverParameters).getFile();
+            if( f != null ) {
+                theBaseFolder = f.getParentFile();
+                this.setBaseFolder(theBaseFolder);
+            } else {
+                this.set(CONFIG_NAME_BASEFOLDER,"");
+            }
+        } else {
+            this.set(CONFIG_NAME_BASEFOLDER,"");
+        }
     }
+
+    @Override
+    public boolean exists(String name) {
+        try {
+            if (this.existsConfiguration()) {
+                FeatureStore store = this.getTable(TABLE_CONFIGURATION);
+                if (store != null) {
+                    ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
+                    String filter = builder.eq(
+                            builder.column(FIELD_CONFIGURATION_NAME),
+                            builder.constant(name)
+                    ).toString();
+                    Feature feature = store.findFirst(filter);
+                    if (feature != null) {
+                        return true;
+                    }
+                }
+            }
+            return super.exists(name);
+        } catch (Exception ex) {
+            LOGGER.warn("Can't read configuration value '" + name + "'", ex);
+            return false;
+        }
+    }
+
+    @Override
+    public Object value(String name) {
+        String v = this.get(name);
+        if( v!=null ) {
+            return v;
+        }
+        return super.value(name);
+    }
+
+    @Override
+    public Collection<String> localvariables() {
+        try {
+            final List<String> theVars = new ArrayList<>();
+            if (this.existsConfiguration()) {
+                FeatureStore store = this.getTable(TABLE_CONFIGURATION);
+                if (store != null) {
+                    store.accept(new Visitor() {
+                        @Override
+                        public void visit(Object obj) throws VisitCanceledException, BaseException {
+                            Feature feature = (Feature) obj;
+                            theVars.add(feature.getString(FIELD_CONFIGURATION_NAME));
+                        }
+                    });
+                }
+            }
+            return theVars;
+        } catch (Exception ex) {
+            LOGGER.warn("Can't read configuration variables", ex);
+            return Collections.EMPTY_LIST;
+        }
+    }
+
+    
 }
