Package org.cast.isi.component

Source Code of org.cast.isi.component.AddPeriodPanel$NewPeriodForm

/*
* Copyright 2011 CAST, Inc.
*
* This file is part of the UDL Curriculum Toolkit:
* see <http://code.google.com/p/udl-curriculum-toolkit>.
*
* The UDL Curriculum Toolkit is free software: you can redistribute and/or
* modify it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* The UDL Curriculum Toolkit is distributed in the hope that it will be
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this software.  If not, see <http://www.gnu.org/licenses/>.
*/
package org.cast.isi.component;

import java.util.SortedSet;
import java.util.TreeSet;

import net.databinder.hib.Databinder;
import net.databinder.models.hib.HibernateObjectModel;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
import org.apache.wicket.behavior.SimpleAttributeModifier;
import org.apache.wicket.feedback.ContainerFeedbackMessageFilter;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.cast.cwm.data.Period;
import org.cast.cwm.data.User;
import org.cast.cwm.data.validator.UniqueDataFieldValidator;
import org.cast.cwm.service.IEventService;
import org.cast.cwm.service.SiteService;
import org.cast.cwm.service.UserService;
import org.cast.isi.ISISession;
import org.cast.isi.panel.PeriodStudentSelectPanel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.inject.Inject;

/**
* Panel used by a teacher to add a new Period for the current Site.  Teacher is
* automatically added to the new Period.
*
* @author lynnmccormack
*
*/
public class AddPeriodPanel extends Panel {

  private static final long serialVersionUID = 1L;
  @SuppressWarnings("unused")
  private static final Logger log = LoggerFactory.getLogger(AddPeriodPanel.class);
  protected NewPeriodForm newPeriodForm;
  private String addPeriodPanelMarkupId;

  @Inject
  private IEventService eventService;

  public AddPeriodPanel(String wicketId) {
    super(wicketId);
   
    this.setOutputMarkupPlaceholderTag(true);
    newPeriodForm = new NewPeriodForm("newPeriodForm");
    add(newPeriodForm);
   
    addPeriodPanelMarkupId = this.getMarkupId();
    this.setOutputMarkupId(true);
  }
 
  /**
   * A form to add a new period.
   */
  protected class NewPeriodForm extends Form<Period> {
    private static final long serialVersionUID = 1L;

    public NewPeriodForm(String wicketId) {
      super(wicketId);
      setDefaultModel(new HibernateObjectModel<Period>(SiteService.get().newPeriod()));
     
      TextField<String> periodName = new TextField<String>("name", new PropertyModel<String>(getModel(), "name"));
      add(periodName);
     
      // Ensure that no two periods in the same site have the same name.
      periodName.add(new UniqueDataFieldValidator<String>(Period.class, "name").limitScope("site", ISISession.get().getCurrentSiteModel()));
      periodName.add(new SimpleAttributeModifier("maxlength", "32"));
      periodName.setRequired(true);
      periodName.setOutputMarkupId(true);

      final FeedbackPanel feedback = new FeedbackPanel("feedback", new ContainerFeedbackMessageFilter(this));
      feedback.setMaxMessages(1);
      feedback.setOutputMarkupId(true);
      add(feedback);
     
      add(new AjaxFallbackLink<Object>("cancel") {
        private static final long serialVersionUID = 1L;

        @Override
        public void onClick(AjaxRequestTarget target) {
          target.appendJavascript("$('#" + addPeriodPanelMarkupId + "').hide();");
        }
      });
     
      add(new AjaxSubmitLink("save") {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
          if (target != null) {
            // update the period dropdown
            target.addChildren(getPage(), PeriodStudentSelectPanel.class);
           
            // replace the form
            NewPeriodForm tempNewPeriodForm =  new NewPeriodForm("newPeriodForm");
            tempNewPeriodForm.setOutputMarkupId(true);
            newPeriodForm.replaceWith(tempNewPeriodForm);
            newPeriodForm = tempNewPeriodForm;
            target.addComponent(newPeriodForm);
           
            // hide the form
            target.appendJavascript("$('#" + addPeriodPanelMarkupId + "').hide();");
         
        }
       
        @Override
        protected void onError(AjaxRequestTarget target, Form<?> form) {
          if (target != null)
            target.addComponent(feedback);
        }
       
      });
     
    }


    @Override
    protected void onSubmit() {
      Period period = this.getModelObject();
      IModel<User> mUser = UserService.get().getById(ISISession.get().getUser().getId());

      // Add the new period
      period.setSite(ISISession.get().getCurrentSiteModel().getObject());
      SortedSet<User> userSet = new TreeSet<User>();
      userSet.add(mUser.getObject());
      period.setUsers(userSet);
      Databinder.getHibernateSession().save(period);
     
      // Update the teacher to connect with the new period
      User user = mUser.getObject();
      SortedSet<Period> periodSet = new TreeSet<Period>();
      periodSet.addAll(user.getPeriods());
      user.setPeriods(periodSet);
      user.getPeriods().add(period);
      Databinder.getHibernateSession().update(user);
     
      eventService.saveEvent("period:addPeriod", String.valueOf(getModelObject().getId()) + " added by userid " + String.valueOf(user.getId()), null);
    }
  }
}
TOP

Related Classes of org.cast.isi.component.AddPeriodPanel$NewPeriodForm

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.