/* Copyright (c) 2006-2007, ePages GmbH All Rights Reserved. epages.cartridges.de_epages.mediagallery.widget.Imagedbstore $Revision: 1.7 $ */ dojo.provide("epages.cartridges.de_epages.mediagallery.widget.Imagedbstore"); dojo.require('dojo.data.api.Identity'); dojo.require('dojo.data.util.simpleFetch'); dojo.require("epages.io.translation"); dojo.require("epages.io.xml"); dojo.require("epages.lang.array"); dojo.require("epages.html"); dojo.require('epages.lang.hash'); dojo.declare( "epages.cartridges.de_epages.mediagallery.widget.Imagedbstore", [dojo.data.api.Identity], { /** * public properties */ id : 'Imagedbstore', basePath : epages.vars.ImageDbRoot, originalPath : epages.vars.ImageDbRoot + "/original", previewPath : epages.vars.ImageDbRoot + "/thumbnail", translationFile : "content", contentFileName : "content.xml", /** * private properties */ _XmlIo: undefined, _translation: undefined, _keywords: undefined, constructor: function(keywordParameters){ dojo.mixin(this,keywordParameters); this._XmlIo = new epages.io.Xml(); this._translation = new epages.io.Translation(); this._keywords = $H(); if(this.basePath){ this._translation.loadLocale(this.basePath + '/' + this.translationFile); }else{ console.warn("epages.vars.ImageDbRoot not defined in "+this.declaredClass); } }, /** * private methods */ _getCategories: function(parentNode) { var categories = []; if (parentNode.childNodes.length > 0) { var categoryNodes = epages.html.getChildNodesByTagName(parentNode, "category"); for( var i=0,iLength=categoryNodes.length ; i<iLength ; i++ ) { var categoryNode = categoryNodes[i]; var keyword = categoryNode.getAttribute("name"); var children = this._getCategories(categoryNode); categories.push({ title: this._translation.get(keyword), objectId: keyword, children: children.length >0 ? children : undefined, isFolder: children.length > 0 ? 1 : 0 }); } } return categories; }, _getCollections: function(collectionsNode) { var collectionNodes = epages.html.getChildNodesByTagName(collectionsNode, "collection"); for( var i=0,iLength=collectionNodes.length ; i<iLength ; i++ ) { var collection = { directory: collectionNodes[i].getAttribute("dir"), content: collectionNodes[i].getAttribute("content") }; var keywordNodes = epages.html.getChildNodesByTagName(collectionNodes[i], "keyword"); for( var j=0,jLength=keywordNodes.length ; j<jLength ; j++ ) { var keyword = keywordNodes[j].getAttribute("name"); var keywordInfo = this._keywords.get(keyword); if (keywordInfo === undefined) { keywordInfo = { 'files' : [], 'collections': [] }; this._keywords.set(keyword, keywordInfo); } keywordInfo.collections.push(collection); } } }, _parse: function () { var contentXml = this._XmlIo.loadSync(this.basePath + '/' + this.contentFileName); if (contentXml === undefined){ throw new Error('no content found'); } var contentNode = contentXml.getElementsByTagName("content")[0]; if (contentNode === undefined){ throw new Error('no content node found'); } var categoriesNode = contentNode.getElementsByTagName("categories")[0]; if (categoriesNode === undefined){ throw new Error('no categories node found'); } var collectionsNode = contentNode.getElementsByTagName("collections")[0]; if (collectionsNode === undefined){ throw new Error('no collections node found'); } var categories = this._getCategories(categoriesNode); this._getCollections(collectionsNode); return categories; }, _fetchItems: function(keywordArgs, findCallback, errorCallback){ if(typeof findCallback == 'function') { findCallback(this._parse(), keywordArgs); } else { consoleerror('error while _fetch'); errorCallback(keywordArgs); } }, hasAttribute: function(node, attributeName){ //check if node has specified attribute return node[attributeName] !== undefined; }, getLabel: function(item){ if(item.title !== undefined){ return item.title; } return undefined; }, getIdentity: function(item){ if(item.objectId !== undefined){ return item.objectId; } return undefined; }, getValues: function(item, attribute){ return item[attribute]; }, isItemLoaded: function(something){ return true; }, /** * public methods */ parseFiles: function(keyword) { var keywordInfo = this._keywords.get(keyword); // keyword has no files, possible main category if (keywordInfo === undefined){ return []; } // load file names var keywordCollections = $A(keywordInfo.collections).grep( function () {return true;}); for( var i=0,iLength=keywordCollections.length ; i<iLength ; i++ ) { var collection = keywordCollections[i]; var filedir = collection.directory; var content = collection.content; var contentXml = this._XmlIo.loadSync(this.basePath + '/' + content); if (contentXml === undefined){ throw new Error('no content found'); } var keywordNodes = contentXml.getElementsByTagName("keyword"); if (keywordNodes === undefined){ throw new Error('no keywords node found'); } for( var i=0,iLength=keywordNodes.length ; i<iLength ; i++ ) { var locKeyword = keywordNodes[i].getAttribute("name"); var locInfo = this._keywords.get(locKeyword); var locFiles = locInfo.files; locInfo.collections = $A(locInfo.collections).grep(function (el) { return el.content != content; }); var fileNodes = epages.html.getChildNodesByTagName(keywordNodes[i], "file"); for( var j=0,jLength=fileNodes.length ; j<jLength ; j++ ) { var fileName = fileNodes[j].firstChild.data; if (fileName != "") { if (fileName.lastIndexOf(".") == -1) { var extension = "?"; } else { var extension = fileName.substring(fileName.lastIndexOf(".") + 1); } locFiles.push({ objectId: (this.originalPath + "/" + collection.directory + "/" + fileName), title: fileName, fullpath: (this.originalPath + "/" + collection.directory + "/" + fileName), preview: (this.previewPath + "/" + collection.directory + "/" + fileName), extension: extension, size: 0, mimetype: "", imagewidth: "", imageheight: "", modified: 0, templateType: 'image' }); } } } } return keywordInfo.files; }, getCurrentPath: function(node) { var path=node.title; while(node.parent.title) { node=node.parent; path = node.title+'/' + path; } return path; } } ); dojo.extend(epages.cartridges.de_epages.mediagallery.widget.Imagedbstore,dojo.data.util.simpleFetch);