Skip to content
Snippets Groups Projects
Verified Commit 875b74f5 authored by Timm Fitschen's avatar Timm Fitschen
Browse files

WIP: automatic record state

parent 3f58086d
No related branches found
No related tags found
3 merge requests!21Release v0.4.0,!7F fsm,!6Draft: F acm permissions2
......@@ -15,7 +15,7 @@ import org.caosdb.server.utils.ServerMessages;
*
* @author Timm Fitschen (t.fitschen@indiscale.com)
*/
@JobAnnotation(time = JobExecutionTime.CHECK, transaction = WriteTransaction.class)
@JobAnnotation(time = JobExecutionTime.POST_CHECK, transaction = WriteTransaction.class)
public class CheckStateTransition extends EntityStateJob {
private static final Message TRANSITION_NOT_ALLOWED =
......
package org.caosdb.server.jobs.core;
import java.util.List;
import org.caosdb.server.entity.Message;
import org.caosdb.server.entity.wrapper.Parent;
import org.caosdb.server.entity.wrapper.Property;
import org.caosdb.server.jobs.JobAnnotation;
import org.caosdb.server.jobs.JobExecutionTime;
@JobAnnotation(time = JobExecutionTime.CHECK)
public class InheritInitialState extends EntityStateJob {
@Override
protected void run() {
try {
State parentState = getFirstParentState();
if (parentState != null) {
getEntity().addMessage(parentState);
}
} catch (Message e) {
getEntity().addError(e);
}
}
private State getFirstParentState() throws Message {
for (Parent par : getEntity().getParents()) {
List<Property> stateProperties = getStateProperties(par, false);
if (stateProperties.size() > 0) {
return createState(stateProperties.get(0));
}
}
return null;
}
}
......@@ -7,8 +7,10 @@ import org.caosdb.server.CaosDBServer;
import org.caosdb.server.entity.ClientMessage;
import org.caosdb.server.entity.Entity;
import org.caosdb.server.entity.EntityInterface;
import org.caosdb.server.entity.InsertEntity;
import org.caosdb.server.entity.Message;
import org.caosdb.server.entity.Message.MessageType;
import org.caosdb.server.entity.Role;
import org.caosdb.server.entity.UpdateEntity;
import org.caosdb.server.entity.wrapper.Property;
import org.caosdb.server.jobs.JobAnnotation;
......@@ -43,6 +45,13 @@ public class InitEntityStateJobs extends EntityStateJob implements Observer {
appendJob(CheckStateTransition.class);
appendJob(MakeStateProperty.class);
appendJob(MakeStateMessage.class);
} else if (newState == null
&& getEntity().getRole() == Role.Record
&& getEntity() instanceof InsertEntity) {
appendJob(InheritInitialState.class);
appendJob(CheckStateTransition.class);
appendJob(MakeStateProperty.class);
appendJob(MakeStateMessage.class);
}
}
}
......
package org.caosdb.server.jobs.core;
import java.util.List;
import java.util.Map;
import org.caosdb.server.CaosDBServer;
import org.caosdb.server.entity.Message;
import org.caosdb.server.entity.wrapper.Property;
......@@ -36,26 +37,19 @@ public class MakeStateMessage extends EntityStateJob {
List<Property> stateProperties = getStateProperties(true);
// only add the State during Retrieve. In all other cases, the State is already present.
if (stateProperties != null && getTransaction() instanceof Retrieve) {
String sparse =
getTransaction().getContainer().getFlags().getOrDefault(SPARSE_FLAG, "false");
if ("true".equals(sparse)) {
if (stateProperties != null
&& stateProperties.size() > 0
&& getTransaction() instanceof Retrieve) {
if (isSparse()) {
for (Property s : stateProperties) {
getEntity()
.addMessage(
new ToElementable() {
@Override
public void addToElement(Element ret) {
Element state = new Element(STATE_XML_TAG);
state.setAttribute(STATE_ATTRIBUTE_ID, s.getValue().toString());
ret.addContent(state);
}
});
getEntity().addMessage(getSparseStateMessage(s));
}
} else {
for (Property s : stateProperties) {
State stateMessage = createState(s);
stateMessage.getStateModel();
stateMessage
.getStateModel(); // trigger retrieval of state model because when the XML Writer
// calls the addToElement method, it is to late.
getEntity().addMessage(stateMessage);
}
}
......@@ -65,4 +59,23 @@ public class MakeStateMessage extends EntityStateJob {
}
}
}
private ToElementable getSparseStateMessage(Property s) {
return new ToElementable() {
@Override
public void addToElement(Element ret) {
Element state = new Element(STATE_XML_TAG);
state.setAttribute(STATE_ATTRIBUTE_ID, s.getValue().toString());
ret.addContent(state);
}
};
}
private boolean isSparse() {
Map<String, String> flags = getTransaction().getContainer().getFlags();
if (flags != null) {
return "true".equals(flags.getOrDefault(SPARSE_FLAG, "false"));
}
return false;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment