def getLabel(self, jsonFile, key, listKey, valKey, labelKey): value = self.metadata.get(key) jsonLabelFile = System.getProperty("fascinator.home") + jsonFile jsonLabel = JsonSimple(File(jsonLabelFile)) entries = jsonLabel.getJsonArray() # the structure of the json file is fun and complicated if entries is None: entries = jsonLabel.getArray(listKey) else: valKey = "value" labelKey = "label" for entry in entries: entryJson = JsonSimple(entry) if value == entryJson.getString("", valKey): return entryJson.getString("", labelKey) return None
def __getPayloadJsonArray(self, oid, payloadName): """ Get the content (JsonArray) of a payload return the JSONArray or an empty (new) one """ storedObj = self.Services.getStorage().getObject(oid) payloadList = storedObj.getPayloadIdList() if payloadList.contains(payloadName): # print "Updating existing" payloadObj = storedObj.getPayload(payloadName) payloadJson = JsonSimple(payloadObj.open()) objList = payloadJson.getJsonArray() else: # print "Creating new one" objList = JSONArray() return objList
def getLabel(self, jsonFile, key): value = self.metadata.get(key) jsonLabelFile = System.getProperty("fascinator.home") + jsonFile jsonF = JsonSimple(File(jsonLabelFile)) entries = jsonF.getJsonArray() if entries is None: entries = jsonF.getArray('results') if entries is None: self.log.debug("Unknown data source format: JSON file {} or its 'results' has no array.", jsonLabelFile) return None for entry in entries: entryJson = JsonSimple(entry) if value == entryJson.getString("", "id"): return entryJson.getString("", "label") elif value == entryJson.getString("", "value"): return entryJson.getString("", "label") return None
def getLabel(self, jsonFile, key): value = self.metadata.get(key) jsonLabelFile = System.getProperty("fascinator.home") + jsonFile jsonF = JsonSimple(File(jsonLabelFile)) entries = jsonF.getJsonArray() if entries is None: entries = jsonF.getArray('results') if entries is None: self.log.debug( "Unknown data source format: JSON file {} or its 'results' has no array.", jsonLabelFile) return None for entry in entries: entryJson = JsonSimple(entry) if value == entryJson.getString("", "id"): return entryJson.getString("", "label") elif value == entryJson.getString("", "value"): return entryJson.getString("", "label") return None
class LaunchData: def __init__(self): pass def __activate__(self, context): self.log = context["log"] self.request = context["request"] self.sessionState = context["sessionState"] self.sessionState.set("username", "admin") processingSet = self.request.getParameter("processingSet") self.procMsg = None # read configuration and trigger processing stream sets # storing the return object on the map configFilePath = FascinatorHome.getPath( "process") + "/processConfig.json" procConfigFile = File(configFilePath) if procConfigFile.exists() == True: self.dataMap = HashMap() self.dataMap.put("indexer", context['Services'].getIndexer()) self.procConfigJson = JsonSimple(procConfigFile) for configObj in self.procConfigJson.getJsonArray(): configJson = JsonSimple(configObj) procId = configJson.getString("", "id") if processingSet is not None: if procId == processingSet: self.execProcSet(procId, configJson) else: self.execProcSet(procId, configJson) if self.procMsg is None: self.procMsg = "Processing complete!" else: self.procMsg = "Configuration file does not exist: " + configFilePath def execProcSet(self, procId, configJson): self.execProcessors(procId, configJson, self.dataMap, "pre") self.execProcessors(procId, configJson, self.dataMap, "main") self.execProcessors(procId, configJson, self.dataMap, "post") def execProcessors(self, procId, configJson, dataMap, stageName): for procObj in configJson.getArray(stageName): procJson = JsonSimple(procObj) procClassName = procJson.getString("", "class") procConfigPath = procJson.getString("", "config") procInputKey = procJson.getString("", "inputKey") procOutputKey = procJson.getString("", "outputKey") procClass = Class.forName(procClassName) procInst = procClass.newInstance() procMethod = procClass.getMethod( "process", self.get_class("java.lang.String"), self.get_class("java.lang.String"), self.get_class("java.lang.String"), self.get_class("java.lang.String"), self.get_class("java.lang.String"), self.get_class("java.util.HashMap")) procMethod.invoke(procInst, procId, procInputKey, procOutputKey, stageName, procConfigPath, dataMap) # Standard Java Class forName seems to have issues at least with Interfaces. # This is an alternative method taken from http://stackoverflow.com/questions/452969/does-python-have-an-equivalent-to-java-class-forname def get_class(self, kls): parts = kls.split('.') module = ".".join(parts[:-1]) m = __import__(module) for comp in parts[1:]: m = getattr(m, comp) return m def getProcMsg(self): return self.procMsg
class LaunchData: def __init__(self): pass def __activate__(self, context): self.log = context["log"] self.request = context["request"] self.sessionState = context["sessionState"] self.sessionState.set("username","admin") processingSet = self.request.getParameter("processingSet") self.procMsg = None # read configuration and trigger processing stream sets # storing the return object on the map configFilePath = FascinatorHome.getPath("process")+"/processConfig.json" procConfigFile = File(configFilePath) if procConfigFile.exists() == True: self.dataMap = HashMap() self.dataMap.put("indexer", context['Services'].getIndexer()) self.procConfigJson = JsonSimple(procConfigFile) for configObj in self.procConfigJson.getJsonArray(): configJson = JsonSimple(configObj) procId = configJson.getString("", "id") if processingSet is not None: if procId == processingSet: self.execProcSet(procId, configJson) else: self.execProcSet(procId, configJson) if self.procMsg is None: self.procMsg = "Processing complete!" else: self.procMsg = "Configuration file does not exist: " + configFilePath def execProcSet(self, procId, configJson): self.execProcessors(procId, configJson, self.dataMap, "pre") self.execProcessors(procId, configJson, self.dataMap, "process") self.execProcessors(procId, configJson, self.dataMap, "post") def execProcessors(self, procId, configJson, dataMap, stageName): for procObj in configJson.getArray(stageName): procJson = JsonSimple(procObj) procClassName = procJson.getString("", "class") procConfigPath = procJson.getString("", "config") procInputKey = procJson.getString("", "inputKey") procOutputKey = procJson.getString("", "outputKey") procClass = Class.forName(procClassName) procInst = procClass.newInstance() procMethod = procClass.getMethod("process", self.get_class("java.lang.String"),self.get_class("java.lang.String"), self.get_class("java.lang.String"),self.get_class("java.lang.String"),self.get_class("java.lang.String"), self.get_class("java.util.HashMap")) procMethod.invoke(procInst, procId, procInputKey, procOutputKey, stageName, procConfigPath, dataMap) # Standard Java Class forName seems to have issues at least with Interfaces. # This is an alternative method taken from http://stackoverflow.com/questions/452969/does-python-have-an-equivalent-to-java-class-forname def get_class(self, kls): parts = kls.split('.') module = ".".join(parts[:-1]) m = __import__( module ) for comp in parts[1:]: m = getattr(m, comp) return m def getProcMsg(self): return self.procMsg