package fr.openwide.core.wicket.more.markup.html.factory;
import org.apache.wicket.Component;
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.IModel;
import fr.openwide.core.wicket.more.link.descriptor.AbstractDynamicBookmarkableLink;
import fr.openwide.core.wicket.more.link.descriptor.generator.ILinkGenerator;
import fr.openwide.core.wicket.more.link.descriptor.mapper.ILinkDescriptorMapper;
import fr.openwide.core.wicket.more.markup.repeater.FactoryRepeatingView;
public final class ComponentFactories {
private ComponentFactories() {
}
/**
* @deprecated Use a {@link FactoryRepeatingView} instead.
*/
@Deprecated
public static void addAll(RepeatingView repeatingView, Iterable<? extends IComponentFactory<?>> factories) {
for (IComponentFactory<?> componentFactory : factories) {
repeatingView.add(componentFactory.create(repeatingView.newChildId()));
}
}
/**
* @deprecated Use a {@link FactoryRepeatingView} instead.
*/
@Deprecated
public static <P> void addAll(RepeatingView repeatingView, Iterable<? extends IOneParameterComponentFactory<?, ? super P>> factories, P parameter) {
for (IOneParameterComponentFactory<?, ? super P> componentFactory : factories) {
repeatingView.add(componentFactory.create(repeatingView.newChildId(), parameter));
}
}
public static <C extends Component, P> IOneParameterComponentFactory<C, P> ignoreParameter(final IComponentFactory<? extends C> factory) {
return new AbstractParameterizedComponentFactory<C, P>() {
private static final long serialVersionUID = 1L;
@Override
public C create(String wicketId, P parameter) {
return factory.create(wicketId);
}
@Override
public void detach() {
super.detach();
factory.detach();
}
};
}
public static <T> IOneParameterComponentFactory<AbstractDynamicBookmarkableLink, IModel<T>>
fromLinkDescriptorMapper(final ILinkDescriptorMapper<? extends ILinkGenerator, ? super IModel<T>> mapper) {
return new IOneParameterComponentFactory<AbstractDynamicBookmarkableLink, IModel<T>>() {
private static final long serialVersionUID = 1L;
@Override
public AbstractDynamicBookmarkableLink create(String wicketId, IModel<T> parameter) {
return mapper.map(parameter).link(wicketId);
}
@Override
public void detach() {
mapper.detach();
}
};
}
}