blob: fb482718e2b641a01ff04a800be3d5bb6437db70 [file] [log] [blame]
/*
* 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;
import java.io.ObjectStreamException;
import java.io.Serializable;
import org.apache.geode.annotations.Immutable;
/**
* Enumerated type for region distribution scope.
*
*
*
* @see RegionAttributes#getScope
* @see AttributesFactory#setScope
* @since GemFire 3.0
*/
@Immutable
public class Scope implements Serializable {
private static final long serialVersionUID = 5534399159504301602L;
/**
* The region with this attribute is scoped to this JVM only. Operations and data are not
* distributed to other caches.
*/
@Immutable
public static final Scope LOCAL = new Scope("LOCAL", 0);
/**
* The region or cached object with this attribute is scoped to the distributed cached system; any
* distributed operation will return without waiting for the remote acknowledgment.
*/
@Immutable
public static final Scope DISTRIBUTED_NO_ACK = new Scope("DISTRIBUTED_NO_ACK", 1);
/**
* The region or cached object with this attribute is scoped to the distributed cached system; any
* distributed operation will not return until all the remote acknowledgments come back.
*/
@Immutable
public static final Scope DISTRIBUTED_ACK = new Scope("DISTRIBUTED_ACK", 2);
/**
* The region or cached object with this attribute is scoped to the distributed cached system;
* locking is used for all distributed operations on entries to guarantee consistency across the
* distributed caches.
*/
@Immutable
public static final Scope GLOBAL = new Scope("GLOBAL", 3);
/** The name of this scope. */
private final transient String name;
public final int ordinal;
@Immutable
private static final Scope[] VALUES = {LOCAL, DISTRIBUTED_NO_ACK, DISTRIBUTED_ACK, GLOBAL};
/*
* The following 4 definitions are included for use by the C interface. Any changes to the order
* of the scopes in VALUES must be reflected here and changed in gemfire.h.
*/
static final int SCOPE_LOCAL = 0;
static final int SCOPE_DISTRIBUTED_NO_ACK = 1;
static final int SCOPE_DISTRIBUTED_ACK = 2;
static final int SCOPE_GLOBAL = 3;
private Object readResolve() throws ObjectStreamException {
return fromOrdinal(ordinal); // Canonicalize
}
/** Creates a new instance of Scope. */
private Scope(String name, int ordinal) {
this.name = name;
this.ordinal = ordinal;
}
/** Return the Scope represented by specified ordinal */
public static Scope fromOrdinal(int ordinal) {
return VALUES[ordinal];
}
/**
* Returns whether this is local scope.
*
* @return true if this is LOCAL
*/
public boolean isLocal() {
return this == LOCAL;
}
/**
* Returns whether this is one of the distributed scopes.
*
* @return true if this is any scope other than LOCAL
*/
public boolean isDistributed() {
return this != LOCAL;
}
/**
* Returns whether this is distributed no ack scope.
*
* @return true if this is DISTRIBUTED_NO_ACK
*/
public boolean isDistributedNoAck() {
return this == DISTRIBUTED_NO_ACK;
}
/**
* Returns whether this is distributed ack scope.
*
* @return true if this is DISTRIBUTED_ACK
*/
public boolean isDistributedAck() {
return this == DISTRIBUTED_ACK;
}
/**
* Returns whether this is global scope.
*
* @return true if this is GLOBAL
*/
public boolean isGlobal() {
return this == GLOBAL;
}
/**
* Returns whether acknowledgements are required for this scope.
*
* @return true if this is DISTRIBUTED_ACK or GLOBAL, false otherwise
*/
public boolean isAck() {
return this == DISTRIBUTED_ACK || this == GLOBAL;
}
/**
* Returns a string representation for this scope.
*
* @return String the name of this scope
*/
@Override
public String toString() {
return this.name;
}
public String toConfigTypeString() {
return this.name.toLowerCase().replace("_", "-");
}
/**
* Parse the given string into a Scope
*
* @param scope the provided String form of Scope
* @return the canonical Scope associated with the string
*/
public static Scope fromString(String scope) {
for (int i = 0; i < VALUES.length; i++) {
if (VALUES[i].toString().equals(scope)) {
return VALUES[i];
}
}
throw new IllegalArgumentException(
String.format("%s is not a valid string representation of %s.",
new Object[] {scope, Scope.class.getName()}));
}
}