![JAR search and dependency download from the Maven repository](/logo.png)
com.bytex.snamp.configuration.impl.DefaultManagedResourceParser Maven / Gradle / Ivy
package com.bytex.snamp.configuration.impl;
import com.bytex.snamp.SingletonMap;
import com.bytex.snamp.concurrent.LazyReference;
import com.bytex.snamp.configuration.EntityMap;
import com.bytex.snamp.configuration.internal.CMManagedResourceParser;
import com.bytex.snamp.io.IOUtils;
import com.bytex.snamp.io.SerializableMap;
import com.google.common.reflect.TypeToken;
import org.osgi.service.cm.Configuration;
import org.osgi.service.cm.ConfigurationAdmin;
import javax.annotation.Nonnull;
import java.io.IOException;
import java.util.*;
import java.util.regex.Pattern;
import static com.bytex.snamp.MapUtils.getValue;
import static com.bytex.snamp.configuration.impl.SerializableManagedResourceConfiguration.*;
import static com.bytex.snamp.connector.ManagedResourceConnector.CAPABILITY_NAMESPACE;
/**
* @author Roman Sakno
* @version 1.0
* @since 1.0
*/
final class DefaultManagedResourceParser extends AbstractTypedConfigurationParser implements CMManagedResourceParser {
private static final TypeToken> ATTRS_MAP_TYPE = new TypeToken>() {};
private static final TypeToken> EVENTS_MAP_TYPE = new TypeToken>() {};
private static final TypeToken> OPS_MAP_TYPE = new TypeToken>() {};
private static final TypeToken> OVP_SET_TYPE = new TypeToken>() {};
private static final String CONNECTOR_PID_TEMPLATE = CAPABILITY_NAMESPACE + ".%s";
private static final String RESOURCE_NAME_PROPERTY = "$resourceName$";
private static final String GROUP_NAME_PROPERTY = "$groupName$";
private static final String CONNECTION_STRING_PROPERTY = "$connectionString$";
private static final String ATTRIBUTES_PROPERTY = "$attributes$";
private static final String EVENTS_PROPERTY = "$events$";
private static final String OPERATIONS_PROPERTY = "$operations$";
private static final String OVERRIDDEN_PROPS_PROPERTY = "$overridden$";
private static final Pattern CONNECTOR_PID_REPLACEMENT = Pattern.compile(String.format(CONNECTOR_PID_TEMPLATE, ""), Pattern.LITERAL);
private static final String ALL_CONNECTORS_QUERY = String.format("(%s=%s)", SERVICE_PID, String.format(CONNECTOR_PID_TEMPLATE, "*"));
private static final LazyReference INSTANCE = LazyReference.soft();
private DefaultManagedResourceParser() {
super(RESOURCE_NAME_PROPERTY, SerializableAgentConfiguration::getResources);
}
static DefaultManagedResourceParser getInstance(){
return INSTANCE.lazyGet(DefaultManagedResourceParser::new);
}
/**
* Returns managed connector persistent identifier.
* @param connectorType The type of the managed resource connector.
* @return The persistent identifier.
*/
@Override
public String getFactoryPersistentID(final String connectorType){
return String.format(CONNECTOR_PID_TEMPLATE, connectorType);
}
@Override
String getType(final Configuration config) {
return CONNECTOR_PID_REPLACEMENT.matcher(config.getFactoryPid()).replaceFirst("");
}
private static String getConnectionString(final Dictionary resourceConfig) {
return getValue(resourceConfig, CONNECTION_STRING_PROPERTY, Objects::toString).orElse("");
}
private static String getGroupName(final Dictionary resourceConfig) {
return getValue(resourceConfig, GROUP_NAME_PROPERTY, Objects::toString).orElse("");
}
private Map getAttributes(final Dictionary resourceConfig) throws IOException {
return deserialize(ATTRIBUTES_PROPERTY, ATTRS_MAP_TYPE, resourceConfig);
}
private Map getOperations(final Dictionary resourceConfig) throws IOException {
return deserialize(OPERATIONS_PROPERTY, OPS_MAP_TYPE, resourceConfig);
}
private Map getEvents(final Dictionary resourceConfig) throws IOException {
return deserialize(EVENTS_PROPERTY, EVENTS_MAP_TYPE, resourceConfig);
}
private Set getOverriddenProperties(final Dictionary resourceConfig) throws IOException {
return deserialize(OVERRIDDEN_PROPS_PROPERTY, OVP_SET_TYPE, resourceConfig);
}
@Override
void removeAll(final ConfigurationAdmin admin) throws IOException {
removeAll(admin, ALL_CONNECTORS_QUERY);
}
@Override
void populateRepository(final ConfigurationAdmin admin,
final EntityMap output) throws IOException {
populateRepository(admin, ALL_CONNECTORS_QUERY, output);
}
@Override
@Nonnull
public SingletonMap parse(final Dictionary configuration) throws IOException {
final SerializableManagedResourceConfiguration result = new SerializableManagedResourceConfiguration();
result.setConnectionString(getConnectionString(configuration));
result.setGroupName(getGroupName(configuration));
//deserialize attributes
result.setAttributes(getAttributes(configuration));
//deserialize events
result.setEvents(getEvents(configuration));
//deserialize operations
result.setOperations(getOperations(configuration));
//overridden properties
result.getOverriddenProperties().clear();
result.getOverriddenProperties().addAll(getOverriddenProperties(configuration));
//deserialize parameters
return createParserResult(configuration, result, CONNECTION_STRING_PROPERTY, ATTRIBUTES_PROPERTY, EVENTS_PROPERTY, OPERATIONS_PROPERTY, OVERRIDDEN_PROPS_PROPERTY, GROUP_NAME_PROPERTY);
}
@Override
@Nonnull
Dictionary serialize(final SerializableManagedResourceConfiguration resource) throws IOException {
final Dictionary result = new Hashtable<>(4);
result.put(CONNECTION_STRING_PROPERTY, resource.getConnectionString());
result.put(ATTRIBUTES_PROPERTY, IOUtils.serialize(resource.getAttributes()));
result.put(EVENTS_PROPERTY, IOUtils.serialize(resource.getEvents()));
result.put(OPERATIONS_PROPERTY, IOUtils.serialize(resource.getOperations()));
result.put(OVERRIDDEN_PROPS_PROPERTY, IOUtils.serialize(resource.getOverriddenProperties()));
result.put(GROUP_NAME_PROPERTY, resource.getGroupName());
return result;
}
@Override
void saveChanges(final SerializableEntityMap resources,
final ConfigurationAdmin admin) throws IOException {
saveChanges(resources, ALL_CONNECTORS_QUERY, admin);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy