public int getCurrentStep() {
   // return cancelMonitor.getCurrentStep();
   // if(visitor == null)
   // return getInitialStep();
   // else
   // return visitor.getNumProcessedGeometries();
   if (dissolver == null) return getInitialStep();
   else return dissolver.getNumProcessedGeometries();
 }
    public void run() throws GeoprocessException {
      try {
        FeaturePersisterProcessor2 processor = new FeaturePersisterProcessor2(writer);

        dissolver =
            new FeatureDissolver(processor, firstLayer, fields_functions, criteria, dissolveType);

        if (dissolveOnlySelection) {
          FBitSet selection = firstLayer.getRecordset().getSelection();
          dissolver.setSelection(selection);
        }
        dissolver.dissolve(cancelMonitor);
      } catch (Exception e) {
        e.printStackTrace();

      } finally {
        finished = true;
      }
    }