1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.kuali.ole.gl.service.impl;
17  
18  import java.io.BufferedReader;
19  import java.io.File;
20  import java.io.FileNotFoundException;
21  import java.io.FileReader;
22  import java.io.FilenameFilter;
23  import java.io.IOException;
24  import java.io.PrintStream;
25  import java.util.Arrays;
26  import java.util.List;
27  
28  import org.apache.commons.lang.StringUtils;
29  import org.kuali.ole.gl.GeneralLedgerConstants;
30  import org.kuali.ole.gl.service.OriginEntryGroupService;
31  import org.kuali.rice.core.api.datetime.DateTimeService;
32  import org.kuali.rice.krad.service.KualiModuleService;
33  import org.springframework.transaction.annotation.Transactional;
34  
35  
36  
37  
38  @Transactional
39  public class OriginEntryGroupServiceImpl implements OriginEntryGroupService {
40      private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(OriginEntryGroupServiceImpl.class);
41  
42      protected DateTimeService dateTimeService;
43      protected String batchFileDirectoryName;
44      protected KualiModuleService kualiModuleService;
45      protected String nightlyOutFileName;
46      protected String backupFileName;
47  
48      
49  
50  
51      public String getNewestScrubberErrorFileName() {
52          File newestFile = null;
53  
54          File[] files = null;
55          
56          if (new File(batchFileDirectoryName) == null) {
57              return null;
58          }
59          files = new File(batchFileDirectoryName).listFiles(new ScrubberErrorFilenameFilter());
60          List<File> fileList = Arrays.asList(files);
61          if (fileList.size() > 0) {
62              for (File eachFile : fileList) {
63                  if (newestFile == null) {
64                      newestFile = eachFile;
65                  }
66                  else {
67                      if (newestFile.lastModified() < eachFile.lastModified()) {
68                          newestFile = eachFile;
69                      }
70                  }
71              }
72          }
73          else {
74              return null;
75          }
76  
77          return newestFile.getName();
78      }
79  
80  
81      
82  
83  
84  
85  
86      public void createBackupGroup() {
87          LOG.debug("createBackupGroup() started");
88          
89          File nightlyOutFile = new File(batchFileDirectoryName + File.separator + nightlyOutFileName);
90          if (!nightlyOutFile.exists()) {
91              LOG.warn("nightlyOutFile doesn't exist :" + nightlyOutFileName);
92          }
93  
94          String backupFile = batchFileDirectoryName + File.separator + backupFileName + GeneralLedgerConstants.BatchFileSystem.EXTENSION;
95          PrintStream backupPs = null;
96          try {
97              backupPs = new PrintStream(backupFile);
98          }
99          catch (FileNotFoundException e) {
100             throw new RuntimeException("backupFile doesn't exist " + backupFile);
101         }
102 
103         
104         File[] doneFileList = new File(batchFileDirectoryName).listFiles(new DoneFileFilter());
105         
106         buildBackupFileOutput(doneFileList, backupPs);
107         backupPs.close();
108     }
109 
110 
111     
112 
113 
114     protected void buildBackupFileOutput(File[] doneFileList, PrintStream ps) {
115         BufferedReader inputFileReader = null;
116 
117         for (File doneFile : doneFileList) {
118             
119             File dataFile = getDataFile(doneFile);
120             if (dataFile != null) {
121                 try {
122                     inputFileReader = new BufferedReader(new FileReader(dataFile.getPath()));
123                     String line = null;
124                     while ((line = inputFileReader.readLine()) != null) {
125                         try {
126                             ps.printf("%s\n", line);
127                         }
128                         catch (Exception e) {
129                             throw new IOException(e.toString());
130                         }
131                     }
132                     inputFileReader.close();
133                     inputFileReader = null;
134 
135                 }
136                 catch (Exception e) {
137                     throw new RuntimeException(e.toString());
138                 }
139 
140                 doneFile.delete();
141                 postProcessDataFile(dataFile);
142                 
143             }
144         }
145     }
146     
147     protected void postProcessDataFile( File dataFile )
148     {
149         
150     }
151 
152 
153     
154 
155 
156     public File createGroup(String fileName) {
157         return new File(batchFileDirectoryName + File.separator + fileName);
158     }
159 
160     
161 
162 
163     public boolean getGroupExists(String groupId) {
164 
165         File file = new File(batchFileDirectoryName + File.separator + groupId);
166         if (file == null) {
167             return false;
168         }
169         else {
170             return true;
171         }
172     }
173 
174     
175 
176 
177     public File[] getAllFileInBatchDirectory() {
178         File[] returnFiles = null;
179         if (new File(batchFileDirectoryName) != null) {
180             returnFiles = new File(batchFileDirectoryName).listFiles(new DateAndDoneFileFilter());
181         }
182         return returnFiles;
183     }
184 
185 
186     
187 
188 
189     public void deleteFile(String fileNameWithPath) {
190         File file = new File(fileNameWithPath);
191         if (file.exists()) {
192             file.delete();
193         }
194     }
195 
196     
197 
198 
199     public File getFileWithFileName(String fileName) {
200         return new File(batchFileDirectoryName + File.separator + fileName);
201     }
202 
203     protected class ScrubberErrorFilenameFilter implements FilenameFilter {
204         
205 
206 
207         public boolean accept(File dir, String name) {
208             return name.contains(GeneralLedgerConstants.BatchFileSystem.SCRUBBER_ERROR_PREFIX);
209         }
210     }
211 
212     protected class DateAndDoneFileFilter implements FilenameFilter {
213         
214 
215 
216         public boolean accept(File dir, String name) {
217             return name.contains(GeneralLedgerConstants.BatchFileSystem.DONE_FILE_EXTENSION) || name.contains(GeneralLedgerConstants.BatchFileSystem.EXTENSION);
218         }
219     }
220 
221     protected class DoneFileFilter implements FilenameFilter {
222         
223 
224 
225         public boolean accept(File dir, String name) {
226             return name.contains(GeneralLedgerConstants.BatchFileSystem.DONE_FILE_EXTENSION);
227         }
228     }
229 
230     protected File getDataFile(File doneFile) {
231         String doneFileAbsPath = doneFile.getAbsolutePath();
232         if (!doneFileAbsPath.endsWith(GeneralLedgerConstants.BatchFileSystem.DONE_FILE_EXTENSION)) {
233             throw new IllegalArgumentException("Done file name must end with " + GeneralLedgerConstants.BatchFileSystem.DONE_FILE_EXTENSION);
234         }
235         String dataFileAbsPath = StringUtils.removeEnd(doneFileAbsPath, GeneralLedgerConstants.BatchFileSystem.DONE_FILE_EXTENSION) + GeneralLedgerConstants.BatchFileSystem.EXTENSION;
236         File dataFile = new File(dataFileAbsPath);
237         if (!dataFile.exists() || !dataFile.canRead()) {
238             LOG.error("Cannot find/read data file " + dataFileAbsPath);
239             return null;
240         }
241         return dataFile;
242     }
243     
244     public void setBatchFileDirectoryName(String batchFileDirectoryName) {
245         this.batchFileDirectoryName = batchFileDirectoryName;
246     }
247 
248 
249     public void setKualiModuleService(KualiModuleService kualiModuleService) {
250         this.kualiModuleService = kualiModuleService;
251     }
252     
253     public void setDateTimeService(DateTimeService dts) {
254         dateTimeService = dts;
255     }
256 
257     public void setNightlyOutFileName(String nightlyOutFileName) {
258         this.nightlyOutFileName = nightlyOutFileName;
259     }
260 
261     public void setBackupFileName(String backupFileName) {
262         this.backupFileName = backupFileName;
263     }
264 
265     protected DateTimeService getDateTimeService() {
266         return dateTimeService;
267     }
268 
269     protected String getBatchFileDirectoryName() {
270         return batchFileDirectoryName;
271     }
272 
273     protected KualiModuleService getKualiModuleService() {
274         return kualiModuleService;
275     }
276     
277     
278 }