HistoricalAttributeValue.java revision 989e90644450bf9c04893c40b54a7a06406f1f7e
/*
* 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
* 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 2006-2010 Sun Microsystems, Inc.
* Portions Copyright 2013-2015 ForgeRock AS.
*/
/**
* This class stores an internal usable representation of the value of
* the historical related to an entry.
*
*
* an historical attribute value looks like :
* description:00000108b3a65541000000000001:add:added_value
* or
* description:00000108b3a6cbb8000000000001:del:deleted_value
* or
* description:00000108b3a6cbb8000000000001:repl:new_value
* or
* description:00000108b3a6cbb8000000000001:attrDel
* or
* description:00000108b3a65541000000000001:add
* or
* dn:00000108b3a65541000000000001:add (ADD operation)
* or
* dn:00000108b3a65541000000000001:moddn (MODIFYDN operation)
*
* so after split
* token[0] will contain the attribute name
* token[1] will contain the CSN
* token[2] will contain the type of historical information
* token[3] will contain the attribute value
*
* options are stored with the attribute names using; as a separator
* example :
* description;FR;France:00000108b3a65541000000000001:add:added_value
*/
class HistoricalAttributeValue
{
private final AttributeType attrType;
private final String attrString;
private final ByteString attributeValue;
private final HistAttrModificationKey histKey;
private final String stringValue;
/**
* This flag indicates that this value was generated to store the last date
* when the entry was renamed.
*/
private boolean isModDN;
/**
* Create a new object from the String encoded form.
*
* @param strVal The String encoded form of historical attribute value.
* @see EntryHistorical#encodeAndPurge() encoding in EntryHistorical
*/
{
{
int index = 1;
{
index ++;
}
}
else
{
}
{
// This HistVal was used to store the date when some
// modifications were done to the entries.
}
else
{
// This HistVal is used to store the date when the entry
// was added to the directory or when it was last renamed.
{
isModDN = true;
}
}
{
{
}
else
{
stringValue = null;
}
}
else
{
stringValue = null;
}
}
/**
* Get the String form of the attribute type.
*
* @return Returns the String form of the attribute type.
*/
public String getAttrString()
{
return attrString;
}
/**
* Get the type of this HistVal.
*
* @return Returns the type of this HistVal.
* Can return NULL if the HistVal was generated for a ADD Operation.
*/
public AttributeType getAttrType()
{
return attrType;
}
/**
* Get the CSN of this HistVal.
* @return Returns the CSN of this HistVal.
*/
{
return csn;
}
/**
* Get the HistKey.
* @return Returns the histKey.
*/
public HistAttrModificationKey getHistKey()
{
return histKey;
}
/**
* Get the options or an empty set if there are no options.
* @return Returns the options.
*/
{
return options;
}
/**
* Get the Attribute Value.
* @return The Attribute Value.
*/
public ByteString getAttributeValue()
{
return attributeValue;
}
/**
* Generate a Modification equivalent to this value of the historical
* attribute.
*
* @return A modification equivalent to this value of the historical
* attribute.
*/
public Modification generateMod()
{
{
}
switch (histKey)
{
case ADD:
case DEL:
case REPL:
case DELATTR:
default:
return null;
}
}
/**
* Indicates if this value of the historical attribute was generated
* for a ADD operation.
*
* @return a boolean indicating if this was generated for a ADD operation.
*/
public boolean isADDOperation()
{
}
/**
* Indicates if this value of the historical attribute was generated
* for a MODDN operation.
*
* @return a boolean indicating if this was generated for a ADDMODDN operation.
*/
public boolean isMODDNOperation()
{
}
{
{
}
if (stringValue != null)
{
}
}
private String getModificationType()
{
if (isModDN)
{
return "moddn";
}
{
}
return "TODO";
}
}