⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fieldsgraction.java

📁 CRM源码This file describes some issues that should be implemented in future and how it should be imple
💻 JAVA
字号:
/* * Copyright 2006-2007 Queplix Corp. * * Licensed under the Queplix Public License, Version 1.1.1 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.queplix.com/solutions/commercial-open-source/queplix-public-license/ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */package com.queplix.core.modules.eqlext.actions;import com.queplix.core.error.GenericSystemException;import com.queplix.core.jxb.entity.Dataset;import com.queplix.core.jxb.entity.Efield;import com.queplix.core.jxb.entity.Entity;import com.queplix.core.modules.config.utils.EntityHelper;import com.queplix.core.modules.eql.EQLRes;import com.queplix.core.modules.eql.error.EQLException;import com.queplix.core.modules.eqlext.jxb.gr.ReqField;import com.queplix.core.modules.eqlext.jxb.gr.Reqs;import com.queplix.core.modules.eqlext.jxb.gr.ResField;import com.queplix.core.modules.eqlext.jxb.gr.ResHeader;import com.queplix.core.modules.eqlext.jxb.gr.ResHeaderField;import com.queplix.core.modules.eqlext.jxb.gr.ResRecord;import com.queplix.core.modules.eqlext.jxb.gr.types.OrderDirectionSType;import com.queplix.core.utils.StringHelper;import com.queplix.core.utils.xml.XMLBinding;import com.queplix.core.utils.xml.XMLFactory;import java.io.IOException;import java.io.StringWriter;import java.io.Writer;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/** * <p>Fields Get Records Action</p> * @author [ALB] Baranov Andrey * @version $Revision: 1.1.1.1 $ $Date: 2005/09/12 15:30:37 $ */public class FieldsGRAction    extends AbstractGRAction {    // ----------------------------------------------------- variables    ReqField[] reqFields;    Efield[] fields;    ResField[] groupByFields;    Map captionMap;    int groupBy = StringHelper.EMPTY_NUMBER;    // ----------------------------------------------------- getters    /**     * Construct response header     * @return ResHeader object     */    public ResHeader getHeader() {        ResHeader resHeader = getHeader( getFields(), getDatasets() );        // Set captions from request        for( int i = 0; i < resHeader.getResHeaderFieldCount(); i++ ) {            ResHeaderField resHeaderField = resHeader.getResHeaderField( i );            String entityName = resHeaderField.getEntity();            String fieldName = resHeaderField.getName();            String fieldId = EntityHelper.getFieldId( entityName, fieldName );            String caption = ( String ) captionMap.get( fieldId );            if( caption != null ) {                resHeaderField.setCaption( caption );            }        }        return resHeader;    }    /**     * Get array of Efield objects take part in query     * @return array of Efield objects     */    protected Efield[] getFields() {        return fields;    }    /**     * Get array of Dataset objects take part in query     * @return array of Dataset objects     */    protected Dataset[] getDatasets() {        return null;    }    // ----------------------------------------------------- protected methods    /*     * No javadoc     * @see #AbstractGRAction.init     */    protected void init( Reqs reqs ) {        super.init( reqs );        this.ignoreSendOnRequest = true;        this.reqFields = reqs.getReq().getReqField();        this.fields = new Efield[reqFields.length];        this.captionMap = new HashMap( reqFields.length );        for( int i = 0; i < reqFields.length; i++ ) {            ReqField reqField = reqFields[i];            String entityName = reqField.getEntity();            String fieldName = reqField.getName();            Entity entity = ctx.getEntityViewConfig( entityName );            fields[i] = EntityHelper.getEfield( fieldName, entity );            String caption = reqField.getCaption();            // add caption from request            if( !StringHelper.isEmpty( caption ) ) {                captionMap.put( fields[i].getId(), caption );            }            // set "group by" parameter - the column for groupping            if( groupBy == StringHelper.EMPTY_NUMBER &&                reqField.getGroup().booleanValue() ) {                groupBy = i;            }        }        if( groupBy > 0 ) {            // initailize special array to store last field for groupping in certain column            groupByFields = new ResField[groupBy];        }    }    /*     * No javadoc     * @see #AbstractGRAction.callEQLManager     */    protected EQLRes callEQLManager()        throws EQLException {        // build EQL query        if( getLogger().isDebugEnabled() ) {            DEBUG( "\n\nField EQL query:" );            DEBUG( "  Group By column index:" + groupBy );            DEBUG( "  EQL query:\n" + eqlQuery );            DEBUG( "  EQL Prepared statement:\n" + eqlPS );        }        // execute EQL query        return ctx.getEQLManager().select( ctx.getSC(), eqlQuery, eqlPS.reset() );    }    /*     * No javadoc     * @see AbstractGRAction#createResRecords     */    protected int callEQLManagerForCount()        throws EQLException {        return ctx.getEQLManager().selectCount( ctx.getSC(), getEQLRes() );    }    /*     * No javadoc     * @see #AbstractGRAction.createResRecords     */    protected ResRecord[] createResRecords( EQLRes eqlRes )        throws EQLException {        int recordCount = ( eqlRes == null ) ? 0 : eqlRes.size();        if( recordCount == 0 ) {            return null;        }        ResRecord[] resRecords = new ResRecord[recordCount];        for( int i = 0; i < recordCount; i++ ) {            // create new record            resRecords[i] = createResRecord( eqlRes, i );            // format it            formatResRecord( resRecords[i], i );        }        return resRecords;    }    /*     * No javadoc     * @see #AbstractGRAction.createResRecords     */    protected void createResRecords( EQLRes eqlRes, Writer writer )        throws EQLException {        int recordCount = ( eqlRes == null ) ? 0 : eqlRes.size();        if( recordCount == 0 ) {            return;        }        // XML binding        XMLBinding xmlBinding = XMLFactory.getXMLBinding();        // special temporary buffer        List tmpBuffer = new ArrayList();        for( int i = 0; i < recordCount; i++ ) {            // create new record            ResRecord resRecord = createResRecord( eqlRes, i );            // format it            boolean flush = formatResRecord( resRecord, i );            if( flush ) {                // flash records                flushTmpBuffer( xmlBinding, tmpBuffer );            }            // remember it in the temporary buffer            tmpBuffer.add( resRecord );        }        // flush the rest of records        flushTmpBuffer( xmlBinding, tmpBuffer );    }    /*     * No javadoc     * @see AbstractGRAction#buildEQLSelectClause     */    protected void buildEQLSelectClause( StringBuffer eql ) {        for( int i = 0; i < reqFields.length; i++ ) {            ReqField reqField = reqFields[i];            if( i > 0 ) {                eql.append( "," );            }            eql.append( reqField.getEntity() );            eql.append( "." );            eql.append( reqField.getName() );        }    }    /*     * No javadoc     * @see AbstractGRAction#buildEQLOrderClause     */    protected void buildEQLOrderClause( StringBuffer eql ) {        boolean orderByAdded = false;        int size = reqFields.length;        int j = 0;        for( int i = 0; i < size; i++ ) {            ReqField reqField = reqFields[i];            if( reqField.getSort().booleanValue() ) {                if( !orderByAdded ) {                    eql.append( " ORDER BY " );                    orderByAdded = true;                }                if( j > 0 ) {                    eql.append( "," );                }                eql.append( reqField.getEntity() );                eql.append( "." );                eql.append( reqField.getName() );                OrderDirectionSType orderType = reqField.getSortdir();                if( orderType != null ) {                    eql.append( " " ).append( orderType.toString().toUpperCase() );                }                j++;            }        }    }    // ----------------------------------------------------- private methods    /**     * Format records     * @param resRecord current record     * @param i position in response     * @return true if record differs from previos one     * @throws EQLException     */    private boolean formatResRecord( ResRecord resRecord, int i )        throws EQLException {        if( groupBy <= 0 ) {            return true;        }        boolean differ = false;        boolean equals = true;        for( int j = 0; j < groupBy; j++ ) {            ResField curField = resRecord.getResField( j );            String curValue = curField.getResFieldValue();            ResField prevField = groupByFields[j];            if( i > 0 ) {                String prevValue = prevField.getResFieldValue();                if( equals &&                    ( ( prevValue != null && curValue != null && prevValue.equals( curValue ) ) ||                      ( prevValue == null && curValue == null ) ) ) {                    // equal - set field to NULL                    curField.setResFieldValue( StringHelper.EMPTY_VALUE );                    if( !StringHelper.isEmpty( curField.getResFieldText() ) ) {                        curField.setResFieldText( StringHelper.EMPTY_VALUE );                    }                    // increase <code>recordspan</code> attribute                    Integer recordSpan = prevField.getRecordspan();                    if( recordSpan == null ) {                        recordSpan = new Integer( 1 );                    } else {                        recordSpan = new Integer( recordSpan.intValue() + 1 );                    }                    prevField.setRecordspan( recordSpan );                } else {                    // not equal                    equals = false;                }                if( j == 0 && !equals ) {                    // first column value was changed                    differ = true;                }            }            if( i == 0 || !equals ) {                // simply remember current field                groupByFields[j] = curField;            }        }        return differ;    }    // Flush temporary buffer.    private void flushTmpBuffer( XMLBinding xmlBinding, List tmpBuffer ) {        int size = tmpBuffer.size();        if( size == 0 ) {            return;        }        DEBUG( "Try to flush " + size + " records..." );        // init temp writer        StringWriter tmpWriter = new StringWriter();        for( int i = 0; i < size; i++ ) {            try {                ResRecord resRecord = ( ResRecord ) tmpBuffer.get( i );                // serialize ResRecord to temp writer                xmlBinding.javaToXml( resRecord, tmpWriter );                // write to the original writer without <?xml ...?>                writer.write( StringHelper.clearXml( tmpWriter.toString(), false ) );                // reset temp writer                tmpWriter.getBuffer().delete( 0, tmpWriter.getBuffer().length() - 1 );            } catch( IOException ex ) {                ERROR( ex );                throw new GenericSystemException( "IO exception: " + ex.getMessage(), ex );            }        }        tmpBuffer.clear();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -