Package org.projectforge.plugins.crm

Source Code of org.projectforge.plugins.crm.EmailsPanel

/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de)
//
// ProjectForge is dual-licensed.
//
// This community edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; version 3 of the License.
//
// This community edition 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 General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, see http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////

package org.projectforge.plugins.crm;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.projectforge.web.wicket.components.AjaxMaxLengthEditableLabel;
import org.projectforge.web.wicket.components.LabelValueChoiceRenderer;
import org.projectforge.web.wicket.flowlayout.AjaxIconLinkPanel;
import org.projectforge.web.wicket.flowlayout.IconType;

/**
* @author Kai Reinhard (k.reinhard@micromata.de)
*/
public class EmailsPanel extends Panel
{
  private static final long serialVersionUID = -7950224503861575606L;

  @SpringBean(name = "contactDao")
  private ContactDao contactDao;

  private List<EmailValue> emails = null;

  private RepeatingView emailsRepeater;

  private WebMarkupContainer mainContainer, addNewEMailContainer;

  private LabelValueChoiceRenderer<ContactType> emailChoiceRenderer;

  private EmailValue newEmailValue;

  private final String DEFAULT_EMAIL_VALUE = "E-Mail";

  private Component delete;

  private final PropertyModel<String> model;

  /**
   * @param id
   */
  public EmailsPanel(final String id, final PropertyModel<String> model)
  {
    super(id);
    this.model = model;
    if (StringUtils.isNotBlank(model.getObject()) == true) {
      emails = contactDao.readEmailValues(model.getObject());
    }
  }

  /**
   * @see org.apache.wicket.Component#onInitialize()
   */
  @Override
  protected void onInitialize()
  {
    super.onInitialize();
    if (emails == null) {
      emails = new ArrayList<EmailValue>();
    }
    newEmailValue = new EmailValue().setEmail(DEFAULT_EMAIL_VALUE).setContactType(ContactType.PRIVATE);
    emailChoiceRenderer = new LabelValueChoiceRenderer<ContactType>(this, ContactType.values());
    mainContainer = new WebMarkupContainer("main");
    add(mainContainer.setOutputMarkupId(true));
    emailsRepeater = new RepeatingView("liRepeater");
    mainContainer.add(emailsRepeater);

    rebuildEmails();
    addNewEMailContainer = new WebMarkupContainer("liAddNewEmail");
    mainContainer.add(addNewEMailContainer);

    init(addNewEMailContainer);
    emailsRepeater.setVisible(true);
  }

  @SuppressWarnings("serial")
  void init(final WebMarkupContainer item)
  {
    final DropDownChoice<ContactType> dropdownChoice = new DropDownChoice<ContactType>("choice", new PropertyModel<ContactType>(
        newEmailValue, "contactType"), emailChoiceRenderer.getValues(), emailChoiceRenderer);
    item.add(dropdownChoice);
    dropdownChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
      @Override
      protected void onUpdate(final AjaxRequestTarget target)
      {
        newEmailValue.setContactType(dropdownChoice.getModelObject());
        model.setObject(contactDao.getEmailValuesAsXml(emails));
      }
    });

    item.add(new AjaxMaxLengthEditableLabel("editableLabel", new PropertyModel<String>(newEmailValue, "email")) {
      @Override
      protected void onSubmit(final AjaxRequestTarget target)
      {
        super.onSubmit(target);
        if (StringUtils.isNotBlank(newEmailValue.getEmail()) == true && newEmailValue.getEmail().equals(DEFAULT_EMAIL_VALUE) == false) {
          emails.add(new EmailValue().setEmail(newEmailValue.getEmail()).setContactType(newEmailValue.getContactType()));
          model.setObject(contactDao.getEmailValuesAsXml(emails));
        }
        newEmailValue.setEmail(DEFAULT_EMAIL_VALUE);
        rebuildEmails();
        target.add(mainContainer);
      }
    });

    final WebMarkupContainer deleteDiv = new WebMarkupContainer("deleteDiv");
    deleteDiv.setOutputMarkupId(true);
    deleteDiv.add(delete = new AjaxIconLinkPanel("delete", IconType.REMOVE, new PropertyModel<String>(newEmailValue, "email")) {
      /**
       * @see org.projectforge.web.wicket.flowlayout.AjaxIconLinkPanel#onClick(org.apache.wicket.ajax.AjaxRequestTarget)
       */
      @Override
      protected void onClick(final AjaxRequestTarget target)
      {
        super.onClick(target);
        final Iterator<EmailValue> it = emails.iterator();
        while (it.hasNext() == true) {
          if (it.next() == newEmailValue) {
            it.remove();
          }
        }
        rebuildEmails();
        model.setObject(contactDao.getEmailValuesAsXml(emails));
        target.add(mainContainer);
      }
    });
    item.add(deleteDiv);
    delete.setVisible(false);
  }

  @SuppressWarnings("serial")
  private void rebuildEmails()
  {
    emailsRepeater.removeAll();
    for (final EmailValue email : emails) {

      final WebMarkupContainer item = new WebMarkupContainer(emailsRepeater.newChildId());
      emailsRepeater.add(item);
      final DropDownChoice<ContactType> dropdownChoice = new DropDownChoice<ContactType>("choice", new PropertyModel<ContactType>(email,
          "contactType"), emailChoiceRenderer.getValues(), emailChoiceRenderer);
      item.add(dropdownChoice);
      dropdownChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
        @Override
        protected void onUpdate(final AjaxRequestTarget target)
        {
          email.setContactType(dropdownChoice.getModelObject());
          model.setObject(contactDao.getEmailValuesAsXml(emails));
        }
      });

      item.add(new AjaxMaxLengthEditableLabel("editableLabel", new PropertyModel<String>(email, "email")){
        @Override
        protected void onSubmit(final AjaxRequestTarget target)
        {
          super.onSubmit(target);
          model.setObject(contactDao.getEmailValuesAsXml(emails));
          rebuildEmails();
          target.add(mainContainer);
        }
      });

      final WebMarkupContainer deleteDiv = new WebMarkupContainer("deleteDiv");
      deleteDiv.setOutputMarkupId(true);
      deleteDiv.add(new AjaxIconLinkPanel("delete", IconType.REMOVE, new PropertyModel<String>(email, "email")) {
        /**
         * @see org.projectforge.web.wicket.flowlayout.AjaxIconLinkPanel#onClick(org.apache.wicket.ajax.AjaxRequestTarget)
         */
        @Override
        protected void onClick(final AjaxRequestTarget target)
        {
          super.onClick(target);
          final Iterator<EmailValue> it = emails.iterator();
          while (it.hasNext() == true) {
            if (it.next() == email) {
              it.remove();
            }
          }
          rebuildEmails();
          model.setObject(contactDao.getEmailValuesAsXml(emails));
          target.add(mainContainer);
        }
      });
      item.add(deleteDiv);
    }
  }
}
TOP

Related Classes of org.projectforge.plugins.crm.EmailsPanel

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.