blob: fc7a3e434fc4473a657af5b53d17cad9ad0ab1ee [file] [log] [blame]
/********************************************************************************
* Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
*
* See the NOTICE file(s) distributed with this work for additional
* information regarding copyright ownership.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
********************************************************************************/
package org.eclipse.mdm.api.odsadapter.lookup;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.eclipse.mdm.api.base.model.Entity;
import org.eclipse.mdm.api.base.query.DataAccessException;
import org.eclipse.mdm.api.base.query.QueryService;
import org.eclipse.mdm.api.odsadapter.lookup.config.EntityConfig;
import org.eclipse.mdm.api.odsadapter.lookup.config.EntityConfig.Key;
import org.eclipse.mdm.api.odsadapter.query.ODSModelManager;
/**
* Loads complete {@link Entity}s by using the {@link EntityConfig} identified
* by given {@link Key}.
*
* @since 1.0.0
* @author Viktor Stoehr, Gigatronik Ingolstadt GmbH
*/
public class EntityLoader {
// ======================================================================
// Instance variables
// ======================================================================
private final ODSModelManager modelManager;
private final QueryService queryService;
// ======================================================================
// Constructors
// ======================================================================
/**
* Constructor.
*
* @param modelManager The {@link ODSModelManager}.
*/
public EntityLoader(ODSModelManager modelManager, QueryService queryService) {
this.modelManager = modelManager;
this.queryService = queryService;
}
// ======================================================================
// Public methods
// ======================================================================
/**
* Loads the entity with given instance ID.
*
* @param <T> The entity type.
* @param key Used to resolve the entity configuration.
* @param instanceID The instance ID.
* @return The queried {@code Entity} is returned.
* @throws DataAccessException Thrown if unable to load entities.
*/
public <T extends Entity> T load(Key<T> key, String instanceID) throws DataAccessException {
List<T> entities = loadAll(key, Collections.singletonList(instanceID));
if (entities.size() != 1) {
throw new DataAccessException("Failed to load entity by instance ID.");
}
return entities.get(0);
}
/**
* Loads all entities matching given name pattern.
*
* @param <T> The entity type.
* @param key Used to resolve the entity configuration.
* @param pattern Is always case sensitive and may contain wildcard characters
* as follows: "?" for one matching character and "*" for a
* sequence of matching characters.
* @return A {@link List} with queried entities is returned.
* @throws DataAccessException Thrown if unable to load entities.
*/
public <T extends Entity> List<T> loadAll(Key<T> key, String pattern) throws DataAccessException {
return createRequest(key).loadAll(pattern);
}
/**
* Loads all entities matching given instance IDs.
*
* @param <T> The entity type.
* @param key Used to resolve the entity configuration.
* @param instanceIDs The instance IDs.
* @return A {@link List} with queried entities is returned.
* @throws DataAccessException Thrown if unable to load entities.
*/
public <T extends Entity> List<T> loadAll(Key<T> key, Collection<String> instanceIDs) throws DataAccessException {
return createRequest(key).loadAll(instanceIDs);
}
// ======================================================================
// Private methods
// ======================================================================
/**
* Creates a new {@link EntityRequest} for given {@link Key}.
*
* @param <T> The entity type.
* @param key Used to resolve the entity configuration.
* @return The created {@code EntityRequest} is returned.
*/
private <T extends Entity> EntityRequest<T> createRequest(Key<T> key) {
/*
* TODO: add custom request implementations here!
*/
return new EntityRequest<>(modelManager, queryService, key);
}
}