Example #1
0
  public static final void main(String[] args) {
    PipedInputLog dobj_ins;
    logformat.slog2.output.OutputLog slog_outs;
    Kind next_kind;
    Topology topo;
    CategoryMap objdefs; // Drawable def'n
    Map shadefs; // Shadow   def'n
    Category objdef;
    LineIDMapList lineIDmaps;
    LineIDMap lineIDmap;
    Primitive prime_obj;
    Composite cmplx_obj;
    long Nobjs;

    TreeTrunk treetrunk;
    double prev_dobj_endtime;
    double curr_dobj_endtime;
    long offended_Nobjs;
    Drawable offended_dobj;

    //  Initialize prev_dobj_endtime to avoid complaint by compiler
    prev_dobj_endtime = Double.NEGATIVE_INFINITY;
    offended_Nobjs = Integer.MIN_VALUE;
    offended_dobj = null;

    out_filename = null;
    del_iobjdefs = null;
    parseCmdLineArgs(args);
    if (out_filename == null) out_filename = TraceName.getDefaultSLOG2Name(in_filename);

    objdefs = new CategoryMap();
    shadefs = new HashMap();
    lineIDmaps = new LineIDMapList();
    Nobjs = 0;

    // Initialize the SLOG-2 file for piped-input, output for this program.
    dobj_ins = new PipedInputLog(in_filename);
    if (dobj_ins == null) {
      System.err.println("Null input logfile!");
      System.exit(1);
    }
    if (!dobj_ins.isSLOG2()) {
      System.err.println(in_filename + " is NOT SLOG-2 file!.");
      System.exit(1);
    }
    String err_msg;
    if ((err_msg = dobj_ins.getCompatibleHeader()) != null) {
      System.err.print(err_msg);
      PipedInputLog.stdoutConfirmation();
    }
    dobj_ins.initialize();

    /* */ Date time1 = new Date();
    slog_outs = new logformat.slog2.output.OutputLog(out_filename);

    //  Set Tree properties, !optional!
    //  TreeNode's minimum size, without any drawable/shadow, is 38 bytes.
    //  Drawable;s minimum size is 32 bytes, whether it is state/arrow.
    //  Arrow( with 2 integer infovalues ) is 40 bytes long.
    //  So, for 1 state primitive leaf, the size is 38 + 40 = 78 .
    if (leaf_bytesize > 0) slog_outs.setTreeLeafByteSize(leaf_bytesize);
    else slog_outs.setTreeLeafByteSize(dobj_ins.getTreeLeafByteSize());
    if (num_children_per_node > 0) slog_outs.setNumChildrenPerNode(num_children_per_node);
    else slog_outs.setNumChildrenPerNode(dobj_ins.getNumChildrenPerNode());

    treetrunk = new logformat.slog2.output.TreeTrunk(slog_outs, shadefs);
    /* */ Date time2 = new Date();
    while ((next_kind = dobj_ins.peekNextKind()) != Kind.EOF) {
      if (next_kind == Kind.TOPOLOGY) {
        topo = dobj_ins.getNextTopology();
        // Put in the default Shadow categories in case the original
        // does not have any shadow categories, i.e no shadows.
        objdef = Category.getShadowCategory(topo);
        objdefs.put(new Integer(objdef.getIndex()), objdef);
        shadefs.put(topo, objdef);
      } else if (next_kind == Kind.YCOORDMAP) {
        lineIDmap = new LineIDMap(dobj_ins.getNextYCoordMap());
        lineIDmaps.add(lineIDmap);
      } else if (next_kind == Kind.CATEGORY) {
        objdef = dobj_ins.getNextCategory();
        if (objdef.isShadowCategory()) {
          objdefs.put(new Integer(objdef.getIndex()), objdef);
          shadefs.put(objdef.getTopology(), objdef);
        }
        // Category can be removed here for efficiency reason.
        // Instead let CategoryMap.removeUnusedCategories() do the work.
        // if ( isCategoryToBeRemoved( objdef.getIndex() ) )
        //     continue;
        objdefs.put(new Integer(objdef.getIndex()), objdef);
        objdef.setUsed(false);
      } else if (next_kind == Kind.PRIMITIVE) {
        prime_obj = dobj_ins.getNextPrimitive();
        // Undo InfoBox.resolveCategory() when the Drawable is read.
        prime_obj.releaseCategory();
        if (isCategoryToBeRemoved(prime_obj.getCategoryIndex())) {
          // System.out.println( "Removing ... " + prime_obj );
          continue;
        }
        prime_obj.resolveCategory(objdefs);
        // postponed, wait till on-demand decoding of InfoBuffer
        // prime_obj.decodeInfoBuffer();
        Nobjs++;
        // System.out.println( Nobjs + " : " + prime_obj );
        if (enable_endtime_check) {
          if (!prime_obj.isTimeOrdered()) {
            System.out.println("**** Primitive Time Error ****");
            if (!continue_when_violation) System.exit(1);
          }
          curr_dobj_endtime = prime_obj.getLatestTime();
          if (prev_dobj_endtime > curr_dobj_endtime) {
            System.err.println(
                "**** Violation of "
                    + "Increasing Endtime Order ****\n"
                    + "\t Offended Drawable -> "
                    + offended_Nobjs
                    + " : "
                    + offended_dobj
                    + "\n"
                    + "\t Offending Primitive -> "
                    + Nobjs
                    + " : "
                    + prime_obj
                    + "\n"
                    + "   previous drawable endtime ( "
                    + prev_dobj_endtime
                    + " ) "
                    + " > current drawable endtiime ( "
                    + curr_dobj_endtime
                    + " ) ");
            if (!continue_when_violation) System.exit(1);
          }
          offended_Nobjs = Nobjs;
          offended_dobj = prime_obj;
          prev_dobj_endtime = curr_dobj_endtime;
        }
        treetrunk.addDrawable(prime_obj);
      } else if (next_kind == Kind.COMPOSITE) {
        cmplx_obj = dobj_ins.getNextComposite();
        // Undo InfoBox.resolveCategory() when the Drawable is read.
        cmplx_obj.releaseCategory();
        if (isCategoryToBeRemoved(cmplx_obj.getCategoryIndex())) {
          // System.out.println( "Removing ... " + cmplx_obj );
          continue;
        }
        cmplx_obj.resolveCategory(objdefs);
        // postponed, wait till on-demand decoding of InfoBuffer
        // cmplx_obj.decodeInfoBuffer();
        Nobjs++;
        // System.out.println( Nobjs + " : " + cmplx_obj );
        if (enable_endtime_check) {
          if (!cmplx_obj.isTimeOrdered()) {
            System.out.println("**** Composite Time Error ****");
            if (!continue_when_violation) System.exit(1);
          }
          curr_dobj_endtime = cmplx_obj.getLatestTime();
          if (prev_dobj_endtime > curr_dobj_endtime) {
            System.err.println(
                "***** Violation of "
                    + "Increasing Endtime Order! *****\n"
                    + "\t Offended Drawable -> "
                    + offended_Nobjs
                    + " : "
                    + offended_dobj
                    + "\n"
                    + "\t Offending Composite -> "
                    + Nobjs
                    + " : "
                    + cmplx_obj
                    + "\n"
                    + "   previous drawable endtime ( "
                    + prev_dobj_endtime
                    + " ) "
                    + " > current drawable endtiime ( "
                    + curr_dobj_endtime
                    + " ) ");
            if (!continue_when_violation) System.exit(1);
          }
          offended_Nobjs = Nobjs;
          offended_dobj = cmplx_obj;
          prev_dobj_endtime = curr_dobj_endtime;
        }
        treetrunk.addDrawable(cmplx_obj);
      } else {
        System.err.println(
            "Slog2ToSlog2: Unrecognized return " + "from peekNextKind() = " + next_kind);
      }
    } // Endof while ( dobj_ins.peekNextKind() )
    treetrunk.flushToFile();

    objdefs.removeUnusedCategories();
    slog_outs.writeCategoryMap(objdefs);

    // treetrunk's IdentityLineIDMap could be duplicate of the one
    // in the logfile
    // lineIDmaps.add( treetrunk.getIdentityLineIDMap() );
    slog_outs.writeLineIDMapList(lineIDmaps);

    slog_outs.close();
    dobj_ins.close();

    /* */ Date time3 = new Date();
    System.out.println("\n");
    System.out.println("Number of Drawables = " + Nobjs);

    // System.out.println( "time1 = " + time1 + ", " + time1.getTime() );
    // System.out.println( "time2 = " + time2 + ", " + time2.getTime() );
    // System.out.println( "time3 = " + time3 + ", " + time3.getTime() );
    System.out.println(
        "timeElapsed between 1 & 2 = " + (time2.getTime() - time1.getTime()) + " msec");
    System.out.println(
        "timeElapsed between 2 & 3 = " + (time3.getTime() - time2.getTime()) + " msec");
  }
 public CategoryLabel(final Category objdef) {
   super(objdef.getName(), new CategoryIcon(objdef), SwingConstants.LEFT);
   super.setIconTextGap(2 * Const.CELL_ICON_TEXT_GAP);
 }