/**
 * Title:
 * @version:    $Id: CreateGenericAction.java,v 1.1 2004/11/15 13:47:50 rob Exp $
 * Copyright:   Copyright (C) 2003 Ian Ibbotson
 * @author:     Ian Ibbotson
 * Company:
 * Description:
 */

package com.k_int.AdminApp.gui;

import java.awt.event.ActionEvent;

import java.lang.reflect.Constructor;
import javax.swing.Action;
import javax.swing.AbstractAction;
import javax.swing.ImageIcon;
import com.k_int.AdminApp.config.ConfigHolder;

import com.k_int.AdminApp.gui.ExplorerView.AdminController;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;



public class CreateGenericAction extends AbstractAction {

  public static Log log = LogFactory.getLog(AbstractRecordAction.class);

  private ConfigHolder config;
  private AdminController controller;
  private boolean is_closeable = true;
  private String class_name;

  public CreateGenericAction(ConfigHolder config, AdminController controller) {
    super();
    this.config = config;
    this.controller = controller;
  }

  public void setIsCloseable(boolean is_closeable) {
    this.is_closeable = is_closeable;
  }

  public void setName(String name) {
    // this.putValue(Action.NAME, AdminMainFrame.getResources().getString(name));
    log.debug("set name "+name);
    this.putValue(Action.NAME, name);
  }

  public void setClassName(String class_name) {
    this.class_name = class_name;
  }

  public void setShortDescription(String short_description) {
   log.debug("Set short description "+short_description);
    // this.putValue(Action.SHORT_DESCRIPTION, AdminMainFrame.getResources().getString(short_description));
    this.putValue(Action.SHORT_DESCRIPTION, short_description);
  }

  public void setSmallIcon(String resource_id) {
    this.putValue(Action.SMALL_ICON, new ImageIcon(resource_id));
  }

  public void setHelp(String help) {
    log.debug("Set help "+help);
    // this.putValue(Action.LONG_DESCRIPTION, AdminMainFrame.getResources().getString(help));
    this.putValue(Action.LONG_DESCRIPTION, help);
  }

  public void actionPerformed(ActionEvent evt) {
    try {
      log.debug("CreateGenericActionDefinition performed");
      AdminControllerComponent generic_component = null;
      // Use Class.forName(class_name) and then new instance...
      Class new_component_class = Class.forName(class_name);
      Class[] parameter_types = new Class[] {ConfigHolder.class, 
                                             String.class, 
                                             ControllerOwner.class,
                                             AdminController.class,
                                             Boolean.TYPE};
      Constructor c = new_component_class.getDeclaredConstructor(parameter_types);

      Object[] args = new Object[] {config,
                                    this.getValue(AbstractAction.NAME).toString(),
                                    null,
                                    controller,
                                    new Boolean(is_closeable)};

      generic_component = (AdminControllerComponent) c.newInstance(args);

      controller.addComponent(generic_component);
    }
    catch ( Exception e ) {
      e.printStackTrace();
    }
  }

}
