/*-
 * ~~~~~~licensing~~~~~~
 * init-manager
 * ==========
 * Copyright (C) 2020 - 2025 EmDev LLC
 * ==========
 * You may not use this file except in accordance with the License Terms of the Copyright
 * Holder located at: https://entaxy.ru/eula . All copyrights, all intellectual property
 * rights to the Software and any copies are the property of the Copyright Holder. Unless
 * it is explicitly allowed the Copyright Holder, the User is prohibited from using the
 * Software for commercial purposes to provide services to third parties.
 * 
 * The Copyright Holder hereby declares that the Software is provided on an "AS IS".
 * Under no circumstances does the Copyright Holder guarantee or promise that the
 * Software provided by him will be suitable or not suitable for the specific purposes
 * of the User, that the Software will meet all commercial and personal subjective
 * expectations of the User, that the Software will work properly, without technical
 * errors, quickly and uninterruptedly.
 * 
 * Under no circumstances shall the Copyright Holder or its Affiliates is not liable
 * to the User for any direct or indirect losses of the User, his expenses or actual
 * damage, including, downtime; loss of bussines; lost profit; lost earnings; loss
 * or damage to data, property, etc.
 * ~~~~~~/licensing~~~~~~
 */
package ru.entaxy.esb.platform.runtime.core.initializer.api;

import org.osgi.framework.BundleContext;

public interface Initializer {

	public static interface Callback {
		public void inited(Initializer owner);
	}
	
	public static final String INITIALIZER_CLASS_HEADER = "Entaxy-Initializer-Class";
	
	
	/*
	 * Query string params for bundle manifest header Entaxy-Initializer-Class
	 * - id - initializer ID (className by default)
	 * - depends-on - list of comma-separated ids on initializers that must be executed first
	 * - repeat - repeat initialization on every start (e.g. liquibase updater) (false by default)
	 * 
	 * The header will look like
	 * Entaxy-Initializer-Class: ru.entaxy.initializer.Init1?id=init_1&depends-on=connection&repeat=true
	 */
	public static final String INITIALIZER_QUERY_STRING_PARAM_ID = "id";
	public static final String INITIALIZER_QUERY_STRING_PARAM_DEPENDS_ON = "depends-on";
	public static final String INITIALIZER_QUERY_STRING_PARAM_REPEAT = "repeat";
	public static final String INITIALIZER_QUERY_STRING_PARAM_RETRIES = "retries";
	public static final String INITIALIZER_QUERY_STRING_PARAM_INTERVAL = "interval";
	
	public void init() throws InitializerException;
	
	/*
	 * Initializer must do cleanup and init again
	 * 
	 * for future use
	 */
	public void reinit() throws InitializerException;
	
	public void setBundleContext(BundleContext context);
	public long getBundleId();
	public String getBundleName();
	
	public void setInitializerId(String id);
	public String getInitializerId();
	
	public void setCallback(Initializer.Callback callback);
}
