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"`
Nodes map[string]*RepoNode `json:"nodes"`
LinkIds map[string]map[string]string `json:"linkIds"` // ids to link to
parent *RepoNode
// published from - to
}
@ -36,6 +37,35 @@ func (node *RepoNode) GetLanguageAndRegionForURI(URI string) (resolved bool, reg
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 {
node.Nodes[name] = childNode
return node

View File

@ -7,15 +7,14 @@ const (
)
type SiteContent struct {
Status int `json:"status"`
Region string `json:"region"`
Language string `json:"language"`
Content struct {
Item *Item `json:"item"`
Data interface{} `json:"data"`
} `json:"content"`
URIs map[string]string `json:"URIs"`
Nodes map[string]*Node `json:"nodes"`
Status int `json:"status"`
Region string `json:"region"`
Language string `json:"language"`
Item *Item `json:"item"`
Data interface{} `json:"data"`
Path map[string]*Item `json:"path"`
URIs map[string]string `json:"URIs"`
Nodes map[string]*Node `json:"nodes"`
}
func NewSiteContent() *SiteContent {

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) {
if node, ok := repo.URIDirectory[URI]; ok {
if repoNode, ok := repo.URIDirectory[URI]; ok {
resolved = true
resolvedURI, region, language := node.GetLanguageAndRegionForURI(URI)
if resolvedURI {
return true, region, language, node
} else {
resolved = false
}
_, region, language := repoNode.GetLanguageAndRegionForURI(URI)
return true, region, language, repoNode
} else {
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 {
node := content.NewNode()
node.Item.Name = repoNode.GetName(language)
node.Item.URI = repoNode.URIs[region][language]
//fmt.Println(region, language, repoNode.URIs[region][language], repoNode.URIs)
node.Item = repoNode.ToItem(region, language)
for id, childNode := range repoNode.Nodes {
if expanded && !childNode.Hidden && childNode.IsOneOfTheseMimeTypes(mimeTypes) {
// || in path and in region mimes
@ -73,9 +67,8 @@ func (repo *Repo) GetContent(r *requests.Content) *content.SiteContent {
c.Region = region
c.Language = language
c.Status = content.STATUS_OK
c.Content.Item = content.NewItem()
c.Content.Item.Id = node.Id
c.Content.Item.Name = node.GetName(language)
c.Item = node.ToItem(region, language)
c.Path = node.GetPath(region, language)
for treeName, treeRequest := range r.Nodes {
// fmt.Println("getting tree", treeName, treeRequest)
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() {
repo.Node = content.NewRepoNode()
utils.Get(repo.server, repo.Node)
repo.Node.WireParents()
repo.Directory = make(map[string]*content.RepoNode)
repo.URIDirectory = make(map[string]*content.RepoNode)
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) {
parts := strings.Split(r.RequestURI, "/")
//fmt.Println(parts, len(parts))
if len(parts) == 5 {
utils.JsonResponse(w, contentRepo.GetURI(parts[2], parts[3], parts[4]))
} else {
wtfHandler(w, r)
}
}
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")
if err != nil {
fmt.Println(err, r)
@ -31,6 +31,11 @@ func extractJsonFromRequest(r *http.Request) []byte {
}
return data
}
func extractJsonFromRequest(r *http.Request) []byte {
bytes := []byte(r.PostFormValue("request"))
return bytes
}
func PopulateRequest(r *http.Request, obj interface{}) {
json.Unmarshal(extractJsonFromRequest(r), obj)