/* * Copyright (c) 2008-2017, Hazelcast, Inc. All Rights Reserved. * * Licensed 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 com.hazelcast.cache.impl.merge.entry; import com.hazelcast.cache.CacheEntryView; import com.hazelcast.spi.serialization.SerializationService; /** * An implementation of {@link com.hazelcast.cache.CacheEntryView} * for converting key and value to object when they are touched as lazy. */ public class LazyCacheEntryView<K, V> implements CacheEntryView<K, V> { private Object key; private Object value; private long creationTime; private long expirationTime; private long lastAccessTime; private long accessHit; private SerializationService serializationService; public LazyCacheEntryView(Object key, Object value, long creationTime, long expirationTime, long lastAccessTime, long accessHit) { // `null` `serializationService` means, use raw type without any convertion this(key, value, creationTime, expirationTime, lastAccessTime, accessHit, null); } public LazyCacheEntryView(Object key, Object value, long creationTime, long expirationTime, long lastAccessTime, long accessHit, SerializationService serializationService) { this.key = key; this.value = value; this.creationTime = creationTime; this.expirationTime = expirationTime; this.lastAccessTime = lastAccessTime; this.accessHit = accessHit; this.serializationService = serializationService; } @Override public K getKey() { // `null` `serializationService` means, use raw type without any convertion if (serializationService != null) { key = serializationService.toObject(key); } return (K) key; } @Override public V getValue() { // `null` `serializationService` means, use raw type without any convertion if (serializationService != null) { value = serializationService.toObject(value); } return (V) value; } @Override public long getCreationTime() { return creationTime; } @Override public long getExpirationTime() { return expirationTime; } @Override public long getLastAccessTime() { return lastAccessTime; } @Override public long getAccessHit() { return accessHit; } }