package edu.sc.seis.sod.process.waveform; import edu.iris.Fissures.IfNetwork.ChannelId; import edu.iris.Fissures.IfSeismogramDC.RequestFilter; import edu.iris.Fissures.network.ChannelIdUtil; import edu.iris.Fissures.network.ChannelImpl; import edu.iris.Fissures.seismogramDC.LocalSeismogramImpl; import edu.sc.seis.fissuresUtil.cache.CacheEvent; import edu.sc.seis.fissuresUtil.hibernate.SeismogramFileRefDB; import edu.sc.seis.fissuresUtil.xml.SeismogramFileTypes; import edu.sc.seis.sod.ConfigurationException; import edu.sc.seis.sod.CookieJar; import edu.sc.seis.sod.status.StringTree; import edu.sc.seis.sod.velocity.PrintlineVelocitizer; public abstract class AbstractSeismogramWriter extends AbstractFileWriter implements WaveformProcess { protected boolean storeSeismogramsInDB = false; public AbstractSeismogramWriter(String workingDir, String fileTemplate, String prefix, boolean storeSeismogramsInDB) throws ConfigurationException { super(workingDir, fileTemplate, prefix); this.storeSeismogramsInDB = storeSeismogramsInDB; new PrintlineVelocitizer(new String[] {fileTemplate}); } protected AbstractSeismogramWriter() throws ConfigurationException { this("seismograms", DEFAULT_FILE_TEMPLATE_WO_EXT+".unknown", "", false); } public WaveformResult accept(CacheEvent event, ChannelImpl channel, RequestFilter[] original, RequestFilter[] available, LocalSeismogramImpl[] seismograms, CookieJar cookieJar) throws Exception { if (cookieJar == null) {throw new NullPointerException("CookieJar cannot be null");} if (channel == null) {throw new NullPointerException("Channel cannot be null");} if(seismograms.length > 0) { removeExisting(event, channel, seismograms[0], seismograms.length); for(int i = 0; i < seismograms.length; i++) { String loc = generate(event, channel, seismograms[i], i, seismograms.length); StringTree mkdirResult = checkParentDirs(loc); if (! mkdirResult.isSuccess()) { return new WaveformResult(seismograms, mkdirResult); } write(loc, seismograms[i], channel, event); if (storeSeismogramsInDB) { SeismogramFileRefDB.getSingleton().saveSeismogramToDatabase(event, channel, seismograms[i], loc, getFileType()); } cookieJar.put(AbstractSeismogramWriter.getCookieName(prefix, channel.get_id(), i), loc); } } return new WaveformResult(true, seismograms, this); } public abstract SeismogramFileTypes getFileType(); public abstract void write(String loc, LocalSeismogramImpl seis, ChannelImpl chan, CacheEvent ev) throws Exception; public static void addBytesWritten(long bytes) { bytesWritten += bytes; } public static long getBytesWritten() { return bytesWritten; } public static String getCookieName(String prefix, ChannelId channel, int i) { return AbstractSeismogramWriter.COOKIE_PREFIX + prefix + ChannelIdUtil.toString(channel) + "_" + i; } public static final String SVN_PARAM = PhaseSignalToNoise.PHASE_STON_PREFIX + "ttp"; static long bytesWritten = 0; public static final String COOKIE_PREFIX = "SeisFile_"; }