/**
* 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.panels;
import org.apache.log4j.Logger;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxFallbackButton;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.sakaiproject.profile2.logic.ProfileImageLogic;
import org.sakaiproject.profile2.logic.ProfilePreferencesLogic;
import org.sakaiproject.profile2.logic.ProfileWallLogic;
import org.sakaiproject.profile2.logic.SakaiProxy;
import org.sakaiproject.profile2.model.GalleryImage;
import org.sakaiproject.profile2.tool.components.FocusOnLoadBehaviour;
import org.sakaiproject.profile2.tool.components.GalleryImageRenderer;
import org.sakaiproject.profile2.tool.pages.MyPictures;
import org.sakaiproject.profile2.tool.pages.MyProfile;
import org.sakaiproject.profile2.util.ProfileConstants;
/**
* Gallery component for viewing a gallery image alongside options, including
* removing the image and setting the image as the new profile image.
*/
public class GalleryImageEdit extends Panel {
private static final long serialVersionUID = 1L;
private static final Logger log = Logger.getLogger(GalleryImageEdit.class);
private final WebMarkupContainer imageOptionsContainer;
private final WebMarkupContainer removeConfirmContainer;
private final WebMarkupContainer setProfileImageConfirmContainer;
@SpringBean(name="org.sakaiproject.profile2.logic.SakaiProxy")
private SakaiProxy sakaiProxy;
@SpringBean(name="org.sakaiproject.profile2.logic.ProfileImageLogic")
private ProfileImageLogic imageLogic;
@SpringBean(name="org.sakaiproject.profile2.logic.ProfilePreferencesLogic")
private ProfilePreferencesLogic preferencesLogic;
@SpringBean(name="org.sakaiproject.profile2.logic.ProfileWallLogic")
private ProfileWallLogic wallLogic;
public GalleryImageEdit(String id,
final String userId, final GalleryImage image,
final int galleryPageIndex) {
super(id);
log.debug("GalleryImageEdit()");
// feedback label for user alert in event remove/set actions fail
final Label formFeedback = new Label("formFeedback");
formFeedback.setOutputMarkupPlaceholderTag(true);
add(formFeedback);
Form imageEditForm = new Form("galleryImageEditForm");
imageEditForm.setOutputMarkupId(true);
add(imageEditForm);
imageOptionsContainer = new WebMarkupContainer("galleryImageOptionsContainer");
imageOptionsContainer.setOutputMarkupId(true);
imageOptionsContainer.setOutputMarkupPlaceholderTag(true);
imageOptionsContainer.add(new Label("removePictureLabel",
new ResourceModel("pictures.removepicture")));
AjaxFallbackButton removePictureButton = createRemovePictureButton(imageEditForm);
imageOptionsContainer.add(removePictureButton);
Label setProfileImageLabel = new Label("setProfileImageLabel",
new ResourceModel("pictures.setprofileimage"));
imageOptionsContainer.add(setProfileImageLabel);
AjaxFallbackButton setProfileImageButton = createSetProfileImageButton(imageEditForm);
if ((true == sakaiProxy.isOfficialImageEnabledGlobally() &&
false == sakaiProxy.isUsingOfficialImageButAlternateSelectionEnabled())
|| preferencesLogic.getPreferencesRecordForUser(userId).isUseOfficialImage()) {
setProfileImageLabel.setVisible(false);
setProfileImageButton.setVisible(false);
}
imageOptionsContainer.add(setProfileImageButton);
imageEditForm.add(imageOptionsContainer);
removeConfirmContainer = new WebMarkupContainer("galleryRemoveImageConfirmContainer");
removeConfirmContainer.setOutputMarkupId(true);
removeConfirmContainer.setOutputMarkupPlaceholderTag(true);
Label removeConfirmLabel = new Label("removePictureConfirmLabel",
new ResourceModel("pictures.removepicture.confirm"));
removeConfirmContainer.add(removeConfirmLabel);
AjaxFallbackButton removeConfirmButton = createRemoveConfirmButton(
userId, image, galleryPageIndex, formFeedback,
imageEditForm);
removeConfirmButton.add(new FocusOnLoadBehaviour());
removeConfirmContainer.add(removeConfirmButton);
AjaxFallbackButton removeCancelButton = createRemoveCancelButton(imageEditForm);
removeConfirmContainer.add(removeCancelButton);
removeConfirmContainer.setVisible(false);
imageEditForm.add(removeConfirmContainer);
setProfileImageConfirmContainer = new WebMarkupContainer("gallerySetProfileImageConfirmContainer");
setProfileImageConfirmContainer.setOutputMarkupId(true);
setProfileImageConfirmContainer.setOutputMarkupPlaceholderTag(true);
Label setProfileImageConfirmLabel = new Label("setProfileImageConfirmLabel",
new ResourceModel("pictures.setprofileimage.confirm"));
setProfileImageConfirmContainer.add(setProfileImageConfirmLabel);
AjaxFallbackButton setProfileImageConfirmButton = createSetProfileImageConfirmButton(
userId, image, galleryPageIndex, formFeedback,
imageEditForm);
setProfileImageConfirmButton.add(new FocusOnLoadBehaviour());
setProfileImageConfirmContainer.add(setProfileImageConfirmButton);
AjaxFallbackButton setProfileImageCancelButton = createSetProfileImageCancelButton(imageEditForm);
setProfileImageConfirmContainer.add(setProfileImageCancelButton);
setProfileImageConfirmContainer.setVisible(false);
imageEditForm.add(setProfileImageConfirmContainer);
add(new GalleryImageRenderer("galleryImageMainRenderer", image
.getMainResource()));
}
private AjaxFallbackButton createRemoveCancelButton(Form imageEditForm) {
AjaxFallbackButton removeCancelButton = new AjaxFallbackButton(
"galleryRemoveImageCancelButton", new ResourceModel(
"button.cancel"), imageEditForm) {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
target.prependJavascript("$('#"
+ removeConfirmContainer.getMarkupId() + "').hide();");
imageOptionsContainer.setVisible(true);
target.addComponent(imageOptionsContainer);
target.appendJavascript("setMainFrameHeight(window.name);");
}
};
return removeCancelButton;
}
private AjaxFallbackButton createRemoveConfirmButton(
final String userId,
final GalleryImage image, final int galleryPageIndex,
final Label formFeedback, Form imageEditForm) {
AjaxFallbackButton removeConfirmButton = new AjaxFallbackButton(
"galleryRemoveImageConfirmButton", new ResourceModel(
"button.gallery.remove.confirm"), imageEditForm) {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
if (imageLogic.removeGalleryImage(
userId, image.getId())) {
setResponsePage(new MyPictures(galleryPageIndex));
} else {
// user alert
formFeedback.setDefaultModel(new ResourceModel(
"error.gallery.remove.failed"));
formFeedback.add(new AttributeModifier("class", true,
new Model("alertMessage")));
target.addComponent(formFeedback);
}
}
};
return removeConfirmButton;
}
private AjaxFallbackButton createRemovePictureButton(Form imageEditForm) {
AjaxFallbackButton removePictureButton = new AjaxFallbackButton(
"galleryImageRemoveButton", new ResourceModel(
"button.gallery.remove"), imageEditForm) {
@Override
protected void onSubmit(AjaxRequestTarget target, Form form) {
imageOptionsContainer.setVisible(false);
target.prependJavascript("$('#"
+ imageOptionsContainer.getMarkupId() + "').hide();");
removeConfirmContainer.setVisible(true);
target.addComponent(removeConfirmContainer);
target.prependJavascript("setMainFrameHeight(window.name);");
}
};
return removePictureButton;
}
private AjaxFallbackButton createSetProfileImageCancelButton(Form imageEditForm) {
AjaxFallbackButton removeCancelButton = new AjaxFallbackButton(
"gallerySetProfileImageCancelButton", new ResourceModel(
"button.cancel"), imageEditForm) {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
target.prependJavascript("$('#"
+ setProfileImageConfirmContainer.getMarkupId() + "').hide();");
imageOptionsContainer.setVisible(true);
target.addComponent(imageOptionsContainer);
target.appendJavascript("setMainFrameHeight(window.name);");
}
};
return removeCancelButton;
}
private AjaxFallbackButton createSetProfileImageButton(Form imageEditForm) {
AjaxFallbackButton setProfileImageButton = new AjaxFallbackButton(
"gallerySetProfileImageButton", new ResourceModel(
"button.gallery.setprofile"), imageEditForm) {
@Override
protected void onSubmit(AjaxRequestTarget target, Form form) {
imageOptionsContainer.setVisible(false);
target.prependJavascript("$('#"
+ imageOptionsContainer.getMarkupId() + "').hide();");
setProfileImageConfirmContainer.setVisible(true);
target.addComponent(setProfileImageConfirmContainer);
target.prependJavascript("setMainFrameHeight(window.name);");
}
};
return setProfileImageButton;
}
private AjaxFallbackButton createSetProfileImageConfirmButton(
final String userId,
final GalleryImage image, final int galleryPageIndex,
final Label formFeedback, Form imageEditForm) {
AjaxFallbackButton setProfileImageButton = new AjaxFallbackButton(
"gallerySetProfileImageConfirmButton", new ResourceModel(
"button.gallery.setprofile.confirm"), imageEditForm) {
private static final long serialVersionUID = 1L;
@Override
protected void onSubmit(AjaxRequestTarget target, Form form) {
if (imageLogic.setUploadedProfileImage(
userId,
sakaiProxy.getResource(
image.getMainResource()).getBytes(), "", "")) {
sakaiProxy.postEvent(
ProfileConstants.EVENT_PROFILE_IMAGE_CHANGE_UPLOAD,
"/profile/" + userId, true);
if (true == sakaiProxy.isWallEnabledGlobally()) {
wallLogic
.addNewEventToWall(
ProfileConstants.EVENT_PROFILE_IMAGE_CHANGE_UPLOAD,
sakaiProxy.getCurrentUserId());
}
if (sakaiProxy.isSuperUserAndProxiedToUser(
userId)) {
setResponsePage(new MyProfile(userId));
} else {
setResponsePage(new MyProfile());
}
} else {
// user alert
formFeedback.setDefaultModel(new ResourceModel(
"error.gallery.setprofile.failed"));
formFeedback.add(new AttributeModifier("class", true,
new Model("alertMessage")));
target.addComponent(formFeedback);
}
}
};
return setProfileImageButton;
}
}