From 6735cb32819c25d9bda77244c6bf3173f67918fd Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 29 Feb 2016 12:57:48 +0000
Subject: [PATCH] Code cleanup: - Use try-with-resources - Reversed if conditions
---
opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeUtils.java | 458 +++++++++++++++++++++++---------------------------------
1 files changed, 188 insertions(+), 270 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeUtils.java b/opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeUtils.java
index a8f35bc..b3d87e0 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeUtils.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeUtils.java
@@ -11,17 +11,35 @@
* Header, with the fields enclosed by brackets [] replaced by your own identifying
* information: "Portions Copyright [year] [name of copyright owner]".
*
- * Portions Copyright 2013-2015 ForgeRock AS.
+ * Portions Copyright 2013-2016 ForgeRock AS.
*/
package org.opends.server.tools.upgrade;
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.FilenameFilter;
+import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.slf4j.LocalizedLogger;
-import org.forgerock.opendj.ldap.*;
+import org.forgerock.opendj.ldap.Assertion;
+import org.forgerock.opendj.ldap.Attribute;
+import org.forgerock.opendj.ldap.ByteString;
+import org.forgerock.opendj.ldap.ConditionResult;
+import org.forgerock.opendj.ldap.DN;
+import org.forgerock.opendj.ldap.DecodeException;
+import org.forgerock.opendj.ldap.Entries;
+import org.forgerock.opendj.ldap.Entry;
+import org.forgerock.opendj.ldap.Filter;
+import org.forgerock.opendj.ldap.LinkedHashMapEntry;
+import org.forgerock.opendj.ldap.Matcher;
+import org.forgerock.opendj.ldap.SearchScope;
import org.forgerock.opendj.ldap.requests.AddRequest;
import org.forgerock.opendj.ldap.requests.ModifyRequest;
import org.forgerock.opendj.ldap.requests.Requests;
@@ -37,7 +55,6 @@
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.SchemaConfigManager;
import org.opends.server.util.ChangeOperationType;
-import org.opends.server.util.StaticUtils;
import static org.forgerock.opendj.ldap.schema.CoreSchema.*;
import static org.forgerock.opendj.ldap.schema.SchemaOptions.*;
@@ -56,39 +73,24 @@
private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
/** The config folder of the current instance. */
- static final File configDirectory = new File(getInstancePath(),
- Installation.CONFIG_PATH_RELATIVE);
-
+ static final File configDirectory = new File(getInstancePath(), CONFIG_PATH_RELATIVE);
/** The config/schema folder of the current instance. */
- static final File configSchemaDirectory = new File(
- configDirectory, Installation.SCHEMA_PATH_RELATIVE);
-
+ static final File configSchemaDirectory = new File(configDirectory, SCHEMA_PATH_RELATIVE);
/** The template folder of the current installation. */
- static final File templateDirectory = new File(getInstallationPath(),
- Installation.TEMPLATE_RELATIVE_PATH);
-
+ static final File templateDirectory = new File(getInstallationPath(), TEMPLATE_RELATIVE_PATH);
/** The template/config folder of the current installation. */
- static final File templateConfigDirectory = new File(templateDirectory,
- Installation.CONFIG_PATH_RELATIVE);
-
+ static final File templateConfigDirectory = new File(templateDirectory, CONFIG_PATH_RELATIVE);
/** The template/config/schema folder of the current installation. */
- static final File templateConfigSchemaDirectory = new File(
- templateConfigDirectory,
- Installation.SCHEMA_PATH_RELATIVE);
-
+ static final File templateConfigSchemaDirectory = new File(templateConfigDirectory, SCHEMA_PATH_RELATIVE);
/** The config/snmp/security folder of the current instance. */
static final File configSnmpSecurityDirectory = new File(
- configDirectory + File.separator + Installation.SNMP_PATH_RELATIVE
- + File.separator + Installation.SECURITY_PATH_RELATIVE);
-
+ configDirectory + File.separator + SNMP_PATH_RELATIVE + File.separator + SECURITY_PATH_RELATIVE);
/** The lib folder of the current installation. */
- static final File libDirectory = new File(getInstallationPath(), Installation.LIB_RELATIVE_PATH);
-
+ static final File libDirectory = new File(getInstallationPath(), LIB_RELATIVE_PATH);
/** The bin folder of the current installation. */
- static final File binDirectory = new File(getInstallationPath(), Installation.UNIX_BINARIES_PATH_RELATIVE);
-
+ static final File binDirectory = new File(getInstallationPath(), UNIX_BINARIES_PATH_RELATIVE);
/** The bat folder of the current installation. */
- static final File batDirectory = new File(getInstallationPath(), Installation.WINDOWS_BINARIES_PATH_RELATIVE);
+ static final File batDirectory = new File(getInstallationPath(), WINDOWS_BINARIES_PATH_RELATIVE);
/**
* Returns the path of the installation of the directory server. Note that
@@ -106,29 +108,28 @@
/* Get the install path from the Class Path */
final String sep = System.getProperty("path.separator");
- final String[] classPaths =
- System.getProperty("java.class.path").split(sep);
- String path = getInstallPath(classPaths);
- if (path != null)
+ final String[] classPaths = System.getProperty("java.class.path").split(sep);
+ final String path = getInstallPath(classPaths);
+ if (path == null)
{
- final File f = new File(path).getAbsoluteFile();
- final File librariesDir = f.getParentFile();
-
- /*
- * Do a best effort to avoid having a relative representation (for
- * instance to avoid having ../../../).
- */
- try
- {
- installPath = librariesDir.getParentFile().getCanonicalPath();
- }
- catch (IOException ioe)
- {
- // Best effort
- installPath = librariesDir.getParent();
- }
+ return installPath;
}
- return installPath;
+
+ /*
+ * Do a best effort to avoid having a relative representation
+ * (for instance to avoid having ../../../).
+ */
+ final File f = new File(path).getAbsoluteFile();
+ final File librariesDir = f.getParentFile();
+ try
+ {
+ return librariesDir.getParentFile().getCanonicalPath();
+ }
+ catch (IOException ignore)
+ {
+ // Best effort
+ return librariesDir.getParent();
+ }
}
private static String getInstallPath(final String[] classPaths)
@@ -136,7 +137,7 @@
for (String classPath : classPaths)
{
final String normPath = classPath.replace(File.separatorChar, '/');
- if (normPath.endsWith(Installation.OPENDJ_BOOTSTRAP_JAR_RELATIVE_PATH))
+ if (normPath.endsWith(OPENDJ_BOOTSTRAP_JAR_RELATIVE_PATH))
{
return classPath;
}
@@ -154,60 +155,35 @@
*/
static String getInstancePathFromInstallPath(final String installPath)
{
- String instancePathFileName = Installation.INSTANCE_LOCATION_PATH;
- final File _svcScriptPath =
- new File(installPath + File.separator
- + SVC_SCRIPT_FILE_NAME);
+ final File svcScriptPath = new File(installPath, SVC_SCRIPT_FILE_NAME);
// look for /etc/opt/opendj/instance.loc
- File f = new File(instancePathFileName);
- if (!_svcScriptPath.exists() || !f.exists())
+ File f = new File(INSTANCE_LOCATION_PATH);
+ if (!svcScriptPath.exists() || !f.exists())
{
// look for <installPath>/instance.loc
- instancePathFileName =
- installPath + File.separator
- + Installation.INSTANCE_LOCATION_PATH_RELATIVE;
- f = new File(instancePathFileName);
+ f = new File(installPath, INSTANCE_LOCATION_PATH_RELATIVE);
if (!f.exists())
{
return installPath;
}
}
- BufferedReader reader;
- try
- {
- reader = new BufferedReader(new FileReader(instancePathFileName));
- }
- catch (Exception e)
- {
- return installPath;
- }
-
// Read the first line and close the file.
- String line;
- try
+ try (BufferedReader reader = new BufferedReader(new FileReader(f)))
{
- line = reader.readLine();
+ String line = reader.readLine();
File instanceLoc = new File(line.trim());
if (instanceLoc.isAbsolute())
{
return instanceLoc.getAbsolutePath();
}
- else
- {
- return new File(installPath + File.separator + instanceLoc.getPath())
- .getAbsolutePath();
- }
+ return new File(installPath, instanceLoc.getPath()).getAbsolutePath();
}
- catch (Exception e)
+ catch (IOException e)
{
return installPath;
}
- finally
- {
- StaticUtils.close(reader);
- }
}
/**
@@ -220,27 +196,26 @@
*/
static String getPath(File f)
{
- String path = null;
- if (f != null)
+ if (f == null)
{
- try
- {
- /*
- * Do a best effort to avoid having a relative representation (for
- * instance to avoid having ../../../).
- */
- f = f.getCanonicalFile();
- }
- catch (IOException ioe)
- {
- /*
- * This is a best effort to get the best possible representation of the
- * file: reporting the error is not necessary.
- */
- }
- path = f.toString();
+ return null;
}
- return path;
+ try
+ {
+ /*
+ * Do a best effort to avoid having a relative representation
+ * (for instance to avoid having ../../../).
+ */
+ return f.getCanonicalFile().toString();
+ }
+ catch (IOException ignore)
+ {
+ /*
+ * This is a best effort to get the best possible representation of the file:
+ * reporting the error is not necessary.
+ */
+ return f.toString();
+ }
}
/**
@@ -252,8 +227,7 @@
* the relative path.
* @return the absolute path for the given parentPath and relativePath.
*/
- static String getPath(final String parentPath,
- final String relativePath)
+ static String getPath(final String parentPath, final String relativePath)
{
return getPath(new File(new File(parentPath), relativePath));
}
@@ -261,7 +235,7 @@
static File getFileForPath(String path)
{
final File f = new File(path);
- return f.isAbsolute() ? f : new File(getInstancePath() + File.separator + path);
+ return f.isAbsolute() ? f : new File(getInstancePath(), path);
}
/**
@@ -321,12 +295,7 @@
static String getInstancePath()
{
final String installPath = getInstallationPath();
- if (installPath == null)
- {
- return null;
- }
-
- return getInstancePathFromInstallPath(installPath);
+ return installPath != null ? getInstancePathFromInstallPath(installPath) : null;
}
/**
@@ -336,31 +305,28 @@
*/
static String getInstallationPath()
{
- // The upgrade runs from the bits extracted by BuildExtractor
- // in the staging directory. However
- // we still want the Installation to point at the build being
+ // The upgrade runs from the bits extracted by BuildExtractor in the staging directory.
+ // However we still want the Installation to point at the build being
// upgraded so the install path reported in [installroot].
String installationPath = System.getProperty("INSTALL_ROOT");
- if (installationPath == null)
+ if (installationPath != null)
{
- final String path = getInstallPathFromClasspath();
- if (path != null)
- {
- final File f = new File(path);
- if (f.getParentFile() != null
- && f.getParentFile().getParentFile() != null
- && new File(f.getParentFile().getParentFile(),
- Installation.LOCKS_PATH_RELATIVE).exists())
- {
- installationPath = getPath(f.getParentFile().getParentFile());
- }
- else
- {
- installationPath = path;
- }
- }
+ return installationPath;
}
- return installationPath;
+
+ final String path = getInstallPathFromClasspath();
+ if (path != null)
+ {
+ final File f = new File(path);
+ if (f.getParentFile() != null
+ && f.getParentFile().getParentFile() != null
+ && new File(f.getParentFile().getParentFile(), LOCKS_PATH_RELATIVE).exists())
+ {
+ return getPath(f.getParentFile().getParentFile());
+ }
+ return path;
+ }
+ return null;
}
/**
@@ -425,16 +391,10 @@
File.createTempFile("copyConfig", ".tmp", original.getParentFile());
int changeCount = 0;
- LDIFEntryReader entryReader = null;
- LDIFEntryWriter writer = null;
- try
+ final Schema schema = getUpgradeSchema();
+ try (LDIFEntryReader entryReader = new LDIFEntryReader(new FileInputStream(configPath)).setSchema(schema);
+ LDIFEntryWriter writer = new LDIFEntryWriter(new FileOutputStream(copyConfig)))
{
- final Schema schema = getUpgradeSchema();
- entryReader =
- new LDIFEntryReader(new FileInputStream(configPath))
- .setSchema(schema);
-
- writer = new LDIFEntryWriter(new FileOutputStream(copyConfig));
writer.setWrapColumn(80);
// Writes the header on the new file.
@@ -506,12 +466,9 @@
{
throw new IOException(ex.getMessage());
}
- finally
- {
- // The reader and writer must be close before renaming files.
- // Otherwise it causes exceptions under windows OS.
- StaticUtils.close(entryReader, writer);
- }
+
+ // The reader and writer must be closed before renaming files.
+ // Otherwise it causes exceptions under windows OS.
try
{
@@ -557,74 +514,45 @@
throws IOException, IllegalStateException
{
int changeCount = 0;
- LDIFEntryReader templateReader = null;
- LDIFEntryReader destinationReader = null;
- LDIFEntryWriter destinationWriter = null;
- File copy = null;
- try
+
+ final Entry templateSchemaEntry = readFirstEntryFromTemplate(templateFile);
+ final Entry destinationSchemaEntry = readFirstEntryFromTemplate(destination);
+
+ if (attributes != null)
{
- templateReader = new LDIFEntryReader(new FileInputStream(templateFile));
- if (!templateReader.hasNext())
+ for (final String att : attributes)
{
- // Unless template are corrupted, this should not happen.
- throw new IOException(ERR_UPGRADE_CORRUPTED_TEMPLATE.get(
- templateFile.getPath()).toString());
+ final ByteString attributeType = getSchemaElement(templateSchemaEntry, "attributeTypes", att);
+ destinationSchemaEntry.getAttribute("attributeTypes").add(attributeType);
+ changeCount++;
+ logger.debug(LocalizableMessage.raw("Added %s", attributeType));
}
- final Entry templateSchemaEntry = templateReader.readEntry();
+ }
- destinationReader = new LDIFEntryReader(
- new FileInputStream(destination));
- if (!destinationReader.hasNext())
+ if (objectClasses != null)
+ {
+ for (final String oc : objectClasses)
{
- // Unless template are corrupted, this should not happen.
- throw new IOException(ERR_UPGRADE_CORRUPTED_TEMPLATE.get(
- destination.getPath()).toString());
+ final ByteString objectClass = getSchemaElement(templateSchemaEntry, "objectClasses", oc);
+ destinationSchemaEntry.getAttribute("objectClasses").add(objectClass);
+ changeCount++;
+ logger.trace("Added %s", objectClass);
}
- final Entry destinationSchemaEntry = destinationReader.readEntry();
+ }
- if (attributes != null)
- {
- for (final String att : attributes)
- {
- final ByteString attributeType =
- getSchemaElement(templateSchemaEntry, "attributeTypes", att);
- destinationSchemaEntry.getAttribute("attributeTypes").add(
- attributeType);
- changeCount++;
- logger.debug(LocalizableMessage.raw(String.format("Added %s", attributeType)));
- }
- }
-
- if (objectClasses != null)
- {
- for (final String oc : objectClasses)
- {
- final ByteString objectClass =
- getSchemaElement(templateSchemaEntry, "objectClasses", oc);
- destinationSchemaEntry.getAttribute("objectClasses").add(objectClass);
- changeCount++;
- logger.trace("Added %s", objectClass);
- }
- }
-
+ File copy = File.createTempFile("copySchema", ".tmp", destination.getParentFile());
+ try (final FileOutputStream fos = new FileOutputStream(copy);
+ LDIFEntryWriter destinationWriter = new LDIFEntryWriter(fos))
+ {
// Then writes the new schema entry.
- copy =
- File.createTempFile("copySchema", ".tmp",
- destination.getParentFile());
- final FileOutputStream fos = new FileOutputStream(copy);
- destinationWriter = new LDIFEntryWriter(fos);
destinationWriter.setWrapColumn(79);
// Copy comments to fos (get License and first comments only).
writeFileHeaderComments(templateFile, destinationWriter);
// Writes the entry after.
destinationWriter.writeEntry(destinationSchemaEntry);
}
- finally
- {
- // Readers and writer must be close before writing files.
- // This causes exceptions under windows OS.
- StaticUtils.close(templateReader, destinationReader, destinationWriter);
- }
+ // Readers and writer must be closed before writing files.
+ // This causes exceptions under windows OS.
// Renames the copy to make it the new schema file.
try
@@ -641,6 +569,19 @@
return changeCount;
}
+ private static Entry readFirstEntryFromTemplate(final File destination) throws DecodeException, IOException
+ {
+ try (LDIFEntryReader r = new LDIFEntryReader(new FileInputStream(destination)))
+ {
+ if (!r.hasNext())
+ {
+ // Unless template are corrupted, this should not happen.
+ throw new IOException(ERR_UPGRADE_CORRUPTED_TEMPLATE.get(destination.getPath()).toString());
+ }
+ return r.readEntry();
+ }
+ }
+
/**
* Gets and writes the first comments of a file.
*
@@ -654,10 +595,8 @@
private static void writeFileHeaderComments(final File file,
final LDIFEntryWriter writer) throws IOException
{
- BufferedReader br = null;
- try
+ try (BufferedReader br = new BufferedReader(new FileReader(file)))
{
- br = new BufferedReader(new FileReader(file));
String comment = br.readLine();
while (comment != null && comment.startsWith("#"))
@@ -670,11 +609,8 @@
{
throw ex;
}
- finally
- {
- StaticUtils.close(br);
- }
}
+
/**
* Returns the definition of the selected attribute / object class OID.
*
@@ -729,83 +665,65 @@
static void updateConfigUpgradeSchemaFile(final File folder,
final String revision) throws Exception
{
+ if (!folder.isDirectory())
+ {
+ return;
+ }
// We need to upgrade the schema.ldif.<rev> file contained in the
// config/upgrade folder otherwise, we cannot enable the backend at
// server's start. We need to read all files contained in config/schema
// and add all attribute/object classes in this new super entry which
// will be read at start-up.
Entry theNewSchemaEntry = new LinkedHashMapEntry();
- LDIFEntryReader reader = null;
- LDIFEntryWriter writer = null;
- try
+ final FilenameFilter filter = new SchemaConfigManager.SchemaFileFilter();
+ for (final File f : folder.listFiles(filter))
{
- if (folder.isDirectory())
+ logger.debug(LocalizableMessage.raw("Processing %s", f.getAbsolutePath()));
+ try (LDIFEntryReader reader = new LDIFEntryReader(new FileInputStream(f)))
{
- final FilenameFilter filter =
- new SchemaConfigManager.SchemaFileFilter();
- for (final File f : folder.listFiles(filter))
+ while (reader.hasNext())
{
- logger.debug(LocalizableMessage.raw(String.format("Processing %s", f
- .getAbsolutePath())));
- reader = new LDIFEntryReader(new FileInputStream(f));
- try
+ final Entry entry = reader.readEntry();
+ theNewSchemaEntry.setName(entry.getName());
+ for (final Attribute at : entry.getAllAttributes())
{
- while (reader.hasNext())
- {
- final Entry entry = reader.readEntry();
- theNewSchemaEntry.setName(entry.getName());
- for (final Attribute at : entry.getAllAttributes())
- {
- theNewSchemaEntry.addAttribute(at);
- }
- }
- }
- catch (Exception ex)
- {
- throw new Exception("Error parsing existing schema file "
- + f.getName() + " - " + ex.getMessage(), ex);
+ theNewSchemaEntry.addAttribute(at);
}
}
-
- // Creates a File object representing
- // config/upgrade/schema.ldif.revision which the server creates
- // the first time it starts if there are schema customizations.
- final File destination =
- new File(configDirectory, Installation.UPGRADE_PATH
- + File.separator + "schema.ldif." + revision);
-
- // Checks if the parent exists (eg. embedded
- // server doesn't seem to provide that folder)
- File parentDirectory = destination.getParentFile();
- if (!parentDirectory.exists())
- {
- logger.debug(LocalizableMessage.raw(String.format("Parent file of %s doesn't exist",
- destination.getPath())));
-
- parentDirectory.mkdirs();
-
- logger.debug(LocalizableMessage.raw(String.format("Parent directory %s created.",
- parentDirectory.getPath())));
- }
- if (!destination.exists())
- {
- destination.createNewFile();
- }
-
- logger.debug(LocalizableMessage.raw(String.format("Writing entries in %s.", destination
- .getAbsolutePath())));
-
- writer = new LDIFEntryWriter(new FileOutputStream(destination));
- writer.writeEntry(theNewSchemaEntry);
-
- logger.debug(LocalizableMessage.raw(String.format(
- "%s created and completed successfully.", destination
- .getAbsolutePath())));
+ }
+ catch (Exception ex)
+ {
+ throw new Exception("Error parsing existing schema file " + f.getName() + " - " + ex.getMessage(), ex);
}
}
- finally
+
+ // Creates a File object representing
+ // config/upgrade/schema.ldif.revision which the server creates
+ // the first time it starts if there are schema customizations.
+ final File destination = new File(configDirectory, UPGRADE_PATH + File.separator + "schema.ldif." + revision);
+
+ // Checks if the parent exists (eg. embedded
+ // server doesn't seem to provide that folder)
+ File parentDirectory = destination.getParentFile();
+ if (!parentDirectory.exists())
{
- StaticUtils.close(reader, writer);
+ logger.debug(LocalizableMessage.raw("Parent file of %s doesn't exist", destination.getPath()));
+
+ parentDirectory.mkdirs();
+
+ logger.debug(LocalizableMessage.raw("Parent directory %s created.", parentDirectory.getPath()));
+ }
+ if (!destination.exists())
+ {
+ destination.createNewFile();
+ }
+
+ logger.debug(LocalizableMessage.raw("Writing entries in %s.", destination.getAbsolutePath()));
+
+ try (LDIFEntryWriter writer = new LDIFEntryWriter(new FileOutputStream(destination)))
+ {
+ writer.writeEntry(theNewSchemaEntry);
+ logger.debug(LocalizableMessage.raw("%s created and completed successfully.", destination.getAbsolutePath()));
}
}
--
Gitblit v1.10.0