
org.jsimpledb.JMapFieldInfo Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jsimpledb-main Show documentation
Show all versions of jsimpledb-main Show documentation
JSimpleDB classes that map Java model classes onto the core API.
/*
* Copyright (C) 2015 Archie L. Cobbs. All rights reserved.
*/
package org.jsimpledb;
import com.google.common.base.Converter;
import com.google.common.reflect.TypeParameter;
import com.google.common.reflect.TypeToken;
import java.util.List;
import java.util.NavigableMap;
import org.jsimpledb.change.MapFieldAdd;
import org.jsimpledb.change.MapFieldClear;
import org.jsimpledb.change.MapFieldRemove;
import org.jsimpledb.change.MapFieldReplace;
import org.jsimpledb.core.MapField;
import org.jsimpledb.core.ObjId;
import org.jsimpledb.core.Transaction;
class JMapFieldInfo extends JComplexFieldInfo {
JMapFieldInfo(JMapField jfield) {
super(jfield);
}
/**
* Get the key sub-field info.
*/
public JSimpleFieldInfo getKeyFieldInfo() {
return this.getSubFieldInfos().get(0);
}
/**
* Get the value sub-field info.
*/
public JSimpleFieldInfo getValueFieldInfo() {
return this.getSubFieldInfos().get(1);
}
@Override
public String getSubFieldInfoName(JSimpleFieldInfo subFieldInfo) {
if (subFieldInfo.getStorageId() == this.getKeyFieldInfo().getStorageId())
return MapField.KEY_FIELD_NAME;
if (subFieldInfo.getStorageId() == this.getValueFieldInfo().getStorageId())
return MapField.VALUE_FIELD_NAME;
throw new RuntimeException("internal error");
}
@Override
public TypeToken> getTypeToken(Class> context) {
return this.buildTypeToken(
this.getKeyFieldInfo().getTypeToken(context).wrap(),
this.getValueFieldInfo().getTypeToken(context).wrap());
}
// This method exists solely to bind the generic type parameters
@SuppressWarnings("serial")
private TypeToken> buildTypeToken(TypeToken keyType, TypeToken valueType) {
return new TypeToken>() { }
.where(new TypeParameter() { }, keyType)
.where(new TypeParameter() { }, valueType);
}
@Override
void registerChangeListener(Transaction tx, int[] path, Iterable types, AllChangesListener listener) {
tx.addMapFieldChangeListener(this.storageId, path, types, listener);
}
@Override
void addChangeParameterTypes(List> types, Class targetType) {
this.addChangeParameterTypes(types, targetType,
this.getKeyFieldInfo().getTypeToken(targetType),
this.getValueFieldInfo().getTypeToken(targetType));
}
// This method exists solely to bind the generic type parameters
@SuppressWarnings("serial")
private void addChangeParameterTypes(List> types,
Class targetType, TypeToken keyType, TypeToken valueType) {
types.add(new TypeToken>() { }
.where(new TypeParameter() { }, targetType)
.where(new TypeParameter() { }, keyType.wrap())
.where(new TypeParameter() { }, valueType.wrap()));
types.add(new TypeToken>() { }
.where(new TypeParameter() { }, targetType));
types.add(new TypeToken>() { }
.where(new TypeParameter() { }, targetType)
.where(new TypeParameter() { }, keyType.wrap())
.where(new TypeParameter() { }, valueType.wrap()));
types.add(new TypeToken>() { }
.where(new TypeParameter() { }, targetType)
.where(new TypeParameter() { }, keyType.wrap())
.where(new TypeParameter() { }, valueType.wrap()));
}
@Override
public NavigableMapConverter, ?, ?, ?> getConverter(JTransaction jtx) {
Converter, ?> keyConverter = this.getKeyFieldInfo().getConverter(jtx);
Converter, ?> valueConverter = this.getValueFieldInfo().getConverter(jtx);
if (keyConverter == null && valueConverter == null)
return null;
if (keyConverter == null)
keyConverter = Converter.
© 2015 - 2025 Weber Informatics LLC | Privacy Policy