import java.io.BufferedReader import java.io.IOException import java.io.Reader import java.text.ParseException import java.text.SimpleDateFormat import java.util.ArrayList import java.util.Date import java.util.List import com.ses_esl.commandbo.entite.ActionSystemCommandBO import com.ses_esl.commandbo.entite.CommandBOParameters import com.ses_esl.commandbo.entite.CommandsBO import com.ses_esl.commandbo.entite.EnumTypeCommandBO import com.ses_esl.commandbo.entite.IActionSystem import com.ses_esl.commun.mixte.service.SesTechnicalException import com.ses_esl.commun.mixte.transfertobject.task.TaskTO.ExecutionType import com.ses_esl.commun.technical.io.FileUtil import com.ses_esl.inputmanager.entite.process.parser.ConstanteGroovyScript class GroovyPos { private final static int TAILLE_LIGNE_YES =36; private final static int PAGE_CLIENT_ID = 0; private final static int PAGE_YES_ID = 2; private final static String RESULT_EXTENSION = ".RES"; private CommandsBO actionSystemCommandBO; private final String datePattern = "yyyyMMddhhmm"; public IActionSystem gimeActionSystem(Reader reader) { final List commandsBOList = new ArrayList(); actionSystemCommandBO = new CommandsBO(); BufferedReader bufferReader; try{ bufferReader = new BufferedReader(reader); String line; while ((line = bufferReader.readLine()) != null) { setLine(line); } }catch (final Exception e){ // }finally{ if (null != bufferReader) { bufferReader.close(); } } commandsBOList.add(actionSystemCommandBO); return new ActionSystemCommandBO(commandsBOList); } private String setLine(String args) { if (args.length() == TAILLE_LIGNE_YES) { setCommandTypeAndExecutionType(args.substring(2, 4)); setPageId(); if (3 == actionSystemCommandBO.getCommandId()) { setStartDateAndTemporisation(args.substring(12)); } else { setStartTimeAndTemporisation(args); } setWeekDays(args.substring(5, 12)); } if (1 == actionSystemCommandBO.getCommandId()) { setTemporisation(args.substring(32, TAILLE_LIGNE_YES)); } return ConstanteGroovyScript.IGNORED; } /** * @param substring */ private void setTemporisation(final String substring) { final int hour = Integer.parseInt(substring.substring(0, 2)); final int minute = Integer.parseInt(substring.substring(2)); long temporisation = (60*hour+minute)*60000; actionSystemCommandBO.setTempo(temporisation); } /** * @param substring */ private void setCommandTypeAndExecutionType(final String substring) { final int intValue = Integer.parseInt(substring); actionSystemCommandBO.setCommandId(intValue); if (intValue > 0 && intValue < 4) { actionSystemCommandBO.setCommandType(EnumTypeCommandBO.SWITCH_PAGE); actionSystemCommandBO.setExecutionType(ExecutionType.ONCE); } else if (intValue == 4 || intValue == 5) { actionSystemCommandBO .setCommandType(EnumTypeCommandBO.SWITCH_PAGE_PERIODICALLY); actionSystemCommandBO.setExecutionType(ExecutionType.PERDIODICALLY); } } private void setPageId() { if (actionSystemCommandBO.getCommandId() == 2) { actionSystemCommandBO.setExecutionType(ExecutionType.IMMEDIATELY); // 0 to switch to NORMAL page actionSystemCommandBO.setPageId(PAGE_CLIENT_ID); } else { // 2 to switch to YES page actionSystemCommandBO.setPageId(PAGE_YES_ID); } } /** * @param substring * @return */ private void setWeekDays(final String substring) { final int[] weekDays = new int[7]; weekDays[0] = (substring.charAt(6) == '1' ? 1 : 0); for (int i = 1; i < substring.length(); i++) { weekDays[i] = (substring.charAt(i - 1) == '1' ? 1 : 0); } actionSystemCommandBO.setWeekDays(weekDays); } /** * @param substring * @return */ private void setStartDateAndTemporisation(final String substring) { final Date startDate = gimeNextDate(substring.substring(0, 12)); final Date endDate = gimeNextDate(substring.substring(12)); while (endDate.before(startDate)) { setDateToNextDay(endDate); } final long tempo = endDate.getTime() - startDate.getTime(); actionSystemCommandBO.setStartDate(startDate); actionSystemCommandBO.setTempo(tempo); } /** * @param substring * @return */ private Date gimeNextDate(final String substring) { final SimpleDateFormat sdf = new SimpleDateFormat(datePattern); Date date; final Date currentDate = new Date(); try { date = sdf.parse(substring); if (substring.subSequence(8, 10).equals("12")) { date.setHours(12); } if (date.before(currentDate)) { setDateToNextDay(date); } } catch (final ParseException e) { date = new Date(); // pour ne pas créer la tache date.setHours(date.getHours() - 1); } date.setSeconds(0); return date; } /** * @param date */ @SuppressWarnings("deprecation") private void setDateToNextDay(final Date date) { date.setDate(date.getDate() + 1); } /** * @param args */ private void setStartTimeAndTemporisation(final String args) { final String startTime = args.substring(20, 24); final String endTime = args.substring(32, 36); final int startHours = Integer.parseInt(startTime.substring(0, 2)); final int startMinutes = Integer.parseInt(startTime.substring(2, 4)); final int endHours = Integer.parseInt(endTime.substring(0, 2)); final int endMinutes = Integer.parseInt(endTime.substring(2, 4)); final Date currentDate = new Date(); currentDate.setSeconds(0); final Date startDate = new Date(); if (actionSystemCommandBO.getCommandId() == 1) { startDate.setMinutes(startDate.getMinutes()+1); startDate.setSeconds(0); }else{ startDate.setHours(startHours); startDate.setMinutes(startMinutes); startDate.setSeconds(0); if (startDate.before(currentDate)) { setDateToNextDay(startDate); } } final Date endDate = new Date(startDate.getTime()); endDate.setHours(endHours); endDate.setMinutes(endMinutes); if (startDate.after(endDate)) { setDateToNextDay(endDate); } final long tempo = endDate.getTime() - startDate.getTime(); actionSystemCommandBO.setStartDate(startDate); actionSystemCommandBO.setTempo(tempo); } public void createResultFile(final CommandBOParameters parameters)throws IOException{ String fileDirectory=parameters.getFileDirectory(); String fileNamePrefix=parameters.getFileNamePrefix(); String fileContent=parameters.getFileContent(); final String fileName = gimeResultFileName(fileDirectory,fileNamePrefix); try { FileUtil.deleteFile(fileName); FileUtil.writeInto(fileContent.getBytes(), fileName); } catch (final IOException e) { throw new SesTechnicalException(e); } } /** * @param fileDirectory * @param fileNamePrefix * @return */ private String gimeResultFileName(final String fileDirectory, final String fileNamePrefix) { final String fileName = fileDirectory+ fileNamePrefix+ RESULT_EXTENSION; return fileName; } } /***TAIL_END***/