| /* |
| * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * |
| * - Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * |
| * - Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * |
| * - Neither the name of Oracle nor the names of its |
| * contributors may be used to endorse or promote products derived |
| * from this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS |
| * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
| * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
| * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
| * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
| * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
| * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| /* |
| * This source code is provided to illustrate the usage of a given feature |
| * or technique and has been deliberately simplified. Additional steps |
| * required for a production-quality application, such as security checks, |
| * input validation and proper error handling, might not be present in |
| * this sample code. |
| */ |
| |
| |
| package com.sun.jmx.examples.scandir; |
| |
| import com.sun.jmx.examples.scandir.ScanManagerMXBean.ScanState; |
| import com.sun.jmx.examples.scandir.config.DirectoryScannerConfig; |
| import java.io.IOException; |
| import javax.management.InstanceNotFoundException; |
| |
| /** |
| * A <code>DirectoryScannerMXBean</code> is an MBean that |
| * scans a file system starting at a given root directory, |
| * and then looks for files that match a given criteria. |
| * <p> |
| * When such a file is found, the <code>DirectoryScannerMXBean</code> takes |
| * the actions for which it was configured: see {@link #scan scan()}. |
| * <p> |
| * <code>DirectoryScannerMXBeans</code> are created, initialized, and |
| * registered by the {@link ScanManagerMXBean}. |
| * The {@link ScanManagerMXBean} will also schedule and run them in |
| * background by calling their {@link #scan} method. |
| * </p> |
| * @author Sun Microsystems, 2006 - All rights reserved. |
| */ |
| public interface DirectoryScannerMXBean { |
| /** |
| * Get The {@link DirectoryScanner} state. |
| * @return the current state of the <code>DirectoryScanner</code>. |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws InstanceNotFoundException The underlying MBean is not |
| * registered in the MBeanServer. |
| **/ |
| public ScanState getState() |
| throws IOException, InstanceNotFoundException; |
| |
| /** |
| * Stops the current scan if {@link ScanState#RUNNING running}. |
| * After this method completes the state of the application will |
| * be {@link ScanState#STOPPED STOPPED}. |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws InstanceNotFoundException The underlying MBean is not |
| * registered in the MBeanServer. |
| **/ |
| public void stop() |
| throws IOException, InstanceNotFoundException; |
| |
| /** |
| * Scans the file system starting at the specified {@link #getRootDirectory |
| * root directory}. |
| * <p>If a file that matches this <code>DirectoryScannerMXBean</code> |
| * {@link #getConfiguration} criteria is found, |
| * the <code>DirectoryScannerMXBean</code> takes the {@link |
| * DirectoryScannerConfig#getActions() actions} for which |
| * it was {@link #getConfiguration configured}: emit a notification, |
| * <i>and or</i> log a {@link |
| * com.sun.jmx.examples.scandir.config.ResultRecord} for this file, |
| * <i>and or</i> delete that file. |
| * </p> |
| * <p> |
| * The code that would actually delete the file is commented out - so that |
| * nothing valuable is lost if this example is run by mistake on the wrong |
| * set of directories. |
| * </p> |
| * <p>This method returns only when the directory scan is completed, or |
| * if it was {@link #stop stopped} by another thread. |
| * </p> |
| * @throws IllegalStateException if already {@link ScanState#RUNNING} |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws InstanceNotFoundException The underlying MBean is not |
| * registered in the MBeanServer. |
| **/ |
| public void scan() |
| throws IOException, InstanceNotFoundException; |
| |
| /** |
| * Gets the root directory at which this <code>DirectoryScannerMXBean</code> |
| * will start scanning the file system. |
| * <p> |
| * This is a shortcut to {@link #getConfiguration |
| * getConfiguration()}.{@link |
| * DirectoryScannerConfig#getRootDirectory |
| * getRootDirectory()}. |
| * </p> |
| * @return This <code>DirectoryScannerMXBean</code> root directory. |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws InstanceNotFoundException The underlying MBean is not |
| * registered in the MBeanServer. |
| **/ |
| public String getRootDirectory() |
| throws IOException, InstanceNotFoundException; |
| |
| /** |
| * The configuration data from which this {@link DirectoryScanner} was |
| * created. |
| * <p> |
| * You cannot change this configuration here. You can however |
| * {@link ScanDirConfigMXBean#setConfiguration modify} the |
| * {@link ScanDirConfigMXBean} configuration, and ask the |
| * {@link ScanManagerMXBean} to {@link ScanManagerMXBean#applyConfiguration |
| * apply} it. This will get all <code>DirectoryScannerMXBean</code> |
| * replaced by new MBeans created from the modified configuration. |
| * </p> |
| * |
| * @return This <code>DirectoryScannerMXBean</code> configuration data. |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws InstanceNotFoundException The underlying MBean is not |
| * registered in the MBeanServer. |
| **/ |
| public DirectoryScannerConfig getConfiguration() |
| throws IOException, InstanceNotFoundException; |
| |
| /** |
| * A short string describing what's happening in current/latest scan. |
| * @return a short info string. |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws InstanceNotFoundException The underlying MBean is not |
| * registered in the MBeanServer. |
| **/ |
| public String getCurrentScanInfo() |
| throws IOException, InstanceNotFoundException; |
| } |