/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
*
* 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.dashbuilder.navigation;
import java.util.List;
/**
* A navigation item is a way to classify different assets, like for instance, perspectives. A tag can be referenced by other
* tags, either as a parent or as a child. The links between different tags creates a {@link NavTree} structure
* that can be used to provide navigation services across the different assets referenced by the tags in the tree.
*/
public interface NavItem {
enum Type {
ITEM,
GROUP,
DIVIDER;
}
/**
* A unique id within the same {@link NavTree}
*/
String getId();
/**
* Change the item's id
*/
void setId(String id);
/**
* The item's name
*/
String getName();
/**
* Change the item's name
*/
void setName(String name);
/**
* A brief description of the item (optional, if not provided the name is used instead)
*/
String getDescription();
/**
* Change the item's description
*/
void setDescription(String description);
/**
* The item's {@link Type}
*/
Type getType();
/**
* Get the parent of this item (if any)
*
* @return The item this one is a child of. Or null if this is a root item
*/
NavGroup getParent();
/**
* Change the item's parent
*/
void setParent(NavGroup parent);
/**
* Flag indicating if the item can be modified from a tree once added
*/
boolean isModifiable();
/**
* Change the item's modifiable flag
*/
void setModifiable(boolean modifiable);
/**
* An optional string that can be used to attach contextual information, like an external reference for instance.
*/
String getContext();
/**
* Change the item's context attribute
*/
void setContext(String ctx);
/**
* Entry point for visitor interfaces
*/
void accept(NavItemVisitor visitor);
/**
* Creates a brand new copy of this item
*/
NavItem cloneItem();
}