package rocks.inspectit.ui.rcp.repository;
import java.util.Collection;
import java.util.List;
import com.google.common.base.Objects;
import rocks.inspectit.shared.all.cmr.model.PlatformIdent;
import rocks.inspectit.shared.all.communication.DefaultData;
import rocks.inspectit.shared.all.communication.data.ExceptionSensorData;
import rocks.inspectit.shared.all.communication.data.HttpTimerData;
import rocks.inspectit.shared.all.communication.data.InvocationSequenceData;
import rocks.inspectit.shared.all.communication.data.JmxSensorValueData;
import rocks.inspectit.shared.all.communication.data.SqlStatementData;
import rocks.inspectit.shared.all.communication.data.TimerData;
import rocks.inspectit.shared.all.communication.data.cmr.BusinessTransactionData;
import rocks.inspectit.shared.cs.cmr.service.IBusinessContextManagementService;
import rocks.inspectit.shared.cs.cmr.service.IExceptionDataAccessService;
import rocks.inspectit.shared.cs.cmr.service.IGlobalDataAccessService;
import rocks.inspectit.shared.cs.cmr.service.IHttpTimerDataAccessService;
import rocks.inspectit.shared.cs.cmr.service.IInvocationDataAccessService;
import rocks.inspectit.shared.cs.cmr.service.IJmxDataAccessService;
import rocks.inspectit.shared.cs.cmr.service.ISqlDataAccessService;
import rocks.inspectit.shared.cs.cmr.service.ITimerDataAccessService;
import rocks.inspectit.shared.cs.cmr.service.cache.CachedDataService;
import rocks.inspectit.shared.cs.cmr.service.cache.CachedSpanService;
import rocks.inspectit.shared.cs.indexing.storage.IStorageTreeComponent;
import rocks.inspectit.shared.cs.storage.LocalStorageData;
import rocks.inspectit.ui.rcp.repository.service.storage.StorageServiceProvider;
import rocks.inspectit.ui.rcp.repository.service.storage.StorageSpanService;
/**
* Storage repository definition. This {@link RepositoryDefinition} has a direct usage of a
* {@link CmrRepositoryDefinition} where storage is located.
*
* @author Ivan Senic
*
*/
public class StorageRepositoryDefinition implements RepositoryDefinition {
/**
* {@link CmrRepositoryDefinition}.
*/
private CmrRepositoryDefinition cmrRepositoryDefinition;
/**
* {@link LocalStorageData}.
*/
private LocalStorageData localStorageData;
/**
* {@link IInvocationDataAccessService} service.
*/
private IInvocationDataAccessService invocationDataAccessService;
/**
* {@link IGlobalDataAccessService} service.
*/
private IGlobalDataAccessService globalDataAccessService;
/**
* {@link IJmxDataAccessService} service.
*/
private IJmxDataAccessService jmxDataAccessService;
/**
* Caching component.
*/
private CachedDataService cachedDataService;
/**
* {@link IExceptionDataAccessService}.
*/
private IExceptionDataAccessService exceptionDataAccessService;
/**
* {@link ISqlDataAccessService}.
*/
private ISqlDataAccessService sqlDataAccessService;
/**
* {@link ITimerDataAccessService}.
*/
private ITimerDataAccessService timerDataAccessService;
/**
* {@link IHttpTimerDataAccessService}.
*/
private IHttpTimerDataAccessService httpTimerDataAccessService;
/**
* {@link IBusinessContextDefinition}.
*/
private IBusinessContextManagementService businessContextService;
/**
* {@link CachedSpanService}.
*/
private CachedSpanService spanService;
/**
* {@link StorageServiceProvider} for instantiating storage services.
*/
private StorageServiceProvider storageServiceProvider;
/**
* Indexing tree for storage.
*/
private IStorageTreeComponent<? extends DefaultData> indexingTree;
/**
* Involved agents.
*/
private List<PlatformIdent> agents;
/**
* Collection of {@link BusinessTransactionData} instances to use for this storage.
*/
private Collection<BusinessTransactionData> businessTransactions;
/**
* {@inheritDoc}
*/
@Override
public String getIp() {
return cmrRepositoryDefinition.getIp();
}
/**
* {@inheritDoc}
*/
@Override
public int getPort() {
return cmrRepositoryDefinition.getPort();
}
/**
* {@inheritDoc}
*/
@Override
public String getName() {
return localStorageData.getName();
}
/**
* {@inheritDoc}
*/
@Override
public IInvocationDataAccessService getInvocationDataAccessService() {
return invocationDataAccessService;
}
/**
* {@inheritDoc}
*/
@Override
public ISqlDataAccessService getSqlDataAccessService() {
return sqlDataAccessService;
}
/**
* {@inheritDoc}
*/
@Override
public IExceptionDataAccessService getExceptionDataAccessService() {
return exceptionDataAccessService;
}
/**
* {@inheritDoc}
*/
@Override
public IGlobalDataAccessService getGlobalDataAccessService() {
return globalDataAccessService;
}
/**
* {@inheritDoc}
*/
@Override
public IJmxDataAccessService getJmxDataAccessService() {
return jmxDataAccessService;
}
/**
* {@inheritDoc}
*/
@Override
public CachedDataService getCachedDataService() {
return cachedDataService;
}
/**
* {@inheritDoc}
*/
@Override
public ITimerDataAccessService getTimerDataAccessService() {
return timerDataAccessService;
}
/**
* {@inheritDoc}
*/
@Override
public IHttpTimerDataAccessService getHttpTimerDataAccessService() {
return httpTimerDataAccessService;
}
/**
* {@inheritDoc}
*/
@Override
public IBusinessContextManagementService getBusinessContextMangementService() {
return businessContextService;
}
/**
* {@inheritDoc}
*/
@Override
public CachedSpanService getSpanService() {
return spanService;
}
/**
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
public void initServices() {
// init services
globalDataAccessService = storageServiceProvider.createStorageGlobalDataAccessService(this, localStorageData, (IStorageTreeComponent<DefaultData>) indexingTree, agents);
exceptionDataAccessService = storageServiceProvider.createStorageExceptionDataAccessService(this, localStorageData, (IStorageTreeComponent<ExceptionSensorData>) indexingTree);
invocationDataAccessService = storageServiceProvider.createStorageInvocationDataAccessService(this, localStorageData, (IStorageTreeComponent<InvocationSequenceData>) indexingTree);
sqlDataAccessService = storageServiceProvider.createStorageSqlDataAccessService(this, localStorageData, (IStorageTreeComponent<SqlStatementData>) indexingTree);
timerDataAccessService = storageServiceProvider.createStorageTimerDataAccessService(this, localStorageData, (IStorageTreeComponent<TimerData>) indexingTree);
httpTimerDataAccessService = storageServiceProvider.createStorageHttpTimerDataAccessService(this, localStorageData, (IStorageTreeComponent<HttpTimerData>) indexingTree);
jmxDataAccessService = storageServiceProvider.createStorageJmxDataAccessService(this, localStorageData, (IStorageTreeComponent<JmxSensorValueData>) indexingTree);
businessContextService = storageServiceProvider.createStorageBusinessContextService(this, localStorageData, (IStorageTreeComponent<DefaultData>) indexingTree, businessTransactions);
spanService = new CachedSpanService(new StorageSpanService());
// for storage we use the regular cached data service because ids can never change
cachedDataService = new CachedDataService(globalDataAccessService, businessContextService);
}
/**
* @return the cmrRepositoryDefinition
*/
public CmrRepositoryDefinition getCmrRepositoryDefinition() {
return cmrRepositoryDefinition;
}
/**
* @param cmrRepositoryDefinition
* the cmrRepositoryDefinition to set
*/
public void setCmrRepositoryDefinition(CmrRepositoryDefinition cmrRepositoryDefinition) {
this.cmrRepositoryDefinition = cmrRepositoryDefinition;
}
/**
* @return the storageData
*/
public LocalStorageData getLocalStorageData() {
return localStorageData;
}
/**
* @param localStorageData
* the storageData to set
*/
public void setLocalStorageData(LocalStorageData localStorageData) {
this.localStorageData = localStorageData;
}
/**
* @param storageServiceProvider
* the storageServiceProvider to set
*/
public void setStorageServiceProvider(StorageServiceProvider storageServiceProvider) {
this.storageServiceProvider = storageServiceProvider;
}
/**
* @param indexingTree
* the indexingTree to set
*/
public void setIndexingTree(IStorageTreeComponent<? extends DefaultData> indexingTree) {
this.indexingTree = indexingTree;
}
/**
* @param agents
* the agents to set
*/
public void setAgents(List<PlatformIdent> agents) {
this.agents = agents;
}
/**
* Sets {@link #businessTransactions}.
*
* @param businessTransactions
* a collection of {@link #BusinessTransactionData} instances
*/
public void setBusinessTransactions(Collection<BusinessTransactionData> businessTransactions) {
this.businessTransactions = businessTransactions;
}
/**
* {@inheritDoc}
*/
@Override
public int hashCode() {
return Objects.hashCode(localStorageData);
}
/**
* {@inheritDoc}
*/
@Override
public boolean equals(Object object) {
if (this == object) {
return true;
}
if (object == null) {
return false;
}
if (getClass() != object.getClass()) {
return false;
}
StorageRepositoryDefinition that = (StorageRepositoryDefinition) object;
return Objects.equal(this.localStorageData, that.localStorageData);
}
}