/*
* 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 2008 Sun Microsystems, Inc.
* Portions Copyright 2013-2015 ForgeRock AS.
*/
/**
* This class provides a default implementation of a compressed schema manager
* that will store the schema definitions in a binary file
* (config/schematokens.dat).
*/
{
/** Synchronizes calls to save. */
/**
* Creates a new instance of this compressed schema manager.
*/
public DefaultCompressedSchema()
{
load();
}
/** {@inheritDoc} */
throws DirectoryException
{
save();
}
/** {@inheritDoc} */
{
save();
}
/**
* Loads the compressed schema information from disk.
*/
private void load()
{
try
{
// Determine the location of the compressed schema data file. It should
// be in the config directory with a name of "schematokens.dat". If that
// file doesn't exist, then don't do anything.
{
return;
}
// The first element in the file should be a sequence of object class
// sets. Each object class set will itself be a sequence of octet
// strings, where the first one is the token and the remaining elements
// are the names of the associated object classes.
while (reader.hasNextElement())
{
.toByteArray();
while (reader.hasNextElement())
{
}
}
// The second element in the file should be an integer element that holds
// the value to use to initialize the object class counter.
// The third element in the file should be a sequence of attribute
// description components. Each attribute description component will
// itself be a sequence of octet strings, where the first one is the
// token, the second is the attribute name, and all remaining elements are
// the attribute options.
while (reader.hasNextElement())
{
while (reader.hasNextElement())
{
}
}
// The fourth element in the file should be an integer element that holds
// the value to use to initialize the attribute description counter.
}
catch (final Exception e)
{
logger.traceException(e);
// FIXME -- Should we do something else here?
throw new RuntimeException(e);
}
finally
{
}
}
/**
* Writes the compressed schema information to disk.
*
* @throws DirectoryException
* If a problem occurs while writing the updated information.
*/
{
synchronized (saveLock)
{
try
{
// Determine the location of the "live" compressed schema data file, and
// then append ".tmp" to get the name of the temporary file that we will
// use.
// The first element in the file should be a sequence of object class
// sets. Each object class set will itself be a sequence of octet
// strings, where the first one is the token and the remaining elements
// are the names of the associated object classes.
int ocCounter = 1;
{
{
}
ocCounter++;
}
// The second element in the file should be an integer element that
// holds the value to use to initialize the object class counter.
// The third element in the file should be a sequence of attribute
// description components. Each attribute description component will
// itself be a sequence of octet strings, where the first one is the
// token, the second is the attribute name, and all remaining elements
// are the attribute options.
int adCounter = 1;
{
{
}
adCounter++;
}
// The fourth element in the file should be an integer element that
// holds the value to use to initialize the attribute description
// counter.
// Close the writer and swing the temp file into place.
{
{
}
}
}
catch (final Exception e)
{
logger.traceException(e);
throw new DirectoryException(
}
finally
{
}
}
}
}