diff --git a/ContentServer b/ContentServer index f48144b..35e2600 100755 Binary files a/ContentServer and b/ContentServer differ diff --git a/server/repo/content/node.go b/server/repo/content/node.go index b2ee390..991e4bb 100644 --- a/server/repo/content/node.go +++ b/server/repo/content/node.go @@ -11,6 +11,7 @@ type Node struct { func NewNode() *Node { node := new(Node) node.Item = NewItem() + //node.Index = [] node.Nodes = make(map[string]*Node) return node } diff --git a/server/repo/repo.go b/server/repo/repo.go index ee4bf76..2f86caf 100644 --- a/server/repo/repo.go +++ b/server/repo/repo.go @@ -53,6 +53,22 @@ func (repo *Repo) ResolveContent(URI string) (resolved bool, resolvedURI string, return } +func (repo *Repo) GetItemMap(id string) map[string]map[string]*content.Item { + itemMap := make(map[string]map[string]*content.Item) + if repoNode, ok := repo.Directory[id]; ok { + for region, languageURIs := range repoNode.URIs { + itemMap[region] = make(map[string]*content.Item) + for language, URI := range languageURIs { + log.Debug(fmt.Sprintf("region :%s language :%s URI: %s", region, language, URI)) + itemMap[region][language] = repoNode.ToItem(region, language) + } + } + } else { + log.Warning("GetItemMapForAllRegionsAndLanguages invalid id " + id) + } + return itemMap +} + func (repo *Repo) GetURIs(region string, language string, ids []string) map[string]string { uris := make(map[string]string) for _, id := range ids { @@ -109,7 +125,12 @@ func (repo *Repo) GetContent(r *requests.Content) *content.SiteContent { c.Data = node.Data for treeName, treeRequest := range r.Nodes { log.Debug(" adding tree " + treeName + " " + treeRequest.Id) - c.Nodes[treeName] = repo.GetNode(repo.Directory[treeRequest.Id], treeRequest.Expand, treeRequest.MimeTypes, c.Path, region, language) + 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) diff --git a/server/requests/itemMap.go b/server/requests/itemMap.go new file mode 100644 index 0000000..0f92711 --- /dev/null +++ b/server/requests/itemMap.go @@ -0,0 +1,9 @@ +package requests + +type ItemMap struct { + Id string `json:"id"` +} + +func NewItemMap() *ItemMap { + return new(ItemMap) +} diff --git a/server/socket.go b/server/socket.go index 59e9568..05a4511 100644 --- a/server/socket.go +++ b/server/socket.go @@ -42,6 +42,13 @@ func handleSocketRequest(handler string, jsonBuffer []byte) (replyBytes []byte, content := contentRepo.GetContent(contentRequest) reply = content break + case "getItemMap": + itemMapRequest := requests.NewItemMap() + jsonErr = json.Unmarshal(jsonBuffer, &itemMapRequest) + log.Debug(" itemMapRequest: " + fmt.Sprint(itemMapRequest)) + itemMap := contentRepo.GetItemMap(itemMapRequest.Id) + reply = itemMap + break default: err = errors.New(log.Error(" can not handle this one " + handler)) }