package rocks.inspectit.ui.rcp.preferences.valueproviders;
import java.util.Objects;
import rocks.inspectit.shared.cs.storage.LocalStorageData;
import rocks.inspectit.ui.rcp.InspectIT;
import rocks.inspectit.ui.rcp.preferences.PreferenceException;
import rocks.inspectit.ui.rcp.preferences.PreferencesConstants;
import rocks.inspectit.ui.rcp.preferences.valueproviders.PreferenceValueProviderFactory.PreferenceValueProvider;
import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition;
import rocks.inspectit.ui.rcp.repository.RepositoryDefinition;
import rocks.inspectit.ui.rcp.repository.StorageRepositoryDefinition;
/**
* Preference value provider that tries to save and load the last selected repository.
*
* @author Ivan Senic
*
*/
public class LastSelectedRepositoryPreferenceValueProvider extends PreferenceValueProvider<RepositoryDefinition> {
/**
* {@inheritDoc}
*/
@Override
public boolean isObjectValid(Object object) {
return object instanceof RepositoryDefinition;
}
/**
* {@inheritDoc}
*/
@Override
public String getValueForObject(RepositoryDefinition repositoryDefinition) throws PreferenceException {
StringBuilder stringBuilder = new StringBuilder();
if (repositoryDefinition instanceof CmrRepositoryDefinition) {
stringBuilder.append(CmrRepositoryDefinition.class.getName());
stringBuilder.append(PreferencesConstants.PREF_SPLIT_REGEX);
stringBuilder.append(((CmrRepositoryDefinition) repositoryDefinition).getIp());
stringBuilder.append(PreferencesConstants.PREF_SPLIT_REGEX);
stringBuilder.append(((CmrRepositoryDefinition) repositoryDefinition).getPort());
stringBuilder.append(PreferencesConstants.PREF_SPLIT_REGEX);
} else if (repositoryDefinition instanceof StorageRepositoryDefinition) {
stringBuilder.append(StorageRepositoryDefinition.class.getName());
stringBuilder.append(PreferencesConstants.PREF_SPLIT_REGEX);
stringBuilder.append(((StorageRepositoryDefinition) repositoryDefinition).getLocalStorageData().getId());
stringBuilder.append(PreferencesConstants.PREF_SPLIT_REGEX);
}
return stringBuilder.toString();
}
/**
* {@inheritDoc}
*/
@Override
public RepositoryDefinition getObjectFromValue(String value) throws PreferenceException {
String[] splitted = value.split(PreferencesConstants.PREF_SPLIT_REGEX);
if (splitted.length > 0) {
String repositoryType = splitted[0];
if (Objects.equals(repositoryType, CmrRepositoryDefinition.class.getName())) {
if (splitted.length == 3) {
String ip = splitted[1];
String port = splitted[2];
for (CmrRepositoryDefinition cmrRepositoryDefinition : InspectIT.getDefault().getCmrRepositoryManager().getCmrRepositoryDefinitions()) {
if (Objects.equals(cmrRepositoryDefinition.getIp(), ip) && Objects.equals(String.valueOf(cmrRepositoryDefinition.getPort()), port)) {
return cmrRepositoryDefinition;
}
}
} else {
throw new PreferenceException("Error trying to create last selected repository and agent from preference store.");
}
} else if (Objects.equals(repositoryType, StorageRepositoryDefinition.class.getName())) {
if (splitted.length == 2) {
String storageId = splitted[1];
for (LocalStorageData localStorageData : InspectIT.getDefault().getInspectITStorageManager().getMountedAvailableStorages()) {
if (Objects.equals(localStorageData.getId(), storageId)) {
try {
return InspectIT.getDefault().getInspectITStorageManager().getStorageRepositoryDefinition(localStorageData);
} catch (Exception e) {
throw new PreferenceException("Error trying to create a Storage repository definition from preference store.", e);
}
}
}
} else {
throw new PreferenceException("Error trying to create last selected repository and agent from preference store.");
}
}
}
return null;
}
}