package org.nocket.gen.domain.visitor.registry;
import org.nocket.gen.domain.DMDWebGenContext;
import org.nocket.gen.domain.element.ButtonElement;
import org.nocket.gen.domain.element.CheckboxPropertyElement;
import org.nocket.gen.domain.element.ChoicerPropertyElement;
import org.nocket.gen.domain.element.HeadlineElement;
import org.nocket.gen.domain.element.HiddenPropertyElement;
import org.nocket.gen.domain.element.MultivalueButtonElement;
import org.nocket.gen.domain.element.MultivalueColumnElement;
import org.nocket.gen.domain.element.MultivaluePropertyElement;
import org.nocket.gen.domain.element.ResourceElement;
import org.nocket.gen.domain.element.SimplePropertyElement;
import org.nocket.gen.domain.visitor.AbstractDomainElementVisitor;
import gengui.domain.AbstractDomainReference;
public class DomainRegistryVisitor<E extends AbstractDomainReference> extends AbstractDomainElementVisitor<E> {
private DomainRegistry<E> domainRegistry = new DomainRegistry<E>();
public DomainRegistryVisitor(DMDWebGenContext<E> context) {
super(context);
}
@Override
public void visitSimpleProperty(SimplePropertyElement<E> e) {
domainRegistry.addElement(e);
}
@Override
public void visitChoicerProperty(ChoicerPropertyElement<E> e) {
domainRegistry.addElement(e);
}
@Override
public void visitCheckboxProperty(CheckboxPropertyElement<E> e) {
domainRegistry.addElement(e);
}
@Override
public void visitButton(ButtonElement<E> e) {
domainRegistry.addElement(e);
}
@Override
public void visitResource(ResourceElement<E> e) {
domainRegistry.addElement(e);
}
@Override
public void visitFieldsetOpen(HeadlineElement<E> e) {
// ignore
}
@Override
public void visitMultivalueProperty(MultivaluePropertyElement<E> e) {
domainRegistry.addElement(e);
for (MultivalueButtonElement<E> b : e.getButtonElements()) {
domainRegistry.addElement(b);
}
// Columns for read-only file attributes result in download links and must be registerd like button elements
for (MultivalueColumnElement<E> d : e.getDownloadColumnElements()) {
domainRegistry.addElement(d);
}
}
@Override
public void visitFieldsetClose() {
// ignore
}
@Override
public void visitHiddenProperty(HiddenPropertyElement<E> e) {
// ignore
}
@Override
public void finish() {
// ignore
}
public DomainRegistry<E> getDomainRegistry() {
return domainRegistry;
}
}