/**
* Copyright (c) 2008-2012 The Sakai Foundation
*
* Licensed under the Educational Community License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.osedu.org/licenses/ECL-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sakaiproject.profile2.tool.pages;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import org.apache.log4j.Logger;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxButton;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.model.StringResourceModel;
import org.sakaiproject.profile2.exception.ProfilePrivacyNotDefinedException;
import org.sakaiproject.profile2.model.ProfilePrivacy;
import org.sakaiproject.profile2.tool.components.HashMapChoiceRenderer;
import org.sakaiproject.profile2.tool.components.IconWithClueTip;
import org.sakaiproject.profile2.util.ProfileConstants;
public class MyPrivacy extends BasePage {
private static final Logger log = Logger.getLogger(MyPrivacy.class);
private transient ProfilePrivacy profilePrivacy;
public MyPrivacy() {
log.debug("MyPrivacy()");
disableLink(myPrivacyLink);
//get current user
final String userUuid = sakaiProxy.getCurrentUserId();
//get the privacy record for this user from the database, or a default if none exists
profilePrivacy = privacyLogic.getPrivacyRecordForUser(userUuid, false);
//if null, throw exception
if(profilePrivacy == null) {
throw new ProfilePrivacyNotDefinedException("Couldn't retrieve privacy record for " + userUuid);
}
Label heading = new Label("heading", new ResourceModel("heading.privacy"));
add(heading);
Label infoLocked = new Label("infoLocked");
infoLocked.setOutputMarkupPlaceholderTag(true);
infoLocked.setVisible(false);
add(infoLocked);
//feedback for form submit action
final Label formFeedback = new Label("formFeedback");
formFeedback.setOutputMarkupPlaceholderTag(true);
final String formFeedbackId = formFeedback.getMarkupId();
add(formFeedback);
//create model
CompoundPropertyModel<ProfilePrivacy> privacyModel = new CompoundPropertyModel<ProfilePrivacy>(profilePrivacy);
//setup form
Form<ProfilePrivacy> form = new Form<ProfilePrivacy>("form", privacyModel);
form.setOutputMarkupId(true);
//setup LinkedHashMap of privacy options for strict things
final LinkedHashMap<Integer, String> privacySettingsStrict = new LinkedHashMap<Integer, String>();
privacySettingsStrict.put(ProfileConstants.PRIVACY_OPTION_EVERYONE, new StringResourceModel("privacy.option.everyone", this,null).getString());
privacySettingsStrict.put(ProfileConstants.PRIVACY_OPTION_ONLYFRIENDS, new StringResourceModel("privacy.option.onlyfriends", this,null).getString());
privacySettingsStrict.put(ProfileConstants.PRIVACY_OPTION_ONLYME, new StringResourceModel("privacy.option.onlyme", this,null).getString());
//model that wraps our options
IModel dropDownModelStrict = new Model() {
public ArrayList<Integer> getObject() {
return new ArrayList(privacySettingsStrict.keySet());
}
};
//setup LinkedHashMap of privacy options for more relaxed things
final LinkedHashMap<Integer, String> privacySettingsRelaxed = new LinkedHashMap<Integer, String>();
privacySettingsRelaxed.put(ProfileConstants.PRIVACY_OPTION_EVERYONE, new StringResourceModel("privacy.option.everyone", this,null).getString());
privacySettingsRelaxed.put(ProfileConstants.PRIVACY_OPTION_ONLYFRIENDS, new StringResourceModel("privacy.option.onlyfriends", this,null).getString());
//model that wraps our options
IModel dropDownModelRelaxed = new Model() {
public ArrayList<Integer> getObject() {
return new ArrayList(privacySettingsRelaxed.keySet());
}
};
//setup LinkedHashMap of privacy options for super duper strict things!
final LinkedHashMap<Integer, String> privacySettingsSuperStrict = new LinkedHashMap<Integer, String>();
privacySettingsSuperStrict.put(ProfileConstants.PRIVACY_OPTION_ONLYFRIENDS, new StringResourceModel("privacy.option.onlyfriends", this,null).getString());
privacySettingsSuperStrict.put(ProfileConstants.PRIVACY_OPTION_NOBODY, new StringResourceModel("privacy.option.nobody", this,null).getString());
//model that wraps our options
IModel dropDownModelSuperStrict = new Model() {
public ArrayList<Integer> getObject() {
return new ArrayList(privacySettingsSuperStrict.keySet());
}
};
//when using DDC with a compoundPropertyModel we use this constructor: DDC<T>(String,IModel<List<T>>,IChoiceRenderer<T>)
//and the ID of the DDC field maps to the field in the CompoundPropertyModel
//the AjaxFormComponentUpdatingBehavior is to allow the DDC and checkboxes to fadeaway any error/success message
//that might be visible since the form has changed and it needs to be submitted again for it to take effect
//profile image privacy
WebMarkupContainer profileImageContainer = new WebMarkupContainer("profileImageContainer");
profileImageContainer.add(new Label("profileImageLabel", new ResourceModel("privacy.profileimage")));
DropDownChoice profileImageChoice = new DropDownChoice("profileImage", dropDownModelRelaxed, new HashMapChoiceRenderer(privacySettingsRelaxed));
profileImageChoice.setMarkupId("imageprivacyinput");
profileImageChoice.setOutputMarkupId(true);
profileImageContainer.add(profileImageChoice);
//tooltip
profileImageContainer.add(new IconWithClueTip("profileImageToolTip", ProfileConstants.INFO_IMAGE, new ResourceModel("text.privacy.profileimage.tooltip")));
form.add(profileImageContainer);
//updater
profileImageChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
protected void onUpdate(AjaxRequestTarget target) {
target.appendJavascript("$('#" + formFeedbackId + "').fadeOut();");
}
});
//basicInfo privacy
WebMarkupContainer basicInfoContainer = new WebMarkupContainer("basicInfoContainer");
basicInfoContainer.add(new Label("basicInfoLabel", new ResourceModel("privacy.basicinfo")));
DropDownChoice basicInfoChoice = new DropDownChoice("basicInfo", dropDownModelStrict, new HashMapChoiceRenderer(privacySettingsStrict));
basicInfoChoice.setMarkupId("basicinfoprivacyinput");
basicInfoChoice.setOutputMarkupId(true);
basicInfoContainer.add(basicInfoChoice);
//tooltip
basicInfoContainer.add(new IconWithClueTip("basicInfoToolTip", ProfileConstants.INFO_IMAGE, new ResourceModel("text.privacy.basicinfo.tooltip")));
form.add(basicInfoContainer);
//updater
basicInfoChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
protected void onUpdate(AjaxRequestTarget target) {
target.appendJavascript("$('#" + formFeedbackId + "').fadeOut();");
}
});
//contactInfo privacy
WebMarkupContainer contactInfoContainer = new WebMarkupContainer("contactInfoContainer");
contactInfoContainer.add(new Label("contactInfoLabel", new ResourceModel("privacy.contactinfo")));
DropDownChoice contactInfoChoice = new DropDownChoice("contactInfo", dropDownModelStrict, new HashMapChoiceRenderer(privacySettingsStrict));
contactInfoChoice.setMarkupId("contactinfoprivacyinput");
contactInfoChoice.setOutputMarkupId(true);
contactInfoContainer.add(contactInfoChoice);
//tooltip
contactInfoContainer.add(new IconWithClueTip("contactInfoToolTip", ProfileConstants.INFO_IMAGE, new ResourceModel("text.privacy.contactinfo.tooltip")));
form.add(contactInfoContainer);
//updater
contactInfoChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
protected void onUpdate(AjaxRequestTarget target) {
target.appendJavascript("$('#" + formFeedbackId + "').fadeOut();");
}
});
//staffInfo privacy
WebMarkupContainer staffInfoContainer = new WebMarkupContainer("staffInfoContainer");
staffInfoContainer.add(new Label("staffInfoLabel", new ResourceModel("privacy.staffinfo")));
DropDownChoice staffInfoChoice = new DropDownChoice("staffInfo", dropDownModelStrict, new HashMapChoiceRenderer(privacySettingsStrict));
staffInfoChoice.setMarkupId("staffinfoprivacyinput");
staffInfoChoice.setOutputMarkupId(true);
staffInfoContainer.add(staffInfoChoice);
//tooltip
staffInfoContainer.add(new IconWithClueTip("staffInfoToolTip", ProfileConstants.INFO_IMAGE, new ResourceModel("text.privacy.staff.tooltip")));
form.add(staffInfoContainer);
//updater
staffInfoChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
protected void onUpdate(AjaxRequestTarget target) {
target.appendJavascript("$('#" + formFeedbackId + "').fadeOut();");
}
});
//studentInfo privacy
WebMarkupContainer studentInfoContainer = new WebMarkupContainer("studentInfoContainer");
studentInfoContainer.add(new Label("studentInfoLabel", new ResourceModel("privacy.studentinfo")));
DropDownChoice studentInfoChoice = new DropDownChoice("studentInfo", dropDownModelStrict, new HashMapChoiceRenderer(privacySettingsStrict));
studentInfoChoice.setMarkupId("studentinfoprivacyinput");
studentInfoChoice.setOutputMarkupId(true);
studentInfoContainer.add(studentInfoChoice);
//tooltip
studentInfoContainer.add(new IconWithClueTip("studentInfoToolTip", ProfileConstants.INFO_IMAGE, new ResourceModel("text.privacy.student.tooltip")));
form.add(studentInfoContainer);
//updater
studentInfoChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
protected void onUpdate(AjaxRequestTarget target) {
target.appendJavascript("$('#" + formFeedbackId + "').fadeOut();");
}
});
//businesInfo privacy
WebMarkupContainer businessInfoContainer = new WebMarkupContainer("businessInfoContainer");
businessInfoContainer.add(new Label("businessInfoLabel", new ResourceModel("privacy.businessinfo")));
DropDownChoice businessInfoChoice = new DropDownChoice("businessInfo", dropDownModelStrict, new HashMapChoiceRenderer(privacySettingsStrict));
businessInfoChoice.setMarkupId("businessinfoprivacyinput");
businessInfoChoice.setOutputMarkupId(true);
businessInfoContainer.add(businessInfoChoice);
//tooltip
businessInfoContainer.add(new IconWithClueTip("businessInfoToolTip", ProfileConstants.INFO_IMAGE, new ResourceModel("text.privacy.businessinfo.tooltip")));
form.add(businessInfoContainer);
//updater
businessInfoChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
protected void onUpdate(AjaxRequestTarget target) {
target.appendJavascript("$('#" + formFeedbackId + "').fadeOut();");
}
});
businessInfoContainer.setVisible(sakaiProxy.isBusinessProfileEnabled());
//socialNetworkingInfo privacy
WebMarkupContainer socialNetworkingInfoContainer = new WebMarkupContainer("socialNetworkingInfoContainer");
socialNetworkingInfoContainer.add(new Label("socialNetworkingInfoLabel", new ResourceModel("privacy.socialinfo")));
DropDownChoice socialNetworkingInfoChoice = new DropDownChoice("socialNetworkingInfo", dropDownModelStrict, new HashMapChoiceRenderer(privacySettingsStrict));
socialNetworkingInfoChoice.setMarkupId("socialinfoprivacyinput");
socialNetworkingInfoChoice.setOutputMarkupId(true);
socialNetworkingInfoContainer.add(socialNetworkingInfoChoice);
//tooltip
socialNetworkingInfoContainer.add(new IconWithClueTip("socialNetworkingInfoToolTip", ProfileConstants.INFO_IMAGE, new ResourceModel("text.privacy.socialinfo.tooltip")));
form.add(socialNetworkingInfoContainer);
//updater
socialNetworkingInfoChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
protected void onUpdate(AjaxRequestTarget target) {
target.appendJavascript("$('#" + formFeedbackId + "').fadeOut();");
}
});
//personalInfo privacy
WebMarkupContainer personalInfoContainer = new WebMarkupContainer("personalInfoContainer");
personalInfoContainer.add(new Label("personalInfoLabel", new ResourceModel("privacy.personalinfo")));
DropDownChoice personalInfoChoice = new DropDownChoice("personalInfo", dropDownModelStrict, new HashMapChoiceRenderer(privacySettingsStrict));
personalInfoChoice.setMarkupId("personalinfoprivacyinput");
personalInfoChoice.setOutputMarkupId(true);
personalInfoContainer.add(personalInfoChoice);
//tooltip
personalInfoContainer.add(new IconWithClueTip("personalInfoToolTip", ProfileConstants.INFO_IMAGE, new ResourceModel("text.privacy.personalinfo.tooltip")));
form.add(personalInfoContainer);
//updater
personalInfoChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
protected void onUpdate(AjaxRequestTarget target) {
target.appendJavascript("$('#" + formFeedbackId + "').fadeOut();");
}
});
//birthYear privacy
WebMarkupContainer birthYearContainer = new WebMarkupContainer("birthYearContainer");
birthYearContainer.add(new Label("birthYearLabel", new ResourceModel("privacy.birthyear")));
CheckBox birthYearCheckbox = new CheckBox("birthYear", new PropertyModel(privacyModel, "showBirthYear"));
birthYearCheckbox.setMarkupId("birthyearprivacyinput");
birthYearCheckbox.setOutputMarkupId(true);
birthYearContainer.add(birthYearCheckbox);
//tooltip
birthYearContainer.add(new IconWithClueTip("birthYearToolTip", ProfileConstants.INFO_IMAGE, new ResourceModel("text.privacy.birthyear.tooltip")));
form.add(birthYearContainer);
//updater
birthYearCheckbox.add(new AjaxFormComponentUpdatingBehavior("onclick") {
protected void onUpdate(AjaxRequestTarget target) {
target.appendJavascript("$('#" + formFeedbackId + "').fadeOut();");
}
});
//myFriends privacy
WebMarkupContainer myFriendsContainer = new WebMarkupContainer("myFriendsContainer");
myFriendsContainer.add(new Label("myFriendsLabel", new ResourceModel("privacy.myfriends")));
DropDownChoice myFriendsChoice = new DropDownChoice("myFriends", dropDownModelStrict, new HashMapChoiceRenderer(privacySettingsStrict));
myFriendsChoice.setMarkupId("friendsprivacyinput");
myFriendsChoice.setOutputMarkupId(true);
myFriendsContainer.add(myFriendsChoice);
//tooltip
myFriendsContainer.add(new IconWithClueTip("myFriendsToolTip", ProfileConstants.INFO_IMAGE, new ResourceModel("text.privacy.myfriends.tooltip")));
form.add(myFriendsContainer);
//updater
myFriendsChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
protected void onUpdate(AjaxRequestTarget target) {
target.appendJavascript("$('#" + formFeedbackId + "').fadeOut();");
}
});
//myStatus privacy
WebMarkupContainer myStatusContainer = new WebMarkupContainer("myStatusContainer");
myStatusContainer.add(new Label("myStatusLabel", new ResourceModel("privacy.mystatus")));
DropDownChoice myStatusChoice = new DropDownChoice("myStatus", dropDownModelRelaxed, new HashMapChoiceRenderer(privacySettingsRelaxed));
myStatusChoice.setMarkupId("statusprivacyinput");
myStatusChoice.setOutputMarkupId(true);
myStatusContainer.add(myStatusChoice);
//tooltip
myStatusContainer.add(new IconWithClueTip("myStatusToolTip", ProfileConstants.INFO_IMAGE, new ResourceModel("text.privacy.mystatus.tooltip")));
form.add(myStatusContainer);
//updater
myStatusChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
protected void onUpdate(AjaxRequestTarget target) {
target.appendJavascript("$('#" + formFeedbackId + "').fadeOut();");
}
});
// gallery privacy
WebMarkupContainer myPicturesContainer = new WebMarkupContainer("myPicturesContainer");
myPicturesContainer.add(new Label("myPicturesLabel", new ResourceModel("privacy.mypictures")));
DropDownChoice myPicturesChoice = new DropDownChoice("myPictures", dropDownModelRelaxed, new HashMapChoiceRenderer(privacySettingsRelaxed));
myPicturesChoice.setMarkupId("picturesprivacyinput");
myPicturesChoice.setOutputMarkupId(true);
myPicturesContainer.add(myPicturesChoice);
myPicturesContainer.add(new IconWithClueTip("myPicturesToolTip", ProfileConstants.INFO_IMAGE, new ResourceModel("text.privacy.mypictures.tooltip")));
form.add(myPicturesContainer);
myPicturesChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
protected void onUpdate(AjaxRequestTarget target) {
target.appendJavascript("$('#" + formFeedbackId + "').fadeOut();");
}
});
myPicturesContainer.setVisible(sakaiProxy.isProfileGalleryEnabledGlobally());
// messages privacy
WebMarkupContainer messagesContainer = new WebMarkupContainer("messagesContainer");
messagesContainer.add(new Label("messagesLabel", new ResourceModel("privacy.messages")));
DropDownChoice messagesChoice = new DropDownChoice("messages", dropDownModelSuperStrict, new HashMapChoiceRenderer(privacySettingsSuperStrict));
messagesChoice.setMarkupId("messagesprivacyinput");
messagesChoice.setOutputMarkupId(true);
messagesContainer.add(messagesChoice);
messagesContainer.add(new IconWithClueTip("messagesToolTip", ProfileConstants.INFO_IMAGE, new ResourceModel("text.privacy.messages.tooltip")));
form.add(messagesContainer);
messagesChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
protected void onUpdate(AjaxRequestTarget target) {
target.appendJavascript("$('#" + formFeedbackId + "').fadeOut();");
}
});
messagesContainer.setVisible(sakaiProxy.isMessagingEnabledGlobally());
// kudos privacy
WebMarkupContainer myKudosContainer = new WebMarkupContainer("myKudosContainer");
myKudosContainer.add(new Label("myKudosLabel", new ResourceModel("privacy.mykudos")));
DropDownChoice kudosChoice = new DropDownChoice("myKudos", dropDownModelRelaxed, new HashMapChoiceRenderer(privacySettingsRelaxed));
kudosChoice.setMarkupId("kudosprivacyinput");
kudosChoice.setOutputMarkupId(true);
myKudosContainer.add(kudosChoice);
myKudosContainer.add(new IconWithClueTip("myKudosToolTip", ProfileConstants.INFO_IMAGE, new ResourceModel("text.privacy.mykudos.tooltip")));
form.add(myKudosContainer);
kudosChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
protected void onUpdate(AjaxRequestTarget target) {
target.appendJavascript("$('#" + formFeedbackId + "').fadeOut();");
}
});
// wall privacy
WebMarkupContainer myWallContainer = new WebMarkupContainer("myWallContainer");
myWallContainer.add(new Label("myWallLabel", new ResourceModel("privacy.mywall")));
DropDownChoice myWallChoice = new DropDownChoice("myWall", dropDownModelRelaxed, new HashMapChoiceRenderer(privacySettingsRelaxed));
myWallChoice.setMarkupId("wallprivacyinput");
myWallChoice.setOutputMarkupId(true);
myWallContainer.add(myWallChoice);
myWallContainer.add(new IconWithClueTip("myWallToolTip", ProfileConstants.INFO_IMAGE, new ResourceModel("text.privacy.mywall.tooltip")));
form.add(myWallContainer);
myWallChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
protected void onUpdate(AjaxRequestTarget target) {
target.appendJavascript("$('#" + formFeedbackId + "').fadeOut();");
}
});
myWallContainer.setVisible(sakaiProxy.isWallEnabledGlobally());
// online status privacy
WebMarkupContainer onlineStatusContainer = new WebMarkupContainer("onlineStatusContainer");
onlineStatusContainer.add(new Label("onlineStatusLabel", new ResourceModel("privacy.onlinestatus")));
DropDownChoice onlineStatusChoice = new DropDownChoice("onlineStatus", dropDownModelRelaxed, new HashMapChoiceRenderer(privacySettingsRelaxed));
onlineStatusChoice.setMarkupId("onlinestatusprivacyinput");
onlineStatusChoice.setOutputMarkupId(true);
onlineStatusContainer.add(onlineStatusChoice);
onlineStatusContainer.add(new IconWithClueTip("onlineStatusToolTip", ProfileConstants.INFO_IMAGE, new ResourceModel("text.privacy.onlinestatus.tooltip")));
form.add(onlineStatusContainer);
onlineStatusChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
protected void onUpdate(AjaxRequestTarget target) {
target.appendJavascript("$('#" + formFeedbackId + "').fadeOut();");
}
});
//submit button
IndicatingAjaxButton submitButton = new IndicatingAjaxButton("submit", form) {
protected void onSubmit(AjaxRequestTarget target, Form form) {
//save() form, show feedback. perhaps redirect back to main page after a short while?
if(save(form)){
formFeedback.setDefaultModel(new ResourceModel("success.privacy.save.ok"));
formFeedback.add(new AttributeModifier("class", true, new Model<String>("success")));
//post update event
sakaiProxy.postEvent(ProfileConstants.EVENT_PRIVACY_UPDATE, "/profile/"+userUuid, true);
} else {
formFeedback.setDefaultModel(new ResourceModel("error.privacy.save.failed"));
formFeedback.add(new AttributeModifier("class", true, new Model<String>("alertMessage")));
}
//resize iframe
target.appendJavascript("setMainFrameHeight(window.name);");
//PRFL-775 - set focus to feedback message so it is announced to screenreaders
target.appendJavascript("$('#" + formFeedbackId + "').focus();");
target.addComponent(formFeedback);
}
};
submitButton.setModel(new ResourceModel("button.save.settings"));
submitButton.setOutputMarkupId(true);
form.add(submitButton);
//cancel button
/*
AjaxFallbackButton cancelButton = new AjaxFallbackButton("cancel", new ResourceModel("button.cancel"), form) {
protected void onSubmit(AjaxRequestTarget target, Form form) {
setResponsePage(new MyProfile());
}
};
cancelButton.setDefaultFormProcessing(false);
form.add(cancelButton);
*/
if(!sakaiProxy.isPrivacyChangeAllowedGlobally()){
infoLocked.setDefaultModel(new ResourceModel("text.privacy.cannot.modify"));
infoLocked.setVisible(true);
profileImageChoice.setEnabled(false);
basicInfoChoice.setEnabled(false);
contactInfoChoice.setEnabled(false);
studentInfoChoice.setEnabled(false);
businessInfoChoice.setEnabled(false);
personalInfoChoice.setEnabled(false);
birthYearCheckbox.setEnabled(false);
myFriendsChoice.setEnabled(false);
myStatusChoice.setEnabled(false);
myPicturesChoice.setEnabled(false);
messagesChoice.setEnabled(false);
myWallChoice.setEnabled(false);
onlineStatusChoice.setEnabled(false);
submitButton.setEnabled(false);
submitButton.setVisible(false);
form.setEnabled(false);
}
add(form);
}
//called when the form is to be saved
private boolean save(Form<ProfilePrivacy> form) {
//get the backing model - its elems have been updated with the form params
ProfilePrivacy profilePrivacy = (ProfilePrivacy) form.getModelObject();
if(privacyLogic.savePrivacyRecord(profilePrivacy)) {
log.info("Saved ProfilePrivacy for: " + profilePrivacy.getUserUuid());
return true;
} else {
log.info("Couldn't save ProfilePrivacy for: " + profilePrivacy.getUserUuid());
return false;
}
}
}