| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | /* * EliasDB * * Copyright 2016 Matthias Ladkau. All rights reserved. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */package interpreterimport (	"sort"	"devt.de/krotik/common/stringutil"	"devt.de/krotik/eliasdb/graph"	"devt.de/krotik/eliasdb/graph/data")/*NodeInfo interface. NodeInfo objects are used by the EQL interpreter to formatsearch results.*/type NodeInfo interface {	/*		SummaryAttributes returns the attributes which should be shown		in a list view for a given node kind.	*/	SummaryAttributes(kind string) []string	/*	   Return the display string for a given attribute.	*/	AttributeDisplayString(kind string, attr string) string	/*		Check if a given string can be a valid node attribute.	*/	IsValidAttr(attr string) bool}/*defaultNodeInfo data structure*/type defaultNodeInfo struct {	gm *graph.Manager}/*NewDefaultNodeInfo creates a new default NodeInfo instance. The default NodeInfoprovides the most generic rendering information to the interpreter.*/func NewDefaultNodeInfo(gm *graph.Manager) NodeInfo {	return &defaultNodeInfo{gm}}/*SummaryAttributes returns the attributes which should be shownin a list view for a given node kind.*/func (ni *defaultNodeInfo) SummaryAttributes(kind string) []string {	if kind == "" {		return []string{data.NodeKey, data.NodeKind, data.NodeName}	}	attrs := ni.gm.NodeAttrs(kind)	ret := make([]string, 0, len(attrs))	for _, attr := range attrs {		if attr == data.NodeKey || attr == data.NodeKind {			continue		}		ret = append(ret, attr)	}	sort.StringSlice(ret).Sort()	// Prepend the key attribute	ret = append([]string{data.NodeKey}, ret...)	return ret}/*Return the display string for a given attribute.*/func (ni *defaultNodeInfo) AttributeDisplayString(kind string, attr string) string {	if (attr == data.NodeKey || attr == data.NodeKind || attr == data.NodeName) && kind != "" {		return stringutil.CreateDisplayString(kind) + " " +			stringutil.CreateDisplayString(attr)	}	return stringutil.CreateDisplayString(attr)}/*Check if a given string can be a valid node attribute.*/func (ni *defaultNodeInfo) IsValidAttr(attr string) bool {	return ni.gm.IsValidAttr(attr)}
 |