blob: e8a6e90f12e81ccb0bf36969328f19f21a36794a [file] [log] [blame]
/***********************************************************************************************************************
* Copyright (c) 2008, 2011 Attensity Europe GmbH and brox IT Solutions GmbH.
* All rights reserved. This program and the accompanying materials are made available
* under the terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors: Juergen Schumacher (empolis GmbH) - initial API and implementation
* Andreas Weber (Attensity Europe GmbH) - data model simplification
**********************************************************************************************************************/
package org.eclipse.smila.datamodel.impl;
import java.io.Serializable;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import org.eclipse.smila.datamodel.Any.ValueType;
import org.eclipse.smila.datamodel.AnyMap;
import org.eclipse.smila.datamodel.DataFactory;
import org.eclipse.smila.datamodel.Record;
/**
* Default implementation of SMILA Records.
*
* @author jschumacher
*
*/
public class RecordImpl implements Record, Serializable {
/**
* serializable, of course.
*/
private static final long serialVersionUID = 1L;
/**
* metadata of record.
*/
private final AnyMap _metadata = new AnyMapImpl();
/**
* attachments of record (used linked map to preserve order).
*/
private final Map<String, byte[]> _attachments = new LinkedHashMap<String, byte[]>();
/**
* {@inheritDoc}
*/
@Override
public String getId() {
return _metadata.getStringValue(RECORD_ID);
}
/**
* {@inheritDoc}
*/
@Override
public String getSource() {
return _metadata.getStringValue(SOURCE);
}
/**
* {@inheritDoc}
*/
@Override
public AnyMap getMetadata() {
return _metadata;
}
/**
* {@inheritDoc}
*/
@Override
public int attachmentSize() {
return _attachments.size();
}
/**
* {@inheritDoc}
*/
@Override
public byte[] getAttachment(final String name) {
return _attachments.get(name);
}
/**
* {@inheritDoc}
*/
@Override
public Iterator<String> getAttachmentNames() {
return _attachments.keySet().iterator();
}
/**
* {@inheritDoc}
*/
@Override
public boolean hasAttachments() {
return !_attachments.isEmpty();
}
/**
* {@inheritDoc}
*/
@Override
public boolean hasAttachment(final String name) {
return _attachments.containsKey(name);
}
/**
* {@inheritDoc}
*/
@Override
public void removeAttachment(final String name) {
_attachments.remove(name);
}
/**
* {@inheritDoc}
*/
@Override
public void removeAttachments() {
_attachments.clear();
}
/**
* {@inheritDoc}
*/
@Override
public void setAttachment(final String name, final byte[] attachment) {
_attachments.put(name, attachment);
}
/**
* {@inheritDoc}
*/
@Override
public void setId(final String id) {
if (id != null) {
_metadata.put(RECORD_ID, new ValueImpl(ValueType.STRING, id));
}
}
/**
* {@inheritDoc}
*/
@Override
public void setSource(final String source) {
if (source != null) {
_metadata.put(SOURCE, new ValueImpl(ValueType.STRING, source));
}
}
/**
* {@inheritDoc}
*/
@Override
public String toString() {
final StringBuilder builder = new StringBuilder();
builder.append(_metadata);
if (hasAttachments()) {
builder.append(" + ").append(_attachments.keySet());
}
return builder.toString();
}
/**
* {@inheritDoc}
*/
@Override
public DataFactory getFactory() {
return DefaultDataFactoryImpl.INSTANCE;
}
}