/* * Copyright 2003-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jetbrains.mps.extapi.persistence; import org.jetbrains.mps.annotations.ImmutableReturn; import org.jetbrains.mps.openapi.persistence.datasource.DataSourceType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.mps.annotations.Immutable; import org.jetbrains.mps.openapi.persistence.ModelFactory; import org.jetbrains.mps.openapi.persistence.ModelFactoryType; import java.util.List; /** * Stores default associations between {@link ModelFactory} and {@link DataSourceType}. * It is a many-to-many mapping. * Also it stores a mapping between model factory types and model factories (which allows user to replace * the bundled persistence we provide) * * @see ModelFactory * @see DataSourceType * * @author apyshkin * @since 12/22/16 */ public interface ModelFactoryRegistry { /** * @return all registered factories */ @ImmutableReturn @NotNull List<ModelFactory> getFactories(); /** * Clients can gain from this logic by replacing the existing model factory logic in * @param factoryId -- unique identifier * @return the last registered factory with the given id */ @Nullable ModelFactory getFactoryByType(@NotNull ModelFactoryType factoryId); /** * Returns the last registered factory (order of registration) which correspond to the specified * <code>key</code>. * * Must be a shorthand for <code>getModelFactories(dataSourceType)?.getLast()</code> * * @return null if there is no model factory which is registered to the specified data source */ @Nullable ModelFactory getDefaultModelFactory(@NotNull DataSourceType dataSourceType); /** * @return all the registered factories for the provided data source type sorted: * 1. by the preferences of the model factory ({@link ModelFactory#getPreferredDataSourceTypes()}, * 2. in the <em>reverse</em> order of registration: the last one has a top priority */ @ImmutableReturn @NotNull List<ModelFactory> getModelFactories(@NotNull DataSourceType dataSourceType); /** * @return all the factory types registered */ @ImmutableReturn @NotNull List<ModelFactoryType> getFactoryTypes(); }