
io.permazen.core.FieldSwitchAdapter Maven / Gradle / Ivy
/*
* Copyright (C) 2015 Archie L. Cobbs. All rights reserved.
*/
package io.permazen.core;
import java.util.Collection;
/**
* Adapter class for {@link FieldSwitch}.
*
* @param switch method return type
*/
public class FieldSwitchAdapter implements FieldSwitch {
/**
* Handle a {@link SetField}.
*
*
* The implementation in {@link FieldSwitchAdapter} delegates to {@link #caseCollectionField caseCollectionField()}.
*/
@Override
public R caseSetField(SetField field) {
return this.caseCollectionField(field);
}
/**
* Handle a {@link ListField}.
*
*
* The implementation in {@link FieldSwitchAdapter} delegates to {@link #caseCollectionField caseCollectionField()}.
*/
@Override
public R caseListField(ListField field) {
return this.caseCollectionField(field);
}
/**
* Handle a {@link MapField}.
*
*
* The implementation in {@link FieldSwitchAdapter} delegates to {@link #caseComplexField caseComplexField()}.
*/
@Override
public R caseMapField(MapField field) {
return this.caseComplexField(field);
}
/**
* Handle a {@link SimpleField}.
*
*
* The implementation in {@link FieldSwitchAdapter} delegates to {@link #caseField caseField()}.
*/
@Override
public R caseSimpleField(SimpleField field) {
return this.caseField(field);
}
/**
* Handle a {@link ReferenceField}.
*
*
* The implementation in {@link FieldSwitchAdapter} delegates to {@link #caseSimpleField caseSimpleField()}.
*/
@Override
public R caseReferenceField(ReferenceField field) {
return this.caseSimpleField(field);
}
/**
* Handle a {@link CounterField}.
*
*
* The implementation in {@link FieldSwitchAdapter} delegates to {@link #caseField caseField()}.
*/
@Override
public R caseCounterField(CounterField field) {
return this.caseField(field);
}
/**
* Handle a {@link EnumField}.
*
*
* The implementation in {@link FieldSwitchAdapter} delegates to {@link #caseSimpleField caseSimpleField()}.
*/
@Override
public R caseEnumField(EnumField field) {
return this.caseSimpleField(field);
}
/**
* Adapter class roll-up method.
*
*
* The implementation in {@link FieldSwitchAdapter} delegates to {@link #caseComplexField caseComplexField()}.
*
* @param field visiting field
* @param visiting field type
* @param collection element type
* @return visitor return value
*/
protected , E> R caseCollectionField(CollectionField field) {
return this.caseComplexField(field);
}
/**
* Adapter class roll-up method.
*
*
* The implementation in {@link FieldSwitchAdapter} delegates to {@link #caseField caseField()}.
*
* @param field visiting field
* @param visiting field type
* @return visitor return value
*/
protected R caseComplexField(ComplexField field) {
return this.caseField(field);
}
/**
* Adapter class roll-up method.
*
*
* The implementation in {@link FieldSwitchAdapter} always throws {@link UnsupportedOperationException}.
*
* @param field visiting field
* @param visiting field type
* @return visitor return value
*/
protected R caseField(Field field) {
throw new UnsupportedOperationException("field type not handled: " + field);
}
}