Package org.projectforge.plugins.crm

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

/////////////////////////////////////////////////////////////////////////////
//
// 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.address.PhoneType;
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 Werner Feder (werner.feder@t-online.de)
*/
public class PhonesPanel extends Panel
{

  private static final long serialVersionUID = -5390479088481704778L;

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

  private List<PhoneValue> phones = null;

  private RepeatingView phonesRepeater;

  private WebMarkupContainer mainContainer, addNewPhoneContainer;

  private LabelValueChoiceRenderer<PhoneType> phoneChoiceRenderer;

  private PhoneValue newPhoneValue;

  private final String DEFAULT_PHONE_VALUE = "Telefon";

  private Component delete;

  private final PropertyModel<String> model;

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

  /**
   * @see org.apache.wicket.Component#onInitialize()
   */
  @Override
  protected void onInitialize()
  {
    super.onInitialize();

    if (phones == null) {
      phones = new ArrayList<PhoneValue>();
    }
    newPhoneValue = new PhoneValue().setNumber(DEFAULT_PHONE_VALUE).setPhoneType(PhoneType.PRIVATE);
    phoneChoiceRenderer = new LabelValueChoiceRenderer<PhoneType>(this, PhoneType.values());
    mainContainer = new WebMarkupContainer("main");
    add(mainContainer.setOutputMarkupId(true));
    phonesRepeater = new RepeatingView("liRepeater");
    mainContainer.add(phonesRepeater);

    rebuildPhones();
    addNewPhoneContainer = new WebMarkupContainer("liAddNewPhone");
    mainContainer.add(addNewPhoneContainer);

    init(addNewPhoneContainer);
    phonesRepeater.setVisible(true);
  }

  @SuppressWarnings("serial")
  void init(final WebMarkupContainer item)
  {
    final DropDownChoice<PhoneType> dropdownChoice = new DropDownChoice<PhoneType>("choice", new PropertyModel<PhoneType>(
        newPhoneValue, "phoneType"), phoneChoiceRenderer.getValues(), phoneChoiceRenderer);
    item.add(dropdownChoice);
    dropdownChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
      @Override
      protected void onUpdate(final AjaxRequestTarget target)
      {
        newPhoneValue.setPhoneType(dropdownChoice.getModelObject());
        model.setObject(contactDao.getPhoneValuesAsXml(phones));
      }
    });

    item.add(new AjaxMaxLengthEditableLabel("editableLabel", new PropertyModel<String>(newPhoneValue, "number")) {
      @Override
      protected void onSubmit(final AjaxRequestTarget target)
      {
        super.onSubmit(target);
        if (StringUtils.isNotBlank(newPhoneValue.getNumber()) == true && newPhoneValue.getNumber().equals(DEFAULT_PHONE_VALUE) == false) {
          phones.add(new PhoneValue().setNumber(newPhoneValue.getNumber()).setPhoneType(newPhoneValue.getPhoneType()));
          model.setObject(contactDao.getPhoneValuesAsXml(phones));
        }
        newPhoneValue.setNumber(DEFAULT_PHONE_VALUE);
        rebuildPhones();
        target.add(mainContainer);
      }
    });

    final WebMarkupContainer deleteDiv = new WebMarkupContainer("deleteDiv");
    deleteDiv.setOutputMarkupId(true);
    deleteDiv.add(delete = new AjaxIconLinkPanel("delete", IconType.REMOVE, new PropertyModel<String>(newPhoneValue, "number")) {
      /**
       * @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<PhoneValue> it = phones.iterator();
        while (it.hasNext() == true) {
          if (it.next() == newPhoneValue) {
            it.remove();
          }
        }
        rebuildPhones();
        model.setObject(contactDao.getPhoneValuesAsXml(phones));
        target.add(mainContainer);
      }
    });
    item.add(deleteDiv);
    delete.setVisible(false);
  }

  @SuppressWarnings("serial")
  private void rebuildPhones()
  {
    phonesRepeater.removeAll();
    for (final PhoneValue phone : phones) {

      final WebMarkupContainer item = new WebMarkupContainer(phonesRepeater.newChildId());
      phonesRepeater.add(item);
      final DropDownChoice<PhoneType> dropdownChoice = new DropDownChoice<PhoneType>("choice", new PropertyModel<PhoneType>(phone,
          "phoneType"), phoneChoiceRenderer.getValues(), phoneChoiceRenderer);
      item.add(dropdownChoice);
      dropdownChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
        @Override
        protected void onUpdate(final AjaxRequestTarget target)
        {
          phone.setPhoneType(dropdownChoice.getModelObject());
          model.setObject(contactDao.getPhoneValuesAsXml(phones));
        }
      });

      item.add(new AjaxMaxLengthEditableLabel("editableLabel", new PropertyModel<String>(phone, "number")){
        @Override
        protected void onSubmit(final AjaxRequestTarget target)
        {
          super.onSubmit(target);
          model.setObject(contactDao.getPhoneValuesAsXml(phones));
          rebuildPhones();
          target.add(mainContainer);
        }
      });

      final WebMarkupContainer deleteDiv = new WebMarkupContainer("deleteDiv");
      deleteDiv.setOutputMarkupId(true);
      deleteDiv.add(new AjaxIconLinkPanel("delete", IconType.REMOVE, new PropertyModel<String>(phone, "number")) {
        /**
         * @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<PhoneValue> it = phones.iterator();
          while (it.hasNext() == true) {
            if (it.next() == phone) {
              it.remove();
            }
          }
          rebuildPhones();
          model.setObject(contactDao.getPhoneValuesAsXml(phones));
          target.add(mainContainer);
        }
      });
      item.add(deleteDiv);
    }
  }
}
TOP

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

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.