blob: bca689ace3fac02c9075bf9d9aa4e9b77ff61e6d [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.netbeans.modules.payara.jakartaee;
import java.io.File;
import java.util.List;
import java.util.Set;
import javax.enterprise.deploy.spi.Target;
import javax.enterprise.deploy.spi.status.ProgressEvent;
import javax.enterprise.deploy.spi.status.ProgressListener;
import javax.enterprise.deploy.spi.status.ProgressObject;
import org.netbeans.modules.payara.tooling.TaskEvent;
import org.netbeans.modules.payara.tooling.TaskState;
import org.netbeans.modules.payara.eecommon.api.JDBCDriverDeployHelper;
import org.netbeans.modules.payara.jakartaee.ide.MonitorProgressObject;
import org.netbeans.modules.payara.spi.PayaraModule;
import org.netbeans.modules.j2ee.deployment.common.api.Datasource;
import org.netbeans.modules.j2ee.deployment.plugins.spi.JDBCDriverDeployer;
import org.netbeans.modules.j2ee.deployment.plugins.spi.OptionalDeploymentManagerFactory;
import org.openide.util.RequestProcessor;
public class JDBCDriverDeployerImpl implements JDBCDriverDeployer {
final private File driverLoc;
final private PayaraModule commonSupport;
final private boolean isLocal;
private Hk2DeploymentManager dm;
public JDBCDriverDeployerImpl(Hk2DeploymentManager dm, OptionalDeploymentManagerFactory odmf) {
this.dm = dm;
commonSupport = dm.getCommonServerSupport();
String domainDir = commonSupport.getInstanceProperties().get(PayaraModule.DOMAINS_FOLDER_ATTR);
if (null == domainDir || domainDir.trim().length() < 1) {
isLocal = false;
} else {
isLocal = true;
}
String domain = commonSupport.getInstanceProperties().get(PayaraModule.DOMAIN_NAME_ATTR);
driverLoc = new File(domainDir + File.separator + domain + File.separator + "lib");
}
@Override
public boolean supportsDeployJDBCDrivers(Target target) {
boolean supported = isLocal;
// todo -- allow the user to turn this deployment operation OFF.
if (supported) {
supported = Boolean.parseBoolean(commonSupport.getInstanceProperties().get(PayaraModule.DRIVER_DEPLOY_FLAG));
}
return supported;
}
@Override
public ProgressObject deployJDBCDrivers(Target target, Set<Datasource> datasources) {
List urls = JDBCDriverDeployHelper.getMissingDrivers(getDriverLocations(), datasources);
final MonitorProgressObject startProgress = new MonitorProgressObject(dm,null);
ProgressObject retVal = JDBCDriverDeployHelper.getProgressObject(driverLoc, urls);
if (urls.size() > 0) {
retVal.addProgressListener(new ProgressListener() {
@Override
public void handleProgressEvent(ProgressEvent event) {
// todo -- enable when this is ready
if (event.getDeploymentStatus().isCompleted()) {
commonSupport.restartServer(startProgress);
} else {
startProgress.fireHandleProgressEvent(event.getDeploymentStatus());
}
}
});
} else {
startProgress.operationStateChanged(TaskState.COMPLETED,
TaskEvent.CMD_COMPLETED, "no deployment necessary");
}
RequestProcessor.getDefault().post((Runnable) retVal);
return startProgress; // new JDBCDriverDeployHelper.getProgressObject(dmp.getDriverLocation(), datasources);
}
private File[] getDriverLocations(){
String installLoc = commonSupport.getInstanceProperties().get(PayaraModule.PAYARA_FOLDER_ATTR);
File installLib = new File (installLoc + File.separator + "lib"); //NOI18N
File[] locs = {driverLoc, installLib};
return locs;
}
}