private void setDocument(final URL document, boolean load) throws IOException {
    final Cursor cu = switchCursor(waitc);
    try {
      log.info(document);
      final URL old = this.document;
      this.firePropertyChange("document", old, this.document = document);
      setFile(this.document);
      url.setText(this.document == null ? "{null}" : this.document.toString());
      if (!load) return;

      cm.deregister(tactics.getCurves());
      final ComputedTrajectorySet cts;
      if (this.document == null) cts = null;
      else {
        final IONode n = new JCurlSerializer().read(this.document);
        final IOTrajectories it = (IOTrajectories) n;
        final TrajectorySet ts = it.trajectories().get(0);
        cts = (ComputedTrajectorySet) ts;
      }
      change.discardAllEdits();
      if (cts != null) cts.setCurrentTime(currentTime);
      tactics.setCurves(cts);
      broomSwing.setBroom(tactics.getBroom());
      cm.register(cts);
      setModified(false);
    } finally {
      switchCursor(cu);
    }
  }
 private File saveHelper(
     File dst, final File base, final String name, final boolean forceOverwrite) {
   JFileChooser fcJcx = null;
   for (; ; ) {
     if (fcJcx == null) fcJcx = createJcxChooser(base, name);
     if (dst == null) {
       if (JFileChooser.APPROVE_OPTION != fcJcx.showSaveDialog(getMainFrame())) return null;
       dst = fcJcx.getSelectedFile();
     }
     if (dst == null) continue;
     dst = gui.ensureSuffix(dst, jcxzPat);
     if (forceOverwrite || askOverwrite(dst))
       try {
         save(tactics.getCurves(), dst);
         return dst;
       } catch (final Exception e) {
         showErrorDialog("Couldn't save to '" + dst + "'", e);
       }
     else dst = null;
   }
 }
 /** Edit Menu Action */
 @Action
 public void editOut() {
   final ComputedTrajectorySet cts = tactics.getCurves();
   if (cts == null) return;
   change.addEdit(reset(cts, tactics.getBroom(), true));
 }