Beispiel #1
0
        /// <summary>
        /// Assigns field readers to report fields.
        /// </summary>
        /// <param name="useIndexOnSingleReturn">  whether to use indexed addressing even when the query has only one return column </param>
        /// <returns> a report field name to field reader mapping </returns>
        /// <seealso cref= FieldReader </seealso>
        protected internal virtual IDictionary <string, FieldReader> assignReaders(bool useIndexOnSingleReturn)
        {
            IDictionary <string, FieldReader> readers = new Dictionary <string, FieldReader>();

            JRField[] fields      = queryExecuter.Dataset.Fields;
            Type[]    returnTypes = queryExecuter.ReturnTypes;
            string[]  aliases     = queryExecuter.ReturnAliases;

            IDictionary <string, int> aliasesMap = new Dictionary <string, int>();

            if (aliases != null)
            {
                for (int i = 0; i < aliases.Length; i++)
                {
                    aliasesMap[aliases[i]] = Convert.ToInt32(i);
                }
            }

            if (returnTypes.Length == 1)
            {
                if (returnTypes[0].EntityType || returnTypes[0].ComponentType)
                {
                    for (int i = 0; i < fields.Length; i++)
                    {
                        JRField field = fields[i];
                        readers[field.Name] = getFieldReaderSingleReturn(aliasesMap, field, useIndexOnSingleReturn);
                    }
                }
                else
                {
                    if (fields.Length > 1)
                    {
                        throw new JRRuntimeException("The HQL query returns only one non-entity and non-component result but there are more than one fields.");
                    }

                    if (fields.Length == 1)
                    {
                        JRField field = fields[0];
                        if (useIndexOnSingleReturn)
                        {
                            readers[field.Name] = new IndexFieldReader(0);
                        }
                        else
                        {
                            readers[field.Name] = new IdentityFieldReader();
                        }
                    }
                }
            }
            else
            {
                for (int i = 0; i < fields.Length; i++)
                {
                    JRField field = fields[i];
                    readers[field.Name] = getFieldReader(returnTypes, aliasesMap, field);
                }
            }

            return(readers);
        }
Beispiel #2
0
 public string getPropertyName(JRField field)
 {
     if (field.Description == null)
     {
         return(field.Name);
     }
     return(field.Description);
 }
Beispiel #3
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: @Override public Object getFieldValue(net.sf.jasperreports.engine.JRField jrField) throws net.sf.jasperreports.engine.JRException
        public override object getFieldValue(JRField jrField)
        {
            FieldReader reader = fieldReaders[jrField.Name];

            if (reader == null)
            {
                throw new JRRuntimeException("No filed reader for " + jrField.Name);
            }
            return(reader.getFieldValue(currentReturnValue));
        }
Beispiel #4
0
 public string getPropertyName(JRField field)
 {
     return(field.Name);
 }
Beispiel #5
0
 protected internal virtual string getFieldMapping(JRField field)
 {
     return((useFieldDescription ? FIELD_DESCRIPTION_PROPERTY_NAME_PROVIDER : FIELD_NAME_PROPERTY_NAME_PROVIDER).getPropertyName(field));
 }
Beispiel #6
0
        protected internal virtual FieldReader getFieldReader(Type[] returnTypes, IDictionary <string, int> aliasesMap, JRField field)
        {
            FieldReader reader;

            string fieldMapping = getFieldMapping(field);
            int?   fieldIdx     = aliasesMap[fieldMapping];

            if (fieldIdx == null)
            {
                int firstNestedIdx = fieldMapping.IndexOf(PropertyUtils.NESTED_DELIM);

                if (firstNestedIdx < 0)
                {
                    throw new JRRuntimeException("Unknown HQL return alias \"" + fieldMapping + "\".");
                }

                string fieldAlias    = fieldMapping.Substring(0, firstNestedIdx);
                string fieldProperty = fieldMapping.Substring(firstNestedIdx + 1);

                fieldIdx = aliasesMap[fieldAlias];
                if (fieldIdx == null)
                {
                    throw new JRRuntimeException("The HQL query does not have a \"" + fieldAlias + "\" alias.");
                }

                Type type = returnTypes[fieldIdx.Value];
                if (!type.EntityType && !type.ComponentType)
                {
                    throw new JRRuntimeException("The HQL query does not have a \"" + fieldAlias + "\" alias.");
                }

                reader = new IndexPropertyFieldReader(fieldIdx.Value, fieldProperty);
            }
            else
            {
                reader = new IndexFieldReader(fieldIdx.Value);
            }

            return(reader);
        }
Beispiel #7
0
        protected internal virtual FieldReader getFieldReaderSingleReturn(IDictionary <string, int> aliasesMap, JRField field, bool useIndex)
        {
            FieldReader reader;

            string fieldMapping = getFieldMapping(field);

            if (aliasesMap.ContainsKey(fieldMapping))
            {
                if (useIndex)
                {
                    reader = new IndexFieldReader(0);
                }
                else
                {
                    reader = new IdentityFieldReader();
                }
            }
            else
            {
                int firstNestedIdx = fieldMapping.IndexOf(PropertyUtils.NESTED_DELIM);

                if (firstNestedIdx >= 0 && aliasesMap.ContainsKey(fieldMapping.Substring(0, firstNestedIdx)))
                {
                    fieldMapping = fieldMapping.Substring(firstNestedIdx + 1);
                }

                if (useIndex)
                {
                    reader = new IndexPropertyFieldReader(0, fieldMapping);
                }
                else
                {
                    reader = new PropertyFieldReader(fieldMapping);
                }
            }

            return(reader);
        }