All Downloads are FREE. Search and download functionalities are using the official Maven repository.

objectos.way.AppNoteSinkOfFileConfig Maven / Gradle / Ivy

Go to download

Objectos Way allows you to build full-stack web applications using only Java.

The newest version!
/*
 * Copyright (C) 2023-2024 Objectos Software LTDA.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package objectos.way;

import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.SeekableByteChannel;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.time.Clock;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Objects;
import java.util.function.Predicate;

final class AppNoteSinkOfFileConfig implements App.NoteSink.OfFile.Config {

  private final int bufferSize = 4096;

  private Clock clock = Clock.systemDefaultZone();

  private Predicate filter = note -> true;

  private Path file;

  @Override
  public final void clock(Clock clock) {
    this.clock = Objects.requireNonNull(clock, "clock == null");
  }

  @Override
  public final void file(Path value) {
    file = Objects.requireNonNull(value, "value == null");
  }

  @Override
  public final void filter(Predicate filter) {
    this.filter = Objects.requireNonNull(filter, "filter == null");
  }

  final AppNoteSinkOfFile build() throws IOException {
    if (file == null) {
      throw new IllegalArgumentException("No output file specified. Please set an output file with the config.file(String) method.");
    }

    ByteBuffer buffer;
    buffer = ByteBuffer.allocateDirect(bufferSize);

    Path parent;
    parent = file.getParent();

    if (!Files.exists(parent)) {
      Files.createDirectories(parent);
    }

    if (Files.exists(file)) {
      LocalDateTime now;
      now = LocalDateTime.now(clock);

      String suffix;
      suffix = DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(now);

      Path target;
      target = file.resolveSibling(file.getFileName().toString() + "." + suffix);

      Files.copy(file, target);
    }

    SeekableByteChannel channel;
    channel = Files.newByteChannel(
        file,

        StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE
    );

    return new AppNoteSinkOfFile(clock, filter, buffer, channel);
  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy