package com.creamtec.ajaxswing.examples;

import java.awt.Component;
import java.io.File;

import javax.swing.JFileChooser;
import javax.swing.UIManager;

import com.creamtec.ajaxswing.core.ActionData;
import com.creamtec.ajaxswing.core.HttpRequestData;
import com.creamtec.ajaxswing.core.NameUtils;
import com.creamtec.ajaxswing.v4.ComponentGraphics;
import com.creamtec.ajaxswing.v4.render.ComponentRenderer;
import com.creamtec.ajaxswing.v4.render.ComponentUpdater;

public class CustomControlProcessor implements ComponentRenderer, ComponentUpdater {

	public void initialize() {
	}

	public void renderComponent(ComponentGraphics g, Component component) throws Exception {
		JFileChooser chooser = (JFileChooser) component;
		String openButtonText = chooser.getApproveButtonText();
		if (openButtonText == null) {
			openButtonText = UIManager.getString("FileChooser.openButtonText");
		}
		String cancelButtonText = UIManager.getString("FileChooser.cancelButtonText");
		g.append("<div onclick=\"return cancelBubbleEvent(event);\" style=\"height:");
		g.append(chooser.getHeight());
		g.append("px\">");
		g.append("<input type=\"file\" id=\"upload.file\" name=\"upload.file\" size=\"60\"");
		g.append(" style=\"width:390px; margin-left:2px; height:20px\">");
		g.append("<input type=submit id=\"upload.ok\" name=\"upload.cancel\" value=\"");
		g.appendText(openButtonText);
		g.append("\" onclick=\"return onUploadClicked()\" class=submit style=\"padding:2px 5px;\">");
		g.append("<input type=submit name=\"upload.cancel\" style=\"padding:2px 5px;\" value=\"");
		g.appendText(cancelButtonText);
		g.append("\" onclick=\"return v4Submit('/upload/");
		g.append(NameUtils.getComponentName(chooser));
		g.append("/cancel')\" class=submit>");
		g.append("</div>");
	}

	public boolean updateComponent(ActionData actionData, HttpRequestData data) throws Exception {
		Component component = actionData.getComponent();
		if (actionData.getActionString().startsWith("/upload/") && actionData.getActionString().endsWith("/cancel")) {
			JFileChooser chooser = (JFileChooser) component;
			if (chooser != null) {
				chooser.cancelSelection();
			}
		}
		if (actionData.getActionString().startsWith("/upload/")) {
			JFileChooser chooser = (JFileChooser) component;
			if (chooser != null) {
				File clickedFile = new File((String) data.getParams().get("upload.localFile"));
				if (clickedFile.isDirectory()) {
					chooser.setCurrentDirectory(clickedFile);
				} else if (chooser.getFileSelectionMode() != JFileChooser.DIRECTORIES_ONLY) {
					chooser.setSelectedFile(clickedFile);
					chooser.setSelectedFiles(new File[] { clickedFile });
					chooser.approveSelection();
				}
			}
		}
		return true;
	}

}
