From f830a055c7d2059105711a47918c6d2af1435dd5 Mon Sep 17 00:00:00 2001 From: Jose Castro Date: Thu, 5 Oct 2023 19:51:34 -0600 Subject: [PATCH 01/16] feat(Workflows) : Allowing Users to add separators between actions inside a Workflow Step. --- .../portlets/workflows/ajax/WfActionAjax.java | 88 +++++++++++++------ .../workflows/model/WorkflowAction.java | 19 ++-- .../workflows/schemes/view_steps_filtered.jsp | 30 +++++++ 3 files changed, 103 insertions(+), 34 deletions(-) diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/ajax/WfActionAjax.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/ajax/WfActionAjax.java index 47330b2dffd2..31dd1977e974 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/ajax/WfActionAjax.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/ajax/WfActionAjax.java @@ -3,12 +3,16 @@ import com.dotcms.workflow.form.WorkflowActionForm; import com.dotcms.workflow.form.WorkflowReorderBean; import com.dotcms.workflow.helper.WorkflowHelper; +import com.dotmarketing.business.APILocator; +import com.dotmarketing.business.Role; import com.dotmarketing.business.web.UserWebAPI; import com.dotmarketing.business.web.WebAPILocator; +import com.dotmarketing.exception.DotDataException; import com.dotmarketing.portlets.workflows.model.WorkflowAction; import com.dotmarketing.portlets.workflows.model.WorkflowState; import com.dotmarketing.portlets.workflows.model.WorkflowStep; import com.dotmarketing.util.Logger; +import com.dotmarketing.util.UtilMethods; import com.liferay.portal.model.User; import com.liferay.util.StringPool; @@ -20,8 +24,7 @@ import java.util.List; import java.util.Set; - -@Deprecated +@Deprecated(forRemoval = true) public class WfActionAjax extends WfBaseAction { private final WorkflowHelper workflowHelper = WorkflowHelper.getInstance(); @@ -52,11 +55,10 @@ public void reorder(final HttpServletRequest request, * Deletes just the action associated to the step, but the action still alive as part of the scheme. * @param request * @param response - * @throws ServletException * @throws IOException */ public void deleteActionForStep(final HttpServletRequest request, - final HttpServletResponse response) throws ServletException, IOException { + final HttpServletResponse response) throws IOException { final String actionId = request.getParameter("actionId"); final String stepId = request.getParameter("stepId"); @@ -101,44 +103,71 @@ public void delete(final HttpServletRequest request, } } // delete. - public void save(final HttpServletRequest request, - final HttpServletResponse response) throws ServletException, IOException { - + final HttpServletResponse response) throws ServletException, IOException, DotDataException { + final String actionId = request.getParameter("actionId"); + final String actionName = request.getParameter("actionName"); final WorkflowActionForm.Builder builder = new WorkflowActionForm.Builder(); - - builder.actionName(request.getParameter("actionName")) - .actionId (request.getParameter("actionId")) - .schemeId (request.getParameter("schemeId")) - .stepId (request.getParameter("stepId")) - .actionIcon(request.getParameter("actionIconSelect")) - .actionAssignable (request.getParameter("actionAssignable") != null) - .actionCommentable(request.getParameter("actionCommentable") != null) - .requiresCheckout(false) - .actionRoleHierarchyForAssign(request.getParameter("actionRoleHierarchyForAssign") != null) - .actionNextStep(request.getParameter ("actionNextStep")) - .actionNextAssign(request.getParameter("actionAssignToSelect")) - .actionCondition(request.getParameter ("actionCondition")) - .showOn(WorkflowState.toSet(request.getParameterValues ("showOn"))); - - final String whoCanUseTmp = request.getParameter("whoCanUse"); - final List whoCanUse = Arrays.asList(whoCanUseTmp.split(",")); + if (!WorkflowAction.SEPARATOR.equalsIgnoreCase(actionId)) { + builder.actionName(actionName) + .actionId(actionId) + .schemeId(request.getParameter("schemeId")) + .stepId(request.getParameter("stepId")) + .actionIcon(request.getParameter("actionIconSelect")) + .actionAssignable(request.getParameter("actionAssignable") != null) + .actionCommentable(request.getParameter("actionCommentable") != null) + .requiresCheckout(false) + .actionRoleHierarchyForAssign(request.getParameter("actionRoleHierarchyForAssign") != null) + .actionNextStep(request.getParameter("actionNextStep")) + .actionNextAssign(request.getParameter("actionAssignToSelect")) + .actionCondition(request.getParameter("actionCondition")) + .showOn(WorkflowState.toSet(request.getParameterValues("showOn"))); + } else { + createSeparatorAction(builder, request); + } + final String whoCanUseTmp = UtilMethods.isSet(request.getParameter("whoCanUse")) + ? request.getParameter("whoCanUse") + : StringPool.BLANK; + final List whoCanUse = Arrays.asList(whoCanUseTmp.split(StringPool.COMMA)); builder.whoCanUse(whoCanUse); - WorkflowAction newAction = null; + WorkflowAction newAction; final User user = this.userWebAPI.getUser(request); try { - newAction = this.workflowHelper.saveAction(builder.build(), user); response.getWriter().println("SUCCESS:" + newAction.getId()); - } catch (Exception e) { - - Logger.error(this.getClass(), e.getMessage(), e); + } catch (final Exception e) { + Logger.error(this.getClass(), String.format("An error occurred when saving Workflow " + + "Action '%s' [ %s ]: %s", actionName, actionId, e.getMessage()), e); writeError(response, e.getMessage()); } } // save. + /** + * Creates a separator action for a specific Workflow Step. This separator is simply a special + * type of Workflow Action that is only meant to allow Users to create groups of actions. + * + * @param builder The current instance of the {@link WorkflowActionForm.Builder} class. + * @param request The current {@link HttpServletRequest} instance. + * + * @throws DotDataException An error occurred when persisting the separator. + */ + private void createSeparatorAction(final WorkflowActionForm.Builder builder, + final HttpServletRequest request) throws DotDataException { + builder.actionName("-------- SEPARATOR --------") + .schemeId(request.getParameter("schemeId")) + .stepId(request.getParameter("stepId")) + .actionAssignable(false) + .actionCommentable(false) + .requiresCheckout(false) + .actionRoleHierarchyForAssign(false) + .actionNextStep(WorkflowAction.CURRENT_STEP) + .actionNextAssign(APILocator.getRoleAPI().loadRoleByKey(Role.CMS_ANONYMOUS_ROLE).getId()) + .actionCondition(WorkflowAction.SEPARATOR) + .showOn(WorkflowState.toSet(null)); + } + /** * Security check demanded by Sonar * We register all the allowed methods down here @@ -149,4 +178,5 @@ public void save(final HttpServletRequest request, protected Set getAllowedCommands() { return Set.of( "action", "reorder", "delete", "add", "save", "deleteActionForStep" ); } + } diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/model/WorkflowAction.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/model/WorkflowAction.java index 7703140d880d..e532dea7787d 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/model/WorkflowAction.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/model/WorkflowAction.java @@ -1,16 +1,24 @@ package com.dotmarketing.portlets.workflows.model; -import com.dotmarketing.business.*; +import com.dotmarketing.business.PermissionAPI; +import com.dotmarketing.business.PermissionSummary; +import com.dotmarketing.business.Permissionable; +import com.dotmarketing.business.RelatedPermissionableGroup; +import com.dotmarketing.exception.DotDataException; +import com.dotmarketing.util.UtilMethods; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonSetter; import com.google.common.collect.ImmutableList; -import com.dotmarketing.exception.DotDataException; -import com.dotmarketing.util.UtilMethods; import com.liferay.util.StringPool; import java.io.Serializable; -import java.util.*; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; /** * Encapsulate the workflow action information. @@ -27,7 +35,8 @@ public class WorkflowAction implements Permissionable, Serializable{ /** * Key to store when the next step is current step. */ - public static final String CURRENT_STEP = "currentstep"; + public static final String CURRENT_STEP = "currentstep"; + public static final String SEPARATOR = "SEPARATOR"; private String id; diff --git a/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/view_steps_filtered.jsp b/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/view_steps_filtered.jsp index af1b9a999e15..3cad96db6dfd 100644 --- a/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/view_steps_filtered.jsp +++ b/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/view_steps_filtered.jsp @@ -47,6 +47,33 @@ ); %> + + +
@@ -80,6 +107,9 @@ <% } %> +
+ Add Separator +
Add
From 91dbc462644639ff5e780f4e7407c17f355894e8 Mon Sep 17 00:00:00 2001 From: Jose Castro Date: Mon, 9 Oct 2023 14:53:06 -0600 Subject: [PATCH 02/16] Code refactoring. Adding Upgrade Task to create a new column: `metadata` in the `workflow_action` table. --- .../workflow/form/WorkflowActionForm.java | 67 ++++++++++++++++++- .../workflow/helper/WorkflowHelper.java | 60 ++++++++++------- .../portlets/workflows/ajax/WfActionAjax.java | 46 +++++-------- .../business/WorkflowFactoryImpl.java | 30 ++++++--- .../workflows/business/WorkflowSQL.java | 32 ++++----- .../workflows/model/WorkflowAction.java | 22 +++++- ...1009AddMetadataColumnToWorkflowAction.java | 29 ++++++++ .../dotmarketing/util/TaskLocatorUtil.java | 8 ++- dotCMS/src/main/resources/postgres.sql | 5 +- 9 files changed, 206 insertions(+), 93 deletions(-) create mode 100644 dotCMS/src/main/java/com/dotmarketing/startup/runonce/Task231009AddMetadataColumnToWorkflowAction.java diff --git a/dotCMS/src/main/java/com/dotcms/workflow/form/WorkflowActionForm.java b/dotCMS/src/main/java/com/dotcms/workflow/form/WorkflowActionForm.java index 82a1df864235..9931977ded30 100644 --- a/dotCMS/src/main/java/com/dotcms/workflow/form/WorkflowActionForm.java +++ b/dotCMS/src/main/java/com/dotcms/workflow/form/WorkflowActionForm.java @@ -2,13 +2,30 @@ import com.dotcms.repackage.javax.validation.constraints.NotNull; import com.dotcms.rest.api.Validated; +import com.dotmarketing.business.APILocator; +import com.dotmarketing.business.Role; +import com.dotmarketing.exception.DotRuntimeException; +import com.dotmarketing.portlets.workflows.model.WorkflowAction; import com.dotmarketing.portlets.workflows.model.WorkflowState; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import io.vavr.control.Try; + +import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; +/** + * This class represents a Workflow Action Form used by different parts of the system, such as REST + * Endpoints. It is used to create, update and delete Workflow Actions in dotCMS. + * + * @author Jonathan Sanchez + * @since Dec 6th, 2017 + */ @JsonDeserialize(builder = WorkflowActionForm.Builder.class) public class WorkflowActionForm extends Validated { @@ -17,7 +34,7 @@ public class WorkflowActionForm extends Validated { @NotNull private final String schemeId; - // you can send an optional stepId for a new Action when you want to associated the action to the step in the same transaction. + // You can send an optional stepId for a new Action when you want to associate it to the step in the same transaction. private final String stepId; @NotNull @@ -39,6 +56,7 @@ public class WorkflowActionForm extends Validated { private final String actionNextStep; private final String actionNextAssign; private final String actionCondition; + private Map metadata; public String getStepId() { return stepId; @@ -100,6 +118,10 @@ public String getActionCondition() { return actionCondition; } + public Map getMetadata() { + return this.metadata; + } + @Override public String toString() { return "WorkflowActionForm{" + @@ -118,6 +140,7 @@ public String toString() { ", actionNextStep='" + actionNextStep + '\'' + ", actionNextAssign='" + actionNextAssign + '\'' + ", actionCondition='" + actionCondition + '\'' + + ", metadata='" + metadata + '\'' + '}'; } @@ -138,6 +161,7 @@ public WorkflowActionForm(final Builder builder) { this.actionAssignable = builder.actionAssignable; this.actionRoleHierarchyForAssign = builder.actionRoleHierarchyForAssign; this.roleHierarchyForAssign = (actionAssignable && actionRoleHierarchyForAssign); + this.metadata = builder.metadata; this.checkValid(); } @@ -177,7 +201,8 @@ public static final class Builder { @JsonProperty(required = true) private Set showOn; - + @JsonProperty() + private Map metadata; public Builder showOn(Set showOn) { this.showOn = showOn; @@ -250,8 +275,46 @@ public Builder actionCondition(String actionCondition) { return this; } + public Builder metadata(final Map metadata) { + this.metadata = metadata; + return this; + } + + /** + * Marks this Workflow Action as a Separator. This is a special type of action that does + * not execute any sub-actions at all, as it simply groups X number of actions together + * in the UI. The result of this may be seen as the differentiation between Primary and + * Secondary Actions. + * + * @param schemeId The ID of the Workflow Scheme that this action belongs to. + * @param stepId The ID of the Workflow Step that this action belongs to. + * + * @return The current {@link Builder} instance. + */ + public Builder separator(final String schemeId, final String stepId) { + this.schemeId(schemeId); + this.stepId(stepId); + this.actionName(WorkflowAction.SEPARATOR); + this.actionAssignable(false); + this.actionCommentable(false); + this.requiresCheckout(false); + this.actionRoleHierarchyForAssign(false); + this.actionNextStep(WorkflowAction.CURRENT_STEP); + this.actionNextAssign(Try.of(() -> APILocator.getRoleAPI().loadRoleByKey(Role.CMS_ANONYMOUS_ROLE).getId()) + .getOrElseThrow(e -> new DotRuntimeException("Anonymous Role ID not found", e))); + this.actionCondition(WorkflowAction.SEPARATOR); + this.showOn(Arrays.stream(WorkflowState.values()).collect(java.util.stream.Collectors.toSet())); + if (null == this.metadata) { + this.metadata = new HashMap<>(); + } + this.metadata.put("subtype", WorkflowAction.SEPARATOR); + return this; + } + public WorkflowActionForm build() { return new WorkflowActionForm(this); } + } + } diff --git a/dotCMS/src/main/java/com/dotcms/workflow/helper/WorkflowHelper.java b/dotCMS/src/main/java/com/dotcms/workflow/helper/WorkflowHelper.java index a68f7e97c2bd..126ae4d0c8ea 100644 --- a/dotCMS/src/main/java/com/dotcms/workflow/helper/WorkflowHelper.java +++ b/dotCMS/src/main/java/com/dotcms/workflow/helper/WorkflowHelper.java @@ -1,8 +1,5 @@ package com.dotcms.workflow.helper; -import static com.dotcms.rest.api.v1.authentication.ResponseUtil.getFormattedMessage; -import static com.dotmarketing.db.HibernateUtil.addSyncCommitListener; - import com.dotcms.business.CloseDBIfOpened; import com.dotcms.business.WrapInTransaction; import com.dotcms.content.elasticsearch.business.ESContentFactoryImpl; @@ -11,6 +8,7 @@ import com.dotcms.contenttype.exception.NotFoundInDbException; import com.dotcms.contenttype.model.type.ContentType; import com.dotcms.enterprise.license.LicenseManager; +import com.dotcms.exception.ExceptionUtil; import com.dotcms.repackage.com.google.common.annotations.VisibleForTesting; import com.dotcms.repackage.javax.validation.constraints.NotNull; import com.dotcms.rest.api.v1.workflow.BulkActionView; @@ -76,6 +74,16 @@ import com.liferay.portal.language.LanguageUtil; import com.liferay.portal.model.User; import com.liferay.util.StringPool; +import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.lang.time.StopWatch; +import org.apache.velocity.context.Context; +import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.search.aggregations.Aggregation; +import org.elasticsearch.search.aggregations.Aggregations; +import org.elasticsearch.search.aggregations.bucket.terms.ParsedStringTerms; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.StringWriter; import java.util.ArrayList; @@ -90,16 +98,9 @@ import java.util.concurrent.Future; import java.util.function.Supplier; import java.util.stream.Collectors; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import org.apache.commons.beanutils.BeanUtils; -import org.apache.commons.lang.time.StopWatch; -import org.apache.velocity.context.Context; -import org.elasticsearch.action.search.SearchResponse; -import org.elasticsearch.search.aggregations.Aggregation; -import org.elasticsearch.search.aggregations.Aggregations; -import org.elasticsearch.search.aggregations.bucket.terms.ParsedStringTerms; +import static com.dotcms.rest.api.v1.authentication.ResponseUtil.getFormattedMessage; +import static com.dotmarketing.db.HibernateUtil.addSyncCommitListener; /** @@ -1532,11 +1533,16 @@ private ContentType findContentType (final String variable, final User user) } /** - * Save a WorkflowActionForm returning the WorkflowAction created. - * A WorkflowActionForm can send a stepId in that case the Action will be associated to the Step in the same transaction. - * @param actionId When present an update operation takes place otherwise an insert is executed - * @param workflowActionForm WorkflowActionForm - * @return WorkflowAction (workflow action created) + * Saves a Workflow Action. A {@link WorkflowActionForm} object can send a Step ID, in which + * case the Action will be associated to the Step in the same transaction. + * + * @param actionId If present, an update operation takes place. Otherwise, an insert + * is executed. + * @param workflowActionForm The {@link WorkflowActionForm} object with the Workflow Action data + * that will be saved. + * @param user The {@link User} that is performing this action. + * + * @return The {@link WorkflowAction} object that was created. */ @WrapInTransaction public WorkflowAction saveAction(final String actionId, final WorkflowActionForm workflowActionForm, final User user) { @@ -1560,7 +1566,7 @@ public WorkflowAction saveAction(final String actionId, final WorkflowActionForm newAction.setRequiresCheckout(false); newAction.setShowOn(workflowActionForm.getShowOn()); newAction.setRoleHierarchyForAssign(workflowActionForm.isRoleHierarchyForAssign()); - + newAction.setMetadata(workflowActionForm.getMetadata()); try { newAction.setNextAssign(this.resolveRole(actionNextAssign).getId()); @@ -1603,17 +1609,19 @@ public WorkflowAction saveAction(final String actionId, final WorkflowActionForm workflowActionClass.setName(NotifyAssigneeActionlet.class.getDeclaredConstructor().newInstance().getName()); workflowActionClass.setOrder(0); this.workflowAPI.saveActionClass(workflowActionClass, user); - } catch (Exception e) { - Logger.error(this.getClass(), e.getMessage()); - Logger.debug(this, e.getMessage(), e); - throw new DotWorkflowException(e.getMessage(), e); + } catch (final Exception e) { + final String errorMsg = String.format("Failed to save Workflow Action Class with ID '%s': %s", newAction.getId(), e.getMessage()); + Logger.error(this.getClass(), errorMsg); + Logger.debug(this, errorMsg, e); + throw new DotWorkflowException(errorMsg, e); } }); } - } catch (Exception e) { - Logger.error(this.getClass(), e.getMessage()); - Logger.debug(this, e.getMessage(), e); - throw new DotWorkflowException(e.getMessage(), e); + } catch (final Exception e) { + final String errorMsg = String.format("Failed to save Workflow Action '%s': %s", actionId, e.getMessage()); + Logger.error(this.getClass(), errorMsg); + Logger.debug(this, errorMsg, e); + throw new DotWorkflowException(errorMsg, e); } return newAction; diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/ajax/WfActionAjax.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/ajax/WfActionAjax.java index 31dd1977e974..afa7eb660559 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/ajax/WfActionAjax.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/ajax/WfActionAjax.java @@ -3,11 +3,8 @@ import com.dotcms.workflow.form.WorkflowActionForm; import com.dotcms.workflow.form.WorkflowReorderBean; import com.dotcms.workflow.helper.WorkflowHelper; -import com.dotmarketing.business.APILocator; -import com.dotmarketing.business.Role; import com.dotmarketing.business.web.UserWebAPI; import com.dotmarketing.business.web.WebAPILocator; -import com.dotmarketing.exception.DotDataException; import com.dotmarketing.portlets.workflows.model.WorkflowAction; import com.dotmarketing.portlets.workflows.model.WorkflowState; import com.dotmarketing.portlets.workflows.model.WorkflowStep; @@ -24,6 +21,13 @@ import java.util.List; import java.util.Set; +/** + * This class is responsible for handling all CRUD requests related to Workflow Actions generated by + * DWR requests. + * + * @author root + * @since Mar 22nd, 2012 + */ @Deprecated(forRemoval = true) public class WfActionAjax extends WfBaseAction { @@ -103,8 +107,16 @@ public void delete(final HttpServletRequest request, } } // delete. + /** + * Save or updates a Workflow Action. + * + * @param request The current instance of the {@link HttpServletRequest} class. + * @param response The current instance of the {@link HttpServletResponse} class. + * + * @throws IOException An error occurred when writing either a successful or failure response + */ public void save(final HttpServletRequest request, - final HttpServletResponse response) throws ServletException, IOException, DotDataException { + final HttpServletResponse response) throws IOException { final String actionId = request.getParameter("actionId"); final String actionName = request.getParameter("actionName"); final WorkflowActionForm.Builder builder = new WorkflowActionForm.Builder(); @@ -123,7 +135,7 @@ public void save(final HttpServletRequest request, .actionCondition(request.getParameter("actionCondition")) .showOn(WorkflowState.toSet(request.getParameterValues("showOn"))); } else { - createSeparatorAction(builder, request); + builder.separator(request.getParameter("schemeId"), request.getParameter("stepId")); } final String whoCanUseTmp = UtilMethods.isSet(request.getParameter("whoCanUse")) ? request.getParameter("whoCanUse") @@ -144,30 +156,6 @@ public void save(final HttpServletRequest request, } } // save. - /** - * Creates a separator action for a specific Workflow Step. This separator is simply a special - * type of Workflow Action that is only meant to allow Users to create groups of actions. - * - * @param builder The current instance of the {@link WorkflowActionForm.Builder} class. - * @param request The current {@link HttpServletRequest} instance. - * - * @throws DotDataException An error occurred when persisting the separator. - */ - private void createSeparatorAction(final WorkflowActionForm.Builder builder, - final HttpServletRequest request) throws DotDataException { - builder.actionName("-------- SEPARATOR --------") - .schemeId(request.getParameter("schemeId")) - .stepId(request.getParameter("stepId")) - .actionAssignable(false) - .actionCommentable(false) - .requiresCheckout(false) - .actionRoleHierarchyForAssign(false) - .actionNextStep(WorkflowAction.CURRENT_STEP) - .actionNextAssign(APILocator.getRoleAPI().loadRoleByKey(Role.CMS_ANONYMOUS_ROLE).getId()) - .actionCondition(WorkflowAction.SEPARATOR) - .showOn(WorkflowState.toSet(null)); - } - /** * Security check demanded by Sonar * We register all the allowed methods down here diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java index 9b7a44e63ffe..257a21887377 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java @@ -4,6 +4,7 @@ import com.dotcms.contenttype.transform.contenttype.DbContentTypeTransformer; import com.dotcms.enterprise.LicenseUtil; import com.dotcms.enterprise.license.LicenseLevel; +import com.dotcms.rest.api.v1.DotObjectMapperProvider; import com.dotcms.util.ConversionUtils; import com.dotcms.util.transform.TransformerLocator; import com.dotmarketing.business.APILocator; @@ -38,11 +39,15 @@ import com.dotmarketing.util.Logger; import com.dotmarketing.util.UUIDGenerator; import com.dotmarketing.util.UtilMethods; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import com.liferay.portal.model.User; import io.vavr.control.Try; +import org.apache.commons.beanutils.BeanUtils; +import org.postgresql.util.PGobject; + import java.io.StringWriter; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; @@ -58,7 +63,9 @@ import java.util.Set; import java.util.function.Consumer; import java.util.stream.Collectors; -import org.apache.commons.beanutils.BeanUtils; + +import static com.dotmarketing.portlets.workflows.business.WorkflowSQL.INSERT_ACTION; +import static com.dotmarketing.portlets.workflows.business.WorkflowSQL.UPDATE_ACTION; /** @@ -73,7 +80,8 @@ public class WorkflowFactoryImpl implements WorkFlowFactory { public static final int PARTITION_IN_SIZE = 100; private final WorkflowCache cache; private final WorkflowSQL sql; - + private static final ObjectMapper JSON_MAPPER = DotObjectMapperProvider.getInstance() + .getDefaultObjectMapper(); /** * Creates an instance of the {@link WorkFlowFactory}. @@ -110,7 +118,7 @@ private Object convert(Object obj, Map map) * @throws IllegalAccessException * @throws InvocationTargetException */ - private WorkflowAction convertAction(Map row) + private WorkflowAction convertAction(final Map row) throws IllegalAccessException, InvocationTargetException { final WorkflowAction action = new WorkflowAction(); row.put("schemeId", row.get("scheme_id")); @@ -121,6 +129,10 @@ private WorkflowAction convertAction(Map row) row.put("requiresCheckout", row.get("requires_checkout")); row.put("showOn", WorkflowState.toSet(row.get("show_on"))); row.put("roleHierarchyForAssign", row.get("use_role_hierarchy_assign")); + if (null != row.get("metadata")) { + row.put("metadata", Try.of(() -> JSON_MAPPER.readValue(((PGobject) row.get("metadata")).getValue(), + Map.class)).getOrElse(new HashMap())); + } BeanUtils.copyProperties(action, row); action.setPushPublishActionlet(ActionletUtil.hasPushPublishActionlet(action)); return action; @@ -1752,7 +1764,6 @@ public void saveAction(final WorkflowAction action) boolean isNew = true; if (UtilMethods.isSet(action.getId())) { - isNew = !this.existsAction(action.getId()); } else { action.setId(UUIDGenerator.generateUuid()); @@ -1761,7 +1772,7 @@ public void saveAction(final WorkflowAction action) final String nextStep = this.getNextStep(action); final DotConnect db = new DotConnect(); if (isNew) { - db.setSQL(sql.INSERT_ACTION); + db.setSQL(INSERT_ACTION); db.addParam(action.getId()); db.addParam(action.getSchemeId()); db.addParam(action.getName()); @@ -1775,9 +1786,9 @@ public void saveAction(final WorkflowAction action) db.addParam(action.isRoleHierarchyForAssign()); db.addParam(action.isRequiresCheckout()); db.addParam(WorkflowState.toCommaSeparatedString(action.getShowOn())); - db.loadResult(); + db.addJSONParam(action.getMetadata()); } else { - db.setSQL(sql.UPDATE_ACTION); + db.setSQL(UPDATE_ACTION); db.addParam(action.getSchemeId()); db.addParam(action.getName()); db.addParam(action.getCondition()); @@ -1790,10 +1801,10 @@ public void saveAction(final WorkflowAction action) db.addParam(action.isRoleHierarchyForAssign()); db.addParam(action.isRequiresCheckout()); db.addParam(WorkflowState.toCommaSeparatedString(action.getShowOn())); + db.addJSONParam(action.getMetadata()); db.addParam(action.getId()); - db.loadResult(); } - + db.loadResult(); final List relatedProxiesSteps = this.findProxiesSteps(action); relatedProxiesSteps.forEach(cache::removeActions); @@ -1805,7 +1816,6 @@ public void saveAction(final WorkflowAction action) // update workflowScheme mod date final WorkflowScheme scheme = findScheme(action.getSchemeId()); saveScheme(scheme); - } /** diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowSQL.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowSQL.java index 80688103b475..96676cd5144d 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowSQL.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowSQL.java @@ -2,6 +2,14 @@ import com.dotmarketing.db.DbConnectionFactory; +/** + * This utility class provides all the SQL statements used to interact with the Workflow tables in + * dotCMS. Here you can find CRUD queries for Workflow Schemes, Steps, Actions, and the + * relationships between them. + * + * @author root + * @since Mar 22nd, 2012 + */ abstract class WorkflowSQL { protected static final String MYSQL = "MySQL"; @@ -22,20 +30,11 @@ static protected WorkflowSQL getInstance() { return null; } - - static String SELECT_SCHEMES = "select * from workflow_scheme where (archived = ? or archived = ?) order by name"; static String SELECT_SCHEME= "select * from workflow_scheme where id = ?"; static String SELECT_SCHEME_NAME= "select * from workflow_scheme where name = ?"; - - - protected static String SELECT_DEFAULT_SCHEME= "select * from workflow_scheme where default_scheme = " + DbConnectionFactory.getDBTrue() + " "; - - protected static String UPDATE_SCHEME_SET_TO_DEFAULT= "update workflow_scheme set default_scheme = " + DbConnectionFactory.getDBTrue() + " where id = ? "; - - static String SELECT_TASK_NULL_BY_STRUCT= "select task.* FROM workflow_task task INNER JOIN contentlet con ON con.identifier = task.webasset INNER JOIN contentlet_version_info cvi ON cvi.working_inode = con.inode" + " WHERE task.status is NULL AND con.structure_inode=?"; @@ -83,9 +82,10 @@ static protected WorkflowSQL getInstance() { static String INSERT_ACTION_FOR_STEP = "insert into workflow_action_step(action_id, step_id, action_order) values (?,?,?)"; static String UPDATE_ACTION_FOR_STEP_ORDER = "update workflow_action_step set action_order=? where action_id=? and step_id=?"; - static String INSERT_ACTION= "insert into workflow_action (id, scheme_id, name, condition_to_progress, next_step_id, next_assign, my_order, assignable, commentable, icon, use_role_hierarchy_assign, requires_checkout, show_on) values (?, ?, ?, ?, ?, ?, ?,?, ?, ?,?,?,?)"; - //protected static String UPDATE_ACTION= "update workflow_action set scheme_id=?, name=?, condition_to_progress=?, next_step_id=?, next_assign=?, my_order=?, assignable=?, commentable=?, icon=?, use_role_hierarchy_assign=?,requires_checkout=?,requires_checkout_option=? where id=?"; - static String UPDATE_ACTION= "update workflow_action set scheme_id=?, name=?, condition_to_progress=?, next_step_id=?, next_assign=?, my_order=?, assignable=?, commentable=?, icon=?, use_role_hierarchy_assign=?,requires_checkout=?,show_on=? where id=?"; + + static String INSERT_ACTION= "insert into workflow_action (id, scheme_id, name, condition_to_progress, next_step_id, next_assign, my_order, assignable, commentable, icon, use_role_hierarchy_assign, requires_checkout, show_on, metadata) values (?, ?, ?, ?, ?, ?, ?,?, ?, ?,?,?,?, ? ::jsonb)"; + + static String UPDATE_ACTION= "update workflow_action set scheme_id=?, name=?, condition_to_progress=?, next_step_id=?, next_assign=?, my_order=?, assignable=?, commentable=?, icon=?, use_role_hierarchy_assign=?,requires_checkout=?,show_on=?, metadata = ? ::jsonb where id=?"; static String DELETE_ACTION= "delete from workflow_action where id = ? "; static String DELETE_ACTION_STEP = "delete from workflow_action_step where action_id =? and step_id =? "; static String DELETE_ACTIONS_STEP = "delete from workflow_action_step where step_id =? "; @@ -96,8 +96,6 @@ static protected WorkflowSQL getInstance() { static String UPDATE_STEP= "update workflow_step set name=?, scheme_id=?, my_order=?, resolved = ?, escalation_enable = ?, escalation_action=?, escalation_time = ? where id = ?"; static String DELETE_STEP= "delete from workflow_step where id = ?"; static String SELECT_STEP_BY_CONTENTLET= "select workflow_task.id as workflowid, workflow_step.* from workflow_step join workflow_task on workflow_task.status = workflow_step.id where workflow_task.webasset= ? and workflow_task.language_id = ?"; - protected static String RESET_CONTENTLET_STEPS= "update workflow_task set status = ? where webasset= ?"; - protected static String DELETE_CONTENTLET_STEPS= "delete from workflow_task where status = ? and webasset= ?"; static String SELECT_COUNT_CONTENTLES_BY_STEP= "select count(workflow_task.id) as count from workflow_task join workflow_step on workflow_task.status=workflow_step.id where workflow_step.id=?"; static String SELECT_ACTION_CLASSES_BY_CLASS= "select * from workflow_action_class where clazz = ? order by my_order"; @@ -115,11 +113,7 @@ static protected WorkflowSQL getInstance() { static String DELETE_ACTION_CLASS_PARAM_BY_ACTION_CLASS= "delete from workflow_action_class_pars where workflow_action_class_id =?"; static String DELETE_ACTION_CLASS_PARAM_BY_ID="delete from workflow_action_class_pars where id=?"; - // chri - protected static String UPDATE_USER_ASSIGNTO_TASK = "update workflow_task set assigned_to = ? where id = ?"; static String RETRIEVE_LAST_STEP_ACTIONID = "select * from workflow_history where workflowtask_id = ? order by creation_date desc"; - protected static String RETRIEVE_TASK = "select * from workflow_history where workflowtask_id = ? order by creation_date desc"; - // chri static String SELECT_EXPIRED_TASKS = ""; @@ -136,5 +130,5 @@ static protected WorkflowSQL getInstance() { static String INSERT_WORKFLOW_COMMENT = "INSERT INTO workflow_comment (id, creation_date, posted_by, wf_comment, workflowtask_id) values (?,?,?,?,?)"; static String UPDATE_WORKFLOW_COMMENT = "UPDATE workflow_comment SET creation_date=?, posted_by=?, wf_comment=?, workflowtask_id=? WHERE id=?"; -} +} diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/model/WorkflowAction.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/model/WorkflowAction.java index e532dea7787d..a8e1d5744596 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/model/WorkflowAction.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/model/WorkflowAction.java @@ -17,12 +17,21 @@ import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Set; /** - * Encapsulate the workflow action information. - * + * Encapsulates the information related to a Workflow Action in dotCMS. + *

Workflow Actions define what actions a user may take on a content item in a specific step of + * the Workflow Scheme it has been assigned to. Each Workflow Action specifies:

+ *
    + *
  • Who has permissions to take the Action.
  • + *
  • Where and when the Action is displayed to the user.
  • + *
  • The Workflow Step the content will be in after the Action is taken.
  • + *
  • The user or Role who will be assigned the content item after the action is taken.
  • + *
  • The Workflow Sub-Actions that will be performed when the action is taken.
  • + *
* * @author root * @version 1.x @@ -66,6 +75,7 @@ public class WorkflowAction implements Permissionable, Serializable{ private boolean moveActionlet; private boolean moveActionletHasPath; private Set showOn = Collections.emptySet(); + private Map metadata; public WorkflowAction() { } @@ -495,6 +505,14 @@ public boolean isNew(){ } + public Map getMetadata(){ + return this.metadata; + } + + public void setMetadata(final Map metadata){ + this.metadata = metadata; + } + @Override public boolean equals(Object obj) { if(obj ==null || ! (obj instanceof WorkflowAction)) return false; diff --git a/dotCMS/src/main/java/com/dotmarketing/startup/runonce/Task231009AddMetadataColumnToWorkflowAction.java b/dotCMS/src/main/java/com/dotmarketing/startup/runonce/Task231009AddMetadataColumnToWorkflowAction.java new file mode 100644 index 000000000000..e8291572c341 --- /dev/null +++ b/dotCMS/src/main/java/com/dotmarketing/startup/runonce/Task231009AddMetadataColumnToWorkflowAction.java @@ -0,0 +1,29 @@ +package com.dotmarketing.startup.runonce; + +import com.dotmarketing.common.db.DotConnect; +import com.dotmarketing.exception.DotDataException; +import com.dotmarketing.exception.DotRuntimeException; +import com.dotmarketing.startup.StartupTask; + +/** + * Adds the {@code metadata} column to the {@code workflow_action} table. This JSONB column is meant + * to store any sort of additional configuration properties for a Workflow Action that may not be + * strictly related to their core functionality. + * + * @author Jose Castro + * @since Oct 10th, 2023 + */ +public class Task231009AddMetadataColumnToWorkflowAction implements StartupTask { + + @Override + public boolean forceRun() { + return true; + } + + @Override + public void executeUpgrade() throws DotDataException, DotRuntimeException { + final DotConnect dc = new DotConnect().setSQL("ALTER TABLE workflow_action ADD COLUMN IF NOT EXISTS metadata JSONB NULL"); + dc.loadResult(); + } + +} diff --git a/dotCMS/src/main/java/com/dotmarketing/util/TaskLocatorUtil.java b/dotCMS/src/main/java/com/dotmarketing/util/TaskLocatorUtil.java index 0a9e9b2fd53e..779e86a4d114 100644 --- a/dotCMS/src/main/java/com/dotmarketing/util/TaskLocatorUtil.java +++ b/dotCMS/src/main/java/com/dotmarketing/util/TaskLocatorUtil.java @@ -227,16 +227,17 @@ import com.dotmarketing.startup.runonce.Task220928AddLookbackWindowColumnToExperiment; import com.dotmarketing.startup.runonce.Task221007AddVariantIntoPrimaryKey; import com.dotmarketing.startup.runonce.Task221018CreateVariantFieldInMultiTree; -import com.dotmarketing.startup.runonce.Task230119MigrateContentToProperPersonaTagAndRemoveDupTags; import com.dotmarketing.startup.runonce.Task230110MakeSomeSystemFieldsRemovableByBaseType; -import com.dotmarketing.startup.runonce.Task230328AddMarkedForDeletionColumn; +import com.dotmarketing.startup.runonce.Task230119MigrateContentToProperPersonaTagAndRemoveDupTags; import com.dotmarketing.startup.runonce.Task230320FixMissingContentletAsJSON; +import com.dotmarketing.startup.runonce.Task230328AddMarkedForDeletionColumn; import com.dotmarketing.startup.runonce.Task230426AlterVarcharLengthOfLockedByCol; -import com.dotmarketing.startup.runonce.Task230701AddHashIndicesToWorkflowTables; import com.dotmarketing.startup.runonce.Task230523CreateVariantFieldInContentlet; import com.dotmarketing.startup.runonce.Task230630CreateRunningIdsExperimentField; +import com.dotmarketing.startup.runonce.Task230701AddHashIndicesToWorkflowTables; import com.dotmarketing.startup.runonce.Task230707CreateSystemTable; import com.dotmarketing.startup.runonce.Task230713IncreaseDisabledWysiwygColumnSize; +import com.dotmarketing.startup.runonce.Task231009AddMetadataColumnToWorkflowAction; import com.google.common.collect.ImmutableList; import java.util.ArrayList; @@ -548,6 +549,7 @@ public static List> getStartupRunOnceTaskClasses() { .add(Task230701AddHashIndicesToWorkflowTables.class) .add(Task230707CreateSystemTable.class) .add(Task230713IncreaseDisabledWysiwygColumnSize.class) + .add(Task231009AddMetadataColumnToWorkflowAction.class) .build(); return ret.stream().sorted(classNameComparator).collect(Collectors.toList()); } diff --git a/dotCMS/src/main/resources/postgres.sql b/dotCMS/src/main/resources/postgres.sql index 5046e7aee4d7..f616e614302b 100644 --- a/dotCMS/src/main/resources/postgres.sql +++ b/dotCMS/src/main/resources/postgres.sql @@ -2144,9 +2144,10 @@ create table workflow_action( commentable boolean default false, requires_checkout boolean default false, icon varchar(255) default 'defaultWfIcon', - show_on varchar(255) default 'LOCKED,UNLOCKED', + show_on varchar(255) default 'LOCKED,UNLOCKED', use_role_hierarchy_assign bool default false, - scheme_id VARCHAR(36) NOT NULL + scheme_id VARCHAR(36) NOT NULL, + metadata JSONB NULL ); CREATE TABLE workflow_action_step (action_id VARCHAR(36) NOT NULL, step_id VARCHAR(36) NOT NULL, action_order INT default 0); From 7f29b7dde9b5baaf53fd174ceff0f7310a9289f5 Mon Sep 17 00:00:00 2001 From: Jose Castro Date: Mon, 9 Oct 2023 14:56:38 -0600 Subject: [PATCH 03/16] Adding some Javadoc. --- .../portlets/workflows/model/WorkflowAction.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/model/WorkflowAction.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/model/WorkflowAction.java index a8e1d5744596..af53e8204532 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/model/WorkflowAction.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/model/WorkflowAction.java @@ -505,10 +505,21 @@ public boolean isNew(){ } + /** + * Returns the metadata for this Workflow Action. + * + * @return A Map with the Action's metadata. + */ public Map getMetadata(){ return this.metadata; } + /** + * Sets the metadata for this Workflow Action, which may include different configuration + * properties or simple common-use attributes for the action in a single column. + * + * @param metadata A Map with the Action's metadata. + */ public void setMetadata(final Map metadata){ this.metadata = metadata; } From 6bdd0f61275f50c66a54838cd3f9430b865cf458 Mon Sep 17 00:00:00 2001 From: Jose Castro Date: Tue, 10 Oct 2023 12:44:14 -0600 Subject: [PATCH 04/16] Adding Integration Test and minor changes. --- .../workflows/business/WorkflowAPITest.java | 152 ++++++++++++++---- .../workflow/helper/WorkflowHelper.java | 4 +- .../portlets/workflows/ajax/WfActionAjax.java | 6 +- 3 files changed, 125 insertions(+), 37 deletions(-) diff --git a/dotCMS/src/integration-test/java/com/dotmarketing/portlets/workflows/business/WorkflowAPITest.java b/dotCMS/src/integration-test/java/com/dotmarketing/portlets/workflows/business/WorkflowAPITest.java index 532e7f219034..dc364b9beeaa 100644 --- a/dotCMS/src/integration-test/java/com/dotmarketing/portlets/workflows/business/WorkflowAPITest.java +++ b/dotCMS/src/integration-test/java/com/dotmarketing/portlets/workflows/business/WorkflowAPITest.java @@ -88,6 +88,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.Date; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -383,11 +384,11 @@ public static void prepare() throws Exception { /* Generate actions */ workflowScheme1Step2Action1 = addWorkflowAction(workflowScheme1Step2Action1Name, 2, - workflowScheme1Step2.getId(), true, workflowScheme1Step2.getId(), reviewer, + workflowScheme1Step2.getId(), workflowScheme1Step2.getId(), reviewer, workflowScheme1.getId()); workflowScheme1Step1Action1 = addWorkflowAction(workflowScheme1Step1ActionIntranetName, 1, - workflowScheme1Step2.getId(), true, workflowScheme1Step1.getId(), intranet, + workflowScheme1Step2.getId(), workflowScheme1Step1.getId(), intranet, workflowScheme1.getId()); @@ -409,11 +410,11 @@ public static void prepare() throws Exception { /* Generate actions */ workflowScheme2Step2Action1 = addWorkflowAction(workflowScheme2Step2Action1Name, 2, - workflowScheme2Step2.getId(), true, workflowScheme2Step2.getId(), contributor, + workflowScheme2Step2.getId(), workflowScheme2Step2.getId(), contributor, workflowScheme2.getId()); workflowScheme2Step1Action1 = addWorkflowAction(workflowScheme2Step1ActionReviewerName, 1, - workflowScheme2Step2.getId(), true, workflowScheme2Step1.getId(), reviewer, + workflowScheme2Step2.getId(), workflowScheme2Step1.getId(), reviewer, workflowScheme2.getId()); @@ -436,15 +437,15 @@ public static void prepare() throws Exception { /* Generate actions */ workflowScheme3Step2Action1 = addWorkflowAction(workflowScheme3Step2Action1Name, 2, - workflowScheme3Step2.getId(), true, workflowScheme3Step2.getId(), reviewer, + workflowScheme3Step2.getId(), workflowScheme3Step2.getId(), reviewer, workflowScheme3.getId()); workflowScheme3Step2Action2 = addWorkflowAction(workflowScheme3Step2Action2Name, 3, - workflowScheme3Step2.getId(), true, workflowScheme3Step2.getId(), contributor, + workflowScheme3Step2.getId(), workflowScheme3Step2.getId(), contributor, workflowScheme3.getId()); workflowScheme3Step1Action1 = addWorkflowAction(workflowScheme3Step1ActionPublisherName, 1, - workflowScheme3Step2.getId(), true, workflowScheme3Step1.getId(), publisher, + workflowScheme3Step2.getId(), workflowScheme3Step1.getId(), publisher, workflowScheme3.getId()); //fourth Workflow Scheme @@ -498,64 +499,64 @@ public static void prepare() throws Exception { /* Generate actions */ //-- Step 3 workflowScheme4Step3ActionView = addWorkflowAction(workflowScheme4Step3ActionViewName, 1, - workflowScheme4Step3.getId(), false, workflowScheme4Step3.getId(), anyWhoView, + workflowScheme4Step3.getId(), workflowScheme4Step3.getId(), anyWhoView, workflowScheme4.getId()); workflowScheme4Step3ActionEdit = addWorkflowAction(workflowScheme4Step3ActionEditName, 2, - workflowScheme4Step3.getId(), false, workflowScheme4Step3.getId(), anyWhoEdit, + workflowScheme4Step3.getId(), workflowScheme4Step3.getId(), anyWhoEdit, workflowScheme4.getId()); workflowScheme4Step3ActionPublish = addWorkflowAction(workflowScheme4Step3ActionPublishName, 3, - workflowScheme4Step3.getId(), false, workflowScheme4Step3.getId(), anyWhoPublish, + workflowScheme4Step3.getId(), workflowScheme4Step3.getId(), anyWhoPublish, workflowScheme4.getId()); workflowScheme4Step3ActionEditPermissions = addWorkflowAction( workflowScheme4Step3ActionEditPermissionsName, 4, - workflowScheme4Step3.getId(), false, workflowScheme4Step3.getId(), + workflowScheme4Step3.getId(), workflowScheme4Step3.getId(), anyWhoEditPermissions, workflowScheme4.getId()); workflowScheme4Step3ActionPublisher = addWorkflowAction( workflowScheme4Step3ActionPublisherName, 5, - workflowScheme4Step3.getId(), false, workflowScheme4Step3.getId(), publisher, + workflowScheme4Step3.getId(), workflowScheme4Step3.getId(), publisher, workflowScheme4.getId()); //-- Step 2 workflowScheme4Step2ActionView = addWorkflowAction(workflowScheme4Step2ActionViewName, 1, - workflowScheme4Step3.getId(), false, workflowScheme4Step2.getId(), anyWhoView, + workflowScheme4Step3.getId(), workflowScheme4Step2.getId(), anyWhoView, workflowScheme4.getId()); workflowScheme4Step2ActionEdit = addWorkflowAction(workflowScheme4Step2ActionEditName, 2, - workflowScheme4Step3.getId(), false, workflowScheme4Step2.getId(), anyWhoEdit, + workflowScheme4Step3.getId(), workflowScheme4Step2.getId(), anyWhoEdit, workflowScheme4.getId()); workflowScheme4Step2ActionPublish = addWorkflowAction(workflowScheme4Step2ActionPublishName, 3, - workflowScheme4Step3.getId(), false, workflowScheme4Step2.getId(), anyWhoPublish, + workflowScheme4Step3.getId(), workflowScheme4Step2.getId(), anyWhoPublish, workflowScheme4.getId()); workflowScheme4Step2ActionEditPermissions = addWorkflowAction( workflowScheme4Step2ActionEditPermissionsName, 4, - workflowScheme4Step3.getId(), false, workflowScheme4Step2.getId(), + workflowScheme4Step3.getId(), workflowScheme4Step2.getId(), anyWhoEditPermissions, workflowScheme4.getId()); workflowScheme4Step2ActionReviewer = addWorkflowAction( workflowScheme4Step2ActionReviewerName, 5, - workflowScheme4Step3.getId(), false, workflowScheme4Step2.getId(), reviewer, + workflowScheme4Step3.getId(), workflowScheme4Step2.getId(), reviewer, workflowScheme4.getId()); //-- Step 1 workflowScheme4Step1ActionView = addWorkflowAction(workflowScheme4Step1ActionViewName, 1, - workflowScheme4Step2.getId(), false, workflowScheme4Step1.getId(), anyWhoView, + workflowScheme4Step2.getId(), workflowScheme4Step1.getId(), anyWhoView, workflowScheme4.getId()); workflowScheme4Step1ActionEdit = addWorkflowAction(workflowScheme4Step1ActionEditName, 2, - workflowScheme4Step2.getId(), false, workflowScheme4Step1.getId(), anyWhoEdit, + workflowScheme4Step2.getId(), workflowScheme4Step1.getId(), anyWhoEdit, workflowScheme4.getId()); workflowScheme4Step1ActionPublish = addWorkflowAction(workflowScheme4Step1ActionPublishName, 3, - workflowScheme4Step2.getId(), false, workflowScheme4Step1.getId(), anyWhoPublish, + workflowScheme4Step2.getId(), workflowScheme4Step1.getId(), anyWhoPublish, workflowScheme4.getId()); workflowScheme4Step1ActionEditPermissions = addWorkflowAction( workflowScheme4Step1ActionEditPermissionsName, 4, - workflowScheme4Step2.getId(), false, workflowScheme4Step1.getId(), + workflowScheme4Step2.getId(), workflowScheme4Step1.getId(), anyWhoEditPermissions, workflowScheme4.getId()); workflowScheme4Step1ActionContributor = addWorkflowAction( workflowScheme4Step1ActionContributorName, 5, - workflowScheme4Step2.getId(), false, workflowScheme4Step1.getId(), contributor, + workflowScheme4Step2.getId(), workflowScheme4Step1.getId(), contributor, workflowScheme4.getId()); /** @@ -580,7 +581,7 @@ public static void prepare() throws Exception { workflowScheme5.getId()); workflowScheme5Step1Action1 = addWorkflowAction(workflowScheme5Step1ActionPublishName, 1, - workflowScheme5Step1.getId(), true, workflowScheme5Step1.getId(), anyWhoView, + workflowScheme5Step1.getId(), workflowScheme5Step1.getId(), anyWhoView, workflowScheme5.getId()); workflowScheme5Step1Action1SubAction1 = addSubActionClass( @@ -640,7 +641,7 @@ public void delete_action_and_dependencies_Test() final String myActionName = "Action1"+time; final WorkflowScheme myWorkflowScheme = addWorkflowScheme(myWorkflowName); final WorkflowStep myWorkflowSchemeStep1 = addWorkflowStep(myStep1Name, 1, false, false, myWorkflowScheme.getId()); - final WorkflowAction myWorkflowSchemeAction = addWorkflowAction(myActionName, 1, myWorkflowSchemeStep1.getId(), true, myWorkflowSchemeStep1.getId(), reviewer, myWorkflowScheme.getId()); + final WorkflowAction myWorkflowSchemeAction = addWorkflowAction(myActionName, 1, myWorkflowSchemeStep1.getId(), myWorkflowSchemeStep1.getId(), reviewer, myWorkflowScheme.getId()); final String myContentTypeName = "CTWorkflowTesting_" + time; final ContentType myContentType = insertContentType(myContentTypeName, BaseContentType.CONTENT); @@ -1811,7 +1812,7 @@ public void issue5197() * Add action to scheme step1 */ addWorkflowAction("Edit", 1, - step2.getId(), false, step1.getId(), anonymousRole, + step2.getId(), step1.getId(), anonymousRole, ws.getId()); final List actions1 = workflowAPI.findActions(step1, user); @@ -1822,7 +1823,7 @@ public void issue5197() * Add action to scheme step2 */ addWorkflowAction("Publish", 1, - step2.getId(), false, step2.getId(), anonymousRole, + step2.getId(), step2.getId(), anonymousRole, ws.getId()); final List actions2 = workflowAPI.findActions(step2, user); @@ -3121,6 +3122,13 @@ protected static WorkflowStep addWorkflowStep(final String name, final int order return step; } + protected static WorkflowAction addWorkflowAction(final String name, final int order, + final String nextStep, final String stepId, final Role whoCanUse, + final String schemeId) + throws DotDataException { + return addWorkflowAction(name, order, nextStep, stepId, whoCanUse, schemeId, new HashMap<>()); + } + /** * Add a workflowAction * @@ -3133,10 +3141,9 @@ protected static WorkflowStep addWorkflowStep(final String name, final int order * @return A workflowAction */ protected static WorkflowAction addWorkflowAction(final String name, final int order, - final String nextStep, - final boolean requiresCheckout, final String stepId, final Role whoCanUse, - final String schemeId) - throws DotDataException, DotSecurityException { + final String nextStep, final String stepId, final Role whoCanUse, + final String schemeId, final Map metadata) + throws DotDataException { WorkflowAction action = null; try { @@ -3153,7 +3160,7 @@ protected static WorkflowAction addWorkflowAction(final String name, final int o action.setAssignable(false); action.setShowOn(WorkflowState.LOCKED, WorkflowState.UNLOCKED, WorkflowState.NEW, WorkflowState.PUBLISHED, WorkflowState.UNPUBLISHED, WorkflowState.ARCHIVED, WorkflowState.EDITING); - + action.setMetadata(metadata); workflowAPI.saveAction(action, Arrays.asList(new Permission[]{ new Permission(action.getId(), @@ -4016,11 +4023,11 @@ public void test_create_workflow_with_two_move_actionlets_test_findActions() thr /* Generate actions */ final WorkflowAction workflowSchemeMoveToAction = addWorkflowAction(workflowScheme3Step1ActionMoveToName, 1, - workflowSchemeStep.getId(), true, workflowSchemeStep.getId(), reviewer, + workflowSchemeStep.getId(), workflowSchemeStep.getId(), reviewer, workflowScheme.getId()); final WorkflowAction workflowSchemeMoveToFolderAction = addWorkflowAction(workflowScheme3Step2ActionMoveToFolderName, 2, - workflowSchemeStep.getId(), true, workflowSchemeStep.getId(), contributor, + workflowSchemeStep.getId(), workflowSchemeStep.getId(), contributor, workflowScheme.getId()); final WorkflowActionClass moveToActionClass = addSubActionClass("Move", workflowSchemeMoveToAction.getId(), MoveContentActionlet.class, 0); @@ -4197,4 +4204,83 @@ private Field createRelationshipField(final String relationshipName, final Strin return fieldAPI.save(field, user); } + + /** + *
    + *
  • Method to test: {@link WorkflowAPI#findAvailableActions(Contentlet, User)} + *
  • + *
  • Given Scenario: Create a test Workflow Scheme with two Steps. One of them + * has a separator between the actions. Then, create a test Contentlet assigned to such a + * Workflow and check the available actions that can be executed on the Contentlet.
  • + *
  • Expected Result: The available actions must include the separator.
  • + *
+ */ + @Test + public void addSeparatorToWorkflowStep() throws DotDataException, DotSecurityException { + long time = System.currentTimeMillis(); + final String workflowSchemeName = "WorkflowSchemeWithSeparator" + time; + final String step1Name = "WithSeparatorStep1" + time; + final String step2Name = "WithoutSeparatorStep2_" + time; + final String workflowAction1NameStep1 = "action1Step1_" + time; + final String workflowAction3NameStep1 = "action3Step1_" + time; + final String workflowAction1NameStep2 = "action1Step2_" + time; + final String typeName = "WorkflowActionSeparatorTest_" + time; + + // Add a test Workflow + final WorkflowScheme workflowScheme = addWorkflowScheme(workflowSchemeName); + + // Add two Steps to it + final WorkflowStep workflowStep1 = addWorkflowStep(step1Name, 1, false, false, + workflowScheme.getId()); + final WorkflowStep workflowStep2 = addWorkflowStep(step2Name, 2, true, false, + workflowScheme.getId()); + + // Add actions to the Steps: Two actions and one separator in Step 1, and one action in + // Step 2 + final WorkflowAction workflowAction1Step1 = addWorkflowAction(workflowAction1NameStep1, 1, + workflowStep1.getId(), workflowStep1.getId(), intranet, workflowScheme.getId()); + addWorkflowAction(WorkflowAction.SEPARATOR, 2, workflowStep1.getId(), + workflowStep1.getId(), intranet, workflowScheme.getId(), Map.of("subtype", + WorkflowAction.SEPARATOR)); + addWorkflowAction(workflowAction3NameStep1, 3, workflowStep1.getId(), + workflowStep1.getId(), intranet, workflowScheme.getId()); + + addWorkflowAction(workflowAction1NameStep2, 1, workflowStep2.getId(), + workflowStep2.getId(), intranet, workflowScheme.getId()); + + // Assign the Workflow Scheme to a test Content Type + final ContentType testContentType = insertContentType(typeName, BaseContentType.CONTENT); + final Structure testContentTypeStruct = new StructureTransformer(testContentType).asStructure(); + workflowAPI.saveSchemesForStruct(testContentTypeStruct, List.of(workflowScheme)); + + // Create a test contentlet + Contentlet testContentlet1 = new Contentlet(); + testContentlet1.setLanguageId(1); + testContentlet1.setStringProperty(FIELD_VAR_NAME, "My Test Contentlet " + time); + testContentlet1.setContentTypeId(testContentType.id()); + testContentlet1.setHost(defaultHost.getIdentifier()); + testContentlet1.setIndexPolicy(IndexPolicy.FORCE); + testContentlet1 = contentletAPI.checkin(testContentlet1, user, false); + testContentlet1 = fireWorkflowAction(testContentlet1, null, workflowAction1Step1, + StringPool.BLANK, StringPool.BLANK, user); + workflowAPI.deleteWorkflowTaskByContentletIdAnyLanguage(testContentlet1, user); + + // Adding permissions to the just created contentlet + final Role role = roleAPI.getUserRole(billIntranet); + final Permission p1 = new Permission(testContentlet1.getPermissionId(), role.getId(), + (PermissionAPI.PERMISSION_READ | PermissionAPI.PERMISSION_EDIT), true); + final List permissions = List.of(p1); + permissionAPI.save(permissions, testContentlet1, user, false); + + // Checkout the created Contentlet + final Contentlet testContentlet1Checkout = + contentletAPI.checkout(testContentlet1.getInode(), user, false); + final List foundActions = + workflowAPI.findAvailableActions(testContentlet1Checkout, billIntranet); + + assertNotNull(foundActions); + assertEquals("The second Workflow Action must be of subtype SEPARATOR", + WorkflowAction.SEPARATOR, foundActions.get(1).getMetadata().get("subtype")); + } + } diff --git a/dotCMS/src/main/java/com/dotcms/workflow/helper/WorkflowHelper.java b/dotCMS/src/main/java/com/dotcms/workflow/helper/WorkflowHelper.java index 126ae4d0c8ea..ec2564f00ba4 100644 --- a/dotCMS/src/main/java/com/dotcms/workflow/helper/WorkflowHelper.java +++ b/dotCMS/src/main/java/com/dotcms/workflow/helper/WorkflowHelper.java @@ -1610,7 +1610,7 @@ public WorkflowAction saveAction(final String actionId, final WorkflowActionForm workflowActionClass.setOrder(0); this.workflowAPI.saveActionClass(workflowActionClass, user); } catch (final Exception e) { - final String errorMsg = String.format("Failed to save Workflow Action Class with ID '%s': %s", newAction.getId(), e.getMessage()); + final String errorMsg = String.format("Failed to save Workflow Action Class with ID '%s': %s", newAction.getId(), ExceptionUtil.getErrorMessage(e)); Logger.error(this.getClass(), errorMsg); Logger.debug(this, errorMsg, e); throw new DotWorkflowException(errorMsg, e); @@ -1618,7 +1618,7 @@ public WorkflowAction saveAction(final String actionId, final WorkflowActionForm }); } } catch (final Exception e) { - final String errorMsg = String.format("Failed to save Workflow Action '%s': %s", actionId, e.getMessage()); + final String errorMsg = String.format("Failed to save Workflow Action '%s': %s", actionId, ExceptionUtil.getErrorMessage(e)); Logger.error(this.getClass(), errorMsg); Logger.debug(this, errorMsg, e); throw new DotWorkflowException(errorMsg, e); diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/ajax/WfActionAjax.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/ajax/WfActionAjax.java index afa7eb660559..5ea5859f31eb 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/ajax/WfActionAjax.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/ajax/WfActionAjax.java @@ -1,5 +1,6 @@ package com.dotmarketing.portlets.workflows.ajax; +import com.dotcms.exception.ExceptionUtil; import com.dotcms.workflow.form.WorkflowActionForm; import com.dotcms.workflow.form.WorkflowReorderBean; import com.dotcms.workflow.helper.WorkflowHelper; @@ -151,8 +152,9 @@ public void save(final HttpServletRequest request, response.getWriter().println("SUCCESS:" + newAction.getId()); } catch (final Exception e) { Logger.error(this.getClass(), String.format("An error occurred when saving Workflow " + - "Action '%s' [ %s ]: %s", actionName, actionId, e.getMessage()), e); - writeError(response, e.getMessage()); + "Action '%s' [ %s ]: %s", actionName, actionId, + ExceptionUtil.getErrorMessage(e)), e); + writeError(response, ExceptionUtil.getErrorMessage(e)); } } // save. From 0e1cd7043d436ea57af60ced19e1efb03e4e1230 Mon Sep 17 00:00:00 2001 From: Jose Castro Date: Tue, 10 Oct 2023 15:26:58 -0600 Subject: [PATCH 05/16] Implementing SonarQube feedback. --- .../workflow/form/WorkflowActionForm.java | 1 - .../portlets/workflows/ajax/WfActionAjax.java | 49 ++--- .../portlets/workflows/ajax/WfBaseAction.java | 30 ++- .../workflows/business/MSSQLWorkflowSQL.java | 15 -- .../workflows/business/MySQLWorkflowSQL.java | 17 -- .../workflows/business/OracleWorkflowSQL.java | 13 -- .../business/PostgresWorkflowSQL.java | 12 -- .../business/WorkflowFactoryImpl.java | 151 +++++++------- .../workflows/business/WorkflowSQL.java | 194 ++++++++---------- .../workflows/model/WorkflowAction.java | 3 +- 10 files changed, 210 insertions(+), 275 deletions(-) delete mode 100644 dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/MSSQLWorkflowSQL.java delete mode 100644 dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/MySQLWorkflowSQL.java delete mode 100644 dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/OracleWorkflowSQL.java delete mode 100644 dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/PostgresWorkflowSQL.java diff --git a/dotCMS/src/main/java/com/dotcms/workflow/form/WorkflowActionForm.java b/dotCMS/src/main/java/com/dotcms/workflow/form/WorkflowActionForm.java index 9931977ded30..2ef411ccf497 100644 --- a/dotCMS/src/main/java/com/dotcms/workflow/form/WorkflowActionForm.java +++ b/dotCMS/src/main/java/com/dotcms/workflow/form/WorkflowActionForm.java @@ -14,7 +14,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/ajax/WfActionAjax.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/ajax/WfActionAjax.java index 5ea5859f31eb..82c22102f564 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/ajax/WfActionAjax.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/ajax/WfActionAjax.java @@ -26,6 +26,7 @@ * This class is responsible for handling all CRUD requests related to Workflow Actions generated by * DWR requests. * + * @deprecated Classes related to the DWR framework will be removed in the near future. * @author root * @since Mar 22nd, 2012 */ @@ -35,14 +36,16 @@ public class WfActionAjax extends WfBaseAction { private final WorkflowHelper workflowHelper = WorkflowHelper.getInstance(); private final UserWebAPI userWebAPI = WebAPILocator.getUserWebAPI(); - public void action(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{}; + public void action(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // do nothing + } public void reorder(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException { - final String actionId = request.getParameter("actionId"); - final String stepId = request.getParameter("stepId"); - final String orderParam = request.getParameter("order"); + final String actionId = request.getParameter(ACTION_ID_PARAM); + final String stepId = request.getParameter(STEP_ID_PARAM); + final String orderParam = request.getParameter(ORDER_PARAM); try { @@ -65,9 +68,9 @@ public void reorder(final HttpServletRequest request, public void deleteActionForStep(final HttpServletRequest request, final HttpServletResponse response) throws IOException { - final String actionId = request.getParameter("actionId"); - final String stepId = request.getParameter("stepId"); - WorkflowStep workflowStep = null; + final String actionId = request.getParameter(ACTION_ID_PARAM); + final String stepId = request.getParameter(STEP_ID_PARAM); + WorkflowStep workflowStep; try { @@ -93,7 +96,7 @@ public void deleteActionForStep(final HttpServletRequest request, public void delete(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException { - final String actionId = request.getParameter("actionId"); + final String actionId = request.getParameter(ACTION_ID_PARAM); try { @@ -118,28 +121,28 @@ public void delete(final HttpServletRequest request, */ public void save(final HttpServletRequest request, final HttpServletResponse response) throws IOException { - final String actionId = request.getParameter("actionId"); - final String actionName = request.getParameter("actionName"); + final String actionId = request.getParameter(ACTION_ID_PARAM); + final String actionName = request.getParameter(ACTION_NAME_PARAM); final WorkflowActionForm.Builder builder = new WorkflowActionForm.Builder(); if (!WorkflowAction.SEPARATOR.equalsIgnoreCase(actionId)) { builder.actionName(actionName) .actionId(actionId) - .schemeId(request.getParameter("schemeId")) - .stepId(request.getParameter("stepId")) - .actionIcon(request.getParameter("actionIconSelect")) - .actionAssignable(request.getParameter("actionAssignable") != null) - .actionCommentable(request.getParameter("actionCommentable") != null) + .schemeId(request.getParameter(SCHEME_ID_PARAM)) + .stepId(request.getParameter(STEP_ID_PARAM)) + .actionIcon(request.getParameter(ACTION_ICON_SELECT_PARAM)) + .actionAssignable(request.getParameter(ACTION_ASSIGNABLE_PARAM) != null) + .actionCommentable(request.getParameter(ACTION_COMMENTABLE_PARAM) != null) .requiresCheckout(false) - .actionRoleHierarchyForAssign(request.getParameter("actionRoleHierarchyForAssign") != null) - .actionNextStep(request.getParameter("actionNextStep")) - .actionNextAssign(request.getParameter("actionAssignToSelect")) - .actionCondition(request.getParameter("actionCondition")) - .showOn(WorkflowState.toSet(request.getParameterValues("showOn"))); + .actionRoleHierarchyForAssign(request.getParameter(ACTION_ROLE_HIERARCHY_FOR_ASSIGN_PARAM) != null) + .actionNextStep(request.getParameter(ACTION_NEXT_STEP_PARAM)) + .actionNextAssign(request.getParameter(ACTION_ASSIGN_TO_SELECT_PARAM)) + .actionCondition(request.getParameter(ACTION_CONDITION_PARAM)) + .showOn(WorkflowState.toSet(request.getParameterValues(SHOW_ON_PARAM))); } else { - builder.separator(request.getParameter("schemeId"), request.getParameter("stepId")); + builder.separator(request.getParameter(SCHEME_ID_PARAM), request.getParameter(STEP_ID_PARAM)); } - final String whoCanUseTmp = UtilMethods.isSet(request.getParameter("whoCanUse")) - ? request.getParameter("whoCanUse") + final String whoCanUseTmp = UtilMethods.isSet(request.getParameter(WHO_CAN_USE_PARAM)) + ? request.getParameter(WHO_CAN_USE_PARAM) : StringPool.BLANK; final List whoCanUse = Arrays.asList(whoCanUseTmp.split(StringPool.COMMA)); builder.whoCanUse(whoCanUse); diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/ajax/WfBaseAction.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/ajax/WfBaseAction.java index 922a23eb9217..68f2ec61a837 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/ajax/WfBaseAction.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/ajax/WfBaseAction.java @@ -1,13 +1,5 @@ package com.dotmarketing.portlets.workflows.ajax; -import java.io.IOException; -import java.lang.reflect.Method; -import java.util.Set; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import com.dotmarketing.cms.factories.PublicCompanyFactory; import com.dotmarketing.servlets.ajax.AjaxAction; import com.dotmarketing.util.Logger; @@ -15,9 +7,31 @@ import com.google.common.annotations.VisibleForTesting; import com.liferay.portal.language.LanguageUtil; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.lang.reflect.Method; +import java.util.Set; + @Deprecated abstract class WfBaseAction extends AjaxAction { + protected static final String ACTION_ID_PARAM = "actionId"; + protected static final String ACTION_NAME_PARAM = "actionName"; + protected static final String SCHEME_ID_PARAM = "schemeId"; + protected static final String STEP_ID_PARAM = "stepId"; + protected static final String ACTION_ICON_SELECT_PARAM = "actionIconSelect"; + protected static final String ACTION_ASSIGNABLE_PARAM = "actionAssignable"; + protected static final String ACTION_COMMENTABLE_PARAM = "actionCommentable"; + protected static final String ACTION_ROLE_HIERARCHY_FOR_ASSIGN_PARAM = "actionRoleHierarchyForAssign"; + protected static final String ACTION_NEXT_STEP_PARAM = "actionNextStep"; + protected static final String ACTION_ASSIGN_TO_SELECT_PARAM = "actionAssignToSelect"; + protected static final String ACTION_CONDITION_PARAM = "actionCondition"; + protected static final String SHOW_ON_PARAM = "showOn"; + protected static final String WHO_CAN_USE_PARAM = "whoCanUse"; + protected static final String ORDER_PARAM = "order"; + protected abstract Set getAllowedCommands(); public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/MSSQLWorkflowSQL.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/MSSQLWorkflowSQL.java deleted file mode 100644 index 23a55ca03866..000000000000 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/MSSQLWorkflowSQL.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.dotmarketing.portlets.workflows.business; - - class MSSQLWorkflowSQL extends WorkflowSQL{ - - public MSSQLWorkflowSQL() { - // tweaks for MSSQL because of "key" field in workflow_action_class_pars - INSERT_ACTION_CLASS_PARAM=super.INSERT_ACTION_CLASS_PARAM.replace("key", "[key]"); - UPDATE_ACTION_CLASS_PARAM=super.UPDATE_ACTION_CLASS_PARAM.replace("key", "[key]"); - - SELECT_EXPIRED_TASKS = - "select workflow_task.id from workflow_task join workflow_step on (workflow_task.status=workflow_step.id) "+ - "where workflow_step.resolved=0 and workflow_step.escalation_enable='1' and "+ - "GETDATE()>dateadd(second,workflow_step.escalation_time,workflow_task.mod_date)"; - } -} diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/MySQLWorkflowSQL.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/MySQLWorkflowSQL.java deleted file mode 100644 index b0d58fb43075..000000000000 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/MySQLWorkflowSQL.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.dotmarketing.portlets.workflows.business; - -class MySQLWorkflowSQL extends WorkflowSQL{ - - - public MySQLWorkflowSQL() { - INSERT_ACTION_CLASS_PARAM= "insert into workflow_action_class_pars (id,workflow_action_class_id,`key`,value) values (?,?, ?, ?)"; - UPDATE_ACTION_CLASS_PARAM= "update workflow_action_class_pars set workflow_action_class_id= ?, `key`=?, value=? where id =?"; - - SELECT_EXPIRED_TASKS= - "select workflow_task.id from workflow_task join workflow_step "+ - "on (workflow_task.status=workflow_step.id) "+ - "where workflow_step.resolved='0' and workflow_step.escalation_enable='1' and "+ - "now()>workflow_task.mod_date+interval workflow_step.escalation_time second"; - } - -} diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/OracleWorkflowSQL.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/OracleWorkflowSQL.java deleted file mode 100644 index ee3bcf358951..000000000000 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/OracleWorkflowSQL.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.dotmarketing.portlets.workflows.business; - class OracleWorkflowSQL extends WorkflowSQL{ - - public OracleWorkflowSQL() { - SELECT_EXPIRED_TASKS= - "select workflow_task.id from workflow_task join workflow_step on (workflow_task.status=workflow_step.id) "+ - "where workflow_step.resolved=0 and workflow_step.escalation_enable=1 and "+ - "sysdate>workflow_task.mod_date+NUMTODSINTERVAL(workflow_step.escalation_time,'second')"; - } - - - -} diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/PostgresWorkflowSQL.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/PostgresWorkflowSQL.java deleted file mode 100644 index 85385351cf29..000000000000 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/PostgresWorkflowSQL.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.dotmarketing.portlets.workflows.business; - -class PostgresWorkflowSQL extends WorkflowSQL{ - - public PostgresWorkflowSQL() { - SELECT_EXPIRED_TASKS = - "select workflow_task.id from workflow_task join workflow_step on (workflow_task.status=workflow_step.id) "+ - "where workflow_step.resolved=false and workflow_step.escalation_enable=true and now()>workflow_task.mod_date+ "+ - "cast(cast(workflow_step.escalation_time as varchar(20))||' seconds' as interval) "; - - } -} diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java index 257a21887377..184d1610d227 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java @@ -64,22 +64,16 @@ import java.util.function.Consumer; import java.util.stream.Collectors; -import static com.dotmarketing.portlets.workflows.business.WorkflowSQL.INSERT_ACTION; -import static com.dotmarketing.portlets.workflows.business.WorkflowSQL.UPDATE_ACTION; - - /** * Implementation class for the {@link WorkFlowFactory}. * * @author root * @since Mar, 22, 2012 */ - public class WorkflowFactoryImpl implements WorkFlowFactory { public static final int PARTITION_IN_SIZE = 100; private final WorkflowCache cache; - private final WorkflowSQL sql; private static final ObjectMapper JSON_MAPPER = DotObjectMapperProvider.getInstance() .getDefaultObjectMapper(); @@ -87,7 +81,6 @@ public class WorkflowFactoryImpl implements WorkFlowFactory { * Creates an instance of the {@link WorkFlowFactory}. */ public WorkflowFactoryImpl() { - this.sql = WorkflowSQL.getInstance(); this.cache = CacheLocator.getWorkFlowCache(); } @@ -334,11 +327,11 @@ public void deleteAction(final WorkflowAction action) "Removing action steps dependencies, for the action: " + action.getId()); final List> stepIdList = - new DotConnect().setSQL(sql.SELECT_STEPS_ID_BY_ACTION) + new DotConnect().setSQL(WorkflowSQL.SELECT_STEPS_ID_BY_ACTION) .addParam(action.getId()).loadObjectResults(); if (null != stepIdList && stepIdList.size() > 0) { - new DotConnect().setSQL(sql.DELETE_ACTIONS_BY_STEP) + new DotConnect().setSQL(WorkflowSQL.DELETE_ACTIONS_BY_STEP) .addParam(action.getId()).loadResult(); for (Map stepIdRow : stepIdList) { @@ -353,7 +346,7 @@ public void deleteAction(final WorkflowAction action) Logger.debug(this, "Removing the action: " + action.getId()); - new DotConnect().setSQL(sql.DELETE_ACTION) + new DotConnect().setSQL(WorkflowSQL.DELETE_ACTION) .addParam(action.getId()).loadResult(); final WorkflowScheme proxyScheme = new WorkflowScheme(); @@ -373,7 +366,7 @@ public void deleteAction(final WorkflowAction action, final WorkflowStep step) Logger.debug(this, "Deleting the action: " + action.getId() + ", from the step: " + step.getId()); - new DotConnect().setSQL(sql.DELETE_ACTION_STEP) + new DotConnect().setSQL(WorkflowSQL.DELETE_ACTION_STEP) .addParam(action.getId()).addParam(step.getId()).loadResult(); Logger.debug(this, "Cleaning the actions from the step CACHE: " + step.getId()); @@ -390,7 +383,7 @@ public void deleteActions(final WorkflowStep step) throws DotDataException, AlreadyExistException { Logger.debug(this, "Removing the actions associated to the step: " + step.getId()); - new DotConnect().setSQL(sql.DELETE_ACTIONS_STEP) + new DotConnect().setSQL(WorkflowSQL.DELETE_ACTIONS_STEP) .addParam(step.getId()).loadResult(); Logger.debug(this, "Removing the actions cache associated to the step: " + step.getId()); @@ -412,11 +405,11 @@ public void deleteActionClass(WorkflowActionClass actionClass) throws DotDataException, AlreadyExistException { String actionId = actionClass.getActionId(); final DotConnect db = new DotConnect(); - db.setSQL(sql.DELETE_ACTION_CLASS_PARAM_BY_ACTION_CLASS); + db.setSQL(WorkflowSQL.DELETE_ACTION_CLASS_PARAM_BY_ACTION_CLASS); db.addParam(actionClass.getId()); db.loadResult(); - db.setSQL(sql.DELETE_ACTION_CLASS); + db.setSQL(WorkflowSQL.DELETE_ACTION_CLASS); db.addParam(actionClass.getId()); db.loadResult(); @@ -436,7 +429,7 @@ public void deleteActionClass(WorkflowActionClass actionClass) public void deleteActionClassByAction(WorkflowAction action) throws DotDataException, DotSecurityException, AlreadyExistException { - new DotConnect().setSQL(sql.DELETE_ACTION_CLASS_BY_ACTION).addParam(action.getId()) + new DotConnect().setSQL(WorkflowSQL.DELETE_ACTION_CLASS_BY_ACTION).addParam(action.getId()) .loadResult(); // update scheme mod date @@ -473,7 +466,7 @@ public void deleteStep(final WorkflowStep step, } } - db.setSQL(sql.DELETE_STEP); + db.setSQL(WorkflowSQL.DELETE_STEP); db.addParam(step.getId()); db.loadResult(); cache.remove(step); @@ -489,7 +482,7 @@ public int getCountContentletsReferencingStep(WorkflowStep step) throws DotDataE final DotConnect db = new DotConnect(); // get step related assets - db.setSQL(sql.SELECT_COUNT_CONTENTLES_BY_STEP); + db.setSQL(WorkflowSQL.SELECT_COUNT_CONTENTLES_BY_STEP); db.addParam(step.getId()); Map res = db.loadObjectResults().get(0); return ConversionUtils.toInt(res.get("count"), 0); @@ -499,7 +492,7 @@ public int getCountContentletsReferencingStep(WorkflowStep step) throws DotDataE public void deleteWorkflowActionClassParameters(WorkflowActionClass actionClass) throws DotDataException, AlreadyExistException { final DotConnect db = new DotConnect(); - db.setSQL(sql.DELETE_ACTION_CLASS_PARAM_BY_ACTION_CLASS); + db.setSQL(WorkflowSQL.DELETE_ACTION_CLASS_PARAM_BY_ACTION_CLASS); db.addParam(actionClass.getId()); db.loadResult(); @@ -680,7 +673,7 @@ public void deleteWorkflowTask(WorkflowTask task) throws DotDataException { @Override public WorkflowAction findAction(String id) throws DotDataException { final DotConnect db = new DotConnect(); - db.setSQL(sql.SELECT_ACTION); + db.setSQL(WorkflowSQL.SELECT_ACTION); db.addParam(id); try { return (WorkflowAction) this.convertListToObjects(db.loadObjectResults(), @@ -695,7 +688,7 @@ public WorkflowAction findAction(final String actionId, final String stepId) throws DotDataException { final DotConnect db = new DotConnect(); - db.setSQL(sql.SELECT_ACTION_BY_STEP); + db.setSQL(WorkflowSQL.SELECT_ACTION_BY_STEP); db.addParam(actionId).addParam(stepId); try { @@ -709,7 +702,7 @@ public WorkflowAction findAction(final String actionId, @Override public WorkflowActionClass findActionClass(String id) throws DotDataException { final DotConnect db = new DotConnect(); - db.setSQL(sql.SELECT_ACTION_CLASS); + db.setSQL(WorkflowSQL.SELECT_ACTION_CLASS); db.addParam(id); try { @@ -729,7 +722,7 @@ public List findActionClasses(final WorkflowAction action) if (null == classes) { classes = this.convertListToObjects( - new DotConnect().setSQL(sql.SELECT_ACTION_CLASSES_BY_ACTION) + new DotConnect().setSQL(WorkflowSQL.SELECT_ACTION_CLASSES_BY_ACTION) .addParam(action.getId()).loadObjectResults(), WorkflowActionClass.class); @@ -744,7 +737,7 @@ public List findActionClassesByClassName(final String actio throws DotDataException { final List classes = this.convertListToObjects( - new DotConnect().setSQL(sql.SELECT_ACTION_CLASSES_BY_CLASS) + new DotConnect().setSQL(WorkflowSQL.SELECT_ACTION_CLASSES_BY_CLASS) .addParam(actionClassName).loadObjectResults(), WorkflowActionClass.class); return classes; @@ -754,7 +747,7 @@ public List findActionClassesByClassName(final String actio public WorkflowActionClassParameter findActionClassParameter(String id) throws DotDataException { final DotConnect db = new DotConnect(); - db.setSQL(sql.SELECT_ACTION_CLASS_PARAM); + db.setSQL(WorkflowSQL.SELECT_ACTION_CLASS_PARAM); db.addParam(id); return (WorkflowActionClassParameter) this.convertListToObjects(db.loadObjectResults(), WorkflowActionClassParameter.class).get(0); @@ -768,7 +761,7 @@ public List findActions(final WorkflowStep step) throws DotDataE if (null == actions) { actions = this.convertListToObjects( - new DotConnect().setSQL(sql.SELECT_ACTIONS_BY_STEP) + new DotConnect().setSQL(WorkflowSQL.SELECT_ACTIONS_BY_STEP) .addParam(step.getId()).loadObjectResults(), WorkflowAction.class); cache.addActions(step, actions); @@ -785,7 +778,7 @@ public List findActions(final WorkflowScheme scheme) throws DotD if (null == actions) { final DotConnect db = new DotConnect(); - db.setSQL(sql.SELECT_ACTIONS_BY_SCHEME); + db.setSQL(WorkflowSQL.SELECT_ACTIONS_BY_SCHEME); db.addParam(scheme.getId()); actions = this.convertListToObjects(db.loadObjectResults(), WorkflowAction.class); @@ -800,7 +793,7 @@ public List findActions(final WorkflowScheme scheme) throws DotD public Map findParamsForActionClass( WorkflowActionClass actionClass) throws DotDataException { final DotConnect db = new DotConnect(); - db.setSQL(sql.SELECT_ACTION_CLASS_PARAMS_BY_ACTIONCLASS); + db.setSQL(WorkflowSQL.SELECT_ACTION_CLASS_PARAMS_BY_ACTIONCLASS); db.addParam(actionClass.getId()); final List list = (List) this.convertListToObjects( db.loadObjectResults(), WorkflowActionClassParameter.class); @@ -846,7 +839,7 @@ public WorkflowScheme findScheme(String id) throws DotDataException { if (scheme == null) { try { final DotConnect db = new DotConnect(); - db.setSQL(sql.SELECT_SCHEME); + db.setSQL(WorkflowSQL.SELECT_SCHEME); db.addParam(id); scheme = (WorkflowScheme) this.convertListToObjects(db.loadObjectResults(), WorkflowScheme.class).get(0); @@ -877,7 +870,7 @@ public List findSchemesForStruct(final String structId) } final DotConnect db = new DotConnect(); - db.setSQL(sql.SELECT_SCHEME_BY_STRUCT); + db.setSQL(WorkflowSQL.SELECT_SCHEME_BY_STRUCT); db.addParam(structId); try { schemes = this.convertListToObjects(db.loadObjectResults(), WorkflowScheme.class); @@ -899,7 +892,7 @@ public WorkflowScheme findSystemWorkflow() throws DotDataException { @Override public List findSchemes(boolean showArchived) throws DotDataException { final DotConnect db = new DotConnect(); - db.setSQL(sql.SELECT_SCHEMES); + db.setSQL(WorkflowSQL.SELECT_SCHEMES); db.addParam(false); db.addParam(showArchived); return this.convertListToObjects(db.loadObjectResults(), WorkflowScheme.class); @@ -908,7 +901,7 @@ public List findSchemes(boolean showArchived) throws DotDataExce @Override public List findArchivedSchemes() throws DotDataException { final DotConnect db = new DotConnect(); - db.setSQL(sql.SELECT_SCHEMES); + db.setSQL(WorkflowSQL.SELECT_SCHEMES); db.addParam(true); db.addParam(true); return this.convertListToObjects(db.loadObjectResults(), WorkflowScheme.class); @@ -919,7 +912,7 @@ public WorkflowStep findStep(String id) throws DotDataException { WorkflowStep step = cache.getStep(id); if (step == null) { final DotConnect db = new DotConnect(); - db.setSQL(sql.SELECT_STEP); + db.setSQL(WorkflowSQL.SELECT_STEP); db.addParam(id); try { step = (WorkflowStep) this.convertListToObjects(db.loadObjectResults(), @@ -938,7 +931,7 @@ public Optional findFirstStep(final String actionId, final String WorkflowStep workflowStep = null; final List> workflowStepRows = - new DotConnect().setMaxRows(1).setSQL(sql.SELECT_STEPS_BY_ACTION) + new DotConnect().setMaxRows(1).setSQL(WorkflowSQL.SELECT_STEPS_BY_ACTION) .addParam(actionId).loadObjectResults(); try { @@ -973,7 +966,7 @@ public List findStepsByContentlet(final Contentlet contentlet, WorkflowStep step = null; try { final DotConnect db = new DotConnect(); - db.setSQL(sql.SELECT_STEP_BY_CONTENTLET); + db.setSQL(WorkflowSQL.SELECT_STEP_BY_CONTENTLET); db.addParam(contentlet.getIdentifier()); db.addParam(contentlet.getLanguageId()); @@ -1047,7 +1040,7 @@ public boolean existSchemeIdOnSchemesList(String schemeId, List @Override public List findSteps(WorkflowScheme scheme) throws DotDataException { final DotConnect db = new DotConnect(); - db.setSQL(sql.SELECT_STEPS_BY_SCHEME); + db.setSQL(WorkflowSQL.SELECT_STEPS_BY_SCHEME); db.addParam(scheme.getId()); return this.convertListToObjects(db.loadObjectResults(), WorkflowStep.class); @@ -1340,7 +1333,7 @@ public List> findSystemActionsByContentType(final ContentTyp if (null == results) { results = new DotConnect().setSQL( - sql.SELECT_SYSTEM_ACTION_BY_SCHEME_OR_CONTENT_TYPE_MAPPING) + WorkflowSQL.SELECT_SYSTEM_ACTION_BY_SCHEME_OR_CONTENT_TYPE_MAPPING) .addParam(contentType.variable()) .loadObjectResults(); @@ -1356,7 +1349,7 @@ public Map>> findSystemActionsMapByContentType( final List contentTypes) throws DotDataException { final ImmutableMap.Builder>> mappingMapBuilder = new ImmutableMap.Builder<>(); - final String selectQueryTemplate = sql.SELECT_SYSTEM_ACTION_BY_CONTENT_TYPES; + final String selectQueryTemplate = WorkflowSQL.SELECT_SYSTEM_ACTION_BY_CONTENT_TYPES; final Set notFoundContentTypes = new HashSet<>(); for (final ContentType contentType : contentTypes) { @@ -1440,7 +1433,7 @@ public List> findSystemActionsByScheme(final WorkflowScheme if (null == results) { results = new DotConnect() - .setSQL(sql.SELECT_SYSTEM_ACTION_BY_SCHEME_OR_CONTENT_TYPE_MAPPING) + .setSQL(WorkflowSQL.SELECT_SYSTEM_ACTION_BY_SCHEME_OR_CONTENT_TYPE_MAPPING) .addParam(workflowScheme.getId()) .loadObjectResults(); @@ -1460,7 +1453,7 @@ public List> findSystemActionsByWorkflowAction( if (null == results) { results = new DotConnect() - .setSQL(sql.SELECT_SYSTEM_ACTION_BY_WORKFLOW_ACTION) + .setSQL(WorkflowSQL.SELECT_SYSTEM_ACTION_BY_WORKFLOW_ACTION) .addParam(workflowAction.getId()) .loadObjectResults(); @@ -1491,7 +1484,7 @@ public Map findSystemActionByContentType( if (!UtilMethods.isSet(mappingRow)) { final List> rows = new DotConnect() - .setSQL(sql.SELECT_SYSTEM_ACTION_BY_SYSTEM_ACTION_AND_SCHEME_OR_CONTENT_TYPE_MAPPING) + .setSQL(WorkflowSQL.SELECT_SYSTEM_ACTION_BY_SYSTEM_ACTION_AND_SCHEME_OR_CONTENT_TYPE_MAPPING) .addParam(systemAction.name()) .addParam(contentType.variable()) .loadObjectResults(); @@ -1539,7 +1532,7 @@ public List> findSystemActionsBySchemes( for (final List schemes : schemeListOfList) { final DotConnect dotConnect = new DotConnect() - .setSQL(String.format(sql.SELECT_SYSTEM_ACTION_BY_SYSTEM_ACTION_AND_SCHEMES, + .setSQL(String.format(WorkflowSQL.SELECT_SYSTEM_ACTION_BY_SYSTEM_ACTION_AND_SCHEMES, this.createQueryIn(schemes))) .addParam(systemAction.name()); @@ -1566,7 +1559,7 @@ public Map findSystemActionByIdentifier(final String identifier) throws DotDataException { final List> rows = new DotConnect().setSQL( - sql.SELECT_SYSTEM_ACTION_BY_IDENTIFIER) + WorkflowSQL.SELECT_SYSTEM_ACTION_BY_IDENTIFIER) .addParam(identifier) .loadObjectResults(); return UtilMethods.isSet(rows) ? rows.get(0) : Collections.emptyMap(); @@ -1576,7 +1569,7 @@ public Map findSystemActionByIdentifier(final String identifier) public boolean deleteSystemAction(final SystemActionWorkflowActionMapping mapping) throws DotDataException { - new DotConnect().setSQL(sql.DELETE_SYSTEM_ACTION_BY_IDENTIFIER) + new DotConnect().setSQL(WorkflowSQL.DELETE_SYSTEM_ACTION_BY_IDENTIFIER) .addParam(mapping.getIdentifier()) .loadResult(); @@ -1593,11 +1586,11 @@ public void deleteSystemActionsByWorkflowAction(final WorkflowAction action) + action.getId()); final List> mappingsToClean = new DotConnect().setSQL( - sql.SELECT_SYSTEM_ACTION_BY_WORKFLOW_ACTION). + WorkflowSQL.SELECT_SYSTEM_ACTION_BY_WORKFLOW_ACTION). addParam(action.getId()) .loadObjectResults(); - new DotConnect().setSQL(sql.DELETE_SYSTEM_ACTION_BY_WORKFLOW_ACTION_ID) + new DotConnect().setSQL(WorkflowSQL.DELETE_SYSTEM_ACTION_BY_WORKFLOW_ACTION_ID) .addParam(action.getId()) .loadResult(); @@ -1640,14 +1633,14 @@ public SystemActionWorkflowActionMapping saveSystemActionWorkflowActionMapping( final List> existsRow = new DotConnect().setSQL( - sql.SELECT_SYSTEM_ACTION_BY_SYSTEM_ACTION_AND_SCHEME_OR_CONTENT_TYPE_MAPPING) + WorkflowSQL.SELECT_SYSTEM_ACTION_BY_SYSTEM_ACTION_AND_SCHEME_OR_CONTENT_TYPE_MAPPING) .addParam(mapping.getSystemAction().name()) .addParam(ownerKey) .loadObjectResults(); if (!UtilMethods.isSet(existsRow)) { - new DotConnect().setSQL(sql.INSERT_SYSTEM_ACTION_WORKFLOW_ACTION_MAPPING) + new DotConnect().setSQL(WorkflowSQL.INSERT_SYSTEM_ACTION_WORKFLOW_ACTION_MAPPING) .addParam(mapping.getIdentifier()) .addParam(mapping.getSystemAction().name()) .addParam(mapping.getWorkflowAction().getId()) @@ -1662,7 +1655,7 @@ public SystemActionWorkflowActionMapping saveSystemActionWorkflowActionMapping( mapping.getWorkflowAction(), mapping.getOwner()); - new DotConnect().setSQL(sql.UPDATE_SYSTEM_ACTION_WORKFLOW_ACTION_MAPPING) + new DotConnect().setSQL(WorkflowSQL.UPDATE_SYSTEM_ACTION_WORKFLOW_ACTION_MAPPING) .addParam(mapping.getSystemAction().name()) .addParam(mapping.getWorkflowAction().getId()) .addParam(ownerKey) @@ -1698,13 +1691,13 @@ public void saveAction(final WorkflowAction workflowAction, isNew = (null == findAction(workflowAction.getId(), workflowStep.getId())); } if (isNew) { - new DotConnect().setSQL(sql.INSERT_ACTION_FOR_STEP) + new DotConnect().setSQL(WorkflowSQL.INSERT_ACTION_FOR_STEP) .addParam(workflowAction.getId()) .addParam(workflowStep.getId()) .addParam(order) .loadResult(); } else { - new DotConnect().setSQL(sql.UPDATE_ACTION_FOR_STEP_ORDER) + new DotConnect().setSQL(WorkflowSQL.UPDATE_ACTION_FOR_STEP_ORDER) .addParam(order) .addParam(workflowAction.getId()) .addParam(workflowStep.getId()) @@ -1729,7 +1722,7 @@ public void updateOrder(final WorkflowAction workflowAction, final WorkflowStep workflowStep, final int order) throws DotDataException, AlreadyExistException { - new DotConnect().setSQL(sql.UPDATE_ACTION_FOR_STEP_ORDER) + new DotConnect().setSQL(WorkflowSQL.UPDATE_ACTION_FOR_STEP_ORDER) .addParam(order) .addParam(workflowAction.getId()) .addParam(workflowStep.getId()) @@ -1772,7 +1765,7 @@ public void saveAction(final WorkflowAction action) final String nextStep = this.getNextStep(action); final DotConnect db = new DotConnect(); if (isNew) { - db.setSQL(INSERT_ACTION); + db.setSQL(WorkflowSQL.INSERT_ACTION); db.addParam(action.getId()); db.addParam(action.getSchemeId()); db.addParam(action.getName()); @@ -1788,7 +1781,7 @@ public void saveAction(final WorkflowAction action) db.addParam(WorkflowState.toCommaSeparatedString(action.getShowOn())); db.addJSONParam(action.getMetadata()); } else { - db.setSQL(UPDATE_ACTION); + db.setSQL(WorkflowSQL.UPDATE_ACTION); db.addParam(action.getSchemeId()); db.addParam(action.getName()); db.addParam(action.getCondition()); @@ -1830,7 +1823,7 @@ public List findProxiesSteps(final WorkflowAction action) new ImmutableList.Builder<>(); final List> stepIdList = - new DotConnect().setSQL(sql.SELECT_STEPS_ID_BY_ACTION) + new DotConnect().setSQL(WorkflowSQL.SELECT_STEPS_ID_BY_ACTION) .addParam(action.getId()).loadObjectResults(); if (null != stepIdList) { @@ -1876,7 +1869,7 @@ public void saveActionClass(final WorkflowActionClass actionClass) final DotConnect db = new DotConnect(); if (isNew) { - db.setSQL(sql.INSERT_ACTION_CLASS); + db.setSQL(WorkflowSQL.INSERT_ACTION_CLASS); db.addParam(actionClass.getId()); db.addParam(actionClass.getActionId()); db.addParam(actionClass.getName()); @@ -1886,7 +1879,7 @@ public void saveActionClass(final WorkflowActionClass actionClass) } else { - db.setSQL(sql.UPDATE_ACTION_CLASS); + db.setSQL(WorkflowSQL.UPDATE_ACTION_CLASS); db.addParam(actionClass.getActionId()); db.addParam(actionClass.getName()); db.addParam(actionClass.getOrder()); @@ -1967,7 +1960,7 @@ public void saveScheme(WorkflowScheme scheme) throws DotDataException, AlreadyEx if (isNew) { - db.setSQL(sql.INSERT_SCHEME); + db.setSQL(WorkflowSQL.INSERT_SCHEME); db.addParam(scheme.getId()); db.addParam(scheme.getName()); db.addParam(scheme.getDescription()); @@ -1977,7 +1970,7 @@ public void saveScheme(WorkflowScheme scheme) throws DotDataException, AlreadyEx db.addParam(scheme.getModDate()); db.loadResult(); } else { - db.setSQL(sql.UPDATE_SCHEME); + db.setSQL(WorkflowSQL.UPDATE_SCHEME); db.addParam(scheme.getName()); db.addParam(scheme.getDescription()); db.addParam(scheme.isArchived()); @@ -2001,7 +1994,7 @@ public void forceDeleteSchemeForContentType(final String contentTypeId) Logger.info(this, "Deleting the schemes associated to the content type: " + contentTypeId); - new DotConnect().setSQL(sql.DELETE_SCHEME_FOR_STRUCT) + new DotConnect().setSQL(WorkflowSQL.DELETE_SCHEME_FOR_STRUCT) .addParam(contentTypeId).loadResult(); cache.removeStructure(contentTypeId); @@ -2033,13 +2026,13 @@ public void saveSchemeIdsForContentType(final String contentTypeInode, try { final DotConnect db = new DotConnect(); - db.setSQL(sql.DELETE_SCHEME_FOR_STRUCT); + db.setSQL(WorkflowSQL.DELETE_SCHEME_FOR_STRUCT); db.addParam(contentTypeInode); db.loadResult(); final ImmutableList.Builder stepBuilder = new ImmutableList.Builder<>(); for (final String id : schemesIds) { - db.setSQL(sql.INSERT_SCHEME_FOR_STRUCT); + db.setSQL(WorkflowSQL.INSERT_SCHEME_FOR_STRUCT); db.addParam(UUIDGenerator.generateUuid()); db.addParam(id); db.addParam(contentTypeInode); @@ -2072,7 +2065,7 @@ private void checkContentTypeWorkflowTaskNullStatus(final String contentTypeInod final List tasks = this .convertListToObjects(new DotConnect() - .setSQL(sql.SELECT_TASK_NULL_BY_STRUCT) + .setSQL(WorkflowSQL.SELECT_TASK_NULL_BY_STRUCT) .addParam(contentTypeInode).loadObjectResults(), WorkflowTask.class); //clean cache @@ -2114,7 +2107,7 @@ private void cleanWorkflowTaskStatus(final String contentTypeInode, } final DotConnect db = new DotConnect(); - db.setSQL(sql.SELECT_TASK_STEPS_TO_CLEAN_BY_STRUCT + condition); + db.setSQL(WorkflowSQL.SELECT_TASK_STEPS_TO_CLEAN_BY_STRUCT + condition); db.addParam(contentTypeInode); if (steps.size() > 0) { for (WorkflowStep step : steps) { @@ -2134,7 +2127,7 @@ private void cleanWorkflowTaskStatus(final String contentTypeInode, } }); - db.setSQL(sql.UPDATE_STEPS_BY_STRUCT + condition); + db.setSQL(WorkflowSQL.UPDATE_STEPS_BY_STRUCT + condition); db.addParam((Object) null); db.addParam(contentTypeInode); if (steps.size() > 0) { @@ -2182,7 +2175,7 @@ public void saveStep(WorkflowStep step) throws DotDataException, AlreadyExistExc final DotConnect db = new DotConnect(); if (isNew) { - db.setSQL(sql.INSERT_STEP); + db.setSQL(WorkflowSQL.INSERT_STEP); db.addParam(step.getId()); db.addParam(step.getName()); db.addParam(step.getSchemeId()); @@ -2198,7 +2191,7 @@ public void saveStep(WorkflowStep step) throws DotDataException, AlreadyExistExc } db.loadResult(); } else { - db.setSQL(sql.UPDATE_STEP); + db.setSQL(WorkflowSQL.UPDATE_STEP); db.addParam(step.getName()); db.addParam(step.getSchemeId()); db.addParam(step.getMyOrder()); @@ -2243,14 +2236,14 @@ public void saveWorkflowActionClassParameter(WorkflowActionClassParameter param) final DotConnect db = new DotConnect(); if (isNew) { - db.setSQL(sql.INSERT_ACTION_CLASS_PARAM); + db.setSQL(WorkflowSQL.INSERT_ACTION_CLASS_PARAM); db.addParam(param.getId()); db.addParam(param.getActionClassId()); db.addParam(param.getKey()); db.addParam(param.getValue()); db.loadResult(); } else { - db.setSQL(sql.UPDATE_ACTION_CLASS_PARAM); + db.setSQL(WorkflowSQL.UPDATE_ACTION_CLASS_PARAM); db.addParam(param.getActionClassId()); db.addParam(param.getKey()); @@ -2421,7 +2414,7 @@ public WorkflowHistory retrieveLastStepAction(String taskId) throws DotDataExcep final DotConnect db = new DotConnect(); try { - db.setSQL(sql.RETRIEVE_LAST_STEP_ACTIONID); + db.setSQL(WorkflowSQL.RETRIEVE_LAST_STEP_ACTIONID); db.addParam(taskId); db.loadResult(); } catch (final Exception e) { @@ -2438,7 +2431,7 @@ public List findExpiredTasks() throws DotDataException, DotSecurit final DotConnect db = new DotConnect(); List list = new ArrayList<>(); try { - db.setSQL(sql.SELECT_EXPIRED_TASKS); + db.setSQL(WorkflowSQL.SELECT_EXPIRED_TASKS); List> results = db.loadResults(); for (Map map : results) { String taskId = (String) map.get("id"); @@ -2459,7 +2452,7 @@ public WorkflowScheme findSchemeByName(String schemaName) throws DotDataExceptio WorkflowScheme scheme = null; try { final DotConnect db = new DotConnect(); - db.setSQL(sql.SELECT_SCHEME_NAME); + db.setSQL(WorkflowSQL.SELECT_SCHEME_NAME); db.addParam((schemaName != null ? schemaName.trim() : "")); List list = this.convertListToObjects(db.loadObjectResults(), WorkflowScheme.class); @@ -2474,7 +2467,7 @@ public WorkflowScheme findSchemeByName(String schemaName) throws DotDataExceptio public void deleteWorkflowActionClassParameter(WorkflowActionClassParameter param) throws DotDataException, AlreadyExistException { DotConnect db = new DotConnect(); - db.setSQL(sql.DELETE_ACTION_CLASS_PARAM_BY_ID); + db.setSQL(WorkflowSQL.DELETE_ACTION_CLASS_PARAM_BY_ID); db.addParam(param.getId()); db.loadResult(); @@ -2609,7 +2602,7 @@ public List findTasksByStep(final String stepId) DotConnect dc = new DotConnect(); try { - dc.setSQL(sql.SELECT_TASKS_BY_STEP); + dc.setSQL(WorkflowSQL.SELECT_TASKS_BY_STEP); dc.addParam(stepId); tasks = this.convertListToObjects(dc.loadObjectResults(), WorkflowTask.class); } catch (DotDataException e) { @@ -2625,7 +2618,7 @@ public List findContentTypesByScheme(final WorkflowScheme scheme) List contentTypes; DotConnect dc = new DotConnect(); try { - dc.setSQL(sql.SELECT_STRUCTS_FOR_SCHEME); + dc.setSQL(WorkflowSQL.SELECT_STRUCTS_FOR_SCHEME); dc.addParam(scheme.getId()); contentTypes = this.convertListToObjects(dc.loadObjectResults(), ContentType.class); @@ -2642,12 +2635,12 @@ public void deleteScheme(final WorkflowScheme scheme) DotConnect dc = new DotConnect(); try { //delete association of content types with the scheme - dc.setSQL(sql.DELETE_STRUCTS_FOR_SCHEME); + dc.setSQL(WorkflowSQL.DELETE_STRUCTS_FOR_SCHEME); dc.addParam(scheme.getId()); dc.loadResult(); //delete the scheme - dc.setSQL(sql.DELETE_SCHEME); + dc.setSQL(WorkflowSQL.DELETE_SCHEME); dc.addParam(scheme.getId()); dc.loadResult(); @@ -2673,7 +2666,7 @@ public void deleteSystemActionsByScheme(final WorkflowScheme scheme) throws DotD + scheme.getId()); new DotConnect() - .setSQL(sql.DELETE_SYSTEM_ACTION_BY_SCHEME_OR_CONTENT_TYPE) + .setSQL(WorkflowSQL.DELETE_SYSTEM_ACTION_BY_SCHEME_OR_CONTENT_TYPE) .addParam(scheme.getId()) .loadResult(); this.cache.removeSystemActionsByScheme(scheme.getId()); @@ -2688,7 +2681,7 @@ public void deleteSystemActionsByContentType(final String contentTypeVariable) + contentTypeVariable); new DotConnect() - .setSQL(sql.DELETE_SYSTEM_ACTION_BY_SCHEME_OR_CONTENT_TYPE) + .setSQL(WorkflowSQL.DELETE_SYSTEM_ACTION_BY_SCHEME_OR_CONTENT_TYPE) .addParam(contentTypeVariable) .loadResult(); this.cache.removeSystemActionsByContentType(contentTypeVariable); @@ -2699,7 +2692,7 @@ public Set findNullTaskContentletIdentifiersForScheme(final String workf throws DotDataException { final DotConnect dc = new DotConnect(); try { - dc.setSQL(sql.SELECT_NULL_TASK_CONTENTLET_FOR_WORKFLOW); + dc.setSQL(WorkflowSQL.SELECT_NULL_TASK_CONTENTLET_FOR_WORKFLOW); dc.addParam(workflowSchemeId); final List> result = dc.loadResults(); return result.stream().map(row -> row.get("identifier")).collect(Collectors.toSet()); diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowSQL.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowSQL.java index 96676cd5144d..905ae45482e4 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowSQL.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowSQL.java @@ -1,7 +1,5 @@ package com.dotmarketing.portlets.workflows.business; -import com.dotmarketing.db.DbConnectionFactory; - /** * This utility class provides all the SQL statements used to interact with the Workflow tables in * dotCMS. Here you can find CRUD queries for Workflow Schemes, Steps, Actions, and the @@ -10,125 +8,109 @@ * @author root * @since Mar 22nd, 2012 */ -abstract class WorkflowSQL { - - protected static final String MYSQL = "MySQL"; - protected static final String POSTGRESQL = "PostgreSQL"; - protected static final String ORACLE = "Oracle"; - protected static final String MSSQL = "Microsoft SQL Server"; - - static protected WorkflowSQL getInstance() { - if (DbConnectionFactory.isMySql()) { - return new MySQLWorkflowSQL(); - } else if (DbConnectionFactory.isPostgres()) { - return new PostgresWorkflowSQL(); - } else if (DbConnectionFactory.isMsSql()) { - return new MSSQLWorkflowSQL(); - } else if (DbConnectionFactory.isOracle()) { - return new OracleWorkflowSQL(); - } - return null; - } - - static String SELECT_SCHEMES = "select * from workflow_scheme where (archived = ? or archived = ?) order by name"; - - static String SELECT_SCHEME= "select * from workflow_scheme where id = ?"; - static String SELECT_SCHEME_NAME= "select * from workflow_scheme where name = ?"; - - static String SELECT_TASK_NULL_BY_STRUCT= "select task.* FROM workflow_task task INNER JOIN contentlet con ON con.identifier = task.webasset INNER JOIN contentlet_version_info cvi ON cvi.working_inode = con.inode" +public final class WorkflowSQL { + + public static final String SELECT_SCHEMES = "select * from workflow_scheme where (archived = ? or archived = ?) order by name"; + + public static final String SELECT_SCHEME= "select * from workflow_scheme where id = ?"; + public static final String SELECT_SCHEME_NAME= "select * from workflow_scheme where name = ?"; + + public static final String SELECT_TASK_NULL_BY_STRUCT= "select task.* FROM workflow_task task INNER JOIN contentlet con ON con.identifier = task.webasset INNER JOIN contentlet_version_info cvi ON cvi.working_inode = con.inode" + " WHERE task.status is NULL AND con.structure_inode=?"; - static String SELECT_NULL_TASK_CONTENTLET_FOR_WORKFLOW = "select c.identifier from contentlet c join workflow_scheme_x_structure wss on c.structure_inode = wss.structure_id and wss.scheme_id = ? where c.identifier in (select t.webasset from workflow_task t where t.status is null)"; - static String SELECT_TASK_STEPS_TO_CLEAN_BY_STRUCT= "select * from workflow_task where webasset in (select identifier from contentlet where contentlet.structure_inode = ? group by identifier) "; - static String UPDATE_STEPS_BY_STRUCT= "update workflow_task set status = ? where webasset in (select identifier from contentlet where contentlet.structure_inode = ? group by identifier) "; - static String DELETE_SCHEME_FOR_STRUCT= "delete from workflow_scheme_x_structure where structure_id = ?"; - static String INSERT_SCHEME_FOR_STRUCT= "insert into workflow_scheme_x_structure (id, scheme_id, structure_id) values ( ?, ?, ?)"; - static String SELECT_SCHEME_BY_STRUCT= "select * from workflow_scheme, workflow_scheme_x_structure where workflow_scheme.id = workflow_scheme_x_structure.scheme_id and workflow_scheme_x_structure.structure_id = ?"; + public static final String SELECT_NULL_TASK_CONTENTLET_FOR_WORKFLOW = "select c.identifier from contentlet c join workflow_scheme_x_structure wss on c.structure_inode = wss.structure_id and wss.scheme_id = ? where c.identifier in (select t.webasset from workflow_task t where t.status is null)"; + public static final String SELECT_TASK_STEPS_TO_CLEAN_BY_STRUCT= "select * from workflow_task where webasset in (select identifier from contentlet where contentlet.structure_inode = ? group by identifier) "; + public static final String UPDATE_STEPS_BY_STRUCT= "update workflow_task set status = ? where webasset in (select identifier from contentlet where contentlet.structure_inode = ? group by identifier) "; + public static final String DELETE_SCHEME_FOR_STRUCT= "delete from workflow_scheme_x_structure where structure_id = ?"; + public static final String INSERT_SCHEME_FOR_STRUCT= "insert into workflow_scheme_x_structure (id, scheme_id, structure_id) values ( ?, ?, ?)"; + public static final String SELECT_SCHEME_BY_STRUCT= "select * from workflow_scheme, workflow_scheme_x_structure where workflow_scheme.id = workflow_scheme_x_structure.scheme_id and workflow_scheme_x_structure.structure_id = ?"; - static String INSERT_SCHEME= "insert into workflow_scheme (id, name, description, archived, mandatory, default_scheme, mod_date) values (?,?,?,?,?,?,?)"; + public static final String INSERT_SCHEME= "insert into workflow_scheme (id, name, description, archived, mandatory, default_scheme, mod_date) values (?,?,?,?,?,?,?)"; - static String UPDATE_SCHEME= "update workflow_scheme set name = ?, description =?, archived=?, mandatory=?, mod_date=? where id =? "; + public static final String UPDATE_SCHEME= "update workflow_scheme set name = ?, description =?, archived=?, mandatory=?, mod_date=? where id =? "; - static String SELECT_STEPS_BY_SCHEME= "select * from workflow_step where scheme_id = ? order by my_order"; - static String SELECT_ACTIONS_BY_SCHEME= "select * from workflow_action where scheme_id = ? order by name"; - static String SELECT_ACTIONS_BY_STEP = + public static final String SELECT_STEPS_BY_SCHEME= "select * from workflow_step where scheme_id = ? order by my_order"; + public static final String SELECT_ACTIONS_BY_SCHEME= "select * from workflow_action where scheme_id = ? order by name"; + public static final String SELECT_ACTIONS_BY_STEP = "select workflow_action.* from workflow_action join workflow_action_step on workflow_action.id = workflow_action_step.action_id where workflow_action_step.step_id = ? order by action_order"; - static String SELECT_STEPS_BY_ACTION = + public static final String SELECT_STEPS_BY_ACTION = "select workflow_step.* from workflow_step join workflow_action_step on workflow_step.id = workflow_action_step.step_id where action_id = ? order by my_order asc"; - static String SELECT_ACTION= "select * from workflow_action where id = ? "; + public static final String SELECT_ACTION= "select * from workflow_action where id = ? "; /** * Select to get the action associated to the step. */ - static String SELECT_ACTION_BY_STEP = "select workflow_action.* from workflow_action join workflow_action_step on workflow_action.id = workflow_action_step.action_id where workflow_action_step.action_id = ? and workflow_action_step.step_id = ?"; + public static final String SELECT_ACTION_BY_STEP = "select workflow_action.* from workflow_action join workflow_action_step on workflow_action.id = workflow_action_step.action_id where workflow_action_step.action_id = ? and workflow_action_step.step_id = ?"; /** * Select to get the steps ids associated to the action */ - static String SELECT_STEPS_ID_BY_ACTION = "select workflow_action_step.step_id as stepid from workflow_action_step where workflow_action_step.action_id = ?"; - - static String DELETE_SYSTEM_ACTION_BY_SCHEME_OR_CONTENT_TYPE = "delete from workflow_action_mappings where scheme_or_content_type=?"; - static String DELETE_SYSTEM_ACTION_BY_WORKFLOW_ACTION_ID = "delete from workflow_action_mappings where workflow_action=?"; - static String DELETE_SYSTEM_ACTION_BY_IDENTIFIER = "delete from workflow_action_mappings where id=?"; - static String SELECT_SYSTEM_ACTION_BY_IDENTIFIER = "select * from workflow_action_mappings where id=?"; - static String SELECT_SYSTEM_ACTION_BY_SCHEME_OR_CONTENT_TYPE_MAPPING = "select * from workflow_action_mappings where scheme_or_content_type=?"; - static String SELECT_SYSTEM_ACTION_BY_SYSTEM_ACTION_AND_SCHEMES = "select * from workflow_action_mappings where action=? and scheme_or_content_type in (%s)"; - static String SELECT_SYSTEM_ACTION_BY_CONTENT_TYPES = "select * from workflow_action_mappings where scheme_or_content_type in (%s)"; - static String SELECT_SYSTEM_ACTION_BY_SYSTEM_ACTION_AND_SCHEME_OR_CONTENT_TYPE_MAPPING = "select * from workflow_action_mappings where action=? and scheme_or_content_type=?"; - static String SELECT_SYSTEM_ACTION_BY_WORKFLOW_ACTION = "select * from workflow_action_mappings where workflow_action=?"; - static String INSERT_SYSTEM_ACTION_WORKFLOW_ACTION_MAPPING = "insert into workflow_action_mappings(id, action, workflow_action, scheme_or_content_type) values (?,?,?,?)"; - static String UPDATE_SYSTEM_ACTION_WORKFLOW_ACTION_MAPPING = "update workflow_action_mappings set action=?, workflow_action=?, scheme_or_content_type=? where id=?"; - - static String INSERT_ACTION_FOR_STEP = "insert into workflow_action_step(action_id, step_id, action_order) values (?,?,?)"; - static String UPDATE_ACTION_FOR_STEP_ORDER = "update workflow_action_step set action_order=? where action_id=? and step_id=?"; - - static String INSERT_ACTION= "insert into workflow_action (id, scheme_id, name, condition_to_progress, next_step_id, next_assign, my_order, assignable, commentable, icon, use_role_hierarchy_assign, requires_checkout, show_on, metadata) values (?, ?, ?, ?, ?, ?, ?,?, ?, ?,?,?,?, ? ::jsonb)"; - - static String UPDATE_ACTION= "update workflow_action set scheme_id=?, name=?, condition_to_progress=?, next_step_id=?, next_assign=?, my_order=?, assignable=?, commentable=?, icon=?, use_role_hierarchy_assign=?,requires_checkout=?,show_on=?, metadata = ? ::jsonb where id=?"; - static String DELETE_ACTION= "delete from workflow_action where id = ? "; - static String DELETE_ACTION_STEP = "delete from workflow_action_step where action_id =? and step_id =? "; - static String DELETE_ACTIONS_STEP = "delete from workflow_action_step where step_id =? "; - static String DELETE_ACTIONS_BY_STEP = "delete from workflow_action_step where action_id =? "; - - static String SELECT_STEP= "select * from workflow_step where id = ? "; - static String INSERT_STEP= "insert into workflow_step (id, name, scheme_id,my_order,resolved,escalation_enable,escalation_action,escalation_time) values (?, ?, ?, ?, ?, ?, ?, ?) "; - static String UPDATE_STEP= "update workflow_step set name=?, scheme_id=?, my_order=?, resolved = ?, escalation_enable = ?, escalation_action=?, escalation_time = ? where id = ?"; - static String DELETE_STEP= "delete from workflow_step where id = ?"; - static String SELECT_STEP_BY_CONTENTLET= "select workflow_task.id as workflowid, workflow_step.* from workflow_step join workflow_task on workflow_task.status = workflow_step.id where workflow_task.webasset= ? and workflow_task.language_id = ?"; - static String SELECT_COUNT_CONTENTLES_BY_STEP= "select count(workflow_task.id) as count from workflow_task join workflow_step on workflow_task.status=workflow_step.id where workflow_step.id=?"; - - static String SELECT_ACTION_CLASSES_BY_CLASS= "select * from workflow_action_class where clazz = ? order by my_order"; - static String SELECT_ACTION_CLASSES_BY_ACTION= "select * from workflow_action_class where action_id = ? order by my_order"; - static String SELECT_ACTION_CLASS= "select * from workflow_action_class where id = ? "; - static String INSERT_ACTION_CLASS= "insert into workflow_action_class (id, action_id, name, my_order, clazz) values (?,?, ?, ?, ?)"; - static String UPDATE_ACTION_CLASS= "update workflow_action_class set action_id= ?, name=?, my_order=?, clazz=? where id =?"; - static String DELETE_ACTION_CLASS= "delete from workflow_action_class where id =?"; - static String DELETE_ACTION_CLASS_BY_ACTION= "delete from workflow_action_class where action_id =?"; - - static String SELECT_ACTION_CLASS_PARAMS_BY_ACTIONCLASS= "select * from workflow_action_class_pars where workflow_action_class_id = ?"; - static String SELECT_ACTION_CLASS_PARAM= "select * from workflow_action_class_pars where id = ? "; - static String INSERT_ACTION_CLASS_PARAM= "insert into workflow_action_class_pars (id,workflow_action_class_id,key,value) values (?,?, ?, ?)"; - static String UPDATE_ACTION_CLASS_PARAM= "update workflow_action_class_pars set workflow_action_class_id= ?, key=?, value=? where id =?"; - static String DELETE_ACTION_CLASS_PARAM_BY_ACTION_CLASS= "delete from workflow_action_class_pars where workflow_action_class_id =?"; - static String DELETE_ACTION_CLASS_PARAM_BY_ID="delete from workflow_action_class_pars where id=?"; - - static String RETRIEVE_LAST_STEP_ACTIONID = "select * from workflow_history where workflowtask_id = ? order by creation_date desc"; - - static String SELECT_EXPIRED_TASKS = ""; - - static String SELECT_TASK = "SELECT * FROM workflow_task WHERE webasset = ? AND language_id = ?"; - static String SELECT_TASKS_BY_STEP="select * from workflow_task where status = ?"; - static String INSERT_WORKFLOW_TASK = "INSERT INTO workflow_task (id, creation_date, mod_date, due_date, created_by, assigned_to, belongs_to, title, description, status, webasset, language_id) values (?,?,?,?,?,?,?,?,?,?,?,?)"; - static String UPDATE_WORKFLOW_TASK = "UPDATE workflow_task SET creation_date=?, mod_date=?, due_date=?, created_by=?, assigned_to=?, belongs_to=?, title=?, description=?, status=?, webasset=?, language_id=? WHERE id=?"; - static String SELECT_STRUCTS_FOR_SCHEME="select st.* from structure st join workflow_scheme_x_structure wss on st.inode = wss.structure_id where wss.scheme_id = ? order by st.name"; - static String DELETE_STRUCTS_FOR_SCHEME="delete from workflow_scheme_x_structure where scheme_id = ?"; - static String DELETE_SCHEME="delete from workflow_scheme where id = ?"; - - static String INSERT_WORKFLOW_HISTORY = "INSERT INTO workflow_history (id, creation_date, made_by, change_desc, workflowtask_id, workflow_action_id, workflow_step_id) values (?,?,?,?,?,?,?)"; - static String UPDATE_WORKFLOW_HISTORY = "UPDATE workflow_history SET creation_date=?, made_by=?, change_desc=?, workflowtask_id=?, workflow_action_id=?, workflow_step_id=? WHERE id=?"; - - static String INSERT_WORKFLOW_COMMENT = "INSERT INTO workflow_comment (id, creation_date, posted_by, wf_comment, workflowtask_id) values (?,?,?,?,?)"; - static String UPDATE_WORKFLOW_COMMENT = "UPDATE workflow_comment SET creation_date=?, posted_by=?, wf_comment=?, workflowtask_id=? WHERE id=?"; + public static final String SELECT_STEPS_ID_BY_ACTION = "select workflow_action_step.step_id as stepid from workflow_action_step where workflow_action_step.action_id = ?"; + + public static final String DELETE_SYSTEM_ACTION_BY_SCHEME_OR_CONTENT_TYPE = "delete from workflow_action_mappings where scheme_or_content_type=?"; + public static final String DELETE_SYSTEM_ACTION_BY_WORKFLOW_ACTION_ID = "delete from workflow_action_mappings where workflow_action=?"; + public static final String DELETE_SYSTEM_ACTION_BY_IDENTIFIER = "delete from workflow_action_mappings where id=?"; + public static final String SELECT_SYSTEM_ACTION_BY_IDENTIFIER = "select * from workflow_action_mappings where id=?"; + public static final String SELECT_SYSTEM_ACTION_BY_SCHEME_OR_CONTENT_TYPE_MAPPING = "select * from workflow_action_mappings where scheme_or_content_type=?"; + public static final String SELECT_SYSTEM_ACTION_BY_SYSTEM_ACTION_AND_SCHEMES = "select * from workflow_action_mappings where action=? and scheme_or_content_type in (%s)"; + public static final String SELECT_SYSTEM_ACTION_BY_CONTENT_TYPES = "select * from workflow_action_mappings where scheme_or_content_type in (%s)"; + public static final String SELECT_SYSTEM_ACTION_BY_SYSTEM_ACTION_AND_SCHEME_OR_CONTENT_TYPE_MAPPING = "select * from workflow_action_mappings where action=? and scheme_or_content_type=?"; + public static final String SELECT_SYSTEM_ACTION_BY_WORKFLOW_ACTION = "select * from workflow_action_mappings where workflow_action=?"; + public static final String INSERT_SYSTEM_ACTION_WORKFLOW_ACTION_MAPPING = "insert into workflow_action_mappings(id, action, workflow_action, scheme_or_content_type) values (?,?,?,?)"; + public static final String UPDATE_SYSTEM_ACTION_WORKFLOW_ACTION_MAPPING = "update workflow_action_mappings set action=?, workflow_action=?, scheme_or_content_type=? where id=?"; + + public static final String INSERT_ACTION_FOR_STEP = "insert into workflow_action_step(action_id, step_id, action_order) values (?,?,?)"; + public static final String UPDATE_ACTION_FOR_STEP_ORDER = "update workflow_action_step set action_order=? where action_id=? and step_id=?"; + + public static final String INSERT_ACTION= "insert into workflow_action (id, scheme_id, name, condition_to_progress, next_step_id, next_assign, my_order, assignable, commentable, icon, use_role_hierarchy_assign, requires_checkout, show_on, metadata) values (?, ?, ?, ?, ?, ?, ?,?, ?, ?,?,?,?, ? ::jsonb)"; + + public static final String UPDATE_ACTION= "update workflow_action set scheme_id=?, name=?, condition_to_progress=?, next_step_id=?, next_assign=?, my_order=?, assignable=?, commentable=?, icon=?, use_role_hierarchy_assign=?,requires_checkout=?,show_on=?, metadata = ? ::jsonb where id=?"; + public static final String DELETE_ACTION= "delete from workflow_action where id = ? "; + public static final String DELETE_ACTION_STEP = "delete from workflow_action_step where action_id =? and step_id =? "; + public static final String DELETE_ACTIONS_STEP = "delete from workflow_action_step where step_id =? "; + public static final String DELETE_ACTIONS_BY_STEP = "delete from workflow_action_step where action_id =? "; + + public static final String SELECT_STEP= "select * from workflow_step where id = ? "; + public static final String INSERT_STEP= "insert into workflow_step (id, name, scheme_id,my_order,resolved,escalation_enable,escalation_action,escalation_time) values (?, ?, ?, ?, ?, ?, ?, ?) "; + public static final String UPDATE_STEP= "update workflow_step set name=?, scheme_id=?, my_order=?, resolved = ?, escalation_enable = ?, escalation_action=?, escalation_time = ? where id = ?"; + public static final String DELETE_STEP= "delete from workflow_step where id = ?"; + public static final String SELECT_STEP_BY_CONTENTLET= "select workflow_task.id as workflowid, workflow_step.* from workflow_step join workflow_task on workflow_task.status = workflow_step.id where workflow_task.webasset= ? and workflow_task.language_id = ?"; + public static final String SELECT_COUNT_CONTENTLES_BY_STEP= "select count(workflow_task.id) as count from workflow_task join workflow_step on workflow_task.status=workflow_step.id where workflow_step.id=?"; + + public static final String SELECT_ACTION_CLASSES_BY_CLASS= "select * from workflow_action_class where clazz = ? order by my_order"; + public static final String SELECT_ACTION_CLASSES_BY_ACTION= "select * from workflow_action_class where action_id = ? order by my_order"; + public static final String SELECT_ACTION_CLASS= "select * from workflow_action_class where id = ? "; + public static final String INSERT_ACTION_CLASS= "insert into workflow_action_class (id, action_id, name, my_order, clazz) values (?,?, ?, ?, ?)"; + public static final String UPDATE_ACTION_CLASS= "update workflow_action_class set action_id= ?, name=?, my_order=?, clazz=? where id =?"; + public static final String DELETE_ACTION_CLASS= "delete from workflow_action_class where id =?"; + public static final String DELETE_ACTION_CLASS_BY_ACTION= "delete from workflow_action_class where action_id =?"; + + public static final String SELECT_ACTION_CLASS_PARAMS_BY_ACTIONCLASS= "select * from workflow_action_class_pars where workflow_action_class_id = ?"; + public static final String SELECT_ACTION_CLASS_PARAM= "select * from workflow_action_class_pars where id = ? "; + public static final String INSERT_ACTION_CLASS_PARAM= "insert into workflow_action_class_pars (id,workflow_action_class_id,key,value) values (?,?, ?, ?)"; + public static final String UPDATE_ACTION_CLASS_PARAM= "update workflow_action_class_pars set workflow_action_class_id= ?, key=?, value=? where id =?"; + public static final String DELETE_ACTION_CLASS_PARAM_BY_ACTION_CLASS= "delete from workflow_action_class_pars where workflow_action_class_id =?"; + public static final String DELETE_ACTION_CLASS_PARAM_BY_ID="delete from workflow_action_class_pars where id=?"; + + public static final String RETRIEVE_LAST_STEP_ACTIONID = "select * from workflow_history where workflowtask_id = ? order by creation_date desc"; + + public static final String SELECT_EXPIRED_TASKS = "select workflow_task.id from workflow_task join workflow_step on (workflow_task.status=workflow_step.id) "+ + "where workflow_step.resolved=false and workflow_step.escalation_enable=true and now()>workflow_task.mod_date+ "+ + "cast(cast(workflow_step.escalation_time as varchar(20))||' seconds' as interval) "; + + public static final String SELECT_TASK = "SELECT * FROM workflow_task WHERE webasset = ? AND language_id = ?"; + public static final String SELECT_TASKS_BY_STEP="select * from workflow_task where status = ?"; + public static final String INSERT_WORKFLOW_TASK = "INSERT INTO workflow_task (id, creation_date, mod_date, due_date, created_by, assigned_to, belongs_to, title, description, status, webasset, language_id) values (?,?,?,?,?,?,?,?,?,?,?,?)"; + public static final String UPDATE_WORKFLOW_TASK = "UPDATE workflow_task SET creation_date=?, mod_date=?, due_date=?, created_by=?, assigned_to=?, belongs_to=?, title=?, description=?, status=?, webasset=?, language_id=? WHERE id=?"; + public static final String SELECT_STRUCTS_FOR_SCHEME="select st.* from structure st join workflow_scheme_x_structure wss on st.inode = wss.structure_id where wss.scheme_id = ? order by st.name"; + public static final String DELETE_STRUCTS_FOR_SCHEME="delete from workflow_scheme_x_structure where scheme_id = ?"; + public static final String DELETE_SCHEME="delete from workflow_scheme where id = ?"; + + public static final String INSERT_WORKFLOW_HISTORY = "INSERT INTO workflow_history (id, creation_date, made_by, change_desc, workflowtask_id, workflow_action_id, workflow_step_id) values (?,?,?,?,?,?,?)"; + public static final String UPDATE_WORKFLOW_HISTORY = "UPDATE workflow_history SET creation_date=?, made_by=?, change_desc=?, workflowtask_id=?, workflow_action_id=?, workflow_step_id=? WHERE id=?"; + + public static final String INSERT_WORKFLOW_COMMENT = "INSERT INTO workflow_comment (id, creation_date, posted_by, wf_comment, workflowtask_id) values (?,?,?,?,?)"; + public static final String UPDATE_WORKFLOW_COMMENT = "UPDATE workflow_comment SET creation_date=?, posted_by=?, wf_comment=?, workflowtask_id=? WHERE id=?"; } diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/model/WorkflowAction.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/model/WorkflowAction.java index af53e8204532..f7b6004944b0 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/model/WorkflowAction.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/model/WorkflowAction.java @@ -15,6 +15,7 @@ import java.io.Serializable; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -75,7 +76,7 @@ public class WorkflowAction implements Permissionable, Serializable{ private boolean moveActionlet; private boolean moveActionletHasPath; private Set showOn = Collections.emptySet(); - private Map metadata; + private Map metadata = new HashMap<>(); public WorkflowAction() { } From e57bbe2a17bfa9f8aabc26dda2a1d03eb300c10e Mon Sep 17 00:00:00 2001 From: Jose Castro Date: Wed, 11 Oct 2023 07:37:36 -0600 Subject: [PATCH 06/16] Implementing SonarQube feedback. --- .../business/WorkflowFactoryImpl.java | 38 +------------------ .../workflows/business/WorkflowSQL.java | 4 ++ 2 files changed, 5 insertions(+), 37 deletions(-) diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java index 184d1610d227..2199d2a98c6a 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java @@ -222,24 +222,6 @@ private Object convertMaptoObject(Map map, Class clazz) } } - /** - * @param row - * @return - * @throws IllegalAccessException - * @throws InvocationTargetException - */ - private WorkflowScheme convertScheme(Map row) - throws IllegalAccessException, InvocationTargetException { - final WorkflowScheme scheme = new WorkflowScheme(); - row.put("entryActionId", row.get("entry_action_id")); - row.put("defaultScheme", row.get("default_scheme")); - row.put("modDate", row.get("mod_date")); - - BeanUtils.copyProperties(scheme, row); - - return scheme; - } - /** * @param row * @return @@ -259,22 +241,6 @@ private WorkflowStep convertStep(Map row) return step; } - private WorkflowTask convertTask(Map row) - throws IllegalAccessException, InvocationTargetException { - - final WorkflowTask task = new WorkflowTask(); - row.put("languageId", row.get("language_id")); - row.put("creationDate", row.get("creation_date")); - row.put("modDate", row.get("mod_date")); - row.put("dueDate", row.get("due_date")); - row.put("createdBy", row.get("created_by")); - row.put("assignedTo", row.get("assigned_to")); - row.put("belongsTo", row.get("belongs_to")); - BeanUtils.copyProperties(task, row); - - return task; - } - /** * @param row * @return @@ -736,11 +702,9 @@ public List findActionClasses(final WorkflowAction action) public List findActionClassesByClassName(final String actionClassName) throws DotDataException { - final List classes = this.convertListToObjects( + return this.convertListToObjects( new DotConnect().setSQL(WorkflowSQL.SELECT_ACTION_CLASSES_BY_CLASS) .addParam(actionClassName).loadObjectResults(), WorkflowActionClass.class); - - return classes; } diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowSQL.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowSQL.java index 905ae45482e4..f71c6adeda4c 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowSQL.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowSQL.java @@ -10,6 +10,10 @@ */ public final class WorkflowSQL { + private WorkflowSQL() { + // Utility class + } + public static final String SELECT_SCHEMES = "select * from workflow_scheme where (archived = ? or archived = ?) order by name"; public static final String SELECT_SCHEME= "select * from workflow_scheme where id = ?"; From 3060fbf64918d7fcebf304d4bb8ad0db74fb8e6e Mon Sep 17 00:00:00 2001 From: Jose Castro Date: Wed, 11 Oct 2023 10:13:13 -0600 Subject: [PATCH 07/16] Implementing SonarQube feedback. --- .../business/WorkflowFactoryImpl.java | 46 +++++++++++++------ 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java index 2199d2a98c6a..dc43a87ee6cd 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java @@ -77,6 +77,17 @@ public class WorkflowFactoryImpl implements WorkFlowFactory { private static final ObjectMapper JSON_MAPPER = DotObjectMapperProvider.getInstance() .getDefaultObjectMapper(); + // Column names for the workflow_action table + private static final String WA_SCHEME_ID_COLUMN = "scheme_id"; + private static final String WA_CONDITION_TO_PROGRESS_COLUMN = "condition_to_progress"; + private static final String WA_NEXT_STEP_ID_COLUMN = "next_step_id"; + private static final String WA_NEXT_ASSIGN_COLUMN = "next_assign"; + private static final String WA_MY_ORDER_COLUMN = "my_order"; + private static final String WA_REQUIRES_CHECKOUT_COLUMN = "requires_checkout"; + private static final String WA_SHOW_ON_COLUMN = "show_on"; + private static final String WA_USE_ROLE_HIERARCHY_ASSIGN_COLUMN = "use_role_hierarchy_assign"; + private static final String WA_METADATA_COLUMN = "metadata"; + /** * Creates an instance of the {@link WorkFlowFactory}. */ @@ -106,24 +117,31 @@ private Object convert(Object obj, Map map) } /** - * @param row - * @return - * @throws IllegalAccessException - * @throws InvocationTargetException + * Takes the Workflow Action values from the database and creates an instance of the + * {@link WorkflowAction} class with them. + * + * @param row The Map with the values coming from the database. + * + * @return An instance of the {@link WorkflowAction} class. + * + * @throws IllegalAccessException An error occurred when copying the properties into the + * {@link WorkflowAction} class. + * @throws InvocationTargetException An error occurred when copying the properties into the + * {@link WorkflowAction} class. */ private WorkflowAction convertAction(final Map row) throws IllegalAccessException, InvocationTargetException { final WorkflowAction action = new WorkflowAction(); - row.put("schemeId", row.get("scheme_id")); - row.put("condition", row.get("condition_to_progress")); - row.put("nextStep", row.get("next_step_id")); - row.put("nextAssign", row.get("next_assign")); - row.put("order", row.get("my_order")); - row.put("requiresCheckout", row.get("requires_checkout")); - row.put("showOn", WorkflowState.toSet(row.get("show_on"))); - row.put("roleHierarchyForAssign", row.get("use_role_hierarchy_assign")); - if (null != row.get("metadata")) { - row.put("metadata", Try.of(() -> JSON_MAPPER.readValue(((PGobject) row.get("metadata")).getValue(), + row.put("schemeId", row.get(WA_SCHEME_ID_COLUMN)); + row.put("condition", row.get(WA_CONDITION_TO_PROGRESS_COLUMN)); + row.put("nextStep", row.get(WA_NEXT_STEP_ID_COLUMN)); + row.put("nextAssign", row.get(WA_NEXT_ASSIGN_COLUMN)); + row.put("order", row.get(WA_MY_ORDER_COLUMN)); + row.put("requiresCheckout", row.get(WA_REQUIRES_CHECKOUT_COLUMN)); + row.put("showOn", WorkflowState.toSet(row.get(WA_SHOW_ON_COLUMN))); + row.put("roleHierarchyForAssign", row.get(WA_USE_ROLE_HIERARCHY_ASSIGN_COLUMN)); + if (null != row.get(WA_METADATA_COLUMN)) { + row.put("metadata", Try.of(() -> JSON_MAPPER.readValue(((PGobject) row.get(WA_METADATA_COLUMN)).getValue(), Map.class)).getOrElse(new HashMap())); } BeanUtils.copyProperties(action, row); From c3cbc9162117d220e9f2b670c87874b45d9b4cce Mon Sep 17 00:00:00 2001 From: Jose Castro Date: Wed, 11 Oct 2023 10:57:03 -0600 Subject: [PATCH 08/16] Implementing SonarQube feedback. --- .../portlets/workflows/business/WorkflowFactoryImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java index dc43a87ee6cd..b06db26ac699 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java @@ -141,7 +141,7 @@ private WorkflowAction convertAction(final Map row) row.put("showOn", WorkflowState.toSet(row.get(WA_SHOW_ON_COLUMN))); row.put("roleHierarchyForAssign", row.get(WA_USE_ROLE_HIERARCHY_ASSIGN_COLUMN)); if (null != row.get(WA_METADATA_COLUMN)) { - row.put("metadata", Try.of(() -> JSON_MAPPER.readValue(((PGobject) row.get(WA_METADATA_COLUMN)).getValue(), + row.put(WA_METADATA_COLUMN, Try.of(() -> JSON_MAPPER.readValue(((PGobject) row.get(WA_METADATA_COLUMN)).getValue(), Map.class)).getOrElse(new HashMap())); } BeanUtils.copyProperties(action, row); From 4e0eec6fac374c7bd70822e29a46f9616fb4c240 Mon Sep 17 00:00:00 2001 From: Jose Castro Date: Thu, 7 Dec 2023 16:10:08 -0600 Subject: [PATCH 09/16] Fixing Upgrade Task's name so that it will get executed correctly. --- ....java => Task231207AddMetadataColumnToWorkflowAction.java} | 2 +- .../src/main/java/com/dotmarketing/util/TaskLocatorUtil.java | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) rename dotCMS/src/main/java/com/dotmarketing/startup/runonce/{Task231009AddMetadataColumnToWorkflowAction.java => Task231207AddMetadataColumnToWorkflowAction.java} (93%) diff --git a/dotCMS/src/main/java/com/dotmarketing/startup/runonce/Task231009AddMetadataColumnToWorkflowAction.java b/dotCMS/src/main/java/com/dotmarketing/startup/runonce/Task231207AddMetadataColumnToWorkflowAction.java similarity index 93% rename from dotCMS/src/main/java/com/dotmarketing/startup/runonce/Task231009AddMetadataColumnToWorkflowAction.java rename to dotCMS/src/main/java/com/dotmarketing/startup/runonce/Task231207AddMetadataColumnToWorkflowAction.java index e8291572c341..4f557ab14583 100644 --- a/dotCMS/src/main/java/com/dotmarketing/startup/runonce/Task231009AddMetadataColumnToWorkflowAction.java +++ b/dotCMS/src/main/java/com/dotmarketing/startup/runonce/Task231207AddMetadataColumnToWorkflowAction.java @@ -13,7 +13,7 @@ * @author Jose Castro * @since Oct 10th, 2023 */ -public class Task231009AddMetadataColumnToWorkflowAction implements StartupTask { +public class Task231207AddMetadataColumnToWorkflowAction implements StartupTask { @Override public boolean forceRun() { diff --git a/dotCMS/src/main/java/com/dotmarketing/util/TaskLocatorUtil.java b/dotCMS/src/main/java/com/dotmarketing/util/TaskLocatorUtil.java index 382e02691e39..eb35dd774cb4 100644 --- a/dotCMS/src/main/java/com/dotmarketing/util/TaskLocatorUtil.java +++ b/dotCMS/src/main/java/com/dotmarketing/util/TaskLocatorUtil.java @@ -237,8 +237,9 @@ import com.dotmarketing.startup.runonce.Task230701AddHashIndicesToWorkflowTables; import com.dotmarketing.startup.runonce.Task230707CreateSystemTable; import com.dotmarketing.startup.runonce.Task230713IncreaseDisabledWysiwygColumnSize; -import com.dotmarketing.startup.runonce.Task231109AddPublishDateToContentletVersionInfo; import com.dotmarketing.startup.runonce.Task231030DropReleaseTable; +import com.dotmarketing.startup.runonce.Task231109AddPublishDateToContentletVersionInfo; +import com.dotmarketing.startup.runonce.Task231207AddMetadataColumnToWorkflowAction; import com.google.common.collect.ImmutableList; import java.util.ArrayList; @@ -552,6 +553,7 @@ public static List> getStartupRunOnceTaskClasses() { .add(Task230713IncreaseDisabledWysiwygColumnSize.class) .add(Task231030DropReleaseTable.class) .add(Task231109AddPublishDateToContentletVersionInfo.class) + .add(Task231207AddMetadataColumnToWorkflowAction.class) .build(); return ret.stream().sorted(classNameComparator).collect(Collectors.toList()); } From fc13007459be0f2c8b3dfa078e00095a6a8acb27 Mon Sep 17 00:00:00 2001 From: Jose Castro Date: Fri, 8 Dec 2023 07:44:41 -0600 Subject: [PATCH 10/16] Missing Java import statement. --- .../workflows/business/WorkflowAPITest.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/dotCMS/src/integration-test/java/com/dotmarketing/portlets/workflows/business/WorkflowAPITest.java b/dotCMS/src/integration-test/java/com/dotmarketing/portlets/workflows/business/WorkflowAPITest.java index d8dfb0da0a95..cbe016f80ba7 100644 --- a/dotCMS/src/integration-test/java/com/dotmarketing/portlets/workflows/business/WorkflowAPITest.java +++ b/dotCMS/src/integration-test/java/com/dotmarketing/portlets/workflows/business/WorkflowAPITest.java @@ -21,8 +21,8 @@ import com.dotcms.datagen.TestUserUtils; import com.dotcms.datagen.TestWorkflowUtils; import com.dotcms.datagen.UserDataGen; +import com.dotcms.datagen.WorkflowActionClassDataGen; import com.dotcms.datagen.WorkflowDataGen; -import com.dotcms.datagen.*; import com.dotcms.system.event.local.model.EventSubscriber; import com.dotcms.util.CollectionsUtils; import com.dotcms.util.IntegrationTestInitService; @@ -77,13 +77,9 @@ import com.dotmarketing.util.WebKeys; import com.liferay.portal.model.User; import com.liferay.util.StringPool; - -import io.vavr.control.Try; - import io.vavr.Tuple; import io.vavr.Tuple2; import io.vavr.Tuple3; - import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; @@ -97,6 +93,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.Date; +import java.util.EnumSet; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -106,9 +103,14 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; -import static com.dotcms.rest.api.v1.workflow.WorkflowTestUtil.SYSTEM_WORKFLOW; import static com.dotmarketing.portlets.workflows.business.BaseWorkflowIntegrationTest.createContentTypeAndAssignPermissions; -import static com.dotmarketing.portlets.workflows.model.WorkflowState.*; +import static com.dotmarketing.portlets.workflows.model.WorkflowState.ARCHIVED; +import static com.dotmarketing.portlets.workflows.model.WorkflowState.EDITING; +import static com.dotmarketing.portlets.workflows.model.WorkflowState.LISTING; +import static com.dotmarketing.portlets.workflows.model.WorkflowState.LOCKED; +import static com.dotmarketing.portlets.workflows.model.WorkflowState.NEW; +import static com.dotmarketing.portlets.workflows.model.WorkflowState.PUBLISHED; +import static com.dotmarketing.portlets.workflows.model.WorkflowState.UNLOCKED; import static com.dotmarketing.portlets.workflows.model.WorkflowState.UNPUBLISHED; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; From f4cf0a2e424402f879b3fe3e074600ffa839a2d9 Mon Sep 17 00:00:00 2001 From: Jose Castro Date: Fri, 8 Dec 2023 15:55:40 -0600 Subject: [PATCH 11/16] Implementing SonarQube feedback. --- .../java/com/dotcms/workflow/form/WorkflowActionForm.java | 3 +-- .../portlets/workflows/business/WorkflowFactoryImpl.java | 6 ++---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/dotCMS/src/main/java/com/dotcms/workflow/form/WorkflowActionForm.java b/dotCMS/src/main/java/com/dotcms/workflow/form/WorkflowActionForm.java index 2ef411ccf497..c7c77cdf5da2 100644 --- a/dotCMS/src/main/java/com/dotcms/workflow/form/WorkflowActionForm.java +++ b/dotCMS/src/main/java/com/dotcms/workflow/form/WorkflowActionForm.java @@ -188,7 +188,7 @@ public static final class Builder { @Deprecated @JsonProperty(required = true) - private boolean requiresCheckout; + private boolean requiresCheckout = false; @JsonProperty(required = true) private boolean actionRoleHierarchyForAssign; @JsonProperty(required = true) @@ -296,7 +296,6 @@ public Builder separator(final String schemeId, final String stepId) { this.actionName(WorkflowAction.SEPARATOR); this.actionAssignable(false); this.actionCommentable(false); - this.requiresCheckout(false); this.actionRoleHierarchyForAssign(false); this.actionNextStep(WorkflowAction.CURRENT_STEP); this.actionNextAssign(Try.of(() -> APILocator.getRoleAPI().loadRoleByKey(Role.CMS_ANONYMOUS_ROLE).getId()) diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java index afa2b389bf80..2a08bd7a1a1d 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/workflows/business/WorkflowFactoryImpl.java @@ -140,10 +140,8 @@ private WorkflowAction convertAction(final Map row) row.put("requiresCheckout", row.get(WA_REQUIRES_CHECKOUT_COLUMN)); row.put("showOn", WorkflowState.toSet(row.get(WA_SHOW_ON_COLUMN))); row.put("roleHierarchyForAssign", row.get(WA_USE_ROLE_HIERARCHY_ASSIGN_COLUMN)); - if (null != row.get(WA_METADATA_COLUMN)) { - row.put(WA_METADATA_COLUMN, Try.of(() -> JSON_MAPPER.readValue(((PGobject) row.get(WA_METADATA_COLUMN)).getValue(), - Map.class)).getOrElse(new HashMap())); - } + row.computeIfPresent(WA_METADATA_COLUMN, (k, o) -> Try.of(() -> JSON_MAPPER.readValue(((PGobject) row.get(WA_METADATA_COLUMN)).getValue(), + Map.class)).getOrElse(new HashMap())); BeanUtils.copyProperties(action, row); action.setPushPublishActionlet(ActionletUtil.hasPushPublishActionlet(action)); return action; From f2b36b3b4cc541551db89c7b8895beea7d62e324 Mon Sep 17 00:00:00 2001 From: Jose Castro Date: Mon, 11 Dec 2023 08:29:46 -0600 Subject: [PATCH 12/16] Implementing SonarQube feedback. --- .../java/com/dotcms/workflow/form/WorkflowActionForm.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dotCMS/src/main/java/com/dotcms/workflow/form/WorkflowActionForm.java b/dotCMS/src/main/java/com/dotcms/workflow/form/WorkflowActionForm.java index c7c77cdf5da2..b570edc5eb02 100644 --- a/dotCMS/src/main/java/com/dotcms/workflow/form/WorkflowActionForm.java +++ b/dotCMS/src/main/java/com/dotcms/workflow/form/WorkflowActionForm.java @@ -186,6 +186,11 @@ public static final class Builder { @JsonProperty(required = true) private boolean actionCommentable; + /** + * @deprecated This attribute is not necessary as a single workflow action can be available + * for locked and/or unlocked content now. See + * #13287 + */ @Deprecated @JsonProperty(required = true) private boolean requiresCheckout = false; From f31ba93982e35f9fd048cef5aeccc8b534f03dcc Mon Sep 17 00:00:00 2001 From: Rafael Velazco Date: Mon, 11 Dec 2023 13:08:46 -0400 Subject: [PATCH 13/16] dev: fix divider button --- .../ext/workflows/schemes/view_steps_filtered.jsp | 2 +- .../html/portlet/ext/workflows/schemes/workflow.css | 9 +++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/view_steps_filtered.jsp b/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/view_steps_filtered.jsp index 3cad96db6dfd..727e57b7cf71 100644 --- a/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/view_steps_filtered.jsp +++ b/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/view_steps_filtered.jsp @@ -108,7 +108,7 @@ } %>
- Add Separator + Divider
Add diff --git a/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/workflow.css b/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/workflow.css index d2c57832e83b..91aa5d33a508 100644 --- a/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/workflow.css +++ b/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/workflow.css @@ -297,7 +297,6 @@ ol.wfStepsList li{padding:8px 16px;margin:0 10px; list-style:decimal; list-styl max-height: 100%; position: relative; white-space: normal; - padding-bottom: 24px; min-height: 450px; box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.12), 0 1px 5px 0 rgba(0, 0, 0, 0.2); } @@ -338,16 +337,17 @@ ol.wfStepsList li{padding:8px 16px;margin:0 10px; list-style:decimal; list-styl } .btn-flat-wrapper { - position: absolute; bottom: 18px; width: 100%; text-align: right; + padding: 0px 0.375rem; + padding-bottom: 0.625rem; } .btn-flat { text-transform: uppercase; display: inline-block; - padding: 8px 16px; + padding: 0.5em 1em; margin: 0px; text-decoration: none; font-size: 14px; @@ -355,9 +355,6 @@ ol.wfStepsList li{padding:8px 16px;margin:0 10px; list-style:decimal; list-styl color: #a6a6a6; letter-spacing: 0.1em } -.btn-flat:last-child{ - margin-right: 10px; -} .btn-flat:hover{ background: #F4F3F4; From 1c670298706b22411c91fd311c56adb0cd545a54 Mon Sep 17 00:00:00 2001 From: Rafael Velazco Date: Tue, 12 Dec 2023 13:31:49 -0400 Subject: [PATCH 14/16] dev: prevent the SEPARATOR action from being displayed and editing --- .../ext/contentlet/contentlet_actions_inc.jsp | 25 +++++++++++-------- .../workflows/schemes/view_steps_filtered.jsp | 13 ++++++---- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/dotCMS/src/main/webapp/html/portlet/ext/contentlet/contentlet_actions_inc.jsp b/dotCMS/src/main/webapp/html/portlet/ext/contentlet/contentlet_actions_inc.jsp index 99fd6362efd2..b570501429e5 100644 --- a/dotCMS/src/main/webapp/html/portlet/ext/contentlet/contentlet_actions_inc.jsp +++ b/dotCMS/src/main/webapp/html/portlet/ext/contentlet/contentlet_actions_inc.jsp @@ -235,16 +235,21 @@ function jumpToContentType(){ <%for(WorkflowAction action : wfActions){ %> <% List actionlets = APILocator.getWorkflowAPI().findActionClasses(action); %> - - - <%= UtilMethods.escapeSingleQuotes(LanguageUtil.get(pageContext, action.getName())) %> - <%if(action.hasSaveActionlet()){ %> - - <%} %> - - + + <% + String subtype = action.getMetadata() != null ? String.valueOf(action.getMetadata().get("subtype")) : ""; + if(!"SEPARATOR".equals(subtype)) { + %> + + <%= UtilMethods.escapeSingleQuotes(LanguageUtil.get(pageContext, action.getName())) %> + <%if(action.hasSaveActionlet()){ %> + + <%} %> + + <%} %> <%} %> <%} %> diff --git a/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/view_steps_filtered.jsp b/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/view_steps_filtered.jsp index 727e57b7cf71..5dca5f37f307 100644 --- a/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/view_steps_filtered.jsp +++ b/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/view_steps_filtered.jsp @@ -86,14 +86,17 @@
- <%for(WorkflowAction action : actions){ %> + <%for(WorkflowAction action : actions) { + String subtype = action.getMetadata() != null ? String.valueOf(action.getMetadata().get("subtype")) : ""; + boolean isSeparator = "SEPARATOR".equals(subtype); + %>
-
+
"">
-
- <%=action.getName() %> ‣ <%=(WorkflowAction.CURRENT_STEP.equals(action.getNextStep())) ? WorkflowAction.CURRENT_STEP : wapi.findStep(action.getNextStep()).getName() %> -
+
onClick="actionAdmin.viewAction('<%=scheme.getId()%>', '<%=action.getId() %>');" <% } %>> + <%=action.getName() %> ‣ <%=(WorkflowAction.CURRENT_STEP.equals(action.getNextStep())) ? WorkflowAction.CURRENT_STEP : wapi.findStep(action.getNextStep()).getName() %> +
<%} %> From f5fef64de33eb3008bd053efe7507dd2ddabea2e Mon Sep 17 00:00:00 2001 From: Rafael Velazco Date: Tue, 12 Dec 2023 13:49:19 -0400 Subject: [PATCH 15/16] Style: set default cursor when action is not editable (SEPARATOR) --- dotCMS/src/main/webapp/html/css/binary-field.css | 2 +- .../portlet/ext/workflows/schemes/view_steps_filtered.jsp | 2 +- .../webapp/html/portlet/ext/workflows/schemes/workflow.css | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/dotCMS/src/main/webapp/html/css/binary-field.css b/dotCMS/src/main/webapp/html/css/binary-field.css index 5930bdb1ceda..6fb4f6a3afc0 100644 --- a/dotCMS/src/main/webapp/html/css/binary-field.css +++ b/dotCMS/src/main/webapp/html/css/binary-field.css @@ -1 +1 @@ -@font-face{font-family:primeicons;font-display:block;src:url(primeicons.eot);src:url(primeicons.eot?#iefix) format("embedded-opentype"),url(primeicons.woff2) format("woff2"),url(primeicons.woff) format("woff"),url(primeicons.ttf) format("truetype"),url(primeicons.svg?#primeicons) format("svg");font-weight:400;font-style:normal}.pi{font-family:primeicons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.pi:before{--webkit-backface-visibility:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.pi-fw{width:1.28571429em;text-align:center}.pi-spin{animation:fa-spin 2s infinite linear}@keyframes fa-spin{0%{transform:rotate(0)}to{transform:rotate(359deg)}}.pi-eraser:before{content:"\ea04"}.pi-stopwatch:before{content:"\ea01"}.pi-verified:before{content:"\ea02"}.pi-delete-left:before{content:"\ea03"}.pi-hourglass:before{content:"\e9fe"}.pi-truck:before{content:"\ea00"}.pi-wrench:before{content:"\e9ff"}.pi-microphone:before{content:"\e9fa"}.pi-megaphone:before{content:"\e9fb"}.pi-arrow-right-arrow-left:before{content:"\e9fc"}.pi-bitcoin:before{content:"\e9fd"}.pi-file-edit:before{content:"\e9f6"}.pi-language:before{content:"\e9f7"}.pi-file-export:before{content:"\e9f8"}.pi-file-import:before{content:"\e9f9"}.pi-file-word:before{content:"\e9f1"}.pi-gift:before{content:"\e9f2"}.pi-cart-plus:before{content:"\e9f3"}.pi-thumbs-down-fill:before{content:"\e9f4"}.pi-thumbs-up-fill:before{content:"\e9f5"}.pi-arrows-alt:before{content:"\e9f0"}.pi-calculator:before{content:"\e9ef"}.pi-sort-alt-slash:before{content:"\e9ee"}.pi-arrows-h:before{content:"\e9ec"}.pi-arrows-v:before{content:"\e9ed"}.pi-pound:before{content:"\e9eb"}.pi-prime:before{content:"\e9ea"}.pi-chart-pie:before{content:"\e9e9"}.pi-reddit:before{content:"\e9e8"}.pi-code:before{content:"\e9e7"}.pi-sync:before{content:"\e9e6"}.pi-shopping-bag:before{content:"\e9e5"}.pi-server:before{content:"\e9e4"}.pi-database:before{content:"\e9e3"}.pi-hashtag:before{content:"\e9e2"}.pi-bookmark-fill:before{content:"\e9df"}.pi-filter-fill:before{content:"\e9e0"}.pi-heart-fill:before{content:"\e9e1"}.pi-flag-fill:before{content:"\e9de"}.pi-circle:before{content:"\e9dc"}.pi-circle-fill:before{content:"\e9dd"}.pi-bolt:before{content:"\e9db"}.pi-history:before{content:"\e9da"}.pi-box:before{content:"\e9d9"}.pi-at:before{content:"\e9d8"}.pi-arrow-up-right:before{content:"\e9d4"}.pi-arrow-up-left:before{content:"\e9d5"}.pi-arrow-down-left:before{content:"\e9d6"}.pi-arrow-down-right:before{content:"\e9d7"}.pi-telegram:before{content:"\e9d3"}.pi-stop-circle:before{content:"\e9d2"}.pi-stop:before{content:"\e9d1"}.pi-whatsapp:before{content:"\e9d0"}.pi-building:before{content:"\e9cf"}.pi-qrcode:before{content:"\e9ce"}.pi-car:before{content:"\e9cd"}.pi-instagram:before{content:"\e9cc"}.pi-linkedin:before{content:"\e9cb"}.pi-send:before{content:"\e9ca"}.pi-slack:before{content:"\e9c9"}.pi-sun:before{content:"\e9c8"}.pi-moon:before{content:"\e9c7"}.pi-vimeo:before{content:"\e9c6"}.pi-youtube:before{content:"\e9c5"}.pi-flag:before{content:"\e9c4"}.pi-wallet:before{content:"\e9c3"}.pi-map:before{content:"\e9c2"}.pi-link:before{content:"\e9c1"}.pi-credit-card:before{content:"\e9bf"}.pi-discord:before{content:"\e9c0"}.pi-percentage:before{content:"\e9be"}.pi-euro:before{content:"\e9bd"}.pi-book:before{content:"\e9ba"}.pi-shield:before{content:"\e9b9"}.pi-paypal:before{content:"\e9bb"}.pi-amazon:before{content:"\e9bc"}.pi-phone:before{content:"\e9b8"}.pi-filter-slash:before{content:"\e9b7"}.pi-facebook:before{content:"\e9b4"}.pi-github:before{content:"\e9b5"}.pi-twitter:before{content:"\e9b6"}.pi-step-backward-alt:before{content:"\e9ac"}.pi-step-forward-alt:before{content:"\e9ad"}.pi-forward:before{content:"\e9ae"}.pi-backward:before{content:"\e9af"}.pi-fast-backward:before{content:"\e9b0"}.pi-fast-forward:before{content:"\e9b1"}.pi-pause:before{content:"\e9b2"}.pi-play:before{content:"\e9b3"}.pi-compass:before{content:"\e9ab"}.pi-id-card:before{content:"\e9aa"}.pi-ticket:before{content:"\e9a9"}.pi-file-o:before{content:"\e9a8"}.pi-reply:before{content:"\e9a7"}.pi-directions-alt:before{content:"\e9a5"}.pi-directions:before{content:"\e9a6"}.pi-thumbs-up:before{content:"\e9a3"}.pi-thumbs-down:before{content:"\e9a4"}.pi-sort-numeric-down-alt:before{content:"\e996"}.pi-sort-numeric-up-alt:before{content:"\e997"}.pi-sort-alpha-down-alt:before{content:"\e998"}.pi-sort-alpha-up-alt:before{content:"\e999"}.pi-sort-numeric-down:before{content:"\e99a"}.pi-sort-numeric-up:before{content:"\e99b"}.pi-sort-alpha-down:before{content:"\e99c"}.pi-sort-alpha-up:before{content:"\e99d"}.pi-sort-alt:before{content:"\e99e"}.pi-sort-amount-up:before{content:"\e99f"}.pi-sort-amount-down:before{content:"\e9a0"}.pi-sort-amount-down-alt:before{content:"\e9a1"}.pi-sort-amount-up-alt:before{content:"\e9a2"}.pi-palette:before{content:"\e995"}.pi-undo:before{content:"\e994"}.pi-desktop:before{content:"\e993"}.pi-sliders-v:before{content:"\e991"}.pi-sliders-h:before{content:"\e992"}.pi-search-plus:before{content:"\e98f"}.pi-search-minus:before{content:"\e990"}.pi-file-excel:before{content:"\e98e"}.pi-file-pdf:before{content:"\e98d"}.pi-check-square:before{content:"\e98c"}.pi-chart-line:before{content:"\e98b"}.pi-user-edit:before{content:"\e98a"}.pi-exclamation-circle:before{content:"\e989"}.pi-android:before{content:"\e985"}.pi-google:before{content:"\e986"}.pi-apple:before{content:"\e987"}.pi-microsoft:before{content:"\e988"}.pi-heart:before{content:"\e984"}.pi-mobile:before{content:"\e982"}.pi-tablet:before{content:"\e983"}.pi-key:before{content:"\e981"}.pi-shopping-cart:before{content:"\e980"}.pi-comments:before{content:"\e97e"}.pi-comment:before{content:"\e97f"}.pi-briefcase:before{content:"\e97d"}.pi-bell:before{content:"\e97c"}.pi-paperclip:before{content:"\e97b"}.pi-share-alt:before{content:"\e97a"}.pi-envelope:before{content:"\e979"}.pi-volume-down:before{content:"\e976"}.pi-volume-up:before{content:"\e977"}.pi-volume-off:before{content:"\e978"}.pi-eject:before{content:"\e975"}.pi-money-bill:before{content:"\e974"}.pi-images:before{content:"\e973"}.pi-image:before{content:"\e972"}.pi-sign-in:before{content:"\e970"}.pi-sign-out:before{content:"\e971"}.pi-wifi:before{content:"\e96f"}.pi-sitemap:before{content:"\e96e"}.pi-chart-bar:before{content:"\e96d"}.pi-camera:before{content:"\e96c"}.pi-dollar:before{content:"\e96b"}.pi-lock-open:before{content:"\e96a"}.pi-table:before{content:"\e969"}.pi-map-marker:before{content:"\e968"}.pi-list:before{content:"\e967"}.pi-eye-slash:before{content:"\e965"}.pi-eye:before{content:"\e966"}.pi-folder-open:before{content:"\e964"}.pi-folder:before{content:"\e963"}.pi-video:before{content:"\e962"}.pi-inbox:before{content:"\e961"}.pi-lock:before{content:"\e95f"}.pi-unlock:before{content:"\e960"}.pi-tags:before{content:"\e95d"}.pi-tag:before{content:"\e95e"}.pi-power-off:before{content:"\e95c"}.pi-save:before{content:"\e95b"}.pi-question-circle:before{content:"\e959"}.pi-question:before{content:"\e95a"}.pi-copy:before{content:"\e957"}.pi-file:before{content:"\e958"}.pi-clone:before{content:"\e955"}.pi-calendar-times:before{content:"\e952"}.pi-calendar-minus:before{content:"\e953"}.pi-calendar-plus:before{content:"\e954"}.pi-ellipsis-v:before{content:"\e950"}.pi-ellipsis-h:before{content:"\e951"}.pi-bookmark:before{content:"\e94e"}.pi-globe:before{content:"\e94f"}.pi-replay:before{content:"\e94d"}.pi-filter:before{content:"\e94c"}.pi-print:before{content:"\e94b"}.pi-align-right:before{content:"\e946"}.pi-align-left:before{content:"\e947"}.pi-align-center:before{content:"\e948"}.pi-align-justify:before{content:"\e949"}.pi-cog:before{content:"\e94a"}.pi-cloud-download:before{content:"\e943"}.pi-cloud-upload:before{content:"\e944"}.pi-cloud:before{content:"\e945"}.pi-pencil:before{content:"\e942"}.pi-users:before{content:"\e941"}.pi-clock:before{content:"\e940"}.pi-user-minus:before{content:"\e93e"}.pi-user-plus:before{content:"\e93f"}.pi-trash:before{content:"\e93d"}.pi-external-link:before{content:"\e93c"}.pi-window-maximize:before{content:"\e93b"}.pi-window-minimize:before{content:"\e93a"}.pi-refresh:before{content:"\e938"}.pi-user:before{content:"\e939"}.pi-exclamation-triangle:before{content:"\e922"}.pi-calendar:before{content:"\e927"}.pi-chevron-circle-left:before{content:"\e928"}.pi-chevron-circle-down:before{content:"\e929"}.pi-chevron-circle-right:before{content:"\e92a"}.pi-chevron-circle-up:before{content:"\e92b"}.pi-angle-double-down:before{content:"\e92c"}.pi-angle-double-left:before{content:"\e92d"}.pi-angle-double-right:before{content:"\e92e"}.pi-angle-double-up:before{content:"\e92f"}.pi-angle-down:before{content:"\e930"}.pi-angle-left:before{content:"\e931"}.pi-angle-right:before{content:"\e932"}.pi-angle-up:before{content:"\e933"}.pi-upload:before{content:"\e934"}.pi-download:before{content:"\e956"}.pi-ban:before{content:"\e935"}.pi-star-fill:before{content:"\e936"}.pi-star:before{content:"\e937"}.pi-chevron-left:before{content:"\e900"}.pi-chevron-right:before{content:"\e901"}.pi-chevron-down:before{content:"\e902"}.pi-chevron-up:before{content:"\e903"}.pi-caret-left:before{content:"\e904"}.pi-caret-right:before{content:"\e905"}.pi-caret-down:before{content:"\e906"}.pi-caret-up:before{content:"\e907"}.pi-search:before{content:"\e908"}.pi-check:before{content:"\e909"}.pi-check-circle:before{content:"\e90a"}.pi-times:before{content:"\e90b"}.pi-times-circle:before{content:"\e90c"}.pi-plus:before{content:"\e90d"}.pi-plus-circle:before{content:"\e90e"}.pi-minus:before{content:"\e90f"}.pi-minus-circle:before{content:"\e910"}.pi-circle-on:before{content:"\e911"}.pi-circle-off:before{content:"\e912"}.pi-sort-down:before{content:"\e913"}.pi-sort-up:before{content:"\e914"}.pi-sort:before{content:"\e915"}.pi-step-backward:before{content:"\e916"}.pi-step-forward:before{content:"\e917"}.pi-th-large:before{content:"\e918"}.pi-arrow-down:before{content:"\e919"}.pi-arrow-left:before{content:"\e91a"}.pi-arrow-right:before{content:"\e91b"}.pi-arrow-up:before{content:"\e91c"}.pi-bars:before{content:"\e91d"}.pi-arrow-circle-down:before{content:"\e91e"}.pi-arrow-circle-left:before{content:"\e91f"}.pi-arrow-circle-right:before{content:"\e920"}.pi-arrow-circle-up:before{content:"\e921"}.pi-info:before{content:"\e923"}.pi-info-circle:before{content:"\e924"}.pi-home:before{content:"\e925"}.pi-spinner:before{content:"\e926"}.p-component,.p-component *{box-sizing:border-box}.p-hidden{display:none}.p-hidden-space{visibility:hidden}.p-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.p-hidden-accessible input,.p-hidden-accessible select{transform:scale(0)}.p-reset{margin:0;padding:0;border:0;outline:0;text-decoration:none;font-size:100%;list-style:none}.p-disabled,.p-disabled *{cursor:default!important;pointer-events:none}.p-component-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.p-overflow-hidden{overflow:hidden}.p-unselectable-text{-webkit-user-select:none;user-select:none}.p-scrollbar-measure{width:100px;height:100px;overflow:scroll;position:absolute;top:-9999px}@keyframes p-fadein{0%{opacity:0}to{opacity:1}}input[type=button],input[type=submit],input[type=reset],input[type=file]::-webkit-file-upload-button,button{border-radius:0}.p-link{text-align:left;background-color:transparent;margin:0;padding:0;border:0;cursor:pointer;-webkit-user-select:none;user-select:none}.p-link:disabled{cursor:default}.p-sr-only{border:0;clip:rect(1px,1px,1px,1px);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.p-connected-overlay{opacity:0;transform:scaleY(.8);transition:transform .12s cubic-bezier(0,0,.2,1),opacity .12s cubic-bezier(0,0,.2,1)}.p-connected-overlay-visible{opacity:1;transform:scaleY(1)}.p-connected-overlay-hidden{opacity:0;transform:scaleY(1);transition:opacity .1s linear}.p-toggleable-content.ng-animating{overflow:hidden}.p-badge{display:inline-block;border-radius:10px;text-align:center;padding:0 .5rem}.p-overlay-badge{position:relative}.p-overlay-badge .p-badge{position:absolute;top:0;right:0;transform:translate(50%,-50%);transform-origin:100% 0;margin:0}.p-badge-dot{width:.5rem;min-width:.5rem;height:.5rem;border-radius:50%;padding:0}.p-badge-no-gutter{padding:0;border-radius:50%}.p-button{margin:0;display:inline-flex;cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;vertical-align:bottom;text-align:center;overflow:hidden;position:relative}.p-button-label{flex:1 1 auto}.p-button-icon-right{order:1}.p-button:disabled{cursor:default}.p-button-icon-only{justify-content:center}.p-button-icon-only:after{content:"p";visibility:hidden;clip:rect(0 0 0 0);width:0}.p-button-vertical{flex-direction:column}.p-button-icon-bottom{order:2}.p-buttonset .p-button{margin:0}.p-buttonset .p-button:not(:last-child){border-right:0 none}.p-buttonset .p-button:not(:first-of-type):not(:last-of-type){border-radius:0}.p-buttonset .p-button:first-of-type{border-top-right-radius:0;border-bottom-right-radius:0}.p-buttonset .p-button:last-of-type{border-top-left-radius:0;border-bottom-left-radius:0}.p-buttonset .p-button:focus{position:relative;z-index:1}.p-checkbox{display:inline-flex;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:bottom;position:relative}.p-checkbox-disabled{cursor:default!important;pointer-events:none}.p-checkbox-box{display:flex;justify-content:center;align-items:center}p-checkbox{display:inline-flex;vertical-align:bottom;align-items:center}.p-checkbox-label{line-height:1}.p-colorpicker-panel .p-colorpicker-color{background:transparent url(color.png) no-repeat left top}.p-colorpicker-panel .p-colorpicker-hue{background:transparent url(hue.png) no-repeat left top}.p-inputtext{margin:0}.p-fluid .p-inputtext{width:100%}.p-inputgroup{display:flex;align-items:stretch;width:100%}.p-inputgroup-addon{display:flex;align-items:center;justify-content:center}.p-inputgroup .p-float-label{display:flex;align-items:stretch;width:100%}.p-inputgroup .p-inputtext,.p-fluid .p-inputgroup .p-inputtext,.p-inputgroup .p-inputwrapper,.p-inputgroup .p-inputwrapper>.p-component{flex:1 1 auto;width:1%}.p-float-label{display:block;position:relative}.p-float-label label{position:absolute;pointer-events:none;top:50%;margin-top:-.5rem;transition-property:all;transition-timing-function:ease;line-height:1}.p-float-label textarea~label{top:1rem}.p-float-label input:focus~label,.p-float-label input.p-filled~label,.p-float-label textarea:focus~label,.p-float-label textarea.p-filled~label,.p-float-label .p-inputwrapper-focus~label,.p-float-label .p-inputwrapper-filled~label{top:-.75rem;font-size:12px}.p-float-label .input:-webkit-autofill~label{top:-20px;font-size:12px}.p-float-label .p-placeholder,.p-float-label input::placeholder,.p-float-label .p-inputtext::placeholder{opacity:0;transition-property:all;transition-timing-function:ease}.p-float-label .p-focus .p-placeholder,.p-float-label input:focus::placeholder,.p-float-label .p-inputtext:focus::placeholder{opacity:1;transition-property:all;transition-timing-function:ease}.p-input-icon-left,.p-input-icon-right{position:relative;display:inline-block}.p-input-icon-left>i,.p-input-icon-right>i{position:absolute;top:50%;margin-top:-.5rem}.p-fluid .p-input-icon-left,.p-fluid .p-input-icon-right{display:block;width:100%}.p-inputtextarea-resizable{overflow:hidden;resize:none}.p-fluid .p-inputtextarea{width:100%}.p-password{position:relative;display:inline-flex}.p-password-panel{position:absolute;top:0;left:0}.p-password .p-password-panel{min-width:100%}.p-password-meter{height:10px}.p-password-strength{height:100%;width:0;transition:width 1s ease-in-out}.p-fluid .p-password{display:flex}.p-password-input::-ms-reveal,.p-password-input::-ms-clear{display:none}.p-password-clear-icon{position:absolute;top:50%;margin-top:-.5rem;cursor:pointer}.p-password-clearable{position:relative}.p-radiobutton{display:inline-flex;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:bottom;position:relative}.p-radiobutton-box{display:flex;justify-content:center;align-items:center}.p-radiobutton-icon{-webkit-backface-visibility:hidden;backface-visibility:hidden;transform:translateZ(0) scale(.1);border-radius:50%;visibility:hidden}.p-radiobutton-box.p-highlight .p-radiobutton-icon{transform:translateZ(0) scale(1);visibility:visible}p-radiobutton{display:inline-flex;vertical-align:bottom;align-items:center}.p-radiobutton-label{line-height:1}.p-ripple{overflow:hidden;position:relative}.p-ink{display:block;position:absolute;background:rgba(255,255,255,.5);border-radius:100%;transform:scale(0)}.p-ink-active{animation:ripple .4s linear}.p-ripple-disabled .p-ink{display:none!important}@keyframes ripple{to{opacity:0;transform:scale(2.5)}}.p-tooltip{position:absolute;display:none;padding:.25em .5rem;max-width:12.5rem}.p-tooltip.p-tooltip-right,.p-tooltip.p-tooltip-left{padding:0 .25rem}.p-tooltip.p-tooltip-top,.p-tooltip.p-tooltip-bottom{padding:.25em 0}.p-tooltip .p-tooltip-text{white-space:pre-line;word-break:break-word}.p-tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.p-tooltip-right .p-tooltip-arrow{top:50%;left:0;margin-top:-.25rem;border-width:.25em .25em .25em 0}.p-tooltip-left .p-tooltip-arrow{top:50%;right:0;margin-top:-.25rem;border-width:.25em 0 .25em .25rem}.p-tooltip.p-tooltip-top{padding:.25em 0}.p-tooltip-top .p-tooltip-arrow{bottom:0;left:50%;margin-left:-.25rem;border-width:.25em .25em 0}.p-tooltip-bottom .p-tooltip-arrow{top:0;left:50%;margin-left:-.25rem;border-width:0 .25em .25rem}.p-component{font-family:Assistant,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;font-size:1rem;font-weight:400;line-height:normal}.p-component-overlay{background-color:#fff;transition-duration:.2s}.p-disabled,.p-component:disabled{opacity:1}.p-text-secondary{color:#14151a}.p-link{border-radius:.125rem}.p-link:focus{outline:0 none;outline-offset:0;box-shadow:none}.p-fluid .p-inputgroup .p-button{width:auto}.p-fluid .p-inputgroup .p-button.p-button-icon-only{width:2.5rem}.p-field>label{font-size:.813rem}.formgroup-inline .field-checkbox{margin-bottom:0}.p-label-input-required:after{content:"*";color:red;margin-left:2px;vertical-align:middle}.pi{aspect-ratio:1/1;line-height:1;justify-content:center;align-items:center;display:flex;font-size:16px;width:20px}[class$=-sm] .pi{width:16px;font-size:14px}[class$=-lg] .pi{width:24px;font-size:18px}#large{height:3rem;border-radius:.5rem;font-size:1.25rem}#large .p-button-label{font-size:inherit}#large .p-button-icon,#large .pi{font-size:18px}#small{border-radius:.25rem;font-size:.813rem;gap:.25rem;height:2rem;padding:0 .5rem}#small .p-button-label{font-size:inherit}#main-primary-severity{background-color:var(--color-palette-primary-500)}#main-primary-severity:hover{background-color:var(--color-palette-primary-600)}#main-primary-severity:active{background-color:var(--color-palette-primary-700)}#main-primary-severity:focus{background-color:var(--color-palette-primary-500);outline:2.8px solid var(--color-palette-primary-op-20)}#outlined-primary-severity{background-color:transparent;border:1.5px solid var(--color-palette-primary-500)}#outlined-primary-severity .p-button-label,#outlined-primary-severity .p-button-icon,#outlined-primary-severity .pi{color:var(--color-palette-primary-500)}#outlined-primary-severity:hover{background-color:var(--color-palette-primary-op-10)}#outlined-primary-severity:active{background-color:var(--color-palette-primary-op-20)}#outlined-primary-severity:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}#outlined-primary-severity-sm{border:1px solid var(--color-palette-primary-500)}#outlined-secondary-severity{background-color:transparent;border:1.5px solid var(--color-palette-secondary-500)}#outlined-secondary-severity .p-button-label,#outlined-secondary-severity .p-button-icon,#outlined-secondary-severity .pi{color:var(--color-palette-secondary-500)}#outlined-secondary-severity:hover{background-color:var(--color-palette-secondary-op-10)}#outlined-secondary-severity:active{background-color:var(--color-palette-secondary-op-20)}#outlined-secondary-severity:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}#outlined-secondary-severity-sm{border:1px solid var(--color-palette-secondary-500)}#text-primary-severity{background-color:transparent;color:#14151a;overflow:hidden;max-width:100%}#text-primary-severity .p-button-label{color:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#text-primary-severity .p-button-icon,#text-primary-severity .pi{color:var(--color-palette-primary-500)}#text-primary-severity:hover{background-color:var(--color-palette-primary-op-10)}#text-primary-severity:active{background-color:var(--color-palette-primary-op-20)}#text-primary-severity:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}#text-secondary-severity{background-color:transparent;color:#14151a}#text-secondary-severity.p-button-semi-transparent{background-color:#ffffffa6}#text-secondary-severity .p-button-label{color:inherit}#text-secondary-severity .p-button-icon,#text-secondary-severity .pi{color:var(--color-palette-secondary-500)}#text-secondary-severity.p-button-icon-only .p-button-icon,#text-secondary-severity.p-button-icon-only .pi{color:#14151a}#text-secondary-severity:hover{background-color:var(--color-palette-secondary-op-10)}#text-secondary-severity:active{background-color:var(--color-palette-secondary-op-20)}#text-secondary-severity:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}#text-danger-severity{background-color:transparent;color:#d82b2e}#text-danger-severity:hover{background-color:#d82b2e1a}#text-danger-severity:active{background-color:#d82b2e33}#text-danger-severity:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}#text-danger-severity .p-button-icon,#text-danger-severity .pi{color:inherit}#button-disabled{background-color:#f3f3f4;color:#afb3c0}#button-disabled .p-button-label,#button-disabled .p-button-icon,#button-disabled .pi{color:inherit}#button-disabled-outlined{border:1.5px solid #ebecef}#button-disabled-text{border:none;background-color:transparent}#large,.p-button:not(.p-button-icon-only).p-button-lg,.p-button-lg .p-button:not(.p-button-icon-only){height:3rem;border-radius:.5rem;font-size:1.25rem}#large .p-button-label,.p-button:not(.p-button-icon-only).p-button-lg .p-button-label,.p-button-lg .p-button:not(.p-button-icon-only) .p-button-label{font-size:inherit}#large .p-button-icon,.p-button:not(.p-button-icon-only).p-button-lg .p-button-icon,.p-button-lg .p-button:not(.p-button-icon-only) .p-button-icon,#large .pi,.p-button:not(.p-button-icon-only).p-button-lg .pi,.p-button-lg .p-button:not(.p-button-icon-only) .pi{font-size:18px}#small,.p-button:not(.p-button-icon-only).p-button-sm,.p-button-sm .p-button:not(.p-button-icon-only){border-radius:.25rem;font-size:.813rem;gap:.25rem;height:2rem;padding:0 .5rem}#small .p-button-label,.p-button:not(.p-button-icon-only).p-button-sm .p-button-label,.p-button-sm .p-button:not(.p-button-icon-only) .p-button-label{font-size:inherit}#main-primary-severity,.p-button:enabled,.p-button.p-fileupload-choose{background-color:var(--color-palette-primary-500)}#main-primary-severity:hover,.p-button:hover:enabled,.p-button.p-fileupload-choose:hover{background-color:var(--color-palette-primary-600)}#main-primary-severity:active,.p-button:active:enabled,.p-button.p-fileupload-choose:active{background-color:var(--color-palette-primary-700)}#main-primary-severity:focus,.p-button:focus:enabled,.p-button.p-fileupload-choose:focus{background-color:var(--color-palette-primary-500);outline:2.8px solid var(--color-palette-primary-op-20)}#main-secondary-severity{background-color:var(--color-palette-secondary-500)}#main-secondary-severity:hover{background-color:var(--color-palette-secondary-600)}#main-secondary-severity:active{background-color:var(--color-palette-secondary-700)}#main-secondary-severity:focus{background-color:var(--color-palette-secondary-500);outline:2.8px solid var(--color-palette-primary-op-20)}#outlined-primary-severity,.p-button.p-button-outlined:enabled,.p-button.p-button-outlined:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton){background-color:transparent;border:1.5px solid var(--color-palette-primary-500)}#outlined-primary-severity .p-button-label,.p-button.p-button-outlined:enabled .p-button-label,.p-button.p-button-outlined:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton) .p-button-label,#outlined-primary-severity .p-button-icon,.p-button.p-button-outlined:enabled .p-button-icon,.p-button.p-button-outlined:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton) .p-button-icon,#outlined-primary-severity .pi,.p-button.p-button-outlined:enabled .pi,.p-button.p-button-outlined:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton) .pi{color:var(--color-palette-primary-500)}#outlined-primary-severity:hover,.p-button.p-button-outlined:hover:enabled,.p-button.p-button-outlined:hover:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton){background-color:var(--color-palette-primary-op-10)}#outlined-primary-severity:active,.p-button.p-button-outlined:active:enabled,.p-button.p-button-outlined:active:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton){background-color:var(--color-palette-primary-op-20)}#outlined-primary-severity:focus,.p-button.p-button-outlined:focus:enabled,.p-button.p-button-outlined:focus:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton){background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}#outlined-primary-severity-sm,.p-button.p-button-outlined:enabled.p-button-sm,.p-button.p-button-outlined:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-sm{border:1px solid var(--color-palette-primary-500)}#outlined-secondary-severity,.p-button.p-button-outlined:enabled.p-button-secondary,.p-button.p-button-outlined:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-secondary,.p-button:enabled.p-button-link.p-button-secondary,.p-button.p-fileupload-choose.p-button-link.p-button-secondary{background-color:transparent;border:1.5px solid var(--color-palette-secondary-500)}#outlined-secondary-severity .p-button-label,.p-button.p-button-outlined:enabled.p-button-secondary .p-button-label,.p-button.p-button-outlined:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-secondary .p-button-label,.p-button:enabled.p-button-link.p-button-secondary .p-button-label,.p-button.p-fileupload-choose.p-button-link.p-button-secondary .p-button-label,#outlined-secondary-severity .p-button-icon,.p-button.p-button-outlined:enabled.p-button-secondary .p-button-icon,.p-button.p-button-outlined:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-secondary .p-button-icon,.p-button:enabled.p-button-link.p-button-secondary .p-button-icon,.p-button.p-fileupload-choose.p-button-link.p-button-secondary .p-button-icon,#outlined-secondary-severity .pi,.p-button.p-button-outlined:enabled.p-button-secondary .pi,.p-button.p-button-outlined:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-secondary .pi,.p-button:enabled.p-button-link.p-button-secondary .pi,.p-button.p-fileupload-choose.p-button-link.p-button-secondary .pi{color:var(--color-palette-secondary-500)}#outlined-secondary-severity:hover,.p-button.p-button-outlined.p-button-secondary:hover:enabled,.p-button.p-button-outlined.p-button-secondary:hover:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),.p-button.p-button-link.p-button-secondary:hover:enabled,.p-button.p-fileupload-choose.p-button-link.p-button-secondary:hover{background-color:var(--color-palette-secondary-op-10)}#outlined-secondary-severity:active,.p-button.p-button-outlined.p-button-secondary:active:enabled,.p-button.p-button-outlined.p-button-secondary:active:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),.p-button.p-button-link.p-button-secondary:active:enabled,.p-button.p-fileupload-choose.p-button-link.p-button-secondary:active{background-color:var(--color-palette-secondary-op-20)}#outlined-secondary-severity:focus,.p-button.p-button-outlined.p-button-secondary:focus:enabled,.p-button.p-button-outlined.p-button-secondary:focus:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),.p-button.p-button-link.p-button-secondary:focus:enabled,.p-button.p-fileupload-choose.p-button-link.p-button-secondary:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}#outlined-secondary-severity-sm,.p-button.p-button-outlined:enabled.p-button-secondary.p-button-sm,.p-button.p-button-outlined:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-secondary.p-button-sm{border:1px solid var(--color-palette-secondary-500)}#text-primary-severity,.p-button-text:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),a.p-button.p-button-text{background-color:transparent;color:#14151a;overflow:hidden;max-width:100%}#text-primary-severity .p-button-label,.p-button-text:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton) .p-button-label,a.p-button.p-button-text .p-button-label{color:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#text-primary-severity .p-button-icon,.p-button-text:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton) .p-button-icon,a.p-button.p-button-text .p-button-icon,#text-primary-severity .pi,.p-button-text:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton) .pi,a.p-button.p-button-text .pi{color:var(--color-palette-primary-500)}#text-primary-severity:hover,.p-button-text:hover:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),a.p-button.p-button-text:hover{background-color:var(--color-palette-primary-op-10)}#text-primary-severity:active,.p-button-text:active:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),a.p-button.p-button-text:active{background-color:var(--color-palette-primary-op-20)}#text-primary-severity:focus,.p-button-text:focus:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),a.p-button.p-button-text:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}#text-secondary-severity,.p-button-text:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-secondary,a.p-button.p-button-text.p-button-secondary{background-color:transparent;color:#14151a}#text-secondary-severity.p-button-semi-transparent,.p-button-semi-transparent.p-button-text.p-button-secondary:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),a.p-button-semi-transparent.p-button.p-button-text.p-button-secondary{background-color:#ffffffa6}#text-secondary-severity .p-button-label,.p-button-text:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-secondary .p-button-label,a.p-button.p-button-text.p-button-secondary .p-button-label{color:inherit}#text-secondary-severity .p-button-icon,.p-button-text:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-secondary .p-button-icon,a.p-button.p-button-text.p-button-secondary .p-button-icon,#text-secondary-severity .pi,.p-button-text:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-secondary .pi,a.p-button.p-button-text.p-button-secondary .pi{color:var(--color-palette-secondary-500)}#text-secondary-severity.p-button-icon-only .p-button-icon,.p-button-icon-only.p-button-text.p-button-secondary:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton) .p-button-icon,a.p-button-icon-only.p-button.p-button-text.p-button-secondary .p-button-icon,#text-secondary-severity.p-button-icon-only .pi,.p-button-icon-only.p-button-text.p-button-secondary:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton) .pi,a.p-button-icon-only.p-button.p-button-text.p-button-secondary .pi{color:#14151a}#text-secondary-severity:hover,.p-button-text.p-button-secondary:hover:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),a.p-button.p-button-text.p-button-secondary:hover{background-color:var(--color-palette-secondary-op-10)}#text-secondary-severity:active,.p-button-text.p-button-secondary:active:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),a.p-button.p-button-text.p-button-secondary:active{background-color:var(--color-palette-secondary-op-20)}#text-secondary-severity:focus,.p-button-text.p-button-secondary:focus:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),a.p-button.p-button-text.p-button-secondary:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}#text-danger-severity,.p-button-text:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-danger,a.p-button.p-button-text.p-button-danger{background-color:transparent;color:#d82b2e}#text-danger-severity:hover,.p-button-text.p-button-danger:hover:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),a.p-button.p-button-text.p-button-danger:hover{background-color:#d82b2e1a}#text-danger-severity:active,.p-button-text.p-button-danger:active:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),a.p-button.p-button-text.p-button-danger:active{background-color:#d82b2e33}#text-danger-severity:focus,.p-button-text.p-button-danger:focus:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),a.p-button.p-button-text.p-button-danger:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}#text-danger-severity .p-button-icon,.p-button-text:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-danger .p-button-icon,a.p-button.p-button-text.p-button-danger .p-button-icon,#text-danger-severity .pi,.p-button-text:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-danger .pi,a.p-button.p-button-text.p-button-danger .pi{color:inherit}#button-disabled,.p-button:disabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton){background-color:#f3f3f4;color:#afb3c0}#button-disabled .p-button-label,.p-button:disabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton) .p-button-label,#button-disabled .p-button-icon,.p-button:disabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton) .p-button-icon,#button-disabled .pi,.p-button:disabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton) .pi{color:inherit}#button-disabled-outlined,.p-button:disabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-outlined{border:1.5px solid #ebecef}#button-disabled-text,.p-button:disabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-text{border:none;background-color:transparent}.p-button{border:none;color:#fff;border-radius:.375rem}.p-button .p-button-label{color:inherit;font-size:inherit;text-transform:capitalize}.p-button .p-button-icon,.p-button .pi{color:inherit}.p-button:not(.p-button-icon-only){font-size:1rem;gap:.5rem;height:2.5rem;padding:0 1rem;text-transform:capitalize}.p-button:enabled.p-button-link,.p-button.p-fileupload-choose.p-button-link{color:var(--color-palette-primary-500);background:transparent;border:transparent}.p-button:enabled.p-button-link.p-button-secondary,.p-button.p-fileupload-choose.p-button-link.p-button-secondary{border:transparent}.p-button-icon-only:not(.p-splitbutton-menubutton){height:2.5rem;width:2.5rem;min-width:2.5rem;border:none}.p-button-icon-only:not(.p-splitbutton-menubutton).p-button-sm{height:2rem;width:2rem;min-width:2rem}.p-button.p-button-vertical{height:100%;gap:.25rem;margin-bottom:0;padding:.5rem}.p-button-rounded{border-radius:50%}.p-dialog{border-radius:.375rem;box-shadow:0 11px 15px -7px var(--color-palette-black-op-20),0 24px 38px 3px var(--color-palette-black-op-10),0 9px 46px 8px var(--color-palette-black-op-10);border:0 none;overflow:auto}.p-dialog .p-dialog-header{border-bottom:0 none;background:#ffffff;color:#14151a;padding:2.5rem;border-top-right-radius:.375rem;border-top-left-radius:.375rem}.p-dialog .p-dialog-header .p-dialog-title{font-size:1.5rem}.p-dialog .p-dialog-header .p-dialog-header-icon{width:2rem;height:2rem;color:#14151a;border:0 none;background:transparent;border-radius:50%;transition:background-color .2s,color .2s,box-shadow .2s;margin-right:.5rem}.p-dialog .p-dialog-header .p-dialog-header-icon:enabled:hover{color:#14151a;border-color:transparent;background:var(--color-palette-primary-100)}.p-dialog .p-dialog-header .p-dialog-header-icon:focus{outline:0 none;outline-offset:0;box-shadow:0 0 0 4px var(--color-palette-secondary-op-20)}.p-dialog .p-dialog-header .p-dialog-header-icon:last-child{margin-right:0}.p-dialog .p-dialog-content{background:#ffffff;color:#14151a;padding:0 2.5rem 2.5rem}.p-dialog .p-dialog-footer{border-top:0 none;background:#ffffff;color:#14151a;padding:1.5rem;text-align:right;border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.p-dialog .p-dialog-footer button{margin:0 .5rem 0 0;width:auto}.p-dialog.p-confirm-dialog .p-confirm-dialog-icon{font-size:1.75rem;padding-right:.5rem;color:var(--color-palette-primary-500)}.p-dialog.p-confirm-dialog .p-confirm-dialog-message{line-height:1.5em}.p-dialog-mask.p-component-overlay{background-color:var(--color-palette-black-op-80);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.p-dialog-header .p-dialog-header-icons .p-dialog-header-close{background-color:#f3f3f4;color:var(--color-palette-primary-500);border-radius:0}.p-dialog-mask.p-dialog-mask-transparent.p-component-overlay{background-color:transparent;-webkit-backdrop-filter:blur(.375rem);backdrop-filter:blur(.375rem)}#form-field-base,#form-field-extend,.p-inputtext:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input){background-color:#fff;height:2.5rem;border-radius:.375rem;border:1.5px solid #d1d4db;padding:0 .5rem;color:#6c7389;font-size:1rem}#form-field-base.p-filled,.p-filled#form-field-extend,.p-filled.p-inputtext:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input){color:#14151a}#form-field-sm,.p-inputtext:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input).p-inputtext-sm{height:2rem;font-size:.813rem;border-radius:.25rem}#form-field-hover,#form-field-states:enabled:hover,#form-field-extend:enabled:hover,.p-inputtext:enabled:hover:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input),#form-field-states:hover,#form-field-extend:hover,.p-inputtext:hover:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input){border-color:var(--color-palette-primary-400)}#form-field-focus,#form-field-states:enabled:active,#form-field-extend:enabled:active,.p-inputtext:enabled:active:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input),#form-field-states:enabled:focus,#form-field-extend:enabled:focus,.p-inputtext:enabled:focus:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input),#form-field-states:active,#form-field-extend:active,.p-inputtext:active:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input),#form-field-states:focus,#form-field-extend:focus,.p-inputtext:focus:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input){border-color:var(--color-palette-primary-400);outline:2.8px solid var(--color-palette-primary-op-20)}#form-field-disabled,#field-panel-item-disabled,#form-field-states:disabled,#form-field-extend:disabled,.p-inputtext:disabled:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input){border-color:#f3f3f4;background:#fafafb;color:#afb3c0}#field-trigger{background:#f3f3f4;color:var(--color-palette-primary-500);width:2.5rem;border-top-right-radius:.375rem;border-bottom-right-radius:.375rem;height:100%}#field-trigger-sm{width:2rem;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}#field-trigger-icon{padding:.5rem;font-size:14px}#field-panel{background:#ffffff;color:#14151a;border:0 none;border-radius:.375rem;box-shadow:0 0 4px #14151a0a,0 8px 16px #14151a14;padding:.5rem;margin-top:.5rem}#field-panel-header{padding:.75rem;border-bottom:1.5px solid var(--color-palette-black-op-10);color:#14151a;background:#ffffff;margin:0;border-top-right-radius:.125rem;border-top-left-radius:.125rem}#field-panel-filter{padding-right:3rem;color:#14151a}#field-panel-filter-icon{right:.75rem;color:var(--color-palette-primary-500)}#field-panel-items{padding:0}#field-panel-item{display:flex;align-items:center;padding:0 .75rem;color:#14151a;height:2.5rem;gap:.5rem}#field-panel-item-highlight{background:var(--color-palette-primary-200)}#field-panel-item-hover{background:var(--color-palette-primary-100)}#field-panel-item-disabled{cursor:initial}#field-chip{height:1.5rem;padding:.5rem;background:var(--color-palette-primary-200);border-radius:.25rem;color:var(--color-palette-primary-500);font-size:.813rem;display:flex;align-items:center;justify-content:center;gap:.25rem}.p-inputtext:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input).p-inputtextarea{padding:.5rem;min-height:4rem}.p-inputtext:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input):disabled::placeholder{color:#afb3c0}.p-input-icon-right i.pi{color:var(--color-palette-primary-500);cursor:pointer;right:.5rem;margin-top:0;transform:translateY(-50%);-moz-transform:translateY(-50%)}.p-input-icon-right:has(.p-inputtext.p-inputtext-sm) i{font-size:.813rem}.p-input-icon-right i.pi:nth-of-type(1){right:.5rem}.p-input-icon-right i.pi:nth-of-type(2){right:2rem}.p-input-icon-right .p-inputtext{padding-right:2.5rem}.p-error,.p-invalid{color:#f65446}p-inputmask.ng-dirty.ng-invalid>.p-inputtext{border-color:#f65446}p-inputnumber.ng-dirty.ng-invalid>.p-inputnumber>.p-inputtext{border-color:#f65446}.p-inputswitch.p-error,.p-inputswitch.p-invalid{border-color:#f65446}p-inputswitch.ng-dirty.ng-invalid>.p-inputswitch{border-color:#f65446}.p-inputtext.p-error,.p-inputtext.p-invalid,.p-inputtext.ng-dirty.ng-invalid{border-color:#f65446}.p-inputtext.p-error:hover,.p-inputtext.p-error:active,.p-inputtext.p-error:focus,.p-inputtext.p-invalid:hover,.p-inputtext.p-invalid:active,.p-inputtext.p-invalid:focus,.p-inputtext.ng-dirty.ng-invalid:hover,.p-inputtext.ng-dirty.ng-invalid:active,.p-inputtext.ng-dirty.ng-invalid:focus{border-color:#f65446}p-listbox.ng-dirty.ng-invalid>.p-listbox{border-color:#f65446}.p-listbox.p-error,.p-listbox.p-invalid{border-color:#f65446}p-multiselect.ng-dirty.ng-invalid>.p-multiselect{border-color:#f65446}p-multiselect.ng-dirty.ng-invalid>.p-multiselect:hover,p-multiselect.ng-dirty.ng-invalid>.p-multiselect:active,p-multiselect.ng-dirty.ng-invalid>.p-multiselect:focus{border-color:#f65446}.p-radiobutton.p-error>.p-radiobutton-box,.p-radiobutton.p-invalid>.p-radiobutton-box{border-color:#f65446}p-radiobutton.ng-dirty.ng-invalid>.p-radiobutton>.p-radiobutton-box{border-color:#f65446}.p-selectbutton.p-error>.p-button,.p-selectbutton.p-invalid>.p-button{border-color:#f65446}p-selectbutton.ng-dirty.ng-invalid>.p-selectbutton>.p-button{border-color:#f65446}.p-togglebutton.p-button.p-error,.p-togglebutton.p-button.p-invalid{border-color:#f65446}p-togglebutton.ng-dirty.ng-invalid>.p-togglebutton.p-button{border-color:#f65446}.p-multiselect.p-error,.p-multiselect.p-invalid{border-color:#f65446}.p-multiselect.p-error:hover,.p-multiselect.p-error:active,.p-multiselect.p-error:focus,.p-multiselect.p-invalid:hover,.p-multiselect.p-invalid:active,.p-multiselect.p-invalid:focus{border-color:#f65446}.p-rating .p-rating-icon.p-rating-cancel{color:#f65446}.p-rating:not(.p-disabled):not(.p-readonly) .p-rating-icon.p-rating-cancel:hover{color:#f65446}.p-inputtextarea.ng-invalid:not(.ng-pristine){border-color:#f65446}.p-inputtextarea.ng-invalid:not(.ng-pristine):hover,.p-inputtextarea.ng-invalid:not(.ng-pristine):active,.p-inputtextarea.ng-invalid:not(.ng-pristine):focus{border-color:#f65446}@font-face{font-family:primeicons;font-display:block;font-weight:400;font-style:normal;src:url(data:application/font-woff;base64,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) format("woff")} +@font-face{font-family:primeicons;font-display:block;src:url(primeicons.eot);src:url(primeicons.eot?#iefix) format("embedded-opentype"),url(primeicons.woff2) format("woff2"),url(primeicons.woff) format("woff"),url(primeicons.ttf) format("truetype"),url(primeicons.svg?#primeicons) format("svg");font-weight:400;font-style:normal}.pi{font-family:primeicons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.pi:before{--webkit-backface-visibility:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.pi-fw{width:1.28571429em;text-align:center}.pi-spin{animation:fa-spin 2s infinite linear}@keyframes fa-spin{0%{transform:rotate(0)}to{transform:rotate(359deg)}}.pi-eraser:before{content:"\ea04"}.pi-stopwatch:before{content:"\ea01"}.pi-verified:before{content:"\ea02"}.pi-delete-left:before{content:"\ea03"}.pi-hourglass:before{content:"\e9fe"}.pi-truck:before{content:"\ea00"}.pi-wrench:before{content:"\e9ff"}.pi-microphone:before{content:"\e9fa"}.pi-megaphone:before{content:"\e9fb"}.pi-arrow-right-arrow-left:before{content:"\e9fc"}.pi-bitcoin:before{content:"\e9fd"}.pi-file-edit:before{content:"\e9f6"}.pi-language:before{content:"\e9f7"}.pi-file-export:before{content:"\e9f8"}.pi-file-import:before{content:"\e9f9"}.pi-file-word:before{content:"\e9f1"}.pi-gift:before{content:"\e9f2"}.pi-cart-plus:before{content:"\e9f3"}.pi-thumbs-down-fill:before{content:"\e9f4"}.pi-thumbs-up-fill:before{content:"\e9f5"}.pi-arrows-alt:before{content:"\e9f0"}.pi-calculator:before{content:"\e9ef"}.pi-sort-alt-slash:before{content:"\e9ee"}.pi-arrows-h:before{content:"\e9ec"}.pi-arrows-v:before{content:"\e9ed"}.pi-pound:before{content:"\e9eb"}.pi-prime:before{content:"\e9ea"}.pi-chart-pie:before{content:"\e9e9"}.pi-reddit:before{content:"\e9e8"}.pi-code:before{content:"\e9e7"}.pi-sync:before{content:"\e9e6"}.pi-shopping-bag:before{content:"\e9e5"}.pi-server:before{content:"\e9e4"}.pi-database:before{content:"\e9e3"}.pi-hashtag:before{content:"\e9e2"}.pi-bookmark-fill:before{content:"\e9df"}.pi-filter-fill:before{content:"\e9e0"}.pi-heart-fill:before{content:"\e9e1"}.pi-flag-fill:before{content:"\e9de"}.pi-circle:before{content:"\e9dc"}.pi-circle-fill:before{content:"\e9dd"}.pi-bolt:before{content:"\e9db"}.pi-history:before{content:"\e9da"}.pi-box:before{content:"\e9d9"}.pi-at:before{content:"\e9d8"}.pi-arrow-up-right:before{content:"\e9d4"}.pi-arrow-up-left:before{content:"\e9d5"}.pi-arrow-down-left:before{content:"\e9d6"}.pi-arrow-down-right:before{content:"\e9d7"}.pi-telegram:before{content:"\e9d3"}.pi-stop-circle:before{content:"\e9d2"}.pi-stop:before{content:"\e9d1"}.pi-whatsapp:before{content:"\e9d0"}.pi-building:before{content:"\e9cf"}.pi-qrcode:before{content:"\e9ce"}.pi-car:before{content:"\e9cd"}.pi-instagram:before{content:"\e9cc"}.pi-linkedin:before{content:"\e9cb"}.pi-send:before{content:"\e9ca"}.pi-slack:before{content:"\e9c9"}.pi-sun:before{content:"\e9c8"}.pi-moon:before{content:"\e9c7"}.pi-vimeo:before{content:"\e9c6"}.pi-youtube:before{content:"\e9c5"}.pi-flag:before{content:"\e9c4"}.pi-wallet:before{content:"\e9c3"}.pi-map:before{content:"\e9c2"}.pi-link:before{content:"\e9c1"}.pi-credit-card:before{content:"\e9bf"}.pi-discord:before{content:"\e9c0"}.pi-percentage:before{content:"\e9be"}.pi-euro:before{content:"\e9bd"}.pi-book:before{content:"\e9ba"}.pi-shield:before{content:"\e9b9"}.pi-paypal:before{content:"\e9bb"}.pi-amazon:before{content:"\e9bc"}.pi-phone:before{content:"\e9b8"}.pi-filter-slash:before{content:"\e9b7"}.pi-facebook:before{content:"\e9b4"}.pi-github:before{content:"\e9b5"}.pi-twitter:before{content:"\e9b6"}.pi-step-backward-alt:before{content:"\e9ac"}.pi-step-forward-alt:before{content:"\e9ad"}.pi-forward:before{content:"\e9ae"}.pi-backward:before{content:"\e9af"}.pi-fast-backward:before{content:"\e9b0"}.pi-fast-forward:before{content:"\e9b1"}.pi-pause:before{content:"\e9b2"}.pi-play:before{content:"\e9b3"}.pi-compass:before{content:"\e9ab"}.pi-id-card:before{content:"\e9aa"}.pi-ticket:before{content:"\e9a9"}.pi-file-o:before{content:"\e9a8"}.pi-reply:before{content:"\e9a7"}.pi-directions-alt:before{content:"\e9a5"}.pi-directions:before{content:"\e9a6"}.pi-thumbs-up:before{content:"\e9a3"}.pi-thumbs-down:before{content:"\e9a4"}.pi-sort-numeric-down-alt:before{content:"\e996"}.pi-sort-numeric-up-alt:before{content:"\e997"}.pi-sort-alpha-down-alt:before{content:"\e998"}.pi-sort-alpha-up-alt:before{content:"\e999"}.pi-sort-numeric-down:before{content:"\e99a"}.pi-sort-numeric-up:before{content:"\e99b"}.pi-sort-alpha-down:before{content:"\e99c"}.pi-sort-alpha-up:before{content:"\e99d"}.pi-sort-alt:before{content:"\e99e"}.pi-sort-amount-up:before{content:"\e99f"}.pi-sort-amount-down:before{content:"\e9a0"}.pi-sort-amount-down-alt:before{content:"\e9a1"}.pi-sort-amount-up-alt:before{content:"\e9a2"}.pi-palette:before{content:"\e995"}.pi-undo:before{content:"\e994"}.pi-desktop:before{content:"\e993"}.pi-sliders-v:before{content:"\e991"}.pi-sliders-h:before{content:"\e992"}.pi-search-plus:before{content:"\e98f"}.pi-search-minus:before{content:"\e990"}.pi-file-excel:before{content:"\e98e"}.pi-file-pdf:before{content:"\e98d"}.pi-check-square:before{content:"\e98c"}.pi-chart-line:before{content:"\e98b"}.pi-user-edit:before{content:"\e98a"}.pi-exclamation-circle:before{content:"\e989"}.pi-android:before{content:"\e985"}.pi-google:before{content:"\e986"}.pi-apple:before{content:"\e987"}.pi-microsoft:before{content:"\e988"}.pi-heart:before{content:"\e984"}.pi-mobile:before{content:"\e982"}.pi-tablet:before{content:"\e983"}.pi-key:before{content:"\e981"}.pi-shopping-cart:before{content:"\e980"}.pi-comments:before{content:"\e97e"}.pi-comment:before{content:"\e97f"}.pi-briefcase:before{content:"\e97d"}.pi-bell:before{content:"\e97c"}.pi-paperclip:before{content:"\e97b"}.pi-share-alt:before{content:"\e97a"}.pi-envelope:before{content:"\e979"}.pi-volume-down:before{content:"\e976"}.pi-volume-up:before{content:"\e977"}.pi-volume-off:before{content:"\e978"}.pi-eject:before{content:"\e975"}.pi-money-bill:before{content:"\e974"}.pi-images:before{content:"\e973"}.pi-image:before{content:"\e972"}.pi-sign-in:before{content:"\e970"}.pi-sign-out:before{content:"\e971"}.pi-wifi:before{content:"\e96f"}.pi-sitemap:before{content:"\e96e"}.pi-chart-bar:before{content:"\e96d"}.pi-camera:before{content:"\e96c"}.pi-dollar:before{content:"\e96b"}.pi-lock-open:before{content:"\e96a"}.pi-table:before{content:"\e969"}.pi-map-marker:before{content:"\e968"}.pi-list:before{content:"\e967"}.pi-eye-slash:before{content:"\e965"}.pi-eye:before{content:"\e966"}.pi-folder-open:before{content:"\e964"}.pi-folder:before{content:"\e963"}.pi-video:before{content:"\e962"}.pi-inbox:before{content:"\e961"}.pi-lock:before{content:"\e95f"}.pi-unlock:before{content:"\e960"}.pi-tags:before{content:"\e95d"}.pi-tag:before{content:"\e95e"}.pi-power-off:before{content:"\e95c"}.pi-save:before{content:"\e95b"}.pi-question-circle:before{content:"\e959"}.pi-question:before{content:"\e95a"}.pi-copy:before{content:"\e957"}.pi-file:before{content:"\e958"}.pi-clone:before{content:"\e955"}.pi-calendar-times:before{content:"\e952"}.pi-calendar-minus:before{content:"\e953"}.pi-calendar-plus:before{content:"\e954"}.pi-ellipsis-v:before{content:"\e950"}.pi-ellipsis-h:before{content:"\e951"}.pi-bookmark:before{content:"\e94e"}.pi-globe:before{content:"\e94f"}.pi-replay:before{content:"\e94d"}.pi-filter:before{content:"\e94c"}.pi-print:before{content:"\e94b"}.pi-align-right:before{content:"\e946"}.pi-align-left:before{content:"\e947"}.pi-align-center:before{content:"\e948"}.pi-align-justify:before{content:"\e949"}.pi-cog:before{content:"\e94a"}.pi-cloud-download:before{content:"\e943"}.pi-cloud-upload:before{content:"\e944"}.pi-cloud:before{content:"\e945"}.pi-pencil:before{content:"\e942"}.pi-users:before{content:"\e941"}.pi-clock:before{content:"\e940"}.pi-user-minus:before{content:"\e93e"}.pi-user-plus:before{content:"\e93f"}.pi-trash:before{content:"\e93d"}.pi-external-link:before{content:"\e93c"}.pi-window-maximize:before{content:"\e93b"}.pi-window-minimize:before{content:"\e93a"}.pi-refresh:before{content:"\e938"}.pi-user:before{content:"\e939"}.pi-exclamation-triangle:before{content:"\e922"}.pi-calendar:before{content:"\e927"}.pi-chevron-circle-left:before{content:"\e928"}.pi-chevron-circle-down:before{content:"\e929"}.pi-chevron-circle-right:before{content:"\e92a"}.pi-chevron-circle-up:before{content:"\e92b"}.pi-angle-double-down:before{content:"\e92c"}.pi-angle-double-left:before{content:"\e92d"}.pi-angle-double-right:before{content:"\e92e"}.pi-angle-double-up:before{content:"\e92f"}.pi-angle-down:before{content:"\e930"}.pi-angle-left:before{content:"\e931"}.pi-angle-right:before{content:"\e932"}.pi-angle-up:before{content:"\e933"}.pi-upload:before{content:"\e934"}.pi-download:before{content:"\e956"}.pi-ban:before{content:"\e935"}.pi-star-fill:before{content:"\e936"}.pi-star:before{content:"\e937"}.pi-chevron-left:before{content:"\e900"}.pi-chevron-right:before{content:"\e901"}.pi-chevron-down:before{content:"\e902"}.pi-chevron-up:before{content:"\e903"}.pi-caret-left:before{content:"\e904"}.pi-caret-right:before{content:"\e905"}.pi-caret-down:before{content:"\e906"}.pi-caret-up:before{content:"\e907"}.pi-search:before{content:"\e908"}.pi-check:before{content:"\e909"}.pi-check-circle:before{content:"\e90a"}.pi-times:before{content:"\e90b"}.pi-times-circle:before{content:"\e90c"}.pi-plus:before{content:"\e90d"}.pi-plus-circle:before{content:"\e90e"}.pi-minus:before{content:"\e90f"}.pi-minus-circle:before{content:"\e910"}.pi-circle-on:before{content:"\e911"}.pi-circle-off:before{content:"\e912"}.pi-sort-down:before{content:"\e913"}.pi-sort-up:before{content:"\e914"}.pi-sort:before{content:"\e915"}.pi-step-backward:before{content:"\e916"}.pi-step-forward:before{content:"\e917"}.pi-th-large:before{content:"\e918"}.pi-arrow-down:before{content:"\e919"}.pi-arrow-left:before{content:"\e91a"}.pi-arrow-right:before{content:"\e91b"}.pi-arrow-up:before{content:"\e91c"}.pi-bars:before{content:"\e91d"}.pi-arrow-circle-down:before{content:"\e91e"}.pi-arrow-circle-left:before{content:"\e91f"}.pi-arrow-circle-right:before{content:"\e920"}.pi-arrow-circle-up:before{content:"\e921"}.pi-info:before{content:"\e923"}.pi-info-circle:before{content:"\e924"}.pi-home:before{content:"\e925"}.pi-spinner:before{content:"\e926"}.p-component,.p-component *{box-sizing:border-box}.p-hidden{display:none}.p-hidden-space{visibility:hidden}.p-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.p-hidden-accessible input,.p-hidden-accessible select{transform:scale(0)}.p-reset{margin:0;padding:0;border:0;outline:0;text-decoration:none;font-size:100%;list-style:none}.p-disabled,.p-disabled *{cursor:default!important;pointer-events:none}.p-component-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.p-overflow-hidden{overflow:hidden}.p-unselectable-text{-webkit-user-select:none;user-select:none}.p-scrollbar-measure{width:100px;height:100px;overflow:scroll;position:absolute;top:-9999px}@keyframes p-fadein{0%{opacity:0}to{opacity:1}}input[type=button],input[type=submit],input[type=reset],input[type=file]::-webkit-file-upload-button,button{border-radius:0}.p-link{text-align:left;background-color:transparent;margin:0;padding:0;border:0;cursor:pointer;-webkit-user-select:none;user-select:none}.p-link:disabled{cursor:default}.p-sr-only{border:0;clip:rect(1px,1px,1px,1px);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.p-connected-overlay{opacity:0;transform:scaleY(.8);transition:transform .12s cubic-bezier(0,0,.2,1),opacity .12s cubic-bezier(0,0,.2,1)}.p-connected-overlay-visible{opacity:1;transform:scaleY(1)}.p-connected-overlay-hidden{opacity:0;transform:scaleY(1);transition:opacity .1s linear}.p-toggleable-content.ng-animating{overflow:hidden}.p-badge{display:inline-block;border-radius:10px;text-align:center;padding:0 .5rem}.p-overlay-badge{position:relative}.p-overlay-badge .p-badge{position:absolute;top:0;right:0;transform:translate(50%,-50%);transform-origin:100% 0;margin:0}.p-badge-dot{width:.5rem;min-width:.5rem;height:.5rem;border-radius:50%;padding:0}.p-badge-no-gutter{padding:0;border-radius:50%}.p-button{margin:0;display:inline-flex;cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;vertical-align:bottom;text-align:center;overflow:hidden;position:relative}.p-button-label{flex:1 1 auto}.p-button-icon-right{order:1}.p-button:disabled{cursor:default}.p-button-icon-only{justify-content:center}.p-button-icon-only:after{content:"p";visibility:hidden;clip:rect(0 0 0 0);width:0}.p-button-vertical{flex-direction:column}.p-button-icon-bottom{order:2}.p-buttonset .p-button{margin:0}.p-buttonset .p-button:not(:last-child){border-right:0 none}.p-buttonset .p-button:not(:first-of-type):not(:last-of-type){border-radius:0}.p-buttonset .p-button:first-of-type{border-top-right-radius:0;border-bottom-right-radius:0}.p-buttonset .p-button:last-of-type{border-top-left-radius:0;border-bottom-left-radius:0}.p-buttonset .p-button:focus{position:relative;z-index:1}.p-checkbox{display:inline-flex;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:bottom;position:relative}.p-checkbox-disabled{cursor:default!important;pointer-events:none}.p-checkbox-box{display:flex;justify-content:center;align-items:center}p-checkbox{display:inline-flex;vertical-align:bottom;align-items:center}.p-checkbox-label{line-height:1}.p-colorpicker-panel .p-colorpicker-color{background:transparent url(color.png) no-repeat left top}.p-colorpicker-panel .p-colorpicker-hue{background:transparent url(hue.png) no-repeat left top}.p-inputtext{margin:0}.p-fluid .p-inputtext{width:100%}.p-inputgroup{display:flex;align-items:stretch;width:100%}.p-inputgroup-addon{display:flex;align-items:center;justify-content:center}.p-inputgroup .p-float-label{display:flex;align-items:stretch;width:100%}.p-inputgroup .p-inputtext,.p-fluid .p-inputgroup .p-inputtext,.p-inputgroup .p-inputwrapper,.p-inputgroup .p-inputwrapper>.p-component{flex:1 1 auto;width:1%}.p-float-label{display:block;position:relative}.p-float-label label{position:absolute;pointer-events:none;top:50%;margin-top:-.5rem;transition-property:all;transition-timing-function:ease;line-height:1}.p-float-label textarea~label{top:1rem}.p-float-label input:focus~label,.p-float-label input.p-filled~label,.p-float-label textarea:focus~label,.p-float-label textarea.p-filled~label,.p-float-label .p-inputwrapper-focus~label,.p-float-label .p-inputwrapper-filled~label{top:-.75rem;font-size:12px}.p-float-label .input:-webkit-autofill~label{top:-20px;font-size:12px}.p-float-label .p-placeholder,.p-float-label input::placeholder,.p-float-label .p-inputtext::placeholder{opacity:0;transition-property:all;transition-timing-function:ease}.p-float-label .p-focus .p-placeholder,.p-float-label input:focus::placeholder,.p-float-label .p-inputtext:focus::placeholder{opacity:1;transition-property:all;transition-timing-function:ease}.p-input-icon-left,.p-input-icon-right{position:relative;display:inline-block}.p-input-icon-left>i,.p-input-icon-right>i{position:absolute;top:50%;margin-top:-.5rem}.p-fluid .p-input-icon-left,.p-fluid .p-input-icon-right{display:block;width:100%}.p-inputtextarea-resizable{overflow:hidden;resize:none}.p-fluid .p-inputtextarea{width:100%}.p-password{position:relative;display:inline-flex}.p-password-panel{position:absolute;top:0;left:0}.p-password .p-password-panel{min-width:100%}.p-password-meter{height:10px}.p-password-strength{height:100%;width:0;transition:width 1s ease-in-out}.p-fluid .p-password{display:flex}.p-password-input::-ms-reveal,.p-password-input::-ms-clear{display:none}.p-password-clear-icon{position:absolute;top:50%;margin-top:-.5rem;cursor:pointer}.p-password-clearable{position:relative}.p-radiobutton{display:inline-flex;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:bottom;position:relative}.p-radiobutton-box{display:flex;justify-content:center;align-items:center}.p-radiobutton-icon{-webkit-backface-visibility:hidden;backface-visibility:hidden;transform:translateZ(0) scale(.1);border-radius:50%;visibility:hidden}.p-radiobutton-box.p-highlight .p-radiobutton-icon{transform:translateZ(0) scale(1);visibility:visible}p-radiobutton{display:inline-flex;vertical-align:bottom;align-items:center}.p-radiobutton-label{line-height:1}.p-ripple{overflow:hidden;position:relative}.p-ink{display:block;position:absolute;background:rgba(255,255,255,.5);border-radius:100%;transform:scale(0)}.p-ink-active{animation:ripple .4s linear}.p-ripple-disabled .p-ink{display:none!important}@keyframes ripple{to{opacity:0;transform:scale(2.5)}}.p-tooltip{position:absolute;display:none;padding:.25em .5rem;max-width:12.5rem}.p-tooltip.p-tooltip-right,.p-tooltip.p-tooltip-left{padding:0 .25rem}.p-tooltip.p-tooltip-top,.p-tooltip.p-tooltip-bottom{padding:.25em 0}.p-tooltip .p-tooltip-text{white-space:pre-line;word-break:break-word}.p-tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.p-tooltip-right .p-tooltip-arrow{top:50%;left:0;margin-top:-.25rem;border-width:.25em .25em .25em 0}.p-tooltip-left .p-tooltip-arrow{top:50%;right:0;margin-top:-.25rem;border-width:.25em 0 .25em .25rem}.p-tooltip.p-tooltip-top{padding:.25em 0}.p-tooltip-top .p-tooltip-arrow{bottom:0;left:50%;margin-left:-.25rem;border-width:.25em .25em 0}.p-tooltip-bottom .p-tooltip-arrow{top:0;left:50%;margin-left:-.25rem;border-width:0 .25em .25rem}.p-component{font-family:Assistant,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;font-size:1rem;font-weight:400;line-height:normal}.p-component-overlay{background-color:#fff;transition-duration:.2s}.p-disabled,.p-component:disabled{opacity:1}.p-text-secondary{color:#14151a}.p-link{border-radius:.125rem}.p-link:focus{outline:0 none;outline-offset:0;box-shadow:none}.p-fluid .p-inputgroup .p-button{width:auto}.p-fluid .p-inputgroup .p-button.p-button-icon-only{width:2.5rem}.p-field>label{font-size:.813rem}.formgroup-inline .field-checkbox{margin-bottom:0}.p-label-input-required:after{content:"*";color:red;margin-left:2px;vertical-align:middle}.pi{aspect-ratio:1/1;line-height:1;justify-content:center;align-items:center;display:flex;font-size:16px;width:20px}[class$=-sm] .pi{width:16px;font-size:14px}[class$=-lg] .pi{width:24px;font-size:18px}#large{height:3rem;border-radius:.5rem;font-size:1.25rem}#large .p-button-label{font-size:inherit}#large .p-button-icon,#large .pi{font-size:18px}#small{border-radius:.25rem;font-size:.813rem;gap:.25rem;height:2rem;padding:0 .5rem}#small .p-button-label{font-size:inherit}#main-primary-severity{background-color:var(--color-palette-primary-500)}#main-primary-severity:hover{background-color:var(--color-palette-primary-600)}#main-primary-severity:active{background-color:var(--color-palette-primary-700)}#main-primary-severity:focus{background-color:var(--color-palette-primary-500);outline:2.8px solid var(--color-palette-primary-op-20)}#outlined-primary-severity{background-color:transparent;border:1.5px solid var(--color-palette-primary-500)}#outlined-primary-severity .p-button-label,#outlined-primary-severity .p-button-icon,#outlined-primary-severity .pi{color:var(--color-palette-primary-500)}#outlined-primary-severity:hover{background-color:var(--color-palette-primary-op-10)}#outlined-primary-severity:active{background-color:var(--color-palette-primary-op-20)}#outlined-primary-severity:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}#outlined-primary-severity-sm{border:1px solid var(--color-palette-primary-500)}#outlined-secondary-severity{background-color:transparent;border:1.5px solid var(--color-palette-secondary-500)}#outlined-secondary-severity .p-button-label,#outlined-secondary-severity .p-button-icon,#outlined-secondary-severity .pi{color:var(--color-palette-secondary-500)}#outlined-secondary-severity:hover{background-color:var(--color-palette-secondary-op-10)}#outlined-secondary-severity:active{background-color:var(--color-palette-secondary-op-20)}#outlined-secondary-severity:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}#outlined-secondary-severity-sm{border:1px solid var(--color-palette-secondary-500)}#text-primary-severity{background-color:transparent;color:#14151a;overflow:hidden;max-width:100%}#text-primary-severity .p-button-label{color:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#text-primary-severity .p-button-icon,#text-primary-severity .pi{color:var(--color-palette-primary-500)}#text-primary-severity:hover{background-color:var(--color-palette-primary-op-10)}#text-primary-severity:active{background-color:var(--color-palette-primary-op-20)}#text-primary-severity:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}#text-secondary-severity{background-color:transparent;color:#14151a}#text-secondary-severity.p-button-semi-transparent{background-color:#ffffffa6}#text-secondary-severity .p-button-label{color:inherit}#text-secondary-severity .p-button-icon,#text-secondary-severity .pi{color:var(--color-palette-secondary-500)}#text-secondary-severity.p-button-icon-only .p-button-icon,#text-secondary-severity.p-button-icon-only .pi{color:#14151a}#text-secondary-severity:hover{background-color:var(--color-palette-secondary-op-10)}#text-secondary-severity:active{background-color:var(--color-palette-secondary-op-20)}#text-secondary-severity:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}#text-danger-severity{background-color:transparent;color:#d82b2e}#text-danger-severity:hover{background-color:#d82b2e1a}#text-danger-severity:active{background-color:#d82b2e33}#text-danger-severity:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}#text-danger-severity .p-button-icon,#text-danger-severity .pi{color:inherit}#button-disabled{background-color:#f3f3f4;color:#afb3c0}#button-disabled .p-button-label,#button-disabled .p-button-icon,#button-disabled .pi{color:inherit}#button-disabled-outlined{border:1.5px solid #ebecef}#button-disabled-text{border:none;background-color:transparent}#large,.p-button:not(.p-button-icon-only).p-button-lg,.p-button-lg .p-button:not(.p-button-icon-only){height:3rem;border-radius:.5rem;font-size:1.25rem}#large .p-button-label,.p-button:not(.p-button-icon-only).p-button-lg .p-button-label,.p-button-lg .p-button:not(.p-button-icon-only) .p-button-label{font-size:inherit}#large .p-button-icon,.p-button:not(.p-button-icon-only).p-button-lg .p-button-icon,.p-button-lg .p-button:not(.p-button-icon-only) .p-button-icon,#large .pi,.p-button:not(.p-button-icon-only).p-button-lg .pi,.p-button-lg .p-button:not(.p-button-icon-only) .pi{font-size:18px}#small,.p-button:not(.p-button-icon-only).p-button-sm,.p-button-sm .p-button:not(.p-button-icon-only){border-radius:.25rem;font-size:.813rem;gap:.25rem;height:2rem;padding:0 .5rem}#small .p-button-label,.p-button:not(.p-button-icon-only).p-button-sm .p-button-label,.p-button-sm .p-button:not(.p-button-icon-only) .p-button-label{font-size:inherit}#main-primary-severity,.p-button:enabled,.p-button.p-fileupload-choose{background-color:var(--color-palette-primary-500)}#main-primary-severity:hover,.p-button:hover:enabled,.p-button.p-fileupload-choose:hover{background-color:var(--color-palette-primary-600)}#main-primary-severity:active,.p-button:active:enabled,.p-button.p-fileupload-choose:active{background-color:var(--color-palette-primary-700)}#main-primary-severity:focus,.p-button:focus:enabled,.p-button.p-fileupload-choose:focus{background-color:var(--color-palette-primary-500);outline:2.8px solid var(--color-palette-primary-op-20)}#main-secondary-severity{background-color:var(--color-palette-secondary-500)}#main-secondary-severity:hover{background-color:var(--color-palette-secondary-600)}#main-secondary-severity:active{background-color:var(--color-palette-secondary-700)}#main-secondary-severity:focus{background-color:var(--color-palette-secondary-500);outline:2.8px solid var(--color-palette-primary-op-20)}#outlined-primary-severity,.p-button.p-button-outlined:enabled,.p-button.p-button-outlined:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton){background-color:transparent;border:1.5px solid var(--color-palette-primary-500)}#outlined-primary-severity .p-button-label,.p-button.p-button-outlined:enabled .p-button-label,.p-button.p-button-outlined:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton) .p-button-label,#outlined-primary-severity .p-button-icon,.p-button.p-button-outlined:enabled .p-button-icon,.p-button.p-button-outlined:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton) .p-button-icon,#outlined-primary-severity .pi,.p-button.p-button-outlined:enabled .pi,.p-button.p-button-outlined:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton) .pi{color:var(--color-palette-primary-500)}#outlined-primary-severity:hover,.p-button.p-button-outlined:hover:enabled,.p-button.p-button-outlined:hover:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton){background-color:var(--color-palette-primary-op-10)}#outlined-primary-severity:active,.p-button.p-button-outlined:active:enabled,.p-button.p-button-outlined:active:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton){background-color:var(--color-palette-primary-op-20)}#outlined-primary-severity:focus,.p-button.p-button-outlined:focus:enabled,.p-button.p-button-outlined:focus:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton){background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}#outlined-primary-severity-sm,.p-button.p-button-outlined:enabled.p-button-sm,.p-button.p-button-outlined:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-sm{border:1px solid var(--color-palette-primary-500)}#outlined-secondary-severity,.p-button.p-button-outlined:enabled.p-button-secondary,.p-button.p-button-outlined:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-secondary,.p-button:enabled.p-button-link.p-button-secondary,.p-button.p-fileupload-choose.p-button-link.p-button-secondary{background-color:transparent;border:1.5px solid var(--color-palette-secondary-500)}#outlined-secondary-severity .p-button-label,.p-button.p-button-outlined:enabled.p-button-secondary .p-button-label,.p-button.p-button-outlined:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-secondary .p-button-label,.p-button:enabled.p-button-link.p-button-secondary .p-button-label,.p-button.p-fileupload-choose.p-button-link.p-button-secondary .p-button-label,#outlined-secondary-severity .p-button-icon,.p-button.p-button-outlined:enabled.p-button-secondary .p-button-icon,.p-button.p-button-outlined:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-secondary .p-button-icon,.p-button:enabled.p-button-link.p-button-secondary .p-button-icon,.p-button.p-fileupload-choose.p-button-link.p-button-secondary .p-button-icon,#outlined-secondary-severity .pi,.p-button.p-button-outlined:enabled.p-button-secondary .pi,.p-button.p-button-outlined:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-secondary .pi,.p-button:enabled.p-button-link.p-button-secondary .pi,.p-button.p-fileupload-choose.p-button-link.p-button-secondary .pi{color:var(--color-palette-secondary-500)}#outlined-secondary-severity:hover,.p-button.p-button-outlined.p-button-secondary:hover:enabled,.p-button.p-button-outlined.p-button-secondary:hover:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),.p-button.p-button-link.p-button-secondary:hover:enabled,.p-button.p-fileupload-choose.p-button-link.p-button-secondary:hover{background-color:var(--color-palette-secondary-op-10)}#outlined-secondary-severity:active,.p-button.p-button-outlined.p-button-secondary:active:enabled,.p-button.p-button-outlined.p-button-secondary:active:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),.p-button.p-button-link.p-button-secondary:active:enabled,.p-button.p-fileupload-choose.p-button-link.p-button-secondary:active{background-color:var(--color-palette-secondary-op-20)}#outlined-secondary-severity:focus,.p-button.p-button-outlined.p-button-secondary:focus:enabled,.p-button.p-button-outlined.p-button-secondary:focus:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),.p-button.p-button-link.p-button-secondary:focus:enabled,.p-button.p-fileupload-choose.p-button-link.p-button-secondary:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}#outlined-secondary-severity-sm,.p-button.p-button-outlined:enabled.p-button-secondary.p-button-sm,.p-button.p-button-outlined:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-secondary.p-button-sm{border:1px solid var(--color-palette-secondary-500)}#text-primary-severity,.p-button-text:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),a.p-button.p-button-text{background-color:transparent;color:#14151a;overflow:hidden;max-width:100%}#text-primary-severity .p-button-label,.p-button-text:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton) .p-button-label,a.p-button.p-button-text .p-button-label{color:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#text-primary-severity .p-button-icon,.p-button-text:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton) .p-button-icon,a.p-button.p-button-text .p-button-icon,#text-primary-severity .pi,.p-button-text:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton) .pi,a.p-button.p-button-text .pi{color:var(--color-palette-primary-500)}#text-primary-severity:hover,.p-button-text:hover:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),a.p-button.p-button-text:hover{background-color:var(--color-palette-primary-op-10)}#text-primary-severity:active,.p-button-text:active:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),a.p-button.p-button-text:active{background-color:var(--color-palette-primary-op-20)}#text-primary-severity:focus,.p-button-text:focus:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),a.p-button.p-button-text:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}#text-secondary-severity,.p-button-text:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-secondary,a.p-button.p-button-text.p-button-secondary{background-color:transparent;color:#14151a}#text-secondary-severity.p-button-semi-transparent,.p-button-semi-transparent.p-button-text.p-button-secondary:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),a.p-button-semi-transparent.p-button.p-button-text.p-button-secondary{background-color:#ffffffa6}#text-secondary-severity .p-button-label,.p-button-text:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-secondary .p-button-label,a.p-button.p-button-text.p-button-secondary .p-button-label{color:inherit}#text-secondary-severity .p-button-icon,.p-button-text:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-secondary .p-button-icon,a.p-button.p-button-text.p-button-secondary .p-button-icon,#text-secondary-severity .pi,.p-button-text:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-secondary .pi,a.p-button.p-button-text.p-button-secondary .pi{color:var(--color-palette-secondary-500)}#text-secondary-severity.p-button-icon-only .p-button-icon,.p-button-icon-only.p-button-text.p-button-secondary:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton) .p-button-icon,a.p-button-icon-only.p-button.p-button-text.p-button-secondary .p-button-icon,#text-secondary-severity.p-button-icon-only .pi,.p-button-icon-only.p-button-text.p-button-secondary:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton) .pi,a.p-button-icon-only.p-button.p-button-text.p-button-secondary .pi{color:#14151a}#text-secondary-severity:hover,.p-button-text.p-button-secondary:hover:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),a.p-button.p-button-text.p-button-secondary:hover{background-color:var(--color-palette-secondary-op-10)}#text-secondary-severity:active,.p-button-text.p-button-secondary:active:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),a.p-button.p-button-text.p-button-secondary:active{background-color:var(--color-palette-secondary-op-20)}#text-secondary-severity:focus,.p-button-text.p-button-secondary:focus:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),a.p-button.p-button-text.p-button-secondary:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}#text-danger-severity,.p-button-text:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-danger,a.p-button.p-button-text.p-button-danger{background-color:transparent;color:#d82b2e}#text-danger-severity:hover,.p-button-text.p-button-danger:hover:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),a.p-button.p-button-text.p-button-danger:hover{background-color:#d82b2e1a}#text-danger-severity:active,.p-button-text.p-button-danger:active:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),a.p-button.p-button-text.p-button-danger:active{background-color:#d82b2e33}#text-danger-severity:focus,.p-button-text.p-button-danger:focus:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton),a.p-button.p-button-text.p-button-danger:focus{background-color:transparent;outline:2.8px solid var(--color-palette-primary-op-20)}#text-danger-severity .p-button-icon,.p-button-text:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-danger .p-button-icon,a.p-button.p-button-text.p-button-danger .p-button-icon,#text-danger-severity .pi,.p-button-text:enabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-danger .pi,a.p-button.p-button-text.p-button-danger .pi{color:inherit}#button-disabled,.p-button:disabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton){background-color:#f3f3f4;color:#afb3c0}#button-disabled .p-button-label,.p-button:disabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton) .p-button-label,#button-disabled .p-button-icon,.p-button:disabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton) .p-button-icon,#button-disabled .pi,.p-button:disabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton) .pi{color:inherit}#button-disabled-outlined,.p-button:disabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-outlined{border:1.5px solid #ebecef}#button-disabled-text,.p-button:disabled:not(.p-splitbutton-defaultbutton,.p-splitbutton-menubutton).p-button-text{border:none;background-color:transparent}.p-button{border:none;color:#fff;border-radius:.375rem}.p-button .p-button-label{color:inherit;font-size:inherit;text-transform:capitalize}.p-button .p-button-icon,.p-button .pi{color:inherit}.p-button:not(.p-button-icon-only){font-size:1rem;gap:.5rem;height:2.5rem;padding:0 1rem;text-transform:capitalize}.p-button:enabled.p-button-link,.p-button.p-fileupload-choose.p-button-link{color:var(--color-palette-primary-500);background:transparent;border:transparent}.p-button:enabled.p-button-link.p-button-secondary,.p-button.p-fileupload-choose.p-button-link.p-button-secondary{border:transparent}.p-button-icon-only:not(.p-splitbutton-menubutton){height:2.5rem;width:2.5rem;min-width:2.5rem;border:none}.p-button-icon-only:not(.p-splitbutton-menubutton).p-button-sm{height:2rem;width:2rem;min-width:2rem}.p-button.p-button-vertical{height:100%;gap:.25rem;margin-bottom:0;padding:.5rem}.p-button-rounded{border-radius:50%}.p-dialog{border-radius:.375rem;box-shadow:0 11px 15px -7px var(--color-palette-black-op-20),0 24px 38px 3px var(--color-palette-black-op-10),0 9px 46px 8px var(--color-palette-black-op-10);border:0 none;overflow:auto}.p-dialog .p-dialog-header{border-bottom:0 none;background:#ffffff;color:#14151a;padding:2.5rem;border-top-right-radius:.375rem;border-top-left-radius:.375rem}.p-dialog .p-dialog-header .p-dialog-title{font-size:1.5rem}.p-dialog .p-dialog-header .p-dialog-header-icon{width:2rem;height:2rem;color:#14151a;border:0 none;background:transparent;border-radius:50%;transition:background-color .2s,color .2s,box-shadow .2s;margin-right:.5rem}.p-dialog .p-dialog-header .p-dialog-header-icon:enabled:hover{color:#14151a;border-color:transparent;background:var(--color-palette-primary-100)}.p-dialog .p-dialog-header .p-dialog-header-icon:focus{outline:0 none;outline-offset:0;box-shadow:0 0 0 4px var(--color-palette-secondary-op-20)}.p-dialog .p-dialog-header .p-dialog-header-icon:last-child{margin-right:0}.p-dialog .p-dialog-content{background:#ffffff;color:#14151a;padding:0 2.5rem 2.5rem}.p-dialog .p-dialog-footer{border-top:0 none;background:#ffffff;color:#14151a;padding:1.5rem;text-align:right;border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.p-dialog .p-dialog-footer button{margin:0 .5rem 0 0;width:auto}.p-dialog.p-confirm-dialog .p-confirm-dialog-icon{font-size:1.75rem;padding-right:.5rem;color:var(--color-palette-primary-500)}.p-dialog.p-confirm-dialog .p-confirm-dialog-message{line-height:1.5em}.p-dialog-mask.p-component-overlay{background-color:var(--color-palette-black-op-80);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.p-dialog-header .p-dialog-header-icons .p-dialog-header-close{background-color:#f3f3f4;color:var(--color-palette-primary-500);border-radius:0}.p-dialog-mask.p-dialog-mask-transparent.p-component-overlay{background-color:transparent;-webkit-backdrop-filter:blur(.375rem);backdrop-filter:blur(.375rem)}#form-field-base,#form-field-extend,.p-inputtext:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input){background-color:#fff;height:2.5rem;border-radius:.375rem;border:1.5px solid #d1d4db;padding:0 .5rem;color:#6c7389;font-size:1rem}#form-field-base.p-filled,.p-filled#form-field-extend,.p-filled.p-inputtext:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input){color:#14151a}#form-field-sm,.p-inputtext:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input).p-inputtext-sm{height:2rem;font-size:.813rem;border-radius:.25rem}#form-field-hover,#form-field-states:enabled:hover,#form-field-extend:enabled:hover,.p-inputtext:enabled:hover:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input),#form-field-states:hover,#form-field-extend:hover,.p-inputtext:hover:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input){border-color:var(--color-palette-primary-400)}#form-field-focus,#form-field-states:enabled:active,#form-field-extend:enabled:active,.p-inputtext:enabled:active:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input),#form-field-states:enabled:focus,#form-field-extend:enabled:focus,.p-inputtext:enabled:focus:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input),#form-field-states:active,#form-field-extend:active,.p-inputtext:active:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input),#form-field-states:focus,#form-field-extend:focus,.p-inputtext:focus:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input){border-color:var(--color-palette-primary-400);outline:2.8px solid var(--color-palette-primary-op-20)}#form-field-disabled,#field-panel-item-disabled,#form-field-states:disabled,#form-field-extend:disabled,.p-inputtext:disabled:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input){border-color:#f3f3f4;background:#fafafb;color:#afb3c0}#field-trigger{background:#f3f3f4;color:var(--color-palette-primary-500);width:2.5rem;border-top-right-radius:.375rem;border-bottom-right-radius:.375rem;height:100%}#field-trigger-sm{width:2rem;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}#field-trigger-icon{padding:.5rem;font-size:14px}#field-panel{background:#ffffff;color:#14151a;border:0 none;border-radius:.375rem;box-shadow:0 0 4px #14151a0a,0 8px 16px #14151a14;padding:.5rem;margin-top:.5rem}#field-panel-header{padding:.75rem;border-bottom:1.5px solid var(--color-palette-black-op-10);color:#14151a;background:#ffffff;margin:0;border-top-right-radius:.125rem;border-top-left-radius:.125rem}#field-panel-filter{padding-right:3rem;color:#14151a}#field-panel-filter-icon{right:.75rem;color:var(--color-palette-primary-500)}#field-panel-items{padding:0}#field-panel-item{display:flex;align-items:center;padding:0 .75rem;color:#14151a;height:2.5rem;gap:.5rem}#field-panel-item-highlight{background:var(--color-palette-primary-200)}#field-panel-item-hover{background:var(--color-palette-primary-100)}#field-panel-item-disabled{cursor:initial}#field-chip{height:1.5rem;padding:.5rem;background:var(--color-palette-primary-200);border-radius:.25rem;color:var(--color-palette-primary-500);font-size:.813rem;display:flex;align-items:center;justify-content:center;gap:.25rem}.p-inputtext:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input).p-inputtextarea{padding:.5rem;min-height:4rem}.p-inputtext:not(.p-dropdown-label,.p-autocomplete-multiple-container,.p-autocomplete-input):disabled::placeholder{color:#afb3c0}.p-input-icon-right i.pi{color:var(--color-palette-primary-500);cursor:pointer;right:.5rem;margin-top:0;transform:translateY(-50%);-moz-transform:translateY(-50%)}.p-input-icon-right:has(.p-inputtext.p-inputtext-sm) i{font-size:.813rem}.p-input-icon-right i.pi:nth-of-type(1){right:.5rem}.p-input-icon-right i.pi:nth-of-type(2){right:2rem}.p-input-icon-right .p-inputtext{padding-right:2.5rem}.p-error,.p-invalid{color:#f65446}p-inputmask.ng-dirty.ng-invalid>.p-inputtext{border-color:#f65446}p-inputnumber.ng-dirty.ng-invalid>.p-inputnumber>.p-inputtext{border-color:#f65446}.p-inputswitch.p-error,.p-inputswitch.p-invalid{border-color:#f65446}p-inputswitch.ng-dirty.ng-invalid>.p-inputswitch{border-color:#f65446}.p-inputtext.p-error,.p-inputtext.p-invalid,.p-inputtext.ng-dirty.ng-invalid{border-color:#f65446}.p-inputtext.p-error:hover,.p-inputtext.p-error:active,.p-inputtext.p-error:focus,.p-inputtext.p-invalid:hover,.p-inputtext.p-invalid:active,.p-inputtext.p-invalid:focus,.p-inputtext.ng-dirty.ng-invalid:hover,.p-inputtext.ng-dirty.ng-invalid:active,.p-inputtext.ng-dirty.ng-invalid:focus{border-color:#f65446}p-listbox.ng-dirty.ng-invalid>.p-listbox{border-color:#f65446}.p-listbox.p-error,.p-listbox.p-invalid{border-color:#f65446}p-multiselect.ng-dirty.ng-invalid>.p-multiselect{border-color:#f65446}p-multiselect.ng-dirty.ng-invalid>.p-multiselect:hover,p-multiselect.ng-dirty.ng-invalid>.p-multiselect:active,p-multiselect.ng-dirty.ng-invalid>.p-multiselect:focus{border-color:#f65446}.p-radiobutton.p-error>.p-radiobutton-box,.p-radiobutton.p-invalid>.p-radiobutton-box{border-color:#f65446}p-radiobutton.ng-dirty.ng-invalid>.p-radiobutton>.p-radiobutton-box{border-color:#f65446}.p-selectbutton.p-error>.p-button,.p-selectbutton.p-invalid>.p-button{border-color:#f65446}p-selectbutton.ng-dirty.ng-invalid>.p-selectbutton>.p-button{border-color:#f65446}.p-togglebutton.p-button.p-error,.p-togglebutton.p-button.p-invalid{border-color:#f65446}p-togglebutton.ng-dirty.ng-invalid>.p-togglebutton.p-button{border-color:#f65446}.p-multiselect.p-error,.p-multiselect.p-invalid{border-color:#f65446}.p-multiselect.p-error:hover,.p-multiselect.p-error:active,.p-multiselect.p-error:focus,.p-multiselect.p-invalid:hover,.p-multiselect.p-invalid:active,.p-multiselect.p-invalid:focus{border-color:#f65446}.p-rating .p-rating-icon.p-rating-cancel{color:#f65446}.p-rating:not(.p-disabled):not(.p-readonly) .p-rating-icon.p-rating-cancel:hover{color:#f65446}.p-inputtextarea.ng-invalid:not(.ng-pristine){border-color:#f65446}.p-inputtextarea.ng-invalid:not(.ng-pristine):hover,.p-inputtextarea.ng-invalid:not(.ng-pristine):active,.p-inputtextarea.ng-invalid:not(.ng-pristine):focus{border-color:#f65446}@font-face{font-family:primeicons;font-display:block;font-weight:400;font-style:normal;src:url(data:application/font-woff;base64,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) format("woff")} diff --git a/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/view_steps_filtered.jsp b/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/view_steps_filtered.jsp index 5dca5f37f307..e55625289c38 100644 --- a/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/view_steps_filtered.jsp +++ b/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/view_steps_filtered.jsp @@ -92,7 +92,7 @@ %>
-
""> +
"">
onClick="actionAdmin.viewAction('<%=scheme.getId()%>', '<%=action.getId() %>');" <% } %>> <%=action.getName() %> ‣ <%=(WorkflowAction.CURRENT_STEP.equals(action.getNextStep())) ? WorkflowAction.CURRENT_STEP : wapi.findStep(action.getNextStep()).getName() %> diff --git a/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/workflow.css b/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/workflow.css index 91aa5d33a508..c4bfbe8a4564 100644 --- a/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/workflow.css +++ b/dotCMS/src/main/webapp/html/portlet/ext/workflows/schemes/workflow.css @@ -118,6 +118,10 @@ ol.wfStepsList li{padding:8px 16px;margin:0 10px; list-style:decimal; list-styl cursor: pointer; } +.showDefaultCursor{ + cursor: default; +} + .showPointer h2 { max-width: 220px; white-space: nowrap; From 5bc7a942e25a5947dc45608b1aab7cdbdff2c2b0 Mon Sep 17 00:00:00 2001 From: Jose Castro Date: Tue, 12 Dec 2023 12:19:42 -0600 Subject: [PATCH 16/16] Avoid displaying the `Separator` action in the LISTING rendering mode. Including the `metadata` attribute in the REST Endpoint. --- .../api/v1/workflow/WorkflowResource.java | 50 ++++++++++++------- .../workflow/form/WorkflowActionForm.java | 41 +++++++++------ 2 files changed, 58 insertions(+), 33 deletions(-) diff --git a/dotCMS/src/main/java/com/dotcms/rest/api/v1/workflow/WorkflowResource.java b/dotCMS/src/main/java/com/dotcms/rest/api/v1/workflow/WorkflowResource.java index 09fa768a1a20..bc69198992d4 100644 --- a/dotCMS/src/main/java/com/dotcms/rest/api/v1/workflow/WorkflowResource.java +++ b/dotCMS/src/main/java/com/dotcms/rest/api/v1/workflow/WorkflowResource.java @@ -10,6 +10,7 @@ import com.dotcms.contenttype.model.field.Field; import com.dotcms.contenttype.model.type.ContentType; import com.dotcms.contenttype.transform.field.LegacyFieldTransformer; +import com.dotcms.exception.ExceptionUtil; import com.dotcms.mock.response.MockHttpResponse; import com.dotcms.repackage.com.google.common.annotations.VisibleForTesting; import com.dotcms.repackage.javax.validation.constraints.NotNull; @@ -418,15 +419,20 @@ public final Response findStepsByScheme(@Context final HttpServletRequest reques } // findSteps. /** - * Finds the available actions for an inode + * Finds the Workflow Actions that are available for a specific Contentlet Inode. Here's an + * example of how you can use this method: + *
+     *     GET http://localhost:8080/api/v1/workflow/contentlet/{CONTENTLET-INODE}/actions?renderMode={editing|listing}
+     * 
* - * @param request HttpServletRequest - * @param inode String - * @param renderMode String, this is an uncase sensitive query string (?renderMode=) optional parameter. - * By default the findAvailableAction will run on WorkflowAPI.RenderMode.EDITING, if you want to run for instance on WorkflowAPI.RenderMode.LISTING - * you can send the renderMode parameter as ?renderMode=listing - * This will be used to filter the action based on the show on configuration for each action. - * @return Response + * @param request The current instance of the {@link HttpServletRequest}. + * @param inode The Inode of the Contentlet. + * @param renderMode This is a case-insensitive optional parameter. By default, this method will + * run EDITING rendering mode. The available modes are specified via the + * {{@link #validRenderModeSet}} variable. + * + * @return Response A {@link Response} object that contains the available actions for the + * specified Contentlet. */ @GET @Path("/contentlet/{inode}/actions") @@ -446,13 +452,15 @@ public final Response findAvailableActions(@Context final HttpServletRequest req this.workflowHelper.checkRenderMode (renderMode, initDataObject.getUser(), this.validRenderModeSet); final List actions = this.workflowHelper.findAvailableActions(inode, initDataObject.getUser(), - LISTING.equalsIgnoreCase(renderMode)?WorkflowAPI.RenderMode.LISTING:WorkflowAPI.RenderMode.EDITING); + LISTING.equalsIgnoreCase(renderMode) + ? WorkflowAPI.RenderMode.LISTING + : WorkflowAPI.RenderMode.EDITING); return Response.ok(new ResponseEntityView<>(actions.stream() - .map(this::toWorkflowActionView).collect(Collectors.toList()))).build(); // 200 - } catch (Exception e) { - Logger.error(this.getClass(), - "Exception on findAvailableActions, contentlet inode: " + inode + - ", exception message: " + e.getMessage(), e); + .map(this::toWorkflowActionView).collect(Collectors.toList()))).build(); + } catch (final Exception e) { + Logger.error(this.getClass(), String.format("An error occurred when finding available" + + " Workflow Actions for Contentlet Inode '%s' in mode '%s': %s", inode, renderMode, + ExceptionUtil.getErrorMessage(e)), e); return ResponseUtil.mapExceptionResponse(e); } } // findAvailableActions. @@ -462,10 +470,18 @@ private WorkflowActionView toWorkflowActionView(final WorkflowAction workflowAct return convertToWorkflowActionView(workflowAction); } + /** + * Takes the information from a Workflow Action and transforms it into a View object that can + * display it in JSON notation appropriately. Keep in mind that any new property you add to the + * Workflow Action class will need to be added here as well. + * + * @param workflowAction The {@link WorkflowAction} that will be transformed. + * + * @return The {@link WorkflowActionView} that contains the information from the Workflow + * Action. + */ public static WorkflowActionView convertToWorkflowActionView(final WorkflowAction workflowAction) { - final WorkflowActionView workflowActionView = new WorkflowActionView(); - workflowActionView.setId(workflowAction.getId()); workflowActionView.setName(workflowAction.getName()); workflowActionView.setStepId(workflowAction.getSchemeId()); @@ -489,7 +505,7 @@ public static WorkflowActionView convertToWorkflowActionView(final WorkflowActio workflowActionView.setDestroyActionlet(workflowAction.hasDestroyActionlet()); workflowActionView.setShowOn(workflowAction.getShowOn()); workflowActionView.setActionInputs(createActionInputViews(workflowAction)); - + workflowActionView.setMetadata(workflowAction.getMetadata()); return workflowActionView; } diff --git a/dotCMS/src/main/java/com/dotcms/workflow/form/WorkflowActionForm.java b/dotCMS/src/main/java/com/dotcms/workflow/form/WorkflowActionForm.java index b570edc5eb02..defb0167e2e5 100644 --- a/dotCMS/src/main/java/com/dotcms/workflow/form/WorkflowActionForm.java +++ b/dotCMS/src/main/java/com/dotcms/workflow/form/WorkflowActionForm.java @@ -55,7 +55,8 @@ public class WorkflowActionForm extends Validated { private final String actionNextStep; private final String actionNextAssign; private final String actionCondition; - private Map metadata; + private static final String METADATA_SUBTYPE_ATTR = "subtype"; + private final Map metadata; public String getStepId() { return stepId; @@ -164,7 +165,7 @@ public WorkflowActionForm(final Builder builder) { this.checkValid(); } - public static final class Builder { + public static final class Builder { @JsonProperty() private String actionId; @@ -279,22 +280,30 @@ public Builder actionCondition(String actionCondition) { return this; } + /** + * Sets the metadata for this Workflow Action. This is a Map of key/value pairs that may + * include different custom properties that define the behavior of an action. + * + * @param metadata Different custom properties for this action. + * + * @return The current {@link Builder} instance. + */ public Builder metadata(final Map metadata) { this.metadata = metadata; return this; } - /** - * Marks this Workflow Action as a Separator. This is a special type of action that does - * not execute any sub-actions at all, as it simply groups X number of actions together - * in the UI. The result of this may be seen as the differentiation between Primary and - * Secondary Actions. - * - * @param schemeId The ID of the Workflow Scheme that this action belongs to. - * @param stepId The ID of the Workflow Step that this action belongs to. - * - * @return The current {@link Builder} instance. - */ + /** + * Marks this Workflow Action as a Separator. This is a special type of action that does + * not execute any sub-actions at all, as it simply groups X number of actions together + * in the UI. The result of this may be seen as the differentiation between Primary and + * Secondary Actions. + * + * @param schemeId The ID of the Workflow Scheme that this action belongs to. + * @param stepId The ID of the Workflow Step that this action belongs to. + * + * @return The current {@link Builder} instance. + */ public Builder separator(final String schemeId, final String stepId) { this.schemeId(schemeId); this.stepId(stepId); @@ -304,13 +313,13 @@ public Builder separator(final String schemeId, final String stepId) { this.actionRoleHierarchyForAssign(false); this.actionNextStep(WorkflowAction.CURRENT_STEP); this.actionNextAssign(Try.of(() -> APILocator.getRoleAPI().loadRoleByKey(Role.CMS_ANONYMOUS_ROLE).getId()) - .getOrElseThrow(e -> new DotRuntimeException("Anonymous Role ID not found", e))); + .getOrElseThrow(e -> new DotRuntimeException("Anonymous Role ID not found in the database", e))); this.actionCondition(WorkflowAction.SEPARATOR); - this.showOn(Arrays.stream(WorkflowState.values()).collect(java.util.stream.Collectors.toSet())); + this.showOn(Arrays.stream(WorkflowState.values()).filter(state -> state != WorkflowState.LISTING).collect(java.util.stream.Collectors.toSet())); if (null == this.metadata) { this.metadata = new HashMap<>(); } - this.metadata.put("subtype", WorkflowAction.SEPARATOR); + this.metadata.put(METADATA_SUBTYPE_ATTR, WorkflowAction.SEPARATOR); return this; }