| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- // package use_group_link -- группа связей в вариантах использования
- package use_group_link
- import (
- "fmt"
- "gitp78su.ipnodns.ru/svi/goarch/lev0/alias"
- "gitp78su.ipnodns.ru/svi/goarch/lev0/types"
- "gitp78su.ipnodns.ru/svi/goarch/lev1/coord"
- "gitp78su.ipnodns.ru/svi/goarch/lev1/offset"
- "gitp78su.ipnodns.ru/svi/goarch/pkg/elems/elem_base"
- )
- // UseGroupLink -- группа связей в вариантах использования
- type UseGroupLink struct {
- ElemBase_ *elem_base.ElemBase `yaml:"elem_base"`
- Links_ []alias.Id `yaml:"link"` // Связи объекта
- }
- // NewUseGroupLink -- возвращает новый группу связей в вариантах использования
- func NewUseGroupLink(elemBase *elem_base.ElemBase, id alias.Id, label_ alias.Label,
- labelCoord *coord.Coord, labelOffset *offset.Offset,
- type_ alias.Type, elem map[string]interface{}, binElem []byte) (*UseGroupLink, error) {
- _links0, isOk := elem["links"]
- if !isOk {
- return nil, fmt.Errorf("NewUseGroupLink(): id=%q, field `links` not found", id)
- }
- _links, isOk := _links0.([]interface{})
- if !isOk {
- return nil, fmt.Errorf("NewUseGroupLink(): id=%q, field `links`(%T, %+v) not []interface{}", id, _links0, _links0)
- }
- var links []alias.Id
- for _, _id := range _links {
- id0, isOk := _id.(string)
- if !isOk {
- return nil, fmt.Errorf("NewUseGroupLink(): id=%q, field `links`(%T, %+v) not string", id, _id, _id)
- }
- id1 := alias.Id(id0)
- if id1 == "" {
- return nil, fmt.Errorf("NewUseGroupLink(): id=%q, link=%q is empty", id, _id)
- }
- links = append(links, id1)
- }
- sf := &UseGroupLink{
- ElemBase_: elemBase,
- Links_: links,
- }
- return sf, nil
- }
- // Check -- проверяет ошибки связей
- func (sf *UseGroupLink) Check(mapElem map[alias.Id]types.IElemDrawer) string {
- var msgErr string
- if len(sf.Links_) == 0 {
- msgErr = "Список ссылок(links) пуст\n"
- }
- // Проверить, что ссылки реально существует
- for _, id := range sf.Links_ {
- link, ok := mapElem[id]
- if !ok {
- msgErr += fmt.Sprintf("UseGroupLink.Check(): ссылка %q не существует\n", id)
- continue
- }
- ln, isOk := link.(types.ILinker)
- if !isOk {
- msgErr += fmt.Sprintf("UseGroupLink.Check(): ссылка %q не ILinker\n", id)
- continue
- }
- if !(ln.SrcId() == sf.ElemBase_.Id_ || ln.DstId() == sf.ElemBase_.Id_) {
- msgErr += fmt.Sprintf("UseGroupLink.Check(): ссылка %q не взаимная\n", id)
- continue
- }
- }
- return msgErr
- }
- // Links -- ссылки вариантов использования
- func (sf *UseGroupLink) Links() []alias.Id {
- return sf.Links_
- }
|