/////////////////////////////////////////////////////////////////////////////
//
// 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.marketing;
import java.io.Serializable;
import java.util.Iterator;
import org.apache.log4j.Logger;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.apache.wicket.util.string.StringValue;
import org.projectforge.address.AddressDO;
import org.projectforge.address.AddressDao;
import org.projectforge.core.UserException;
import org.projectforge.web.wicket.AbstractEditPage;
import org.projectforge.web.wicket.EditPage;
/**
* The controler of the edit formular page. Most functionality such as insert, update, delete etc. is done by the super class.
* @author Kai Reinhard (k.reinhard@micromata.de)
*/
@EditPage(defaultReturnPage = AddressCampaignValueListPage.class)
public class AddressCampaignValueEditPage extends
AbstractEditPage<AddressCampaignValueDO, AddressCampaignValueEditForm, AddressCampaignValueDao>
{
public static final String PARAMETER_ADDRESS_ID = "addressId";
public static final String PARAMETER_ADDRESS_CAMPAIGN_ID = "campaignId";
private static final long serialVersionUID = -5058143025817192156L;
private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(AddressCampaignValueEditPage.class);
@SpringBean(name = "addressCampaignValueDao")
private AddressCampaignValueDao addressCampaignValueDao;
@SpringBean(name = "addressCampaignDao")
private AddressCampaignDao addressCampaignDao;
@SpringBean(name = "addressDao")
private AddressDao addressDao;
public AddressCampaignValueEditPage(final PageParameters parameters)
{
super(parameters, "plugins.marketing.addressCampaign");
StringValue sval = parameters.get(AbstractEditPage.PARAMETER_KEY_ID);
final Integer id = sval.isEmpty() == true ? null : sval.toInteger();
if (id == null) {
// Create new entry.
sval = parameters.get(PARAMETER_ADDRESS_ID);
final Integer addressId = sval.isEmpty() ? null : sval.toInteger();
sval = parameters.get(PARAMETER_ADDRESS_CAMPAIGN_ID);
final Integer addressCampaignId = sval.isEmpty() || "null".equals(sval.toString()) ? null : sval.toInteger();
if (addressId == null || addressCampaignId == null) {
throw new UserException("plugins.marketing.addressCampaignValue.error.addressOrCampaignNotGiven");
}
final AddressDO address = addressDao.getById(addressId);
final AddressCampaignDO addressCampaign = addressCampaignDao.getById(addressCampaignId);
if (address == null || addressCampaign == null) {
throw new UserException("plugins.marketing.addressCampaignValue.error.addressOrCampaignNotGiven");
}
AddressCampaignValueDO data = addressCampaignValueDao.get(addressId, addressCampaignId);
if (data == null) {
data = new AddressCampaignValueDO();
data.setAddress(address);
data.setAddressCampaign(addressCampaign);
}
init(data);
} else {
init();
}
}
@Override
public boolean isUpdateAndNextSupported()
{
return true;
}
@Override
protected void updateAndNext()
{
if (getData().getId() == null) {
if (log.isDebugEnabled() == true) {
log.debug("update in " + this.editPageSupport.getClass() + ": " + getData());
}
create();
this.editPageSupport.setUpdateAndNext(true);
setResponsePage();
} else {
super.updateAndNext();
}
}
@Override
public void setResponsePage()
{
if (this.editPageSupport.isUpdateAndNext() == true) {
this.editPageSupport.setUpdateAndNext(false);
final AddressCampaignValueListPage listPage = (AddressCampaignValueListPage) this.returnToPage;
final Iterator<AddressDO> it = listPage.getList().iterator();
while (it.hasNext() == true) {
if (it.next().getId().equals(getHighlightedRowId()) == true && it.hasNext() == true) {
// Found current entry and next entry available.
final AddressDO address = it.next();
final PageParameters parameters = new PageParameters();
parameters.add(AddressCampaignValueEditPage.PARAMETER_ADDRESS_ID, String.valueOf(address.getId()));
parameters.add(AddressCampaignValueEditPage.PARAMETER_ADDRESS_CAMPAIGN_ID, String.valueOf(getData().getAddressCampaignId()));
final AddressCampaignValueEditPage editPage = new AddressCampaignValueEditPage(parameters);
editPage.setReturnToPage(this.returnToPage);
setResponsePage(editPage);
return;
}
}
}
super.setResponsePage();
}
/**
* @return Address id instead of address campaign value id.
* @see org.projectforge.web.wicket.AbstractEditPage#getHighlightedRowId()
*/
@Override
protected Serializable getHighlightedRowId()
{
return getData().getAddressId();
}
@Override
protected AddressCampaignValueDao getBaseDao()
{
return addressCampaignValueDao;
}
@Override
protected AddressCampaignValueEditForm newEditForm(final AbstractEditPage< ? , ? , ? > parentPage, final AddressCampaignValueDO data)
{
return new AddressCampaignValueEditForm(this, data);
}
@Override
protected Logger getLogger()
{
return log;
}
}