View Javadoc

    1   /*
    2    * This file is part of dependency-check-core.
    3    *
    4    * Dependency-check-core is free software: you can redistribute it and/or modify it
    5    * under the terms of the GNU General Public License as published by the Free
    6    * Software Foundation, either version 3 of the License, or (at your option) any
    7    * later version.
    8    *
    9    * Dependency-check-core is distributed in the hope that it will be useful, but
    10   * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    11   * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
    12   * details.
    13   *
    14   * You should have received a copy of the GNU General Public License along with
    15   * dependency-check-core. If not, see http://www.gnu.org/licenses/.
    16   *
    17   * Copyright (c) 2013 Jeremy Long. All Rights Reserved.
    18   */
    19  package org.owasp.dependencycheck.data.cpe;
    20
    21  import java.io.File;
    22  import java.io.IOException;
    23  import java.util.logging.Level;
    24  import java.util.logging.Logger;
    25  import org.apache.lucene.store.Directory;
    26  import org.apache.lucene.store.FSDirectory;
    27  import org.owasp.dependencycheck.utils.Settings;
    28
    29  /**
    30   * The Base Index class used to access the CPE Index.
    31   *
    32   * @author Jeremy Long (jeremy.long@owasp.org)
    33   */
    34  public abstract class BaseIndex {
    35
    36      /**
    37       * The Lucene directory containing the index.
    38       */
    39      private Directory directory;
    40      /**
    41       * Indicates whether or not the Lucene Index is open.
    42       */
    43      private boolean indexOpen = false;
    44
    45      /**
    46       * Gets the directory.
    47       *
    48       * @return the directory
    49       */
    50      public Directory getDirectory() {
    51          return directory;
    52      }
    53
    54      /**
    55       * Opens the CPE Index.
    56       *
    57       * @throws IOException is thrown if an IOException occurs opening the index.
    58       */
    59      public void open() throws IOException {
    60          directory = this.openDirectory();
    61          indexOpen = true;
    62      }
    63
    64      /**
    65       * Closes the CPE Index.
    66       */
    67      public void close() {
    68          try {
    69              directory.close();
    70          } catch (IOException ex) {
    71              final String msg = "Unable to update database due to an IO error.";
    72              Logger.getLogger(BaseIndex.class.getName()).log(Level.SEVERE, msg);
    73              Logger.getLogger(BaseIndex.class.getName()).log(Level.FINE, null, ex);
    74          } finally {
    75              directory = null;
    76          }
    77          indexOpen = false;
    78
    79      }
    80
    81      /**
    82       * Returns the status of the data source - is the index open.
    83       *
    84       * @return true or false.
    85       */
    86      public boolean isOpen() {
    87          return indexOpen;
    88      }
    89
    90      /**
    91       * Returns the Lucene directory object for the CPE Index.
    92       *
    93       * @return the Lucene Directory object for the CPE Index.
    94       * @throws IOException is thrown if an IOException occurs.
    95       */
    96      protected Directory openDirectory() throws IOException {
    97          final File path = getDataDirectory();
    98          return FSDirectory.open(path);
    99      }
    100
    101     /**
    102      * Retrieves the directory that the JAR file exists in so that we can ensure
    103      * we always use a common data directory.
    104      *
    105      * @return the data directory for this index.
    106      * @throws IOException is thrown if an IOException occurs of course...
    107      */
    108     public static File getDataDirectory() throws IOException {
    109         final File path = Settings.getFile(Settings.KEYS.CPE_DATA_DIRECTORY);
    110         if (!path.exists()) {
    111             if (!path.mkdirs()) {
    112                 throw new IOException("Unable to create CPE Data directory");
    113             }
    114         }
    115         return path;
    116     }
    117 }