/*******************************************************************************
* Copyright (c) 2012-2016 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.plugin.docker.machine.ext.provider;
import org.eclipse.che.api.core.util.SystemInfo;
import org.eclipse.che.commons.lang.IoUtil;
import org.eclipse.che.inject.CheBootstrap;
import org.eclipse.che.plugin.docker.machine.WindowsHostUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Provider;
import javax.inject.Singleton;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
/**
* Provides path to the configuration folder on hosted machine for mounting it to docker machine.
*
* <p/> It provides different bindings value of Unix and Window OS. <br/>
* Also it can return null value if binding is useless.
*
* @author Sergii Leschenko
*/
@Singleton
public class DockerExtConfBindingProvider implements Provider<String> {
public static final String EXT_CHE_LOCAL_CONF_DIR = "/mnt/che/conf";
private static final String PLUGIN_CONF = "plugin-conf";
private static final String CONTAINER_TARGET = ":" + EXT_CHE_LOCAL_CONF_DIR + ":ro";
private static final Logger LOG = LoggerFactory.getLogger(DockerExtConfBindingProvider.class);
@Override
public String get() {
String localConfDir = System.getenv(CheBootstrap.CHE_LOCAL_CONF_DIR);
if (localConfDir == null) {
return null;
}
File extConfDir = new File(localConfDir, PLUGIN_CONF);
if (!extConfDir.isDirectory()) {
LOG.warn("DockerExtConfBindingProvider",
String.format("%s set to the %s but it must be directory not file", CheBootstrap.CHE_LOCAL_CONF_DIR, localConfDir));
return null;
}
if (SystemInfo.isWindows()) {
try {
final Path cheHome = WindowsHostUtils.ensureCheHomeExist();
final Path plgConfDir = cheHome.resolve(PLUGIN_CONF);
IoUtil.copy(extConfDir, plgConfDir.toFile(), null, true);
return plgConfDir.toString() + CONTAINER_TARGET;
} catch (IOException e) {
LOG.warn(e.getMessage());
throw new RuntimeException(e);
}
} else {
return extConfDir.getAbsolutePath() + CONTAINER_TARGET;
}
}
}