added nodes request, refactored structs, improved behaviour

This commit is contained in:
Jan Halfar 2013-09-18 17:03:13 +02:00
parent 07d6a3d325
commit 4815a73db8
7 changed files with 64 additions and 22 deletions

Binary file not shown.

View File

@ -49,7 +49,7 @@ func GetLogLevelByName(name string) int {
func log(msg string, level int) string {
if level <= logLevel {
prefix := time.Now().Format(time.RFC3339) + " " + prefices[level]
prefix := time.Now().Format(time.RFC3339Nano) + " " + prefices[level]
lines := strings.Split(msg, "\n")
for i := 0; i < len(lines); i++ {
fmt.Println(prefix + lines[i])

View File

@ -91,14 +91,14 @@ func (repo *Repo) GetURI(region string, language string, id string) string {
return ""
}
func (repo *Repo) GetNode(repoNode *content.RepoNode, expanded bool, mimeTypes []string, path []*content.Item, region string, language string) *content.Node {
func (repo *Repo) GetNode(repoNode *content.RepoNode, expanded bool, mimeTypes []string, path []*content.Item, level int, region string, language string) *content.Node {
node := content.NewNode()
node.Item = repoNode.ToItem(region, language)
log.Debug("repo.GetNode: " + repoNode.Id)
for _, childId := range repoNode.Index {
childNode := repoNode.Nodes[childId]
if (expanded || !expanded && childNode.InPath(path)) && !childNode.Hidden && childNode.IsOneOfTheseMimeTypes(mimeTypes) && childNode.InRegion(region) {
node.Nodes[childId] = repo.GetNode(childNode, expanded, mimeTypes, path, region, language)
if (level == 0 || expanded || !expanded && childNode.InPath(path)) && !childNode.Hidden && childNode.IsOneOfTheseMimeTypes(mimeTypes) && childNode.InRegion(region) {
node.Nodes[childId] = repo.GetNode(childNode, expanded, mimeTypes, path, level+1, region, language)
node.Index = append(node.Index, childId)
} else {
fmt.Println("no see for", childNode.GetName(language), childNode.Hidden)
@ -108,6 +108,20 @@ func (repo *Repo) GetNode(repoNode *content.RepoNode, expanded bool, mimeTypes [
return node
}
func (repo *Repo) GetNodes(r *requests.Nodes) map[string]*content.Node {
nodes := make(map[string]*content.Node)
path := make([]*content.Item, 0)
for nodeName, nodeRequest := range r.Nodes {
log.Debug(" adding node " + nodeName + " " + nodeRequest.Id)
if treeNode, ok := repo.Directory[nodeRequest.Id]; ok {
nodes[nodeName] = repo.GetNode(treeNode, nodeRequest.Expand, nodeRequest.MimeTypes, path, 0, r.Env.Defaults.Region, r.Env.Defaults.Language)
} else {
log.Warning("you are requesting an invalid tree node for " + nodeName + " : " + nodeRequest.Id)
}
}
return nodes
}
func (repo *Repo) GetContent(r *requests.Content) *content.SiteContent {
log.Debug("repo.GetContent: " + r.URI)
c := content.NewSiteContent()
@ -123,18 +137,19 @@ func (repo *Repo) GetContent(r *requests.Content) *content.SiteContent {
c.Item = node.ToItem(region, language)
c.Path = node.GetPath(region, language)
c.Data = node.Data
for treeName, treeRequest := range r.Nodes {
log.Debug(" adding tree " + treeName + " " + treeRequest.Id)
if treeNode, ok := repo.Directory[treeRequest.Id]; ok {
c.Nodes[treeName] = repo.GetNode(treeNode, treeRequest.Expand, treeRequest.MimeTypes, c.Path, region, language)
} else {
log.Warning("you are requesting an invalid tree node for " + treeName + " : " + treeRequest.Id)
}
}
} else {
log.Notice("404 for " + r.URI)
c.Status = content.STATUS_NOT_FOUND
region = r.Env.Defaults.Region
language = r.Env.Defaults.Language
}
for treeName, treeRequest := range r.Nodes {
log.Debug(" adding tree " + treeName + " " + treeRequest.Id)
if treeNode, ok := repo.Directory[treeRequest.Id]; ok {
c.Nodes[treeName] = repo.GetNode(treeNode, treeRequest.Expand, treeRequest.MimeTypes, c.Path, 0, region, language)
} else {
log.Warning("you are requesting an invalid tree node for " + treeName + " : " + treeRequest.Id)
}
}
return c
}

View File

@ -1,16 +1,9 @@
package requests
type Content struct {
Env struct {
Groups []string `json:"groups"`
Data interface{} `json:"data"`
} `json:"env"`
Env *Env `json:"env"`
URI string
Nodes map[string]struct {
Id string `json:"id"`
MimeTypes []string `json:"mimeTypes"`
Expand bool `json:"expand"`
} `json:"nodes"`
Nodes map[string]*Node `json:"nodes"`
}
func NewContent() *Content {

10
server/requests/nodes.go Normal file
View File

@ -0,0 +1,10 @@
package requests
type Nodes struct {
Nodes map[string]*Node `json:"nodes"`
Env *Env `json:"env"`
}
func NewNodes() *Nodes {
return new(Nodes)
}

View File

@ -0,0 +1,16 @@
package requests
type Env struct {
Defaults struct {
Region string `json:"region"`
Language string `json:"language"`
} `json:"defaults"`
Groups []string `json:"groups"`
Data interface{} `json:"data"`
}
type Node struct {
Id string `json:"id"`
MimeTypes []string `json:"mimeTypes"`
Expand bool `json:"expand"`
}

View File

@ -49,6 +49,14 @@ func handleSocketRequest(handler string, jsonBuffer []byte) (replyBytes []byte,
itemMap := contentRepo.GetItemMap(itemMapRequest.Id)
reply = itemMap
break
case "getNodes":
nodesRequest := requests.NewNodes()
jsonErr = json.Unmarshal(jsonBuffer, &nodesRequest)
log.Debug(" nodesRequest: " + fmt.Sprint(nodesRequest))
nodesMap := contentRepo.GetNodes(nodesRequest)
reply = nodesMap
break
default:
err = errors.New(log.Error(" can not handle this one " + handler))
}