getting some actual functionality done - handling content

This commit is contained in:
Jan Halfar 2013-08-23 18:24:40 +02:00
parent ede9ba6d52
commit 35753df237
5 changed files with 51 additions and 25 deletions

View File

@ -18,6 +18,7 @@ type RepoNode struct {
Content map[string]interface{} `json:"content"` Content map[string]interface{} `json:"content"`
Nodes map[string]*RepoNode `json:"nodes"` Nodes map[string]*RepoNode `json:"nodes"`
LinkIds map[string]map[string]string `json:"linkIds"` // ids to link to LinkIds map[string]map[string]string `json:"linkIds"` // ids to link to
parent *RepoNode
// published from - to // published from - to
} }
@ -36,6 +37,35 @@ func (node *RepoNode) GetLanguageAndRegionForURI(URI string) (resolved bool, reg
return return
} }
func (node *RepoNode) WireParents() {
for _, childNode := range node.Nodes {
childNode.parent = node
childNode.WireParents()
}
}
func (node *RepoNode) GetPath(region string, language string) map[string]*Item {
path := make(map[string]*Item)
parentNode := node.parent
for parentNode != nil {
path[parentNode.Id] = parentNode.ToItem(region, language)
parentNode = parentNode.parent
}
return path
}
func (node *RepoNode) ToItem(region string, language string) *Item {
item := NewItem()
item.Id = node.Id
item.Name = node.GetName(language)
item.URI = node.URIs[region][language]
return item
}
func (node *RepoNode) GetParent() *RepoNode {
return node.parent
}
func (node *RepoNode) AddNode(name string, childNode *RepoNode) *RepoNode { func (node *RepoNode) AddNode(name string, childNode *RepoNode) *RepoNode {
node.Nodes[name] = childNode node.Nodes[name] = childNode
return node return node

View File

@ -10,10 +10,9 @@ type SiteContent struct {
Status int `json:"status"` Status int `json:"status"`
Region string `json:"region"` Region string `json:"region"`
Language string `json:"language"` Language string `json:"language"`
Content struct {
Item *Item `json:"item"` Item *Item `json:"item"`
Data interface{} `json:"data"` Data interface{} `json:"data"`
} `json:"content"` Path map[string]*Item `json:"path"`
URIs map[string]string `json:"URIs"` URIs map[string]string `json:"URIs"`
Nodes map[string]*Node `json:"nodes"` Nodes map[string]*Node `json:"nodes"`
} }

View File

@ -23,14 +23,10 @@ func NewRepo(server string) *Repo {
} }
func (repo *Repo) ResolveContent(URI string) (resolved bool, region string, language string, repoNode *content.RepoNode) { func (repo *Repo) ResolveContent(URI string) (resolved bool, region string, language string, repoNode *content.RepoNode) {
if node, ok := repo.URIDirectory[URI]; ok { if repoNode, ok := repo.URIDirectory[URI]; ok {
resolved = true resolved = true
resolvedURI, region, language := node.GetLanguageAndRegionForURI(URI) _, region, language := repoNode.GetLanguageAndRegionForURI(URI)
if resolvedURI { return true, region, language, repoNode
return true, region, language, node
} else {
resolved = false
}
} else { } else {
resolved = false resolved = false
} }
@ -53,9 +49,7 @@ func (repo *Repo) GetURI(region string, language string, id string) string {
func (repo *Repo) GetNode(repoNode *content.RepoNode, expanded bool, mimeTypes []string, path []string, region string, language string) *content.Node { func (repo *Repo) GetNode(repoNode *content.RepoNode, expanded bool, mimeTypes []string, path []string, region string, language string) *content.Node {
node := content.NewNode() node := content.NewNode()
node.Item.Name = repoNode.GetName(language) node.Item = repoNode.ToItem(region, language)
node.Item.URI = repoNode.URIs[region][language]
//fmt.Println(region, language, repoNode.URIs[region][language], repoNode.URIs)
for id, childNode := range repoNode.Nodes { for id, childNode := range repoNode.Nodes {
if expanded && !childNode.Hidden && childNode.IsOneOfTheseMimeTypes(mimeTypes) { if expanded && !childNode.Hidden && childNode.IsOneOfTheseMimeTypes(mimeTypes) {
// || in path and in region mimes // || in path and in region mimes
@ -73,9 +67,8 @@ func (repo *Repo) GetContent(r *requests.Content) *content.SiteContent {
c.Region = region c.Region = region
c.Language = language c.Language = language
c.Status = content.STATUS_OK c.Status = content.STATUS_OK
c.Content.Item = content.NewItem() c.Item = node.ToItem(region, language)
c.Content.Item.Id = node.Id c.Path = node.GetPath(region, language)
c.Content.Item.Name = node.GetName(language)
for treeName, treeRequest := range r.Nodes { for treeName, treeRequest := range r.Nodes {
// fmt.Println("getting tree", treeName, treeRequest) // fmt.Println("getting tree", treeName, treeRequest)
c.Nodes[treeName] = repo.GetNode(repo.Directory[treeRequest.Id], treeRequest.Expand, treeRequest.MimeTypes, []string{}, region, language) c.Nodes[treeName] = repo.GetNode(repo.Directory[treeRequest.Id], treeRequest.Expand, treeRequest.MimeTypes, []string{}, region, language)
@ -102,6 +95,7 @@ func (repo *Repo) builDirectory(dirNode *content.RepoNode) {
func (repo *Repo) Update() { func (repo *Repo) Update() {
repo.Node = content.NewRepoNode() repo.Node = content.NewRepoNode()
utils.Get(repo.server, repo.Node) utils.Get(repo.server, repo.Node)
repo.Node.WireParents()
repo.Directory = make(map[string]*content.RepoNode) repo.Directory = make(map[string]*content.RepoNode)
repo.URIDirectory = make(map[string]*content.RepoNode) repo.URIDirectory = make(map[string]*content.RepoNode)
repo.builDirectory(repo.Node) repo.builDirectory(repo.Node)

View File

@ -20,13 +20,11 @@ func contentHandler(w http.ResponseWriter, r *http.Request) {
func uriHandler(w http.ResponseWriter, r *http.Request) { func uriHandler(w http.ResponseWriter, r *http.Request) {
parts := strings.Split(r.RequestURI, "/") parts := strings.Split(r.RequestURI, "/")
//fmt.Println(parts, len(parts))
if len(parts) == 5 { if len(parts) == 5 {
utils.JsonResponse(w, contentRepo.GetURI(parts[2], parts[3], parts[4])) utils.JsonResponse(w, contentRepo.GetURI(parts[2], parts[3], parts[4]))
} else { } else {
wtfHandler(w, r) wtfHandler(w, r)
} }
} }
func wtfHandler(w http.ResponseWriter, r *http.Request) { func wtfHandler(w http.ResponseWriter, r *http.Request) {

View File

@ -20,7 +20,7 @@ func toJson(obj interface{}) string {
} }
} }
func extractJsonFromRequest(r *http.Request) []byte { func extractJsonFromRequestFileUpload(r *http.Request) []byte {
file, _, err := r.FormFile("request") file, _, err := r.FormFile("request")
if err != nil { if err != nil {
fmt.Println(err, r) fmt.Println(err, r)
@ -31,6 +31,11 @@ func extractJsonFromRequest(r *http.Request) []byte {
} }
return data return data
} }
func extractJsonFromRequest(r *http.Request) []byte {
bytes := []byte(r.PostFormValue("request"))
return bytes
}
func PopulateRequest(r *http.Request, obj interface{}) { func PopulateRequest(r *http.Request, obj interface{}) {
json.Unmarshal(extractJsonFromRequest(r), obj) json.Unmarshal(extractJsonFromRequest(r), obj)