package fr.openwide.core.wicket.more.link.model;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import fr.openwide.core.spring.util.StringUtils;
public class AnchorNameModel extends LoadableDetachableModel<String> {
private static final long serialVersionUID = 1L;
public static IModel<String> id(String unencodedAnchorName) {
return new AnchorNameModel(unencodedAnchorName, AnchorType.ID);
}
public static IModel<String> id(IModel<String> unencodedAnchorNameModel) {
return new AnchorNameModel(unencodedAnchorNameModel, AnchorType.ID);
}
public static IModel<String> href(String unencodedAnchorName) {
return new AnchorNameModel(unencodedAnchorName, AnchorType.HREF);
}
public static IModel<String> href(IModel<String> unencodedAnchorNameModel) {
return new AnchorNameModel(unencodedAnchorNameModel, AnchorType.HREF);
}
public static enum AnchorType {
HREF,
ID;
}
private final IModel<String> unencodedAnchorNameModel;
private final AnchorType anchorType;
public AnchorNameModel(String unencodedAnchorName, AnchorType anchorType) {
this(Model.of(unencodedAnchorName), anchorType);
}
public AnchorNameModel(IModel<String> unencodedAnchorNameModel, AnchorType anchorType) {
super();
this.unencodedAnchorNameModel = unencodedAnchorNameModel;
this.anchorType = anchorType;
}
@Override
protected String load() {
StringBuilder builder = new StringBuilder();
if (AnchorType.HREF.equals(anchorType)) {
builder.append("#");
}
builder.append(StringUtils.urlize(unencodedAnchorNameModel.getObject()));
return builder.toString();
}
@Override
protected void onDetach() {
super.onDetach();
if (unencodedAnchorNameModel != null) {
unencodedAnchorNameModel.detach();
}
}
}