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

org.grails.scaffolding.registry.DomainRendererRegistry.groovy Maven / Gradle / Ivy

The newest version!
package org.grails.scaffolding.registry

import org.grails.scaffolding.model.property.DomainProperty
import groovy.transform.CompileStatic

import java.util.concurrent.atomic.AtomicInteger

/**
 * A registry of domain property renderers sorted by priority and order of addition
 *
 * @author James Kleeh
 */
@CompileStatic
abstract class DomainRendererRegistry {

    protected SortedSet domainRegistryEntries = new TreeSet();

    protected final AtomicInteger RENDERER_SEQUENCE = new AtomicInteger(0);

    void registerDomainRenderer(T domainRenderer, Integer priority) {
        domainRegistryEntries.add(new Entry(domainRenderer, priority))
    }

    public SortedSet getDomainRegistryEntries() {
        this.domainRegistryEntries
    }

    T get(DomainProperty domainProperty) {
        for (Entry entry : domainRegistryEntries) {
            if (entry.renderer.supports(domainProperty)) {
                return entry.renderer
            }
        }
        null
    }

    private class Entry implements Comparable {
        protected final T renderer
        private final int priority;
        private final int seq;

        Entry(T renderer, int priority) {
            this.renderer = renderer
            this.priority = priority
            seq = RENDERER_SEQUENCE.incrementAndGet()
        }

        public int compareTo(Entry entry) {
            return priority == entry.priority ? entry.seq - seq : entry.priority - priority;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy