2018-01-24 08:00:59 +09:00
|
|
|
package gen
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"github.com/go-fed/activity/tools/defs"
|
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
|
|
|
func validateDomains(pt []*defs.PropertyType) error {
|
|
|
|
var invalid []string
|
|
|
|
for _, p := range pt {
|
|
|
|
for _, d := range p.Domain {
|
2018-05-31 04:40:20 +09:00
|
|
|
if d.T != nil {
|
2018-01-24 08:00:59 +09:00
|
|
|
found := false
|
|
|
|
for _, inv := range d.T.GetProperties() {
|
|
|
|
if inv.Name == p.Name {
|
|
|
|
found = true
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if !found {
|
|
|
|
invalid = append(invalid, fmt.Sprintf("Property %s has domain %s, but %s does not have property %s", p.Name, d.T.Name, d.T.Name, p.Name))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if len(invalid) == 0 {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
return fmt.Errorf("ValidateDomains failed:\n\t%s", strings.Join(invalid, "\n\t"))
|
|
|
|
}
|
|
|
|
|
|
|
|
func validateProperties(ct []*defs.Type) error {
|
|
|
|
var invalid []string
|
|
|
|
for _, t := range ct {
|
|
|
|
names := t.AllExtendsNames()
|
|
|
|
for _, p := range t.GetProperties() {
|
|
|
|
found := false
|
|
|
|
for _, d := range p.Domain {
|
|
|
|
if d.T == nil {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
for _, n := range names {
|
|
|
|
if d.T.Name == n {
|
|
|
|
found = true
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if found {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if !found {
|
|
|
|
invalid = append(invalid, fmt.Sprintf("Type %s has property %s, but property %s does not have domain %s", t.Name, p.Name, p.Name, t.Name))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if len(invalid) == 0 {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
return fmt.Errorf("ValidateProperties failed:\n\t%s", strings.Join(invalid, "\n\t"))
|
|
|
|
}
|
|
|
|
|
|
|
|
func validateValues(vt []*defs.ValueType, pt []*defs.PropertyType) error {
|
|
|
|
var invalid []string
|
|
|
|
for _, v := range vt {
|
|
|
|
if defs.IsIRIValueType(v) {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
found := false
|
|
|
|
for _, p := range pt {
|
|
|
|
for _, r := range p.Range {
|
|
|
|
if r.V != nil {
|
|
|
|
if r.V.Name == v.Name {
|
|
|
|
found = true
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if found {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if !found {
|
|
|
|
invalid = append(invalid, fmt.Sprintf("Value %s is not referred to by any property", v.Name))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if len(invalid) == 0 {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
return fmt.Errorf("ValidateValues failed:\n\t%s", strings.Join(invalid, "\n\t"))
|
|
|
|
}
|