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

📄 modelscreen.java

📁 Sequoia ERP是一个真正的企业级开源ERP解决方案。它提供的模块包括:电子商务应用(e-commerce), POS系统(point of sales),知识管理,存货与仓库管理
💻 JAVA
字号:
/* * $Id: ModelScreen.java 7061 2006-03-24 04:37:21Z jonesde $ * * Copyright (c) 2004-2005 The Open For Business Project - www.ofbiz.org * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * THE USE OR OTHER DEALINGS IN THE SOFTWARE. */package org.ofbiz.widget.screen;import java.io.Serializable;import java.io.Writer;import java.util.Map;import org.ofbiz.base.util.Debug;import org.ofbiz.base.util.GeneralException;import org.ofbiz.base.util.UtilValidate;import org.ofbiz.base.util.UtilXml;import org.ofbiz.base.util.collections.FlexibleMapAccessor;import org.ofbiz.base.util.string.FlexibleStringExpander;import org.ofbiz.entity.GenericDelegator;import org.ofbiz.entity.GenericEntity;import org.ofbiz.entity.GenericEntityException;import org.ofbiz.entity.transaction.TransactionUtil;import org.ofbiz.service.LocalDispatcher;import org.w3c.dom.Element;/** * Widget Library - Screen model class * * @author     <a href="mailto:jonesde@ofbiz.org">David E. Jones</a> * @version    $Rev: 7061 $ * @since      3.1 */public class ModelScreen implements Serializable {    public static final String module = ModelScreen.class.getName();    protected String name;    protected String sourceLocation;    protected FlexibleStringExpander transactionTimeoutExdr;    protected Map modelScreenMap;        protected ModelScreenWidget.Section section;    // ===== CONSTRUCTORS =====    /** Default Constructor */    protected ModelScreen() {}    /** XML Constructor */    public ModelScreen(Element screenElement, Map modelScreenMap, String sourceLocation) {        this.sourceLocation = sourceLocation;        this.name = screenElement.getAttribute("name");        this.transactionTimeoutExdr = new FlexibleStringExpander(screenElement.getAttribute("transaction-timeout"));        this.modelScreenMap = modelScreenMap;        // read in the section, which will read all sub-widgets too        Element sectionElement = UtilXml.firstChildElement(screenElement, "section");        if (sectionElement == null) {            throw new IllegalArgumentException("No section found for the screen definition with name: " + this.name);        }        this.section = new ModelScreenWidget.Section(this, sectionElement);    }    /**     * Renders this screen to a String, i.e. in a text format, as defined with the     * ScreenStringRenderer implementation.     *     * @param writer The Writer that the screen text will be written to     * @param context Map containing the screen context; the following are     *   reserved words in this context:     *    - parameters (contains any special initial parameters coming in)     *    - userLogin (if a user is logged in)     *    - autoUserLogin (if a user is automatically logged in, ie no password has been entered)     *    - formStringRenderer     *    - request, response, session, application (special case, only in HTML contexts, etc)      *    - delegator, dispatcher, security     *    - null (represents a null field value for entity operations)     *    - sections (used for decorators to reference the sections to be decorated and render them)      * @param screenStringRenderer An implementation of the ScreenStringRenderer     *   interface that is responsible for the actual text generation for     *   different screen elements; implementing your own makes it possible to     *   use the same screen definitions for many types of screen UIs     */    public void renderScreenString(Writer writer, Map context, ScreenStringRenderer screenStringRenderer) throws GeneralException {        // make sure the "null" object is in there for entity ops        context.put("null", GenericEntity.NULL_FIELD);        // wrap the whole screen rendering in a transaction, should improve performance in querying and such        boolean beganTransaction = false;        Map parameters = (Map) context.get("parameters");        int transactionTimeout = -1;        if (parameters != null) {            String transactionTimeoutPar = (String) parameters.get("TRANSACTION_TIMEOUT");            if (transactionTimeoutPar != null) {                try {                    transactionTimeout = Integer.parseInt(transactionTimeoutPar);                } catch(NumberFormatException nfe) {                    String msg = "TRANSACTION_TIMEOUT parameter for screen [" + this.sourceLocation + "#" + this.name + "] is invalid and it will be ignored: " + nfe.toString();                    Debug.logWarning(msg, module);                }            }        }                if (transactionTimeout < 0 && !transactionTimeoutExdr.isEmpty()) {            // no TRANSACTION_TIMEOUT parameter, check screen attribute            String transactionTimeoutStr = transactionTimeoutExdr.expandString(context);            if (UtilValidate.isNotEmpty(transactionTimeoutStr)) {                try {                    transactionTimeout = Integer.parseInt(transactionTimeoutStr);                } catch (NumberFormatException e) {                    Debug.logWarning(e, "Could not parse transaction-timeout value, original=[" + transactionTimeoutExdr + "], expanded=[" + transactionTimeoutStr + "]", module);                }            }        }                try {            // If transaction timeout is not present (i.e. is equal to -1), the default transaction timeout is used            // If transaction timeout is present, use it to start the transaction            // If transaction timeout is set to zero, no transaction is started            if (transactionTimeout < 0) {                beganTransaction = TransactionUtil.begin();            }            if (transactionTimeout > 0) {                beganTransaction = TransactionUtil.begin(transactionTimeout);            }            // render the screen, starting with the top-level section            this.section.renderWidgetString(writer, context, screenStringRenderer);        } catch (RuntimeException e) {            String errMsg = "Error rendering screen [" + this.sourceLocation + "#" + this.name + "]: " + e.toString();            Debug.logError(errMsg + ". Rolling back transaction.", module);            try {                // only rollback the transaction if we started one...                TransactionUtil.rollback(beganTransaction, errMsg, e);            } catch (GenericEntityException e2) {                Debug.logError(e2, "Could not rollback transaction: " + e2.toString(), module);            }            // after rolling back, rethrow the exception            throw new GeneralException(errMsg, e);        } catch (Exception e) {            String errMsg = "Error rendering screen [" + this.sourceLocation + "#" + this.name + "]: " + e.toString();            Debug.logError(errMsg + ". Rolling back transaction.", module);            try {                // only rollback the transaction if we started one...                TransactionUtil.rollback(beganTransaction, errMsg, e);            } catch (GenericEntityException e2) {                Debug.logError(e2, "Could not rollback transaction: " + e2.toString(), module);            }                        // throw nested exception, don't need to log details here: Debug.logError(e, errMsg, module);                        // after rolling back, rethrow the exception            throw new GeneralException(errMsg, e);        } finally {            // only commit the transaction if we started one... this will throw an exception if it fails            try {                TransactionUtil.commit(beganTransaction);            } catch (GenericEntityException e2) {                Debug.logError(e2, "Could not commit transaction: " + e2.toString(), module);            }        }    }    public LocalDispatcher getDispatcher(Map context) {        LocalDispatcher dispatcher = (LocalDispatcher) context.get("dispatcher");        return dispatcher;    }    public GenericDelegator getDelegator(Map context) {        GenericDelegator delegator = (GenericDelegator) context.get("delegator");        return delegator;    }        public String getName() {        return name;    }}

⌨️ 快捷键说明

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