def __search(self, searchField): indexer = self.services.getIndexer() portalQuery = self.services.getPortalManager().get(self.portal.getName()).getQuery() portalSearchQuery = self.services.getPortalManager().get(self.portal.getName()).getSearchQuery() # Security prep work current_user = self.page.authentication.get_username() security_roles = self.page.authentication.get_roles_list() security_filter = 'security_filter:("' + '" OR "'.join(security_roles) + '")' security_exceptions = 'security_exception:"' + current_user + '"' owner_query = 'owner:"' + current_user + '"' security_query = "(" + security_filter + ") OR (" + security_exceptions + ") OR (" + owner_query + ")" startRow = 0 numPerPage = 25 numFound = 0 req = SearchRequest(searchField) if portalQuery: req.addParam("fq", portalQuery) if portalSearchQuery: req.addParam("fq", portalSearchQuery) if not self.page.authentication.is_admin(): req.addParam("fq", security_query) objectIdList = [] while True: req.addParam("fq", 'item_type:"object"') req.addParam("rows", str(numPerPage)) req.addParam("start", str(startRow)) out = ByteArrayOutputStream() indexer.search(req, out) result = JsonSimpleConfig(ByteArrayInputStream(out.toByteArray())) docs = result.getJsonList("response", "docs") docIds = [] for doc in docs: docId = doc.getString(None, "storage_id") if docId is not None: docIds.append(docId) objectIdList.extend(docs) startRow += numPerPage numFound = int(result.getString(None, "response", "numFound")) if (startRow > numFound): break return objectIdList
def process(self): print " * settings.py: formData=%s" % self.vc("formData") result = "{}" portalManager = Services.getPortalManager() portal = portalManager.get(self.vc("portalId")) func = self.vc("formData").get("func") if func == "view-update": portal.setDescription(self.vc("formData").get("view-description")) portal.setQuery(self.vc("formData").get("view-query")) portal.setSearchQuery(self.vc("formData").get("view-search-query")) portal.setRecordsPerPage(int(self.vc("formData").get("view-records-per-page"))) portal.setFacetCount(int(self.vc("formData").get("view-facet-count"))) portal.setFacetDisplay(int(self.vc("formData").get("view-facet-display"))) portal.setFacetSort(self.vc("formData").get("view-facet-sort") is not None) portalManager.save(portal) elif func == "general-update": config = JsonSimpleConfig() email = StringUtils.trimToEmpty(self.vc("formData").get("general-email")) systemEmail = StringUtils.trimToEmpty(config.getString(None, ["email"])) if systemEmail != email: obj = config.writableSystemConfig() obj.put("email", self.vc("formData").get("general-email")) obj.put("configured", "true") config.storeSystemConfig() # mark restart Services.getHouseKeepingManager().requestUrgentRestart() else: print " * settings.py: email not updated: did not change" self.throw_error("Email address is the same! No change saved.") elif func == "facets-update": portal.getObject(["portal"]).remove("facet-fields") fields = self.vc("formData").getValues("field") labels = self.vc("formData").getValues("label") displays = self.vc("formData").getValues("display") deletes = self.vc("formData").getValues("delete") for i in range(0, len(fields)): field = fields[i] if deletes[i] == "false": node = portal.writeObject(["portal", "facet-fields", field]) node.put("label", labels[i]) node.put("display", displays[i]) portalManager.save(portal) elif func == "sort-update": portal.getObject(["portal"]).remove("sort-fields") default = self.vc("formData").get("default") if default: portal.setSortFieldDefault(default) order = self.vc("formData").get("order") if order: portal.setSortFieldDefaultOrder(order) fields = self.vc("formData").getValues("field") labels = self.vc("formData").getValues("label") deletes = self.vc("formData").getValues("delete") for i in range(0, len(fields)): field = fields[i] if deletes[i] == "false": node = portal.writeObject(["portal", "sort-fields"]) node.put(field, labels[i]) portalManager.save(portal) elif func == "watcher-update": configFile = self.getWatcherFile() if configFile is not None: json = JsonSimpleConfig(configFile) pathIds = self.vc("formData").get("pathIds").split(",") actives = self.vc("formData").getValues("watcher-active") if actives is None: actives = [] deletes = self.vc("formData").getValues("watcher-delete") if deletes is None: deletes = [] for pathId in pathIds: if pathId not in deletes: path = self.vc("formData").get("%s-path" % pathId) stopped = str(pathId not in actives).lower() watchDir = json.writeObject(["watcher", "watchDirs", path]) watchDir.put("ignoreFileFilter", self.vc("formData").get("%s-file" % pathId)) watchDir.put("ignoreDirectories", self.vc("formData").get("%s-dir" % pathId)) watchDir.put("stopped", stopped) json.writeArray(["watcher", "watchDirs", path, "cxtTags"]) writer = FileWriter(configFile) writer.write(json.toString(True)) writer.close() else: result = "The Watcher is not installed properly." elif func == "restore-default-config": # backup the file JsonSimpleConfig.backupSystemFile() # delete the file JsonSimpleConfig.getSystemFile().delete() # restore default JsonSimpleConfig.getSystemFile() # mark restart Services.getHouseKeepingManager().requestUrgentRestart() elif func == "housekeeping-update": config = JsonSimpleConfig() freq = StringUtils.trimToEmpty(self.vc("formData").get("housekeeping-timeout")) systemFreq = StringUtils.trimToEmpty(config.getString(None, ["portal", "houseKeeping", "config", "frequency"])) result = "House Keeper refreshed" if systemFreq != freq: # Get writeable access to underlying system sysConfig = JsonSimple(config.writableSystemConfig()) # Modify the house keeping node hkConfig = sysConfig.writeObject(["portal", "houseKeeping", "config"]) hkConfig.put("frequency", freq) # Write the underlying config back to disk config.storeSystemConfig() result = "Frequency updated, refreshing House Keeper" # Refresh the HouseKeeper message = JsonObject() message.put("type", "refresh") Services.getHouseKeepingManager().sendMessage(message.toString()) self.writer.println(result) self.writer.close()
class BatchprocessData: def __init__(self): pass def __activate__(self, context): self.formData = context["formData"] self.response = context["response"] self.services = context["Services"] self.page = context["page"] self.portal = self.page.getPortal() self.vc = context["toolkit"] func = self.formData.get("func") if func == "num-modified": writer = self.response.getPrintWriter("text/plain; charset=UTF-8") writer.println(self.numberOfModifiedRecord()) writer.close() def renderUpdateForm(self): return self.__createBatchForm("update") def renderExportForm(self): return self.__createBatchForm("export") def __createBatchForm(self, processName): self.formRenderer = self.vc.getFormRenderer() form = "<form id='%s-form' method='post'>\n" \ "<fieldset class='login'>\n" \ "<legend>Batch %s script file</legend>\n" % (processName, processName) form += self.formRenderer.ajaxFluidErrorHolder("%s-script-file" % processName) + "\n" if self.__scriptList(processName) != {}: form += self.formRenderer.renderFormSelect("%s-script-file" % processName, \ "Batch %s script:" % processName, self.__scriptList(processName)) form += "<div><br/>" form += self.formRenderer.renderFormElement("%s-upload" % processName, "button", "", "Batch %s" % processName) form += self.formRenderer.renderFormElement("%s-cancel" % processName, "button", "", "Cancel") form += self.formRenderer.ajaxProgressLoader("%s-script-file" % processName) form += "</div>" else: form += "<div>There is no script available to do batch processing.</div>" form += "</fieldset></form>\n" return form def __scriptList(self, processName): scriptDir = "%s/batch-process/%s" % (os.environ.get("TF_HOME"), processName) scriptDic = {} if os.path.isdir(scriptDir): scriptFiles = os.listdir(scriptDir) if scriptFiles: for script in scriptFiles: scriptFilePath = "%s/%s" % (scriptDir, script) scriptDic[scriptFilePath] = script return scriptDic def numberOfModifiedRecord(self): indexer = self.services.getIndexer() portalQuery = self.services.getPortalManager().get(self.portal.getName()).getQuery() portalSearchQuery = self.services.getPortalManager().get(self.portal.getName()).getSearchQuery() # Security prep work current_user = self.page.authentication.get_username() security_roles = self.page.authentication.get_roles_list() security_filter = 'security_filter:("' + '" OR "'.join(security_roles) + '")' security_exceptions = 'security_exception:"' + current_user + '"' owner_query = 'owner:"' + current_user + '"' security_query = "(" + security_filter + ") OR (" + security_exceptions + ") OR (" + owner_query + ")" req = SearchRequest("modified:true") req.setParam("fq", 'item_type:"object"') if portalQuery: req.addParam("fq", portalQuery) if portalSearchQuery: req.addParam("fq", portalSearchQuery) req.addParam("fq", "") req.setParam("rows", "0") if not self.page.authentication.is_admin(): req.addParam("fq", security_query) out = ByteArrayOutputStream() indexer.search(req, out) self.__result = JsonSimpleConfig(ByteArrayInputStream(out.toByteArray())) return self.__result.getString(None, "response", "numFound")
class SettingsData: def __init__(self): self.sysConfig = JsonSimpleConfig() def __activate__(self, context): self.velocityContext = context self.__portal = None action = self.vc("formData").get("verb") if action == "create_view": fq = [q for q in self.vc("sessionState").get("fq") if q != 'item_type:"object"'] if fq == []: name = "new" desc = "New View" query = "" else: name = "" desc = "" query = str(" ".join(fq)) newPortal = Portal(name, desc, query) newPortal.setFacetFields(Services.portalManager.default.facetFields) newPortal.setQuery(query) self.__portal = newPortal else: portalName = self.vc("formData").get("portalName") print " * settings.py: portalName=%s, portalId=%s" % (portalName, self.vc("portalId")) if portalName is None or (self.vc("formData").get("portalAction") == "Cancel"): self.__portal = Services.portalManager.get(self.vc("portalId")) else: self.__portal = Portal() self.__portal.name = portalName Services.portalManager.add(self.__portal) if self.vc("formData").get("portalAction") == "Update": self.__updatePortal() if self.vc("formData").get("emailAction") == "Update": self.__updateEmail() # Get from velocity context def vc(self, index): if self.velocityContext[index] is not None: return self.velocityContext[index] else: log.error("ERROR: Requested context entry '" + index + "' doesn't exist") return None def isSelected(self, category): selected = self.vc("sessionState").get("settingsCategory") if category == selected: return "selected" return "" def __updatePortal(self): self.__portal.name = self.vc("formData").get("portalName") self.__portal.description = self.vc("formData").get("portalDescription") self.__portal.query = self.vc("formData").get("portalQuery") self.__portal.recordsPerPage = int(self.vc("formData").get("portalRecordsPerPage")) self.__portal.facetCount = int(self.vc("formData").get("portalFacetLimit")) self.__portal.facetSort = self.vc("formData").get("portalFacetSort") is not None facetFields = self.__portal.facetFields facetFields.clear() size = int(self.vc("formData").get("portalFacetSize")) for i in range(1,size+2): nameKey = "portalFacet_%s_name" % i labelKey = "portalFacet_%s_label" % i name = self.vc("formData").get(nameKey) label = self.vc("formData").get(labelKey) print "facet: key: %s, label: %s" % (name, label) if name is not None and label is not None: facetFields.put(name, label) self.__portal.setFacetFields(facetFields) sortFields = self.__portal.sortFields sortFields.clear() size = int(self.vc("formData").get("portalSortSize")) for i in range(1,size+2): nameKey = "portalSort_%s_name" % i labelKey = "portalSort_%s_label" % i name = self.vc("formData").get(nameKey) label = self.vc("formData").get(labelKey) print "sort: key: %s, label: %s" % (name, label) if name is not None and label is not None: sortFields.put(name, label) self.__portal.setSortFields(sortFields) Services.portalManager.save(self.__portal) def getPortal(self): return self.__portal def getIndexerPlugins(self): return PluginManager.getIndexerPlugins() def getStoragePlugins(self): return PluginManager.getStoragePlugins() def getHarvesterPlugins(self): return PluginManager.getHarvesterPlugins() def getTransformerPlugins(self): return PluginManager.getTransformerPlugins() def getWatcherConfig(self): watcherPath = self.sysConfig.getString("${fascinator.home}/watcher)", ["watcher", "path"]) configFile = File("%s/app/config.json" % watcherPath) if configFile.exists(): return JsonSimpleConfig(configFile) return None def getEmail(self): return self.sysConfig.getString(None, ["email"]) def getTimeout(self): return self.sysConfig.getString(None, ["portal", "houseKeeping", "config", "frequency"]) def getFacetDisplays(self): facetDisplays = self.__portal.getObject(["portal", "facet-displays"]) if facetDisplays is None or facetDisplays.isEmpty(): facetDisplays = HashMap() facetDisplays.put("list", "List menu") facetDisplays.put("tree", "Dynamic tree") return facetDisplays