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

io.toast.tk.swing.agent.interpret.MongoRepositoryCacheWrapper Maven / Gradle / Ivy

The newest version!
package io.toast.tk.swing.agent.interpret;

import java.util.Collection;
import java.util.Objects;
import java.util.UUID;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.bson.types.ObjectId;

import com.google.common.base.Strings;
import com.mongodb.WriteConcern;

import io.toast.tk.core.agent.interpret.WebEventRecord;
import io.toast.tk.dao.domain.impl.repository.ElementImpl;
import io.toast.tk.dao.domain.impl.repository.ProjectImpl;
import io.toast.tk.dao.domain.impl.repository.RepositoryImpl;
import io.toast.tk.dao.service.dao.access.repository.RepositoryDaoService;

public class MongoRepositoryCacheWrapper {

	private static final Logger LOG = LogManager.getLogger(MongoRepositoryCacheWrapper.class);

	Collection cache = null;

	private String host;

	private String port;

	private RepositoryDaoService service;
	
	public MongoRepositoryCacheWrapper(RepositoryDaoService service){
		this.service = service;
		initCache();
	}
	
	private void initCache() {
		try {
			cache = service.find().asList();
		}
		catch(Exception e) {
			LOG.error(String.format("WebApp not active at address %s:%s", host, port), e);
		}
	}
	
	public void saveRepository(RepositoryImpl repo) {
		synchronized (service) {
			service.save(repo, WriteConcern.ACKNOWLEDGED);
			initCache();
		}
	}
	
	public ElementImpl findElement(RepositoryImpl container, WebEventRecord eventRecord) {
		String locator = eventRecord.getTarget();
		for(RepositoryImpl repImpl : cache) {
			if(repImpl.getName().equals(container.getName()) 
					&& Objects.nonNull(repImpl.rows)) {
				for(ElementImpl element : repImpl.rows) {
					if(element.locator.equalsIgnoreCase(locator.toLowerCase())) {
						return element;
					}
				}
			}
		}
		ElementImpl element = buildElement(eventRecord, locator);
		container.rows.add(element);
		return element;
	}

	private ElementImpl buildElement(WebEventRecord eventRecord, String locator) {
		ElementImpl impl = new ElementImpl();
		String name = eventRecord.getComponentName();
		String type = eventRecord.getComponent();
		impl.locator = locator;
		if(locator.contains(":")) {
			impl.setName(locator.split(":")[1]);
		} else {
			String elementName = name == null ? type + "-" + UUID.randomUUID().toString() : name;
			impl.setName(elementName);
		}
		impl.setName(formatLabel(impl.getName()));
		impl.type = getAdjustedType(type);
		impl.method= getMethod(eventRecord);
		impl.setId(ObjectId.get());
		return impl;
	}
	

	public RepositoryImpl findContainer(
		String lastKnownContainer, String type, ProjectImpl project) {
		
		String container = formatLabel(lastKnownContainer);
		
		for(RepositoryImpl page : cache) {
			if(page.getName().equals(container)) {
				if(Objects.nonNull(page.project)){
					if(project.getId().toString().equals(project.getId().toString())){
						return page;
					}
				}
			}
		}
	
		RepositoryImpl page = new RepositoryImpl();
		page.setName(container);
		page.project = project;
		page.type = type;
		cache.add(page);
		
		return page;
	}

	private String formatLabel(
		String name) {
		return name.trim().replace(" ", "_").replace("'", "_").replace("°", "_");
	}

	
	private String getMethod(WebEventRecord eventRecord) {
		if (!Strings.isNullOrEmpty(eventRecord.getPath())){
			return "XPATH";
		}
		return "CSS";
	}

	public String getAdjustedType(String type){
		if("text".equals(type)){
			return "input";
		}
		return type;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy