view lucene/src/luan/modules/lucene/FieldTable.java @ 234:b25feac318d8

add lucene jar and minor changes git-svn-id: https://luan-java.googlecode.com/svn/trunk@235 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Thu, 02 Oct 2014 20:08:39 +0000
parents ef39bc4d3f70
children 3e68917a0dc6
line wrap: on
line source

package luan.modules.lucene;

import java.util.Map;
import java.util.HashMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.Iterator;
import luan.AbstractLuanTable;


class FieldTable extends AbstractLuanTable {
	final Map<String,String> map = new ConcurrentHashMap<String,String>();
	final Map<String,String> reverseMap = new ConcurrentHashMap<String,String>();

	FieldTable() {
		put("type","type index");
		put("id","id index");
	}

	@Override public void put(Object key,Object value) {
		if( !(key instanceof String) )
			throw new UnsupportedOperationException("key must be string");
		String name = (String)key;
		if( value==null ) {  // delete
			reverseMap.remove(map.remove(name));
			return;
		}
		if( !(value instanceof String) )
			throw new UnsupportedOperationException("value must be string");
		String field = (String)value;
		String oldField = map.put(name,field);
		if( oldField != null )
			reverseMap.remove(oldField);
		String oldName = reverseMap.put(field,name);
		if( oldName != null ) {
			reverseMap.put(field,oldName);
			map.remove(name);
			throw new IllegalArgumentException("field '"+oldName+"' is already assigned to '"+field+"'");
		}
	}

	@Override public final Object get(Object key) {
		return map.get(key);
	}

	@Override public final Iterator<Map.Entry<Object,Object>> iterator() {
		return new HashMap<Object,Object>(map).entrySet().iterator();
	}

	@Override protected String type() {
		return "lucene-field-table";
	}
}