/* * The contents of this file are subject to the terms of the Common Development and * Distribution License (the License). You may not use this file except in compliance with the * License. * * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the * specific language governing permission and limitations under the License. * * When distributing Covered Software, include this CDDL Header Notice in each file and include * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL * Header, with the fields enclosed by brackets [] replaced by your own identifying * information: "Portions Copyright [year] [name of copyright owner]". * * Copyright 2008 Sun Microsystems, Inc. * Portions Copyright 2014-2016 ForgeRock AS. */ package org.forgerock.opendj.config.dsconfig; import java.util.SortedSet; import java.util.TreeSet; import org.forgerock.opendj.config.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 * The type of the underlying property associated with the modification. */ final class PropertyEditorModification { /** 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 final PropertyDefinition propertyDefinition; private final Type type; private final SortedSet values; private final SortedSet 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 propertyDefinition, Type type, SortedSet values, SortedSet originalValues) { this.propertyDefinition = propertyDefinition; this.type = type; this.values = new TreeSet<>(values); this.originalValues = new TreeSet<>(originalValues); } /** * Creates a reset modification. * * @param * 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 PropertyEditorModification createResetModification(PropertyDefinition propertyDefinition, SortedSet originalValues) { return new PropertyEditorModification<>(propertyDefinition, Type.RESET, new TreeSet(propertyDefinition), originalValues); } /** * Creates an add modification. * * @param * 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 PropertyEditorModification createAddModification(PropertyDefinition propertyDefinition, SortedSet addedValues, SortedSet originalValues) { return new PropertyEditorModification<>(propertyDefinition, Type.ADD, addedValues, originalValues); } /** * Creates a set modification. * * @param * 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 PropertyEditorModification createSetModification(PropertyDefinition propertyDefinition, SortedSet newValues, SortedSet originalValues) { return new PropertyEditorModification<>(propertyDefinition, Type.SET, newValues, originalValues); } /** * Creates a remove modification. * * @param * 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 PropertyEditorModification createRemoveModification(PropertyDefinition propertyDefinition, SortedSet removedValues, SortedSet originalValues) { return new PropertyEditorModification<>(propertyDefinition, Type.REMOVE, removedValues, originalValues); } /** * Returns the property definition associated with this modification. * * @return the property definition associated with this modification. */ PropertyDefinition 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 getModificationValues() { return values; } /** * Returns the original values associated with the property. * * @return the original values associated with the property. */ SortedSet getOriginalValues() { return originalValues; } @Override public String toString() { return "Property name: " + getPropertyDefinition() + "\nMod type: " + getType() + "\nMod values: " + getModificationValues() + "\nOriginal values: " + getOriginalValues(); } }