@Override public void removeValue(SingleFeatureBean feature) { checkFeature(feature); features().remove(feature); }
@Nonnull @Override public Backend createBackend(URI uri, ImmutableConfig baseConfig) { return new DefaultInMemoryBackend(); } }
@Override protected void internalClose() { COUNTER.decrementAndGet(); dataHolder.close(owner); }
@Nonnull @Override public <V> Optional<V> valueOf(SingleFeatureBean feature) { checkFeature(feature); return Optional.ofNullable(cast(features().get(feature))); }
/** * Constructs a new {@code BoundInMemoryBackend} with the given {@code owner}. * * @param owner the identifier of the owner of this back-end */ public BoundInMemoryBackend(Id owner) { super(owner.toHexString()); if (dataHolder.isClosed()) { COUNTER.set(0L); dataHolder.init(); } COUNTER.incrementAndGet(); this.owner = owner; }
@Nonnull @Override public BackendFactory factory() { return new InMemoryBackendFactory(); }
@Nonnull @Override public BackendFactory factory() { BackendFactory factory = mock(InMemoryBackendFactory.class); when(factory.supportsTransient()).thenCallRealMethod(); when(factory.createBackend(any(URI.class), any(ImmutableConfig.class))).thenAnswer((i) -> new BoundInMemoryBackend(id)); return factory; } }
@Override public void removeContainer(Id id) { checkNotNull(id, "id"); containers().remove(id); }
@Nonnull @Override public Optional<ClassBean> metaClassOf(Id id) { checkNotNull(id, "id"); return Optional.ofNullable(instances().get(id)); }
@Override public void removeValue(SingleFeatureBean feature) { super.removeValue(feature); dataHolder.featuresById .computeIfAbsent(feature.owner(), id -> new HashSet<>()) .remove(feature.id()); }
@Nonnull @Override public <V> Optional<V> valueFor(SingleFeatureBean feature, V value) { Optional<V> previousValue = super.valueFor(feature, value); dataHolder.featuresById .computeIfAbsent(feature.owner(), id -> new HashSet<>()) .add(feature.id()); return previousValue; }
@Override protected void checkFeature(FeatureBean feature) { super.checkFeature(feature); checkEqualTo(feature.owner(), owner, "%s is not the owner of this back-end (%s)", feature.owner(), owner); }
/** * Cleans all data, and closes every maps. */ private void closeAll() { if (!isClosed()) { Log.debug("Cleaning BoundInMemoryBackend#DataHolder"); containers.close(); instances.close(); features.close(); featuresById.clear(); } }
/** * Constructs a new {@code DefaultInMemoryBackend}. */ public DefaultInMemoryBackend() { final int id = COUNTER.getAndIncrement(); final String prefix = "default"; containers = ChronicleMapBuilder.of(Id.class, SingleFeatureBean.class) .name(String.format("%s/%d/%s", prefix, id, "containers")) .entries(Sizes.ENTRIES) .averageKeySize(Sizes.ID) .averageValueSize(Sizes.FEATURE) .keyMarshaller(new BeanMarshaller<>(SERIALIZER_FACTORY.forId())) .valueMarshaller(new BeanMarshaller<>(SERIALIZER_FACTORY.forSingleFeature())) .create(); instances = ChronicleMapBuilder.of(Id.class, ClassBean.class) .name(String.format("%s/%d/%s", prefix, id, "instances")) .entries(Sizes.ENTRIES) .averageKeySize(Sizes.ID) .averageValueSize(Sizes.CLASS) .keyMarshaller(new BeanMarshaller<>(SERIALIZER_FACTORY.forId())) .valueMarshaller(new BeanMarshaller<>(SERIALIZER_FACTORY.forClass())) .create(); features = ChronicleMapBuilder.of(SingleFeatureBean.class, Object.class) .name(String.format("%s/%d/%s", prefix, id, "features")) .entries(Sizes.ENTRIES) .averageKeySize(Sizes.FEATURE) .averageValueSize(Sizes.FEATURE_VALUE) .keyMarshaller(new BeanMarshaller<>(SERIALIZER_FACTORY.forSingleFeature())) .create(); }
@BeforeEach void initStoreAdapter() { Store innerStore = StoreFactory.getInstance().createStore(new DefaultInMemoryBackend(), new BaseConfig<>()); store = new AbstractStoreAdapter(innerStore, null) { @Nonnull @Override protected Cache<Id, PersistentEObject> getCache() { return CacheBuilder.empty(); } }; store.updateInstanceOf(object); }
@Nonnull @Override public <V> Optional<V> valueFor(SingleFeatureBean feature, V value) { checkFeature(feature); checkNotNull(value, "value"); return Optional.ofNullable(cast(features().put(feature, value))); }
@Nonnull @Override public Optional<SingleFeatureBean> containerOf(Id id) { checkNotNull(id, "id"); return Optional.ofNullable(containers().get(id)); }
@Nonnull @Override public Iterable<Id> allInstancesOf(Set<ClassBean> metaClasses) { return instances().entrySet().stream() .filter(e -> metaClasses.contains(e.getValue())) .map(Map.Entry::getKey) .collect(Collectors.toSet()); }
@Override public void containerFor(Id id, SingleFeatureBean container) { checkNotNull(id, "id"); checkNotNull(container, "container"); containers().put(id, container); }
@Override public boolean metaClassFor(Id id, ClassBean metaClass) { checkNotNull(id, "id"); checkNotNull(metaClass, "metaClass"); return isNull(instances().putIfAbsent(id, metaClass)); }