//--------------------------------------------------------------------------------//
// 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. //
//--------------------------------------------------------------------------------//
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
// VENTANA DE CONFIGURACION DEL CLUSTERING INCREMENTAL //
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
package xfuzzy.xfdm;
import xfuzzy.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class XfdmIncClustDialog extends JDialog implements ActionListener,
WindowListener {
/**
* C�digo asociado a la clase serializable
*/
private static final long serialVersionUID = 95505666603013L;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
// MIEMBROS PRIVADOS //
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
private XfdmIncClustering algorithm;
private XTextField[] text;
private boolean conf;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
// CONSTRUCTOR //
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
public XfdmIncClustDialog(Xfdm xfdm, XfdmAlgorithm alg){
super(xfdm,"Xfdm",true);
if(alg != null && alg instanceof XfdmIncClustering) {
this.algorithm = (XfdmIncClustering) ((XfdmIncClustering) alg).clone();
} else {
this.algorithm = new XfdmIncClustering();
}
build();
set();
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
// METODOS ESTATICOS //
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//-------------------------------------------------------------//
// Muestra el dialogo //
//-------------------------------------------------------------//
public static XfdmIncClustering showDialog(Xfdm xfdm,XfdmAlgorithm algorithm) {
XfdmIncClustDialog dialog = new XfdmIncClustDialog(xfdm, algorithm);
dialog.setVisible(true);
return dialog.getAlgorithm();
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
// METODOS PUBLICOS //
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//-------------------------------------------------------------//
// Obtiene el algoritmo //
//-------------------------------------------------------------//
public XfdmIncClustering getAlgorithm() {
if(this.conf) return this.algorithm;
return null;
}
//-------------------------------------------------------------//
// Interfaz ActionListener //
//-------------------------------------------------------------//
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if(command.equals("Set")) actionSet();
else if(command.equals("Cancel")) actionCancel();
}
//-------------------------------------------------------------//
// Interfaz WindowListener //
//-------------------------------------------------------------//
public void windowOpened(WindowEvent e) {}
public void windowClosing(WindowEvent e) { actionCancel(); }
public void windowClosed(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
// METODOS PRIVADOS //
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//=============================================================//
// Metodos de descripcion de la interfaz grafica //
//=============================================================//
//-------------------------------------------------------------//
// Generacion de la ventana //
//-------------------------------------------------------------//
private void build() {
String lb[] = {"Set", "Cancel"};
XCommandForm form = new XCommandForm(lb,lb,this);
form.setCommandWidth(150);
form.block();
text = new XTextField[2];
text[0] = new XTextField("");
text[1] = new XTextField("");
JPanel lpanel = new JPanel();
lpanel.setLayout(new GridLayout(2,2));
lpanel.add(new XLabel("Neighborhood radius"));
lpanel.add(text[0]);
lpanel.add(new XLabel("Max. N. of clusters"));
lpanel.add(text[1]);
Container content = getContentPane();
content.setLayout(new BoxLayout(content,BoxLayout.Y_AXIS));
content.add(new XLabel("Parameter selection for Incremental Clustering"));
content.add(Box.createVerticalStrut(5));
content.add(lpanel);
content.add(Box.createVerticalStrut(5));
content.add(form);
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
addWindowListener(this);
pack();
setLocation();
}
//-------------------------------------------------------------//
// Coloca la ventana en la pantalla //
//-------------------------------------------------------------//
private void setLocation() {
Dimension frame = getSize();
Dimension screen = getToolkit().getScreenSize();
setLocation((screen.width - frame.width)/2,(screen.height - frame.height)/2);
}
//-------------------------------------------------------------//
// Actualiza los datos de estilo del sistema //
//-------------------------------------------------------------//
private void set() {
int limit = algorithm.getClustersLimit();
double radius = algorithm.getRadius();
if(radius>0) text[0].setText(""+radius); else text[0].setText("");
if(limit>0) text[1].setText(""+limit); else text[1].setText("");
}
//-------------------------------------------------------------//
// Detecta posibles errores en el nombre de la base de reglas //
//-------------------------------------------------------------//
private boolean get() {
boolean error = false;
int limit = -1;
double radius = -1;
if(text[0].getText().trim().length() > 0) {
try { radius = Double.parseDouble(text[0].getText().trim()); }
catch(Exception ex) { error = true; text[0].setText(""); }
}
if(text[1].getText().trim().length() > 0) {
try { limit = Integer.parseInt(text[1].getText().trim()); }
catch(Exception ex) { error = true; text[1].setText(""); }
}
if(limit <= 0) error = true;
if(radius <= 0.0 || radius >= 1.0) error = true;
if(error) {
XDialog.showMessage(text[0],"Not a valid value");
return false;
}
algorithm.setClustersLimit(limit);
algorithm.setRadius(radius);
return true;
}
//=============================================================//
// Acciones de los botones de la ventana //
//=============================================================//
//-------------------------------------------------------------//
// Accion de almacenar los datos y cerrar la ventana //
//-------------------------------------------------------------//
private void actionSet() {
try { get(); } catch(Exception ex) { return; }
this.conf = true;
setVisible(false);
}
//-------------------------------------------------------------//
// Accion de cerrar la ventana //
//-------------------------------------------------------------//
private void actionCancel() {
this.conf = false;
setVisible(false);
}
}