2014-05-16 23 views
1

嘿我試圖從其他類的靜態地圖的大小...map.size()不是靜態地圖工作

我定義一個類...靜態地圖作爲

tasklet.class

package com.hcsc.ccsp.nonadj.subrogation.integration; 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 

import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.util.ArrayList; 

import java.util.Iterator; 
import java.util.List; 
import java.util.Map; 
import java.util.TreeMap; 

import org.apache.commons.lang3.StringUtils; 
import org.apache.log4j.LogManager; 
import org.apache.log4j.Logger; 
import org.springframework.batch.core.StepContribution; 
import org.springframework.batch.core.scope.context.ChunkContext; 
import org.springframework.batch.core.step.tasklet.Tasklet; 

import org.springframework.batch.repeat.RepeatStatus; 
import org.springframework.beans.factory.InitializingBean; 
import org.springframework.core.io.Resource; 
import org.springframework.util.Assert; 

import com.hcsc.ccsp.nonadj.subrogation.batch.Subrogation; 

import com.hcsc.ccsp.nonadj.subrogation.common.SubrogationConstants; 

/** 
* @author Manan Shah 
* 
*/ 

public class SubrogationFileTransferTasklet implements Tasklet, 
     InitializingBean { 
    private Logger logger = LogManager 
      .getLogger(SubrogationFileTransferTasklet.class); 
    private Resource inputfile; 
    private Resource outputfile; 
    public static String fileLastName; 

    public static String header = null; 
    public static String trailer = null; 
    public static List<Subrogation> fileDataListSubro = new ArrayList<Subrogation>(); 
    public List<String> fileDataListS = new ArrayList<String>(); 
    public static TreeMap<String, Subrogation> map = new TreeMap<String, Subrogation>(); 
    public int counter = 0; 
    public String value; 

    @Override 
    public void afterPropertiesSet() throws Exception { 
     Assert.notNull(inputfile, "inputfile must be set"); 

    } 

    public void setTrailer(String trailer) { 
     this.trailer = trailer; 
    } 

    public void setHeader(String header) { 
     this.header = header; 
    } 

    public String getTrailer() { 
     return trailer; 
    } 

    public String getHeader() { 
     return header; 
    } 

    public Resource getInputfile() { 
     return inputfile; 
    } 

    public void setInputfile(Resource inputfile) { 
     this.inputfile = inputfile; 
    } 

    public Resource getOutputfile() { 
     return outputfile; 
    } 

    public void setOutputfile(Resource outputfile) { 
     this.outputfile = outputfile; 
    } 

    public static void setFileDataListSubro(List<Subrogation> fileDataListSubro) { 
     SubrogationFileTransferTasklet.fileDataListSubro = fileDataListSubro; 
    } 

    public static List<Subrogation> getFileDataListSubro() { 
     return fileDataListSubro; 
    } 

    public static void setMap(TreeMap<String, Subrogation> map) { 
     SubrogationFileTransferTasklet.map = map; 
    } 

    public static TreeMap<String, Subrogation> getMap() { 
     return map; 
    } 

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

     value = (String) chunkContext.getStepContext().getStepExecution() 
       .getJobExecution().getExecutionContext().get("outputFile"); 

     readFromFile(); 

     return RepeatStatus.FINISHED; 
    } 

    public void readFromFile() { 
     BufferedReader br = null; 

     try { 

      String sCurrentLine; 

      br = new BufferedReader(new FileReader(inputfile.getFile())); 
      fileLastName = inputfile.getFile().getName(); 
      while ((sCurrentLine = br.readLine()) != null) { 

       if (sCurrentLine.indexOf("TRAILER") != -1) { 
        setTrailer(sCurrentLine); 
       } else if (sCurrentLine.indexOf("HEADER") != -1) { 
        setHeader(sCurrentLine); 
       } else if (sCurrentLine.equalsIgnoreCase("")) { 

       } else { 
        fileDataListS.add(sCurrentLine); 
       } 

      } 

      convertListOfStringToListOfSubrogaion(fileDataListS); 
      writeDataToFile(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       if (br != null) 
        br.close(); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 

    } 

    public void convertListOfStringToListOfSubrogaion(List<String> list) { 

     Iterator<String> iterator = list.iterator(); 
     while (iterator.hasNext()) { 
      Subrogation subrogration = new Subrogation(); 
      String s = iterator.next(); 
      subrogration.setGRP_NBR(StringUtils.substring(s, 0, 6)); 
      subrogration.setSECT_NBR(StringUtils.substring(s, 6, 10)); 
      subrogration.setAFP_VAL(StringUtils.substring(s, 10, 13)); 
      subrogration.setDOL_MIN_VAL(StringUtils.substring(s, 13, 20)); 
      subrogration 
        .setCORP_ENT_CD(StringUtils.substring(s, 20, s.length())); 

      map.put(subrogration.getGRP_NBR() + subrogration.getSECT_NBR(), 
        subrogration); 
      fileDataListSubro.add(subrogration); 

     } 

    } 

    public void writeDataToFile() { 
     try { 

      File file = new File(value); 

      if (!file.exists()) { 

       logger.info("output file is:-" + file.getAbsolutePath()); 

       file.createNewFile(); 

      } 

      FileWriter fw = new FileWriter(file.getAbsoluteFile()); 

      BufferedWriter bw = new BufferedWriter(fw); 

      Iterator it = map.entrySet().iterator(); 
      while (it.hasNext()) { 
       Map.Entry subrogation = (Map.Entry) it.next(); 
       // System.out.println(subrogation.getKey() + " = " + 
       // subrogation.getValue()); 
       // it.remove(); // avoids a ConcurrentModificationException 

       bw.append(subrogation.getValue().toString() 
         + SubrogationConstants.filler58); 

      } 
      bw.close(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     logger.info("subrogationFileTransferTasklet Step completes"); 

    } 
} 

在處理器我想把地圖大小變成int。

processor.class

package com.hcsc.ccsp.nonadj.subrogation.processor; 



import org.apache.commons.lang3.StringUtils; 
import org.springframework.batch.item.ItemProcessor; 

import com.hcsc.ccsp.nonadj.subrogation.Utils.SubrogationUtils; 
import com.hcsc.ccsp.nonadj.subrogation.batch.Subrogation; 
import com.hcsc.ccsp.nonadj.subrogation.common.SubrogationConstants; 
import com.hcsc.ccsp.nonadj.subrogation.integration.SubrogationFileTransferTasklet; 

public class SubrogationProcessor implements 
     ItemProcessor<Subrogation, Subrogation> { 



    public SubrogationFileTransferTasklet fileTransferTasklet = new SubrogationFileTransferTasklet(); 

    SubrogationUtils subrogationUtils = new SubrogationUtils(); 

    public int countFromFile=SubrogationFileTransferTasklet.map.size(); 

    public static int totalRecords = 0; 

    public static int duplicate = 0; 

    @Override 
    public Subrogation process(Subrogation subrogration) throws Exception { 
     // TODO Auto-generated method stub 


     if (subrogationUtils.validateData(subrogration)) { 
      Subrogation newSubro = new Subrogation(); 

      newSubro.setGRP_NBR(StringUtils.leftPad(subrogration.getGRP_NBR() 
        .trim(), SubrogationConstants.length6, "0")); 

      if (subrogration.getSECT_NBR().trim().length() < 5) { 
       newSubro.setSECT_NBR(StringUtils.leftPad(subrogration 
         .getSECT_NBR().trim(), SubrogationConstants.length4, 
         "0")); 

      } else if (subrogration.getSECT_NBR().trim().length() == 5) { 
       newSubro.setSECT_NBR(StringUtils.substring(subrogration.getSECT_NBR().trim(), 1)); 

      } else { 
       return null; 
      } 

      newSubro.setAFP_VAL(StringUtils.leftPad(subrogration.getAFP_VAL() 
        .trim(), SubrogationConstants.length3, "0")); 

      if (subrogration.getDOL_MIN_VAL().trim().contains(".")) { 

       newSubro.setDOL_MIN_VAL(StringUtils.leftPad(StringUtils.substring(subrogration.getDOL_MIN_VAL(),0,subrogration.getDOL_MIN_VAL().indexOf(".")), SubrogationConstants.length7, 
         "0")); 
      } else { 
       newSubro.setDOL_MIN_VAL(StringUtils.leftPad(subrogration 
         .getDOL_MIN_VAL().trim(), SubrogationConstants.length7, 
         "0")); 
      } 

      newSubro.setCORP_ENT_CD(StringUtils.substring(
        subrogration.getCORP_ENT_CD(), 0, 2)); 

      if (SubrogationFileTransferTasklet.map.containsKey(newSubro 
        .getGRP_NBR() + newSubro.getSECT_NBR())) { 


       duplicate++; 

       return null; 
      } else { 
        if(SubrogationFileTransferTasklet.fileLastName.contains("TX")){ 
         if(newSubro.getCORP_ENT_CD().equalsIgnoreCase("TX")){ 

          SubrogationFileTransferTasklet.map.put(newSubro 
            .getGRP_NBR() + newSubro.getSECT_NBR(), newSubro); 
         totalRecords++; 
         return newSubro; 
         } 
        } 

        else{ 
         if(SubrogationFileTransferTasklet.fileLastName.contains("IL")){ 
          if(!newSubro.getCORP_ENT_CD().equalsIgnoreCase("TX")) 
          { 
          newSubro.setCORP_ENT_CD("IL"); 
          SubrogationFileTransferTasklet.map.put(newSubro 
            .getGRP_NBR() + newSubro.getSECT_NBR(), newSubro); 
          totalRecords++; 
          return newSubro; 
          } 
         } 
         else{ 
          return null; 
         } 

        } 

        return null; 

      } 

     } 

     else { 

      return null; 
     } 

    } 


} 

class SubrogrationException extends RuntimeException { 

    private static final long serialVersionUID = -8971030257905108630L; 

    public SubrogrationException(String message) { 
     super(message); 
    } 
} 

,最後我想使用countFromFile在其他類..

writer.class

package com.hcsc.ccsp.nonadj.subrogation.writer; 

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.LineNumberReader; 
import java.io.Writer; 
import java.util.Date; 
import java.util.List; 


import org.apache.commons.lang3.StringUtils; 
import org.apache.log4j.LogManager; 
import org.apache.log4j.Logger; 

import org.springframework.batch.item.ItemStreamException; 
import org.springframework.batch.item.ItemWriter; 
import org.springframework.batch.item.file.FlatFileFooterCallback; 
import org.springframework.batch.item.file.FlatFileHeaderCallback; 

import com.hcsc.ccsp.nonadj.subrogation.Utils.SubrogationUtils; 
import com.hcsc.ccsp.nonadj.subrogation.batch.Subrogation; 
import com.hcsc.ccsp.nonadj.subrogation.common.SubrogationConstants; 
import com.hcsc.ccsp.nonadj.subrogation.integration.SubrogationFileTransferTasklet; 
import com.hcsc.ccsp.nonadj.subrogation.processor.SubrogationProcessor; 

public class SubrogationHeaderFooterWriter implements FlatFileFooterCallback,FlatFileHeaderCallback{ 


    private Logger logger = LogManager 
    .getLogger(SubrogationHeaderFooterWriter.class); 

    SubrogationFileTransferTasklet fileTransferTasklet = new SubrogationFileTransferTasklet(); 

    SubrogationUtils subrogationUtils=new SubrogationUtils(); 

    SubrogationProcessor processor=new SubrogationProcessor(); 

    private ItemWriter<Subrogation> delegate; 



    public void setDelegate(ItemWriter<Subrogation> delegate) { 
     this.delegate = delegate; 
    } 

    public ItemWriter<Subrogation> getDelegate() { 
     return delegate; 
    } 




    @Override 
    public void writeHeader(Writer writer) throws IOException { 

     //writer.write(SubrogationFileTransferTasklet.header); 

    } 

    @Override 
    public void writeFooter(Writer writer) throws IOException { 


     String trailer = SubrogationFileTransferTasklet.trailer; 
     String s1 = StringUtils.substring(trailer, 0, 23); 

     logger.info(" Data from input file size is---- "+new SubrogationProcessor().countFromFile); 
     int trailerCounter=new SubrogationProcessor().countFromFile+SubrogationProcessor.totalRecords; 
     logger.info(" Data comming from database is"+SubrogationProcessor.totalRecords); 

     logger.info(" Duplicate data From DataBase is " +SubrogationProcessor.duplicate); 

     logger.info(" Traileer is " + s1+ trailerCounter); 

     writer.write(s1 + trailerCounter); 


     SubrogationFileTransferTasklet.map.clear(); 
     SubrogationFileTransferTasklet.fileDataListSubro.clear(); 
     SubrogationProcessor.totalRecords=0; 
     SubrogationProcessor.duplicate=0; 

    } 

    public void writeErrorDataToFile(List<String> errorDataList,String errorfile){ 
     File file; 
     try { 
      file = new File(errorfile); 

      logger.info("error file is "+errorfile); 

       FileWriter fileWriter = new FileWriter(file,true); 

       BufferedWriter bufferWritter = new BufferedWriter(fileWriter); 

       for(String data:errorDataList){ 

       bufferWritter.write(new Date()+" "+data); 

       bufferWritter.write(SubrogationConstants.LINE_SEPARATOR); 
       } 
       bufferWritter.close(); 
      } 

     catch (IOException e) { 

      throw new ItemStreamException("Could not convert resource to file: [" + errorfile + "]", e); 
     } 
    } 
    /* 
    public void write(List<? extends Subrogation> subrogation) throws Exception { 
     System.out.println("inside writer"); 

     delegate.write(subrogation); 

    }*/ 


} 

所以在這裏記錄massage.size打印0 .... 我無法理解爲什麼?

+0

請發佈完整的代碼 – Sanjeev

+0

它看起來像地圖是在創建的時候空'新的SubrogationProcessor()'。你確定地圖在通話時不應該是空的嗎? – dasblinkenlight

+0

map.put發生在countFromFile decleration之前嗎?請記住:countFromFile不會包含更新的值,它將包含地圖在讀取值時的大小 –

回答

1

這樣做是爲了確保在構建對象時使用地圖的當前大小對其進行初始化。

class SubrogationProcessor{ 

    public int countFromFile; 

    public SubrogationProcessor(){ 
     countFromFile=SubrogationFileTransferTasklet.map.size(); 
    } 
} 
+0

其實我增加處理器中的地圖...並且我不想要地圖的增量值 我想使用它在tasklet類中具有的相同值。 – manankhh

+0

我不知道你在做什麼。存儲在一些靜態變量的其他地方,一旦設置並從那裏訪問。 – Braj

1

這取決於「map.put」代碼行何時運行。它是否在tasklet類中的靜態塊中?

如果說之前的記錄已被添加到地圖,然後map.size()確實將處理器實例初始化爲0

我的建議是添加到地圖爲靜態塊,如果在所有可能的或調試代碼,看看當被稱爲比較。把()方法時將.size()方法被調用

public static TreeMap<String, Subrogation> map = new TreeMap<String, Subrogation>(); 

static{ 
    map.put(subrogration.getGRP_NBR() + subrogration.getSECT_NBR(), subrogration); 
} 
+0

map.put首先運行,如果我們在process方法內部測試它,那麼它有值。map.size()返回值....但countFromFile也向方法打印0 – manankhh