/* * This code is distributed under The GNU Lesser General Public License (LGPLv3) * Please visit GNU site for LGPLv3 http://www.gnu.org/copyleft/lesser.html * * Copyright Denis Pavlov 2009 * Web: http://www.genericdtoassembler.org * SVN: https://svn.code.sf.net/p/geda-genericdto/code/trunk/ * SVN (mirror): http://geda-genericdto.googlecode.com/svn/trunk/ */ package com.inspiresoftware.lib.dto.geda.adapter.repository.impl; import com.inspiresoftware.lib.dto.geda.adapter.repository.AdaptersRepository; import com.inspiresoftware.lib.dto.geda.exception.DuplicateValueConverterKeyException; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * Repository for all adapters. * Rationale - default implementation to provide basic support for value transfer. * <p/> * User: Denis Pavlov * Date: Jan 26, 2010 * Time: 4:13:40 PM */ public class AdaptersRepositoryImpl implements AdaptersRepository { private static final long serialVersionUID = 20100126L; private final Map<String, Object> repository = new ConcurrentHashMap<String, Object>(); /** * Empty constructor. * * use {@link #registerAdapter(String, Object)} to add elements dynamically. */ public AdaptersRepositoryImpl() { // do nothing } /** * IoC constructor. * * @param repository initial repository. */ public AdaptersRepositoryImpl(final Map<String, Object> repository) { this.repository.putAll(repository); } /** {@inheritDoc} */ public Map<String, Object> getAll() { return Collections.unmodifiableMap(repository); } /** {@inheritDoc} */ @SuppressWarnings("unchecked") public <T> T getByKey(final String key) { return (T) repository.get(key); } /** {@inheritDoc} */ public Map<String, Object> getByKeysAsMap(final String... keys) { final Map<String, Object> repo = new HashMap<String, Object>(); if (keys != null) { for (String key : keys) { final Object conv = getByKey(key); if (conv != null) { repo.put(key, conv); } } } return repo; } /** {@inheritDoc} */ public void registerAdapterForced(final String key, final Object adapter) { repository.put(key, adapter); } /** {@inheritDoc} */ public void registerAdapter(final String key, final Object adapter) throws DuplicateValueConverterKeyException { if (repository.containsKey(key)) { throw new DuplicateValueConverterKeyException(key); } registerAdapterForced(key, adapter); } /** {@inheritDoc} */ public void removeAdapter(final String key) { repository.remove(key); } /** {@inheritDoc} */ public void releaseResources() { repository.clear(); } }