|
|
@@ -1,84 +0,0 @@
|
|
|
-// package use_case -- вариант использования
|
|
|
-package use_case
|
|
|
-
|
|
|
-import (
|
|
|
- "fmt"
|
|
|
-
|
|
|
- "gitp78su.ipnodns.ru/svi/goarch/lev0/alias"
|
|
|
- "gitp78su.ipnodns.ru/svi/goarch/lev0/cons"
|
|
|
- "gitp78su.ipnodns.ru/svi/goarch/lev0/types"
|
|
|
- "gitp78su.ipnodns.ru/svi/goarch/lev1/size"
|
|
|
- "gitp78su.ipnodns.ru/svi/goarch/pkg/elems/elem_base"
|
|
|
- "gitp78su.ipnodns.ru/svi/kern/v3"
|
|
|
-)
|
|
|
-
|
|
|
-// UseCase -- вариант использования
|
|
|
-type UseCase struct {
|
|
|
- ElemBase_ *elem_base.ElemBase `yaml:"elem_base"`
|
|
|
- Size_ *size.Size `yaml:"size"`
|
|
|
- Links_ []alias.Id `yaml:"links"` // Список ссылок
|
|
|
-}
|
|
|
-
|
|
|
-var (
|
|
|
- hassert = kern.GetFnHassert()
|
|
|
-)
|
|
|
-
|
|
|
-// NewUseCase -- возвращает новый вариант использования
|
|
|
-func NewUseCase(elemBase *elem_base.ElemBase, size_ *size.Size) (*UseCase, error) {
|
|
|
- hassert(elemBase != nil, "NewUseCase(): elemBase==nil")
|
|
|
- id := elemBase.Id_
|
|
|
- _links0, isOk := elemBase.Elem_["links"]
|
|
|
- hassert(isOk, "NewUseCase(): id=%q, links not found", id)
|
|
|
- _links, isOk := _links0.([]interface{})
|
|
|
- hassert(isOk, "NewUseCase(): id=%q, `links`(%+v) not []interface{}", id, _links0)
|
|
|
- var links []alias.Id
|
|
|
- for _, _id := range _links {
|
|
|
- id0, isOk := _id.(string)
|
|
|
- hassert(isOk, "NewUseCase(): id=%q, `link`(%T, %+v) not string", id, _id, _id)
|
|
|
- id1 := alias.Id(id0)
|
|
|
- hassert(id1 != "", "NewUseCase(): id=%q, `link` is empty", id)
|
|
|
- links = append(links, id1)
|
|
|
- }
|
|
|
- sf := &UseCase{
|
|
|
- ElemBase_: elemBase,
|
|
|
- Size_: size_,
|
|
|
- Links_: links,
|
|
|
- }
|
|
|
- return sf, nil
|
|
|
-}
|
|
|
-
|
|
|
-// Check -- проверяет корректность элемента
|
|
|
-func (sf *UseCase) Check(mapElem map[alias.Id]types.IElemDrawer) string {
|
|
|
- var msgErr string
|
|
|
- // Нет ссылок
|
|
|
- if len(sf.Links_) == 0 {
|
|
|
- return fmt.Sprintf("id=%q, нет собственных ссылок", sf.ElemBase_.Id_)
|
|
|
- }
|
|
|
- // Проверить, что ссылки реально существует
|
|
|
- for _, id := range sf.Links_ {
|
|
|
- link, ok := mapElem[id]
|
|
|
- if !ok {
|
|
|
- msgErr += fmt.Sprintf("id=%q, собственная ссылка не существует\n", id)
|
|
|
- continue
|
|
|
- }
|
|
|
- if link.Type() != cons.TypeUseLink {
|
|
|
- msgErr += fmt.Sprintf("id=%q, не тип %q, тип=%q\n", id, cons.TypeUseLink, link.Type())
|
|
|
- continue
|
|
|
- }
|
|
|
- ln, isOk := link.(types.IElemLinker)
|
|
|
- if !isOk {
|
|
|
- msgErr += fmt.Sprintf("id=%q, не тип `link`, link=%#v\n", id, link)
|
|
|
- continue
|
|
|
- }
|
|
|
- // Проверить что ссылка взаимная
|
|
|
- if !(ln.SrcId() == sf.ElemBase_.Id_ || ln.DstId() == sf.ElemBase_.Id_) {
|
|
|
- msgErr += fmt.Sprintf("id=%q, ссылка не взаимная\nsrc=%q, dst=%q\n", id, ln.SrcId(), ln.DstId())
|
|
|
- }
|
|
|
- }
|
|
|
- return msgErr
|
|
|
-}
|
|
|
-
|
|
|
-// Links -- ссылки вариантов использования
|
|
|
-func (sf *UseCase) Links() []alias.Id {
|
|
|
- return sf.Links_
|
|
|
-}
|