package edu.sc.seis.sod.source.seismogram; import java.util.ArrayList; import java.util.List; import edu.iris.Fissures.IfSeismogramDC.RequestFilter; import edu.iris.Fissures.network.ChannelIdUtil; import edu.iris.Fissures.seismogramDC.LocalSeismogramImpl; import edu.sc.seis.fissuresUtil.time.MicroSecondTimeRange; public class PromiseSeismogramList { PromiseSeismogramList(List<RequestFilter> request) { this.request = request; } public List<RequestFilter> getRequest() { return request; } public synchronized List<LocalSeismogramImpl> getResult() throws SeismogramSourceException { while (matching == null && seismogramSourceException == null) { try { notifyAll(); wait(); } catch(InterruptedException e) {} } if (seismogramSourceException != null) { throw seismogramSourceException; } return matching; } synchronized void finishRequest(List<LocalSeismogramImpl> seisList) { matching = new ArrayList<LocalSeismogramImpl>(); for (LocalSeismogramImpl seis : seisList) { for (RequestFilter rf : request) { if (ChannelIdUtil.areEqualExceptForBeginTime(rf.channel_id, seis.getChannelID())) { MicroSecondTimeRange rfRange = new MicroSecondTimeRange(rf); MicroSecondTimeRange seisRange = new MicroSecondTimeRange(seis); if (rfRange.intersects(seisRange)) { matching.add(seis); break; } } } } notifyAll(); } synchronized void seismogramSourceException(SeismogramSourceException e) { seismogramSourceException = e; notifyAll(); } SeismogramSourceException seismogramSourceException; List<LocalSeismogramImpl> matching; List<RequestFilter> request; }