| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- // 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/pkg/elems/elem_base"
- )
- // UseGroupLink -- группа связей в вариантах использования
- type UseGroupLink struct {
- *elem_base.ElemBase
- Links_ []alias.Id `json:"link"` // Связи объекта
- }
- // NewUseGroupLink -- возвращает новый группу связей в вариантах использования
- func NewUseGroupLink(elem map[string]interface{}) (*UseGroupLink, error) {
- elemBase, err := elem_base.NewElemBase(elem)
- if err != nil {
- return nil, fmt.Errorf("NewActor(): in create BaseSvg, err=\n\t%w", err)
- }
- id := elemBase.Id_
- _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.Id() || ln.DstId() == sf.Id()) {
- msgErr += fmt.Sprintf("UseGroupLink.Check(): ссылка %q не взаимная\n", id)
- continue
- }
- }
- return msgErr
- }
- // Links -- ссылки вариантов использования
- func (sf *UseGroupLink) Links() []alias.Id {
- return sf.Links_
- }
|