harvesting.js.svn-base
来自「由国外的一个著名的geonetwork修改而来」· SVN-BASE 代码 · 共 514 行
SVN-BASE
514 行
//=====================================================================================//===//=== API methods//===//=====================================================================================var harvesting = new Harvesting();var xmlLoader = new XMLLoader(Env.locUrl +'/xml/harvesting.xml');var view = new HarvestView(xmlLoader);//=====================================================================================function init(){ view.init(); harvesting.refresh(); harvesting.refreshGroups();}//=====================================================================================//===//=== Harvesting class//===//=====================================================================================function Harvesting() {}//=====================================================================================Harvesting.prototype.edit = function(id){ var req = gn.createRequest('id', id); gn.send('xml.harvesting.get', req, gn.wrap(this, this.editSuccess));}//-------------------------------------------------------------------------------------Harvesting.prototype.editSuccess = function(xml){ //--- skip the document node var xmlEntry = xml.firstChild; if (xmlEntry.nodeName == 'error') gn.showError(xmlLoader.getText('cannotGet'), xmlEntry); else view.edit(xmlEntry);}//=====================================================================================Harvesting.prototype.update = function(){ if (!view.isEditDataValid()) return; //--- create request var data = view.getEditData(); var template= this.getTemplate(); var request = gn.substitute(template, data); //--- add search list to request (in case of a 'geonetwork' node) var list = data.SEARCH_LIST; if (list) { var text = ''; for (var i=0; i<list.length; i++) text += gn.substitute(searchTemp_GN, list[i]); request = gn.replace(request, '{SEARCHES}', text); } //--- add privileges to request (in case of a 'webFolder' node) var list = data.PRIVILEGES; if (list) { var text = ''; for (var i=0; i<list.length; i++) { var groupID = list[i].GROUP; var operList= list[i].OPERATIONS; text += '<group id="'+ groupID +'">'; for (var j=0; j<operList.length; j++) text += '<operation name="'+operList[j]+'"/>'; text += '</group>'; } request = gn.replace(request, '{PRIVIL_LIST}', text); } //--- send add/update request if (view.isAdding()) gn.send('xml.harvesting.add', request, gn.wrap(this, this.addSuccess)); else gn.send('xml.harvesting.update', request, gn.wrap(this, this.updateSuccess));}//-------------------------------------------------------------------------------------Harvesting.prototype.addSuccess = function(xml){ //--- skip the document node var xmlNode = xml.firstChild; if (xmlNode.nodeName == 'error') gn.showError(xmlLoader.getText('cannotAdd'), xmlNode); else { view.append(xmlNode); view.show(SHOW.LIST); }}//-------------------------------------------------------------------------------------Harvesting.prototype.updateSuccess = function(xml){ //--- skip the document node var xmlNode = xml.firstChild; if (xmlNode.nodeName == 'error') gn.showError(xmlLoader.getText('cannotUpdate'), xmlNode); else { view.refresh(xmlNode); view.show(SHOW.LIST); }}//=====================================================================================Harvesting.prototype.remove = function(){ var idList = view.getIdList(); var request= gn.createRequest('id', idList); if (confirm(xmlLoader.getText('confirmRemove')) == false) return; if (idList.length == 0) alert(xmlLoader.getText('pleaseSelect')); else gn.send('xml.harvesting.remove', request, gn.wrap(this, this.removeSuccess));}//-------------------------------------------------------------------------------------Harvesting.prototype.removeSuccess = function(xml){ //--- skip the document node var xmlRoot = xml.firstChild; if (xmlRoot.nodeName == 'error') gn.showError(xmlLoader.getText('cannotRemove'), xmlRoot); else { var ids = xmlRoot.getElementsByTagName('id'); for (var i=0; i<ids.length; i++) { var id = ids[i].firstChild.nodeValue; //--- if the status is not ok we ignore it. Maybe the entry has been already //--- removed or maybe the id is simply wrong. In this case a simple refresh //--- should be enough. view.remove(id); } }}//=====================================================================================Harvesting.prototype.refresh = function(){ view.removeAll(); gn.send('xml.harvesting.get', '<request/>', gn.wrap(this, this.refreshSuccess));}//-------------------------------------------------------------------------------------Harvesting.prototype.refreshSuccess = function(xml){ var entries = xml.firstChild; if (entries.nodeName == 'error') gn.showError(xmlLoader.getText('cannotGet'), entries); else { //--- add all harvesting entries to list for (var i=0; i<entries.childNodes.length; i++) if (entries.childNodes[i].nodeType == Node.ELEMENT_NODE) view.append(entries.childNodes[i]); }}//=====================================================================================Harvesting.prototype.start = function(){ var idList = view.getIdList(); var request= gn.createRequest('id', idList); if (idList.length == 0) alert(xmlLoader.getText('pleaseSelect')); else gn.send('xml.harvesting.start', request, gn.wrap(this, this.startSuccess));}//-------------------------------------------------------------------------------------Harvesting.prototype.startSuccess = function(xml){ //TODO - togliere la selezione alle checkbox //TODO - cambiare lo stato a video}//=====================================================================================Harvesting.prototype.stop = function(){ var idList = view.getIdList(); var request= gn.createRequest('id', idList); if (idList.length == 0) alert(xmlLoader.getText('pleaseSelect')); else gn.send('xml.harvesting.stop', request, gn.wrap(this, this.stopSuccess));}//-------------------------------------------------------------------------------------Harvesting.prototype.stopSuccess = function(xml){ //TODO - togliere la selezione alle checkbox //TODO - cambiare lo stato a video}//=====================================================================================Harvesting.prototype.run = function(){ var idList = view.getIdList(); var request= gn.createRequest('id', idList); if (idList.length == 0) alert(xmlLoader.getText('pleaseSelect')); else gn.send('xml.harvesting.run', request, gn.wrap(this, this.runSuccess));}//-------------------------------------------------------------------------------------Harvesting.prototype.runSuccess = function(xml){ //TODO - togliere la selezione alle checkbox //TODO - cambiare lo stato a video}//=====================================================================================Harvesting.prototype.addSearch = function(){ var siteName = view.getSiteName(); var siteId = view.getSiteId(); if (siteName == null) alert(xmlLoader.getText('pleaseRetrieve')); else view.addEmptySearch(siteName, siteId);}//=====================================================================================Harvesting.prototype.retrieveSites = function(){ var data = view.getHostData(); if (data.HOST == '') alert(xmlLoader.getText('supplyHost')); else if (data.SERVLET == '') alert(xmlLoader.getText('supplyServlet')); else { var url = 'http://'+ data.HOST; if (data.PORT != '') url += ':'+data.PORT; url += '/'+data.SERVLET+'/srv/en/xml.info'; var request = gn.substitute(retrieveTemplate, { URL : url }); gn.send('xml.forward', request, gn.wrap(this, this.retrieveSuccess)); }}//-------------------------------------------------------------------------------------Harvesting.prototype.retrieveSuccess = function(xml){ //--- skip the document node var xmlNode = xml.firstChild; if (xmlNode.nodeName == 'error') gn.showError(xmlLoader.getText('cannotRetrieve'), xmlNode); else { view.clearSiteId(); var xmlSite = xmlNode.getElementsByTagName('site') [0]; var xmlNodes = xmlNode.getElementsByTagName('knownNodes')[0]; var name = xmlSite.getElementsByTagName('name') [0].textContent; var siteId = xmlSite.getElementsByTagName('siteId')[0].textContent; view.addSiteId(siteId, name); var nodeList = xmlNodes.getElementsByTagName('node'); for (var i=0; i<nodeList.length; i++) { xmlNode = nodeList[i]; name = xmlNode.getElementsByTagName('name') [0].textContent; siteId = xmlNode.getElementsByTagName('siteId') [0].textContent; count = xmlNode.getElementsByTagName('metadata')[0].textContent; if (count == '') count = '0'; view.addSiteId(siteId, name +' ('+count+')'); } }}//=====================================================================================//=== WAF group methods//=====================================================================================Harvesting.prototype.refreshGroups = function(){ var request = gn.createRequest('type', 'groups'); gn.send('xml.info', request, gn.wrap(this, this.refreshGroupsSuccess));}//-------------------------------------------------------------------------------------Harvesting.prototype.refreshGroupsSuccess = function(xml){ //--- skip the document node var xmlNode = xml.firstChild; if (xmlNode.nodeName == 'error') gn.showError(xmlLoader.getText('cannotRetrieve'), xmlNode); else { view.clearGroups(); var groups = xmlNode.getElementsByTagName('group'); this.refreshGroupsAdd('0', groups); this.refreshGroupsAdd('1', groups); for (var i=0; i<groups.length; i++) { var group = groups[i]; var id = group.getAttribute('id'); var name= group.getElementsByTagName(Env.lang)[0].textContent; if (id != '0' && id != '1') view.addGroup(id, name); } }}//-------------------------------------------------------------------------------------Harvesting.prototype.refreshGroupsAdd = function(selId, groups){ for (var i=0; i<groups.length; i++) { var group = groups[i]; var id = group.getAttribute('id'); var name= group.getElementsByTagName(Env.lang)[0].textContent; if (id == selId) view.addGroup(id, name); }}//=====================================================================================Harvesting.prototype.addGroup = function(){ var groups = view.getSelectedGroups(); if (groups.length == 0) alert(xmlLoader.getText('pleaseSelectGroup')); else view.addEmptyGroupRows(groups);}//=====================================================================================//=== Private methods (or, at least, they should be so...)//=====================================================================================Harvesting.prototype.getTemplate = function(xml){ var type = view.getEditType(); if (type == 'geonetwork') return updateTemp_GN; if (type == 'webFolder') return updateTemp_WAF; throw 'getEditTemplate : Unknown type : '+ type;}//=====================================================================================var updateTemp_GN = ' <node id="{ID}" name="{NAME}" type="{TYPE}">'+ ' <site>'+' <host>{HOST}</host>'+' <port>{PORT}</port>'+' <servlet>{SERVLET}</servlet>'+' <account>'+' <use>{USE_ACCOUNT}</use>'+' <username>{USERNAME}</username>'+' <password>{PASSWORD}</password>'+' </account>'+' </site>'+ ' <searches>'+' {SEARCHES}'+' </searches>'+ ' <options>'+' <every>{EVERY}</every>'+' <createGroups>{CREATE_GROUPS}</createGroups>'+' <oneRunOnly>{ONE_RUN_ONLY}</oneRunOnly>'+' </options>'+' </node>';//=====================================================================================var searchTemp_GN = ' <search>'+' <freeText>{TEXT}</freeText>'+' <title>{TITLE}</title>'+' <abstract>{ABSTRACT}</abstract>'+' <keywords>{KEYWORDS}</keywords>'+' <digital>{DIGITAL}</digital>'+' <hardcopy>{HARDCOPY}</hardcopy>'+' <siteId>{SITE_ID}</siteId>'+' </search>';//=====================================================================================var updateTemp_WAF = ' <node id="{ID}" name="{NAME}" type="{TYPE}">'+ ' <site>'+' <url>{URL}</url>'+' <account>'+' <use>{USE_ACCOUNT}</use>'+' <username>{USERNAME}</username>'+' <password>{PASSWORD}</password>'+' </account>'+' </site>'+ ' <options>'+' <every>{EVERY}</every>'+' <oneRunOnly>{ONE_RUN_ONLY}</oneRunOnly>'+' <structure>{STRUCTURE}</structure>'+' <validate>{VALIDATE}</validate>'+' </options>'+' <privileges>'+' {PRIVIL_LIST}'+' </privileges>'+' </node>';//=====================================================================================var retrieveTemplate ='<request>'+' <url>{URL}</url>'+' <params>'+' <request>'+' <type>site</type>'+' <type>knownNodes</type>'+' </request>'+' </params>'+'</request>';//=====================================================================================
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?