package org.orienteer.core.method.methods;

import org.apache.wicket.Component;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.model.IModel;
import org.orienteer.core.component.command.AbstractModalWindowCommand;
import org.orienteer.core.component.command.Command;
/**
 * 
 *  Modal windows support for OMethod
 *
 */
public abstract class AbstractModalOMethod extends AbstractOMethod{
	private static final long serialVersionUID = 1L;
	
	private AbstractModalWindowCommand<Object> displayComponent;

	@SuppressWarnings("unchecked")
	@Override
	public Command<?> createCommand(String id) {
		if (displayComponent==null){
			IModel<Object> model = (IModel<Object>) getContext().getDisplayObjectModel();

			displayComponent = new AbstractModalWindowCommand<Object>(id, getTitleModel(),model) {
				private static final long serialVersionUID = 1L;
				@Override
				protected void onInitialize() {
					super.onInitialize();
					applyVisualSettings(this);
				}
				@Override
				protected void initializeContent(ModalWindow modal) {
					modal.setTitle(getTitleModel());
					modal.setContent(getModalContent(modal.getContentId(),modal,this));		
				}
				@Override
				public void onAfterModalSubmit() {
					sendActionPerformed();					
				}
			};
			applyBehaviors(displayComponent);
		}
		return displayComponent;
	}

	public abstract Component getModalContent(String componentId,ModalWindow modal,AbstractModalWindowCommand<?> command);
}