package hu.sztaki.ilab.longneck.process.block; import hu.sztaki.ilab.longneck.Record; import hu.sztaki.ilab.longneck.process.*; import java.util.ArrayList; import java.util.Calendar; import java.util.List; /** * * Extracts input Unix timestamp into distinct date element fields (year,month,day,hour,min,sec) * * @author LorĂ¡nd Bendig <lbendig@ilab.sztaki.hu> * */ public class ExtractUnixtimestamp extends AbstractAtomicBlock implements CompoundBlock { /** The list of inside blocks. */ private List<? extends Block> blocks; @Override public void apply(Record record, VariableSpace variables) { try { // Execute regular expression for (String fName : applyTo) { // Get source value String value = BlockUtils.getValue(fName, record, variables); long unixTimestamp = Long.parseLong(value); Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(unixTimestamp * 1000); variables.setVariable("year", cal.get(Calendar.YEAR) + ""); variables.setVariable("month", cal.get(Calendar.MONTH) + 1 + ""); variables.setVariable("day", cal.get(Calendar.DAY_OF_MONTH) + ""); variables.setVariable("hour", cal.get(Calendar.HOUR_OF_DAY) + ""); variables.setVariable("min", cal.get(Calendar.MINUTE) + ""); variables.setVariable("sec", cal.get(Calendar.SECOND) + ""); variables.setVariable("unixTimestamp", Integer.toString(6)); } } catch (NumberFormatException ex) { log.error(String.format("%1$s %2$s", this, sourceInfo.getLocationString()), ex); } } @Override public List<Block> getBlocks() { return (List<Block>) blocks; } @Override public void setBlocks(List<? extends Block> blocks) { this.blocks = blocks; } @Override public ExtractUnixtimestamp clone() { ExtractUnixtimestamp copy = (ExtractUnixtimestamp) super.clone(); if (blocks != null) { copy.blocks = new ArrayList<Block>(blocks.size()); for (Block b : blocks) { ((List<Block>) copy.blocks).add(b.clone()); } } return copy; } @Override public boolean hasPosition(int pos) { return (blocks.size() - 1 >= pos); } }