package org.nocket.gen.page.visitor.bind.builder;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.Component;
import org.nocket.gen.page.DMDWebGenPageContext;
import org.nocket.gen.page.element.ButtonElement;
import org.nocket.gen.page.element.CheckboxInputElement;
import org.nocket.gen.page.element.DivElement;
import org.nocket.gen.page.element.FeedbackElement;
import org.nocket.gen.page.element.FileDownloadElement;
import org.nocket.gen.page.element.FileInputElement;
import org.nocket.gen.page.element.FormElement;
import org.nocket.gen.page.element.GroupTabbedPanelElement;
import org.nocket.gen.page.element.ImageElement;
import org.nocket.gen.page.element.LabelElement;
import org.nocket.gen.page.element.LinkElement;
import org.nocket.gen.page.element.ModalElement;
import org.nocket.gen.page.element.PasswordInputElement;
import org.nocket.gen.page.element.PromptElement;
import org.nocket.gen.page.element.RadioInputElement;
import org.nocket.gen.page.element.RepeatingPanelElement;
import org.nocket.gen.page.element.SelectElement;
import org.nocket.gen.page.element.TableElement;
import org.nocket.gen.page.element.TextAreaElement;
import org.nocket.gen.page.element.TextInputElement;
import org.nocket.gen.page.element.UnknownPageElementI;
public class InterceptingBindingBuilder implements BindingBuilderI {
private final List<BindingBuilderI> orderedBuilders;
public InterceptingBindingBuilder(List<BindingInterceptor> interceptors) {
this.orderedBuilders = new ArrayList<BindingBuilderI>(interceptors);
this.orderedBuilders.addAll(DMDWebGenPageContext.getDefaultBindingInterceptors());
this.orderedBuilders.add(new CustomBindingBuilder());
this.orderedBuilders.add(new DefaultBindingBuilder());
}
@Override
public Component createModal(ModalElement e) {
for (BindingBuilderI builder : orderedBuilders) {
Component c = builder.createModal(e);
if (c != null) {
c.setOutputMarkupId(true);
return c;
}
}
return null;
}
@Override
public Component createFeedback(FeedbackElement e) {
for (BindingBuilderI builder : orderedBuilders) {
Component c = builder.createFeedback(e);
if (c != null) {
c.setOutputMarkupId(true);
return c;
}
}
return null;
}
@Override
public Component createForm(FormElement e) {
for (BindingBuilderI builder : orderedBuilders) {
Component c = builder.createForm(e);
if (c != null) {
c.setOutputMarkupId(true);
return c;
}
}
return null;
}
@Override
public Component createLabel(LabelElement e) {
for (BindingBuilderI builder : orderedBuilders) {
Component c = builder.createLabel(e);
if (c != null) {
c.setOutputMarkupId(true);
return c;
}
}
return null;
}
@Override
public Component createPrompt(PromptElement e) {
for (BindingBuilderI builder : orderedBuilders) {
Component c = builder.createPrompt(e);
if (c != null) {
c.setOutputMarkupId(true);
return c;
}
}
return null;
}
@Override
public Component createTextInput(TextInputElement e) {
for (BindingBuilderI builder : orderedBuilders) {
Component c = builder.createTextInput(e);
if (c != null) {
c.setOutputMarkupId(true);
return c;
}
}
return null;
}
@Override
public Component createPasswordInput(PasswordInputElement e) {
for (BindingBuilderI builder : orderedBuilders) {
Component c = builder.createPasswordInput(e);
if (c != null) {
c.setOutputMarkupId(true);
return c;
}
}
return null;
}
@Override
public Component createFileInput(FileInputElement e) {
for (BindingBuilderI builder : orderedBuilders) {
Component c = builder.createFileInput(e);
if (c != null) {
c.setOutputMarkupId(true);
return c;
}
}
return null;
}
@Override
public Component createFileDownload(FileDownloadElement e) {
for (BindingBuilderI builder : orderedBuilders) {
Component c = builder.createFileDownload(e);
if (c != null) {
c.setOutputMarkupId(true);
return c;
}
}
return null;
}
@Override
public Component createTextArea(TextAreaElement e) {
for (BindingBuilderI builder : orderedBuilders) {
Component c = builder.createTextArea(e);
if (c != null) {
c.setOutputMarkupId(true);
return c;
}
}
return null;
}
@Override
public Component createCheckboxInput(CheckboxInputElement e) {
for (BindingBuilderI builder : orderedBuilders) {
Component c = builder.createCheckboxInput(e);
if (c != null) {
c.setOutputMarkupId(true);
return c;
}
}
return null;
}
@Override
public Component createRadioInput(RadioInputElement e) {
for (BindingBuilderI builder : orderedBuilders) {
Component c = builder.createRadioInput(e);
if (c != null) {
c.setOutputMarkupId(true);
return c;
}
}
return null;
}
@Override
public Component createSelect(SelectElement e) {
for (BindingBuilderI builder : orderedBuilders) {
Component c = builder.createSelect(e);
if (c != null) {
c.setOutputMarkupId(true);
return c;
}
}
return null;
}
@Override
public Component createImage(ImageElement e) {
for (BindingBuilderI builder : orderedBuilders) {
Component c = builder.createImage(e);
if (c != null) {
c.setOutputMarkupId(true);
return c;
}
}
return null;
}
@Override
public Component createLink(LinkElement e) {
for (BindingBuilderI builder : orderedBuilders) {
Component c = builder.createLink(e);
if (c != null) {
c.setOutputMarkupId(true);
return c;
}
}
return null;
}
@Override
public Component createTable(TableElement e) {
for (BindingBuilderI builder : orderedBuilders) {
Component c = builder.createTable(e);
if (c != null) {
c.setOutputMarkupId(true);
return c;
}
}
return null;
}
@Override
public Component createButton(ButtonElement e) {
for (BindingBuilderI builder : orderedBuilders) {
Component c = builder.createButton(e);
if (c != null) {
c.setOutputMarkupId(true);
return c;
}
}
return null;
}
@Override
public Component createUnknown(UnknownPageElementI<?> e) {
for (BindingBuilderI builder : orderedBuilders) {
Component c = builder.createUnknown(e);
if (c != null) {
c.setOutputMarkupId(true);
return c;
}
}
return null;
}
@Override
public Component createListView(RepeatingPanelElement e) {
for (BindingBuilderI builder : orderedBuilders) {
Component c = builder.createListView(e);
if (c != null) {
c.setOutputMarkupId(true);
return c;
}
}
return null;
}
@Override
public Component createGroupTabbedPanel(GroupTabbedPanelElement e) {
for (BindingBuilderI builder : orderedBuilders) {
Component c = builder.createGroupTabbedPanel(e);
if (c != null) {
c.setOutputMarkupId(true);
return c;
}
}
return null;
}
@Override
public Component createDiv(DivElement e) {
for (BindingBuilderI builder : orderedBuilders) {
Component c = builder.createDiv(e);
if (c != null) {
c.setOutputMarkupId(true);
return c;
}
}
return null;
}
}