/**
* Copyright 2014 Confluent Inc.
*
* 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 io.confluent.kafka.schemaregistry;
import io.confluent.kafka.schemaregistry.client.rest.RestService;
import org.eclipse.jetty.server.Server;
import java.util.Properties;
import io.confluent.kafka.schemaregistry.avro.AvroCompatibilityLevel;
import io.confluent.kafka.schemaregistry.rest.SchemaRegistryConfig;
import io.confluent.kafka.schemaregistry.rest.SchemaRegistryRestApplication;
import io.confluent.kafka.schemaregistry.exceptions.SchemaRegistryException;
import io.confluent.kafka.schemaregistry.storage.SchemaRegistry;
import io.confluent.kafka.schemaregistry.zookeeper.SchemaRegistryIdentity;
public class RestApp {
public final Properties prop;
public RestService restClient;
public SchemaRegistryRestApplication restApp;
public Server restServer;
public String restConnect;
public RestApp(int port, String zkConnect, String kafkaTopic) {
this(port, zkConnect, kafkaTopic, AvroCompatibilityLevel.NONE.name);
}
public RestApp(int port, String zkConnect, String kafkaTopic, String compatibilityType) {
this(port, zkConnect, kafkaTopic, compatibilityType, true);
}
public RestApp(int port, String zkConnect, String kafkaTopic,
String compatibilityType, boolean masterEligibility) {
prop = new Properties();
prop.setProperty(SchemaRegistryConfig.PORT_CONFIG, ((Integer) port).toString());
prop.setProperty(SchemaRegistryConfig.KAFKASTORE_CONNECTION_URL_CONFIG, zkConnect);
prop.put(SchemaRegistryConfig.KAFKASTORE_TOPIC_CONFIG, kafkaTopic);
prop.put(SchemaRegistryConfig.COMPATIBILITY_CONFIG, compatibilityType);
prop.put(SchemaRegistryConfig.MASTER_ELIGIBILITY, masterEligibility);
}
public void start() throws Exception {
restApp = new SchemaRegistryRestApplication(prop);
restServer = restApp.createServer();
restServer.start();
restConnect = restServer.getURI().toString();
if (restConnect.endsWith("/"))
restConnect = restConnect.substring(0, restConnect.length()-1);
restClient = new RestService(restConnect);
}
public void stop() throws Exception {
restClient = null;
if (restServer != null) {
restServer.stop();
restServer.join();
}
}
public boolean isMaster() {
return restApp.schemaRegistry().isMaster();
}
public void setMaster(SchemaRegistryIdentity schemaRegistryIdentity)
throws SchemaRegistryException {
restApp.schemaRegistry().setMaster(schemaRegistryIdentity);
}
public SchemaRegistryIdentity myIdentity() {
return restApp.schemaRegistry().myIdentity();
}
public SchemaRegistryIdentity masterIdentity() {
return restApp.schemaRegistry().masterIdentity();
}
public SchemaRegistry schemaRegistry() {
return restApp.schemaRegistry();
}
}