
io.permazen.core.FieldSwitch Maven / Gradle / Ivy
Show all versions of permazen-core Show documentation
/*
* Copyright (C) 2015 Archie L. Cobbs. All rights reserved.
*/
package io.permazen.core;
import java.util.Collection;
/**
* Visitor pattern interface for {@link Field}s.
*
* @param switch method return type
* @see Field#visit Field.visit()
*/
public interface FieldSwitch {
/**
* Handle a {@link SetField}.
*
*
* The implementation in {@link FieldSwitch} delegates to {@link #caseCollectionField caseCollectionField()}.
*
* @param field visiting field
* @param set element type
* @return visitor return value
*/
default R caseSetField(SetField field) {
return this.caseCollectionField(field);
}
/**
* Handle a {@link ListField}.
*
*
* The implementation in {@link FieldSwitch} delegates to {@link #caseCollectionField caseCollectionField()}.
*
* @param field visiting field
* @param list element type
* @return visitor return value
*/
default R caseListField(ListField field) {
return this.caseCollectionField(field);
}
/**
* Handle a {@link MapField}.
*
*
* The implementation in {@link FieldSwitch} delegates to {@link #caseComplexField caseComplexField()}.
*
* @param field visiting field
* @param map key type
* @param map value type
* @return visitor return value
*/
default R caseMapField(MapField field) {
return this.caseComplexField(field);
}
/**
* Handle a {@link SimpleField}.
*
*
* The implementation in {@link FieldSwitch} delegates to {@link #caseField caseField()}.
*
* @param field visiting field
* @param field type
* @return visitor return value
*/
default R caseSimpleField(SimpleField field) {
return this.caseField(field);
}
/**
* Handle a {@link ReferenceField}.
*
*
* The implementation in {@link FieldSwitch} delegates to {@link #caseSimpleField caseSimpleField()}.
*
* @param field visiting field
* @return visitor return value
*/
default R caseReferenceField(ReferenceField field) {
return this.caseSimpleField(field);
}
/**
* Handle a {@link CounterField}.
*
*
* The implementation in {@link FieldSwitch} delegates to {@link #caseField caseField()}.
*
* @param field visiting field
* @return visitor return value
*/
default R caseCounterField(CounterField field) {
return this.caseField(field);
}
/**
* Handle an {@link EnumField}.
*
*
* The implementation in {@link FieldSwitch} delegates to {@link #caseSimpleField caseSimpleField()}.
*
* @param field visiting field
* @return visitor return value
*/
default R caseEnumField(EnumField field) {
return this.caseSimpleField(field);
}
/**
* Handle an {@link EnumArrayField}.
*
*
* The implementation in {@link FieldSwitch} delegates to {@link #caseSimpleField caseSimpleField()}.
*
* @param field visiting field
* @return visitor return value
*/
default R caseEnumArrayField(EnumArrayField field) {
return this.caseSimpleField(field);
}
/**
* Visitor pattern roll-up method.
*
*
* The implementation in {@link FieldSwitch} delegates to {@link #caseComplexField caseComplexField()}.
*
* @param field visiting field
* @param field type
* @param collection element type
* @return visitor return value
*/
default , E> R caseCollectionField(CollectionField field) {
return this.caseComplexField(field);
}
/**
* Visitor pattern roll-up method.
*
*
* The implementation in {@link FieldSwitch} delegates to {@link #caseField caseField()}.
*
* @param field visiting field
* @param field type
* @return visitor return value
*/
default R caseComplexField(ComplexField field) {
return this.caseField(field);
}
/**
* Visitor pattern roll-up method.
*
*
* The implementation in {@link FieldSwitch} always throws {@link UnsupportedOperationException}.
*
* @param field visiting field
* @param field type
* @return visitor return value
*/
default R caseField(Field field) {
throw new UnsupportedOperationException(String.format("field type not handled: %s", field));
}
}