//--------------------------------------------------------------------------------// // COPYRIGHT NOTICE // //--------------------------------------------------------------------------------// // Copyright (c) 2012, Instituto de Microelectronica de Sevilla (IMSE-CNM) // // // // All rights reserved. // // // // Redistribution and use in source and binary forms, with or without // // modification, are permitted provided that the following conditions are met: // // // // * Redistributions of source code must retain the above copyright notice, // // this list of conditions and the following disclaimer. // // // // * Redistributions in binary form must reproduce the above copyright // // notice, this list of conditions and the following disclaimer in the // // documentation and/or other materials provided with the distribution. // // // // * Neither the name of the IMSE-CNM nor the names of its contributors may // // be used to endorse or promote products derived from this software // // without specific prior written permission. // // // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE // // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, // // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // //--------------------------------------------------------------------------------// package xfuzzy.xfsp.view; import java.io.File; import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.Point; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.WindowConstants; import xfuzzy.lang.Rulebase; import xfuzzy.util.XCommandForm; import xfuzzy.util.XConstants; import xfuzzy.util.XLabel; import xfuzzy.util.XTextForm; import xfuzzy.xfsp.controller.XfspStore; import xfuzzy.xfsp.view.listener.XfspPruningActionListener; import xfuzzy.xfsp.view.listener.XfspWindowListener; /** * <p> <b>Descripci�n:</b> ventana que permite introducir los par�metros * necesarios para poder llevar a cabo la simplificaci�n de una base de reglas * mediante podado de las reglas que la componen. * <p> <b>E-mail</b>: <ADDRESS>joragupra@us.es</ADDRRESS> * @author Jorge Agudo Praena * @version 1.2 * @see IXfspView * @see XfspPruningActionListener * */ public class XfspPruningView extends JFrame implements IXfspView { /** * C�digo asociado a la clase serializable */ private static final long serialVersionUID = 95505666603078L; //t�tulo de la vista private XLabel title; //panel que contendr� al t�tulo de la vista private JPanel titlePanel; //campo de texto que permite la elecci�n del fichero con el patr�n de entrada //necesario para realizar el podado de la base de reglas private XTextForm patternFile; //panel que contendr� el campo de texto para el fichero con el patr�n de //entrada private JPanel patternFilePanel; //campo de texto que permite elegir el m�todo de podado para la base de reglas private XTextForm prunningMethod; //campo de texto que permite asignar valores al par�metro necesario para el //m�todo de podado de bases de reglas seleccionado private XTextForm parameter; //panel que contendr� el campo de texto para el m�todo de podado y el campo de //texto para los par�metros necesarios private JPanel prunningPanel; //panel que contendra el panel con el campo de texto para el fichero con el //patr�n de entrada y el panel que contiene los campos de texto para el m�todo //de podado y para los par�metros necesarios private JPanel parametersPanel; //botones que permiten al usuario confirmar que los datos introducidos son //correctos o cancelar la introducci�n de par�metros private XCommandForm confirmForm; //panel que contendr� los botones de confirmaci�n private JPanel confirmPanel; //referencia a la localizaci�n de la vista padre a esta (aquella que la //origin�) private Point parentLocation; //m�todos disponibles para el podado de bases de reglas private String[] methods = { "Threshold", "Best", "Worst"}; //par�metros que hay introducir para cada uno de los m�todos disponibles para //el podado de bases de reglas private String[] parameters = { "Threshold", "No rules", "No rules"}; //�ndice que marca el m�todo de podado que se debe utilizar para la //simplificaci�n de la base de reglas private int index = -1; //almacena el fichero con el patr�n de entrada para calcular los grados de //activaci�n de las reglas y poder realizar el podado de la misma private File pattern = null; //objeto que se encarga de escuchar los eventos generados por el usuario al //pulsar los distintos botones de la vista private XfspPruningActionListener actionListener; //base de reglas que se debe simplificar mediante podado de sus reglas private Rulebase rulebase; //almac�n donde almacenar los enventos que la vista quiera dirigir al modelo //para que puedan ser procesador por alg�n controlador private XfspStore store; /** * <p> <b>Descripci�n:</b> crea una ventana que sirve para configurar el * proceso de simplificaci�n de bases de reglas por t�cnicas de podado. * @param rulebase Base de reglas que se quiere simplificar. * @param store Almac�n donde se deben guardar los eventos producidos por la * ventana para que sean procesados por alg�n controlador. * */ public XfspPruningView(Rulebase rulebase, XfspStore store) { //llama al constructor de la clase padre super("Xfuzzy 3.0.0"); //establece la base de reglas a simplificar this.rulebase = rulebase; //establece el almac�n donde guardar los eventos this.store = store; } /** * <p> <b>Descripci�n:</b> construye todos los elementos de la interfaz * gr�fica correspondiente a la simplificaci�n de bases de reglas mediante * t�cnicas de podado. * */ public void build() { //crea el objeto que debe atender los eventos generados por esta ventana actionListener = new XfspPruningActionListener(this, this.store, this.rulebase); //construye el t�tulo de la ventana buildTitle(); //construye los campos de texto precisos para seleccionar el m�todo de //podado que se debe aplicar asi como para introducir los par�metros //necesarios para los mismo buildParameters(); //crea los botones en la parte inferior de la ventana que permiten //confirmar los par�metros introduccidos y continuar con el proceso de //clustering o abortar la operaci�n buildConfirmation(); //obtiene el contendor de la ventana Container content = getContentPane(); //a�ade el panel con el t�tulo de la ventana content.add(titlePanel, BorderLayout.NORTH); //a�ade el panel con los par�metros para el m�todo de podado content.add(parametersPanel); //a�ade el panel con los botones de confirmaci�n o rechazo en la parte //inferior de la ventana content.add(confirmPanel, BorderLayout.SOUTH); //establece la operaci�n por defecto a realizar cuando se cierra la ventana setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); //establece el objeto que debe atender los eventos de ventana addWindowListener(new XfspWindowListener(this)); //establece la fuente para el texto que aparece en la ventana setFont(XConstants.font); //ajusta el tama�o de la ventana pack(); //establece la localizaci�n en que se debe mostrar la ventana setLocation(); } /** * <p> <b>Descripci�n:</b> crea el t�tulo de la ventana as� como el panel que * lo contendr�. * */ private void buildTitle() { //t�tulo de la ventana de introducci�n de par�metros para hacer el podado //de una base de reglas title = new XLabel("Pruning"); //crea el panel situado en la parte superior en la opci�n de tipos... titlePanel = new JPanel(new GridLayout(1, 1)); //...y le a�ade el t�tulo de la ventana titlePanel.add(title); } /** * <p> <b>Descripci�n:</b> crea el los campos de texto para la elecci�n del * m�todo de podado y los par�metros necesarios as� como el panel que los * contiene. * */ private void buildParameters() { //crea el campo de texto para la introducci�n del fichero con patrones de //entrada necesario para el m�todo de podado patternFile = new XTextForm("Pattern File", actionListener); //establece como no editable el campo de texto anterior patternFile.setEditable(false); //establece el comando a ejecutar cuando se hace click sobre el campo de //texto anterior patternFile.setActionCommand("PatternFile"); //crea el campo de texto para la elecci�n del m�todo de podado prunningMethod = new XTextForm("Prunning method", actionListener); //establece como no editable el campo de texto anterior prunningMethod.setEditable(false); //establece el comando a ejecutar cuando se hace click sobre el campo de //texto anterior prunningMethod.setActionCommand("Method"); //crea el campo de texto para la introducci�n del par�metro necesario para //cada uno de los distintos m�todos de podado parameter = new XTextForm(""); //crea un vector de campos de texto... XTextForm[] tvector = new XTextForm[3]; //...y le agrega los tres campos de texto anteriores tvector[0] = patternFile; tvector[1] = prunningMethod; tvector[2] = parameter; //ajusta la anchura de los tres campos de texto de la ventana XTextForm.setWidth(tvector); //crea el panel que contendr� el campo de texto para la selecci�n del //fichero con patrones de entrada... patternFilePanel = new JPanel(new GridLayout(1, 1)); //...y le a�ade dicho campo de texto patternFilePanel.add(patternFile); //crea el panel que contendr� el campo de texto para la selecci�n del //m�todo de podado y sus par�metros... prunningPanel = new JPanel(new GridLayout(1, 2)); //...y le a�ade el campo de texto para la selecci�n del m�todo de podado... prunningPanel.add(prunningMethod); //...y el campo de texto para la introducci�n del par�metro necesario prunningPanel.add(parameter); //crea el panel que contendr� todos los campos de texto de la ventana... parametersPanel = new JPanel(new GridLayout(2, 1)); //...y le a�ade los dos paneles creados anteriormente parametersPanel.add(patternFilePanel); parametersPanel.add(prunningPanel); } /** * <p> <b>Descripci�n:</b> crea los botones que permiten iniciar el * proceso de simplificaci�n por <b>clustering</b> o cancelarlo y el * panel que contendr� dichos botones. * */ private void buildConfirmation() { //vector con todas las cadenas de caracteres utilizadas para la confirmaci�n //o cancelacion del proceso de clustering String[] confirmation = { "Ok", "Cancel"}; //crea un conjunto de botones que permiten cancelar o seguir adelante con la //simplificaci�n de tipos mediante clustering... confirmForm = new XCommandForm(confirmation, confirmation, actionListener); //...establece la anchura para el conjunto anterior... confirmForm.setCommandWidth(120); //...y lo fija confirmForm.block(); //crea un panel que contendr� al conjunto de bontones de confirmaci�n... confirmPanel = new JPanel(); //...establece el layout para el panel... confirmPanel.setLayout(new GridLayout(1, 1)); //...as� como el tama�o predefinido... confirmPanel.setPreferredSize(new Dimension(400, 50)); //...y a�ade el conjunto de botones de confirmaci�n al panel confirmPanel.add(confirmForm); } /** * <p> <b>Descripci�n:</b> establece la posici�n en pantalla de la ventana en * funci�n de la posici�n ocupada por su ventana padre. * */ private void setLocation() { Point loc = parentLocation; loc.x += 40; loc.y += 200; setLocation(loc); } /** * <p> <b>Descripci�n:</b> establece la posici� en pantalla de la ventana * padre de la actual. * @param loc Posici�n ocupada en la pantalla por la ventana padre del objeto * actual. * */ public void setParentLocation(Point loc) { parentLocation = loc; } /** * <p> <b>Descripci�n:</b> obtiene el fichero seleccionado con los valores de * entrada para el proceso de podado de bases de reglas. * @return Fichero seleccionado con los valores de entrada con los que se * activar�n las reglas de la base de reglas a activar. * */ public File getPatternFile() { return pattern; } /** * <p> <b>Descripci�n:</b> establece el fichero con los valores de entrada * para el proceso de podado de bases de reglas. * @param pattern Fichero con los valores de entrada con los que se activar�n * las reglas de la base de reglas a activar. * */ public void setPatternFile(File pattern) { this.pattern = pattern; patternFile.setText(pattern.getName()); } /** * <p> <b>Descripci�n:</b> selecciona el siguiente m�todo de podado de bases * de reglas y lo muestra en el campo de texto apropiado. * */ public void selectNextMethod() { //incrementa el �ndice que apunta al m�todo de podado seleccionado index = (index + 1) % methods.length; //establece el m�todo de podado en el campo de texto apropiado prunningMethod.setText(methods[index]); //establece el nombre del par�metro necesario para el m�todo de podado //seleccionado parameter.setLabel(parameters[index]); } /** * <p> <b>Descripci�n:</b> obtiene el m�todo de podado seleccionado por el * usuario. * @return M�todo de podado seleccionado por el usuario para la * simplificaci�n de la base de reglas. * */ public String getSelectedMethod() { //cadena que contendr� el m�todo elegido para el podado de la base de //reglas String method = null; //si el m�todo a utilizar ha sido ya seleccionado... if (index > -1) { //...lo almacena en la cadena anterior... method = methods[index]; } //...y lo devuelve return method; } /** * <p> <b>Descripci�n:</b> obtiene el valor para el par�metro necesario para * el m�todo de podado seleccionado por el usuario. * @return Valor asignado por el usuario al par�metro necesario para el * m�todo de podado seleccionado. * */ public String getParameter() { return parameter.getText(); } /** * <p> <b>Descripci�n:</b> cierra la ventana correspondiente a la * simplificaci�n de tipos mediante t�cnicas de <i>clustering<\i>. * */ public void close() { setVisible(false); } }