Changeset 3493


Ignore:
Timestamp:
Jun 14, 2007, 12:25:01 PM (14 years ago)
Author:
Nicklas Nordborg
Message:

Fixes #566

Location:
trunk/src/plugins/core/net/sf/basedb/plugins
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/plugins/core/net/sf/basedb/plugins/AbstractFlatFileImporter.java

    r3472 r3493  
    5757import net.sf.basedb.util.parser.CropStringMapper;
    5858import net.sf.basedb.util.parser.FlatFileParser;
     59import net.sf.basedb.util.parser.JepMapper;
    5960import net.sf.basedb.util.parser.Mapper;
    6061
     
    319320  );
    320321
     322  /**
     323    Parameter that asks if complex column mappings should be enabled or not.
     324    Use {@link #checkColumnMapping(String, boolean)} to check a mapping.
     325    @since 2.4
     326  */
     327  protected static final PluginParameter<String> complexMappings = new PluginParameter<String>(
     328    "complexMappings",
     329    "Complex column mappings",
     330    "disallow = Only allow simple mappings that are constant value or pick the value " +
     331    "from one column only, for example, '1.6' or '\\Row\\'\n" +
     332    "allow = Allow expression and complex mappings, for example, " +
     333    "'\\Row\\, \\Column\\' or '=2*col('radius')'",
     334    new StringParameterType(255, "disallow", true, 1, 0, 0,
     335      Arrays.asList(new String[] { "disallow", "allow" })
     336    )
     337  );
     338 
    321339  /**
    322340    Section definition for grouping error handling options.
     
    853871 
    854872  /**
     873    Check if a column mapping is a valid mapping expression and
     874    optionally if it is complex mapping.
     875
     876    @param mapExpression The mapping expression
     877    @param allowComplex If complex column mappings should be allowed
     878    @param name The name of the column (used if an error message needs to be generated)
     879    @return The mapping string
     880    @throws InvalidDataException If the mapping isn't a valid column
     881      mapping or if the allowComplex parameter is false and the mapping is complex
     882    @since 2.4
     883  */
     884  protected String checkColumnMapping(String mapExpression, boolean allowComplex, String name)
     885    throws InvalidDataException
     886  {
     887    if (mapExpression == null || mapExpression.length() == 0)
     888    {
     889      return mapExpression;
     890    }
     891   
     892    // Check if it is a JEP mapping
     893    boolean isJep = mapExpression.startsWith("=");
     894   
     895    // Check if the mapping is simple
     896    if (!allowComplex)
     897    {
     898      if (isJep)
     899      {
     900        throw new InvalidDataException("Not allowed to use expression mapping for column '" +
     901            name + "': " +mapExpression);
     902      }
     903      if (mapExpression.contains("\\"))
     904      {
     905        // The regexp matches strings that start and end with \
     906        if (!mapExpression.matches("\\\\[^\\\\]+\\\\"))
     907        {
     908          throw new InvalidDataException("Not allowed to use complex mapping for column '" +
     909              name + "': " + mapExpression);
     910        }
     911      }
     912    }
     913    else
     914    {
     915      if (isJep)
     916      {
     917        try
     918        {
     919          new JepMapper(mapExpression.substring(1), new ArrayList<String>(), null);
     920        }
     921        catch (Throwable t)
     922        {
     923          throw new InvalidDataException("Invalid expression for column '" +
     924              name + "': " + mapExpression + " (" + t.getMessage() + ")");
     925        }
     926      }
     927    }
     928    return mapExpression;
     929  }
     930 
     931  /**
    855932    Get a mapper for the specified flat file parser. This method
    856933    calls the {@link FlatFileParser#getMapper(String)} method to create
  • trunk/src/plugins/core/net/sf/basedb/plugins/PlateFlatFileImporter.java

    r3082 r3493  
    318318       
    319319        // Column mappings
    320         for (PluginParameter<?> pp : getAllColumnMappings())
     320        storeValue(configuration, request, complexMappings);
     321        boolean allowComplex = "allow".equals(request.getParameterValue(complexMappings.getName()));
     322        for (PluginParameter<String> pp : getAllColumnMappings())
    321323        {
    322           storeValue(configuration, request, pp);
     324          String mapExpression = (String)request.getParameterValue(pp.getName());
     325          checkColumnMapping(mapExpression, allowComplex, pp.getLabel());
     326          storeValue(configuration, pp, mapExpression);
    323327        }
    324328        response.setDone("Plugin configuration complete");
     
    522526      // Column mappings
    523527      parameters.add(mappingSection);
     528      parameters.add(complexMappings);
    524529      parameters.addAll(getAllColumnMappings());
    525530   
  • trunk/src/plugins/core/net/sf/basedb/plugins/RawDataFlatFileImporter.java

    r3472 r3493  
    380380       
    381381        // Column mappings
    382         for (PluginParameter<?> pp : allColumnMappings)
     382        storeValue(configuration, request, complexMappings);
     383        boolean allowComplex = "allow".equals(request.getParameterValue(complexMappings.getName()));
     384        for (PluginParameter<String> pp : allColumnMappings)
    383385        {
    384           storeValue(configuration, request, pp);
     386          String mapExpression = (String)request.getParameterValue(pp.getName());
     387          checkColumnMapping(mapExpression, allowComplex, pp.getLabel());
     388          storeValue(configuration, pp, mapExpression);
    385389        }
    386390       
     
    724728      // Column mappings
    725729      parameters.add(mappingSection);
     730      parameters.add(complexMappings);
    726731      parameters.addAll(getAllColumnMappings(rdt));
    727732
  • trunk/src/plugins/core/net/sf/basedb/plugins/ReporterFlatFileImporter.java

    r3474 r3493  
    309309       
    310310        // Column mappings
    311         for (PluginParameter<?> pp : getAllColumnMappings())
    312         {
    313           storeValue(configuration, request, pp);
     311        storeValue(configuration, request, complexMappings);
     312        boolean allowComplex = "allow".equals(request.getParameterValue(complexMappings.getName()));
     313        for (PluginParameter<String> pp : getAllColumnMappings())
     314        {
     315          String mapExpression = (String)request.getParameterValue(pp.getName());
     316          checkColumnMapping(mapExpression, allowComplex, pp.getLabel());
     317          storeValue(configuration, pp, mapExpression);
    314318        }
    315319       
     
    696700      // Column mappings
    697701      parameters.add(mappingSection);
     702      parameters.add(complexMappings);
    698703      parameters.addAll(getAllColumnMappings());
    699704     
  • trunk/src/plugins/core/net/sf/basedb/plugins/ReporterMapFlatFileImporter.java

    r2992 r3493  
    334334
    335335        // Column mappings
    336         for (PluginParameter<?> pp : getAllColumnMappings())
     336        storeValue(configuration, request, complexMappings);
     337        boolean allowComplex = "allow".equals(request.getParameterValue(complexMappings.getName()));
     338        for (PluginParameter<String> pp : getAllColumnMappings())
    337339        {
    338           storeValue(configuration, request, pp);
     340          String mapExpression = (String)request.getParameterValue(pp.getName());
     341          checkColumnMapping(mapExpression, allowComplex, pp.getLabel());
     342          storeValue(configuration, pp, mapExpression);
    339343        }
    340344
     
    572576      // Column mappings
    573577      parameters.add(mappingSection);
     578      parameters.add(complexMappings);
    574579      parameters.addAll(getAllColumnMappings());
    575580
Note: See TracChangeset for help on using the changeset viewer.