package hu.sch.web.wicket.components.customlinks;
import hu.sch.domain.user.User;
import hu.sch.domain.user.UserAttributeName;
import hu.sch.services.UserManagerLocal;
import org.apache.wicket.AttributeModifier;
import javax.inject.Inject;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.image.Image;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.resource.PackageResourceReference;
import org.apache.wicket.request.resource.ResourceReference;
/**
*
* @author aldaris
* @author tomi
*/
public class AttributeAjaxFallbackLink extends AjaxFallbackLink {
private UserAttributeName attr;
private boolean isPrivateAttr;
private Image img;
private User user;
@Inject
private UserManagerLocal userManager;
public AttributeAjaxFallbackLink(String linkId, String imgId, final UserAttributeName attr, User user) {
super(linkId);
this.attr = attr;
this.user = user;
isPrivateAttr = !user.isAttributeVisible(attr);
img = new Image(imgId, getImageResourceReference());
img.setOutputMarkupId(true);
img.add(getImageTitleAttribute());
this.add(img);
}
@Override
public void onClick(AjaxRequestTarget target) {
invertAttributeVisibility();
isPrivateAttr = !isPrivateAttr;
img.setImageResourceReference(getImageResourceReference());
img.add(getImageTitleAttributeMod());
if (target != null) {
target.add(img);
}
}
private ResourceReference getImageResourceReference() {
if (isPrivateAttr) {
return new PackageResourceReference(AttributeAjaxFallbackLink.class, "resources/private.gif");
} else {
return new PackageResourceReference(AttributeAjaxFallbackLink.class, "resources/public.gif");
}
}
private AttributeAppender getImageTitleAttribute() {
if (isPrivateAttr) {
return new AttributeAppender("title", Model.of("Mutat"));
} else {
return new AttributeAppender("title", Model.of("Elrejt"));
}
}
private AttributeModifier getImageTitleAttributeMod() {
if (isPrivateAttr) {
return new AttributeModifier("title", Model.of("Mutat"));
} else {
return new AttributeModifier("title", Model.of("Elrejt"));
}
}
public void setUser(User user) {
this.user = user;
}
public void invertAttributeVisibility() {
userManager.invertAttributeVisibility(user, attr);
}
}