Skip to content

Commit

Permalink
Integrated Satisfiable Target Condition for Command
Browse files Browse the repository at this point in the history
  • Loading branch information
amitjoy committed Feb 14, 2024
1 parent ae39af2 commit 741d563
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 38 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,42 +15,37 @@
******************************************************************************/
package in.bytehue.messaging.mqtt5.provider.command;

import static in.bytehue.messaging.mqtt5.provider.command.MqttCommand.PID;
import static org.osgi.framework.namespace.PackageNamespace.PACKAGE_NAMESPACE;
import static org.osgi.service.condition.Condition.CONDITION_ID;
import static org.osgi.service.condition.Condition.INSTANCE;

import java.io.IOException;
import java.util.Hashtable;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;

import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.ServiceRegistration;
import org.osgi.framework.wiring.BundleWiring;
import org.osgi.service.cm.Configuration;
import org.osgi.service.cm.ConfigurationAdmin;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.condition.Condition;

@Component
public final class GogoCommandActivator {

private static final String CONDITION_VALUE = "gogo-available";
private static final String GOGO_PACKAGE = "org.apache.felix.service.command";

private final BundleContext bundleContext;
private final ConfigurationAdmin configAdmin;
private final AtomicReference<ServiceRegistration<Condition>> ref = new AtomicReference<>();

@Activate
public GogoCommandActivator(
// @formatter:off
final BundleContext bundleContext,
@Reference
final ConfigurationAdmin configAdmin
// @formatter:on
) {
this.configAdmin = configAdmin;
public GogoCommandActivator(final BundleContext bundleContext) {
this.bundleContext = bundleContext;

if (isGogoPackageImported()) {
createGogoCommandConfig();
registerCondition();
}
}

Expand All @@ -66,23 +61,23 @@ private boolean isGogoPackageImported() {
// @formatter:on
}

private void createGogoCommandConfig() {
try {
final Configuration configuration = configAdmin.getConfiguration(PID, "?");
configuration.updateIfDifferent(new Hashtable<>());
} catch (final IOException e) {
throw new RuntimeException(e);
}
private void registerCondition() {
final Map<String, Object> properties = new HashMap<>();
properties.put(CONDITION_ID, CONDITION_VALUE);

final ServiceRegistration<Condition> reg = bundleContext.registerService(Condition.class, INSTANCE,
FrameworkUtil.asDictionary(properties));
ref.set(reg);
}

@Deactivate
private void deleteGogoCommandConfig() {
try {
final Configuration configuration = configAdmin.getConfiguration(PID, "?");
configuration.delete();
} catch (final IOException e) {
throw new RuntimeException(e);
}
private void deregisterCondition() {
ref.getAndUpdate(reg -> {
if (reg != null) {
reg.unregister();
}
return null;
});
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,10 @@
******************************************************************************/
package in.bytehue.messaging.mqtt5.provider.command;

import static in.bytehue.messaging.mqtt5.provider.command.MqttCommand.PID;
import static in.bytehue.messaging.mqtt5.provider.helper.MessageHelper.stackTraceToString;
import static java.nio.charset.StandardCharsets.UTF_8;
import static java.util.Objects.requireNonNull;
import static org.osgi.service.component.annotations.ConfigurationPolicy.REQUIRE;
import static org.osgi.service.condition.Condition.CONDITION_ID;

import java.nio.ByteBuffer;
import java.util.Arrays;
Expand All @@ -32,6 +31,7 @@
import org.osgi.service.component.ComponentServiceObjects;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.propertytypes.SatisfyingConditionTarget;
import org.osgi.service.messaging.Message;
import org.osgi.service.messaging.MessageContext;
import org.osgi.service.messaging.dto.ChannelDTO;
Expand All @@ -53,12 +53,9 @@

// @formatter:off
@Descriptor("MQTT 5 Messaging")
@Component(immediate = true, service = MqttCommand.class)
@SatisfyingConditionTarget("(" + CONDITION_ID +"=gogo-available)")
@FelixGogoCommand(scope = "mqtt", function = { "pub", "sub", "runtime" })
@Component(
immediate = true,
configurationPid = PID,
configurationPolicy = REQUIRE,
service = MqttCommand.class)
public final class MqttCommand {

public static final String PID = "in.bytehue.messaging.mqtt.command";
Expand Down

0 comments on commit 741d563

Please sign in to comment.