package org.kevoree.tools.test.model; import org.kevoree.ContainerRoot; import org.kevoree.api.ModelService; import org.kevoree.api.handler.LockCallBack; import org.kevoree.api.handler.ModelListener; import org.kevoree.api.handler.UUIDModel; import org.kevoree.api.handler.UpdateCallback; import org.kevoree.factory.DefaultKevoreeFactory; import org.kevoree.factory.KevoreeFactory; import org.kevoree.log.Log; import org.kevoree.pmodeling.api.trace.TraceSequence; import java.util.HashSet; import java.util.Set; import java.util.UUID; /** * * Created by leiko on 1/16/17. */ public class MockModelService implements ModelService { private static final KevoreeFactory factory = new DefaultKevoreeFactory(); private String nodeName; private ContainerRoot currentModel = factory.createContainerRoot().withGenerated_KMF_ID(UUID.randomUUID().toString()); private ContainerRoot pendingModel = null; private Set<ModelListener> listeners = new HashSet<>(); private MockModelService() {} @Override public UUIDModel getCurrentModel() { return new UUIDModel() { @Override public UUID getUUID() { return UUID.fromString(currentModel.getGenerated_KMF_ID()); } @Override public ContainerRoot getModel() { return currentModel; } }; } @Override public ContainerRoot getPendingModel() { return currentModel; } @Override public void compareAndSwap(ContainerRoot model, UUID uuid, UpdateCallback callback) { } @Override public void update(ContainerRoot model, UpdateCallback callback) { factory.root(model); // TODO fake adaptations? currentModel = model; Log.info("MockModelService: model updated for \"{}\"", getNodeName()); this.triggerModelUpdate(); } @Override public void registerModelListener(ModelListener listener) { listeners.add(listener); } @Override public void unregisterModelListener(ModelListener listener) { listeners.remove(listener); } @Override public void acquireLock(LockCallBack callBack, Long timeout) { Log.warn("MockModelService acquireLock not implemented yet"); } @Override public void releaseLock(UUID uuid) { Log.warn("MockModelService releaseLock not implemented yet"); } @Override public String getNodeName() { return nodeName; } @Override public void submitScript(String script, UpdateCallback callback) { Log.warn("MockModelService submitScript not implemented yet"); } @Override public void submitSequence(TraceSequence sequence, UpdateCallback callback) { Log.warn("MockModelService submitSequence not implemented yet"); } public void triggerModelUpdate() { listeners.forEach(ModelListener::modelUpdated); } public static class Builder { private MockModelService service = new MockModelService(); public Builder nodeName(String nodeName) { service.nodeName = nodeName; return this; } public Builder currentModel(ContainerRoot model) { factory.root(model); service.currentModel = model; return this; } public Builder pendingModel(ContainerRoot model) { factory.root(model); service.pendingModel = model; return this; } public MockModelService build() { assert service.nodeName != null : "ModelService nodeName must be specified"; return service; } } }