package org.karmaexchange.resources.derived;
import static org.karmaexchange.util.OfyService.ofy;
import org.karmaexchange.dao.BaseDao;
import org.karmaexchange.dao.KeyWrapper;
import org.karmaexchange.dao.Organization;
import org.karmaexchange.dao.Organization.SourceOrganizationInfo;
import org.karmaexchange.dao.derived.EventSourceInfo;
import com.googlecode.objectify.Key;
import com.googlecode.objectify.VoidWork;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
public class SourceConfig {
private String rootOrgId;
public void upsert(EventSourceInfo sourceInfo) {
Key<Organization> orgKey = sourceInfo.getOrgKey();
Organization org =
ofy().load().key(orgKey).now();
SourceOrganizationInfo persistedOrgInfo =
org.getSourceOrgInfo();
if (persistedOrgInfo == null) {
persistedOrgInfo = new SourceOrganizationInfo();
}
boolean updateRequired = false;
if ((persistedOrgInfo.getId() == null) ||
!persistedOrgInfo.getId().equals(rootOrgId)) {
persistedOrgInfo.setId(rootOrgId);
updateRequired = true;
}
if ((persistedOrgInfo.getListingOrg() == null) ||
!persistedOrgInfo.getListingOrg().equals(orgKey)) {
persistedOrgInfo.setListingOrg(
KeyWrapper.create(orgKey));
updateRequired = true;
}
if (updateRequired) {
ofy().transact(
new UpdateOrgConfigTxn(orgKey, persistedOrgInfo));
}
}
@Data
@EqualsAndHashCode(callSuper=false)
private static class UpdateOrgConfigTxn extends VoidWork {
private final Key<Organization> orgKey;
private final SourceOrganizationInfo updatedSourceOrgInfo;
public void vrun() {
Organization org =
ofy().load().key(orgKey).now();
if (org == null) {
// Org has been deleted
return;
}
org.setSourceOrgInfo(updatedSourceOrgInfo);
BaseDao.partialUpdate(org);
}
}
}