content: package example.localservice;
  
  import org.fourthline.cling.binding.annotations.*;
  import java.beans.PropertyChangeSupport;
  
  @UpnpService(
          serviceId = @UpnpServiceId("SwitchPower"),
          serviceType = @UpnpServiceType(value = "SwitchPower", version = 1)
  )
  public class SwitchPowerWithPropertyChangeSupport {
  
      private final PropertyChangeSupport propertyChangeSupport;
  
      public SwitchPowerWithPropertyChangeSupport() {
          this.propertyChangeSupport = new PropertyChangeSupport(this);
      }
  
      public PropertyChangeSupport getPropertyChangeSupport() {
          return propertyChangeSupport;
      }
  
      @UpnpStateVariable(defaultValue = "0", sendEvents = false)
      private boolean target = false;
  
      @UpnpStateVariable(defaultValue = "0")
      private boolean status = false;
  
      @UpnpAction
      public void setTarget(@UpnpInputArgument(name = "NewTargetValue") boolean newTargetValue) {
  
          boolean targetOldValue = target;
          target = newTargetValue;
          boolean statusOldValue = status;
          status = newTargetValue;
  
          // These have no effect on the UPnP monitoring but it's JavaBean compliant
          getPropertyChangeSupport().firePropertyChange("target", targetOldValue, target);
          getPropertyChangeSupport().firePropertyChange("status", statusOldValue, status);
  
          // This will send a UPnP event, it's the name of a state variable that triggers events
          getPropertyChangeSupport().firePropertyChange("Status", statusOldValue, status);
      }
  
      @UpnpAction(out = @UpnpOutputArgument(name = "RetTargetValue"))
      public boolean getTarget() {
          return target;
      }
  
      @UpnpAction(out = @UpnpOutputArgument(name = "ResultStatus"))
      public boolean getStatus() {
          return status;
      }
  
  }
  