All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.permazen.core.FieldSwitch Maven / Gradle / Ivy

Go to download

Permazen core API classes which provide objects, fields, indexes, queries, and schema management on top of a key/value store.

The newest version!

/*
 * 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)); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy