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

org.opentripplanner.transit.model.framework.AbstractEntityBuilder Maven / Gradle / Ivy

The newest version!
package org.opentripplanner.transit.model.framework;

import java.util.Objects;

public abstract class AbstractEntityBuilder<
  E extends AbstractTransitEntity, B extends AbstractEntityBuilder
>
  extends AbstractBuilder
  implements TransitEntityBuilder {

  @SuppressWarnings("rawtypes")
  private static final EntityContext NOOP = new EntityContext() {};

  private FeedScopedId id;

  private final EntityContext context;

  public AbstractEntityBuilder(FeedScopedId id, EntityContext context) {
    super(null);
    this.id = id;
    this.context = Objects.requireNonNull(context);
  }

  public AbstractEntityBuilder(FeedScopedId id) {
    this(id, noopContext());
  }

  public AbstractEntityBuilder(E original, EntityContext context) {
    super(original);
    this.id = original.getId();
    this.context = context;
  }

  public AbstractEntityBuilder(E original) {
    this(original, noopContext());
  }

  public final FeedScopedId getId() {
    return id;
  }

  public final B withId(FeedScopedId id) {
    this.id = id;
    //noinspection unchecked
    return (B) this;
  }

  @SuppressWarnings("unchecked")
  @Override
  public E save() {
    return context.save((B) this);
  }

  @SuppressWarnings("unchecked")
  private static <
    E extends AbstractTransitEntity, B extends AbstractEntityBuilder
  > EntityContext noopContext() {
    return (EntityContext) NOOP;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy