/* * JBoss, Home of Professional Open Source * Copyright 2015, Red Hat, Inc. and/or its affiliates, and individual * contributors by the @authors tag. See the copyright.txt in the * distribution for a full listing of individual contributors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jboss.as.quickstarts.batch.job; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.Serializable; import java.util.logging.Logger; import javax.batch.api.BatchProperty; import javax.batch.api.chunk.ItemReader; import javax.inject.Inject; import javax.inject.Named; import org.jboss.as.quickstarts.batch.model.Contact; //This class will read the file and return an instance of Contact to be imported @Named("recordsReader") public class RecordsReader implements ItemReader { // Here you can inject a property defined in import-file.xml @Inject @BatchProperty private String separatorRegex; // Here you can inject a property defined in import-file.xml @Inject @BatchProperty private String fileName; @Inject private Logger log; private BufferedReader br; private ChunkCheckpoint checkpoint; @Override public void close() throws Exception { br.close(); } @Override public void open(Serializable previousCheckpoint) throws Exception { // Verify if we have an previous checkpoint if (previousCheckpoint == null) { this.checkpoint = new ChunkCheckpoint(); } else { this.checkpoint = (ChunkCheckpoint) previousCheckpoint; } br = new BufferedReader(new FileReader(new File(System.getProperty("java.io.tmpdir"), fileName))); long lineNumber = checkpoint.getLineNumber(); if (lineNumber > 0) { log.info("Skipping to line " + lineNumber + " as marked by previous checkpoint"); } for (long i = 0; i < lineNumber; i++) { br.readLine(); } } @Override public Contact readItem() throws Exception { String line = br.readLine(); if (line != null) { String[] fields = line.split(separatorRegex); Contact contact = new Contact(); contact.setId(Integer.parseInt(fields[0])); contact.setName(fields[1]); contact.setPhone(fields[2]); // update the checkpoint checkpoint.increase(); return contact; } return null; } @Override public Serializable checkpointInfo() throws Exception { return checkpoint; } }