Results 1 to 3 of 3

Thread: DeleteFilesTasklet with filename pattern property

  1. #1
    Join Date
    Dec 2012
    Posts
    17

    Default DeleteFilesTasklet with filename pattern property

    Hi,

    I would like to implement a tasklet deleting files matching a certain pattern in 'MultiResourceReader' style. What is the best approach to teach the tasklet class to evaluate the bean property the same way as MultiResourceReader (or its calling class) does?

    I think about the following bean definition:
    Code:
    	<bean id="deleteFilesTasklet" class="com.siemens.ces.sdsync.DeleteFileTasklet"
    		scope="step">
    		<property name="resources" value="#{jobParameters['inputFileNamePattern']}"/>
    	</bean>
    Code:
    public class DeleteFileTasklet implements Tasklet, InitializingBean {
    
    	private Resource[] resources;
    
    	public RepeatStatus execute(StepContribution contribution,
    			ChunkContext chunkContext) throws Exception {
    
    		for (int i = 0; i < resources.length; i++) {
    			File file = resources[i].getFile();
    			Assert.state(file.isFile());
    			boolean deleted = file.delete();
    			if (!deleted) {
    				throw new UnexpectedJobExecutionException(
    						"Could not delete file " + file.getName());
    			}
    		}
    		return RepeatStatus.FINISHED;
    	}
    
    	public void setResources(Resource resources[]) {
    		Assert.notNull(resources, "The resources must not be null");
    		this.resources = (Resource[]) Arrays.asList(resources).toArray(
    				new Resource[resources.length]);
    	}
    
    	public void afterPropertiesSet() throws Exception {
    		Assert.notNull(resources, "files must be set");
    	}
    }
    Thanks in advance for your help,
    Elmar
    Last edited by mminella; Feb 11th, 2013 at 09:08 AM. Reason: formatting

  2. #2
    Join Date
    Dec 2012
    Posts
    17

    Default

    Hi guys,

    PathMatchingResourcePatternResolver does the trick:

    Code:
    <bean id="deleteFilesTasklet" class="com.siemens.ces.sdsync.DeleteFilesTasklet"
    scope="step">
    <property name="resources" value="#{jobParameters['inputFileNamePattern']}" />
    </bean>

    <bean id="resourcePatternResolver" class="org.springframework.core.io.support.PathMat chingResourcePatternResolver" />

    Code:
    public class DeleteFilesTasklet implements Tasklet, InitializingBean {

    private String resourcePattern;

    @Autowired
    private ResourcePatternResolver resourcePatternResolver;

    public RepeatStatus execute(StepContribution contribution,
    ChunkContext chunkContext) throws Exception {

    Resource[] resources = resourcePatternResolver.getResources(resourcePatte rn);
    for (Resource resource : resources) {
    File file = resource.getFile();
    Assert.state(file.isFile());
    boolean deleted = file.delete();
    if (!deleted) {
    throw new UnexpectedJobExecutionException(
    "Could not delete file " + file.getName());
    }
    }
    return RepeatStatus.FINISHED;
    }

    public void setResources(String resources) {
    Assert.notNull(resources, "The resources must not be null");
    this.resourcePattern = resources;
    }

    public void setResourcePatternResolver(ResourcePatternResolver resourcePatternResolver) {
    this.resourcePatternResolver = resourcePatternResolver;
    }

    public void afterPropertiesSet() throws Exception {
    Assert.notNull(resourcePattern, "files must be set");
    }
    }

  3. #3
    Join Date
    Dec 2012
    Posts
    17

    Default

    Hi guys,

    PathMatchingResourcePatternResolver does the trick:

    Code:
    <bean id="deleteFilesTasklet" class="com.siemens.ces.sdsync.DeleteFilesTasklet"
    scope="step">
    <property name="resources" value="#{jobParameters['inputFileNamePattern']}" />
    </bean>

    <bean id="resourcePatternResolver" class="org.springframework.core.io.support.PathMat chingResourcePatternResolver" />

    Code:
    public class DeleteFilesTasklet implements Tasklet, InitializingBean {

    private String resourcePattern;

    @Autowired
    private ResourcePatternResolver resourcePatternResolver;

    public RepeatStatus execute(StepContribution contribution,
    ChunkContext chunkContext) throws Exception {

    Resource[] resources = resourcePatternResolver.getResources(resourcePatte rn);
    for (Resource resource : resources) {
    File file = resource.getFile();
    Assert.state(file.isFile());
    boolean deleted = file.delete();
    if (!deleted) {
    throw new UnexpectedJobExecutionException(
    "Could not delete file " + file.getName());
    }
    }
    return RepeatStatus.FINISHED;
    }

    public void setResources(String resources) {
    Assert.notNull(resources, "The resources must not be null");
    this.resourcePattern = resources;
    }

    public void setResourcePatternResolver(ResourcePatternResolver resourcePatternResolver) {
    this.resourcePatternResolver = resourcePatternResolver;
    }

    public void afterPropertiesSet() throws Exception {
    Assert.notNull(resourcePattern, "files must be set");
    }
    }

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •