package jalview.ws2.helpers; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import jalview.ws2.actions.BaseJob; import jalview.ws2.actions.api.JobI; import jalview.ws2.api.JobStatus; /** * A property change listener to be used by web service tasks that delegates all * sub-job related events from {@link BaseJob} subclasses to * {@link TaskEventSupport}. Tasks can create one instance of this class with * their event handler as a delegate and add it as a property change listener to * each sub-job supporting property change listeners. It ensures that an * appropriate {@code fireSubJob*Changed} method of the delegate object will be * called whenever a {@link PropertyChagneEvent} is emitted by the sub-job. * * @author mmwarowny * * @param * result type of the task */ public class DelegateJobEventListener implements PropertyChangeListener { private final TaskEventSupport delegate; public DelegateJobEventListener(TaskEventSupport delegate) { this.delegate = delegate; } @Override public void propertyChange(PropertyChangeEvent evt) { switch (evt.getPropertyName()) { case "status": statusChanged(evt); break; case "log": logChanged(evt); break; case "errorLog": errorLogChanged(evt); break; default: throw new AssertionError(String.format( "illegal property name \"%s\"", evt.getPropertyName())); } } private void statusChanged(PropertyChangeEvent evt) { JobI job = (JobI) evt.getSource(); JobStatus status = (JobStatus) evt.getNewValue(); delegate.fireSubJobStatusChanged(job, status); } private void logChanged(PropertyChangeEvent evt) { JobI job = (JobI) evt.getSource(); String log = (String) evt.getNewValue(); delegate.fireSubJobLogChanged(job, log); } private void errorLogChanged(PropertyChangeEvent evt) { JobI job = (JobI) evt.getSource(); String errorLog = (String) evt.getNewValue(); delegate.fireSubJobErrorLogChanged(job, errorLog); } }