/*
|
* CDDL HEADER START
|
*
|
* The contents of this file are subject to the terms of the
|
* Common Development and Distribution License, Version 1.0 only
|
* (the "License"). You may not use this file except in compliance
|
* with the License.
|
*
|
* You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
|
* or http://forgerock.org/license/CDDLv1.0.html.
|
* See the License for the specific language governing permissions
|
* and limitations under the License.
|
*
|
* When distributing Covered Code, include this CDDL HEADER in each
|
* file and include the License file at legal-notices/CDDLv1_0.txt.
|
* If applicable, add the following below this CDDL HEADER, with the
|
* fields enclosed by brackets "[]" replaced with your own identifying
|
* information:
|
* Portions Copyright [yyyy] [name of copyright owner]
|
*
|
* CDDL HEADER END
|
*
|
*
|
* Copyright 2008 Sun Microsystems, Inc.
|
*/
|
|
package org.opends.server.tools.dsconfig;
|
|
import java.util.SortedSet;
|
import java.util.TreeSet;
|
|
import org.opends.server.admin.PropertyDefinition;
|
|
/**
|
* This class is a data structure that can be used as an interface between
|
* PropertyValueEditor and the different handlers that call it.
|
* Since PropertyValueEditor is not aware of the different options used by the
|
* handlers it cannot directly construct a CommandBuilder, but
|
* PropertyValueEditor knows about the different changes (set, reset, delete)
|
* that can be performed against the ManagedObject and these changes can be
|
* used to generate a CommandBuilder.
|
*
|
* @param <T> The type of the underlying property associated with the
|
* modification.
|
*/
|
final class PropertyEditorModification<T>
|
{
|
/**
|
* The enumeration that describes the different types of modifications that
|
* we can have.
|
*/
|
enum Type
|
{
|
/** The user chose to set values. */
|
SET,
|
/** The user chose to reset values. */
|
RESET,
|
/** The user chose to add values. */
|
ADD,
|
/** The user chose to delete values. */
|
REMOVE
|
};
|
|
private PropertyDefinition<T> propertyDefinition;
|
private Type type;
|
private SortedSet<T> values;
|
private SortedSet<T> originalValues;
|
|
/**
|
* The private constructor of the PropertyEditorModification.
|
* @param propertyDefinition the property definition associated with the
|
* modification.
|
* @param type the type of the modification.
|
* @param values the values associated with the modifications.
|
* @param originalValues the original values of the property we are modifying.
|
*/
|
private PropertyEditorModification(PropertyDefinition<T> propertyDefinition,
|
Type type, SortedSet<T> values, SortedSet<T> originalValues)
|
{
|
this.propertyDefinition = propertyDefinition;
|
this.type = type;
|
this.values = new TreeSet<T>(values);
|
this.originalValues = new TreeSet<T>(originalValues);
|
}
|
|
/**
|
* Creates a reset modification.
|
* @param <T> The type of the underlying property.
|
* @param propertyDefinition the property that is modified.
|
* @param originalValues the original values of the property.
|
* @return a reset modification for a given property.
|
*/
|
static <T> PropertyEditorModification<T> createResetModification(
|
PropertyDefinition<T> propertyDefinition, SortedSet<T> originalValues)
|
{
|
return new PropertyEditorModification<T>(propertyDefinition, Type.RESET,
|
new TreeSet<T>(propertyDefinition), originalValues);
|
}
|
|
/**
|
* Creates an add modification.
|
* @param <T> The type of the underlying property.
|
* @param propertyDefinition the property that is modified.
|
* @param addedValues the values that are added in this modification.
|
* @param originalValues the original values of the property.
|
* @return a reset modification for a given property.
|
*/
|
static <T> PropertyEditorModification<T> createAddModification(
|
PropertyDefinition<T> propertyDefinition,
|
SortedSet<T> addedValues, SortedSet<T> originalValues)
|
{
|
return new PropertyEditorModification<T>(propertyDefinition, Type.ADD,
|
addedValues, originalValues);
|
}
|
|
/**
|
* Creates a set modification.
|
* @param <T> The type of the underlying property.
|
* @param propertyDefinition the property that is modified.
|
* @param newValues the new values for the property.
|
* @param originalValues the original values of the property.
|
* @return a reset modification for a given property.
|
*/
|
static <T> PropertyEditorModification<T> createSetModification(
|
PropertyDefinition<T> propertyDefinition,
|
SortedSet<T> newValues, SortedSet<T> originalValues)
|
{
|
return new PropertyEditorModification<T>(propertyDefinition, Type.SET,
|
newValues, originalValues);
|
}
|
|
/**
|
* Creates a remove modification.
|
* @param <T> The type of the underlying property.
|
* @param propertyDefinition the property that is modified.
|
* @param removedValues the values that are removed in this modification.
|
* @param originalValues the original values of the property.
|
* @return a reset modification for a given property.
|
*/
|
static <T> PropertyEditorModification<T> createRemoveModification(
|
PropertyDefinition<T> propertyDefinition, SortedSet<T> removedValues,
|
SortedSet<T> originalValues)
|
{
|
return new PropertyEditorModification<T>(propertyDefinition, Type.REMOVE,
|
removedValues, originalValues);
|
}
|
|
/**
|
* Retuns the property definition associated with this modification.
|
* @return the property definition associated with this modification.
|
*/
|
PropertyDefinition<T> getPropertyDefinition()
|
{
|
return propertyDefinition;
|
}
|
|
/**
|
* Returns the type of the modification.
|
* @return the type of the modification.
|
*/
|
Type getType()
|
{
|
return type;
|
}
|
|
/**
|
* Returns the specific values associated with the modification.
|
* @return the specific values associated with the modification.
|
*/
|
SortedSet<T> getModificationValues()
|
{
|
return values;
|
}
|
|
/**
|
* Returns the original values associated with the property.
|
* @return the original values associated with the property.
|
*/
|
SortedSet<T> getOriginalValues()
|
{
|
return originalValues;
|
}
|
|
/**
|
* {@inheritDoc}
|
*/
|
@Override
|
public String toString()
|
{
|
return "Property name: "+getPropertyDefinition()+
|
"\nMod type: "+getType()+
|
"\nMod values: "+getModificationValues()+
|
"\nOriginal values: "+getOriginalValues();
|
}
|
}
|