/** * Executes a background task. * * <p>The task payload is either type Deferrable or Key; in the latter case, retrieve (then * delete) the Deferrable instance from the datastore. */ @Override public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { try { Object payload = deserialize(req); if (payload instanceof Key) { // get Deferrable from datastore Blob taskBlob = (Blob) getDatastoreService().get((Key) payload).getProperty(TASK_PROPERTY); deleteEntity((Key) payload); if (taskBlob != null) { payload = deserialize(taskBlob.getBytes()); } } if (payload instanceof Deferrable) { ((Deferrable) payload).doTask(); } else if (payload != null) { log.severe("invalid payload type: " + payload.getClass().getName()); // don't retry task } } catch (EntityNotFoundException e) { log.severe(e.toString()); // don't retry task } catch (PermanentTaskFailure e) { log.severe(e.toString()); // don't retry task } }
@Override public void stateChanged(ChangeEvent e) { Component selected = jtp.getSelectedComponent(); if (selected instanceof Deferrable) { Deferrable deferrable = (Deferrable) selected; if (!deferrable.isInitialized()) deferrable.initialize(); } if (selected instanceof Controllable) { JPanel controlPanel = ((Controllable) selected).getControlPanel(); if (controlPanel == null) clearSpecificTaskPane(); else setSpecificTaskPane( controlPanel, jtp.getTitleAt(jtp.getSelectedIndex()), jtp.getIconAt(jtp.getSelectedIndex())); } else { clearSpecificTaskPane(); } }