/**
*
*/
package org.nightlabs.jfire.voucher.admin.ui.voucherlayout.editor;
import java.util.Collection;
import java.util.HashSet;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.Window;
import org.nightlabs.base.ui.action.SelectionAction;
import org.nightlabs.base.ui.progress.ProgressMonitorWrapper;
import org.nightlabs.base.ui.util.RCPUtil;
import org.nightlabs.jdo.NLJDOHelper;
import org.nightlabs.jfire.idgenerator.IDGenerator;
import org.nightlabs.jfire.voucher.admin.ui.resource.Messages;
import org.nightlabs.jfire.voucher.dao.VoucherLayoutDAO;
import org.nightlabs.jfire.voucher.dao.VoucherTypeDAO;
import org.nightlabs.jfire.voucher.scripting.VoucherLayout;
import org.nightlabs.jfire.voucher.scripting.id.VoucherLayoutID;
import org.nightlabs.jfire.voucher.store.VoucherType;
import org.nightlabs.jfire.voucher.ui.quicklist.VoucherTypeQuickListFilter;
class UploadVoucherLayoutAction extends SelectionAction {
private LocalVoucherLayoutComposite voucherLayoutComposite;
private VoucherLayoutPage voucherLayoutPage;
public UploadVoucherLayoutAction(VoucherLayoutPage page, LocalVoucherLayoutComposite comp) {
super();
setId(UploadVoucherLayoutAction.class.getName());
setText(Messages.getString("org.nightlabs.jfire.voucher.admin.ui.voucherlayout.editor.UploadVoucherLayoutAction.text")); //$NON-NLS-1$
this.voucherLayoutComposite = comp;
this.voucherLayoutPage = page;
}
@Override
public boolean calculateEnabled() {
return !getSelection().isEmpty();
// return voucherLayoutComposite.getSelectedVoucherLayout() != null;
}
@Override
public boolean calculateVisible() {
return true;
}
@Override
public void run() {
VoucherLayout selectedVoucherLayout = voucherLayoutComposite.getSelectedLayout();
// voucherLayoutPage.switchToProgress();
IProgressMonitor monitor = voucherLayoutPage.getProgressMonitor();
monitor.beginTask(Messages.getString("org.nightlabs.jfire.voucher.admin.ui.voucherlayout.editor.UploadVoucherLayoutAction.uploadTask.name"), 10); //$NON-NLS-1$
try {
Collection<VoucherLayoutID> voucherLayoutIds = VoucherLayoutDAO.sharedInstance().getVoucherLayoutIdsByFileName(selectedVoucherLayout.getFileName());
if (!voucherLayoutIds.isEmpty()) {
Collection<VoucherType> affectedVoucherTypes = new HashSet<VoucherType>();
for (VoucherLayoutID voucherLayoutId : voucherLayoutIds) {
Collection<VoucherType> voucherTypes = VoucherTypeDAO.sharedInstance().getVoucherTypesByVoucherLayoutId(voucherLayoutId, VoucherTypeQuickListFilter.FETCH_GROUPS_VOUCHER_TYPE,
NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, new ProgressMonitorWrapper(monitor));
monitor.worked(2);
affectedVoucherTypes.addAll(voucherTypes);
}
boolean overwrite = false;
String title = Messages.getString("org.nightlabs.jfire.voucher.admin.ui.voucherlayout.editor.UploadVoucherLayoutAction.overwriteDialog.title"); //$NON-NLS-1$
String message = Messages.getString("org.nightlabs.jfire.voucher.admin.ui.voucherlayout.editor.UploadVoucherLayoutAction.overwriteDialog.message1"); //$NON-NLS-1$
String message2 = Messages.getString("org.nightlabs.jfire.voucher.admin.ui.voucherlayout.editor.UploadVoucherLayoutAction.overwriteDialog.message2"); //$NON-NLS-1$
String message3 = Messages.getString("org.nightlabs.jfire.voucher.admin.ui.voucherlayout.editor.UploadVoucherLayoutAction.overwriteDialog.message3"); //$NON-NLS-1$
if (affectedVoucherTypes.isEmpty()) {
message += Messages.getString("org.nightlabs.jfire.voucher.admin.ui.voucherlayout.editor.UploadVoucherLayoutAction.overwriteDialog.message4"); //$NON-NLS-1$
String text = message + "\n\n" + message2 + "\n\n" + message3; //$NON-NLS-1$ //$NON-NLS-2$
if (MessageDialog.openConfirm(RCPUtil.getActiveShell(), title, text))
overwrite = true;
} else {
message += Messages.getString("org.nightlabs.jfire.voucher.admin.ui.voucherlayout.editor.UploadVoucherLayoutAction.overwriteDialog.message5"); //$NON-NLS-1$
VoucherTypeTableDialog dlg = new VoucherTypeTableDialog(RCPUtil.getActiveShell(), affectedVoucherTypes, title, message, message2 + "\n\n" + message3); //$NON-NLS-1$
if (dlg.open() == Window.OK)
overwrite = true;
}
if (overwrite) {
VoucherLayout newLayout = new VoucherLayout(IDGenerator.getOrganisationID(), IDGenerator.nextID(VoucherLayout.class));
newLayout.copyValuesFrom(selectedVoucherLayout);
for (VoucherLayoutID voucherLayoutId : voucherLayoutIds) {
VoucherLayoutDAO.sharedInstance().replaceVoucherLayout(voucherLayoutId, newLayout);
}
}
} else {
// No voucher layout with the same name exists so just store it
VoucherLayout newLayout = new VoucherLayout(IDGenerator.getOrganisationID(), IDGenerator.nextID(VoucherLayout.class));
newLayout.copyValuesFrom(selectedVoucherLayout);
VoucherLayoutDAO.sharedInstance().storeJDOObject(newLayout, false, null, -1, null);
}
} finally {
monitor.done();
// voucherLayoutPage.switchToContent();
}
}
}