/**
* 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 java.util.Date;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxFallbackButton;
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.Form;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.sakaiproject.profile2.logic.ProfileWallLogic;
import org.sakaiproject.profile2.logic.SakaiProxy;
import org.sakaiproject.profile2.model.WallItem;
import org.sakaiproject.profile2.model.WallItemComment;
import org.sakaiproject.profile2.tool.components.FocusOnLoadBehaviour;
/**
* Panel for commenting on a wall item.
*
* @author d.b.robinson@lancaster.ac.uk
*/
public class WallItemPostCommentPanel extends Panel {
private static final long serialVersionUID = 1L;
@SpringBean(name="org.sakaiproject.profile2.logic.ProfileWallLogic")
private ProfileWallLogic wallLogic;
@SpringBean(name="org.sakaiproject.profile2.logic.SakaiProxy")
protected SakaiProxy sakaiProxy;
public WallItemPostCommentPanel(String id, final String userUuid,
final WallItem wallItem, final WallItemPanel wallItemPanel,
final MyWallPanel myWallPanel) {
super(id);
String commentString = "";
IModel<String> commentModel = new Model<String>(commentString);
Form<String> form = new Form<String>("form", commentModel);
form.setOutputMarkupId(true);
add(form);
// form submit feedback
final Label formFeedback = new Label("formFeedback");
formFeedback.setOutputMarkupPlaceholderTag(true);
form.add(formFeedback);
WebMarkupContainer commentContainer = new WebMarkupContainer("commentContainer");
final TextArea<String> commentTextArea = new TextArea<String>("comment", commentModel);
commentContainer.add(commentTextArea);
form.add(commentContainer);
IndicatingAjaxButton submitButton = new IndicatingAjaxButton("submit", new ResourceModel("button.wall.comment"), form) {
private static final long serialVersionUID = 1L;
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
// don't allow empty posts
if (null == form.getModelObject()) {
formFeedback.setVisible(true);
formFeedback.setDefaultModel(new ResourceModel(
"error.wall.comment.empty"));
formFeedback.add(new AttributeModifier("class", true,
new Model<String>("alertMessage")));
target.addComponent(formFeedback);
return;
}
// create and add comment to wall item
WallItemComment wallItemComment = new WallItemComment();
// always post as current user
wallItemComment.setCreatorUuid(sakaiProxy.getCurrentUserId());
wallItemComment.setDate(new Date());
wallItemComment.setText(form.getModelObject().toString());
wallItemComment.setWallItem(wallItem);
wallItem.addComment(wallItemComment);
// update wall item
if (false == wallLogic.addNewCommentToWallItem(wallItemComment)) {
formFeedback.setVisible(true);
formFeedback.setDefaultModel(new ResourceModel(
"error.wall.comment.failed"));
formFeedback.add(new AttributeModifier("class", true,
new Model<String>("alertMessage")));
target.addComponent(formFeedback);
return;
}
// replace wall item panel now comment has been added
WallItemPanel newPanel = new WallItemPanel(wallItemPanel.getId(), userUuid, wallItem, myWallPanel);
newPanel.setOutputMarkupId(true);
wallItemPanel.replaceWith(newPanel);
if (null != target) {
target.addComponent(newPanel);
target.appendJavascript("setMainFrameHeight(window.name);");
}
}
};
submitButton.add(new FocusOnLoadBehaviour());
AttributeModifier accessibilityLabel = new AttributeModifier(
"title", true, new StringResourceModel("accessibility.wall.comment", null, new Object[]{ sakaiProxy.getUserDisplayName(wallItem.getCreatorUuid()) } ));
submitButton.add(accessibilityLabel);
form.add(submitButton);
AjaxFallbackButton cancelButton = new AjaxFallbackButton("cancel", new ResourceModel("button.cancel"), form) {
private static final long serialVersionUID = 1L;
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
commentTextArea.clearInput();
formFeedback.setVisible(false);
target.appendJavascript("$('#" + WallItemPostCommentPanel.this.getMarkupId() + "').slideUp();");
}
};
cancelButton.setDefaultFormProcessing(false);
form.add(cancelButton);
}
}