Package org.sonatype.nexus.component.services.internal.adapter

Source Code of org.sonatype.nexus.component.services.internal.adapter.EntityAdapterRegistryImpl

/*
* Sonatype Nexus (TM) Open Source Version
* Copyright (c) 2007-2014 Sonatype, Inc.
* All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions.
*
* This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0,
* which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html.
*
* Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks
* of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the
* Eclipse Foundation. All other trademarks are the property of their respective owners.
*/
package org.sonatype.nexus.component.services.internal.adapter;

import java.util.Set;
import java.util.concurrent.ConcurrentMap;

import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Provider;
import javax.inject.Singleton;

import org.sonatype.nexus.component.model.Asset;
import org.sonatype.nexus.component.model.Component;
import org.sonatype.nexus.component.services.adapter.AssetAdapter;
import org.sonatype.nexus.component.services.adapter.ComponentAdapter;
import org.sonatype.nexus.component.services.adapter.EntityAdapterRegistry;
import org.sonatype.nexus.component.services.adapter.EntityAdapterSupport;
import org.sonatype.nexus.component.services.internal.storage.ComponentMetadataDatabase;
import org.sonatype.nexus.orient.DatabaseInstance;

import com.google.common.collect.Maps;
import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx;
import com.orientechnologies.orient.core.metadata.schema.OSchema;

import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;

/**
* Default {@link EntityAdapterRegistry} implementation.
*
* @since 3.0
*/
@Named
@Singleton
public class EntityAdapterRegistryImpl
    extends EntityAdapterSupport
    implements EntityAdapterRegistry
{
  private final Provider<DatabaseInstance> databaseInstance;

  private final ConcurrentMap<Class<? extends Asset>, AssetAdapter<? extends Asset>>
      assetAdapters = Maps.newConcurrentMap();

  private final ConcurrentMap<Class<? extends Component>, ComponentAdapter<? extends Component>>
      componentAdapters = Maps.newConcurrentMap();

  @Inject
  public EntityAdapterRegistryImpl(@Named(ComponentMetadataDatabase.NAME) Provider<DatabaseInstance> databaseInstance) {
    this.databaseInstance = checkNotNull(databaseInstance);
  }

  @Override
  public Set<Class<? extends Asset>> assetClasses() {
    return assetAdapters.keySet();
  }

  @Override
  public Set<Class<? extends Component>> componentClasses() {
    return componentAdapters.keySet();
  }

  @Override
  public <T extends Asset> void registerAssetAdapter(final AssetAdapter<T> adapter) {
    Class<T> entityClass = checkNotNull(adapter).getEntityClass();
    checkState(assetAdapters.putIfAbsent(entityClass, adapter) == null,
        "Asset adapter already registered for class %s", adapter.getEntityClass());
    try (ODatabaseDocumentTx db = databaseInstance.get().acquire()) {
      OSchema schema = db.getMetadata().getSchema();
      adapter.createStorageClass(schema);
    }
  }

  @Override
  public <T extends Component> void registerComponentAdapter(final ComponentAdapter<T> adapter) {
    Class<T> entityClass = checkNotNull(adapter).getEntityClass();
    checkState(componentAdapters.putIfAbsent(entityClass, adapter) == null,
        "Component adapter already registered for class %s", adapter.getEntityClass());
    try (ODatabaseDocumentTx db = databaseInstance.get().acquire()) {
      OSchema schema = db.getMetadata().getSchema();
      adapter.createStorageClass(schema);
    }
  }

  @Override
  public <T extends Asset> void unregisterAssetAdapter(final Class<T> entityClass) {
    assetAdapters.remove(entityClass);
  }

  @Override
  public <T extends Component> void unregisterComponentAdapter(final Class<T> entityClass) {
    componentAdapters.remove(entityClass);
  }

  @Nullable
  @Override
  @SuppressWarnings({"unchecked"})
  public <T extends Asset> AssetAdapter<T> getAssetAdapter(final Class<T> entityClass) {
    return (AssetAdapter<T>) assetAdapters.get(entityClass);
  }

  @Nullable
  @Override
  @SuppressWarnings({"unchecked"})
  public <T extends Component> ComponentAdapter<T> getComponentAdapter(final Class<T> entityClass) {
    return (ComponentAdapter<T>) componentAdapters.get(entityClass);
  }
}
TOP

Related Classes of org.sonatype.nexus.component.services.internal.adapter.EntityAdapterRegistryImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.