All Downloads are FREE. Search and download functionalities are using the official Maven repository.

info.kwarc.sally4.mhw.base.impl.MathHubWorker Maven / Gradle / Ivy

The newest version!
package info.kwarc.sally4.mhw.base.impl;

import info.kwarc.sally4.lmh.factories.LMH;
import info.kwarc.sally4.mhw.base.IMathHubRepository;
import info.kwarc.sally4.mhw.base.IMathHubUser;
import info.kwarc.sally4.mhw.base.IMathHubWorker;
import info.kwarc.sally4.mhw.base.factories.MathHubRepositoryFactory;

import java.util.HashSet;

import org.apache.felix.ipojo.ConfigurationException;
import org.apache.felix.ipojo.Factory;
import org.apache.felix.ipojo.MissingHandlerException;
import org.apache.felix.ipojo.UnacceptableConfiguration;
import org.apache.felix.ipojo.annotations.Bind;
import org.apache.felix.ipojo.annotations.Component;
import org.apache.felix.ipojo.annotations.Invalidate;
import org.apache.felix.ipojo.annotations.Property;
import org.apache.felix.ipojo.annotations.Provides;
import org.apache.felix.ipojo.annotations.Requires;
import org.apache.felix.ipojo.annotations.Unbind;
import org.apache.felix.ipojo.annotations.Validate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component
@Provides(specifications=IMathHubWorker.class)
public class MathHubWorker implements IMathHubWorker {
	final public static String factory_id = "info.kwarc.sally4.mhw.base.impl.MathHubWorker";
	
	Logger log;
	
	public MathHubWorker() {
		log = LoggerFactory.getLogger(getClass());
	}

	@Requires(filter="(factory.name="+MathHubRepository.factory_id+")")
	Factory mathHubRepositoryFactory;
	
	@Property
	String mhwid;
	
	@Requires
	MathHubRepositoryFactory repoFactory;
		
	@Requires(id="mhwuserfilter", filter="(filterThatWillNeverSucceed=1)")
	IMathHubUser user;
	
	@Requires(id="mhwlmhfilter", filter="(filterThatWillNeverSucceed=1)")
	LMH lmh;
	
	HashSet instantiatedRepositories;
	
	public MathHubWorker(IMathHubUser user, LMH lmh) {
		this.user = user;
		this.lmh = lmh;
		init();
	}
	
	
	@Bind(id = "repoMHWIDBindFilter", filter = "(filterThatWillNeverSucceed=1)", aggregate=true, optional=true)
	void bindActiveRepository(IMathHubRepository repo) {
		log.debug(repo.getRepositoryName()+" was added");

		instantiatedRepositories.add(repo.getRepositoryName());
	}

	@Unbind(id = "repoMHWIDUnBindFilter", filter = "(filterThatWillNeverSucceed=1)", aggregate=true, optional=true)
	void unbindActiveRepository(IMathHubRepository repo) {
		log.debug(repo.getRepositoryName()+" was removed");

		instantiatedRepositories.remove(repo.getRepositoryName());
	}

	@Override
	public void ensureRunningRepository(String repoName) {
		if (instantiatedRepositories.contains(repoName)) {
			return;
		}
		log.debug(repoName+" should be created");
		
		if (!lmh.isRepoInstalled(repoName)) {
			lmh.installRepo(repoName);
		}
		
		try {
			repoFactory.createRepository(repoName, lmh.getLMHId(), mhwid, user.getUserId());
		} catch (UnacceptableConfiguration | MissingHandlerException
				| ConfigurationException e) {
			log.error("Error creating repository instance", e);
			e.printStackTrace();
		}
	}
	
	void init() {
		instantiatedRepositories = new HashSet();
		lmh.setMHWID(getMHWID());
	}
	
	@Validate
	void start() {	
		init();
	}
	
	@Invalidate
	void stop() {
	}
	
	@Override
	public IMathHubUser getUser() {
		return user;
	}
	
	@Override
	public LMH getLmh() {
		return lmh;
	}

	@Override
	public String getMHWID() {
		return mhwid;
	}

	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy