/** * Get a new ticket. * * @param session HttpSession * @return String * @throws IOException Signals that an I/O exception has occurred. */ public String readTicket(HttpSession session) throws IOException { logger.debug("IN"); String ticket = null; String spagoBiServerURL = EnginConf.getInstance().getSpagoBiServerUrl(); logger.debug("Read spagoBiServerURL=" + spagoBiServerURL); SourceBean engineConfig = EnginConf.getInstance().getConfig(); SourceBean sourceBeanConf = (SourceBean) engineConfig.getAttribute("FILTER_RECEIPT"); String filterReceipt = (String) sourceBeanConf.getCharacters(); logger.debug("Read filterReceipt=" + filterReceipt); filterReceipt = spagoBiServerURL + filterReceipt; Assertion assertion = (Assertion) session.getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION); ticket = assertion.getPrincipal().getProxyTicketFor(filterReceipt); logger.debug("OUT.ticket=" + ticket); return ticket; }
public String getResourcePath() { if (resPath == null) { try { String jndiName = SingletonConfig.getInstance().getConfigValue("SPAGOBI.RESOURCE_PATH_JNDI_NAME"); resPath = SpagoBIUtilities.readJndiResource(jndiName); } catch (Throwable t) { logger.debug(t); resPath = EnginConf.getInstance().getResourcePath(); } } if (resPath == null) { throw new SpagoBIRuntimeException("Resource path not found!!!"); } return resPath; }
/** * Substitutes the parameters with sintax "$P{attribute_name}" with the correspondent value in the * string passed at input. Only for datatset parameters, had to duplicate to handle null values, * not throw an exception but put null! * * @param statement The string to be modified (tipically a query) * @param userProfile The IEngUserProfile object * @param profileAttributeStartIndex The start index for query parsing (useful for recursive * calling) * @param surroundWithQuotes Flag: if true, the replacement will be surrounded by quotes if they * are missing * @return The statement with parameters replaced by their values. * @throws Exception */ private static String substituteDatasetParametersInString( String statement, Map valuesMap, Map parTypeMap, int profileAttributeStartIndex, boolean surroundWithQuotes) throws Exception { logger.debug("IN"); int profileAttributeEndIndex = statement.indexOf("}", profileAttributeStartIndex); if (profileAttributeEndIndex == -1) throw new Exception("Not closed profile attribute: '}' expected."); if (profileAttributeEndIndex < profileAttributeEndIndex) throw new Exception("Not opened profile attribute: '$P{' expected."); String attribute = statement.substring(profileAttributeStartIndex + 3, profileAttributeEndIndex).trim(); String dequotePrefix = "_dequoted"; if (attribute.endsWith(dequotePrefix)) { surroundWithQuotes = false; } int startConfigIndex = attribute.indexOf("("); String attributeName = ""; String prefix = ""; String split = ""; String suffix = ""; boolean attributeExcpetedToBeMultiValue = false; if (startConfigIndex != -1) { // the parameter is expected to be multivalue attributeExcpetedToBeMultiValue = true; int endConfigIndex = attribute.length() - 1; if (attribute.charAt(endConfigIndex) != ')') throw new Exception( "Sintax error: \")\" missing. The expected sintax for " + "parameter is $P{parameters} for singlevalue parameters. "); String configuration = attribute.substring(startConfigIndex + 1, endConfigIndex); // check the configuration content and add empty prefix/suffix as default if they are null if (configuration.equals(";,;")) configuration = " ;,; "; String[] configSplitted = configuration.split(";"); if (configSplitted == null || configSplitted.length != 3) throw new Exception( "Sintax error. The expected sintax for parameters" + "or $P{parameter} for singlevalue parameter. 'parameterName' must not contain '(' characters. " + "The (prefix;split;suffix) is not properly configured"); prefix = configSplitted[0]; split = configSplitted[1]; suffix = configSplitted[2]; logger.debug( "Multi-value parameter configuration found: prefix: '" + prefix + "'; split: '" + split + "'; suffix: '" + suffix + "'."); attributeName = attribute.substring(0, startConfigIndex); logger.debug("Expected multi-value parameter name: '" + attributeName + "'"); } else { attributeName = attribute; logger.debug("Expected single-value parameter name: '" + attributeName + "'"); } String value = (String) valuesMap.get(attributeName); boolean isNullValue = false; if (value == null) { isNullValue = true; value = "null"; } if (value.startsWith("' {")) value = value.substring(1); if (value.endsWith("}'")) value = value.substring(0, value.indexOf("}'") + 1); value = value.trim(); logger.debug("Parameter value found: " + value); String replacement = null; String newListOfValues = null; // if is specified a particular type for the parameter can add '' in case of String or Date String parType = null; if (parTypeMap != null) { parType = (String) parTypeMap.get(attributeName); } if (parType == null) parType = new String(""); if (attributeExcpetedToBeMultiValue) { if (value.startsWith("{")) { // the parameter is multi-value String[] values = findAttributeValues(value); logger.debug("N. " + values.length + " parameter values found: '" + values + "'"); // newListOfValues = values[0]; newListOfValues = ((values[0].startsWith(prefix))) ? "" : prefix + values[0] + ((values[0].endsWith(suffix)) ? "" : suffix); for (int i = 1; i < values.length; i++) { // newListOfValues = newListOfValues + split + values[i]; String singleValue = ((values[i].startsWith(prefix))) ? "" : prefix + values[i] + ((values[i].endsWith(suffix)) ? "" : suffix); singleValue = checkParType(singleValue, parType, attribute); newListOfValues = newListOfValues + split + singleValue; } } else { logger.warn( "The attribute value has not the sintax of a multi value parameter; considering it as a single value."); newListOfValues = value; } } else { if (value.startsWith("{")) { // the profile attribute is multi-value logger.warn( "The attribute value seems to be a multi value parameter; trying considering it as a multi value using its own splitter and no prefix and suffix."); try { // checks the sintax String[] values = findAttributeValues(value); newListOfValues = values[0]; for (int i = 1; i < values.length; i++) { newListOfValues = newListOfValues + value.charAt(1) + values[i]; } } catch (Exception e) { logger.error( "The attribute value does not respect the sintax of a multi value attribute; considering it as a single value.", e); newListOfValues = value; } } else { newListOfValues = value; } } String nullValueString = null; if (newListOfValues.equals("") || newListOfValues.equals("''") || newListOfValues.equals("null")) { try { nullValueString = SingletonConfig.getInstance().getConfigValue("DATA_SET_NULL_VALUE"); if (nullValueString != null) { newListOfValues = "'" + nullValueString + "'"; } } catch (Throwable e) { // try to read engine_config settings nullValueString = ((SourceBean) EnginConf.getInstance().getConfig().getAttribute("DATA_SET_NULL_VALUE")) .getCharacters(); if (nullValueString != null) { newListOfValues = "'" + nullValueString + "'"; } } } // replacement = prefix + newListOfValues + suffix; replacement = ((newListOfValues.startsWith(prefix)) ? "" : prefix) + newListOfValues + ((newListOfValues.endsWith(suffix)) ? "" : suffix); if (!attributeExcpetedToBeMultiValue) replacement = checkParType(replacement, parType, attribute); // // if is specified a particular type for the parameter can add '' in case of String or Date // String parType=null; // if(parTypeMap!=null){ // parType=(String)parTypeMap.get(attributeName); // } // if(parType==null)parType=new String(""); // // // // check if numbers are number otherwise throw exception // try{ // if(parType.equalsIgnoreCase("NUMBER")){ // replacement = replacement.replaceAll("\'", ""); // Double double1 = Double.valueOf(replacement); // } // } // catch (NumberFormatException e) { // String me = e.getMessage(); // me += " - attribute "+attribute+" should be of number type"; // NumberFormatException numberFormatException = new NumberFormatException(attribute); // numberFormatException.setStackTrace(e.getStackTrace()); // throw numberFormatException; // } // // // check when type is RAW that there are not '' surrounding values (in case remove them) // // remotion done here in order to not modify SpagoBI Analytical driver of type string // handling // try{ // if(parType.equalsIgnoreCase("RAW")){ // logger.debug("Parmaeter is Raw type, check if there are '' and remove them"); // if(replacement.length()>2){ // if(replacement.startsWith("'")){ // logger.debug("first character is ', remove"); // replacement = replacement.substring(1); // } // if(replacement.endsWith("'")){ // logger.debug("last character is ', remove"); // replacement = replacement.substring(0, replacement.length()-1); // } // } // } // } // catch (Exception e) { // logger.error("Error in removing the '' in value "+replacement+" do not substitute them"); // } // // if (surroundWithQuotes || parType.equalsIgnoreCase("STRING") || // parType.equalsIgnoreCase("DATE")) { // if(!isNullValue){ // if (!replacement.startsWith("'")) replacement = "'" + replacement; // if (!replacement.endsWith("'")) replacement = replacement + "'"; // } // } attribute = quote(attribute); statement = statement.replaceAll("\\$P\\{" + attribute + "\\}", replacement); // statement = statement.replaceAll("\\P\\{" + attribute + "\\}", replacement); /* * profileAttributeStartIndex = statement.indexOf("$P{", profileAttributeEndIndex-1); if (profileAttributeStartIndex != -1) statement = * substituteParametersInString(statement, valuesMap, profileAttributeStartIndex); */ logger.debug("OUT"); return statement; }