com.izforge.izpack.panels.PasswordGroup Maven / Gradle / Ivy
/*
* IzPack - Copyright 2001-2008 Julien Ponge, All Rights Reserved.
*
* http://izpack.org/
* http://izpack.codehaus.org/
*
* Copyright 2003 Elmar Grom
*
* 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.installer.InstallData;
import com.izforge.izpack.util.Debug;
import javax.swing.*;
import java.util.List;
import java.util.Map;
import java.util.Vector;
/*---------------------------------------------------------------------------*/
/**
* This class can be used to manage multiple related password fields. This is used in the
* UserInputPanel
to manage communication with the validator and processor for
* password fields.
*
* @author Elmar Grom
* @version 0.0.1 / 2/22/03
* @see com.izforge.izpack.panels.UserInputPanel
*/
/*---------------------------------------------------------------------------*/
public class PasswordGroup implements ProcessingClient
{
// ------------------------------------------------------------------------
// Variable Declarations
// ------------------------------------------------------------------------
private Vector fields = new Vector();
private List validatorContainers = null;
// private Validator validator = null;
// private boolean hasParams = false;
// private Map validatorParams = null;
private Processor processor = null;
private String modifiedPassword = null;
private int currentValidator = 0;
private InstallData idata;
/*--------------------------------------------------------------------------*/
/**
* Creates a password group to manage one or more password fields.
*
* @param idata the installation data
* @param validatorContainers the validator containers
* @param processor the processor
*/
/*--------------------------------------------------------------------------*/
public PasswordGroup(InstallData idata, List validatorContainers, String processor)
{
// ----------------------------------------------------
// attempt to create an instance of the Validator
// ----------------------------------------------------
try
{
this.idata = idata;
this.validatorContainers = validatorContainers;
}
catch (Throwable exception)
{
Debug.trace("Failed in PasswordGroup constructor: " + exception);
this.validatorContainers = null;
}
// ----------------------------------------------------
// attempt to create an instance of the Processor
// ----------------------------------------------------
try
{
this.processor = (Processor) Class.forName(processor).newInstance();
}
catch (Throwable exception)
{
Debug.trace("Failed in PasswordGroup constructor making processor: " + exception);
this.processor = null;
}
}
public InstallData getIdata()
{
return idata;
}
/*--------------------------------------------------------------------------*/
/**
* Returns the number of sub-fields.
*
* @return the number of sub-fields
*/
/*--------------------------------------------------------------------------*/
public int getNumFields()
{
return (fields.size());
}
/*--------------------------------------------------------------------------*/
/**
* Returns the contents of the field indicated by index
.
*
* @param index the index of the sub-field from which the contents is requested.
* @return the contents of the indicated sub-field.
* @throws IndexOutOfBoundsException if the index is out of bounds.
*/
/*--------------------------------------------------------------------------*/
public String getFieldContents(int index) throws IndexOutOfBoundsException
{
if ((index < 0) || (index >= fields.size()))
{
throw (new IndexOutOfBoundsException());
}
String contents = new String((fields.elementAt(index)).getPassword());
return (contents);
}
/*--------------------------------------------------------------------------*/
/**
* Adds a JPasswordField
to the group of fields being managed by this object.
*
* @param field JPasswordField
to add
*/
/*--------------------------------------------------------------------------*/
public void addField(JPasswordField field)
{
if (field != null)
{
fields.add(field);
}
}
/*--------------------------------------------------------------------------*/
/**
* This method validates the group 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(int i)
{
boolean returnValue = true;
try
{
currentValidator = i;
ValidatorContainer container = getValidatorContainer(i);
Validator validator = container.getValidator();
if (validator != null)
{
returnValue = validator.validate(this);
}
}
catch (Exception e)
{
Debug.trace("validateContents(" + i + ") failed: " + e);
// just return true
}
return returnValue;
}
public String getValidatorMessage(int i)
{
String returnValue = null;
try
{
ValidatorContainer container = getValidatorContainer(i);
if (container != null)
{
returnValue = container.getMessage();
}
}
catch (Exception e)
{
Debug.trace("getValidatorMessage(" + i + ") failed: " + e);
// just return true
}
return returnValue;
}
public int validatorSize()
{
int size = 0;
if (validatorContainers != null)
{
size = validatorContainers.size();
}
return size;
}
public ValidatorContainer getValidatorContainer()
{
return getValidatorContainer(currentValidator);
}
public ValidatorContainer getValidatorContainer(int i)
{
ValidatorContainer container = null;
try
{
container = validatorContainers.get(i);
}
catch (Exception e)
{
container = null;
}
return container;
}
public boolean hasParams()
{
return hasParams(currentValidator);
}
public boolean hasParams(int i)
{
boolean returnValue = false;
try
{
ValidatorContainer container = getValidatorContainer(i);
if (container != null)
{
returnValue = container.hasParams();
}
}
catch (Exception e)
{
Debug.trace("hasParams(" + i + ") failed: " + e);
// just return true
}
return returnValue;
}
public Map getValidatorParams()
{
return getValidatorParams(currentValidator);
}
public Map getValidatorParams(int i)
{
Map returnValue = null;
try
{
ValidatorContainer container = getValidatorContainer(i);
if (container != null)
{
returnValue = container.getValidatorParams();
}
}
catch (Exception e)
{
Debug.trace("getValidatorParams(" + i + ") failed: " + e);
// just return true
}
return returnValue;
}
// This method was added to support changes to ProcessingClient interface
// it's use is non-deterministic in the newly implemented text validators.
public String getText()
{
return getValidatorMessage(currentValidator);
}
public void setModifiedPassword(String value)
{
modifiedPassword = value;
}
/*--------------------------------------------------------------------------*/
/**
* Returns the password in the following order:
* If a validator sets a modified password such as an encrypted string that is returned,
* OR if a processing service class was supplied it will be used to process
* the password before it is returned, otherwise the content of the first field will be
* returned.
*
* @return the password
*/
/*--------------------------------------------------------------------------*/
public String getPassword()
{
String returnValue = "";
if (modifiedPassword != null)
{
returnValue = modifiedPassword;
if (processor != null)
{
Debug.trace("Validator changed password, PROCESSOR WILL NOT RUN!");
}
}
else if (processor != null)
{
returnValue = processor.process(this);
}
else if (fields.size() > 0)
{
returnValue = new String(((JPasswordField) fields.elementAt(0)).getPassword());
}
return returnValue;
}
}
/*---------------------------------------------------------------------------*/