/** * Returns either Object (if result is supposed to be single-value) or Collection<X> (if result is supposed to be multi-value) */ public static Object getStaticOutput(ExpressionType expressionType, PrismPropertyDefinition outputDefinition, String contextDescription, ExpressionReturnMultiplicityType preferredMultiplicity, PrismContext prismContext) throws SchemaException { PrismProperty<?> output = getPropertyStatic(expressionType, outputDefinition, contextDescription, prismContext); ExpressionReturnMultiplicityType multiplicity = preferredMultiplicity; if (expressionType.getReturnMultiplicity() != null) { multiplicity = expressionType.getReturnMultiplicity(); } else if (output != null && output.size() > 1) { multiplicity = ExpressionReturnMultiplicityType.MULTI; } if (output == null) { switch (multiplicity) { case MULTI: return new ArrayList<>(0); case SINGLE: return null; default: throw new IllegalStateException("Unknown return type "+multiplicity); } } else { Collection<?> realValues = output.getRealValues(); switch (multiplicity) { case MULTI: return realValues; case SINGLE: return MiscUtil.extractSingleton(realValues); default: throw new IllegalStateException("Unknown return type "+multiplicity); } } }
appendPropertyIfNotNull(sb, "trace", expressionType.isTrace()); appendPropertyIfNotNull(sb, "variable", expressionType.getVariable()); appendPropertyIfNotNull(sb, "returnMultiplicity", expressionType.getReturnMultiplicity()); appendPropertyIfNotNull(sb, "allowEmptyValues", expressionType.isAllowEmptyValues()); appendPropertyIfNotNull(sb, "queryInterpretationOfNoValue", expressionType.getQueryInterpretationOfNoValue());
if (returnTypeDef == null) { returnTypeDef = (D) prismContext.definitionFactory().createPropertyDefinition(SchemaConstantsGenerated.C_VALUE, returnType); returnTypeDef.toMutable().setMaxOccurs(functionToExecute.getReturnMultiplicity() != null && functionToExecute.getReturnMultiplicity() == ExpressionReturnMultiplicityType.SINGLE ? 1 : -1);
outputDefinition = (D) prismContext.definitionFactory().createPropertyDefinition(SchemaConstantsGenerated.C_VALUE, returnType); if (expressionType.getReturnMultiplicity() != null && expressionType.getReturnMultiplicity() == ExpressionReturnMultiplicityType.MULTI) { outputDefinition.toMutable().setMaxOccurs(-1); } else {
clone.returnMultiplicity = ((this.returnMultiplicity == null)?null:this.getReturnMultiplicity());
lhsReturnMultiplicity = this.getReturnMultiplicity(); ExpressionReturnMultiplicityType rhsReturnMultiplicity; rhsReturnMultiplicity = that.getReturnMultiplicity(); if (!strategy.equals(LocatorUtils.property(thisLocator, "returnMultiplicity", lhsReturnMultiplicity), LocatorUtils.property(thatLocator, "returnMultiplicity", rhsReturnMultiplicity), lhsReturnMultiplicity, rhsReturnMultiplicity)) { return false;
theReturnMultiplicity = this.getReturnMultiplicity(); currentHashCode = strategy.hashCode(LocatorUtils.property(locator, "returnMultiplicity", theReturnMultiplicity), currentHashCode, theReturnMultiplicity);
this.returnMultiplicity = ((o.returnMultiplicity == null)?null:o.getReturnMultiplicity());