diff options
Diffstat (limited to 'staging/darwin-x86/sample/jmx/jmx-scandir/src/com/sun/jmx/examples/scandir/config/ScanManagerConfig.java')
-rw-r--r-- | staging/darwin-x86/sample/jmx/jmx-scandir/src/com/sun/jmx/examples/scandir/config/ScanManagerConfig.java | 304 |
1 files changed, 304 insertions, 0 deletions
diff --git a/staging/darwin-x86/sample/jmx/jmx-scandir/src/com/sun/jmx/examples/scandir/config/ScanManagerConfig.java b/staging/darwin-x86/sample/jmx/jmx-scandir/src/com/sun/jmx/examples/scandir/config/ScanManagerConfig.java new file mode 100644 index 0000000..e1afcce --- /dev/null +++ b/staging/darwin-x86/sample/jmx/jmx-scandir/src/com/sun/jmx/examples/scandir/config/ScanManagerConfig.java @@ -0,0 +1,304 @@ +/* + * 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.config; + +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.Map; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlRootElement; + + +/** + * The <code>ScanManagerConfig</code> Java Bean is used to model + * the configuration of the {@link + * com.sun.jmx.examples.scandir.ScanManagerMXBean ScanManagerMXBean}. + * + * The {@link + * com.sun.jmx.examples.scandir.ScanManagerMXBean ScanManagerMXBean} will + * use this configuration to initialize the {@link + * com.sun.jmx.examples.scandir.ResultLogManagerMXBean ResultLogManagerMXBean} + * and create the {@link + * com.sun.jmx.examples.scandir.DirectoryScannerMXBean DirectoryScannerMXBeans} + * <p> + * This class is annotated for XML binding. + * </p> + * + * @author Sun Microsystems, 2006 - All rights reserved. + **/ +@XmlRootElement(name="ScanManager", + namespace="jmx:com.sun.jmx.examples.scandir.config") +public class ScanManagerConfig { + + // A logger for this class + // + // private static final Logger LOG = + // Logger.getLogger(ScanManagerConfig.class.getName()); + + /** + * A set of DirectoryScannerConfig objects indexed by their names. + **/ + private final Map<String, DirectoryScannerConfig> directoryScanners; + + /** + * The initial Result Log configuration. + */ + private ResultLogConfig initialResultLogConfig; + + /** + * Holds value of property name. The name of the configuration + * usually corresponds to + * the value of the {@code name=} key of the {@code ObjectName} + * of the {@link + * com.sun.jmx.examples.scandir.ScanDirConfigMXBean + * ScanDirConfigMXBean} which owns this configuration. + **/ + private String name; + + /** + * Creates a new instance of ScanManagerConfig. + * <p>You should not use this constructor directly, but use + * {@link #ScanManagerConfig(String)} instead. + * </p> + * <p>This constructor is tagged deprecated so that the compiler + * will generate a warning if it is used by mistake. + * </p> + * @deprecated Use {@link #ScanManagerConfig(String)} instead. This + * constructor is used through reflection by the XML + * binding framework. + */ + public ScanManagerConfig() { + this(null,true); + } + + /** + * Creates a new instance of ScanManagerConfig. + * @param name The name of the configuration which usually corresponds to + * the value of the {@code name=} key of the {@code ObjectName} + * of the {@link + * com.sun.jmx.examples.scandir.ScanDirConfigMXBean + * ScanDirConfigMXBean} which owns this configuration. + **/ + public ScanManagerConfig(String name) { + this(name,false); + } + + // Our private constructor... + private ScanManagerConfig(String name, boolean allowsNull) { + if (name == null && allowsNull==false) + throw new IllegalArgumentException("name=null"); + this.name = name; + directoryScanners = new LinkedHashMap<String,DirectoryScannerConfig>(); + this.initialResultLogConfig = new ResultLogConfig(); + this.initialResultLogConfig.setMemoryMaxRecords(1024); + } + + // Creates an array for deep equality. + private Object[] toArray() { + final Object[] thisconfig = { + name,directoryScanners,initialResultLogConfig + }; + return thisconfig; + } + + // equals + @Override + public boolean equals(Object o) { + if (o == this) return true; + if (!(o instanceof ScanManagerConfig)) return false; + final ScanManagerConfig other = (ScanManagerConfig)o; + if (this.directoryScanners.size() != other.directoryScanners.size()) + return false; + return Arrays.deepEquals(toArray(),other.toArray()); + } + + @Override + public int hashCode() { + final String key = name; + if (key == null) return 0; + else return key.hashCode(); + } + + /** + * Gets the name of this configuration. The name of the configuration + * usually corresponds to + * the value of the {@code name=} key of the {@code ObjectName} + * of the {@link + * com.sun.jmx.examples.scandir.ScanDirConfigMXBean + * ScanDirConfigMXBean} which owns this configuration. + * @return The name of this configuration. + */ + @XmlAttribute(name="name",required=true) + public String getName() { + return this.name; + } + + /** + * Sets the name of this configuration. The name of the configuration + * usually corresponds to + * the value of the {@code name=} key of the {@code ObjectName} + * of the {@link + * com.sun.jmx.examples.scandir.ScanDirConfigMXBean + * ScanDirConfigMXBean} which owns this configuration. + * <p>Once set this value cannot change.</p> + * @param name The name of this configuration. + */ + public void setName(String name) { + if (this.name == null) + this.name = name; + else if (name == null) + throw new IllegalArgumentException("name=null"); + else if (!name.equals(this.name)) + throw new IllegalArgumentException("name="+name); + } + + /** + * Gets the list of Directory Scanner configured by this + * configuration. From each element in this list, the + * {@link com.sun.jmx.examples.scandir.ScanManagerMXBean ScanManagerMXBean} + * will create, initialize, and register a {@link + * com.sun.jmx.examples.scandir.DirectoryScannerMXBean}. + * @return The list of Directory Scanner configured by this configuration. + */ + @XmlElementWrapper(name="DirectoryScannerList", + namespace=XmlConfigUtils.NAMESPACE) + @XmlElementRef + public DirectoryScannerConfig[] getScanList() { + return directoryScanners.values().toArray(new DirectoryScannerConfig[0]); + } + + /** + * Sets the list of Directory Scanner configured by this + * configuration. From each element in this list, the + * {@link com.sun.jmx.examples.scandir.ScanManagerMXBean ScanManagerMXBean} + * will create, initialize, and register a {@link + * com.sun.jmx.examples.scandir.DirectoryScannerMXBean}. + * @param scans The list of Directory Scanner configured by this configuration. + */ + public void setScanList(DirectoryScannerConfig[] scans) { + directoryScanners.clear(); + for (DirectoryScannerConfig scan : scans) + directoryScanners.put(scan.getName(),scan); + } + + /** + * Get a directory scanner by its name. + * + * @param name The name of the directory scanner. This is the + * value returned by {@link + * DirectoryScannerConfig#getName()}. + * @return The named {@code DirectoryScannerConfig} + */ + public DirectoryScannerConfig getScan(String name) { + return directoryScanners.get(name); + } + + /** + * Adds a directory scanner to the list. + * <p>If a directory scanner + * configuration by that name already exists in the list, it will + * be replaced by the given <var>scan</var>. + * </p> + * @param scan The {@code DirectoryScannerConfig} to add to the list. + * @return The replaced {@code DirectoryScannerConfig}, or {@code null} + * if there was no {@code DirectoryScannerConfig} by that name + * in the list. + */ + public DirectoryScannerConfig putScan(DirectoryScannerConfig scan) { + return this.directoryScanners.put(scan.getName(),scan); + } + + // XML value of this object. + public String toString() { + return XmlConfigUtils.toString(this); + } + + /** + * Removes the named directory scanner from the list. + * + * @param name The name of the directory scanner. This is the + * value returned by {@link + * DirectoryScannerConfig#getName()}. + * @return The removed {@code DirectoryScannerConfig}, or {@code null} + * if there was no directory scanner by that name in the list. + */ + public DirectoryScannerConfig removeScan(String name) { + return this.directoryScanners.remove(name); + } + + /** + * Gets the initial Result Log Configuration. + * @return The initial Result Log Configuration. + */ + @XmlElement(name="InitialResultLogConfig",namespace=XmlConfigUtils.NAMESPACE) + public ResultLogConfig getInitialResultLogConfig() { + return this.initialResultLogConfig; + } + + /** + * Sets the initial Result Log Configuration. + * @param initialLogConfig The initial Result Log Configuration. + */ + public void setInitialResultLogConfig(ResultLogConfig initialLogConfig) { + this.initialResultLogConfig = initialLogConfig; + } + + /** + * Creates a copy of this object, with the specified name. + * @param newname the name of the copy. + * @return A copy of this object. + **/ + public ScanManagerConfig copy(String newname) { + return copy(newname,this); + } + + // Copy by XML cloning, then change the name. + // + private static ScanManagerConfig + copy(String newname, ScanManagerConfig other) { + ScanManagerConfig newbean = XmlConfigUtils.xmlClone(other); + newbean.name = newname; + return newbean; + } +} |