package org.openedit.data.lucene;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.openedit.Data;
import org.openedit.MultiValued;
import com.openedit.OpenEditException;
public class DocumentData implements Data, MultiValued
{
protected Document fieldDocument;
public DocumentData()
{
// TODO Auto-generated constructor stub
}
public DocumentData(Document inDoc)
{
setDocument(inDoc);
}
public Document getDocument()
{
return fieldDocument;
}
public void setDocument(Document inDocument)
{
fieldDocument = inDocument;
}
public String get(String inId)
{
return getDocument().get(inId);
}
public String getId()
{
return get("id");
}
public String getName()
{
return get("name");
}
public void setName(String inName)
{
setProperty("name", inName);
}
public void setId(String inNewid)
{
throw new OpenEditException("Search results are not editable");
}
public void setProperty(String inId, String inValue)
{
throw new OpenEditException("Search results are not editable");
}
public Iterator keys()
{
//TODO: Use Strings
return getDocument().getFields().iterator();
}
public String getSourcePath()
{
// TODO Auto-generated method stub
return get("sourcepath");
}
public void setSourcePath(String inSourcepath)
{
throw new OpenEditException("Search results are not editable");
}
public Map getProperties()
{
Map fields = new HashMap(getDocument().getFields().size());
for (Iterator iterator = getDocument().getFields().iterator(); iterator.hasNext();)
{
Field key = (Field)iterator.next();
String value = get(key.name());
fields.put(key.name(),value);
}
return fields;
}
@Override
public void setProperties(Map<String, String> inProperties)
{
// TODO Auto-generated method stub
}
public String toString()
{
if(getName() != null){
return getName();
} else{
return getId();
}
}
public Collection getValues(String inPreference)
{
String val = get(inPreference);
if (val == null)
return null;
String[] vals = null;
if( val.contains("|") )
{
vals = VALUEDELMITER.split(val);
}
else
{
vals = val.split("\\s+"); //legacy
}
Collection collection = Arrays.asList(vals);
//if null check parent
return collection;
}
public void setValues(String inKey, Collection<String> inValues)
{
StringBuffer values = new StringBuffer();
for (Iterator iterator = inValues.iterator(); iterator.hasNext();)
{
String detail = (String) iterator.next();
values.append(detail);
if( iterator.hasNext())
{
values.append(" | ");
}
}
setProperty(inKey,values.toString());
}
}