/*
 * Copyright 2018-present Open Networking Foundation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.onosproject.workflow.api;

import java.util.Collection;

/**
 * Abstract class for workplace. A common workflow data container for multiple work-flows.
 */
public abstract class Workplace extends WorkflowData {

    public static final String SYSTEM_WORKPLACE = "system-workplace";

    /**
     * Constructor of workplace.
     * @param data data model tree
     */
    public Workplace(DataModelTree data) {
        super(data);
    }

    /**
     * Gets workflow contexts of workplace.
     * @return collection of workflow context
     * @throws WorkflowException workflow exception
     */
    abstract Collection<WorkflowContext> getContexts() throws WorkflowException;

}
