diff --git a/tools/exp/convert/convert.go b/tools/exp/convert/convert.go index 7efced9..1622ade 100644 --- a/tools/exp/convert/convert.go +++ b/tools/exp/convert/convert.go @@ -101,22 +101,22 @@ func (c Converter) convertToFiles(v vocabulary) (f []*File, e error) { return } // Implementation - dir := pm.PrivatePackage().Path() - file := jen.NewFilePath(dir) + priv := pm.PrivatePackage() + file := jen.NewFilePath(priv.Path()) file.Add(i.Definition().Definition()) f = append(f, &File{ F: file, FileName: fmt.Sprintf("gen_%s.go", i.PropertyName()), - Directory: dir, + Directory: priv.WriteDir(), }) // Interface - dir = pm.PublicPackage().Path() - file = jen.NewFilePath(dir) + pub := pm.PublicPackage() + file = jen.NewFilePath(pub.Path()) file.Add(i.InterfaceDefinition(pm.PublicPackage()).Definition()) f = append(f, &File{ F: file, FileName: fmt.Sprintf("gen_%s_interface.go", i.PropertyName()), - Directory: dir, + Directory: pub.WriteDir(), }) } for _, i := range v.NFProps { @@ -126,25 +126,25 @@ func (c Converter) convertToFiles(v vocabulary) (f []*File, e error) { return } // Implementation - dir := pm.PrivatePackage().Path() - file := jen.NewFilePath(dir) + priv := pm.PrivatePackage() + file := jen.NewFilePath(priv.Path()) s, t := i.Definitions() file.Add(s.Definition()).Line().Add(t.Definition()) f = append(f, &File{ F: file, FileName: fmt.Sprintf("gen_%s.go", i.PropertyName()), - Directory: dir, + Directory: priv.WriteDir(), }) // TODO: Interface - dir = pm.PublicPackage().Path() - file = jen.NewFilePath(dir) + pub := pm.PublicPackage() + file = jen.NewFilePath(pub.Path()) for _, intf := range i.InterfaceDefinitions(pm.PublicPackage()) { file.Add(intf.Definition()) } f = append(f, &File{ F: file, FileName: fmt.Sprintf("gen_%s_interface.go", i.PropertyName()), - Directory: dir, + Directory: pub.WriteDir(), }) } for _, i := range v.Types { @@ -154,32 +154,32 @@ func (c Converter) convertToFiles(v vocabulary) (f []*File, e error) { return } // Implementation - dir := pm.PrivatePackage().Path() - file := jen.NewFilePath(dir) + priv := pm.PrivatePackage() + file := jen.NewFilePath(priv.Path()) file.Add(i.Definition().Definition()) f = append(f, &File{ F: file, FileName: fmt.Sprintf("gen_%s.go", i.TypeName()), - Directory: dir, + Directory: priv.WriteDir(), }) // TODO: Interface - dir = pm.PublicPackage().Path() - file = jen.NewFilePath(dir) + pub := pm.PublicPackage() + file = jen.NewFilePath(pub.Path()) file.Add(i.InterfaceDefinition(pm.PublicPackage()).Definition()) f = append(f, &File{ F: file, FileName: fmt.Sprintf("gen_%s_interface.go", i.TypeName()), - Directory: dir, + Directory: pub.WriteDir(), }) } // TODO: For Manager - dir := c.VocabularyRoot.PrivatePackage().Path() - file := jen.NewFilePath(dir) + priv := c.VocabularyRoot.PrivatePackage() + file := jen.NewFilePath(priv.Path()) file.Add(v.Manager.PrivateManager().Definition()) f = append(f, &File{ F: file, FileName: "gen_manager.go", - Directory: dir, + Directory: priv.WriteDir(), }) return } diff --git a/tools/exp/main.go b/tools/exp/main.go index 8258f52..d69eb70 100644 --- a/tools/exp/main.go +++ b/tools/exp/main.go @@ -37,6 +37,8 @@ func init() { var ( input = flag.String("input", "spec.json", "Input JSON-LD specification used to generate Go code.") + // TODO: Be more rigorous when applying this. Also, clear the default value I am using for convenience. + prefix = flag.String("prefix", "github.com/cjslep/activity/tools/exp/tmp", "Package prefix to use for all generated package paths. This should be the prefix in the GOPATH directory if generating in a subdirectory.") // TODO: Use this flag root = flag.String("root", "github.com/go-fed/activity/", "Go import path prefix for generated packages") xmlpkg = flag.String("xmlpkg", "github.com/go-fed/activity/tools/exp/ref/xml", "Go package location for known XML references") @@ -58,6 +60,7 @@ func (l *list) Set(v string) error { } func main() { + // TODO: Use only one kind of flag style. var ref list var refspec list var refpkg list @@ -82,11 +85,11 @@ func main() { } c := &convert.Converter{ Registry: registry, - VocabularyRoot: props.NewPackageManager("gen/as"), + VocabularyRoot: props.NewPackageManager(*prefix, "gen/as"), PropertyPackagePolicy: convert.PropertyFlatUnderRoot, - PropertyPackageRoot: props.NewPackageManager("gen/as/props"), + PropertyPackageRoot: props.NewPackageManager(*prefix, "gen/as/props"), TypePackagePolicy: convert.TypeFlatUnderRoot, - TypePackageRoot: props.NewPackageManager("gen/as/types"), + TypePackageRoot: props.NewPackageManager(*prefix, "gen/as/types"), } f, err := c.Convert(p) if err != nil { diff --git a/tools/exp/props/pkg.go b/tools/exp/props/pkg.go index 5d96d68..a4a28ac 100644 --- a/tools/exp/props/pkg.go +++ b/tools/exp/props/pkg.go @@ -8,13 +8,15 @@ import ( // PackageManager manages the path and names of a package consisting of a public // and a private portion. type PackageManager struct { + prefix string root string public string private string } -func NewPackageManager(root string) *PackageManager { +func NewPackageManager(prefix, root string) *PackageManager { return &PackageManager{ + prefix: prefix, root: root, public: "", private: "internal", @@ -48,6 +50,7 @@ func (p *PackageManager) toPackage(suffix string, public bool) Package { s := strings.Split(path, "/") name := s[len(s)-1] return Package{ + prefix: p.prefix, path: path, name: name, isPublic: public, @@ -56,6 +59,7 @@ func (p *PackageManager) toPackage(suffix string, public bool) Package { } type Package struct { + prefix string path string name string isPublic bool @@ -63,6 +67,10 @@ type Package struct { } func (p Package) Path() string { + return p.prefix + "/" + p.path +} + +func (p Package) WriteDir() string { return p.path }