All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.spy.memcached.collection.CollectionStore Maven / Gradle / Ivy

There is a newer version: 1.13.2
Show newest version
/*
 * arcus-java-client : Arcus Java client
 * Copyright 2010-2014 NAVER Corp.
 *
 * 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 net.spy.memcached.collection;

import net.spy.memcached.util.BTreeUtil;

public abstract class CollectionStore {

	protected boolean createKeyIfNotExists = false;
	protected int flags = 0;
	protected T value;
	protected RequestMode requestMode;

	protected CollectionAttributes attribute;
	
	protected byte[] elementFlag;
	
	protected String str;

	public CollectionStore() { }

	public CollectionStore(T value, byte[] elementFlag, boolean createKeyIfNotExists, RequestMode requestMode, CollectionAttributes attr) {
		if (elementFlag != null) {
			if (elementFlag.length < 1 || elementFlag.length > ElementFlagFilter.MAX_EFLAG_LENGTH) {
				throw new IllegalArgumentException("Length of elementFlag must be between 1 and "
						+ ElementFlagFilter.MAX_EFLAG_LENGTH + ".");
			}
		}

		this.value = value;
		this.elementFlag = elementFlag;
		this.createKeyIfNotExists = createKeyIfNotExists;
		this.requestMode = requestMode;
		this.attribute = attr;
	}

	public String stringify() {
		if (str != null) return str;
		
		StringBuilder b = new StringBuilder();

		if (createKeyIfNotExists) {
			b.append("create ").append(flags);
			if (attribute != null) {
				b.append(" ")
						.append((attribute.getExpireTime() == null) ? CollectionAttributes.DEFAULT_EXPIRETIME
								: attribute.getExpireTime());
				b.append(" ")
						.append((attribute.getMaxCount() == null) ? CollectionAttributes.DEFAULT_MAXCOUNT
								: attribute.getMaxCount());

				if (null != attribute.getOverflowAction()) {
					b.append(" ").append(attribute.getOverflowAction());
				}
				
				if (null != attribute.getReadable() && !attribute.getReadable()) {
					b.append(" ").append("unreadable");
				}
			}
			else {
				b.append(" ").append(CollectionAttributes.DEFAULT_EXPIRETIME);
				b.append(" ").append(CollectionAttributes.DEFAULT_MAXCOUNT);
			}
		}
		
		// an optional request mode like noreply, pipe and getrim 
		if (requestMode != null) {
			b.append((b.length() <= 0)? "" : " ").append(requestMode.getAscii());
		}

		str = b.toString();
		return str;
	}
	
	public byte[] getElementFlag() {
		return elementFlag;
	}
	
	public String getElementFlagByHex() {
		if (elementFlag == null) {
			return "";
		}
		return BTreeUtil.toHex(elementFlag);
	}
	
	public boolean iscreateKeyIfNotExists() {
		return createKeyIfNotExists;
	}

	public void setcreateKeyIfNotExists(boolean createKeyIfNotExists) {
		this.createKeyIfNotExists = createKeyIfNotExists;
	}

	public int getFlags() {
		return flags;
	}

	public void setFlags(int flags) {
		this.flags = flags;
	}

	public T getValue() {
		return value;
	}

	public void setValue(T value) {
		this.value = value;
	}
	
	public RequestMode getRequestMode() {
		return requestMode;
	}

	public void setRequestMode(RequestMode requestMode) {
		this.requestMode = requestMode;
	}

	public void setElementFlag(byte[] elementFlag) {
		this.elementFlag = elementFlag;
	}
	
	public void setCollectionAttributes(CollectionAttributes attributes) {
		this.attribute = attributes;
	}
	
	public String toString() {
		return (str != null)? str : stringify();
	}
	
	public abstract String getCommand();
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy