package eu.dnetlib.data.information;

import eu.dnetlib.data.mdstore.IMDStoreService;
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException;

/**
 * Simple mdstore data sink resolver implementation.
 *
 * @author jochen, marko
 *
 */
public class MDStoreDataSinkResolverImpl extends AbstractMDStoreResolver implements DataSinkResolver {

	

	/**
	 * {@inheritDoc}
	 *
	 * @see eu.dnetlib.data.information.DataSinkResolver#resolve(java.lang.String)
	 */
	@Override
	public DataSink resolve(final String descriptor) {

		try {
			final MDStoreParameters params = parseDescriptor(descriptor);
			if (!params.getParameters().containsKey("type")){
				throw new IllegalStateException("cannot parse uri descriptor: missing 'type' parameter for mdstore datastructure access");				
			}
			final IMDStoreService mdStoreService = getMDStoreService(params.getId());
			final MDStoreDataSinkImpl ds = new MDStoreDataSinkImpl();
			ds.setMdStore(mdStoreService, params.getId(), params.getParameters().getProperty("type"));

			return ds;
		} catch (final ISLookUpException e) {
			throw new IllegalStateException(e);
		}
	}




}
