/*
 * 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.
 */
import {EventEmitter} from '@angular/core';
import {UiElement} from '../models';

/**
 * A base class for the Host and Device components
 */
export abstract class NodeVisual {
    selected: boolean;
    selectedEvent = new EventEmitter<UiElement>();

    toggleSelected(uiElement: UiElement) {
        this.selected = !this.selected;
        if (this.selected) {
            this.selectedEvent.emit(uiElement);
        } else {
            this.selectedEvent.emit();
        }
    }

    deselect() {
        this.selected = false;
    }
}
