package org.yamcs.management;
import javax.management.NotCompliantMBeanException;
import javax.management.StandardMBean;
import org.yamcs.tctm.Link;
import org.yamcs.protobuf.YamcsManagement.LinkInfo;
public class LinkControlImpl extends StandardMBean implements LinkControl {
Link link;
LinkInfo linkInfo;
public LinkControlImpl(String archiveInstance, String name, String streamName, String spec, Link link) throws NotCompliantMBeanException {
super(LinkControl.class);
this.link = link;
LinkInfo.Builder linkb = LinkInfo.newBuilder().setInstance(archiveInstance)
.setName(name).setStream(streamName)
.setDisabled(link.isDisabled())
.setStatus(link.getLinkStatus())
.setType(link.getClass().getSimpleName()).setSpec(spec)
.setDataCount(link.getDataCount());
if(link.getDetailedStatus()!=null) {
linkb.setDetailedStatus(link.getDetailedStatus());
}
linkInfo = linkb.build();
}
LinkInfo getLinkInfo(){
return linkInfo;
}
@Override
public String getDetailedStatus() {
return link.getDetailedStatus();
}
@Override
public void disable() {
link.disable();
}
@Override
public void enable() {
link.enable();
}
@Override
public boolean isDisabled() {
return link.isDisabled();
}
/**
* @return true if the link status or datacount has changed since the creation or since the previous call of this method
*
**/
public boolean hasChanged() {
if(!linkInfo.getStatus().equals(link.getLinkStatus())
|| linkInfo.getDisabled()!=link.isDisabled()
|| linkInfo.getDataCount()!=link.getDataCount()
|| !linkInfo.getDetailedStatus().equals(link.getDetailedStatus())) {
linkInfo=LinkInfo.newBuilder(linkInfo).setDisabled(link.isDisabled())
.setStatus(link.getLinkStatus()).setDetailedStatus(link.getDetailedStatus())
.setDataCount(link.getDataCount()).build();
return true;
} else {
return false;
}
}
@Override
public String getType() {
return linkInfo.getType();
}
}