/*
* Copyright (c) NASK, NCSC
*
* This file is part of HoneySpider Network 2.1.
*
* This is a free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package pl.nask.hsn2.framework.workflow.policy;
import java.util.Set;
import java.util.concurrent.ConcurrentSkipListSet;
/**
* This is workflow policy manager.
*
* Currently only on/off policy is allowed. In future any other
* policy elements can be added to this manager.
*
* Manager can be accessed by many threads so KEEP IT thread-safe.
*
*
*/
public final class WorkflowPolicyManager {
/**
* Internal set of disabled workflows.
*/
private static Set<String> disabledWorkflows = new ConcurrentSkipListSet<String>();
/**
* This is utility class and cannot be instantiated.
*/
private WorkflowPolicyManager() {
// hidden constructor
}
/**
* Checks if workflow (identified by name) is enabled by policy.
*
* @param workflowName Name of the workflow.
* @return <code>true</code> is workflow is enabled by policy.
*/
public static boolean isEnabledByPolicy(String workflowName) {
return !disabledWorkflows.contains(workflowName);
}
/**
* Sets enable/disable policy for specified workflow.
*
* @param workflowName Name of the workflow.
* @param enable On/Off policy to be set.
* @return Previous policy flag for the workflow.
*/
public static boolean setEnablePolicy(String workflowName, boolean enable) {
boolean isEnabled = isEnabledByPolicy(workflowName);
if (!enable && isEnabled) {
disabledWorkflows.add(workflowName);
}
if (enable && !isEnabled) {
disabledWorkflows.remove(workflowName);
}
return isEnabled;
}
}