package com.constellio.app.modules.tasks.model.calculators;
import static com.constellio.model.entities.schemas.MetadataValueType.STRING;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import com.constellio.app.modules.tasks.model.wrappers.Task;
import com.constellio.model.entities.calculators.CalculatorParameters;
import com.constellio.model.entities.calculators.MetadataValueCalculator;
import com.constellio.model.entities.calculators.dependencies.Dependency;
import com.constellio.model.entities.calculators.dependencies.LocalDependency;
import com.constellio.model.entities.calculators.dependencies.ReferenceDependency;
import com.constellio.model.entities.schemas.MetadataValueType;
import com.constellio.model.entities.schemas.Schemas;
import com.constellio.model.services.schemas.builders.CommonMetadataBuilder;
import com.constellio.model.services.schemas.calculators.TokensCalculator2;
public class TaskTokensCalculator implements MetadataValueCalculator<List<String>> {
LocalDependency<List<String>> allAuthorizationsParam = LocalDependency
.toAStringList(CommonMetadataBuilder.ALL_AUTHORIZATIONS);
LocalDependency<List<String>> manualTokensParam = LocalDependency.toAStringList(CommonMetadataBuilder.MANUAL_TOKENS);
LocalDependency<String> assigneeParam = LocalDependency.toAReference(Task.ASSIGNEE);
LocalDependency<List<String>> assigneeUsersParam = LocalDependency.toAReference(Task.ASSIGNEE_USERS_CANDIDATES)
.whichIsMultivalue();
LocalDependency<List<String>> assigneeGroupsParam = LocalDependency.toAReference(Task.ASSIGNEE_GROUPS_CANDIDATES)
.whichIsMultivalue();
LocalDependency<List<String>> followersParam = LocalDependency.toAReference(Task.FOLLOWERS_IDS).whichIsMultivalue();
LocalDependency<String> createdByParam = LocalDependency.toAReference(CommonMetadataBuilder.CREATED_BY);
ReferenceDependency<List<String>> parentTokensParam = ReferenceDependency
.toAString(Task.PARENT_TASK, Schemas.TOKENS.getLocalCode()).whichIsMultivalue();
@Override
public List<String> calculate(CalculatorParameters parameters) {
List<String> tokens = new ArrayList<>(parameters.get(manualTokensParam));
String assignee = parameters.get(assigneeParam);
List<String> assigneeUsers = parameters.get(assigneeUsersParam);
List<String> assigneeGroups = parameters.get(assigneeGroupsParam);
List<String> followers = parameters.get(followersParam);
String createdBy = parameters.get(createdByParam);
List<String> parentTokens = parameters.get(parentTokensParam);
tokens.add("r_" + createdBy);
tokens.add("w_" + createdBy);
tokens.add("d_" + createdBy);
tokens.add("r_" + assignee);
tokens.add("w_" + assignee);
if (assigneeUsers != null) {
for (String user : assigneeUsers) {
tokens.add("r_" + user);
tokens.add("w_" + user);
}
}
if (assigneeGroups != null) {
for (String group : assigneeGroups) {
tokens.add("r_" + group);
tokens.add("w_" + group);
}
}
if (followers != null) {
for (String follower : followers) {
tokens.add("r_" + follower);
}
}
if (parentTokens != null) {
tokens.addAll(parentTokens);
}
return tokens;
}
@Override
public List<String> getDefaultValue() {
return Collections.emptyList();
}
@Override
public MetadataValueType getReturnType() {
return STRING;
}
@Override
public boolean isMultiValue() {
return true;
}
@Override
public List<? extends Dependency> getDependencies() {
return Arrays.asList(allAuthorizationsParam, manualTokensParam, assigneeParam, assigneeGroupsParam, assigneeUsersParam,
followersParam, createdByParam, parentTokensParam);
}
}