/*
* 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.operations;
import org.apache.geode.DataSerializer;
import org.apache.geode.SerializationException;
import org.apache.geode.internal.cache.EntryEventImpl;
/**
* Encapsulates a region operation that requires both key and serialized value for the pre-operation
* and post-operation cases.
*
* @since GemFire 5.5
* @deprecated since Geode1.0, use {@link org.apache.geode.security.ResourcePermission} instead
*/
public abstract class KeyValueOperationContext extends KeyOperationContext {
/**
* The value of the create/update operation.
*
* @since GemFire 6.5
*/
private Object value;
/**
* True when the serialized object is a normal object; false when it is a raw byte array.
*/
private boolean isObject;
/**
* Constructor for the operation.
*
* @param key the key for this operation
* @param value the value for this operation
* @param isObject true when the value is an object; false when it is a raw byte array
* @since GemFire 6.5
*/
public KeyValueOperationContext(Object key, Object value, boolean isObject) {
super(key);
setValue(value, isObject);
// this.value = value;
// this.isObject = isObject;
}
/**
* Constructor for the operation.
*
* @param key the key for this operation
* @param value the value for this operation
* @param isObject true when the value is an object; false when it is a raw byte array
* @param postOperation true if the context is at the time of sending updates
* @since GemFire 6.5
*/
public KeyValueOperationContext(Object key, Object value, boolean isObject,
boolean postOperation) {
super(key, postOperation);
setValue(value, isObject);
// this.value = value;
// this.isObject = isObject;
}
/**
* Get the serialized value for this operation.
*
* @return the serialized value for this operation or null if the value is not serialized
*/
public byte[] getSerializedValue() {
if (isObject()) {
Object tmp = this.value;
if (tmp instanceof byte[]) {
return (byte[]) tmp;
}
}
return null;
}
/**
* Get the deserialized value for this operation. Note that if the value is serialized this method
* will attempt to deserialize it. If PDX read-serialized is set to true and the value was
* serialized with PDX then this method will return a PdxInstance.
*
* @return the deserialized value for this operation
* @throws SerializationException if deserialization of the value fails
* @since Geode 1.0
*/
public Object getDeserializedValue() throws SerializationException {
byte[] blob = getSerializedValue();
if (blob != null) {
return EntryEventImpl.deserialize(blob);
}
return this.value;
}
/**
* Get the value for this operation. Note that if the value is serialized then a byte array will
* be returned that contains the serialized bytes. To figure out if the returned byte array
* contains serialized bytes or is the deserialized value call {@link #isObject()}. If you need to
* deserialize the serialized bytes use {@link DataSerializer#readObject(java.io.DataInput)} or
* you can just call {@link #getDeserializedValue()}.
*
* @return the value for this operation
* @since GemFire 6.5
*/
public Object getValue() {
return this.value;
}
/**
* Return true when the value is an object and not a raw byte array.
*
* @return true when the value is an object; false when it is a raw byte array
*/
public boolean isObject() {
return this.isObject;
}
/**
* Set the serialized value object for this operation.
*
* @param serializedValue the serialized value for this operation
* @param isObject true when the value is an object; false when it is a raw byte array
*/
public void setSerializedValue(byte[] serializedValue, boolean isObject) {
setValue(serializedValue, isObject);
}
/**
* Set the result value of the object for this operation.
*
* @param value the result of this operation; can be a serialized byte array or a deserialized
* object
* @param isObject true when the value is an object (either serialized or deserialized); false
* when it is a raw byte array
* @since GemFire 6.5
*/
public void setValue(Object value, boolean isObject) {
this.value = value;
this.isObject = isObject;
}
}