package com.planimod.ui.views.qualifs;

import org.eclipse.jface.operation.IRunnableContext;
import org.eclipse.jface.window.IShellProvider;
import org.eclipse.swt.SWT;

import com.patrikdufresne.managers.ManagerException;
import com.patrikdufresne.printing.IPrintFactory;
import com.patrikdufresne.printing.PrintAction;
import com.patrikdufresne.util.Localized;
import com.planimod.core.ApplicationSetting;
import com.planimod.core.PlanimodManagers;
import com.planimod.ui.PlanimodPolicy;
import com.planimod.ui.preference.PlanimodPreferences;
import com.planimod.ui.printing.PlanimodPrintFactory;

/**
 * This action intend to print the qualification.
 * 
 * @author patapouf
 * 
 */
public class QualificationPrintAction extends PrintAction {
	/**
	 * Define the preference key for this action
	 */
	private static final String PREF_KEY = "QualificationPrintAction.printPreference"; //$NON-NLS-1$

	/**
	 * Managers to use.
	 */
	private PlanimodManagers managers;

	/**
	 * Create a new Print Employee Action
	 * 
	 * @param shell
	 *            A Shell provider used to create new windows
	 * @param operation
	 *            type of operation : PRINT or PREVIEW
	 */
	public QualificationPrintAction(PlanimodManagers managers,
			IShellProvider shell, int operation, IRunnableContext context) {
		super(shell, new QualificationPrintFactory(), operation, context);
		if (managers == null) {
			throw new IllegalArgumentException();
		}
		this.managers = managers;
		setPrefKey(PREF_KEY);
		setPreferenceStore(PlanimodPreferences.getPreferenceStore());
		setEnabled(true);
		if (operation == PrintAction.PRINT_ACTION) {
			setText(Localized.get(QualificationPrintAction.class,
					"QualificationPrintAction.print")); //$NON-NLS-1$
		} else {
			setText(Localized.get(QualificationPrintAction.class,
					"QualificationPrintAction.preview")); //$NON-NLS-1$
		}
	}

	/**
	 * Returns the managers used by this action.
	 * 
	 * @return
	 */
	protected PlanimodManagers getManagers() {
		return this.managers;
	}

	/**
	 * This implementation set the employee to print
	 * 
	 * @param factory
	 *            the factory
	 */
	@Override
	protected void initFactory(IPrintFactory factory) {

		QualificationPrintFactory qualifPrintFactory = (QualificationPrintFactory) factory;
		qualifPrintFactory.setOrientation(SWT.HORIZONTAL);
		try {
			// Sets subtitle
			String customerName = getManagers().getApplicationSettingManager()
					.getByName(ApplicationSetting.CUSTOMER_NAME);
			((PlanimodPrintFactory) factory).setSubTitle(customerName);

			// Sets the employees
			qualifPrintFactory.setEmployeePreferences(getManagers()
					.getEmployeePreferenceManager().list());

			// Sets the qualifications
			qualifPrintFactory.setQualifications(getManagers()
					.getQualificationManager().list());
		} catch (ManagerException e) {
			PlanimodPolicy.showException(e);
		}
	}
}
