Skip to content

Commit

Permalink
task result moved to separate column
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed May 3, 2018
1 parent 71d8787 commit a2e3ced
Show file tree
Hide file tree
Showing 8 changed files with 155 additions and 7 deletions.
Expand Up @@ -195,6 +195,7 @@ public static boolean hasToLoadPath(QName itemName, Collection<SelectorOptions<G
// TODO find a better way to specify this
private static final Set<ItemPath> PATHS_NOT_RETURNED_BY_DEFAULT = new HashSet<>(Arrays.asList(
new ItemPath(UserType.F_JPEG_PHOTO),
new ItemPath(TaskType.F_RESULT),
new ItemPath(TaskType.F_SUBTASK),
new ItemPath(TaskType.F_NODE_AS_OBSERVED),
new ItemPath(TaskType.F_NEXT_RUN_START_TIMESTAMP),
Expand Down
Expand Up @@ -25,7 +25,10 @@
import com.evolveum.midpoint.prism.polystring.PolyString;
import com.evolveum.midpoint.prism.util.PrismTestUtil;
import com.evolveum.midpoint.repo.api.RepoAddOptions;
import com.evolveum.midpoint.repo.sql.data.common.RTask;
import com.evolveum.midpoint.repo.sql.data.common.enums.ROperationResultStatus;
import com.evolveum.midpoint.repo.sql.type.XMLGregorianCalendarType;
import com.evolveum.midpoint.repo.sql.util.RUtil;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.ResultHandler;
import com.evolveum.midpoint.schema.RetrieveOption;
Expand Down Expand Up @@ -807,5 +810,66 @@ public void test950AddBinary() throws Exception {
final File user = new File(FOLDER_BASE, "./get/user-binary.xml");
addGetCompare(user);
}

@Test
public void test400AddModifyTask() throws Exception {
File file = new File(FOLDER_BASIC, "task.xml");
PrismObject<TaskType> task = PrismTestUtil.parseObject(file);
TaskType taskType = task.asObjectable();
AssertJUnit.assertNotNull(taskType.getResult());

OperationResult result = new OperationResult("test400AddTask");
String oid = repositoryService.addObject(task, null, result);

Session session = null;
try {
session = open();

RTask rTask = session.createQuery("from RTask t where t.oid=:oid", RTask.class)
.setParameter("oid", oid).getSingleResult();
AssertJUnit.assertNotNull(rTask.getFullResult());
AssertJUnit.assertEquals(ROperationResultStatus.IN_PROGRESS, rTask.getStatus());

String xml = RUtil.getXmlFromByteArray(rTask.getFullObject(), true);
PrismObject<TaskType> obj = PrismTestUtil.parseObject(xml);
TaskType objType = obj.asObjectable();
AssertJUnit.assertNull(objType.getResult());
} finally {
close(session);
}

task = repositoryService.getObject(TaskType.class, oid, null, result);
taskType = task.asObjectable();
AssertJUnit.assertNull(taskType.getResult());
AssertJUnit.assertEquals(OperationResultStatusType.IN_PROGRESS, taskType.getResultStatus());

task = repositoryService.getObject(TaskType.class, oid, SelectorOptions.createCollection(TaskType.F_RESULT,
GetOperationOptions.createRetrieve(RetrieveOption.INCLUDE)), result);
taskType = task.asObjectable();
AssertJUnit.assertNotNull(taskType.getResult());
AssertJUnit.assertEquals(OperationResultStatusType.IN_PROGRESS, taskType.getResultStatus());

OperationResultType res = new OperationResultType();
res.setOperation("asdf");
res.setStatus(OperationResultStatusType.FATAL_ERROR);
ObjectDelta delta = ObjectDelta.createModificationReplaceProperty(TaskType.class, oid, TaskType.F_RESULT, prismContext, res);
repositoryService.modifyObject(TaskType.class, oid, delta.getModifications(), result);


task = repositoryService.getObject(TaskType.class, oid, null, result);
taskType = task.asObjectable();
AssertJUnit.assertNull(taskType.getResult());
AssertJUnit.assertEquals(OperationResultStatusType.FATAL_ERROR, taskType.getResultStatus());

task = repositoryService.getObject(TaskType.class, oid, SelectorOptions.createCollection(TaskType.F_RESULT,
GetOperationOptions.createRetrieve(RetrieveOption.INCLUDE)), result);
taskType = task.asObjectable();
AssertJUnit.assertNotNull(taskType.getResult());
AssertJUnit.assertEquals(OperationResultStatusType.FATAL_ERROR, taskType.getResultStatus());

OperationResultType r = taskType.getResult();
AssertJUnit.assertEquals("asdf", r.getOperation());
AssertJUnit.assertEquals(OperationResultStatusType.FATAL_ERROR, r.getStatus());
}
}

40 changes: 40 additions & 0 deletions repo/repo-sql-impl-test/src/test/resources/basic/task.xml
@@ -0,0 +1,40 @@
<!--
~ Copyright (c) 2010-2018 Evolveum
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->

<task xmlns="http://midpoint.evolveum.com/xml/ns/public/common/common-3"
xmlns:c="http://midpoint.evolveum.com/xml/ns/public/common/common-3">
<name>Result test task</name>
<description>
Definition of a live sychnronization task. It will poll changelog and pull in changes
</description>
<taskIdentifier>91919191-76e0-59e2-86d6-3d4f02d3ffff</taskIdentifier>
<ownerRef oid="00000000-0000-0000-0000-000000000002"/>
<executionStatus>suspended</executionStatus>

<handlerUri>http://midpoint.evolveum.com/xml/ns/public/model/synchronization/task/live-sync/handler-3</handlerUri>
<objectRef oid="ef2bc95b-76e0-48e2-86d6-3d4f02d3e1a2" type="c:ResourceType"/>
<recurrence>recurring</recurrence>
<binding>tight</binding>
<completionTimestamp>2013-05-07T11:38:21.350+02:00</completionTimestamp>
<schedule>
<interval>5</interval>
</schedule>
<result>
<operation>run</operation>
<status>in_progress</status>
<token>1000000000000000895</token>
</result>
</task>
Expand Up @@ -79,6 +79,8 @@
*/
@NamedQueries({
@NamedQuery(name = "get.focusPhoto", query = "select p.photo from RFocusPhoto p where p.ownerOid = :oid"),
@NamedQuery(name = "get.taskResult", query = "select t.fullResult from RTask t where t.oid = :oid"),
@NamedQuery(name = "get.taskStatus", query = "select t.status from RTask t where t.oid = :oid"),
@NamedQuery(name = "get.object", query = "select o.oid, o.fullObject, o.stringsCount, o.longsCount, o.datesCount, o.referencesCount, o.polysCount, o.booleansCount from RObject as o where o.oid=:oid"),
@NamedQuery(name = "searchShadowOwner.getShadow", query = "select s.oid from RShadow as s where s.oid = :oid"),
@NamedQuery(name = "searchShadowOwner.getOwner", query = "select o.oid, o.fullObject, o.stringsCount, o.longsCount, o.datesCount, o.referencesCount, o.polysCount, o.booleansCount from RFocus as o left join o.linkRef as ref where ref.targetOid = :oid"),
Expand Down
Expand Up @@ -23,6 +23,7 @@
import com.evolveum.midpoint.repo.sql.data.common.enums.*;
import com.evolveum.midpoint.repo.sql.query.definition.JaxbName;
import com.evolveum.midpoint.repo.sql.query.definition.JaxbPath;
import com.evolveum.midpoint.repo.sql.query2.definition.NotQueryable;
import com.evolveum.midpoint.repo.sql.util.DtoTranslationException;
import com.evolveum.midpoint.repo.sql.util.IdGeneratorResult;
import com.evolveum.midpoint.repo.sql.util.MidPointJoinedPersister;
Expand Down Expand Up @@ -53,7 +54,7 @@
uniqueConstraints = @UniqueConstraint(name = "uc_task_identifier", columnNames = {"taskIdentifier"}))
@ForeignKey(name = "fk_task")
@Persister(impl = MidPointJoinedPersister.class)
public class RTask extends RObject<TaskType> implements OperationResult {
public class RTask extends RObject<TaskType> implements OperationResultFull {

private RPolyString nameCopy;
private String taskIdentifier;
Expand All @@ -62,6 +63,7 @@ public class RTask extends RObject<TaskType> implements OperationResult {
private String category;
private String handlerUri;
//operation result
private byte[] fullResult;
private ROperationResultStatus status;
//end of operation result
private XMLGregorianCalendar lastRunStartTimestamp;
Expand Down Expand Up @@ -202,6 +204,18 @@ public XMLGregorianCalendar getWfEndTimestamp() {
return wfEndTimestamp;
}

@Lob
@NotQueryable
@Override
public byte[] getFullResult() {
return fullResult;
}

@Override
public void setFullResult(byte[] fullResult) {
this.fullResult = fullResult;
}

public void setCanRunOnNode(String canRunOnNode) {
this.canRunOnNode = canRunOnNode;
}
Expand Down Expand Up @@ -371,6 +385,7 @@ public boolean equals(Object o) {
if (wfProcessInstanceId != null ? !wfProcessInstanceId.equals(rTask.wfProcessInstanceId) : rTask.wfProcessInstanceId != null) return false;
if (wfStartTimestamp != null ? !wfStartTimestamp.equals(rTask.wfStartTimestamp) : rTask.wfStartTimestamp != null) return false;
if (wfEndTimestamp != null ? !wfEndTimestamp.equals(rTask.wfEndTimestamp) : rTask.wfEndTimestamp != null) return false;
if (fullResult != null ? !fullResult.equals(rTask.wfEndTimestamp) : rTask.fullResult != null) return false;

return true;
}
Expand All @@ -394,6 +409,7 @@ public int hashCode() {
result1 = 31 * result1 + (parent != null ? parent.hashCode() : 0);
result1 = 31 * result1 + (waitingReason != null ? waitingReason.hashCode() : 0);
result1 = 31 * result1 + (status != null ? status.hashCode() : 0);
result1 = 31 * result1 + (fullResult != null ? fullResult.hashCode() : 0);

return result1;
}
Expand Down
Expand Up @@ -29,6 +29,7 @@
import com.evolveum.midpoint.repo.sql.data.common.RObject;
import com.evolveum.midpoint.repo.sql.data.common.any.RAnyValue;
import com.evolveum.midpoint.repo.sql.data.common.any.RItemKind;
import com.evolveum.midpoint.repo.sql.data.common.enums.ROperationResultStatus;
import com.evolveum.midpoint.repo.sql.data.common.type.RObjectExtensionType;
import com.evolveum.midpoint.repo.sql.query.QueryException;
import com.evolveum.midpoint.repo.sql.query.RQuery;
Expand Down Expand Up @@ -560,6 +561,29 @@ private <T extends ObjectType> PrismObject<T> updateLoadedObject(GetObjectResult
lookupTableHelper.updateLoadedLookupTable(prismObject, options, session);
} else if (AccessCertificationCampaignType.class.equals(prismObject.getCompileTimeClass())) {
caseHelper.updateLoadedCampaign(prismObject, options, session);
} else if (TaskType.class.equals(prismObject.getCompileTimeClass())) {
if (SelectorOptions.hasToLoadPath(TaskType.F_RESULT, options)) {
Query query = session.getNamedQuery("get.taskResult");
query.setParameter("oid", prismObject.getOid());
byte[] opResult = (byte[]) query.uniqueResult();
if (opResult != null) {
String xmlResult = RUtil.getXmlFromByteArray(opResult, true);
OperationResultType resultType = prismContext.parserFor(xmlResult).parseRealValue(OperationResultType.class);

PrismProperty property = prismObject.findOrCreateProperty(TaskType.F_RESULT);
property.setRealValue(resultType); //OperationResult.createOperationResult(resultType)

prismObject.setPropertyRealValue(TaskType.F_RESULT_STATUS, resultType.getStatus());
}


} else {
Query<ROperationResultStatus> query = session.getNamedQuery("get.taskStatus");
query.setParameter("oid", prismObject.getOid());

ROperationResultStatus status = query.uniqueResult();
prismObject.setPropertyRealValue(TaskType.F_RESULT_STATUS, (status != null ? status.getSchemaValue() : null));
}
}

if (partialValueHolder != null) {
Expand Down
Expand Up @@ -45,10 +45,7 @@
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCampaignType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.apache.commons.lang.StringUtils;
import org.hibernate.query.Query;
import org.hibernate.Session;
Expand Down Expand Up @@ -269,6 +266,8 @@ public <T extends ObjectType> void updateFullObject(RObject object, PrismObject<
savedObject.removeContainer(LookupTableType.F_ROW);
} else if (AccessCertificationCampaignType.class.equals(savedObject.getCompileTimeClass())) {
savedObject.removeContainer(AccessCertificationCampaignType.F_CASE);
} else if (TaskType.class.isAssignableFrom(savedObject.getCompileTimeClass())) {
savedObject.removeProperty(TaskType.F_RESULT);
}

xml = prismContext.xmlSerializer().serialize(savedObject);
Expand Down
Expand Up @@ -20,9 +20,11 @@
import com.evolveum.midpoint.repo.sql.helpers.modify.MapperContext;
import com.evolveum.midpoint.repo.sql.util.DtoTranslationException;
import com.evolveum.midpoint.repo.sql.util.RUtil;
import com.evolveum.midpoint.schema.SchemaConstantsGenerated;
import com.evolveum.midpoint.util.exception.SystemException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.OperationResultType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType;

import javax.xml.namespace.QName;

/**
* Created by Viliam Repan (lazyman).
Expand All @@ -34,7 +36,7 @@ public OperationResult map(OperationResultType input, MapperContext context) {
OperationResult repo = (OperationResult) context.getOwner();

try {
RUtil.copyResultFromJAXB(ShadowType.F_RESULT, input, repo, context.getPrismContext());
RUtil.copyResultFromJAXB(new QName(SchemaConstantsGenerated.NS_COMMON, "result"), input, repo, context.getPrismContext());
} catch (DtoTranslationException ex) {
throw new SystemException("Couldn't translate operation result to entity", ex);
}
Expand Down

0 comments on commit a2e3ced

Please sign in to comment.