All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.finos.legend.sdlc.server.guice.AbstractBaseModule Maven / Gradle / Ivy

// Copyright 2020 Goldman Sachs
//
// 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 org.finos.legend.sdlc.server.guice;

import com.google.inject.Binder;
import com.google.inject.Provides;
import com.hubspot.dropwizard.guicier.DropwizardAwareModule;
import org.finos.legend.sdlc.server.BaseLegendSDLCServer;
import org.finos.legend.sdlc.server.BaseServer.ServerInfo;
import org.finos.legend.sdlc.server.config.LegendSDLCServerConfiguration;
import org.finos.legend.sdlc.server.domain.api.dependency.DependenciesApi;
import org.finos.legend.sdlc.server.domain.api.dependency.DependenciesApiImpl;
import org.finos.legend.sdlc.server.project.config.ProjectStructureConfiguration;
import org.finos.legend.sdlc.server.project.extension.DefaultProjectStructureExtensionProvider;
import org.finos.legend.sdlc.server.project.extension.ProjectStructureExtension;
import org.finos.legend.sdlc.server.project.extension.ProjectStructureExtensionProvider;
import org.finos.legend.sdlc.server.project.extension.VoidProjectStructureExtensionProvider;
import org.finos.legend.sdlc.server.resources.BackupProjectResource;
import org.finos.legend.sdlc.server.resources.BackupWorkspaceEntitiesResource;
import org.finos.legend.sdlc.server.resources.BackupWorkspaceEntityPathsResource;
import org.finos.legend.sdlc.server.resources.BackupWorkspaceProjectConfigurationResource;
import org.finos.legend.sdlc.server.resources.BackupWorkspaceResource;
import org.finos.legend.sdlc.server.resources.BackupWorkspaceRevisionEntitiesResource;
import org.finos.legend.sdlc.server.resources.BackupWorkspaceRevisionEntityPathsResource;
import org.finos.legend.sdlc.server.resources.BackupWorkspaceRevisionProjectConfigurationResource;
import org.finos.legend.sdlc.server.resources.BackupWorkspaceRevisionsResource;
import org.finos.legend.sdlc.server.resources.ComparisonReviewEntitiesResource;
import org.finos.legend.sdlc.server.resources.ComparisonReviewProjectConfigurationResource;
import org.finos.legend.sdlc.server.resources.ComparisonReviewResource;
import org.finos.legend.sdlc.server.resources.ComparisonWorkspaceResource;
import org.finos.legend.sdlc.server.resources.ConfigurationResource;
import org.finos.legend.sdlc.server.resources.ConflictResolutionProjectResource;
import org.finos.legend.sdlc.server.resources.ConflictResolutionWorkspaceEntitiesResource;
import org.finos.legend.sdlc.server.resources.ConflictResolutionWorkspaceEntityPathsResource;
import org.finos.legend.sdlc.server.resources.ConflictResolutionWorkspaceProjectConfigurationResource;
import org.finos.legend.sdlc.server.resources.ConflictResolutionWorkspaceResource;
import org.finos.legend.sdlc.server.resources.ConflictResolutionWorkspaceRevisionEntitiesResource;
import org.finos.legend.sdlc.server.resources.ConflictResolutionWorkspaceRevisionEntityPathsResource;
import org.finos.legend.sdlc.server.resources.ConflictResolutionWorkspaceRevisionProjectConfigurationResource;
import org.finos.legend.sdlc.server.resources.ConflictResolutionWorkspaceRevisionsResource;
import org.finos.legend.sdlc.server.resources.CurrentUserResource;
import org.finos.legend.sdlc.server.resources.DownstreamDependenciesResource;
import org.finos.legend.sdlc.server.resources.InfoResource;
import org.finos.legend.sdlc.server.resources.IssuesResource;
import org.finos.legend.sdlc.server.resources.ProjectBuildsResource;
import org.finos.legend.sdlc.server.resources.ProjectConfigurationResource;
import org.finos.legend.sdlc.server.resources.ProjectEntitiesResource;
import org.finos.legend.sdlc.server.resources.ProjectEntityPathsResource;
import org.finos.legend.sdlc.server.resources.ProjectEntityRevisionsResource;
import org.finos.legend.sdlc.server.resources.ProjectPackageRevisionsResource;
import org.finos.legend.sdlc.server.resources.ProjectRevisionDependenciesResource;
import org.finos.legend.sdlc.server.resources.ProjectRevisionEntitiesResource;
import org.finos.legend.sdlc.server.resources.ProjectRevisionEntityPathsResource;
import org.finos.legend.sdlc.server.resources.ProjectRevisionProjectConfigurationResource;
import org.finos.legend.sdlc.server.resources.ProjectRevisionsResource;
import org.finos.legend.sdlc.server.resources.ProjectVersionDependenciesResource;
import org.finos.legend.sdlc.server.resources.ProjectsResource;
import org.finos.legend.sdlc.server.resources.ReviewsResource;
import org.finos.legend.sdlc.server.resources.UsersResource;
import org.finos.legend.sdlc.server.resources.VersionBuildsResource;
import org.finos.legend.sdlc.server.resources.VersionEntitiesResource;
import org.finos.legend.sdlc.server.resources.VersionEntityPathsResource;
import org.finos.legend.sdlc.server.resources.VersionProjectConfigurationResource;
import org.finos.legend.sdlc.server.resources.VersionsResource;
import org.finos.legend.sdlc.server.resources.WorkspaceBuildsResource;
import org.finos.legend.sdlc.server.resources.WorkspaceEntitiesResource;
import org.finos.legend.sdlc.server.resources.WorkspaceEntityChangesResource;
import org.finos.legend.sdlc.server.resources.WorkspaceEntityPathsResource;
import org.finos.legend.sdlc.server.resources.WorkspaceEntityRevisionsResource;
import org.finos.legend.sdlc.server.resources.WorkspacePackageRevisionsResource;
import org.finos.legend.sdlc.server.resources.WorkspaceProjectConfigurationResource;
import org.finos.legend.sdlc.server.resources.WorkspaceRevisionDependenciesResource;
import org.finos.legend.sdlc.server.resources.WorkspaceRevisionEntitiesResource;
import org.finos.legend.sdlc.server.resources.WorkspaceRevisionEntityPathsResource;
import org.finos.legend.sdlc.server.resources.WorkspaceRevisionProjectConfigurationResource;
import org.finos.legend.sdlc.server.resources.WorkspaceRevisionsResource;
import org.finos.legend.sdlc.server.resources.WorkspacesResource;
import org.finos.legend.sdlc.server.tools.BackgroundTaskProcessor;

import java.util.List;
import javax.inject.Named;

public abstract class AbstractBaseModule extends DropwizardAwareModule
{
    protected final BaseLegendSDLCServer server;
    protected ProjectStructureExtensionProvider extensionProvider;

    public AbstractBaseModule(BaseLegendSDLCServer server)
    {
        this.server = server;
    }

    @Override
    public void configure(Binder binder)
    {
        configureCommonApis(binder);
        configureApis(binder);

        binder.bind(UserContext.class);
        binder.bind(ProjectStructureConfiguration.class).toProvider(this::getProjectStructureConfiguration);
        binder.bind(ProjectStructureExtensionProvider.class).toProvider(this::getProjectStructureExtensionProvider);
        binder.bind(ServerInfo.class).toProvider(this.server::getServerInfo);
        binder.bind(BackgroundTaskProcessor.class).toProvider(this.server::getBackgroundTaskProcessor);

        bindResources(binder);
        bindFilters(binder);
        bindExceptionMappers(binder);
    }

    private void bindResources(Binder binder)
    {
        binder.bind(ProjectsResource.class);
        binder.bind(WorkspacesResource.class);
        binder.bind(ProjectConfigurationResource.class);
        binder.bind(ConfigurationResource.class);
        binder.bind(ProjectRevisionProjectConfigurationResource.class);
        binder.bind(WorkspaceProjectConfigurationResource.class);
        binder.bind(WorkspaceRevisionProjectConfigurationResource.class);
        binder.bind(ProjectEntitiesResource.class);
        binder.bind(ProjectEntityPathsResource.class);
        binder.bind(ProjectRevisionEntitiesResource.class);
        binder.bind(ProjectRevisionEntityPathsResource.class);
        binder.bind(WorkspaceEntitiesResource.class);
        binder.bind(WorkspaceEntityPathsResource.class);
        binder.bind(WorkspaceEntityChangesResource.class);
        binder.bind(WorkspaceRevisionEntitiesResource.class);
        binder.bind(WorkspaceRevisionEntityPathsResource.class);
        binder.bind(VersionEntitiesResource.class);
        binder.bind(VersionEntityPathsResource.class);
        binder.bind(VersionProjectConfigurationResource.class);
        binder.bind(ProjectRevisionsResource.class);
        binder.bind(ProjectEntityRevisionsResource.class);
        binder.bind(ProjectPackageRevisionsResource.class);
        binder.bind(WorkspaceRevisionsResource.class);
        binder.bind(WorkspaceEntityRevisionsResource.class);
        binder.bind(WorkspacePackageRevisionsResource.class);
        binder.bind(IssuesResource.class);
        binder.bind(UsersResource.class);
        binder.bind(CurrentUserResource.class);
        binder.bind(ReviewsResource.class);
        binder.bind(ProjectBuildsResource.class);
        binder.bind(WorkspaceBuildsResource.class);
        binder.bind(VersionBuildsResource.class);
        binder.bind(VersionsResource.class);
        binder.bind(InfoResource.class);
        binder.bind(ComparisonWorkspaceResource.class);
        binder.bind(ComparisonReviewResource.class);
        binder.bind(ComparisonReviewEntitiesResource.class);
        binder.bind(ComparisonReviewProjectConfigurationResource.class);
        binder.bind(ConflictResolutionProjectResource.class);
        binder.bind(ConflictResolutionWorkspaceResource.class);
        binder.bind(ConflictResolutionWorkspaceEntitiesResource.class);
        binder.bind(ConflictResolutionWorkspaceEntityPathsResource.class);
        binder.bind(ConflictResolutionWorkspaceRevisionsResource.class);
        binder.bind(ConflictResolutionWorkspaceRevisionEntitiesResource.class);
        binder.bind(ConflictResolutionWorkspaceRevisionEntityPathsResource.class);
        binder.bind(ConflictResolutionWorkspaceProjectConfigurationResource.class);
        binder.bind(ConflictResolutionWorkspaceRevisionProjectConfigurationResource.class);
        binder.bind(BackupProjectResource.class);
        binder.bind(BackupWorkspaceResource.class);
        binder.bind(BackupWorkspaceEntitiesResource.class);
        binder.bind(BackupWorkspaceEntityPathsResource.class);
        binder.bind(BackupWorkspaceRevisionsResource.class);
        binder.bind(BackupWorkspaceRevisionEntitiesResource.class);
        binder.bind(BackupWorkspaceRevisionEntityPathsResource.class);
        binder.bind(BackupWorkspaceProjectConfigurationResource.class);
        binder.bind(BackupWorkspaceRevisionProjectConfigurationResource.class);
        binder.bind(DownstreamDependenciesResource.class);
        binder.bind(ProjectRevisionDependenciesResource.class);
        binder.bind(ProjectVersionDependenciesResource.class);
        binder.bind(WorkspaceRevisionDependenciesResource.class);
    }

    private void configureCommonApis(Binder binder)
    {
        binder.bind(DependenciesApi.class).to(DependenciesApiImpl.class);
    }

    protected abstract void configureApis(Binder binder);

    private void bindFilters(Binder binder)
    {

    }

    private void bindExceptionMappers(Binder binder)
    {

    }

    private ProjectStructureConfiguration getProjectStructureConfiguration()
    {
        ProjectStructureConfiguration projectStructureConfiguration = getConfiguration().getProjectStructureConfiguration();
        return (projectStructureConfiguration == null) ? ProjectStructureConfiguration.emptyConfiguration() : projectStructureConfiguration;
    }

    private ProjectStructureExtensionProvider getProjectStructureExtensionProvider()
    {
        if (this.extensionProvider == null)
        {
            this.extensionProvider = resolveProjectStructureExtensionProvider();
        }
        return this.extensionProvider;
    }

    private ProjectStructureExtensionProvider resolveProjectStructureExtensionProvider()
    {
        ProjectStructureConfiguration projectStructureConfiguration = getConfiguration().getProjectStructureConfiguration();
        if (projectStructureConfiguration != null)
        {
            ProjectStructureExtensionProvider configuredProvider = projectStructureConfiguration.getProjectStructureExtensionProvider();
            if (configuredProvider != null)
            {
                return configuredProvider;
            }
            List extensions = projectStructureConfiguration.getProjectStructureExtensions();
            if ((extensions != null) && !extensions.isEmpty())
            {
                return DefaultProjectStructureExtensionProvider.fromExtensions(extensions);
            }
        }
        return new VoidProjectStructureExtensionProvider();
    }

    @Provides
    @Named("applicationName")
    public String provideApplicationName(LegendSDLCServerConfiguration configuration)
    {
        return configuration.getApplicationName();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy