
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
 * agreements. See the NOTICE file distributed with this work for additional information regarding
 * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance with the License. You may obtain a
 * copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */

package org.apache.geode.cache.configuration;

import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;

import com.fasterxml.jackson.annotation.JsonProperty;

import org.apache.geode.annotations.Experimental;

/**
 *
 * A "disk-store" element specifies a DiskStore for persistence.
 *
 *
 * <p>
 * Java class for disk-store-type complex type.
 *
 * <p>
 * The following schema fragment specifies the expected content contained within this class.
 *
 * <pre>
 * &lt;complexType name="disk-store-type">
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element name="disk-dirs" type="{http://geode.apache.org/schema/cache}disk-dirs-type" minOccurs="0"/>
 *       &lt;/sequence>
 *       &lt;attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
 *       &lt;attribute name="auto-compact" type="{http://www.w3.org/2001/XMLSchema}boolean" />
 *       &lt;attribute name="compaction-threshold" type="{http://www.w3.org/2001/XMLSchema}string" />
 *       &lt;attribute name="allow-force-compaction" type="{http://www.w3.org/2001/XMLSchema}boolean" />
 *       &lt;attribute name="max-oplog-size" type="{http://www.w3.org/2001/XMLSchema}string" />
 *       &lt;attribute name="time-interval" type="{http://www.w3.org/2001/XMLSchema}string" />
 *       &lt;attribute name="write-buffer-size" type="{http://www.w3.org/2001/XMLSchema}string" />
 *       &lt;attribute name="queue-size" type="{http://www.w3.org/2001/XMLSchema}string" />
 *       &lt;attribute name="disk-usage-warning-percentage" type="{http://www.w3.org/2001/XMLSchema}string" />
 *       &lt;attribute name="disk-usage-critical-percentage" type="{http://www.w3.org/2001/XMLSchema}string" />
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 *
 *
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "disk-store-type", namespace = "http://geode.apache.org/schema/cache",
    propOrder = {"diskDirs"})
@Experimental
public class DiskStoreType extends CacheElement {

  @XmlElement(name = "disk-dirs", namespace = "http://geode.apache.org/schema/cache")
  protected DiskDirsType diskDirs;
  @XmlAttribute(name = "name", required = true)
  protected String name;
  @XmlAttribute(name = "auto-compact")
  protected Boolean autoCompact;
  @XmlAttribute(name = "compaction-threshold")
  protected String compactionThreshold;
  @XmlAttribute(name = "allow-force-compaction")
  protected Boolean allowForceCompaction;
  @XmlAttribute(name = "max-oplog-size")
  protected String maxOplogSize;
  @XmlAttribute(name = "time-interval")
  protected String timeInterval;
  @XmlAttribute(name = "write-buffer-size")
  protected String writeBufferSize;
  @XmlAttribute(name = "queue-size")
  protected String queueSize;
  @XmlAttribute(name = "disk-usage-warning-percentage")
  protected String diskUsageWarningPercentage;
  @XmlAttribute(name = "disk-usage-critical-percentage")
  protected String diskUsageCriticalPercentage;

  @Override
  @JsonProperty(value = "name")
  public String getId() {
    return getName();
  }

  /**
   * Gets the value of the name property.
   *
   * possible object is
   * {@link String }
   *
   */
  public String getName() {
    return name;
  }

  public List<DiskDirType> getDiskDirs() {
    if (diskDirs == null) {
      diskDirs = new DiskDirsType();
    }
    return diskDirs.getDiskDirs();
  }

  public void setDiskDirs(List<DiskDirType> diskDirs) {
    getDiskDirs().clear();
    getDiskDirs().addAll(diskDirs);
  }

  /**
   * Sets the value of the name property.
   *
   * allowed object is
   * {@link String }
   *
   */
  public void setName(String value) {
    this.name = value;
  }

  /**
   * Gets the value of the autoCompact property.
   *
   * possible object is
   * {@link Boolean }
   *
   */
  public Boolean isAutoCompact() {
    return autoCompact;
  }

  /**
   * Sets the value of the autoCompact property.
   *
   * allowed object is
   * {@link Boolean }
   *
   */
  public void setAutoCompact(Boolean value) {
    this.autoCompact = value;
  }

  /**
   * Gets the value of the compactionThreshold property.
   *
   * possible object is
   * {@link String }
   *
   */
  public String getCompactionThreshold() {
    return compactionThreshold;
  }

  /**
   * Sets the value of the compactionThreshold property.
   *
   * allowed object is
   * {@link String }
   *
   */
  public void setCompactionThreshold(String value) {
    this.compactionThreshold = value;
  }

  /**
   * Gets the value of the allowForceCompaction property.
   *
   * possible object is
   * {@link Boolean }
   *
   */
  public Boolean isAllowForceCompaction() {
    return allowForceCompaction;
  }

  /**
   * Sets the value of the allowForceCompaction property.
   *
   * allowed object is
   * {@link Boolean }
   *
   */
  public void setAllowForceCompaction(Boolean value) {
    this.allowForceCompaction = value;
  }

  /**
   * Gets the value of the maxOplogSize property.
   *
   * possible object is
   * {@link String }
   *
   */
  public String getMaxOplogSize() {
    return maxOplogSize;
  }

  /**
   * Sets the value of the maxOplogSize property.
   *
   * allowed object is
   * {@link String }
   *
   */
  public void setMaxOplogSize(String value) {
    this.maxOplogSize = value;
  }

  /**
   * Gets the value of the timeInterval property.
   *
   * possible object is
   * {@link String }
   *
   */
  public String getTimeInterval() {
    return timeInterval;
  }

  /**
   * Sets the value of the timeInterval property.
   *
   * allowed object is
   * {@link String }
   *
   */
  public void setTimeInterval(String value) {
    this.timeInterval = value;
  }

  /**
   * Gets the value of the writeBufferSize property.
   *
   * possible object is
   * {@link String }
   *
   */
  public String getWriteBufferSize() {
    return writeBufferSize;
  }

  /**
   * Sets the value of the writeBufferSize property.
   *
   * allowed object is
   * {@link String }
   *
   */
  public void setWriteBufferSize(String value) {
    this.writeBufferSize = value;
  }

  /**
   * Gets the value of the queueSize property.
   *
   * possible object is
   * {@link String }
   *
   */
  public String getQueueSize() {
    return queueSize;
  }

  /**
   * Sets the value of the queueSize property.
   *
   * allowed object is
   * {@link String }
   *
   */
  public void setQueueSize(String value) {
    this.queueSize = value;
  }

  /**
   * Gets the value of the diskUsageWarningPercentage property.
   *
   * possible object is
   * {@link String }
   *
   */
  public String getDiskUsageWarningPercentage() {
    return diskUsageWarningPercentage;
  }

  /**
   * Sets the value of the diskUsageWarningPercentage property.
   *
   * allowed object is
   * {@link String }
   *
   */
  public void setDiskUsageWarningPercentage(String value) {
    this.diskUsageWarningPercentage = value;
  }

  /**
   * Gets the value of the diskUsageCriticalPercentage property.
   *
   * possible object is
   * {@link String }
   *
   */
  public String getDiskUsageCriticalPercentage() {
    return diskUsageCriticalPercentage;
  }

  /**
   * Sets the value of the diskUsageCriticalPercentage property.
   *
   * allowed object is
   * {@link String }
   *
   */
  public void setDiskUsageCriticalPercentage(String value) {
    this.diskUsageCriticalPercentage = value;
  }

}
