田源
2025-01-09 8a166a60cfd1a2e593ffa103d10c0dc224fc8628
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
package com.vci.client.uif.actions.client;
 
import java.util.HashMap;
import java.util.Map;
 
import javax.swing.JOptionPane;
 
import com.vci.client.portal.utility.PLDefination;
import com.vci.client.portal.utility.UITools;
import com.vci.client.ui.swing.components.VCIJOptionPane;
import com.vci.client.ui.swing.components.VCIJDialog.DialogResult;
import com.vci.client.uif.engine.client.UIHelper;
import com.vci.client.uif.engine.client.objopt.ObjectAddEditDialog;
import com.vci.client.uif.engine.common.IDataNode;
import com.vci.corba.portal.data.PortalVI;
import com.vci.mw.ClientContextVariable;
 
/**
 * 扩展AddAction功能
 * 实现功能,判断getDataModel().getSelectObjects()是否为空
 * 如果不为空,基于SelectObjects进行创建,如果为空,基于DataSource
 * 进行创建。
 * 
 * 在AddAction基础上增加exttype,extcontext,needselect参数不再起作用。
 * 当getDataModel().getSelectObjects()是否为空时上下文使用type,context
 * 为空时使用exttype,extcontext。
 * 
 * 相关按钮,保存、取消和AddAction一致。
 * 
 * @author VCI-STGK006
 *
 */
public class ExtAddAction extends DoseNotSelectDataAction{
    /**
     * 按钮参数
     */
    private Map<String, String> paramsMap = null;
    
    /**
     * 根据getDataModel().getSelectObjects()是否为空
     * 设置needSelect的值,如果不为空为true。
     */
    boolean needSelect = false;
    
    public ExtAddAction(){
        super();
    }
    
    @Override
    public String getKey() {
        return "extadd";
    }
    
    @Override
    public boolean doPost() {
        try{
            //获得按钮参数
            paramsMap = getButtonParams();
            //得到打开窗口的上下文信息
            String type = paramsMap.get("type");
            String context = paramsMap.get("context");
            String extType = paramsMap.get("exttype");
            String extContext = paramsMap.get("extcontext");
            if(type == null || type.trim().equals("") 
                    || context == null || context.trim().equals("")
                    ||extType == null || extType.trim().equals("")
                    ||extContext == null || extContext.trim().equals("")){
                UIFUtils.showMessage(ClientContextVariable.getFrame(),
                        "uifmodel.plm.uif.actions.syserror.parmerror", "");
                return false;
            }
            //判断用户是否选择了数据
            if(getDataModel().getSelectObjects() != null 
                    && getDataModel().getSelectObjects().length > 0) {
                //判断,只能单选
                if(getDataModel().getSelectObjects().length > 1){
                    VCIJOptionPane.showMessageDialog(
                            getParentComponent(), "最多选择一条数据进行此操作!", "提示", JOptionPane.INFORMATION_MESSAGE);
                    return false;
                }
                needSelect = true;
                paramsMap.put("needselect", "true");
            } else {
                type = extType;
                context = extContext;
            }
            //当前按钮所在窗口的PLDefination
            PLDefination currentDef = getDefination();
            //打开窗口的PLDefination
            PLDefination plDef = getDefination(type, context);
            if(plDef == null){
                UIFUtils.showMessage(ClientContextVariable.getFrame(),
                        "uifmodel.plm.uif.actions.syserror.configerror.notformname", type, context);
                return false;
            }
            String formName = plDef.getTemplateId();
            if(formName == null || formName.equals("")){
                UIFUtils.showMessage(ClientContextVariable.getFrame(),
                        "uifmodel.plm.uif.actions.syserror.configerror.notformname", type, context);
                return false;
            }
            //验证是否是创建BO类型
            PortalVI sheet = UITools.getService().getPortalVIBySymbol(formName);
            if(sheet.typeFlag != 0){
                UIFUtils.showMessage(ClientContextVariable.getFrame(),
                        "uifmodel.plm.uif.actions.syserror.btnconferror");
                return false;
            }
            
            //如果是文件夹类型
            //做了一下特殊处理,如果是创建文件夹时,在SourceDataNode的ValueMap中增加了一个AddShowLinkAbs属性
            IDataNode idn = null;
            if(currentDef.getTemplateType().equals("5") 
                    && currentDef.getLinkType().equals("") 
                    && !currentDef.getShowLinkAbs().equals("")) {
                //获得当前节点作为创建节点的父节点
                Object[] obj = getDataModel().getSelectObjects();
                if(obj == null || obj.length < 1){
                    UIFUtils.showMessage(ClientContextVariable.getFrame(),
                            "uifmodel.plm.uif.actions.folder.selectparent");
                    return false;
                }
                Map<String, String> map = new HashMap<String, String>();
                map.put("AddShowLinkAbs", currentDef.getShowLinkAbs());
                map.put("AddSeparator", currentDef.getSeparator());
                map.put("AddCreateFolder", "true");
                if (obj[0] instanceof IDataNode){
                    idn = (IDataNode) obj[0];
                }
                idn.setValueMap(map);
            }            
//            if("folder".equalsIgnoreCase(plDef.getShowType())){
//                //获得当前节点作为创建节点的父节点
//                Object[] obj = getDataModel().getSelectObjects();
//                if(obj == null || obj.length < 1){
//                    UIFUtils.showMessage(ClientContextVariable.getFrame(),
//                            "uifmodel.plm.uif.actions.folder.selectparent");
//                    return false;
//                }
//                Map<String, String> map = new HashMap<String, String>();
//                map.put("AddShowLinkAbs", currentDef.getShowLinkAbs());
//                map.put("AddSeparator", currentDef.getSeparator());
//                if (obj[0] instanceof IDataNode){
//                    idn = (IDataNode) obj[0];
//                }
//                idn.setValueMap(map);
//            }
            //defination信息
            //PLDefination defination = getDefination();
            //生成创建窗口
            ObjectAddEditDialog oad = new ObjectAddEditDialog(type, context,
                    plDef, paramsMap, ObjectAddEditDialog.OperateType.ADD, null, this);
            oad.setSourceDataNode(idn);
            oad.setSelectObjects(getDataModel().getSelectObjects());
            oad.setTypeFlag(0);
            if(needSelect){
                oad.setSourceDataNode((IDataNode)getDataModel().getSelectObjects()[0]);
            }
            oad.init();
            oad.setSize(UIHelper.DIALOG_DEFAULT_WIDTH, UIHelper.DIALOG_DEFAULT_HEIGHT);
            oad.setLocationRelativeTo(ClientContextVariable.getFrame());
            oad.setVisible(true);
            if(oad.getDialogResult() == DialogResult.OK){
                return true;
            } else {
                return false;
            }
        } catch (Throwable e){
            UIFUtils.showErrorMessage(ClientContextVariable.getFrame(),
                    "uifmodel.plm.uif.actions.createloerror", e);
            return false;
        }
    }
}