/*
* Copyright 2015-2016 OpenCB
*
* 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.opencb.opencga.storage.server.common;
import org.apache.commons.lang3.StringUtils;
import org.opencb.opencga.storage.core.config.StorageConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
/**
* Created by imedina on 02/01/16.
*/
public abstract class AbstractStorageServer {
protected int port;
/**
* This is the default StorageEngine to use when it is not provided by the client.
*/
protected String defaultStorageEngine;
protected static StorageConfiguration storageConfiguration;
protected static Logger logger;
static {
logger = LoggerFactory.getLogger("org.opencb.opencga.storage.server.common.StorageServer");
logger.info("Static block, loading StorageConfiguration");
try {
if (System.getenv("OPENCGA_HOME") != null) {
logger.info("Loading storage configuration from OPENCGA_HOME at '{}'",
System.getenv("OPENCGA_HOME") + "/conf/storage-configuration.yml");
storageConfiguration = StorageConfiguration
.load(new FileInputStream(new File(System.getenv("OPENCGA_HOME") + "/conf/storage-configuration.yml")));
} else {
logger.info("Loading storage configuration from JAR at '{}'",
StorageConfiguration.class.getClassLoader().getResourceAsStream("storage-configuration.yml").toString());
storageConfiguration = StorageConfiguration
.load(StorageConfiguration.class.getClassLoader().getResourceAsStream("storage-configuration.yml"));
}
} catch (IOException e) {
e.printStackTrace();
}
}
public AbstractStorageServer() {
this(storageConfiguration.getServer().getGrpc(), storageConfiguration.getDefaultStorageEngineId());
}
public AbstractStorageServer(int port, String defaultStorageEngine) {
this.port = port;
if (StringUtils.isNotEmpty(defaultStorageEngine)) {
this.defaultStorageEngine = defaultStorageEngine;
} else {
this.defaultStorageEngine = storageConfiguration.getDefaultStorageEngineId();
}
}
public abstract void start() throws Exception;
public abstract void stop() throws Exception;
public abstract void blockUntilShutdown() throws Exception;
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("StorageServer{");
sb.append("port=").append(port);
sb.append(", defaultStorageEngine='").append(defaultStorageEngine).append('\'');
sb.append('}');
return sb.toString();
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public String getDefaultStorageEngine() {
return defaultStorageEngine;
}
public void setDefaultStorageEngine(String defaultStorageEngine) {
this.defaultStorageEngine = defaultStorageEngine;
}
public static StorageConfiguration getStorageConfiguration() {
return storageConfiguration;
}
public static void setStorageConfiguration(StorageConfiguration storageConfiguration) {
AbstractStorageServer.storageConfiguration = storageConfiguration;
}
}