com.izforge.izpack.panels.TextInputField Maven / Gradle / Ivy
/*
* IzPack - Copyright 2001-2008 Julien Ponge, All Rights Reserved.
*
* http://izpack.org/
* http://izpack.codehaus.org/
*
* Copyright 2008 Piotr Skowronek
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.izforge.izpack.panels;
import com.izforge.izpack.util.Debug;
import javax.swing.*;
import java.util.Map;
/*---------------------------------------------------------------------------*/
/**
* This class is a wrapper for JTextField to allow field validation.
* Based on RuleInputField.
*
* @author Piotr Skowronek
*/
/*---------------------------------------------------------------------------*/
public class TextInputField extends JComponent implements ProcessingClient
{
/**
*
*/
private static final long serialVersionUID = 8611515659787697087L;
/**
* Validator parameters.
*/
private Map validatorParams;
/**
* Holds an instance of the Validator
if one was specified and available
*/
private Validator validationService;
/**
* This composite can only contain one component ie JTextField
*/
private JTextField field;
/**
* Do we have parameters for validator?
*/
private boolean hasParams = false;
/*--------------------------------------------------------------------------*/
/**
* Constructs a text input field.
*
* @param set A default value for field.
* @param size The size of the field.
* @param validator A string that specifies a class to perform validation services. The string
* must completely identify the class, so that it can be instantiated. The class must implement
* the RuleValidator
interface. If an attempt to instantiate this class fails, no
* validation will be performed.
* @param validatorParams validator parameters.
*/
/*--------------------------------------------------------------------------*/
public TextInputField(String set, int size, String validator, Map validatorParams)
{
this(set, size, validator);
this.validatorParams = validatorParams;
this.hasParams = true;
}
/*--------------------------------------------------------------------------*/
/**
* Constructs a text input field.
*
* @param set A default value for field.
* @param size The size of the field.
* @param validator A string that specifies a class to perform validation services. The string
* must completely identify the class, so that it can be instantiated. The class must implement
* the RuleValidator
interface. If an attempt to instantiate this class fails, no
* validation will be performed.
*/
/*--------------------------------------------------------------------------*/
public TextInputField(String set, int size, String validator)
{
// ----------------------------------------------------
// attempt to create an instance of the Validator
// ----------------------------------------------------
try
{
if (validator != null)
{
Debug.trace("Making Validator for: " + validator);
validationService = (Validator) Class.forName(validator).newInstance();
}
}
catch (Throwable exception)
{
validationService = null;
Debug.trace(exception);
}
com.izforge.izpack.gui.FlowLayout layout = new com.izforge.izpack.gui.FlowLayout();
layout.setAlignment(com.izforge.izpack.gui.FlowLayout.LEADING);
layout.setVgap(0);
setLayout(layout);
// ----------------------------------------------------
// construct the UI element and add it to the composite
// ----------------------------------------------------
field = new JTextField(set, size);
field.setCaretPosition(0);
add(field);
}
/*--------------------------------------------------------------------------*/
/**
* Returns the validator parameters, if any. The caller should check for the existence of
* validator parameters via the hasParams()
method prior to invoking this method.
*
* @return a java.util.Map containing the validator parameters.
*/
public Map getValidatorParams()
{
return validatorParams;
}
/*---------------------------------------------------------------------------*/
/**
* Returns the field contents, assembled acording to the encryption and separator rules.
*
* @return the field contents
*/
/*--------------------------------------------------------------------------*/
public String getText()
{
return (field.getText());
}
// javadoc inherited
public void setText(String value)
{
field.setText(value);
}
// javadoc inherited
public String getFieldContents(int index)
{
return field.getText();
}
// javadoc inherited
public int getNumFields()
{
// We've got only one field
return 1;
}
/*--------------------------------------------------------------------------*/
/**
* This method validates the field content. Validating is performed through a user supplied
* service class that provides the validation rules.
*
* @return true
if the validation passes or no implementation of a validation
* rule exists. Otherwise false
is returned.
*/
/*--------------------------------------------------------------------------*/
public boolean validateContents()
{
if (validationService != null)
{
Debug.trace("Validating contents");
return (validationService.validate(this));
}
else
{
Debug.trace("Not validating contents");
return (true);
}
}
// javadoc inherited
public boolean hasParams()
{
return hasParams;
}
// ----------------------------------------------------------------------------
}
/*---------------------------------------------------------------------------*/