/**
 *                                                                            
 * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
 *                                                                            
 * All rights reserved. This program and the accompanying materials           
 * are made available under the terms of the Eclipse Public License 2.0        
 * which accompanies this distribution, and is available at                  
 * https://www.eclipse.org/legal/epl-2.0/                                 
 *                                 
 * SPDX-License-Identifier: EPL-2.0                                 
 *                                                                            
 * Contributors:   
 * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation 
 */
package org.eclipse.osbp.osgi.hybrid.api;

import com.github.wolfie.refresher.Refresher;

import org.eclipse.osbp.preferences.ProductConfiguration;

public class HybridPartStateRefresher extends Refresher {

	private static final long serialVersionUID = 2627881764074882845L;
	private boolean fActive;
	private final int fIntervalActive;
	private final int fIntervalInactive;
	
	public HybridPartStateRefresher(RefreshListener listener) {
		fIntervalActive = ProductConfiguration.getHybridRefresherMilliSecsActive();
		fIntervalInactive = ProductConfiguration.getHybridRefresherMilliSecsInactive();
		addListener(listener);
		setActive(true);
	}
	
	public void setActive(boolean active) {
		if	(fActive != active) {
			fActive = active;
			setRefreshInterval(fActive ? fIntervalActive : fIntervalInactive);
		}
	}
	
	public boolean isActive() {
		return fActive;
	}
}
