Ejemplo n.º 1
0
  @Override
  public void accept(AisPacket packet) {
    if (out == null) {
      // Open new output stream
      out = getNextOutputStram();
    }

    end = System.currentTimeMillis();
    if (start == 0) {
      start = end;
    }

    for (IPacketFilter filter : filters) {
      if (filter.rejectedByFilter(packet)) {
        return;
      }
    }

    Integer baseMMSI = -1;
    String country = "";
    String region = "";

    Vdm vdm = packet.getVdm();
    if (vdm == null) {
      return;
    }

    // Get source tag properties
    IProprietarySourceTag sourceTag = vdm.getSourceTag();
    if (sourceTag != null) {
      baseMMSI = sourceTag.getBaseMmsi();
      if (sourceTag.getCountry() != null) {
        country = sourceTag.getCountry().getTwoLetter();
      }
      if (sourceTag.getRegion() != null) {
        region = sourceTag.getRegion();
      }
    }
    if (region.equals("")) {
      region = "0";
    }

    // Maybe check for start date
    Date timestamp = vdm.getTimestamp();
    if (filter.getStartDate() != null && timestamp != null) {
      if (timestamp.before(filter.getStartDate())) {
        return;
      }
    }

    // Maybe check for end date
    if (filter.getEndDate() != null && timestamp != null) {
      if (timestamp.after(filter.getEndDate())) {
        System.exit(0);
      }
    }

    // Maybe check for base station MMSI
    if (filter.getBaseStations().size() > 0) {
      if (!filter.getBaseStations().contains(baseMMSI)) {
        return;
      }
    }

    // Maybe check for country
    if (filter.getCountries().size() > 0) {
      if (!filter.getCountries().contains(country)) {
        return;
      }
    }

    // Maybe check for region
    if (filter.getRegions().size() > 0) {
      if (!filter.getRegions().contains(region)) {
        return;
      }
    }

    if (stop) {
      return;
    }

    // Count message
    msgCount++;

    // Print tag line packet
    out.print(packet.getStringMessage() + "\r\n");

    // Count bytes
    bytes += packet.getStringMessage().length() + 2;
    currentFileBytes += packet.getStringMessage().length() + 2;

    // Maybe print parsed
    if (dumpParsed) {
      if (timestamp != null) {
        out.println("+ timetamp " + timestampFormat.format(timestamp));
      }
      if (vdm.getTags() != null) {
        for (IProprietaryTag tag : vdm.getTags()) {
          out.println("+ " + tag.toString());
        }
      }
      AisMessage aisMessage = packet.tryGetAisMessage();
      if (aisMessage != null) {
        out.println("+ " + aisMessage.toString());
      } else {
        out.println("+ AIS message could not be parsed");
      }

      // Check for binary message
      if (aisMessage instanceof AisBinaryMessage) {
        AisBinaryMessage binaryMessage = (AisBinaryMessage) aisMessage;
        try {
          AisApplicationMessage appMessage = binaryMessage.getApplicationMessage();
          out.println(appMessage);
        } catch (SixbitException e) {
        }
      }
      out.println("---------------------------");
    }

    // Maybe time for new outfile
    if (splitSize != null && currentFileBytes >= splitSize) {
      out.close();
      out = null;
      currentFileBytes = 0;
    }
  }