protected void onAttach()

in mapper/src/main/java/jetbrains/jetpad/mapper/ObservableCollectionRoleSynchronizer.java [47:75]


  protected void onAttach() {
    super.onAttach();

    if (!myTarget.isEmpty()) {
      throw new IllegalArgumentException("Target Collection Should Be Empty");
    }

    new MapperUpdater().update(mySource);
    List<Mapper<? extends SourceT, ? extends TargetT>> modifiableMappers = getModifiableMappers();
    for (Mapper<? extends SourceT, ? extends TargetT> m : modifiableMappers) {
      myTarget.add(m.getTarget());
    }

    myCollectionRegistration = mySource.addListener(new CollectionAdapter<SourceT>() {
      @Override
      public void onItemAdded(CollectionItemEvent<? extends SourceT> event) {
        Mapper<? extends SourceT, ? extends TargetT> mapper = createMapper(event.getNewItem());
        getModifiableMappers().add(event.getIndex(), mapper);
        myTarget.add(event.getIndex(), mapper.getTarget());
        processMapper(mapper);
      }

      @Override
      public void onItemRemoved(CollectionItemEvent<? extends SourceT> event) {
        getModifiableMappers().remove(event.getIndex());
        myTarget.remove(event.getIndex());
      }
    });
  }