Andre språk: inlineEvent (svensk)
07.06.2018 14:56:29
inlineEvent
inlineEvent
var result = false;
var IndexService = Java.type("se.altrusoft.entitymachine.index.IndexService");
var Schema = Java.type("se.altrusoft.entitymachine.schema.Schema");
var PropertyType = Java.type("se.altrusoft.entitymachine.schema.PropertyType");
var PropertyValue = Java.type("se.altrusoft.entitymachine.entity.PropertyValue");
var PropertyStatus = Java.type("se.altrusoft.entitymachine.entity.PropertyStatus");
var KulturNavPropertyStatus = Java.type("models.KulturNavPropertyStatus");
var SecurityUtils = Java.type("security.SecurityUtils")
var ServiceUtils = Java.type("util.ServiceUtils")
var Constants = Java.type("util.Constants")
var EntityUtils = Java.type("util.EntityUtils")
var UserEnv = Java.type("util.UserEnv")
var UUID = Java.type("java.util.UUID");
var conf = {
Person: [
{
refProperty: "person.birth",
backRefProperty: "person.birth.child"
},
{
refProperty: "person.death",
backRefProperty: "person.death.person"
},
{
refProperty: "person.liferole",
backRefProperty: "person.liferole.person"
},
{
refProperty: "person.occupation",
backRefProperty: "person.occupation.person"
},
{
// Just in case, but haven't seen any instances
refProperty: "person.education",
backRefProperty: "person.education.person"
},
{
refProperty: "person.residence",
backRefProperty: "person.residence.person"
},
{
refProperty: "person.hasworksat",
backRefProperty: "person.hasworksat.person"
},
{
// Just in case, but haven't seen any instances
refProperty: "person.membership",
backRefProperty: "person.membership.person"
},
{
refProperty: "person.marriage",
backRefProperty: "person.marriage.person1"
},
{
refProperty: "agent.participatedIn",
backRefProperty: "agent.participation.participant"
},
{
refProperty: "agent.relatedTo",
backRefProperty: "agent.related.agent"
},
{
refProperty: "agent.activity",
backRefProperty: "agent.activity.agent"
}
],
Animal: [
{
refProperty: "animal.birth",
backRefProperty: "animal.birth.animal"
},
{
refProperty: "animal.death",
backRefProperty: "animal.death.animal"
},
],
Organization: [
{
refProperty: "association.establishment",
backRefProperty: "association.establishment.association"
},
{
refProperty: "association.termination",
backRefProperty: "association.termination.association"
},
{
refProperty: "organization.actor",
backRefProperty: "organization.actor.organization"
},
{
refProperty: "agent.participatedIn",
backRefProperty: "agent.participation.participant"
},
{
refProperty: "agent.relatedTo",
backRefProperty: "agent.related.agent"
},
{
refProperty: "agent.activity",
backRefProperty: "agent.activity.agent"
},
{
refProperty: "agent.ownedBy",
backRefProperty: "agent.ownership.owned"
}
],
Group: [
{
refProperty: "agent.relatedTo",
backRefProperty: "agent.related.agent"
},
],
NavalVessel: [
{
refProperty: "navalVessel.ordered",
backRefProperty: "navalVessel.ordered.navalVessel"
},
{
refProperty: "navalVessel.constructed",
backRefProperty: "navalVessel.constructed.navalVessel"
},
{
refProperty: "navalVessel.built",
backRefProperty: "navalVessel.built.navalVessel"
},
{
refProperty: "navalVessel.laidDown",
backRefProperty: "navalVessel.laidDown.navalVessel"
},
{
refProperty: "navalVessel.launched",
backRefProperty: "navalVessel.launched.navalVessel"
},
{
refProperty: "navalVessel.completed",
backRefProperty: "navalVessel.completed.navalVessel"
},
{
refProperty: "navalVessel.delivered",
backRefProperty: "navalVessel.delivered.navalVessel"
},
{
refProperty: "navalVessel.rebuilt",
backRefProperty: "navalVessel.rebuilt.navalVessel"
},
{
refProperty: "navalVessel.takenOutOfService",
backRefProperty: "navalVessel.takenOutOfService.navalVessel"
},
{
refProperty: "navalVessel.decommissioned",
backRefProperty: "navalVessel.decommissioned.navalVessel"
},
{
refProperty: "navalVessel.wrecked",
backRefProperty: "navalVessel.wrecked.navalVessel"
},
{
refProperty: "navalVessel.scrapped",
backRefProperty: "navalVessel.scrapped.navalVessel"
},
{
refProperty: "navalVessel.wasPresentAt",
backRefProperty: "navalVessel.presence.navalVessel"
},
{
refProperty: "navalVessel.homePort",
backRefProperty: "navalVessel.homePort.navalVessel"
},
{
refProperty: "agent.ownedBy",
backRefProperty: "agent.ownership.owned"
}
],
NavalVesselDesign: [
{
refProperty: "navalVesselDesign.decision",
backRefProperty: "navalVesselDesign.decision.navalVesselDesign"
},
{
refProperty: "navalVessel.ordered",
backRefProperty: "navalVessel.ordered.navalVessel"
},
{
refProperty: "navalVessel.constructed",
backRefProperty: "navalVessel.constructed.navalVessel"
},
{
refProperty: "navalVesselDesign.manufacture",
backRefProperty: "navalVesselDesign.manufacture.navalVesselDesign"
},
{
refProperty: "navalVesselDesign.modification",
backRefProperty: "navalVesselDesign.modification.navalVesselDesign"
}
],
ObjectDesign: [
{
refProperty: "objectDesign.design",
backRefProperty: "objectDesign.design.objectDesign"
},
{
refProperty: "objectDesign.production",
backRefProperty: "objectDesign.production.objectDesign"
}
],
Structure: [
{
refProperty: "construction.isPartOfAtTime",
backRefProperty: "construction.partAtTime.hasPart"
}
],
Place: [
{
refProperty: "place.isPartOfAtTime",
backRefProperty: "place.partAtTime.hasPart"
}
]
}
logger.debug("inlineEvent, uuid=" + entity.getUuid().toString());
var schema = Schema.getInstance();
var reflexiveStoreHandler = ServiceUtils.reflexiveStoreHandler();
var storageService = ServiceUtils.storageService()
var uuid = entity.getUuid().toString();
var entityTypeConf = conf[entity.getEntityType()];
if (typeof entityTypeConf !== "undefined") {
for (var ii = 0; ii < entityTypeConf.length; ii++) {
var refProperty = entityTypeConf[ii].refProperty;
var backRefProperty = entityTypeConf[ii].backRefProperty
logger.debug("inlineEvent, uuid=" + uuid + ", refProperty=" + refProperty);
var refPropertyValues = entity.getProperty(refProperty).iterator();
var valuesToProcess = [];
while(refPropertyValues.hasNext()) {
var refPropertyValue = refPropertyValues.next();
valuesToProcess.push(refPropertyValue);
}
for (var jj = 0; jj < valuesToProcess.length; jj++) {
processEvent(valuesToProcess[jj], backRefProperty);
}
}
if (result) {
entity.addProperty(Constants.PROPERTY_ENTITY_STATUS_MESSAGE,
new PropertyValue(null, PropertyType.ValueType.STRING, "inlineEvent"));
}
}
function processEvent(refPropValue, backRefProperty) {
if (refPropValue !== null && refPropValue.getValueType() == PropertyType.ValueType.ENTITY_REFERENCE) {
var refEntity = storageService.get(UUID.fromString(refPropValue.getValue()));
if (refEntity !== null) {
var backRefUuid = refEntity.getPrimaryPropertyAsString(backRefProperty);
if (uuid.equals(backRefUuid)) {
// Run updates only if back reference is to the processed entity to handle
// dual referenced events like Person.Marriage correctly (ie only for one
// of the persons)
refPropValue.setValueType(PropertyType.ValueType.ENTITY);
var copy = refEntity.copy();
copy.setAcl(null);
copy.setCreatedAt(null);
copy.setCreatedBy(null);
copy.setUpdatedAt(null);
copy.setUpdatedBy(null);
copy.setInline(true);
copy.setCurrentVersion(true);
refPropValue.setValue(copy);
var backRefPropValue = copy.getPrimaryProperty(backRefProperty);
if (backRefPropValue !== null) {
backRefPropValue.setStatus(KulturNavPropertyStatus.Obsolete);
}
refEntity.setAcl(SecurityUtils.ACL_INTERNAL);
refEntity.addProperty(Constants.PROPERTY_SUPERCONCEPT_STATUS,
new PropertyValue(null, PropertyType.ValueType.ENTITY_REFERENCE, Constants.UUID_STATUS_DELETED));
if (storageService.put(refEntity, null, null, reflexiveStoreHandler, UserEnv.getUser(), schema, false)) {
logger.debug("Stored event " + refEntity.getUuid().toString() + " with internal acl and status Deleted")
indexService.index(refEntity, IndexService.CommitMode.None);
} else {
logger.error("Failed to store event " + refEntity.getUuid().toString());
}
result = true;
} else {
// Second occurence for dual referenced events, mark as obsolete
refPropValue.setStatus(KulturNavPropertyStatus.Obsolete);
result = true;
}
}
}
}
result;
cf641faa-cef5-44e5-9114-8dde39065339
SYSTEM
root
04.06.2018 10:30:24
root
07.06.2018 14:56:29
Erstatt | Lagret | Lagret av |
---|---|---|
04.06.2018 10:30:24 | 04.06.2018 10:30:24 | root |