/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * 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.kie.workbench.common.screens.datasource.management.backend.core.dbcp; import java.net.URI; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import javax.inject.Named; import org.kie.workbench.common.screens.datasource.management.backend.core.DriverProvider; import org.kie.workbench.common.screens.datasource.management.model.DriverDef; import org.kie.workbench.common.screens.datasource.management.model.DriverDeploymentInfo; import org.kie.workbench.common.screens.datasource.management.util.MavenArtifactResolver; import org.uberfire.io.IOService; /** * Multi-platform implementation of a DriverProvider that will be used in conjunction with the * DBCPDataSourceProvider. */ @ApplicationScoped @Named(value = "DBCPDriverProvider") public class DBCPDriverProvider implements DriverProvider { private MavenArtifactResolver artifactResolver; private Map< String, URI > deployedUris = new HashMap<>(); private Map< String, DriverDeploymentInfo > deploymentInfos = new HashMap<>(); private Map< String, DriverDef > deployedDrivers = new HashMap<>(); public DBCPDriverProvider() { } @Inject public DBCPDriverProvider(MavenArtifactResolver artifactResolver) { this.artifactResolver = artifactResolver; } @Override public DriverDeploymentInfo deploy(DriverDef driverDef) throws Exception { final URI uri = artifactResolver.resolve(driverDef.getGroupId(), driverDef.getArtifactId(), driverDef.getVersion()); if (uri == null) { throw new Exception("Unable to get driver library artifact for driver: " + driverDef); } final DriverDeploymentInfo deploymentInfo = new DriverDeploymentInfo(driverDef.getUuid(), driverDef.getUuid(), true, driverDef.getUuid(), driverDef.getDriverClass()); deployedUris.put(driverDef.getUuid(), uri); deploymentInfos.put(driverDef.getUuid(), deploymentInfo); deployedDrivers.put(driverDef.getUuid(), driverDef); return deploymentInfo; } @Override public DriverDeploymentInfo resync(DriverDef driverDef, DriverDeploymentInfo deploymentInfo) throws Exception { //no more processing required for this driver. return deploymentInfo; } @Override public void undeploy(DriverDeploymentInfo deploymentInfo) throws Exception { deployedUris.remove(deploymentInfo.getDeploymentId()); deploymentInfos.remove(deploymentInfo.getDeploymentId()); deployedDrivers.remove(deploymentInfo.getDeploymentId()); } @Override public DriverDeploymentInfo getDeploymentInfo(String uuid) throws Exception { return deploymentInfos.get(uuid); } @Override public List< DriverDeploymentInfo > getDeploymentsInfo() throws Exception { List< DriverDeploymentInfo > result = new ArrayList<>(); result.addAll(deploymentInfos.values()); return result; } public List< DriverDef > getDeployments() { List< DriverDef > results = new ArrayList<>(); results.addAll(deployedDrivers.values()); return results; } @Override public void loadConfig(Properties properties) { //no additional configurations for this provider. } @Override public void hasStarted() throws Exception { //no additional checks are required for this provider. } }