From 7dd96c4240e800c89a157b276999599ef121d989 Mon Sep 17 00:00:00 2001 From: lijh Date: Tue, 10 Mar 2026 11:24:03 +0800 Subject: [PATCH] first commit --- .classpath | 8 + .project | 28 + .settings/org.eclipse.jdt.core.prefs | 7 + META-INF/MANIFEST.MF | 52 + .../CreateFolderFromTemplateCommand.class | Bin 0 -> 1342 bytes .../CreateFolderFromTemplateDialog$1.class | Bin 0 -> 856 bytes .../CreateFolderFromTemplateDialog$2.class | Bin 0 -> 899 bytes .../CreateFolderFromTemplateDialog$3.class | Bin 0 -> 899 bytes .../CreateFolderFromTemplateDialog.class | Bin 0 -> 11917 bytes .../CreateFolderFromTemplateHandler.class | Bin 0 -> 1113 bytes .../download/BatchDownLoadFileCommand.class | Bin 0 -> 2983 bytes .../download/BatchDownLoadFileCommand2.class | Bin 0 -> 2874 bytes .../download/BatchDownLoadFileHandler.class | Bin 0 -> 1538 bytes .../download/BatchDownLoadFileHandler2.class | Bin 0 -> 1543 bytes .../download/DatasetFileDown.class | Bin 0 -> 23146 bytes .../download/DatasetFileDown2.class | Bin 0 -> 22108 bytes .../download/DeleteNullDir.class | Bin 0 -> 1778 bytes .../ImportBatchDirectoryCommand$1.class | Bin 0 -> 941 bytes .../imports/ImportBatchDirectoryCommand.class | Bin 0 -> 943 bytes .../imports/ImportBatchDirectoryHandler.class | Bin 0 -> 1549 bytes .../imports/ImportBatchFileCommand$1.class | Bin 0 -> 911 bytes .../imports/ImportBatchFileCommand.class | Bin 0 -> 918 bytes .../imports/ImportBatchFileHandler.class | Bin 0 -> 1524 bytes .../imports/importfiles/CreateDataSet.class | Bin 0 -> 20224 bytes .../imports/importfiles/CreateFolder.class | Bin 0 -> 1299 bytes .../importfiles/GetAllDataSetNames.class | Bin 0 -> 2192 bytes .../importfiles/GetAllOptionValue.class | Bin 0 -> 3126 bytes .../imports/importfiles/GetChoosePath$1.class | Bin 0 -> 1440 bytes .../imports/importfiles/GetChoosePath.class | Bin 0 -> 4092 bytes .../imports/importfiles/GetCommonInfo.class | Bin 0 -> 967 bytes .../importfiles/GetTargetComponent.class | Bin 0 -> 2302 bytes .../imports/importfiles/ImportFile.class | Bin 0 -> 14488 bytes .../imports/importfiles/ORProgressBar$1.class | Bin 0 -> 896 bytes .../ORProgressBar$TaskThread.class | Bin 0 -> 1697 bytes .../imports/importfiles/ORProgressBar.class | Bin 0 -> 3665 bytes .../importfiles/ORProgressBarThread.class | Bin 0 -> 937 bytes ...CopyFolderAndAssginToProjectDialog$1.class | Bin 0 -> 1861 bytes ...CopyFolderAndAssginToProjectDialog$2.class | Bin 0 -> 932 bytes ...CopyFolderAndAssginToProjectDialog$3.class | Bin 0 -> 1149 bytes ...CopyFolderAndAssginToProjectDialog$4.class | Bin 0 -> 1750 bytes .../CopyFolderAndAssginToProjectDialog.class | Bin 0 -> 16261 bytes .../CreateProjectFolderCommand$1.class | Bin 0 -> 1663 bytes .../project/CreateProjectFolderCommand.class | Bin 0 -> 2331 bytes .../project/CreateProjectFolderHandler.class | Bin 0 -> 1410 bytes .../PurchasingDepartmentSearchCommand.class | Bin 0 -> 955 bytes .../PurchasingDepartmentSearchDialog$1.class | Bin 0 -> 888 bytes .../PurchasingDepartmentSearchDialog$2.class | Bin 0 -> 931 bytes .../PurchasingDepartmentSearchDialog$3.class | Bin 0 -> 931 bytes .../PurchasingDepartmentSearchDialog.class | Bin 0 -> 12194 bytes .../PurchasingDepartmentSearchHandler.class | Bin 0 -> 1076 bytes .../schedule/AbstracModifyDialog$1.class | Bin 0 -> 1053 bytes .../schedule/AbstracModifyDialog$2.class | Bin 0 -> 1061 bytes .../AbstracModifyDialog$buttonListener.class | Bin 0 -> 2482 bytes .../schedule/AbstracModifyDialog.class | Bin 0 -> 9645 bytes .../schedule/BOMTransPlanCommand$1.class | Bin 0 -> 1361 bytes .../schedule/BOMTransPlanCommand.class | Bin 0 -> 2299 bytes .../schedule/BOMTransPlanDialog$1.class | Bin 0 -> 1610 bytes .../schedule/BOMTransPlanDialog$2.class | Bin 0 -> 1218 bytes .../schedule/BOMTransPlanDialog$3.class | Bin 0 -> 842 bytes .../schedule/BOMTransPlanDialog$4.class | Bin 0 -> 842 bytes ...alog$ScheduleDefaultTreeCellRenderer.class | Bin 0 -> 1729 bytes .../schedule/BOMTransPlanDialog.class | Bin 0 -> 16487 bytes .../schedule/BOMTransPlanHandler.class | Bin 0 -> 957 bytes .../schedule/CheckBoxTreeCellRenderer.class | Bin 0 -> 3267 bytes .../schedule/CheckBoxTreeLabel.class | Bin 0 -> 2132 bytes .../schedule/CheckBoxTreeNode.class | Bin 0 -> 2170 bytes .../CheckBoxTreeNodeSelectionListener.class | Bin 0 -> 1523 bytes .../ModifyTaskOrDeliveryNameCommand.class | Bin 0 -> 961 bytes .../ModifyTaskOrDeliveryNameDialog.class | Bin 0 -> 5986 bytes .../ModifyTaskOrDeliveryNameHandler.class | Bin 0 -> 1535 bytes .../schedule/YSRScheduleTreeTableModel.class | Bin 0 -> 741 bytes .../customization/schedule/YSRTreeTable.class | Bin 0 -> 544 bytes .../util/CheckBoxColumnRender.class | Bin 0 -> 1326 bytes .../customization/util/ColumnGroup$1.class | Bin 0 -> 1883 bytes .../com/customization/util/ColumnGroup.class | Bin 0 -> 4457 bytes .../customization/util/DataSetFinder.class | Bin 0 -> 7475 bytes .../customization/util/GetAllUserIds.class | Bin 0 -> 5154 bytes .../customization/util/GetChoosePath$1.class | Bin 0 -> 927 bytes .../customization/util/GetChoosePath.class | Bin 0 -> 2805 bytes .../customization/util/GetCommonInfo.class | Bin 0 -> 4899 bytes .../util/GetMessageDialog$1.class | Bin 0 -> 893 bytes .../util/GetMessageDialog$2.class | Bin 0 -> 893 bytes .../customization/util/GetMessageDialog.class | Bin 0 -> 3141 bytes .../util/GetMessagePromptDialog$1.class | Bin 0 -> 935 bytes .../util/GetMessagePromptDialog$2.class | Bin 0 -> 935 bytes .../util/GetMessagePromptDialog.class | Bin 0 -> 3389 bytes .../util/GroupableTableHeader.class | Bin 0 -> 2886 bytes .../util/GroupableTableHeaderUI$1.class | Bin 0 -> 1912 bytes .../util/GroupableTableHeaderUI$2.class | Bin 0 -> 1946 bytes .../util/GroupableTableHeaderUI$3.class | Bin 0 -> 1984 bytes .../util/GroupableTableHeaderUI.class | Bin 0 -> 6782 bytes bin/cn/com/customization/util/KUtil.class | Bin 0 -> 1965 bytes .../customization/util/PackFailDownInfo.class | Bin 0 -> 2707 bytes .../customization/util/PackResultInfo.class | Bin 0 -> 3266 bytes .../util/PackSuccessfulInfo.class | Bin 0 -> 1612 bytes .../util/QueryTaskOpinionTableHead$1.class | Bin 0 -> 1178 bytes .../util/QueryTaskOpinionTableHead$2.class | Bin 0 -> 1126 bytes .../util/QueryTaskOpinionTableHead$3.class | Bin 0 -> 2036 bytes .../util/QueryTaskOpinionTableHead.class | Bin 0 -> 6086 bytes .../customization/util/ResultDialog$1.class | Bin 0 -> 750 bytes .../util/ResultDialog$buttonListener.class | Bin 0 -> 1171 bytes .../com/customization/util/ResultDialog.class | Bin 0 -> 21217 bytes .../customization/util/ResultTableModel.class | Bin 0 -> 4376 bytes .../util/ShowMessageDialog$1.class | Bin 0 -> 807 bytes .../util/ShowMessageDialog.class | Bin 0 -> 3294 bytes .../customization/util/TableColorRender.class | Bin 0 -> 1944 bytes .../util/TableColumnRender.class | Bin 0 -> 1678 bytes bin/cn/com/customization/util/UtilApi.class | Bin 0 -> 20141 bytes .../customization/util/WriteAndCopyFile.class | Bin 0 -> 1767 bytes bin/cn/com/customization/util/image/info.png | Bin 0 -> 772 bytes .../rac/form/GCSelectionUserCommand.class | Bin 0 -> 3377 bytes .../rac/form/ORTableColorRender.class | Bin 0 -> 1691 bytes .../rac/form/YSR8_ProjectForm$1.class | Bin 0 -> 1006 bytes .../rac/form/YSR8_ProjectForm$10.class | Bin 0 -> 844 bytes .../rac/form/YSR8_ProjectForm$2.class | Bin 0 -> 1827 bytes .../rac/form/YSR8_ProjectForm$3.class | Bin 0 -> 1006 bytes .../rac/form/YSR8_ProjectForm$4.class | Bin 0 -> 1828 bytes .../rac/form/YSR8_ProjectForm$5.class | Bin 0 -> 1007 bytes .../rac/form/YSR8_ProjectForm$6.class | Bin 0 -> 963 bytes .../rac/form/YSR8_ProjectForm$7.class | Bin 0 -> 963 bytes .../rac/form/YSR8_ProjectForm$8.class | Bin 0 -> 1360 bytes .../rac/form/YSR8_ProjectForm$9.class | Bin 0 -> 4798 bytes .../rac/form/YSR8_ProjectForm.class | Bin 0 -> 40513 bytes .../form/YSR8_QuotationRevisionMaster$1.class | Bin 0 -> 1449 bytes .../form/YSR8_QuotationRevisionMaster$2.class | Bin 0 -> 1753 bytes .../form/YSR8_QuotationRevisionMaster$3.class | Bin 0 -> 1078 bytes .../form/YSR8_QuotationRevisionMaster.class | Bin 0 -> 28697 bytes .../rac/stylesheet/stylesheet_user.properties | 2 + ...$IC_GenerateIDButtonSelectionAdapter.class | Bin 0 -> 4546 bytes .../CUSTAutoAssignItemIDPropertyBean.class | Bin 0 -> 15453 bytes .../stylesheet/beans/beans_locale.properties | 15 + .../beans/beans_locale_zh_CN.properties | 15 + .../com/rac/changename/ChangeNameAction.class | Bin 0 -> 1222 bytes .../com/rac/changename/ChangeNameDialog.class | Bin 0 -> 3825 bytes .../rac/changename/ChangeNameHandler.class | Bin 0 -> 3097 bytes .../com/rac/integration/AccepComHandler.class | Bin 0 -> 2548 bytes .../DeliveryApplicationHandler.class | Bin 0 -> 2592 bytes .../rac/integration/InterationOperation.class | Bin 0 -> 23373 bytes .../rac/integration/ProjectPlanHandler.class | Bin 0 -> 3912 bytes .../integration/QuotationListHandler.class | Bin 0 -> 2669 bytes .../com/rac/integration/RequestServer.class | Bin 0 -> 5423 bytes .../rac/integration/UnicodeInputStream.class | Bin 0 -> 2215 bytes bin/cust/com/rac/integration/XMLDocAPI.class | Bin 0 -> 7498 bytes bin/cust/com/rac/integration/test.class | Bin 0 -> 3806 bytes .../com/rac/workflow/ComparatorTask.class | Bin 0 -> 3862 bytes .../rac/workflow/CustAddReleaseHandler.class | Bin 0 -> 3520 bytes .../workflow/CustRemoveReleaseHandler.class | Bin 0 -> 3529 bytes .../com/rac/workflow/ExportSearchResult.class | Bin 0 -> 6364 bytes bin/cust/com/rac/workflow/PackExcelInfo.class | Bin 0 -> 1933 bytes .../workflow/QueryTaskOpinionCommand.class | Bin 0 -> 869 bytes .../workflow/QueryTaskOpinionHandler.class | Bin 0 -> 1501 bytes .../QueryTaskOpinionOperation$SignInfo.class | Bin 0 -> 770 bytes .../workflow/QueryTaskOpinionOperation.class | Bin 0 -> 27695 bytes .../workflow/QueryTaskProcessCommand$1.class | Bin 0 -> 1593 bytes .../workflow/QueryTaskProcessCommand.class | Bin 0 -> 1233 bytes .../workflow/QueryTaskProcessHandler.class | Bin 0 -> 1501 bytes .../rac/workflow/SearchResultDialog$1.class | Bin 0 -> 1087 bytes .../SearchResultDialog$SearchResults.class | Bin 0 -> 4214 bytes .../SearchResultDialog$buttonListener.class | Bin 0 -> 1253 bytes .../com/rac/workflow/SearchResultDialog.class | Bin 0 -> 19898 bytes .../rac/workflow/SearchResultTableModel.class | Bin 0 -> 5364 bytes .../com/rac/workflow/SearchTaskDialog$1.class | Bin 0 -> 2525 bytes .../SearchTaskDialog$SearchCondition.class | Bin 0 -> 1225 bytes .../SearchTaskDialog$buttonListener.class | Bin 0 -> 6744 bytes .../com/rac/workflow/SearchTaskDialog.class | Bin 0 -> 9156 bytes .../SubmitAttachmentInWorkflowCommand$1.class | Bin 0 -> 1190 bytes .../SubmitAttachmentInWorkflowCommand.class | Bin 0 -> 3016 bytes .../SubmitAttachmentInWorkflowHandler.class | Bin 0 -> 1547 bytes bin/cust/com/ysr/Activator.class | Bin 0 -> 854 bytes bin/cust/com/ysr/test.class | Bin 0 -> 1288 bytes bin/ysr/com/teamcenter/BPMTest.class | Bin 0 -> 7265 bytes bin/ysr/com/teamcenter/ObjectFactory.class | Bin 0 -> 8808 bytes .../com/teamcenter/SendAccepComToBPM.class | Bin 0 -> 811 bytes .../SendAccepComToBPMResponse.class | Bin 0 -> 917 bytes .../com/teamcenter/SendAccepComToPLM.class | Bin 0 -> 811 bytes .../SendAccepComToPLMResponse.class | Bin 0 -> 917 bytes .../teamcenter/SendDeliveryDateToPLM.class | Bin 0 -> 1012 bytes .../SendDeliveryDateToPLMResponse.class | Bin 0 -> 933 bytes .../com/teamcenter/SendOrderNoticeToPLM.class | Bin 0 -> 823 bytes .../SendOrderNoticeToPLMResponse.class | Bin 0 -> 929 bytes .../SendPStartNotificationToPLM.class | Bin 0 -> 851 bytes .../SendPStartNotificationToPLMResponse.class | Bin 0 -> 957 bytes .../com/teamcenter/SendQuotationToPLM.class | Bin 0 -> 815 bytes .../SendQuotationToPLMResponse.class | Bin 0 -> 921 bytes .../com/teamcenter/SendTravelOrderToPLM.class | Bin 0 -> 823 bytes .../SendTravelOrderToPLMResponse.class | Bin 0 -> 929 bytes .../com/teamcenter/YSRServerDelegate.class | Bin 0 -> 3325 bytes bin/ysr/com/teamcenter/YSRServerService.class | Bin 0 -> 2807 bytes bin/ysr/com/teamcenter/package-info.class | Bin 0 -> 250 bytes build.properties | 7 + jxl.jar | Bin 0 -> 720702 bytes plugin.properties | 2 + plugin.xml | 558 +++++ plugin_zh_CN.properties | 18 + .../CreateFolderFromTemplateCommand.java | 19 + .../CreateFolderFromTemplateDialog.java | 348 +++ .../CreateFolderFromTemplateHandler.java | 21 + .../download/BatchDownLoadFileCommand.java | 64 + .../download/BatchDownLoadFileCommand2.java | 65 + .../download/BatchDownLoadFileHandler.java | 43 + .../download/BatchDownLoadFileHandler2.java | 43 + .../download/DatasetFileDown.java | 795 +++++++ .../download/DatasetFileDown2.java | 716 +++++++ .../customization/download/DeleteNullDir.java | 51 + .../imports/ImportBatchDirectoryCommand.java | 37 + .../imports/ImportBatchDirectoryHandler.java | 43 + .../imports/ImportBatchFileCommand.java | 49 + .../imports/ImportBatchFileHandler.java | 43 + .../imports/importfiles/CreateDataSet.java | 622 ++++++ .../imports/importfiles/CreateFolder.java | 39 + .../importfiles/GetAllDataSetNames.java | 72 + .../importfiles/GetAllOptionValue.java | 82 + .../imports/importfiles/GetChoosePath.java | 134 ++ .../imports/importfiles/GetCommonInfo.java | 70 + .../importfiles/GetTargetComponent.java | 86 + .../imports/importfiles/ImportFile.java | 349 +++ .../imports/importfiles/ORProgressBar.java | 180 ++ .../importfiles/ORProgressBarThread.java | 40 + .../CopyFolderAndAssginToProjectDialog.java | 450 ++++ .../project/CreateProjectFolderCommand.java | 35 + .../project/CreateProjectFolderHandler.java | 28 + .../PurchasingDepartmentSearchCommand.java | 14 + .../PurchasingDepartmentSearchDialog.java | 299 +++ .../PurchasingDepartmentSearchHandler.java | 21 + .../schedule/AbstracModifyDialog.java | 351 +++ .../schedule/BOMTransPlanCommand.java | 44 + .../schedule/BOMTransPlanDialog.java | 420 ++++ .../schedule/BOMTransPlanHandler.java | 25 + .../schedule/CheckBoxTreeCellRenderer.java | 96 + .../schedule/CheckBoxTreeLabel.java | 75 + .../schedule/CheckBoxTreeNode.java | 113 + .../CheckBoxTreeNodeSelectionListener.java | 31 + .../ModifyTaskOrDeliveryNameCommand.java | 32 + .../ModifyTaskOrDeliveryNameDialog.java | 152 ++ .../ModifyTaskOrDeliveryNameHandler.java | 39 + .../schedule/YSRScheduleTreeTableModel.java | 16 + .../customization/schedule/YSRTreeTable.java | 10 + .../util/CheckBoxColumnRender.java | 52 + .../com/customization/util/ColumnGroup.java | 197 ++ .../com/customization/util/DataSetFinder.java | 251 +++ .../com/customization/util/GetAllUserIds.java | 132 ++ .../com/customization/util/GetChoosePath.java | 100 + .../com/customization/util/GetCommonInfo.java | 164 ++ .../customization/util/GetMessageDialog.java | 91 + .../util/GetMessagePromptDialog.java | 106 + .../util/GroupableTableHeader.java | 89 + .../util/GroupableTableHeaderUI.java | 242 +++ src/cn/com/customization/util/KUtil.java | 54 + .../customization/util/PackFailDownInfo.java | 151 ++ .../customization/util/PackResultInfo.java | 203 ++ .../util/PackSuccessfulInfo.java | 108 + .../util/QueryTaskOpinionTableHead.java | 219 ++ .../com/customization/util/ResultDialog.java | 579 +++++ .../customization/util/ResultTableModel.java | 97 + .../customization/util/ShowMessageDialog.java | 93 + .../customization/util/TableColorRender.java | 54 + .../customization/util/TableColumnRender.java | 51 + src/cn/com/customization/util/UtilApi.java | 918 ++++++++ .../customization/util/WriteAndCopyFile.java | 75 + src/cn/com/customization/util/image/info.png | Bin 0 -> 772 bytes .../rac/form/GCSelectionUserCommand.java | 66 + .../rac/form/ORTableColorRender.java | 50 + .../teamcenter/rac/form/YSR8_ProjectForm.java | 1875 +++++++++++++++++ .../form/YSR8_QuotationRevisionMaster.java | 1211 +++++++++++ .../rac/stylesheet/stylesheet_user.properties | 2 + .../CUSTAutoAssignItemIDPropertyBean.java | 496 +++++ .../stylesheet/beans/beans_locale.properties | 15 + .../beans/beans_locale_zh_CN.properties | 15 + .../com/rac/changename/ChangeNameAction.java | 19 + .../com/rac/changename/ChangeNameDialog.java | 93 + .../com/rac/changename/ChangeNameHandler.java | 58 + .../com/rac/integration/AccepComHandler.java | 48 + .../DeliveryApplicationHandler.java | 48 + .../rac/integration/InterationOperation.java | 838 ++++++++ .../rac/integration/ProjectPlanHandler.java | 75 + .../rac/integration/QuotationListHandler.java | 49 + .../com/rac/integration/RequestServer.java | 147 ++ .../rac/integration/UnicodeInputStream.java | 100 + src/cust/com/rac/integration/XMLDocAPI.java | 218 ++ src/cust/com/rac/integration/test.java | 112 + src/cust/com/rac/workflow/ComparatorTask.java | 139 ++ .../rac/workflow/CustAddReleaseHandler.java | 73 + .../workflow/CustRemoveReleaseHandler.java | 73 + .../com/rac/workflow/ExportSearchResult.java | 159 ++ src/cust/com/rac/workflow/PackExcelInfo.java | 122 ++ .../rac/workflow/QueryTaskOpinionCommand.java | 32 + .../rac/workflow/QueryTaskOpinionHandler.java | 44 + .../workflow/QueryTaskOpinionOperation.java | 1213 +++++++++++ .../rac/workflow/QueryTaskProcessCommand.java | 55 + .../rac/workflow/QueryTaskProcessHandler.java | 46 + .../com/rac/workflow/SearchResultDialog.java | 708 +++++++ .../rac/workflow/SearchResultTableModel.java | 135 ++ .../com/rac/workflow/SearchTaskDialog.java | 450 ++++ .../SubmitAttachmentInWorkflowCommand.java | 74 + .../SubmitAttachmentInWorkflowHandler.java | 46 + src/cust/com/ysr/Activator.java | 47 + src/cust/com/ysr/test.java | 21 + src/ysr/com/teamcenter/BPMTest.java | 171 ++ src/ysr/com/teamcenter/ObjectFactory.class | Bin 0 -> 7575 bytes src/ysr/com/teamcenter/ObjectFactory.java | 251 +++ .../com/teamcenter/SendAccepComToBPM.class | Bin 0 -> 678 bytes src/ysr/com/teamcenter/SendAccepComToBPM.java | 60 + .../SendAccepComToBPMResponse.class | Bin 0 -> 776 bytes .../teamcenter/SendAccepComToBPMResponse.java | 62 + .../com/teamcenter/SendAccepComToPLM.class | Bin 0 -> 678 bytes src/ysr/com/teamcenter/SendAccepComToPLM.java | 60 + .../SendAccepComToPLMResponse.class | Bin 0 -> 776 bytes .../teamcenter/SendAccepComToPLMResponse.java | 62 + src/ysr/com/teamcenter/SendBPMToPLM.class | Bin 0 -> 663 bytes .../com/teamcenter/SendBPMToPLMResponse.class | Bin 0 -> 761 bytes .../teamcenter/SendDeliveryDateToPLM.class | Bin 0 -> 829 bytes .../com/teamcenter/SendDeliveryDateToPLM.java | 87 + .../SendDeliveryDateToPLMResponse.class | Bin 0 -> 788 bytes .../SendDeliveryDateToPLMResponse.java | 62 + .../com/teamcenter/SendOrderNoticeToPLM.class | Bin 0 -> 687 bytes .../com/teamcenter/SendOrderNoticeToPLM.java | 60 + .../SendOrderNoticeToPLMResponse.class | Bin 0 -> 785 bytes .../SendOrderNoticeToPLMResponse.java | 62 + .../SendPStartNotificationToPLM.class | Bin 0 -> 708 bytes .../SendPStartNotificationToPLM.java | 60 + .../SendPStartNotificationToPLMResponse.class | Bin 0 -> 806 bytes .../SendPStartNotificationToPLMResponse.java | 62 + .../com/teamcenter/SendQuotationToPLM.class | Bin 0 -> 681 bytes .../com/teamcenter/SendQuotationToPLM.java | 60 + .../SendQuotationToPLMResponse.class | Bin 0 -> 779 bytes .../SendQuotationToPLMResponse.java | 62 + .../com/teamcenter/SendTravelOrderToPLM.class | Bin 0 -> 687 bytes .../com/teamcenter/SendTravelOrderToPLM.java | 60 + .../SendTravelOrderToPLMResponse.class | Bin 0 -> 785 bytes .../SendTravelOrderToPLMResponse.java | 62 + .../com/teamcenter/YSRServerDelegate.class | Bin 0 -> 3325 bytes src/ysr/com/teamcenter/YSRServerDelegate.java | 120 ++ src/ysr/com/teamcenter/YSRServerService.class | Bin 0 -> 2351 bytes src/ysr/com/teamcenter/YSRServerService.java | 94 + src/ysr/com/teamcenter/package-info.class | Bin 0 -> 250 bytes src/ysr/com/teamcenter/package-info.java | 2 + 336 files changed, 21491 insertions(+) create mode 100644 .classpath create mode 100644 .project create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 META-INF/MANIFEST.MF create mode 100644 bin/cn/com/customization/create/CreateFolderFromTemplateCommand.class create mode 100644 bin/cn/com/customization/create/CreateFolderFromTemplateDialog$1.class create mode 100644 bin/cn/com/customization/create/CreateFolderFromTemplateDialog$2.class create mode 100644 bin/cn/com/customization/create/CreateFolderFromTemplateDialog$3.class create mode 100644 bin/cn/com/customization/create/CreateFolderFromTemplateDialog.class create mode 100644 bin/cn/com/customization/create/CreateFolderFromTemplateHandler.class create mode 100644 bin/cn/com/customization/download/BatchDownLoadFileCommand.class create mode 100644 bin/cn/com/customization/download/BatchDownLoadFileCommand2.class create mode 100644 bin/cn/com/customization/download/BatchDownLoadFileHandler.class create mode 100644 bin/cn/com/customization/download/BatchDownLoadFileHandler2.class create mode 100644 bin/cn/com/customization/download/DatasetFileDown.class create mode 100644 bin/cn/com/customization/download/DatasetFileDown2.class create mode 100644 bin/cn/com/customization/download/DeleteNullDir.class create mode 100644 bin/cn/com/customization/imports/ImportBatchDirectoryCommand$1.class create mode 100644 bin/cn/com/customization/imports/ImportBatchDirectoryCommand.class create mode 100644 bin/cn/com/customization/imports/ImportBatchDirectoryHandler.class create mode 100644 bin/cn/com/customization/imports/ImportBatchFileCommand$1.class create mode 100644 bin/cn/com/customization/imports/ImportBatchFileCommand.class create mode 100644 bin/cn/com/customization/imports/ImportBatchFileHandler.class create mode 100644 bin/cn/com/customization/imports/importfiles/CreateDataSet.class create mode 100644 bin/cn/com/customization/imports/importfiles/CreateFolder.class create mode 100644 bin/cn/com/customization/imports/importfiles/GetAllDataSetNames.class create mode 100644 bin/cn/com/customization/imports/importfiles/GetAllOptionValue.class create mode 100644 bin/cn/com/customization/imports/importfiles/GetChoosePath$1.class create mode 100644 bin/cn/com/customization/imports/importfiles/GetChoosePath.class create mode 100644 bin/cn/com/customization/imports/importfiles/GetCommonInfo.class create mode 100644 bin/cn/com/customization/imports/importfiles/GetTargetComponent.class create mode 100644 bin/cn/com/customization/imports/importfiles/ImportFile.class create mode 100644 bin/cn/com/customization/imports/importfiles/ORProgressBar$1.class create mode 100644 bin/cn/com/customization/imports/importfiles/ORProgressBar$TaskThread.class create mode 100644 bin/cn/com/customization/imports/importfiles/ORProgressBar.class create mode 100644 bin/cn/com/customization/imports/importfiles/ORProgressBarThread.class create mode 100644 bin/cn/com/customization/project/CopyFolderAndAssginToProjectDialog$1.class create mode 100644 bin/cn/com/customization/project/CopyFolderAndAssginToProjectDialog$2.class create mode 100644 bin/cn/com/customization/project/CopyFolderAndAssginToProjectDialog$3.class create mode 100644 bin/cn/com/customization/project/CopyFolderAndAssginToProjectDialog$4.class create mode 100644 bin/cn/com/customization/project/CopyFolderAndAssginToProjectDialog.class create mode 100644 bin/cn/com/customization/project/CreateProjectFolderCommand$1.class create mode 100644 bin/cn/com/customization/project/CreateProjectFolderCommand.class create mode 100644 bin/cn/com/customization/project/CreateProjectFolderHandler.class create mode 100644 bin/cn/com/customization/purchasing/PurchasingDepartmentSearchCommand.class create mode 100644 bin/cn/com/customization/purchasing/PurchasingDepartmentSearchDialog$1.class create mode 100644 bin/cn/com/customization/purchasing/PurchasingDepartmentSearchDialog$2.class create mode 100644 bin/cn/com/customization/purchasing/PurchasingDepartmentSearchDialog$3.class create mode 100644 bin/cn/com/customization/purchasing/PurchasingDepartmentSearchDialog.class create mode 100644 bin/cn/com/customization/purchasing/PurchasingDepartmentSearchHandler.class create mode 100644 bin/cn/com/customization/schedule/AbstracModifyDialog$1.class create mode 100644 bin/cn/com/customization/schedule/AbstracModifyDialog$2.class create mode 100644 bin/cn/com/customization/schedule/AbstracModifyDialog$buttonListener.class create mode 100644 bin/cn/com/customization/schedule/AbstracModifyDialog.class create mode 100644 bin/cn/com/customization/schedule/BOMTransPlanCommand$1.class create mode 100644 bin/cn/com/customization/schedule/BOMTransPlanCommand.class create mode 100644 bin/cn/com/customization/schedule/BOMTransPlanDialog$1.class create mode 100644 bin/cn/com/customization/schedule/BOMTransPlanDialog$2.class create mode 100644 bin/cn/com/customization/schedule/BOMTransPlanDialog$3.class create mode 100644 bin/cn/com/customization/schedule/BOMTransPlanDialog$4.class create mode 100644 bin/cn/com/customization/schedule/BOMTransPlanDialog$ScheduleDefaultTreeCellRenderer.class create mode 100644 bin/cn/com/customization/schedule/BOMTransPlanDialog.class create mode 100644 bin/cn/com/customization/schedule/BOMTransPlanHandler.class create mode 100644 bin/cn/com/customization/schedule/CheckBoxTreeCellRenderer.class create mode 100644 bin/cn/com/customization/schedule/CheckBoxTreeLabel.class create mode 100644 bin/cn/com/customization/schedule/CheckBoxTreeNode.class create mode 100644 bin/cn/com/customization/schedule/CheckBoxTreeNodeSelectionListener.class create mode 100644 bin/cn/com/customization/schedule/ModifyTaskOrDeliveryNameCommand.class create mode 100644 bin/cn/com/customization/schedule/ModifyTaskOrDeliveryNameDialog.class create mode 100644 bin/cn/com/customization/schedule/ModifyTaskOrDeliveryNameHandler.class create mode 100644 bin/cn/com/customization/schedule/YSRScheduleTreeTableModel.class create mode 100644 bin/cn/com/customization/schedule/YSRTreeTable.class create mode 100644 bin/cn/com/customization/util/CheckBoxColumnRender.class create mode 100644 bin/cn/com/customization/util/ColumnGroup$1.class create mode 100644 bin/cn/com/customization/util/ColumnGroup.class create mode 100644 bin/cn/com/customization/util/DataSetFinder.class create mode 100644 bin/cn/com/customization/util/GetAllUserIds.class create mode 100644 bin/cn/com/customization/util/GetChoosePath$1.class create mode 100644 bin/cn/com/customization/util/GetChoosePath.class create mode 100644 bin/cn/com/customization/util/GetCommonInfo.class create mode 100644 bin/cn/com/customization/util/GetMessageDialog$1.class create mode 100644 bin/cn/com/customization/util/GetMessageDialog$2.class create mode 100644 bin/cn/com/customization/util/GetMessageDialog.class create mode 100644 bin/cn/com/customization/util/GetMessagePromptDialog$1.class create mode 100644 bin/cn/com/customization/util/GetMessagePromptDialog$2.class create mode 100644 bin/cn/com/customization/util/GetMessagePromptDialog.class create mode 100644 bin/cn/com/customization/util/GroupableTableHeader.class create mode 100644 bin/cn/com/customization/util/GroupableTableHeaderUI$1.class create mode 100644 bin/cn/com/customization/util/GroupableTableHeaderUI$2.class create mode 100644 bin/cn/com/customization/util/GroupableTableHeaderUI$3.class create mode 100644 bin/cn/com/customization/util/GroupableTableHeaderUI.class create mode 100644 bin/cn/com/customization/util/KUtil.class create mode 100644 bin/cn/com/customization/util/PackFailDownInfo.class create mode 100644 bin/cn/com/customization/util/PackResultInfo.class create mode 100644 bin/cn/com/customization/util/PackSuccessfulInfo.class create mode 100644 bin/cn/com/customization/util/QueryTaskOpinionTableHead$1.class create mode 100644 bin/cn/com/customization/util/QueryTaskOpinionTableHead$2.class create mode 100644 bin/cn/com/customization/util/QueryTaskOpinionTableHead$3.class create mode 100644 bin/cn/com/customization/util/QueryTaskOpinionTableHead.class create mode 100644 bin/cn/com/customization/util/ResultDialog$1.class create mode 100644 bin/cn/com/customization/util/ResultDialog$buttonListener.class create mode 100644 bin/cn/com/customization/util/ResultDialog.class create mode 100644 bin/cn/com/customization/util/ResultTableModel.class create mode 100644 bin/cn/com/customization/util/ShowMessageDialog$1.class create mode 100644 bin/cn/com/customization/util/ShowMessageDialog.class create mode 100644 bin/cn/com/customization/util/TableColorRender.class create mode 100644 bin/cn/com/customization/util/TableColumnRender.class create mode 100644 bin/cn/com/customization/util/UtilApi.class create mode 100644 bin/cn/com/customization/util/WriteAndCopyFile.class create mode 100644 bin/cn/com/customization/util/image/info.png create mode 100644 bin/cn/com/teamcenter/rac/form/GCSelectionUserCommand.class create mode 100644 bin/cn/com/teamcenter/rac/form/ORTableColorRender.class create mode 100644 bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$1.class create mode 100644 bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$10.class create mode 100644 bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$2.class create mode 100644 bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$3.class create mode 100644 bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$4.class create mode 100644 bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$5.class create mode 100644 bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$6.class create mode 100644 bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$7.class create mode 100644 bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$8.class create mode 100644 bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$9.class create mode 100644 bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm.class create mode 100644 bin/cn/com/teamcenter/rac/form/YSR8_QuotationRevisionMaster$1.class create mode 100644 bin/cn/com/teamcenter/rac/form/YSR8_QuotationRevisionMaster$2.class create mode 100644 bin/cn/com/teamcenter/rac/form/YSR8_QuotationRevisionMaster$3.class create mode 100644 bin/cn/com/teamcenter/rac/form/YSR8_QuotationRevisionMaster.class create mode 100644 bin/com/teamcenter/rac/stylesheet/stylesheet_user.properties create mode 100644 bin/com/teamcenter/rac/viewer/stylesheet/beans/CUSTAutoAssignItemIDPropertyBean$IC_GenerateIDButtonSelectionAdapter.class create mode 100644 bin/com/teamcenter/rac/viewer/stylesheet/beans/CUSTAutoAssignItemIDPropertyBean.class create mode 100644 bin/com/teamcenter/rac/viewer/stylesheet/beans/beans_locale.properties create mode 100644 bin/com/teamcenter/rac/viewer/stylesheet/beans/beans_locale_zh_CN.properties create mode 100644 bin/cust/com/rac/changename/ChangeNameAction.class create mode 100644 bin/cust/com/rac/changename/ChangeNameDialog.class create mode 100644 bin/cust/com/rac/changename/ChangeNameHandler.class create mode 100644 bin/cust/com/rac/integration/AccepComHandler.class create mode 100644 bin/cust/com/rac/integration/DeliveryApplicationHandler.class create mode 100644 bin/cust/com/rac/integration/InterationOperation.class create mode 100644 bin/cust/com/rac/integration/ProjectPlanHandler.class create mode 100644 bin/cust/com/rac/integration/QuotationListHandler.class create mode 100644 bin/cust/com/rac/integration/RequestServer.class create mode 100644 bin/cust/com/rac/integration/UnicodeInputStream.class create mode 100644 bin/cust/com/rac/integration/XMLDocAPI.class create mode 100644 bin/cust/com/rac/integration/test.class create mode 100644 bin/cust/com/rac/workflow/ComparatorTask.class create mode 100644 bin/cust/com/rac/workflow/CustAddReleaseHandler.class create mode 100644 bin/cust/com/rac/workflow/CustRemoveReleaseHandler.class create mode 100644 bin/cust/com/rac/workflow/ExportSearchResult.class create mode 100644 bin/cust/com/rac/workflow/PackExcelInfo.class create mode 100644 bin/cust/com/rac/workflow/QueryTaskOpinionCommand.class create mode 100644 bin/cust/com/rac/workflow/QueryTaskOpinionHandler.class create mode 100644 bin/cust/com/rac/workflow/QueryTaskOpinionOperation$SignInfo.class create mode 100644 bin/cust/com/rac/workflow/QueryTaskOpinionOperation.class create mode 100644 bin/cust/com/rac/workflow/QueryTaskProcessCommand$1.class create mode 100644 bin/cust/com/rac/workflow/QueryTaskProcessCommand.class create mode 100644 bin/cust/com/rac/workflow/QueryTaskProcessHandler.class create mode 100644 bin/cust/com/rac/workflow/SearchResultDialog$1.class create mode 100644 bin/cust/com/rac/workflow/SearchResultDialog$SearchResults.class create mode 100644 bin/cust/com/rac/workflow/SearchResultDialog$buttonListener.class create mode 100644 bin/cust/com/rac/workflow/SearchResultDialog.class create mode 100644 bin/cust/com/rac/workflow/SearchResultTableModel.class create mode 100644 bin/cust/com/rac/workflow/SearchTaskDialog$1.class create mode 100644 bin/cust/com/rac/workflow/SearchTaskDialog$SearchCondition.class create mode 100644 bin/cust/com/rac/workflow/SearchTaskDialog$buttonListener.class create mode 100644 bin/cust/com/rac/workflow/SearchTaskDialog.class create mode 100644 bin/cust/com/rac/workflow/SubmitAttachmentInWorkflowCommand$1.class create mode 100644 bin/cust/com/rac/workflow/SubmitAttachmentInWorkflowCommand.class create mode 100644 bin/cust/com/rac/workflow/SubmitAttachmentInWorkflowHandler.class create mode 100644 bin/cust/com/ysr/Activator.class create mode 100644 bin/cust/com/ysr/test.class create mode 100644 bin/ysr/com/teamcenter/BPMTest.class create mode 100644 bin/ysr/com/teamcenter/ObjectFactory.class create mode 100644 bin/ysr/com/teamcenter/SendAccepComToBPM.class create mode 100644 bin/ysr/com/teamcenter/SendAccepComToBPMResponse.class create mode 100644 bin/ysr/com/teamcenter/SendAccepComToPLM.class create mode 100644 bin/ysr/com/teamcenter/SendAccepComToPLMResponse.class create mode 100644 bin/ysr/com/teamcenter/SendDeliveryDateToPLM.class create mode 100644 bin/ysr/com/teamcenter/SendDeliveryDateToPLMResponse.class create mode 100644 bin/ysr/com/teamcenter/SendOrderNoticeToPLM.class create mode 100644 bin/ysr/com/teamcenter/SendOrderNoticeToPLMResponse.class create mode 100644 bin/ysr/com/teamcenter/SendPStartNotificationToPLM.class create mode 100644 bin/ysr/com/teamcenter/SendPStartNotificationToPLMResponse.class create mode 100644 bin/ysr/com/teamcenter/SendQuotationToPLM.class create mode 100644 bin/ysr/com/teamcenter/SendQuotationToPLMResponse.class create mode 100644 bin/ysr/com/teamcenter/SendTravelOrderToPLM.class create mode 100644 bin/ysr/com/teamcenter/SendTravelOrderToPLMResponse.class create mode 100644 bin/ysr/com/teamcenter/YSRServerDelegate.class create mode 100644 bin/ysr/com/teamcenter/YSRServerService.class create mode 100644 bin/ysr/com/teamcenter/package-info.class create mode 100644 build.properties create mode 100644 jxl.jar create mode 100644 plugin.properties create mode 100644 plugin.xml create mode 100644 plugin_zh_CN.properties create mode 100644 src/cn/com/customization/create/CreateFolderFromTemplateCommand.java create mode 100644 src/cn/com/customization/create/CreateFolderFromTemplateDialog.java create mode 100644 src/cn/com/customization/create/CreateFolderFromTemplateHandler.java create mode 100644 src/cn/com/customization/download/BatchDownLoadFileCommand.java create mode 100644 src/cn/com/customization/download/BatchDownLoadFileCommand2.java create mode 100644 src/cn/com/customization/download/BatchDownLoadFileHandler.java create mode 100644 src/cn/com/customization/download/BatchDownLoadFileHandler2.java create mode 100644 src/cn/com/customization/download/DatasetFileDown.java create mode 100644 src/cn/com/customization/download/DatasetFileDown2.java create mode 100644 src/cn/com/customization/download/DeleteNullDir.java create mode 100644 src/cn/com/customization/imports/ImportBatchDirectoryCommand.java create mode 100644 src/cn/com/customization/imports/ImportBatchDirectoryHandler.java create mode 100644 src/cn/com/customization/imports/ImportBatchFileCommand.java create mode 100644 src/cn/com/customization/imports/ImportBatchFileHandler.java create mode 100644 src/cn/com/customization/imports/importfiles/CreateDataSet.java create mode 100644 src/cn/com/customization/imports/importfiles/CreateFolder.java create mode 100644 src/cn/com/customization/imports/importfiles/GetAllDataSetNames.java create mode 100644 src/cn/com/customization/imports/importfiles/GetAllOptionValue.java create mode 100644 src/cn/com/customization/imports/importfiles/GetChoosePath.java create mode 100644 src/cn/com/customization/imports/importfiles/GetCommonInfo.java create mode 100644 src/cn/com/customization/imports/importfiles/GetTargetComponent.java create mode 100644 src/cn/com/customization/imports/importfiles/ImportFile.java create mode 100644 src/cn/com/customization/imports/importfiles/ORProgressBar.java create mode 100644 src/cn/com/customization/imports/importfiles/ORProgressBarThread.java create mode 100644 src/cn/com/customization/project/CopyFolderAndAssginToProjectDialog.java create mode 100644 src/cn/com/customization/project/CreateProjectFolderCommand.java create mode 100644 src/cn/com/customization/project/CreateProjectFolderHandler.java create mode 100644 src/cn/com/customization/purchasing/PurchasingDepartmentSearchCommand.java create mode 100644 src/cn/com/customization/purchasing/PurchasingDepartmentSearchDialog.java create mode 100644 src/cn/com/customization/purchasing/PurchasingDepartmentSearchHandler.java create mode 100644 src/cn/com/customization/schedule/AbstracModifyDialog.java create mode 100644 src/cn/com/customization/schedule/BOMTransPlanCommand.java create mode 100644 src/cn/com/customization/schedule/BOMTransPlanDialog.java create mode 100644 src/cn/com/customization/schedule/BOMTransPlanHandler.java create mode 100644 src/cn/com/customization/schedule/CheckBoxTreeCellRenderer.java create mode 100644 src/cn/com/customization/schedule/CheckBoxTreeLabel.java create mode 100644 src/cn/com/customization/schedule/CheckBoxTreeNode.java create mode 100644 src/cn/com/customization/schedule/CheckBoxTreeNodeSelectionListener.java create mode 100644 src/cn/com/customization/schedule/ModifyTaskOrDeliveryNameCommand.java create mode 100644 src/cn/com/customization/schedule/ModifyTaskOrDeliveryNameDialog.java create mode 100644 src/cn/com/customization/schedule/ModifyTaskOrDeliveryNameHandler.java create mode 100644 src/cn/com/customization/schedule/YSRScheduleTreeTableModel.java create mode 100644 src/cn/com/customization/schedule/YSRTreeTable.java create mode 100644 src/cn/com/customization/util/CheckBoxColumnRender.java create mode 100644 src/cn/com/customization/util/ColumnGroup.java create mode 100644 src/cn/com/customization/util/DataSetFinder.java create mode 100644 src/cn/com/customization/util/GetAllUserIds.java create mode 100644 src/cn/com/customization/util/GetChoosePath.java create mode 100644 src/cn/com/customization/util/GetCommonInfo.java create mode 100644 src/cn/com/customization/util/GetMessageDialog.java create mode 100644 src/cn/com/customization/util/GetMessagePromptDialog.java create mode 100644 src/cn/com/customization/util/GroupableTableHeader.java create mode 100644 src/cn/com/customization/util/GroupableTableHeaderUI.java create mode 100644 src/cn/com/customization/util/KUtil.java create mode 100644 src/cn/com/customization/util/PackFailDownInfo.java create mode 100644 src/cn/com/customization/util/PackResultInfo.java create mode 100644 src/cn/com/customization/util/PackSuccessfulInfo.java create mode 100644 src/cn/com/customization/util/QueryTaskOpinionTableHead.java create mode 100644 src/cn/com/customization/util/ResultDialog.java create mode 100644 src/cn/com/customization/util/ResultTableModel.java create mode 100644 src/cn/com/customization/util/ShowMessageDialog.java create mode 100644 src/cn/com/customization/util/TableColorRender.java create mode 100644 src/cn/com/customization/util/TableColumnRender.java create mode 100644 src/cn/com/customization/util/UtilApi.java create mode 100644 src/cn/com/customization/util/WriteAndCopyFile.java create mode 100644 src/cn/com/customization/util/image/info.png create mode 100644 src/cn/com/teamcenter/rac/form/GCSelectionUserCommand.java create mode 100644 src/cn/com/teamcenter/rac/form/ORTableColorRender.java create mode 100644 src/cn/com/teamcenter/rac/form/YSR8_ProjectForm.java create mode 100644 src/cn/com/teamcenter/rac/form/YSR8_QuotationRevisionMaster.java create mode 100644 src/com/teamcenter/rac/stylesheet/stylesheet_user.properties create mode 100644 src/com/teamcenter/rac/viewer/stylesheet/beans/CUSTAutoAssignItemIDPropertyBean.java create mode 100644 src/com/teamcenter/rac/viewer/stylesheet/beans/beans_locale.properties create mode 100644 src/com/teamcenter/rac/viewer/stylesheet/beans/beans_locale_zh_CN.properties create mode 100644 src/cust/com/rac/changename/ChangeNameAction.java create mode 100644 src/cust/com/rac/changename/ChangeNameDialog.java create mode 100644 src/cust/com/rac/changename/ChangeNameHandler.java create mode 100644 src/cust/com/rac/integration/AccepComHandler.java create mode 100644 src/cust/com/rac/integration/DeliveryApplicationHandler.java create mode 100644 src/cust/com/rac/integration/InterationOperation.java create mode 100644 src/cust/com/rac/integration/ProjectPlanHandler.java create mode 100644 src/cust/com/rac/integration/QuotationListHandler.java create mode 100644 src/cust/com/rac/integration/RequestServer.java create mode 100644 src/cust/com/rac/integration/UnicodeInputStream.java create mode 100644 src/cust/com/rac/integration/XMLDocAPI.java create mode 100644 src/cust/com/rac/integration/test.java create mode 100644 src/cust/com/rac/workflow/ComparatorTask.java create mode 100644 src/cust/com/rac/workflow/CustAddReleaseHandler.java create mode 100644 src/cust/com/rac/workflow/CustRemoveReleaseHandler.java create mode 100644 src/cust/com/rac/workflow/ExportSearchResult.java create mode 100644 src/cust/com/rac/workflow/PackExcelInfo.java create mode 100644 src/cust/com/rac/workflow/QueryTaskOpinionCommand.java create mode 100644 src/cust/com/rac/workflow/QueryTaskOpinionHandler.java create mode 100644 src/cust/com/rac/workflow/QueryTaskOpinionOperation.java create mode 100644 src/cust/com/rac/workflow/QueryTaskProcessCommand.java create mode 100644 src/cust/com/rac/workflow/QueryTaskProcessHandler.java create mode 100644 src/cust/com/rac/workflow/SearchResultDialog.java create mode 100644 src/cust/com/rac/workflow/SearchResultTableModel.java create mode 100644 src/cust/com/rac/workflow/SearchTaskDialog.java create mode 100644 src/cust/com/rac/workflow/SubmitAttachmentInWorkflowCommand.java create mode 100644 src/cust/com/rac/workflow/SubmitAttachmentInWorkflowHandler.java create mode 100644 src/cust/com/ysr/Activator.java create mode 100644 src/cust/com/ysr/test.java create mode 100644 src/ysr/com/teamcenter/BPMTest.java create mode 100644 src/ysr/com/teamcenter/ObjectFactory.class create mode 100644 src/ysr/com/teamcenter/ObjectFactory.java create mode 100644 src/ysr/com/teamcenter/SendAccepComToBPM.class create mode 100644 src/ysr/com/teamcenter/SendAccepComToBPM.java create mode 100644 src/ysr/com/teamcenter/SendAccepComToBPMResponse.class create mode 100644 src/ysr/com/teamcenter/SendAccepComToBPMResponse.java create mode 100644 src/ysr/com/teamcenter/SendAccepComToPLM.class create mode 100644 src/ysr/com/teamcenter/SendAccepComToPLM.java create mode 100644 src/ysr/com/teamcenter/SendAccepComToPLMResponse.class create mode 100644 src/ysr/com/teamcenter/SendAccepComToPLMResponse.java create mode 100644 src/ysr/com/teamcenter/SendBPMToPLM.class create mode 100644 src/ysr/com/teamcenter/SendBPMToPLMResponse.class create mode 100644 src/ysr/com/teamcenter/SendDeliveryDateToPLM.class create mode 100644 src/ysr/com/teamcenter/SendDeliveryDateToPLM.java create mode 100644 src/ysr/com/teamcenter/SendDeliveryDateToPLMResponse.class create mode 100644 src/ysr/com/teamcenter/SendDeliveryDateToPLMResponse.java create mode 100644 src/ysr/com/teamcenter/SendOrderNoticeToPLM.class create mode 100644 src/ysr/com/teamcenter/SendOrderNoticeToPLM.java create mode 100644 src/ysr/com/teamcenter/SendOrderNoticeToPLMResponse.class create mode 100644 src/ysr/com/teamcenter/SendOrderNoticeToPLMResponse.java create mode 100644 src/ysr/com/teamcenter/SendPStartNotificationToPLM.class create mode 100644 src/ysr/com/teamcenter/SendPStartNotificationToPLM.java create mode 100644 src/ysr/com/teamcenter/SendPStartNotificationToPLMResponse.class create mode 100644 src/ysr/com/teamcenter/SendPStartNotificationToPLMResponse.java create mode 100644 src/ysr/com/teamcenter/SendQuotationToPLM.class create mode 100644 src/ysr/com/teamcenter/SendQuotationToPLM.java create mode 100644 src/ysr/com/teamcenter/SendQuotationToPLMResponse.class create mode 100644 src/ysr/com/teamcenter/SendQuotationToPLMResponse.java create mode 100644 src/ysr/com/teamcenter/SendTravelOrderToPLM.class create mode 100644 src/ysr/com/teamcenter/SendTravelOrderToPLM.java create mode 100644 src/ysr/com/teamcenter/SendTravelOrderToPLMResponse.class create mode 100644 src/ysr/com/teamcenter/SendTravelOrderToPLMResponse.java create mode 100644 src/ysr/com/teamcenter/YSRServerDelegate.class create mode 100644 src/ysr/com/teamcenter/YSRServerDelegate.java create mode 100644 src/ysr/com/teamcenter/YSRServerService.class create mode 100644 src/ysr/com/teamcenter/YSRServerService.java create mode 100644 src/ysr/com/teamcenter/package-info.class create mode 100644 src/ysr/com/teamcenter/package-info.java diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..64378ca --- /dev/null +++ b/.classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..53eb7c9 --- /dev/null +++ b/.project @@ -0,0 +1,28 @@ + + + cust.com.ysr + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..f42de36 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF new file mode 100644 index 0000000..242c1cb --- /dev/null +++ b/META-INF/MANIFEST.MF @@ -0,0 +1,52 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: YSR +Bundle-SymbolicName: cust.com.ysr;singleton:=true +Bundle-Version: 1.0.0 +Bundle-Localization: plugin +Bundle-Activator: cust.com.ysr.Activator +Require-Bundle: org.eclipse.ui;bundle-version="3.8.0", + org.eclipse.core.runtime, + com.teamcenter.rac.kernel;bundle-version="11000.2.0", + com.teamcenter.rac.aifrcp;bundle-version="11000.2.0", + com.teamcenter.rac.util;bundle-version="11000.2.0", + com.teamcenter.rac.tcapps;bundle-version="11000.2.0", + com.teamcenter.rac.common;bundle-version="11000.2.0", + com.teamcenter.rac.processhistory;bundle-version="11000.2.0", + com.teamcenter.rac.auditmanager;bundle-version="11000.2.0", + Fnd0SoaAuditManagerRac;bundle-version="11000.2.0", + com.teamcenter.rac.schedule;bundle-version="11000.2.0", + org.eclipse.osgi.services;bundle-version="3.3.100", + org.eclipse.osgi.util;bundle-version="3.2.300", + org.eclipse.core.databinding;bundle-version="1.4.1", + org.eclipse.core.databinding.beans;bundle-version="1.2.200", + org.eclipse.core.databinding.property;bundle-version="1.4.100", + com.teamcenter.rac.viewer;bundle-version="11000.2.0", + com.teamcenter.rac.ui.views;bundle-version="11000.2.0", + TcSoaCommon;bundle-version="11000.2.0", + TcSoaCoreRac;bundle-version="11000.2.0", + TcSoaCoreTypes;bundle-version="11000.2.0", + org.eclipse.ui.forms;bundle-version="3.5.200", + org.apache.poi.39, + Fnd0SoaAuditManagerTypes;bundle-version="11000.2.0", + cn.com.origin.autocodemanager;bundle-version="1.0.0", + cn.com.origin.autocode;bundle-version="1.0.0" +Bundle-ActivationPolicy: lazy +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Export-Package: cn.com.teamcenter.rac.form, + com.teamcenter.rac.viewer.stylesheet.beans, + cust.com.rac.integration, + cust.com.ysr +Import-Package: jxl, + jxl.biff, + jxl.biff.drawing, + jxl.biff.formula, + jxl.demo, + jxl.format, + jxl.read.biff, + jxl.write, + jxl.write.biff, + org.apache.log4j, + org.dom4j, + org.dom4j.io +Bundle-ClassPath: . diff --git a/bin/cn/com/customization/create/CreateFolderFromTemplateCommand.class b/bin/cn/com/customization/create/CreateFolderFromTemplateCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..20b9925ba0530791336e50c36e4ed288bdce33e3 GIT binary patch literal 1342 zcmbVMTTc@~6#fP(3w60)y#fl_mdh6KN&zh;O-LGJ0+RSRY{xpfmu5S~;Da&7cM}s| zG$y|IVt7!ag^1C2e+Pp83FFze1e6*g58dv}obNl|IrE+U_UqFZ0AomKsA7njj$yjC zVditnwdH-Tq)R)V;7S;Y;$PCW(!xu6u01d8tVIV2*S5Kn)(~I_`)DP&Z3;&T&+xcu zaCys!FXj}ztN3iP9L`Y9vss3b)c%kgv+-=!l4em(jG<;iI#NwBBt!p=PTk>4+_1Ql zG3JyfolGpezz|5dX%R#<4(rgMlekcLp$-fUIu4Hi~!i zilM#4E?wg~Q7cM7t%zypVCdWhEasigOTUw~=wj>3H$0SbOvR$)n9@Z-X13U;TXe z^vBm1n=fB)J%3!%IT=Jdj{5SBQKC?#I{b(eI!>aSdPLn7PMTq;Qs^FZSxwBR=+$uw zrx|LMTT0E)77FiyP;5WWYBUo(q$fXJ!qu*9|2tsg`vZh|+asgo>L=E{PeDyQ^F>TtAgknZbvb!>G1VoYOGI(7SK2 zj`O%c?V?;skK2NwWxHMco-&GiL>R^;|Mo63OqZ`@=k%Y7cIIaH2>6z5Oi4#v%iD{> zo9By`pEc#0+*;tC^w;IhfVwSn43nvYv_4T9Z5p{QURFZWoR{RS?QtZh<%)jx^Z)H} z0tV;Yyl0A}^cD8)^9>pH3D8S(S503fMn4+9;u{$WwX{=5s|N@a&!dr51S10uA5((z%Kwg9RKfpr?Sob%fV2P{2s!1L{|C@f~5SFiy`7;stc#sVBw;bfb~{(u^4G d_LR6Wfk|2cQB08rUrQ8MaFrMs;fUio>T1T0JRXqvDMW-(X~(Pl^v_(z@=TrbkMvjZtyhz>*l$osC=n$HT!&~f{! z8a$$``SH_^31>rTWxe>hB<5qclbH7DS@={3cq)jas zDOVrT$*gjuyUBJoSuP7DnhhKK(Z<_aOFJ!iRmlo>h=hR7DX=8*T+o)b==2bg_cUow z$o8IS^xzxf(GQ&c(!`vjyF)R+7W#C@jUM4VE|A4=5y=YSDM=sK9eqXo9hZ*&M-B2T f%KQ2sjP42}z;*i7!VTOc*(QE&QN2{j3Xjyk#?Rku literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/create/CreateFolderFromTemplateDialog$2.class b/bin/cn/com/customization/create/CreateFolderFromTemplateDialog$2.class new file mode 100644 index 0000000000000000000000000000000000000000..7a940ef916c00c3dcceddbdf249051ce71f20e39 GIT binary patch literal 899 zcmbtS+iuf95IvKG7#l-EfpBXn&^)B6gsZ|6t%|D9NJ!=)waWX(S<}6tWV6zlLY)ey3`eXK zP9}ruH#GS~+MzYYzATP%et4@yZl>Lh01ZO>P#lXS7kZj}93RTe1!xkMs;D?|i9D9t zB|Di1PF3lomX^?T2deC@GlBH-3^o~OOKIh{32%B=0a_gq8Ur(tAqY2P1h^idj#i8i zZ9={06I!X#^24kcOS><|xg;#4CKLHcSmphBu;E)HY+r#-cY|ANiAu9i(tb9!kQ2gk zFa58qyI$hW)lq~8cog6v;q~Q3jqw;A7WTY4fw<4bi|P`hJu|bJ94fEL%Eepr!gs*U z?dmKyrP9;)(jAydjOSkH$WQZpy$JC;&AT$lMOn%cPkAzRKG#6)wjU60ag9%ih@&^y zdd0qvME$jIi2FZq>#WMT&3BV?0F4E{F8a$C_SYgYP^c48}3$B6clmGw# literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/create/CreateFolderFromTemplateDialog$3.class b/bin/cn/com/customization/create/CreateFolderFromTemplateDialog$3.class new file mode 100644 index 0000000000000000000000000000000000000000..e9073f3be07d21b2355248a42f5c365250577f86 GIT binary patch literal 899 zcmbtSU279T6g`u~th=rzts1{tTiZOODY!y>vZYdD1H$?Nmb_0k*L2G6jLc42DE=wI z5AeYs;ExjTYy-YXAKHbPz4y-L+;h*pzyJLF1z><~fSSN=rjyJRNj5K?Db$&C%5cPz zbd(IM-^k=svLkDXLn=Py{P0T2+|0Uz01bimu{@DUF7+&VH#w%v1!xMaR#AEC5;`I6 zlKspBr>bxkt(~-m_T}Y20M(itF&@^0xx@40ooc1G=^qMAp~y52yi_@9jzE4 z+5+{SPiUn|)7yD5A$uq%ISDMMCX@MCTIKyku;E)1*t-Is?tois$x5^LWIq~P&{SZp zm;P7Q126H;);Pj_JPhza;Kk)djqwN_7WTZlfZ#q?E~+aKeK2#I(MWksHZR_qr@jMj z?m%a`DV3hRA$Me^F*dx=k)P)IdI`j@HSfwWmt{#M)_F2@KGz`HZ9gF1;u@b25l3&Z z^_+bliTc~$5chxJ)|V=0iSH)o0H;{yJFe^qw{eF(fxGA|5cU@cVgD=Q?eDnv4Ygl8#K!Ydp1ea+j= literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/create/CreateFolderFromTemplateDialog.class b/bin/cn/com/customization/create/CreateFolderFromTemplateDialog.class new file mode 100644 index 0000000000000000000000000000000000000000..7f2827e3e22ee550e2d00a62f6ec968487222edd GIT binary patch literal 11917 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 literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/download/BatchDownLoadFileCommand2.class b/bin/cn/com/customization/download/BatchDownLoadFileCommand2.class new file mode 100644 index 0000000000000000000000000000000000000000..7359759f959a64e8a01b084111dd76e207c22aa2 GIT binary patch literal 2874 zcmbVO+jA3T6#so~VAHS&gsV_41(Bwq4R?f4v@H|^X~DL%R0Y{?w(ZhnH)c1b-~~{8 za1h2fr86?a_~7`UOdV;#I*z{h;NKw^pL}=5%kSHyF=+$s&`iJUIp25A@B5u|_P2k2 z_zA#He5jy8V6SdPbUPK%vyN-0%!`_9+EyfCpSO~>mWVWKu0D8(vp8q1X3}V}Qz^|# z>`>qn2uV%X&{Dc#xke_E(e#LB_D7of9G7FaDb|{o7g(UB(@9hJ&KKAopI!B2tm%K1 zsDR=ajzjANHkZ>LGBTEtjC8eh=ESHm|A1+k?m>ZFwdFLXnOb^Zs9PX#ctkhS5)nti zLf%`(=)$!HSpi>*oiGBZ#9|dySRzna8|totz)}_SFh79hSgBxzfCv540W7gf#VR~c zy9Nw5@1^uD^d#rhFdA}&cVx2UK^h*uMr zE-k~Bv`gC-SxJV^icd_Ew_nqZ9A9&a(FF*jUcpv@on>&6+{wdRR$WB{A_PiWbRkVx zmeGuJ+OQT$YSuuc)6JOHK(q?mu~WegfyG687aZ3}sn~_xWR9Js56g3^rX4v!J(t=H zx~PJ^0xOFYy+fO`W-?)9{MaY3+MPn9!KD?AMSlV8K~&Q70FSSoXi`bph=NvzgJ*lGS1MkWCMjv@XwvfIsKB}+ zH}Z!RdD0j_9L);aN>DuBch1mV1;@*$sY2Kmn9`*=LkeCK2$y;8nc}UsL|H*6li8dU zPB=z3VNa=@oU2(eazR1QTyK%$9mcRJ6QzP)frh6?+#$`?9K)5VU8eaR0i41ck``|Y zd@`4;S)8NG<)H#{Q>mw%&}`8Z4RtFxQ}VuDgN%Vh0H<+QnyWDqimBO=wJe!`s3~Q1 z6$zQR<~gL2>qoyp%^#OPet7NcN26CC+`0dF?DnIv$p^Qt{eJKI!*9NPbo<*sf4t(y zAc@%1)X^SmKN7$>Bozz^Y%KHKS=UTP+E{qB0i)R-QIP`clrL>NjNW6#hUFuFM#w~C zWz+bygQI?=ndctgnaEk6Go7{ukOA4w9GeR&FUu54l8UVKevubcovx-2b+JA(D^(RD zOJMgiy$lg@+)OUV1!sE2xbG*otf&44o>qgE*oZaQ#8&QAu&w6o z1@>~ZnHC7HvgS^|R}AnZAEj>PZhJ8v{uLjE@1stj?K^Cn#Gc;ZOB2|?bsUZ3Xd1_% zsnr-)!{azs*a-iE_ED^7cVZN)*maCz3A?UQ1lV=o#KuXS>XjGqzdAgD*V`v?y0?A; zZ;hkxD^v%K;DGNQ%$~8JJvEB+jBiaNGi z(TsZZuy~$91O~QYn4hXwSPQRWH?Fgs+`vAbv!5p&z)dvb3l=De-YyT>TY2>S_>`LG ziQZDYgArVy9m9ONi=0(b&xd#M9(UiT=331A8-{|gf=lcELe;-~8KH2KO-4TS6$(}0 GgZ}^*l1Y&O literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/download/BatchDownLoadFileHandler.class b/bin/cn/com/customization/download/BatchDownLoadFileHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..a69d2c14d2c10cedc8b9597fdd2088cfb43ee694 GIT binary patch literal 1538 zcmbVM-%k@k5dM}H4r>tvDhgC6KU)M21QErMAcB$ zP5c9V@jp_(J!&O^Ccwk(%J?Q2G2BeTK&wD|-gebiwOmlajx0Dzpfm4T z(%F@Pt?k-oJlwM@0*m?UU2jRiP)EwDhD@-W%{M;zTI9u=tsN>iT*~G5<)Jhk>6Xmb zg?(j(gi5R(S<2Uitr+MQn7jUkp=kna0{U6GWc$U!5nbr%Xto5BGKJ z1_b7_S5BSV)c~0!hIH?fwU%spMd>6kf-wW50;3mP=s*Roa?G98dg+rGkND#Uwi|AT z(mL2-0m-eLhM5rP`ro;F5D6%Q(u}~w=y#H9OSIX8HtNY!2i!tCErAZ)CP*js zIIXS-<`?1P+!_9g)aG~ey`4NkdTZ(n29MF9h literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/download/BatchDownLoadFileHandler2.class b/bin/cn/com/customization/download/BatchDownLoadFileHandler2.class new file mode 100644 index 0000000000000000000000000000000000000000..48f2d835898de68f1edd41e3f2c78ef04e9de9ff GIT binary patch literal 1543 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 literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/imports/ImportBatchDirectoryCommand$1.class b/bin/cn/com/customization/imports/ImportBatchDirectoryCommand$1.class new file mode 100644 index 0000000000000000000000000000000000000000..53d5f3d53aef4f1aefacbc33b67115901b47b8dc GIT binary patch literal 941 zcmbVKZEF)j5Pmjy=FE9EvDSC3sYa+3JVO=4wnB^+0;ylD{ouFFX4|aX?S{QQQU8@t zDJb{@{88fU8L6KF=HPap8D^fHnP-0f`t}3BChkS3F+3AG6(&zbSvZrc&)g}aQn>^=w-04OL8Cvi82cBkJAEo;fEBTnA?k1|}JRN4UhWId?XH1UOWg{42sP;RdeYT7;_%Pv>UOkuAY> z+@M+T=`>TKQk$VW^ef;b&xO=Z+SGE9a&?&YMuj8ndV}4!gWhS%R*V(g@>5)8ctQgG zXZkxo_xOz|t&qMkhW4DAANn05onC2?nL_EKJ?SQ9oZzk(F_IspC>?Pm1Ffa)XS^t6 zfi_7V(5ACi%j-_4Mt_8}k0^FwL8Wp-mcSzdaL5EOGq@I?( E-$9rB#{d8T literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/imports/ImportBatchDirectoryCommand.class b/bin/cn/com/customization/imports/ImportBatchDirectoryCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..1a25d531df7ec6b2a16e68eef2f647df7096f753 GIT binary patch literal 943 zcmbVKZEF)j5PtTW=IrH~YSgHy)@oa5DtHwAAXW=8S_p)Gu?_ffvt8-xy@b7uRR5J9 zR8a5-_@l&U(_j@uF?X;tJ2TJB>@)N2`{%C!?qMTDAn-uti7K*0jZ0T#=ACq=$P<%| z3hTC0A6j^=ZLZVg zp!+jcpwcalbc8w7V}w`|nA>a*79emT#yqMKwTm$>c~7WMv>H1tu+%rX-XCW}Z4cxy zrKQm?luQTG8h@V}EAH5o0uTGM&Vjr%<&mYI0gyzAQ$TDaj~ydvM}~c`>$1?-@_c>R%S^?ko953dFrU*S4F=veYG0aSB{x!Ji|b z7ElXuj&gyw3U3i&YWuVVl=ZDoSlqhv0q3bS-cJyhc{UgeT;+L<$QBl{j3zD3QxvYy z=f67rRb~zRpn3jYWtZIuM#W#ydcgwMKjP+Djrye56?S(UHLOkY$EWer`~f}w4Qp7Z K^c&Tp73D)HpDh9lf{I{Bpn^6j_yCglI330^u-)BErv&^%yy}Y> zP5c4A_>a^(ORXe;0Umblo!N8Gow@hS{P^|tJAhd%I%r^+7rrZkvMZ_;6O`2lZdBmA zsvHK|RNQ=ISGWZoR9C;{3)liD1OyTmquSO`U+vR$e(kMMo-#*C zJU}-?sw7RWsx={(!_ZSA>Mg@;CR@0errtEml|K_iTIs!sR&u9mNT3G~ZTtEe<}%k# zp53+t=_Cei|C6<*tOq;XOJEqI4n`P8E;!P@)V}oGtz5nMNsL7r3bpdhrr~0Li%LlP z%37LnhK_%|s|S$?xh_pJj9*;@Bwrqe3^Uh0Ey<3KVlUB+)LSb#Nsf_j$1X~LzAS`J zol$N5$$Tejz_rQPNpefrd zq(Q}|uaTa$2D0=@(0GexE?Gvlar^{{PtorrjZM*F7h1?qo&s+b(Z^|J=nGQo-_Y}J;skvglbqI8k(xF0Jh)VZ|s3Fd9+y z(P}>>9-x0|LJcB?AwrFyj}U2OqD?K)7AakAQ`UQg3EGa0ox~L7Xd&OlG;ycMo55r9 mEcXmO>@mzybT?wZDM8EubMVB$Gi!%mImp_BJtss17XAQRKdcJ? literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/imports/ImportBatchFileCommand$1.class b/bin/cn/com/customization/imports/ImportBatchFileCommand$1.class new file mode 100644 index 0000000000000000000000000000000000000000..a363e6cb364131eeb5d8b1f8279ec3cf89bf7fe3 GIT binary patch literal 911 zcmbVKZEF)j5PminbLKpoSnF$jH$sirHB?ck3Ncs+q<*pXgWoorZL@N>8}{}@{8vJy zpx_ViM~Sm%q<$!hIk?%GVdmMH=h^Q+zI+3)fjcp343DJY(&k*2g}1r>D7?0Y>wIRN zFZi%JUkER!TRKw%o9DtzI=vWmhW0!0UhqtqeZDhwN=z6UeyWSk1A-kbfV)WmPqoqh zIm45+g%IxUGSmllqMBehmEr^%2_l?M5o3uVS_=iOkv8g8nU9s*5#vlTERU=d*{*Op z#Pei5EW_}4kwH2=S|)O(iE)l$iDC8lao59BB4J({nb|^{{cYu^c9Pj+n{?Jm(Oc+{mk?-xrSB(K$?uQ= literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/imports/ImportBatchFileCommand.class b/bin/cn/com/customization/imports/ImportBatchFileCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..36648cd6389538ee7c58ac3d92dc96a6a1cb39ca GIT binary patch literal 918 zcmbVKYikoh6g{&|v+ZV^YN}C_`fi~~!L?LDs1#zb5D5KZ8}Q>~I?}QG2)h$0{wqJI zpx_ViM~P>)!73D_-G#Z2x#!HCGxz7OZ$AKRW8H@*u&vTaWl5x_h0PN4QCgFwkx3?5 zZi{G8+E>!5<2@7WewHLMJ@Qcz=s1+sGEq9UI*)RxB5B@5y>Vgb+umSrRxVJJlSyn; z$t|!o{6F+?&^w3h2vlF1)Yx5tXB(GBcSZui>r1Rhez#Qr!d@KvhZFEM95V#&<9@T)}N{Ab7$JeJ?O|2GK9-36|Pm{6E59ByzrZLQv zj7KszE}kVT_Sh5x&xcod0!q@9Go`8eU;6rJlk*CcYg++Yxa;nDPv8Z0zWikDbViQk zL5PP=lKH~Q+*18F*)&($jgUb5;-Px-UVe}Q;UG+8UO$Q literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/imports/ImportBatchFileHandler.class b/bin/cn/com/customization/imports/ImportBatchFileHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..a20d4fca2853fe4be57d44d736720406ea8d83c1 GIT binary patch literal 1524 zcmbVMT~8B16g@)=i?s*>73D*|p+#Upz%L955>S$Y4do_Bq*ZYjP##O$lYY^DT{u*Z zCRA$u#8IIsY1u-z!1Q(C{<@@a2X`&>2#lEyX(dYzBdN${ac$|oi=5D2-Q0MiUC-6; z)3}FTflN{9wMrDxay1M+*NHpIMrU*R`Y^SA8LZ6;#p_QD(Xb^wpm?v!+ED z220GZnbWI@k`saJ4eo48LD@WYhSaC{cbaQUeAt6F>gjU>+(J8d0v)(bkWT7J?z&=_ zpM+2HWb_L%Ti?+4cKQqh+cTdrbczlmM^DjeWLA8nbCM9HJMqqG{w04;`*jW4yrD>7X5Qbv1#X=>Px# literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/imports/importfiles/CreateDataSet.class b/bin/cn/com/customization/imports/importfiles/CreateDataSet.class new file mode 100644 index 0000000000000000000000000000000000000000..ded9605306aa1136d1ac05c5c27628e9e3af12ec GIT binary patch literal 20224 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 literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/imports/importfiles/CreateFolder.class b/bin/cn/com/customization/imports/importfiles/CreateFolder.class new file mode 100644 index 0000000000000000000000000000000000000000..3ceb7979eeed2521d3fa19309039c772585df275 GIT binary patch literal 1299 zcmbVMOLG!I5dNAV8&(Jj8c3o<4aD#WS>vNTVCjL96XF4i`>;%K6WFD82VZ}~KN71n zR(Y^I`=cy-cPX@rNTG+Bou29by8G+y{qghbHvkWCUqgiO$g~a985!opQ_jeGFO=oj zhBX>HuJWee6Kg0vqwY$fWWyQurK=%ISU(l7g)tQNzwN+%8r%=$bg&hssg!~fxCU65cxljYCI`77E226N% zNt{bY=J^;`CEx+&ceWbD;+u9PT&sqIG>O@g1jV>dB)~%mW+1Fp^gIXYS`z- zT*TY+x27EX6Oh1x-&mk{<(|6z^++PJ3Pcc8RMU>xi zUQQkg>9yW)(+#G8iug>S~NaxW`fi$G-r_09_RT literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/imports/importfiles/GetAllDataSetNames.class b/bin/cn/com/customization/imports/importfiles/GetAllDataSetNames.class new file mode 100644 index 0000000000000000000000000000000000000000..c9d57e51a0045b263459a8743091e6dc79d62ca6 GIT binary patch literal 2192 zcmb_dOK%%h6#lMbdz^{ehNNy|N?QtTV&^q&-3Dr>fsi!C)Oip`MWu^qGQLSCwP&oE zn~ES+LZWN-=>iF{$gZMPN+C!U-SP|gDJ)RRH)E3~qyh_A_&&~@dtTpnj(^$Neg+_i z1q~5_g5?;NTQjURU%55=b5q%_W7xI2>nXpvFWXh=8`q^8uU02bWtOFyF>BJ-5EbZL zHSd{5)pS;j*`-x!DS`N??bvEepe>WVDG;4-D^f=r+LMSOE^wq|J91{Nwj{j;bEzr? zx=OBPR&Sb~9o(D3sJdhO0#{4_A;bc`twe#d&M!;n#VjA|3Ay42c3@k%e3+)d3n$FiMEa&ysja=56ecrNu0nN1hguh6?G>B zw5TJ6Q%Ri0n*v8!+j&_vm8|SmjgXCI4hEmS-D1%bc#DK6PLIzl`gLj9%eEDgQo~t+ z!IrXX!ks{`K!+Q$a?v4Ub!5=5AuDjMB|AwBV2~!5<(%i%rKi>fdS8{?!F)R~jPn`{ zfx|EH3ZP2j0xq(YW~CyK+H0)QKZWe48ZHS8v=ri$Tdhbhff0d(<&w;f@^yCiDIHfp zzU2QQ*K40yvL5t&5~E>n*2!~KR;G1#fn7mPw=<4LKM3@-h@pV)E04?w=0wom2O3Er zS=rZ=oeiD6ot3oruv8$|n)AKXW_u=@Zb-{as}vLvtNax?y8_y<0hYru3kyB)*B> zbSxFW_#AIhlKVm3?PaecYDxQu#`{u>3n^>Uv+yavE^9}6qK z%@^;7mHi&$_<-=GFw57IjIakKT%&~;y$<6#J|tpuXh)GRH2TitBix|geU74r-WR)i z4|nyR@O=r>)SF?h0nP~ozGmrbj*h8#t_zF@hc V8ia<7h8`*h$14GW=4m2=@*mWt$d&LtU|gTZe$R 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 K8D3cnU;hJh2$rt^ literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/imports/importfiles/GetTargetComponent.class b/bin/cn/com/customization/imports/importfiles/GetTargetComponent.class new file mode 100644 index 0000000000000000000000000000000000000000..409abddaf6e2f4ff66b7ee788f06789327d4079b GIT binary patch literal 2302 zcmbtV&r?%Z6#gy&Uq~Nf`5{F_!JmW#UI8uCh%H3GNI)crMXl}QaiLE`UYfi(+Lg|9 zrgdDjtIpVV(-~)+b~>Z&w1G;e)eVd8`yWuKn|AG@Kfafw{7M!$UF7Dz`_4J{eBb%b zdB6Pq=qCUjm{L$A5HMnzVa;krDrsA@=6kwrS~1O>javyjnfsqMqcW)tNPA3A%t$+E z@oh}TYz4&vJFe*0bS2d}P)|G_HI2-z0fBAD&6sJQ5IEBG+}_@Cf#RSwB|UKA1r-WZrqbjcFNMH%6(!gv zP#!j8ayT_RDHCJ*WK;@Nge^mlj_V22dCnac+wYi3f$s4CV25zZ$yUggv!n8wnIx|Q zN1MEbfL)b|n2c&;!BuY8y9GShiI)`A2xMyY9Gt4C#V&zLCbFq`gxA&Ny;vw4r%1Vs zLQdtTbwjdPtGNXf>=rm!puG7w6zriCwq&{&DeF3QD?hP@wVm2Xjwv-d?`*<k1*<705JYn^A2@CX@P%?6t0|@S}xNi(5%*eXuFK zmSDtYLNkHbQG#iKF8~cV~|o}$Tq0J;jKlWmtZecugiRuY`!bY za6F{PbL~+@IYnfY%`T^cYnOSqDsBq84qYl<#W4ZJ(dLafudkwi9+{;$juQ&HH%ywy zjU+&C%V;V^QpZ|H9Dpa=cV z;22=I0(JF{I~E}or!mM`#VIFaQvxl8O!I)`?j-ac45=7)pu24=D;W<)Fsk6}e{$c5 zLPf+$Ny*4P8dGpiz*j)1`O4_GvN+FES|drBnzFJd9!%h(f(si-&8Sz!CA>*=^4*jk z<&fAwM0UalycgVfOQ3F3t1W->0sHK?dq1$rm~M_(XT)wU05#=_SgC{|`}u8Qg$DBG zQ>){HM$T>*KUV@p&H(4m#k~SI*HS+9^Sp@vp5{6JeBYz&8$K1Goa^?C=N=SeFKrvJ zgJ(Ol)_4&We4<|_D%FolROMp+LBC?YJKg*p%F?J_M3)HX_OABFs2lPxV!!_h>hGe` z{}}b*`=}ajNn`JQs1*k)4wcNK>AdgZ>Q+2t)^=|o*YFRI=SmYHv$xUH%{S121j!?!yFEk9<9)LODzsDLK{)G(4w8^F8Twz zQ2Y;rx)cZn^$OdM{|$=!8GZOw!Yf=IK7XZ`!}sM?>>H4WeQ9(KeT%>XdL}A@bLjJ@ zaVm{)8fScqsP;X<*r!na72|2VaTg^d;c|`-v3|=NvOG8p070%NQG-70W<}c(;yOsI zLpaMuiEzDy(F|^fKW3N1UBlVnpcVA%#M{t`+d*3n*I(!-N(B?*8G{Q<^0)}bzaiUv AS^xk5 literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/imports/importfiles/ImportFile.class b/bin/cn/com/customization/imports/importfiles/ImportFile.class new file mode 100644 index 0000000000000000000000000000000000000000..ef528ae53777a358fd9df7b9da2b9ca5ce37e29f GIT binary patch literal 14488 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 literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/imports/importfiles/ORProgressBar$1.class b/bin/cn/com/customization/imports/importfiles/ORProgressBar$1.class new file mode 100644 index 0000000000000000000000000000000000000000..5d59d8d14923e8ad0cedadbaa7652c6c40a69802 GIT binary patch literal 896 zcmbVKZEF)j5Pl{(bIp0RvDW$)ZPk28Tku*cBBls6R4Bw3d`Y3-wwJZta@j4rmj?VI z`i}%f@q<6WA0^J72O@|c?%;N3W`}2Ho@aji{PrEdCT@qQ5$>ltNzFJ(CoVT*^;YD{ z=tPZAjLltnzfqZV$+H*FtvR&PxktiwHbMl1_OUn>iJ0bzJe4|6_LLr(>GnvRpI7g^=eZt&8Y58%)Ba!6gy^N2*i=5|-C-*KTAn+8T4sDl zr@tw9BJ(3NigDA+(eQe|-X+AlT1(r{gmcninYF9);!>;S1!Swne~1~5H`%(&zK=w! zYoGb}g7{;RGskCxbAWef@fjC(g!7nZk8lACCBk-z&|Lk5DENwte*mHa`aKu>P=G8J iezODtH*gJYhN+6sJ literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/imports/importfiles/ORProgressBar$TaskThread.class b/bin/cn/com/customization/imports/importfiles/ORProgressBar$TaskThread.class new file mode 100644 index 0000000000000000000000000000000000000000..64d50a5bf4b4da093a7c02486701f69026399c10 GIT binary patch literal 1697 zcmb_cTW=Fb7(HXJv#D8#3oZnb(zK*tn~MnuN=cxFln@8!QeydmhpLnH5VqL6*6cb> z`^<3773zHR=x7h?01>@&YADbU;jM&6TnF<+DHgo zaQ&hiG>UF3jDm*uwT!&LFM5q;prf!mUia!MEY4qD(801+VR%vM(TWUjR&Hn|Yc?!_ z%olP+7VFYqE_SQ}$t9@;&XjxGU|gUty5WVR$2pnsd@njL5axPat=GJKRlu4IYU&LL zI1X&|rIExA2mKfz#$3K?Ja0Nkp-*6-?D=Z0)mT!xBA4n)U}rgSWxXo3XTG~e%ODe& z?6ImXc}8D;9wN*Z&q_cpz=ReGqa_KS=1rqZR7+7w-&WE#z6sx zS;?}BspCh@3)V<^%UzI0i+Qod@CjyX7CAX(H@GexzTUoFi>Iql#BoH1bQ zN;Mggn=vV8F=2yexqnkeB|lPHx0;cvU0QWj)9BK{IkW6QQ+s~27)keLMN3y1&OUPR zF)nO!M%j$_&e=7y9JrJ39kKfxCfw%y zTkN83H z{=L1|`xhkNAdJ`UgkTljm7;RlT4M`r!PykD_^-%!CC zKEp#?$0IcG7(VV`6;EOs3LSu58WLDRiF*jHTOqGABxHdRWz2H_Iqsi@{TwOroI=V@ Z+c<0ejlJf4=IJxBpK>(XpbT*pcmZTvx!C{! literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/imports/importfiles/ORProgressBar.class b/bin/cn/com/customization/imports/importfiles/ORProgressBar.class new file mode 100644 index 0000000000000000000000000000000000000000..bd3ce8172278e347a89ba0b0629f011153afc1f9 GIT binary patch literal 3665 zcmb_eS#uOs6#j0uNro1Z7y=R$mjosQ(u7Sg5rF_2oIoTYF{nsqrV|=wrbBlR2_Oir zsJQR@zLr)=X(m;s$~Vj9T_5ys_-y%|o}MKT%BoRP%X?T{M)~(dI?Rajmj#^36)%Wh}bL=t4blvTS6GD|jL=-*K zNX5;xXF9rL#C5|O)whkf9-qB!J-c>TM$#S&p+@1_BgSz;!&rtJ zLb#sM&SKXmPQ#68Q3w%oz?}3HYPzhng+s zNUqZv!iG!35cy;Xwf$qitz^&Zi@8evhqr$PaDFSp##%XVD zi9Pm{@Vb(B7D#w~;XRDwm<(Z}^e76sDsG)nh?WriFXp8nPHA`$Ium8wh#!@WGa4R} z)0{_IVr(bUK0`RiY%8ySvtTMl=Uv{+oF13o9mhGoR#ygRf~@;{si zhjt#QL!r0)qxGH5vzfmdz#LZp2o3ZK4 zx}2?+e$2~3Pnv_WJ88JC=~AIs?zn;Nq>}%u`Bx#MiZ{Xvxgq!~+pxcK!uu=lG+d81zeCeEzF0GVYy8c-u!zrEP5_H>4c~aBLkoXJc{hz!aGf7rIfW)7 zEM1w!br-o)0YRBh=fL?@jXqv8?)K4|a~c7f$cS6w1iOELoASc}+M-p{XpL4*VMSDl z1>ejJmJN%ymD6aS!qTF-C3G7YpmG>==eG;vP0VyMJ)TfuZ2Rt2VS#`3`QmLQ~> zXbY_tvBSRGhlp*IVAT|`YUCc}hq2n{l=P@ml&+#je@3%d6Pv;M;Tdckp2ntW+}azR z!EJoLeF|F{%+|^*wg>AjS?d#7^aL9*S!b|!xB)-cFPO&NSq#WlRTlRU=HB7@wb5zZ zKZQfwJw&9DRgI>w)HpT`D~qE;s~T;7TAF)2Cc3#tcb3%3Ras<)=0;x(MWXE=$kaS9hXEoX2VKjI92;h_8tkKzwJ=A%b*bOxkX<9ED_ zS4esje!{Cnsi0OfUdJ1LQM`$_fM%xTN^ocn7M!7VqM{ z0HTd+zD`zr<>M9Wq|1k)1**J{59UxgbZKdAEK&IoAI+h%^-`5+iOR?LBv4s?g@nxo bSn!NepZZ>ZhR?Y+^8Gwl`FEB`UjY9AN`#`I literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/imports/importfiles/ORProgressBarThread.class b/bin/cn/com/customization/imports/importfiles/ORProgressBarThread.class new file mode 100644 index 0000000000000000000000000000000000000000..c4ad75c4a3982cb273bdb500f1ac97b14caa8d70 GIT binary patch literal 937 zcmbVKZ)?*)9Dc6JnkB~8wKh)O=DO+HX2ZM?WZ)P$Q4osCRtxTxX&2j*G$)r-!EYtF z4ixqQ{7~ZWF2TOoUNuMVe*fw zCtrlj(qjF@<0uW@9>0@fB%?Gv3T1CBqwvgv$#Cm)_%#gTFc}4Tl))H;l3~BQ81^%U zrHp5B#8B(b!A~;DlMyA$2Rz}~Aw#QuHGMVG=`)xw#98FPz)cr6D#Wne>DwUkE-Wlt zs4+ZUjIDze+*YU!hQ>97@;-N5ETPO$?eZjgGo1_~*$W5x5ydc!`=R8@FM?(^<|)JB zf(qvMKvLQ1SbXc|jSM+W6xjzZHWk_BG|GBPW)<9Wv8{9|D{0@qX0RxGBt%TwwNE>J zRnv0u5RWJ@&~bLk;GBr597eC`fiSFI^Fki0`$LnIHt5lnXpjurBH3v*C}YE+`389( zVd^^1zkuuSo}=pj#>$7i3)Iiy{m}bXX|7QnaG&Ni+P#hjHgK0BoB3|sqn!FYb-9GC ztTnPqWUr%AbbG0Npzi;KM}KvO4Q0;IoVTiI$R^R-qPE+*jjJK+MH{A6DIlNgBLcR< hF=yDB138oec8EnwgLvAv|8up`Mu%V+e5xy9_aDQC%>4iW literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/project/CopyFolderAndAssginToProjectDialog$1.class b/bin/cn/com/customization/project/CopyFolderAndAssginToProjectDialog$1.class new file mode 100644 index 0000000000000000000000000000000000000000..b2a36bd3b96c1ed149cc5b60ba5fe86fa8b10eb4 GIT binary patch literal 1861 zcmbtVZF3V<6n<`-cH3p8A-qVj3StUrN?9ttL8utg1`BDeq()JEx!v4Jx83Y!c5m87 ze~L4XpZw?y4lIn0{s8|6GyDk0;has>b|B-2Y$lt%d(Sz~InTN0$)A7!`Uil^a10Cy z6dm7of~M`XBONr|Z>4qv-)@D$mU6UR3R<0V;MG-F^y|eaYPkM-u-4sNbfp(GvhxN~ z0+U;EN7`~%+iFMo+P16$*^%O*hJ3BCN`QUva7s0+gx*fSHCZCFE=n^Ka`o8K&lkf)i?xRvM_>CewwggV9dlYj#wB+MqoI{ zrV|y{SF7#jh6>l^hNlEFmB5i+O@=P7doNQ=l|X6Gw6pU>!=Y`}xuZNKBUKle$|a>7 z?9mc8t1weDaSBrgUJ-ct`9>y27GA|`0%k*L>TPLLQe&yK(m2lGtbx}B(ut=hsT9Z+AbftG2{d+M@5_NnJ3@> z@bveeOiUxsyv|ang@q*sHK>6+D<*DY*}#Va*9RO*3%78a0()+xNg4#s^{1|_ zUC*wOvIHTOcM~fXR`C&0Asy;-A`-R1XSU1bztT{l#0c$UR1Mq_IC6j=-n6iePiS5u zrFpq1wfygV?N6B}d1#x4ce3v+kt#T(3Ic*!VUdpdYPVZ3k9^X{{Siq!s#-eRE3(y- z0J9pjLr0Ze7K!u!FTfW$CJD@v?|4B(r)fp$&7f{UvihW02`Q0f-&bMDlToB1npm1j z`VSaNr&+gvbcR)n-_Um)ChZ@hrz^B(yNUelLs4{>3Af>t!uIN1yHGg9;c%Cj*h7pBtYk68Exr+>rr-OTw%n3;-kA#*9ln`tw~+cDmY zaV`IV03YCRjAD%PDlZ?SG8bcw(TBn4r#N-Ase~O$cNeqRqrvLXIsY!nDBnfxWkmR> z;Zw?K1Vwy?yHwm&^7|ZLP`rB-iK_VvOH9p|v>L)!_?muGbWFd&20bw?TrXYE0NBO& A?*IS* literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/project/CopyFolderAndAssginToProjectDialog$2.class b/bin/cn/com/customization/project/CopyFolderAndAssginToProjectDialog$2.class new file mode 100644 index 0000000000000000000000000000000000000000..a39fcf200164ca918b750f9492bde2ec294fe558 GIT binary patch literal 932 zcmbtST~8B16g|_fUAnBcf`T6)icKgraS8f{QJVsZ$*LrfzE5|DGGsf`>`XEGCy4wL z62XKAegHqpcxT(h7o!i|WM=QZd+*tE?!7m^uC4*RLc>Rip`EBG(Ss-%8LJ2K8@E!c zXqf9`k=UrChhKMfmWsTs(zY>usSfns_~W+ZneI0>eRvG@V}8P;jH`b1x#voKR2Y_v zDF0$3aUztB+KEGtrLjVZoS|Zmq-ksri+D;JTLkt-Drw&`Y&WMyTkkS>9i56Q7;cB~ zF%zJST8Jv@4CSUvsKru=PoqIkG9{G64@NUW;hj{G7`>8ZTZAk9ym`pKShNXY;UVFjWNT(rI9SP6Pnj!q4XpuS@H%1sdrD2un+yblD z-OOmuOLVFTC^}2lYw}$rXuY^V*!qb(=S9w4x+|0eoMMjdu&@Kn;~seo_pvZRcu#MK zFw^>h@DhuE>VqQwo&I}PU@VODCKyzKB`i~Q8BeIbgcafocr>18cutn%=orxR8*FO% A3jhEB literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/project/CopyFolderAndAssginToProjectDialog$3.class b/bin/cn/com/customization/project/CopyFolderAndAssginToProjectDialog$3.class new file mode 100644 index 0000000000000000000000000000000000000000..7a41c8dedd4ec7606bdd47a59dff8e54276cbd81 GIT binary patch literal 1149 zcmb_c%Wl&^6g|_JI&oc+ro8DRK%hxlFsST`KvCLCh@@0%RU~%P$&gNQW-Qw&k3V4n zh!yKfyu^YJ;G+b1z$&i0m|$oM9SGA8#2`scU%lk1 zGCGK2b0|d`v`qA3(}Z0aH+8p}Bt4~f&Gzu+y5gbfRaad&45dSU#DkFQUhr_=mb#c^ zn9rj8SsKVAsneh-EP7idsnjxNm`o2;QoTtm+GEmKBd|M4tMo3zdTng9`W}PRGF@2! z!?X_pGWtU;G*8Zc)8&>hP`kse#xZvVE!@V&z_Hhw&40$euOp@xY|D*I{4-2Tc zSY(*}ZK93mLPpjsJ}z0si&3m}x|4G8bT{ULw4NF&kr|6&?r$P6Fe*4bOvya@3!WsM z&QLo%8l9K7V+OI1o64T((!X!O4a=GsZfFsjMCo2frU$0$W7!gStSK4%`zuS!#_2v3?7 zzZHt2&6`pL3~lnU6J{pJTX~P}3S{iM<2mvs!*q7f)^at5RLQqR2N?Dn*oQV9NgObs z;UGgYs}wrRjwj|@jYSbu`JyWrddj}V-5L)Zb&i=Sl_W!HuR&$QbYKs095Q+KJymRG!X?qmQ2bK+8uMZzG*fTH8nmc#1AsjfmFKjUGBN9Kzw)!aKU3 zB3^FvJ@ijVZ(!gnhALw{!y7m~zsby<+rYW!XrHHj@-1CFNP!KL^CXm`{wT0##C?G@ zUXtt;GI)(F-bBvx6goMGoh#}Ju0~b{a18|tAdUUFjvHhzL&4m{6j8V6PA?Ka$Wc-Q h(@@l?DQVBANLnIk0@IkGJw%IU0 literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/project/CopyFolderAndAssginToProjectDialog.class b/bin/cn/com/customization/project/CopyFolderAndAssginToProjectDialog.class new file mode 100644 index 0000000000000000000000000000000000000000..6e235e2258f8a44bc2893b122ffa7aa55feb7b51 GIT binary patch literal 16261 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 literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/project/CreateProjectFolderCommand$1.class b/bin/cn/com/customization/project/CreateProjectFolderCommand$1.class new file mode 100644 index 0000000000000000000000000000000000000000..88f40ade7b1caaa0d4ebd6c5a4545dbfc8221073 GIT binary patch literal 1663 zcmbVMZBG+H5Pp_cPRaqbqJnRL7KH*mUKGS4rU9EYsV|X=iGFc=UCP0A?{c@r;Aj63 z35e0eAK;HN&bF8Ep{*vpWN&9Sv-8aC%rn3L{P+c61)B!?7}jlR*;*&KIs6 zPg;K99SB=lTY=z8ylH6#&#j7J%d6M9tfrR?#2JzY{D@mFmo@8kMPD({&ycz}ecOfT19=h$8C`>7AQyGlVnD|`ZpZus7;2iGd;)M9%FCO z%V(vd4xYbGut(SVj(ii8JJ^u z{_lJ}|F}h?ysYNKu;$3J7tw3m;jUNHFSlSK3yZ-BMHmttDS%G!QR9}kc3NhX^b%GK zEHg}X>2-RiC|VPbbec&@GjA*BNJQreWU#7xXN}>6I=(Y!x;-9sPWy$nI9qh!pOsYz zcwOW^wDY5rpZ}6ocY0#SYXr6^IC|tvbe~^YJvN9KFQn~yA&rffLhXB1o%sesp@+=d z=8z7@EJ{f;)8!%65|c#H7_Cc)C6k)HKr*Gd+uVt{G?@En4Plt9Mo8KuJx=>*X6_8h z%={TrnT0b_&vE^vX+2K=ezFF}ag+XLQy#@F+$N3T4#py1p9oLeWizKpp5pE|q~HHU zCem8l{C6zINleiijV+(!@de5-#SZd2NS+tS?*&>mLW|)ES@dBYPic=+E9dZxqy*t= HWcvOBT>0Qe literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/project/CreateProjectFolderCommand.class b/bin/cn/com/customization/project/CreateProjectFolderCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..30058af4515fe68c5eba7d683f8384f6a72947db GIT binary patch literal 2331 zcmbVN+fN*26#sqf+JWt~MJN|rltMvwm%<3twscz&sOai~*oCcFZ^P`zGB7(cnVIdy zCp1lr`d~ECM2$%wyhKyuC2~=ks;~YXK-@<=}I!}Iis7p_awt$w3Oy1S2x;CO{8W@h2zU(iL}lq1T}a{I=OuI0t=Rz7%p_2VBS z%Qvsznf++(_s>_q`0Dm&*8-f+M$n45fVYhdMN8#DNVLo7fI>N@y5eS*p}myo7VV-p z3Gs2@l0$!9b!q8MA zEq;HwCoJPU(o}4M*HhduNQZ1#PEO&Pq1!H}XguYzo+SZS@kJ8l7-KlR_QS%R*>_jp z|8{wCmdLaE$vewS^DAHe`uEMZ%5i}xu=f4eD<8fW!8k5Tc$uNOgfj)gM;W3PspfdU zbw$Q2c$NB@ZMnqf>F5rQY|Y`;C&`jMYLi{+&IeMu$%hO13GR%FG*I(QS(<8OR7V%* z;=`~vr4w6vc3pQ2^=fetQ6>sHHHy1ag_1q#PqWdhwr_t6=NV*MrM?%?m;5-fyP{>- zm-bX`W=OUDxFpbQTHjp#9w}jxTuNI7N8^LKfTVHz(c2-MCI6D9N#od1U7C+*q8=Wi zxh^gmKeR$LbXu7hO#V)!fK2Coboz&+!nEh(3)mkI&Edg#+Z?Ln@n29qkD5Plcn%N$ zjK(Fjj#oXlfY`Bl(Essy91lc#hTCt2ucM(o)b%IMev0ZP^p3}mwJ)G=5$C=^Z6NmC zJcg@At1{t5yma9wG8n>Zw04jyKsC8gN$wrQe$=3WxY&g{oJKv8Gz2qfq>4TQ1I>7y zq~n3Zcmpb($aPFmpv=G1kVP43c7tP*Y~<)^Ez16*4}>K!3AGZYBuoQUBsW8E%jmm# M+9ULZUfSvRKW1sUwg3PC literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/project/CreateProjectFolderHandler.class b/bin/cn/com/customization/project/CreateProjectFolderHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..e41b61bbae12a5d29cb7e5de0f3ca184e57fb006 GIT binary patch literal 1410 zcmbVM?M@Rx6g^WG7M3EP1;Gy#5w{gs5sfh=B-qeMQqTm%#DCLeEQ8zK&FmD>H}MJl ztG^(c_y9hXdS?r@DkNYwnVCCt_uM=8oIBrteE9}o5f5!-7#{hd=SOwVZzMXZ%lBN% zDD+|#?FnCdB_+5P&zn{`3U-8g%EO&NC>s_-K2kML_<@WQK`6=$^*T8u-byvmiu?N5 zouO+bTR2z4=E+2i}%3wT)bo>fhC2+CPK@I`D& zme?3#m^}~N$uAB@Flr;mFl`vng4cbDB$P*m^SFGi{McJrE5Fb(kosK~W4O$as|j6d zC`FztaU4iLWsG6b%~wu`X>nn&*4ln5+L-tc1(cc`cjGFt))YlcCl1DO-7q@IPfYvM_Cki|4^le*$4(F{v&8{pQiiryL} z6>j zH|so3+r7GZEM&dT^Go+8fzfwF?L(~JCQA7EnEKSc&wv=ExU!HB63@oQZM^?ThSoKTiY zLU`0aKV_%qCrMz`WT;KT)Ke1~`;73U@!#3a0in{4ceRT$W<5CYc$7wSFayG650^0I zV2<$o;(&CF4C0ZCI<7gmN?1GnhN(&fzF6ZjkNWZH3zz*v$r;8gw`9) zGjG}J7Gaw%7P0JLiLi2dyS!Hs?BND(5~jIVH9jL`01d;tZ;m??|0 zn1@L?HcYr*EF!pDF;iN1O+LxSx%7UR!-EwjNtu5e;+L5+k%%#xX3Gp~ui0DT?{e!H zZtKBERKKG38CO1Gq4fdPW88Yr-V*NeSx1FWm(N+w^{|90*9Yc*R=_>1vc|Qr#+`_t Jb=FGQ_yJ5v6C(fs literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/purchasing/PurchasingDepartmentSearchDialog$1.class b/bin/cn/com/customization/purchasing/PurchasingDepartmentSearchDialog$1.class new file mode 100644 index 0000000000000000000000000000000000000000..0cc81c606b41945d36e34d5e4519edddddd9e7cd GIT binary patch literal 888 zcmbtS+invv5IxR@Y_cqL3HLilsT6{QsX)A>DukwyDlHdL)OW{q8&|vD$m^w2{|X6O zi3dJ_k3x*M5#^1CJlLKY&z!lO`Stt9PXI6QI7EZttu$N~IhR%Gid-KHrwha9m6bD5 zYIDFp{uRe+F09LyaXU)T|5%HxIOwf~Xfh;+;)~#!pokCCLnU2^7DM;k`l&KTOf$vM zax-1_o>T60+2lh)Th~Ur4Ti1$@^DXf8Je5Lp6Y<%Qj8Go2mw}NbdWFveebZ6YNOs) z`Bd4@XB~CZLW*oxSnc(NvFY1n7%yE_Z;jdvY-J+c#O)Bb7~U*9xEObQLy@1|8IPpw z6vVZfXiw7W|9F4qsik3T8JQJ+Q{E{zEB5@P9ul?vw5DDhIXSHskAnNuQ{v_Q&o zDg0N~OCGV5Xw3)IyQ+6j6{8xfn z@WCJ8kCNWm27M8I$ifWw-kmvf?z!jZukSwq?4a$TLU@(vC^1=-Obcr=^+{M|baXb& zlZhylK8X&0hdp^Fa+^tQ2U76=o)W1!X>WU|5t^ssTtunh8}CP_GO-@&gq5-?KH5m0 z^Sx+4aqzJ!tkg0m)a^tS?Pp9Qo|nfiqwOiJ>)75dZ)H literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/purchasing/PurchasingDepartmentSearchDialog$3.class b/bin/cn/com/customization/purchasing/PurchasingDepartmentSearchDialog$3.class new file mode 100644 index 0000000000000000000000000000000000000000..28775fa349fa42a35b5b1e82a820c4a19c438e0a GIT binary patch literal 931 zcmbtSU279T6g@YI+3vcUST%mNw$&8U6x>4kRuO9xL0Gj=2}1ia*^JGU-I=mGsnCBV zXayhq0sbiQ&Nk?a=tCA}xcBbNnRCxQKYo7u4xop&hYI0EqNBuQQ8F#8$<(>9%IN5H znkN%cD1995{|@`|ROB|3+8#*3|NBa$=D6MSP$M)?#F>av!8hKHPGn*|)CtRFReZFO zJmY)OZsOo$RamKIPN>_7D%x92Bc7MX4x>F)TG?lWL1%urjUl17XU5V8;aUg}3jwNV zgz(WMR6FiKBUW0znPwxIzZ0WW5*A~Vh;%4&mv=Gr9m=VsOJahnZMs<xAIIu!rPJ<@8zqpP!z% zPPoZ|PEz9>_*&YD8Hae}WDnegFO5eCUukyHUMh-07FgvuRe45aNqp^f#hN|@A)bK literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/purchasing/PurchasingDepartmentSearchDialog.class b/bin/cn/com/customization/purchasing/PurchasingDepartmentSearchDialog.class new file mode 100644 index 0000000000000000000000000000000000000000..69ee0133c9347b095b36bdb222d2842310887f21 GIT binary patch literal 12194 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 literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/purchasing/PurchasingDepartmentSearchHandler.class b/bin/cn/com/customization/purchasing/PurchasingDepartmentSearchHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..3b5fecad18fcb4df988979402796f2bd9785e307 GIT binary patch literal 1076 zcmbtT+invv5Is(|S=esr1rE{si7Y6nWt`74p`$IAHd7+RSbaV2A&7mE0do05bA3f>tO)(B~*;SGk> z)5H6dIEKaxooc(yP;a*O7`$$_uL9ID8^XsWhWSXR>P?vpm3b$Iv0_+?GAZIcVYIU+ zPR}0bf}tB-_@!+IUmYu1TFSNEj81<#_Y3~>v$8J0)N zc1vR@vXkermX+EJTg_JVZR*~Klf`Lew9agt zAox-phcq`TXNWo4hvNWT!8}9zR)9Ij7_XZ>I09J z4t*mAvNsN-zu7f$#6?H<)ZzP=iU+!1rNj(F@rWODKj2~Cf7?BhB6g5vSWKe)B=+U8 z3}b&&SiH6}u?%Izkc|h*RM)6(d+NeXN`Iz86+dTqTKkXu`aVOZrF$|5hFK2|F1tvh z;30=1L%L=k6xu43+v8DJMti&)NQSw#7ChMJk+S|In6Zs8Jei(Gb)6b1@I;s$86E0q zBzp`?wf2SDZCM?g_5B>mxar^q!}`?9dANlI21g8rd)y2e=95~dzBy4ezc;Oc6vG$# zwCUnDmK`iHT(@NYdf=ggI}ENeyE34eTjC_!fhAYsuP$jSyD=BT4u3b1+1=ISNXS>p4x)U)Hm+Kpq~}&B0&S?9j*JJo=V28-L*B@^ zMf%BThles?DAnqJww}akAl~bc7PJ*`W2C_{El8TqC9q=A?g{-dDLOg06rCaKG5I#) zHdfBzHNGPMIeBx1?kv3l`k15JOKcZcag99E6{QJ+o*+~jXYkH2{{@R5k+)9f9Ctrq z#+qp|EpQqZxI~12Bg|q*Kmmz9BC0wmR7&VnCWSzQdVm_0s#8V=sj@>D4YE^M!NVk0 O#v`neWm~d@>H7sCu?j-~ literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/schedule/AbstracModifyDialog$2.class b/bin/cn/com/customization/schedule/AbstracModifyDialog$2.class new file mode 100644 index 0000000000000000000000000000000000000000..2cb4d7cbda523a63218a4b24d3773f02d0296cd6 GIT binary patch literal 1061 zcmbVLT~8B16g|^c)@~Q5h@~nB)v9e#mJju%#smu{nt~)49(bEh2Rg9bF+1B9_$U4X zpG`m$AN&FSDC3>Yz8HxKZZea5Z|>ZC?m2gV{`&p{z#3K@WEj>&=nLKV#lXb6ug-X^ zbm$w=lifie{q>HCBQCadR~?*gC?4p;>Z*erL-B|YxgYTG(0|`Kk|K66#xR#e`6%|~ zP=>L;E^NKFGO-M0#4r~3l&LOL-}aRoH|hCH6{`3Z!;9K~ysz&urk)@5tx_?*x)zs;vbN_IRYMp9XVw5QgVhhf!UnK_+=Z%#Mr> zbkvt!hWT3iQtmb_kInjC9%bBdaGPP}%FKDVi&=((=pAp!Kn-Pd$}p4kJMqm(k%sSD zJt>Y~>yxI7dsuKV&v45E`YXXh1@{?TWp-six?Au>-M$4__3#jn7^am;S0-(@&HKb8 z+b02dbV&No{%cxNXE)~Jc#D5b>2`PZAQJM8vVxQ^*~%r0m3Z9@MW78$v?b%7?s`~) z&oE(R+#()jw8KLgFqCTbKgUnvB#ieqq(yB7+!$%FK#P*4a}BImwEIGTPKHh%E=3Du zJtN;n+{WSsyv8?7d`WU{&^<;uK!ho}y~K8L6Vv1owQ%M_v#CnVxwW`yL95Q8xYBb2s TU=dG}SQ$^TOqLzV0;cabQDqJB literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/schedule/AbstracModifyDialog$buttonListener.class b/bin/cn/com/customization/schedule/AbstracModifyDialog$buttonListener.class new file mode 100644 index 0000000000000000000000000000000000000000..2a697004f4a40de130712dd391b83df6b94acad9 GIT binary patch literal 2482 zcmbVNOKenC82qqyV?zAToGCL!jH!#c^Pm6xukU}I z?;qW}51<`aG?WnbnW>OzCqrh&aqXma!Eh}*6>`ioBA!WzP*==x(}vk+$F1S>2P`9D zk2J+Hu4|_vmg9<)NNeyC{G-OW5lR@Tk{R zWRFa0I5_A-EtYGjBP{=SIUOsol2AS(+^C&Nn+#=HAgBx%)h(=H6=A8gGZ}IwEH3Eb z?p(cns7Hg2Myw%dY-K=9x=-4Ox@p!3m!XNE&s_a*Hv8`EN4ICM-SuHT0va~V>l7ue zBZy`$rZ|@|5}d?m^Jt5M3J&?uij5lD2%8t&Dmp^4qPl6MOp#DcScc8adHC_onVVB8 z#B%n~uA>868I|SaJ6DVrX{BuGBhI3X5lwl{K_UF&<{Brrd z+4nzHW@p}cd*B;B2sET<`Z!q%ThQkug0UbR!$dRRuxMg!vmglTJ zF8*=JRvi%b;SdgM=w+1i8l*@@#}PybKFf)U1n&XazdTAqW#}hBR`HmQ=W(1z&a_j* zRywKbL8uP&{u4)VP{uf*~S85#}d+(p(9o>-y!3U>kzVyD$-&sVVFY2Ev=2{I0K78JHqWr$+f_sy@4SW z{8=3d8P=Shnm*|yrNb`1QJYg*Jf|ZKo&}99syUlC75O5|1@(;D7Po=&sjytUn zP~YE{#p<2jI&an5EY@8|Me}XwS+q=3lzE#Zk9sBVHnvQmMp2zpsHoae6)yb}yHDIw zy!}}`cO8Ct@Kp6>adet0)lIZ;<5f5KL){GKZffPBRB=va@v_v#kLr9nC-I#;WMNL@ zK8JpYLsz#-e{WvZo5ipqM?H_pWPu!&&c~EQGDlA%rH;zY%Di^LP*Rf9*t{^aO8Qj6 z^QoLSSu+o0&8GOV0M(?4Fa^5cW)E#pmn@N)+0&*oTeZ~sTmij z1#eL+u2CCq&_-k_gs*7}9#A{Jr4IZ+Tk#Wh;#b;+-)TD$?Vt+UNq!1bJ?)|Z?WT6x zL!Gpjx@aFo_P`#4xBkmfw$Z#i>(gema!M#|C&oGJejHd=S zZ~+(L#U)0z0=`FR(csZguVMX$y1K?cQT-Q=u4}7iwbxjr1h3-_{+G>7yd*9Ie*?bC Bp$`B6 literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/schedule/AbstracModifyDialog.class b/bin/cn/com/customization/schedule/AbstracModifyDialog.class new file mode 100644 index 0000000000000000000000000000000000000000..febffbf30516a43870ad26dbf5bb1abca84d6a61 GIT binary patch literal 9645 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 Sio-0`&!=|5M7QuU#Qy`0E~yRx literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/schedule/BOMTransPlanCommand$1.class b/bin/cn/com/customization/schedule/BOMTransPlanCommand$1.class new file mode 100644 index 0000000000000000000000000000000000000000..c0bd8cb41ecbd653e16428d5cc5ee8dec976fce1 GIT binary patch literal 1361 zcmbVMT~8B16g|_{E-Wjo1r%+|4nYnY%nfvwq$CqyaHt@tiieW=2NBBKQ3_|Vq+z(v4zH&lw zAUgw3Ixn}kS^-z#8;`4+-|KPJDU=Ol80x zk1Lml`I5W)PPH9s3Zt$z>Tes>e&2INoQo9`3wU7QK81Zq)GvE#p@2mOvn%zc43D(m zXILy=%%D+E)G7uZGOYi*k2YQI`CSvsSTRsySh$Gk9|#Mp5jUH-RfTqsWddzt32RY$ zI1C{<`0qTw?8lX6Tz~w%cIpA|$;vPTmlR5rj^?gE2!yP=QR&VOX#i^x2BqyQB|JZL zRd-A31HZ#yHI$M;&EsJxL*yyt(=@IiW!q5=0Cp~_0O~#|8WXVS_9{uwXrHEasn8OX4qerBQo0z4Q;TC2RGdsw{clpvMOrGKPXXM{~#Zt06 wLy;u=6pzmBPR6kFL?w@TO0#qO`NV!2>x7a*8INhrQ2k6(>jZs*#aJZ%1ZpCESO5S3 literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/schedule/BOMTransPlanCommand.class b/bin/cn/com/customization/schedule/BOMTransPlanCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..c8ff9ad4bdc8fd99001da53ea22ac22225f83045 GIT binary patch literal 2299 zcmbVN-E$LF6#w1yW5cr8Hny}>J}jg*NekP82$~ACfoe2?+N7=c;@oa;)1{l;o!t!- zpKyFaozXYOC#N&aRGndf8B8mF48HnzKrIiB|ABgTn^qv9osx%p@7|n`-#zDd&iUh? z`@aD=hL0qK7zQ*`)vThbm0Zs%>Ys2=w@lU5X2o>L5bE%SY~JCfJ8EzjSh*Ho_0s6$h(M`v#+JyH>8*vW0%(6zuaIm~RWI-VZ-UnR-VIH;St zcZ#7d7N20KPg&DKMjdu4kPzMhhFuC8&?ut`EfSg;qP3kknynJFaZfjN@2Y|bUS?=3 z2rpG~9D2zUZW)fn;@ie5qYdp6b~6M~-8@21JySsk_Ao>UOrASFB&%p!CV^r&@q8q6 z!ZC%Rru{6;a80ZQeoZkc;T1o_)v2mz(c|+b#vo#uZCgmz;zaeE*5jFsPsm81PeLz4ryrqt)xAQ&QFH#f#zbAX3J&84 z)rxLjw&p~JQ#u*ipN#2P$u#+tAp(p2I4WU)p?kBSotxK$?bowHZy1|C9fnmS;|8V)*!{r}VZj>M2 zxVO6S-J{z-t=?T&xxTo%@a4*_n~y&KcJ;Gg|NiCEFovjMtbFzLpEvKzNa37>vkV7o zAS_WAP_x2yc|ibj<>I#xM1^ri^Zi^QGdHaPoeN zsSRW-jT;l((f#krWxY46yTtkzAgy1|!Vp@ew=f*9MPol_n>G|8=z3eo^8z)wT2?kG z1_nlt>)BLmgS8ZxT>)9M+zuijA@A3GbvxS%HxZ9(8f7}#&oJ{MMPDs_m%1qicg_AP4>k1cLG|lR0Kr@8=kw&KwooUR`x`V#{LVfW6 zWMT<&g8c|3v5c4e?H-geS~I=Bqw^c|^gcjmWN#V!AK+m2XGAY1`j+t8GUAKapY1C{ zUBvD+mDkHS895a>)3A);$-Cs{08S!_esc3JIXnu5);4n6LIB#)j6F1}XdYlM`mm2= z4^eS<;|yX{ZgEVY7irQ+kOnY`_wYXL9XO2)vShuF?48F2de$IGjN$`2jgdqv>i#9S zAqh-E&R_baNOKtDWO423-Lx~3Z18d4p+hJD*ce>41WrT2?PRcih>Nt#^ly}Q`uzuT C)3sp$ literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/schedule/BOMTransPlanDialog$1.class b/bin/cn/com/customization/schedule/BOMTransPlanDialog$1.class new file mode 100644 index 0000000000000000000000000000000000000000..c64d4f1721bd64f0a8239ceb54a851151a7f7a37 GIT binary patch literal 1610 zcmbVNTTc@~6#fQE7wSq8#T$yCRZFQX^^V00Ef+6TO+aFN8>S;&yBD%M#YPh~8WVqn z55D#2rt-_tsLcqQ7uEV`4n>+q;DrX?Z(Eo_9a*ID!mRyydvPym}l#^w? zqGZ4jR~0)9ZcJcEJdsexV3Z)~3CUY;8LD4NUoM~Yx$z4I0%D@V^upat>Yt0tt zHyrR?mwRObi%-~|t*$Us(yjCV9BaOHVjDLOFEYf6epz;bVW)`>#Pup^!a!#N?bv0a z3%v~OY3-Vvvpspc<}S%#fiF3dp?A&~+*#y-t?lN^m`*6e*%qOH4k4AJ9GI@IPSLSN zRZ=1c(sRG7-n1@cet0o~gE(ZMpW(nC-Ao+D0L8Z~RRmk~Yo3Z?x{<&jjv5$Z7~5{` zO&mjtp_2}Wi zYF$e@SF!X1osmIgO`O8$PjWei`~O8wciSdC)s*d6_JXXd8CyDKVmgM?2Iz`hGliQD zY$17*TKg4v6Os0!Awg4P3*j*^a_?LB*a%J%-Wg$* z_)4=O67zm75OT)WEwk^}F*T|=5}#>LIDSY%C`ncE%O++t&6u7E6yFWcqv7K4Fq9$H zm;_9tv8|^^cP-GG!ww7-K^<78{UWMSU%?xV zS3ZV`qVd89@S%*~tWCVYXv!w@o9{dGoik_l$Ioxy0o=k}4?PSO8F3l6xNI96xAbda zbsTXco2t44IM($klYDp0-=tD%ljy;Z~f8)#)uC7f|pp$}rchYymD}jG<3RsZ1*Ulaq*-)_2Iwfu;+8yxdfB zZz(>k`nZHi4-*XM9f4y30WM>T!Plm)LNbXXOG-a?go**K;@Y3m<{6%ys5EC^t3*qZ zSSsO(ki2bm$n~Z=w5wW$jcOlC4DeCL4G%L6Q~%Eia1*l(o>A7}5W~(TrJk?bgp{DG zAybKDha5fjuPY?S)vb_wYvNVMLVi7NCsM6yXR?vw&urG|NnTlrWEdMdYfaf^+z4>n zxi#w^0z>d9qGz=n3S*SPBpEwH?G#u(@BB^AyoXvp5ob6}vjtka9lt#D8A16A20x}T zXQ=O`7~lnNVf+JfzZX}At{-9AA!gtZ2WbS} xVgTN1pW0rifh&wcM6kLJy{Q^ZrLB{|9 literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/schedule/BOMTransPlanDialog$3.class b/bin/cn/com/customization/schedule/BOMTransPlanDialog$3.class new file mode 100644 index 0000000000000000000000000000000000000000..d6eca46cd612f2f1d7df7ba0b06fad8998e3a1a3 GIT binary patch literal 842 zcmb7CU279T6g@Xtv&nWfv1;o_YyH@VG=f{2`cx6MRuHzf(31DbWK5=PW?*Mi!5`v_ z{s}=*eDDYOqr^MgfDek0g_*tgaL@fXcYgl*{sTZCNr)O@TbfkbX)0%~v{U^~l-ioq z$%z`xa+N+mJUA(YaYwl@FSN+*IO&H72%S@LCQ?Sn>EZBH$udNPuwJ3!ZJDYwWy#0U_A4Bh>=oVvG>Y2z9h$w9p~c zyFQ?uX`^1xrbAVnh+(b>%bArTABaMGe+~wI48qRBT_k-Tqb({`j#Tl+7E?7MY;?1K z3b*e?+}#{RxQ?44ZVl`Y0CM1-c0QaP7w6PC`)R|_Jn{jV}1I<~Vys+ZbpvHJIG zcJreaEd_mm%ic6oWn9F=OI0kr+WxnIej&KE6*&|%T$~?nU{`(Bg-e<($u=UH|(oXdUQEF>a zCnst&%T@Z~VE?EP#vSIuywoDMOSZUdwrJfQW{(#{W%!;F$n#IyGZ&xMq5;>9IE1-Ev9Nj*yv{e z6mHLpxU)Hka2+>8+#qZ%DqDU$ z;i2!FN7^$ow@#b!zA7hn6yu&3HSqf)#IFr+e>WG-DTh0(f1S?-P^aV9z^}2!r-g{o zCARwPdnD>T_=33i6_-w{n9F=OI0pELWxnIej&KE6*&|%T$~?m}{`(Bg-WlR=SpCC~ qD*O}I{aoc(Iggv?UfWP0f|I*X| literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/schedule/BOMTransPlanDialog$ScheduleDefaultTreeCellRenderer.class b/bin/cn/com/customization/schedule/BOMTransPlanDialog$ScheduleDefaultTreeCellRenderer.class new file mode 100644 index 0000000000000000000000000000000000000000..1296df6214d0929f83117ff75371500f661a53ab GIT binary patch literal 1729 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 RfrtI?i`4TXh|_N3{{u9Okf{Iw literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/schedule/BOMTransPlanHandler.class b/bin/cn/com/customization/schedule/BOMTransPlanHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..831627919b8291f6854d6b6f7c7587c5bd988e6d GIT binary patch literal 957 zcmb7@T~AX%5Qg6^h0`92U|T*^6a-CLLR<}(B_u*>Ogt468jRj;x109h`Dk|cK;s|s zR>8N)a6k9XfxqnYaDWFzf_3 zuDHSAsiBgYCH7t|_;>BiQ4}fAJXMKp)PoaoDmeAt6cRZ{xY`7P*O2m??RGO3AJhNfMTgn*GQ~T+#guA#$Vh>Vd z8Fp(|I%)THdgg>}ysroUCpA3WXQ=#9;5O zm#6>`p+MQQC=Z_E1C0`oT@Hc=u12lg``4q&sgI)h=G3EJYvH_OswB;<0y{Ny;CYFq`K^8y~?^* z)zx5PwBxKJwD5pJ=5r<-$50r+aU1=J$MBHCy#o1Iptpiar?|G_d-ZB5jxXYbg-3QJ zGM{UvX=4PV3b7R(WWBQID?HqcyzH>T7niQ<;;y)^Wy(-f?Fw%vVh?v9>3O44!3vBUxsF&y>lu;X95XBd4T*YFj7~+-e#;b`- zs5>JEUb6ABL>4oa+5IfMqHvVL3NjD!XEVGkIqYboEDf0enKjS;a%$oMuHZz56n`5~^S7!BwTVo@RV-?pexC$eC zoTaG3W?je@w%2v5Guv1LyQUzUBaikbPKb4j#JLKaoG2U2t2R8WhfszVnozdYMborZ zL5Np*XA3tsg6(@l*elmmFwJy>VNefAqM%r{nBH1eQw^ z7D!lR=xwgWPQ%Um@_3bmRM?r{|0yJ|;UJN^OdR1jn^c7Vz34$yhAO{UqB7g~?4_JT zoWJ|{_B!Q?&#Ba1>`$o%22-hzaq#M099sMb4mWV$6%hyoX z-NA5T%&Z^#JMHxF%LsUYK7k{&eLuY(Kpg!Ci@fe(`0T=2LO+sW2wB zkEbP4ojy5~j3#@NeMzfqK$cDqpZo;RHjrx|FClQ_Vgqxsyf4cOvh{uFvX8PBIu)eQH#BO~(QJ U34f+hsTq5L@aQjG_TaDo190#yegFUf literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/schedule/CheckBoxTreeLabel.class b/bin/cn/com/customization/schedule/CheckBoxTreeLabel.class new file mode 100644 index 0000000000000000000000000000000000000000..326da7c6bc2e3b65d4b9d3be82e127c5008fa9af GIT binary patch literal 2132 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 literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/schedule/CheckBoxTreeNodeSelectionListener.class b/bin/cn/com/customization/schedule/CheckBoxTreeNodeSelectionListener.class new file mode 100644 index 0000000000000000000000000000000000000000..68e8148ddfb40f289a9925dd06f80082e1b1c39d GIT binary patch literal 1523 zcmbtUO>@&$6g>~imJv!JUj{dPwt?7SqCg-(LKA{XsHq(o!enU5Mo}JE#FjFWOj7;{ zzkoFxGsA+(iUmKZi^92bJi|<(9i|JtC%t=h@44rm`#%2t?md8MJTP%UVZjR=FKjzr zCr-k)|I$tTFmPh8sW&?VBN)Ku0DFg|X-E3)gXX z5=Xz#LE<#RPOKL<-R(q23b~tp;3xA6nNoR8!KgBhg$xeb$Rek3xb6pfrPJQf(Ia=G zr4@$iq35>N+{l;j{X-*Z`mw@d{eL2!Q?T0tu-fvyExoC5vQ+xzww;J&6zl=FeqVmop{Hm;hs<{DT+3J z#2EQujK?WiH90TI<2;=TDg45e(urXQ71iCd&J@e$~mw1*vs}k?U@pMz4nL?Jyu+CN3&W zeqVd1y>ag#bh@XpjeI4y7Z=iYc{UqhC-fz8q`)x zs{BTgshwS*2+n-jg_MOm`l;J#B|=8(XJHn<*qFxxs|`f`N!0O@PNb_%_Vf$s{DUW% z6-tL4Nhg9M@-Gr&Es|ehICbg=OO-*OYL`!q&!40uk|rA4>{UNz-#slsu&0frlOR@@ z`p$WggzMDJYT|lZ4R?Eg`mCO;mwlPfbN_iQObWTwDG~Fs0S@qu!_L*@m&09g&z^sa z{F~HlaTPOQ;Sg85=fHh{UkX3qFjxMpCgkei*&i3WII@RAgZr_0F2`q#%85~G07E#=b)55FruL?Bl;SJmE@yWIV_4^~3j8NMi2Lvf7Pqj-0`geJ zZB)s}0R8V^iFtL}bnVc8gQhyPjVg_OU{%1b+bt(V= literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/schedule/ModifyTaskOrDeliveryNameCommand.class b/bin/cn/com/customization/schedule/ModifyTaskOrDeliveryNameCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..2082f954c2324272f8b4575634812ccb6d624aaa GIT binary patch literal 961 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 literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/schedule/YSRTreeTable.class b/bin/cn/com/customization/schedule/YSRTreeTable.class new file mode 100644 index 0000000000000000000000000000000000000000..c21ec627b1c152c2ad5a57ccc6d4d7b4150fdd3e GIT binary patch literal 544 zcma)2O-lk{5PoJ;S2xQv=-#a?+CyDJ5h4%*?a(el$Jf^h-`Ed$cUP!?)hX!E59mil zvnJLhYzBsThG(An`1pK#2XKyk7Y?DT6JMvXuZt{CWAm(XlO}$q=R7MS_V0tc&@zW= z8nKH?$rp0YD%PCjY<;V=ugpWK5liFM&2Y^p)cPhd`GC+r8f}~ttY)tJ$LWlt-tmM` zxt7$!78*@d;SnxG@85g;=(I*A;oBmfvRz(8=!{aWqKUGmyl_>l(<152cZK6*Y;jpaC3lpw>NkMg2uG g2ip?8WwkEM2AYBozFFA8t{~x~g}tR#Tabg!7nXIFv;Y7A literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/CheckBoxColumnRender.class b/bin/cn/com/customization/util/CheckBoxColumnRender.class new file mode 100644 index 0000000000000000000000000000000000000000..45797b598acd1cfa8dd285dd2ad98e2a5d344759 GIT binary patch literal 1326 zcmb7DTT|0e5dIblfe=v0wnVkE6`|a+xKYo7w4qyf=7P<)2e&qS8?)i;Gt9tNW=s-nYLkFQ( z+L8X71@*3^!bUw>lhLM(E#wG=U9l(LdC7hdZF^eOLg_8aEzt<|t8`P6VVJ#^G2vJu z<3NNJ87GXqQC=j_3gJjeMTr)Xu86Q9dzexB5ux{C5CwXU(4BWHgj`8&N*mo6bYNqE zaC9|@Td{Et=PitLmQ%P+_YNj-fzYSbx{kR{gyDRPjUkzx7HwR@ z6$_UM#}5z|lnSMY99+dD!P-kJ^m2!5&Z1gDmPnKGNAR?{G_ zJD7$?7~uHUWytxGn_TRC)vfg5CdX~Ex-122ZrW!-EvT56HtY6|h1-ARZ=?KNL}FXU z4({R}p`S~b84$cq(yh{Dq}vLv8E7vvVDf|q4rakp=x26qobkhDKWvmLwMVD&<2?UM z9(--mn5y+4(JeXzJ4g<)Kvk~Wj!2diHzlVmR{PvDWo`}MbRysSt=1%*JnXG4BqndK zt48e0r646W*1qU$=IN9PE^xrzY45S(deFyfp2BAw`DC6P z<T7~W=PK{YpO`QFLi%sO4 zm?{k2_<~za+#j<(vQZaOC!@>^m_$FTW)L3B{w9m_mT|boOc}K0FkL;wBSXT)93C5b lF6QyXMCoFIS2<%*!lJ=-@swA+j6Q)SJmdHY%lx7XGpw0O>FOWy zRUeElAAHoc{7o)(-#f`#6Y+t`%FLZ}&)H|sKIfi4|Niwi0C(`jz>vU#<6BP9wwz8B z2W|I-9lL>Vbz;}Es)5&O`}HvBoEBFMWCbcu?PvCLD>`%iV=J}~J!##SPwb8t@2Qun z^t?yXKa!yg1%~4jH!9v{isprKtTANW_1*XbCMsPpro1nZtp-PO1Ok^$T*7c38H}1R za77?fQVv&}t}k~x?L!%Ao&tqt;Mm^29lDBl&zMz&10^2R)2l)IH1MS# z3*0L;(~>>Vnbx$;@@$Iu@bIa0;hULxi5Kqe;fiolgV ziEU|9dx2Y}1Z%KTN%F*pxKo%hFfA~X#*KAN)1D??!>qt4bJT)R9xm92@AAH)FmGa^55H+U-zD%0scfRsM@sKZVadcBSQaoeC8hGU zG?`l9$C}G+6DxR=ewvH&E2LOxH$_6=u8Ftsw!j1(w}a4qK?K{|@Z4j+t*e+VHOl)r zyeoh_Rm*YvXkxz0B-p+{RWdu+!()ruPUYM_e!s^wcj zCv;@Z^+<6nH3XLxTTYWL-|>Qo72c8YNpNJ~P+;ytBTh{ve%0!rehF92DLp~cW1`nP zN?Wtx`!cM0b`;47v+Umt$GI3AQ?rk&A^r{IXdmI~F5i_UUs?Q#x1VADsC};TK1?6* zc#rXJ>UAF1P~e-ub&MwnVwmwc+Ukp4+*maxjo&d-nKZh1wTqj2G1o;&FX&-aGF{xM zEd7C8;hpbcEOqf-7avv%)nBmH#YdGN2$g|KKd%YiB#m3R%&{?!BBn7%`vMkG!aB;> z;t){u9wiid^hgE|@v){{$0yuXpIAo=ds>V-9&?q|wtaj`VbtztTn+QLfzNS3iN2t< yjLct{H!!tpK>Wkt9G?az46F)X+`y2we967988C!z@GYNN*l-}ZQWHe!$m?Gs-`=MH literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/ColumnGroup.class b/bin/cn/com/customization/util/ColumnGroup.class new file mode 100644 index 0000000000000000000000000000000000000000..1b7a898e65627cc10f72ac16553e2b3dafb6a9c2 GIT binary patch literal 4457 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 XBFa|*ANiDLeoaB;3xwd*RX_g$!nm$V literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/DataSetFinder.class b/bin/cn/com/customization/util/DataSetFinder.class new file mode 100644 index 0000000000000000000000000000000000000000..db095961b35094b1a4b35b5d46a927511a9bb8a9 GIT binary patch literal 7475 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 us>nUHJGfh-Z}93^c=XlTFe?9o+ zHvrGzI}K$5o8xvg?j)n}Y{qqx=0(Fb9XpzJO)Gjtx*a2qlaa>^cSJ)#VBx4SZbU7^ z9**`7j>@XfUf<9!5a@6cGK_Lm>Ifnvu%OGdWluIaDAOm6K}!nMbUAUu z>NnD+`Yvn++z~S)(9rdi?z9PL!_rlr32dtGdgxf6n>Ov?wuUFSDo`yjUm=@Jr^!vG z5@tG#MOdO?@guSIO=Vn})Ugx`1geyow3Cu)cS=L8fbQ8cooJ_NNe#;dmOXC$VAiw} zlFClhMosGZsCnw*7)5bIqs>qXn%R_6RI0QXcC)JQFD-o zr&|ftI;w_xbsWQSQfopsBvZ-!qXBF;@k2|m9g2L5O zUw77W%~^$qZPnQc4TJ3Hr)=mAJHjxKQ1sB5#`>oo1imxFI!0i!$O^$RKv$+Y-h7^m zH8#Y!F{;VyGme#Yy}7MSy{_X8H86q`$~Cp~rjEB%_XOh>=X(X-765x)(PJA) zZ%BKtd!xQEQPnJv$&^2Gy;t9z`TiU!I>YK59f}Jq_qL0~mo_(Nx1fn7v*${>nzAy} zW>L)wA8ldE0~XtY59KV;a)-d0S+sKLiR$MeodewNO?Mb}Tw1grV>dZjmlI$vTZKfh zoV>x(ZKMj%XEijWHK^?b!4@iw=Gb{H(rQbHGW0; zB;^Qh$)nerh6L82Br}iXuOLR zd92%-!-gE{^Jwf5t$}ShY`cloeC#+qjpl(ocC`j>;c9Cz63k)uEnHTJ8ie#63<~M5)e6z?g}mm-o)N%*z_)?yi4bi zQ5qsVJ)XnG94;w!muD64_9VWMi??g8+(v-cSqra>79{W!?(o@#yO`$uyf3Q7Vt$uH zrQjxSPGA*Nu^MZ6Nw4R+1$E5WdSW(UFE-*JHsdhrsbMR%HDQd>No>az?7)ZEiLZI# z-QXns0lV-ccGKP-{ESxGYsatD@H-CRPipxahwu+N@h?u{9{O<~1DL@Xq2sKm#yPQ+ z<8=kji#l8o^%(TZ;yTNKsV|g;dV2@&vM@qoBi`d%8PGoFHwI;XYe=ZL>ZI#EuUf1V(`ho{{f3Nu$BM- literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/GetCommonInfo.class b/bin/cn/com/customization/util/GetCommonInfo.class new file mode 100644 index 0000000000000000000000000000000000000000..73fb11bf18b489e628e61b698373176f9dd63c7f GIT binary patch literal 4899 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 Qz4#jm&!FYso%rwl7m|Avod5s; literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/GetMessageDialog$1.class b/bin/cn/com/customization/util/GetMessageDialog$1.class new file mode 100644 index 0000000000000000000000000000000000000000..9c21cad8b192129fb43eba3a9af14a501393fed3 GIT binary patch literal 893 zcmb7CZEF)j5PminbIo}+XVv=FTB}i$D7_Z_RuM`XC2*~RCEqujHQjRAmD{}v{wu*Z z{NNApM~Sm%KoF7UV0LGRnP;ARW`6wq_8q`ubVJk_9toWaGfPEjotdfk+$p2e(y2Us zA>DzrmQUrr;<=f&cS6(|k`sQ))12#R`f_|Cg$vPOSg)e|olE7Z)Gpl<9w<}RNi7S8 zhC5cay-f|Xvv=I3x~EDj_lzO!EK=AVG1U8JBAZ~i5F^A=gaEA=O(YCK$0xKhrR8Bc z8_VK|k8{bek{QAC5igW~&x3VOondQ%{_P#2-r|)8uVnGY6f-$t*yv>clxg54+wG1b zT*HkJ*BN?e7b(U~tT8NcA!u4&;_Zc`8vgEkE5?SGCY&hy)>smQk*)oYFhlg(l!cJb zl^5^I-wU(lf0lF@XptMM^z=ZwV>5|y9}kG|RJsw*ORA)C3>o5~rd8?Z+*)aIn+6w< zodZh}KR;U98d(z&MbDG>gx)?9^&Wmg-1~y%4^_@ZIvbP&>|uq@xbh=h!ex39Ppr-n zvN=N1`-nLBimU$qjP*Y_%ftcbQ}=zeFsSfWtFFl$4@ijXCLsp6L%B8FMVszA&GH^P LGfhQhotdil+$p2e%BdoK zD&4NMmgn-Z;)Th(n;`;*G#R#zwp@~k6HWG$r&nI*;rRB?N zI+o==9~Y8gDKml>BVH>1o&^I>ond{B{@qQY-r=Q8N{lrxO*m2Zt+6BqBU||&VTNeWRHcwl zlo#*Z-wU(uf0lIE(V{R`>3mnZ12c(n3%7}IF5QS16;;wWh79pg)2eJ2+*)aIl?K-& zI{}s?etxvH4YD>Oik>9zKD~V;8r=DWc<=>_AL^Xbbhao5c!ni9>0;$ z{hE%LhO{s%+p1S=PuWegX;n(P==~`aRTu@ENtK~Gr9B;|jFnG}M z95tn3clvs+>nWo}o}Bipb^`s_YG5;NB_aLDXmJP{ZZnX;hB)rf09oH@z`#bC-DO}C zHYPZGtAV#+n}$0ATg})@R?Ah>t{>QQ4Z9iQCi3#4XLG^v?AcbmY&RFJa&!^DLM$vI z!gY@rQ_D`EVZ89>oxtnIYj%X4hW_+uUMx!+7?tbXO3UU2??BN#GfvQOt#iUKW?);a`agT;wHwcX| zkQf2V;q437IlrY6jJDMN@c<+9YEaFUPumq`UjEXs9H(#<_Jt1<=PS)4NPFiIM9x>-(8 zQpC6FOd%5FINrwo+E^ovDN>#=Pv1J-JIq7 z5>Q~GJ>J8`6fH+we`Ph;S1=_$x*$IK5DRhqA zd;{Oo@y)eHzP@YV+t|Rqw&GOPvKaV+f$xfNU4&Dtoc^AH?+e%9vhCECSt&JKGVnwE zh-HL1TVM;3h@%+RO^HVhKQZuADeMXE7oETfo6QC~sRyacTZc)xn&VNyW*gb)D7&6# z84D{oqq5Z`^QQI1NW+lBq7W9K>m-F#N*XGMsadia+r#UXMM*17E8>}D-==kJ8PN{! z8idHM3J+cTI%;yzs#N$2*~#{__onhSY{ZF$u<#ynqz4Zlz2-%el>(!|$a@U3uxQ%> zwiDHUzDQ!Y69X9JO6RH%asKm(5YG8D2uD5)IQElgGq&)13s+B)PtNbk#5zc3`mbO( zlf3;3QsH+bGbYpVD;UZ2xAB%&LOI*{-9Zh&7n3v6Cz6k%tO(%S`O)_Z^pN_Z(N!&{~@52F1;t+Cp5C?G* zQ!KNG*bDB*1->hu!BJe~&I@d_zrY-Rjd}c@4f&5afj?mZf59UD!BhW45&yy|?RGq@ z-Gx%<&_^Q&^&Gkj|He!B8Qph)+&|~6k9z)!mnpZO8vcw|@Jj~g1zf_faG6$K#Iv}< z*&sO{Lz^db>KI3dR>Zf&@f*Av1p{x<$3I{&Gs3968hR4s53{Zbdl_J!oR&bsS9nhenqKjCrCRTl4!k3?#Hv=~-uFMn@iaUztBpQjEk zk;V!oN`{s_l%~5zX_Hy=Zqo0kQc3%a;c;*F@BI-&b4yP|8w}?{_?Qdep%bEwh{5Z* zfKDQn*sY4ODBtpNE*KUPo$`FdOX=QIXVaCzurV`>?mCsx;k7FJqI{>zLQEJ|d&#N7 zZ95S+`=bC?aLvb6hP7E`3$cV{hB=<5)JrG*lm8HJ_=m&w5UWlsedJ^I;?h*M+*b&bw`cG{dGK51#?13`f4N9BLn|F(TKT?IVj~O2H=KtPL8N6*hk!>)X3E^WQKogx1ZA1*s zo(t$Cs*rotbS%qPe4I;$r9=y!r@U0|J#%`l42I3QS#*a~Mu*p`?91|fD}t~hP55w z9M02=;R2Rt2+0f~8hk?NeZxg}f5F;coJHaQyr%4L(81dpZ@JDI&G3MTxLzm3CT>t{ U12@s7+oSH@LXRxR*Ri4X8=rUXcmMzZ literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/GetMessagePromptDialog.class b/bin/cn/com/customization/util/GetMessagePromptDialog.class new file mode 100644 index 0000000000000000000000000000000000000000..0607b589d0de1e32b22530caf7f87e5b472249b3 GIT binary patch literal 3389 zcmbVP>317f75_b3_Q>)ian(3P4p65A*Onbk?2@#xO_thmqEvQ5oH)328_8pN5@|+g zMs|_{ZCP4&(z2DM>@B4fN+Fh@X8*`XKK5hJfj@wcoCAm7of&V9;gHHldhgwL-`#%q z-uL{Mf4}~F0C(e08k!Ui6da@AmW@Kq^WCz2&Gc>8F>1bDGEQ3lq~&>L(K=go%N2jz zHcM_%LrkGpj`)^YE?AClRgJ1yFid;iIG*=>&i&)riI7{N!?UV9IAc{kO1_XCS5T)F zwvD-t=bMf{W0q=G3oVk5QfTpQzho&SbC=9T(d|qRIJ(ob{Ii0H=M%tj+pCn!tHRKyBP|TKk>O0mx65W}!|s5N z{m4)L{I>{Vt7l$&NzM6bgYsFqSmuT@&pOT9Pw>NGG|_OYkmTQ zc%J}skP3UV^68sNz`#91yqADPs?8GxK|I80nsajsqg(hAx+2Jpv9-7kvv4E|;{IJ5o-dpbi0>uJ69X@IVijh2CklvgNYSyZ*=ZFN%T4V%`%^U$jOLXOL*I(3d z_3d~ul)x2KG<+nAlp(q%O77BX zb$7?{6n%||b0Oqh#qnu{-FcVjlrxUY19MTfWw$5sOhtIR>SVg>9q^n88QP{Ow zpP@;PZ?bz=M-uoV9@p@tsDc8&fBPwM-hi_{5#%li%&C#BYZ{gd#{3v6(P_-;)+P?NyBggHs<;Yz*(uVKgdm6sG z(a5!39pA?eUV%&YoWCFj{!qt{M7SoxDOOIusN=`N)w*EW#Raxhg`enn89!xxu()%) zwOq0MIZ2s+hGk^(9vwdI3CoVD0sJ2xu}OO!nEkY|d|0b0kqCETH}UJ%(; z;Q_R3QImsap}=R&KHgA=-bP(AObpI+(5EMCx&HT@-14E6k=CN1XB{S7(CIA?dl}(o zK6F~p#cwND8dpt-^UHTeFy|{H7iF12 zj;%8GC!Y*7ej<|JpZwH-Skj+-I;F{k-h8INjxWgMI=^48%Z3N%qDmJkN*3%iLM!YvIrA|9{0pc!OMT;t~7Z(x6A(fmiVhLVb|juW{CdqpB6Z#IKkJr|>V_pr#nLzJxj&w00TS@oUan zsoBGCctWF&0lbbC#5>~nEq)gzZx3ZjQnjY{uu#?$Rq78c4JilNZ-V@5)Pz6aj~tVn Ll{w1iN;v!nXtiX3 literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/GroupableTableHeader.class b/bin/cn/com/customization/util/GroupableTableHeader.class new file mode 100644 index 0000000000000000000000000000000000000000..52dc57409e73084eed89eb280228c07f0f1fe399 GIT binary patch literal 2886 zcmb7GTUQfT7~O{?1j2}tauHA{UN8hTc&#;5QA7#SAJRVb zwJ)w!U8}}ryV}*KwyS@jKcauZUiLXNgrVM$hm$$CZ|`q^m%|_b{O~h?L-;a@27&!0 zJ6Cclxl+~hor?KD_f5ynRejUSopYV)vc6y$SLATs(94FKL|mZnmcF9j%XxQAdokzB z&D><7FMKrl+L! zoTbzDtnU&c--Jy9oiC#^R}j!jj#aJLYTK*dS02n8CEs!L0*#}lZTcq!_GFa#_2d=z zab>0GlnpCCG%pYz=VuBrv}@Rcwq}rmhE{A&VynQ&+sQUpNTCZo(o(NLEHgBpqP^`J z`p_?s@C;vivU5GTWlO)Ai|9I6ATfDwK*J8~6lmwY%ZB4JE|lq%WjS|^GMQ(t1?P5a z7?kHa)ww%W!}HHN4D^I8W5$!4r%cN})m$rv!GtIwlc3X<=N$8B7Q?m7L}K1>1L+7@6ylYKsUEcMYE! zaC<}M^GTc&IJQ20ebpG0CIOTDPynXFGhtUNhO4?wUb4HOVG2dEGlJkyv+m5RF0^0< zmy)>12(AS@Vo}3o%nG#F#y!6t?Dkc2sr0LLz-AG|tEjt+rY-N78gAh>>$9H4s!s|G zhMK;ipSGX^Ckb0%$BR!#Btw){4a+jo*D7X}#~54lkx+UYRX|a^LU-q!;vf>FkvOl8h>Qi*ruq_*_afidM$I9v+jy*(? zV**==(2EXi<7_+n`BG%K(;3*q5VD-nGKR62Xaf7NpQA)Ahp4^T@6quaS_zpW4RHgfX>9;-`lnDSXMilV(A;8|b*k z4$_4Y%5*Toejo&D;QCpdBa~#%5IskK66ZNTjzUP_cj_SRoeo4xh(`hXWbs=J?tO-7 zfnP8-y>B=avxY0j3go;0=&825xKO0?BEFDp-w}v~b>io5qc!QJ#xIl5H7?L8BZ<@(B!(6|}#JofY zXDHpQqLmF0Lt1I3sE;aH^{_euVfIkEKp0871+k{T(JrV*E06J?C62N*PLRAzv&L-i f6Ri9{QRir6K9WC;^++`00q)a=z~{W(fG_?7)Eb;N literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/GroupableTableHeaderUI$1.class b/bin/cn/com/customization/util/GroupableTableHeaderUI$1.class new file mode 100644 index 0000000000000000000000000000000000000000..6163f8ff91536287d0ef0748dbcc3d941a860546 GIT binary patch literal 1912 zcmb7ET~`}b6y2AkOh|`9(-y@7MMX>kGSCk{0Bs?V5E`iRrQ+vgxD8V$Gpxy^boCGU zst-n&4?fzp{7o)(-#eshB7GrQnK?Og&OUqgIrsea&+mT#xPyj)K7regZ#hBJa@wsZ zXu8ks$PIj}9l4%W34`{DUH9akx@<`MNQV2>sRaXRf#MVUsr}4qow|O*id2BLCLh~v zFVfK^>3KWSXNC*~`lDmFH8sy_wTqTpV)nA@yU`~C_wpA{FB}M@OTm#GfWT!Fm(ZU@ z3WFvLToFj+Rlrcq_2qWES(l+^FOaJRj_n=Tq5Dz*;;7dUxO-t1Qww~J@rFFFO(|%e z1ithmfd~0oQqxV%WJ&uh&!)QAH-Egc?KtA*HYpGMY8grzJ-@VbH5$o@Q#iBY^E zaHUHkZl}Oo`53FWm2vSnhPY#xFfcAKk;ILgo{Thc3zGtatWgd^+2H*6M`UwW!iwp7 zK}bkeHt{y57~bj)zZUC|h%Ou`3ezUu?ZU6x&JQuXLMoUjc9D`##xQH*J4^7;+IfrL(H3)eIvnXT3K!v%<4(?aCY~OCk&_orR0s~YjP7tt?Mb0L#cT(ya z+KLl2)tZSdY!ip#ba5tPobGt_CaJS`NzV}lc-8dt@l)GtOLZXsuOW5Kx~*O5@lZ&P znK-1N$9Ah6aF_99hrubGRqhWb@Y+qE#J{|Q{f^%z0)Ge1LLWu}80i^iz&Cnk!cMh7=LcvBnibdc8uBdlVo zgFD697s%v3_z}iz2Oo8CznClihV>2}7JnjC3ab3HCRiekHC)Cz3zjjC3jI~gU=z!D zNN-Kk+leWh(IXi=!l#;Y1)pI@zhVWu*wbQEuum(kNaFyXQy67^L93tN6?}<9O7s=I z1*HDQw1Kg01L9vMXLvU-Vqj75!w2Zop0D}rTPF13JABW38a5m}rlnSf(vhG40HOBj AY5)KL literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/GroupableTableHeaderUI$2.class b/bin/cn/com/customization/util/GroupableTableHeaderUI$2.class new file mode 100644 index 0000000000000000000000000000000000000000..51b5f5d0684c9aab2f6d9f8dcb55b5a91eb66570 GIT binary patch literal 1946 zcmb7FT~`}b6y29lCZt14X^Ub3Q4y1X4ARyQKrK)RsX&!46+bV-ZJ0WlVa-fRSO1U? zKG^DN+T}wZ>stOMm%8sA(lwF3kgQBj&YZK)o_)?e`RkuQo&mUunuQL5X*Y1(uPPysVkB+!){c=6~ItF4~4+$^)_yueF75x8DFeR^p}pmQoZy6@D#^?BwD&O9_tK4LEceh$CrEYnYI4=-p3+TtI7G5FylR!2G z@S4E67KyZ-0&f;mtoBx>#nTw#4r18Ckic*jH*I=0(#Go;5$Iu!O{OmtkSTGzs?J#&x_e(9gh?F!CM{LHhH)R}1QVH8E zlsyCOqzQ)Vs*N?Q6NlooaE4Qy)_Aoi>9cpn%n=26+4S@FJ?S@;K9K*{kh&JUcvJa2 z6pCXeb}8tAjF&_1GM?-xJfgG8{o#gwqaM&WFgr|Oq^;J;K_+z1X2Ka;lZQr83*WVM zvDLN0X4r^awe0z%c;)2_b5axMj#&y^KaAPzHI*EM`xf>DrcS#KZR~@kx(}rnBznmT zjAtgb63N2@&yA1QhCXl`l!x2HSF;>U0lOLmDq8eq9IF^39O)eY4McCR-i)+5__2_u zznj)I{??vCdHgXiPhdYXG3R;hVhr#LdU>^tUBCtO@t43wTuKo{7xVM4pL&kf}YzQBfg#0oaCWyGjp zn^vbLjU9YRVYKxXtuDUj@ilfS(Kqy#koy~B76#WXh<}-!=eLD^3p0W*-av=(e9L>^ XGob@N;75LULc+xzT6(Ey9r^kXX=?gH literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/GroupableTableHeaderUI$3.class b/bin/cn/com/customization/util/GroupableTableHeaderUI$3.class new file mode 100644 index 0000000000000000000000000000000000000000..3c77ee1ab68995b3145028feb28a8472c3a04b44 GIT binary patch literal 1984 zcmb7FT~ixn6nDm5WU;h<5Y$2nAr+|QOU2J+c^kHFcA4Ex>GThI zs~5(O7hdX2FM8qE`0-a9^?BbVosD#yA(?DW&Yts}XPrb)JVTuHMZ{jLm6&PUPauB-riC}y4o?G`D zx{KX~T5&sv*9DNrEanWb^?gdWbQ4Xy2@Z5F4mRSDCrIEzo0o2N;?>lynV82yLTyvt zBejc1)Y6fv=5^B2LzDDv%HbJY2tuC0JeII*pvv5I2e)dgwr|&EXrhK20zFhINf5Bo zMUEz~b5eFSw3Q@isw*Z|u|^z<)5aM|aN6V5nWWC%DLqFN;7QZZ+jniRDb<1euZGk$ z??xNaXyNTr zf8_xdTX?7RC807<<;OL_A4%gUoW{>A_zQ;dEB(J=0>5Jpe_#=RYI^Glg(G?-gPV9) zQ?B9`*7YM+v4Kr3MipDMx)o_`<2?$atoLbU`JTrI*r7xp(pyC4FN_-)S~DR2VRDY& l1_lhw3ch#)UE1>z?|s6AE_{m5_}vW~4sO#@t4Ha`*T47m3bOzJ literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/GroupableTableHeaderUI.class b/bin/cn/com/customization/util/GroupableTableHeaderUI.class new file mode 100644 index 0000000000000000000000000000000000000000..c358ff19b3d63e76a0db65c3d815d514e65cab39 GIT binary patch literal 6782 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 DLMzVE literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/KUtil.class b/bin/cn/com/customization/util/KUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..408c9717caa69e00b54cfcbf88505de6f8886b03 GIT binary patch literal 1965 zcmbVM-%}e^6#gy=SqRHdBL#o8*p_aV!rGRqEmWbTKx}|&(on=&Z` zh^#>OTo}}p3{+8;>s}0Khd?LKEZ)d2EEed9(UF+;17Ce45VO)nf%sgw;UyXAHPHoA zpf~3S-g3QC@~Q<{DtiJ0xzLs6qOAIQzw3;vZNDZklKYR^rv$n-eN_naZq@SwfpIIR zxhhXqTrW^w)u~F?k^ZJLTdFCp)ogY?PctMRVV9E$i z8+ex*wBTA%6K8OiO(4{&zoE7xMKe0(oC!;ZIvHB@{H<-3gpKnC#ssY6k~cA~D>Zbb ztT8e36DNkh#LQ%Kk>vbbHZUpBvp*V3Qf-@fA0G&`ZQHeQyT#5$(6nbC%iK##s*A6($VQTn_Ll3#2xAJ(g`H}C7uKN-D2 z6MDut+njQ?rwzk=T@u_G(XNC0&I5b>pioJewB0=6@L%x1-F||e-=ma1S`7du_S5R4 z`pFu=YmqO7*Xd!hxP*@Anw_T@Y~ZcjSOcfBG^1DIb_40F2`hz(Uv@AxoM6Oy{2MOV z&oHt^_j_AUaq$Q3AJvN|_^^Q~yD!PSj~kfNz6KVD;wjuDz_sY$P@D)CBZLT0AJQk9 zSi2BSfF&L4OAszccnjjL0)AkP+?FMWEBe56_@E5LA)D+f^ zCE(|;D&XCwfM2!*y!Xli-nA(p0a^myJ1pR7%5a7PoF(;9l0HWPEee<>+c64wo`Q^1 Xz{@WP_!Z>;7I6JV0R>8gYJ>YPjlINc literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/PackFailDownInfo.class b/bin/cn/com/customization/util/PackFailDownInfo.class new file mode 100644 index 0000000000000000000000000000000000000000..5edec0ef14550ae14ffa88b91970dc1a64eeb373 GIT binary patch literal 2707 zcmbW1-%=b!6vn?^*gq^I37e2;2*D7e%O)~O2&g1t;v%|c11U(Qk{hjIwjo1yXX5OD zRhHg(r8i#bduWxERbKc2K9uEmW(Qc?-YP0L-P3bUfBieB&*{Ja`SULT^H?t;r%>}l z*N-}`zt>HoPVkMF1X1YjB|+PLPwy<50KV$Mt&Dc^QQ?GG_>mX~;4ove8stuPkrZ5`{-*I#Z2ZT={Vc~cW+?qmonJvr)^MB$N_ zJSRx3y>1jLqkLrK0aIXKn(degyaluDT48QWgFtHu15gK?A;PBnv2ukCfVbo|)clCUbx$oJY$ zyf~0`_H#IS9&{D1H&1?Z66TIh)_YN%tM*)6p2kK$QvikCBEvXZA}vvs==c4Z?YX%Ir3dXSr%om%WCW+8>yx zsRNv^Ro*zjWI9fz<8-ZZ`2bgbOEs=?yhIXEVVDXdxWK-gr0PYEQ{+B_w`p~Hs(1%g zt`ufb%T9DT%Zd5g@0k9TA32Cf{b`5LZUHlH^)SFM}h#ay;|nMdX1sMRJ_UEHu~O`BS`xnp5~mfVJD-Lz)pmKoHNHK^NmkXt6m zJ%ZdH03ziiAPZKIMH6Jz3i7@kWYGj^66E0k5UFPY`M?UYWP)s1LGIc?mQ0YR1bH?9 zL>fv!KD2@?n;>6ULGIZ>mQ9crLG%C+>1YADkB>P@pZ0f6-2~aSf_#G2Z1aB#zixuO zB*<3-K;%ggkWZ}{nKVK6tstM-Gcsv{d`pn;27t($CLj$f$dn24y%pqhJIIs?@&iGB r8~`GZs(?JOf?P2{ezJlz?I3+`Z0}9_nIOLm0Fl>RKpwI>a#;Hpl+2|q literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/PackResultInfo.class b/bin/cn/com/customization/util/PackResultInfo.class new file mode 100644 index 0000000000000000000000000000000000000000..0438bb7139c2d1de4e756d0962a4a21ddbed6795 GIT binary patch literal 3266 zcmb7_-)|d55Xa|i$8OA}ahxB}A88swi0zOZAuT_e)U+fGBsFOohtL8Ny0{y2!M-c@ zUHSC}PrShsZy+J@R-{%CAr%RUH{g##d}r?xJDWXFUv}r_W_Lb2J2U(DKaYMVqIr5R zLkWWlHP@m zd!ptWl=7XXFeqQ?{Hppb$E`0Il)fukZO=6*x##T|lyQZ)vmP`JGFA=Bwu4$twA)gV z*|nX9luo+drq~rN;nsvy^t;|h%em(?L|ud?ruZnZ8|!v6H0a|M4Pm#V%?HFMPTOC$ zeY-0BB`Lr8DnbbpRmd=}$38kk^IuT0Gm@vxn-)BvF zB9saynW0oNsV|hCGwEa~&6?C7O3#~=3#AuK8VIEeCgo|+p#F;Ea_DwMYs=ng$lLR3 zc4OOaIs6?dQ~n1|+o00_9KMqxIC!Qm{4JRfLxrL)B{J;;gWH|&F1wJX>9u)h17x8WO<*_Or6!;b-Wprqpf z3{+iS+9_F@mxhY6AC}jSWN$yrj%sp|*RGV#MNYd^yi<4Hp#%>i-ksK0jwv5InVImY zr@`pzI*vHbS5@s}dg47sDn}CW)4K=BIK+WFUe`k$z2oX^)eBlRv4W;y(BRQVHp`8Q z#!*#C^g)vnT!N4iT!3;$`No7@vaX2lzu1pykr9bgGm;vrnUP9FyaCDY;J*JWTR1#Y2&YX&z>Huy~j&8T&N< zPFYZX`Hizo0ZyGT!1Ba z7zwSS9e8)X8g_hH3o@pHT-1V;^&n#^$RgZbjsfA^V31d}Amb{?k{0BO9%NhvSp&%R z7!XcQ2DwVFVdPZmzM6^q%GKP|f-KQ;w77FMNWlpeGBO>;j}71H$FWAg^mdrc{uo7UT^*$dn4=10;w6;r_rNt6Gqv3i7!YWK9oJR6)J~ z$d@r7+@Kibx)x+w1^G$~QqhA9JmGQjVPkz<{ZP8nYn{3NX zHt>DeY30L^lzlqvw2uJxTMStESiOz*5k3NGJPE@R^_Dhfb85`~&?4T}$81iG*`GlB QD+Z0z>% literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/PackSuccessfulInfo.class b/bin/cn/com/customization/util/PackSuccessfulInfo.class new file mode 100644 index 0000000000000000000000000000000000000000..d15b4edc39950ea5e0d227a1daa908232029d3cd GIT binary patch literal 1612 zcmb7@TTc@~6vzM5d+Q=lXe$C<0JSa13cQ$T&_qH)Qo#V>MPIhd6bIYgq}`(NQ)!|x z@xc$^hcccsJ6N(zAAC7;&Ya8q=A4<|e}4V~u!XHWQUYs!;QC?D^@oEf?5WRQq{6@* zMyl(+@%#@*L*JK!L1){UyQ(WG<+%z}v@MXXH%F=1)vZ7^8 z%Q-FQwOstFOWh^8L{kT*kij&~x=h*(s+h$BD&(u8PCNG~!if(cZnnsP-6g4cQk3Fr0HRgS?F_&O5MhfgxKl1#?~yiB2-u z7jY_&VcwHI4|_ZgjNEZDXT&f(o`y(ylf*a!V@@+7Yeb)6rQ)4sUeowkul8&#3dK3wMP_GVmhuIP9wI{@VAs|@({cjmBkeMnqcu-8 zKnq1$oiw&_5%aWTSis^KVHdd+VWIX3_E#)@N9py<39f&^>K`aOE!m~RUJAE7Ix>a> q!QI6@0%WL61kRof+#%q-iNIM@iFXDytkFM51AZSaMRwYh0^m23+bQz^ literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/QueryTaskOpinionTableHead$2.class b/bin/cn/com/customization/util/QueryTaskOpinionTableHead$2.class new file mode 100644 index 0000000000000000000000000000000000000000..58fffaf4037e6ecd3bcaf854630a06928cd208c9 GIT binary patch literal 1126 zcmbVLT~8B16g|^cmM*KbC{SNrJKy`ojZ5V{W|yWzu$iVY+}PgM&PL*dVbXR{DC%6UwxKFMWHt^ zD)9CP6n|<-{eJI*3R&Bdoq*nu>{j?`PM~lkkEIvL@X*`q9FcD<%m|bd?TM#9D%R66 zg~n_2*oK-)8wx2Fm@z%2E05TDa|-Wu26({%nU@03-Kh|&ZGl`P>QWv87adrbwUNcV zgFFfXSvN75Z>o@X2mKDkY32e8&B&KQTgED>#7LP-k`Z_|O(2yGPR7wj8XDH9E3oP| z&#T~8Qq6j`ZQ~l2EL<1ZoT7dXZs4ZCtn_`-X&ZK@tl~tVZ(DR?Ud1HqHkMJgup+QH zp2?|!gWFi;01nACWK2e2$*oRc8HV!GyZRg|xM$(6KxrK8%)-HaxB|8&(^gt>W4O2O zyQG7H#gz%*aXt>K$uAG0LG06OmAqU&m-Oq2duGK}=m(Kza_^AoMO_CTn8}Om{&YTC zq|FYqD`5Swo5O)>^Nd6>H;|jY9r7qN0;x4=l$nNEUKbz=g@lbfpc!6y*sPsn=?R|` zja^&&2B-D|m%gMnMc!xF2H3{}?@lV)xQr`&V*ek literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/QueryTaskOpinionTableHead$3.class b/bin/cn/com/customization/util/QueryTaskOpinionTableHead$3.class new file mode 100644 index 0000000000000000000000000000000000000000..87c3657894adc2b9299a892b79eecbd5eb2794ac GIT binary patch literal 2036 zcmbVMTW=dh7(EkT*0HxuFiA^qrj(G_xpYh2q@^x_*0?mqcG|`bLOe~@L$b|!*X)kd zPzfO+Uf@q4p7LDOI-x}cgoF?hFTC(uc%gi=>ypqUShDRM&u!25o%5ZU-~N8|1VA3| zYv^N`HXXxs8;05PrQ5LXacQ}Z(UO*J+-wQ&lN$F|=bM&8vo*eCi)(_{NAen?41;(0 z8aHh2EF1GncZ4Z5#2JnUv;3|!#F}uVQE^+oC|kZ1j_?@ba>epT&QRcT50MK5aEX$U zvkVuqJt5>48KOnEF8aZ6K!=7z5)lmO=*J*KB&#+Ilr2Y8Ta6{*1*{p;W!L2PBKIt% zLT56n$S|DmC6SRlkM5g!k|GR7o=x7%Y_6o3`pQ41M5%X6h<_>`k#u28+E*fQHGe`v@OXn z*2#Y-RPMvw@EWoVhqvt$f?a7@c3pTX+_;VjOfqO|+-`~aj~GUGLWg!M?2&j9V>qo! zX)p}$e5FH7i8zMWb(}?>yu_PL;gIlCdu`p7cPBwoXPR_LDx~u|E+|zK(hVc18eP;; zz$KdGrYZcu?bRO58sxBU_;;x)#`T(5mzO=k3rWo4Z4GY`Nu}bh4LU9>1vFns^$ulA zl|B{{dhTe3<{~SS5xt_@Xpq;))9GF8$*zg*^@uGTf}NwsB2z6$Zmw2%GdLI;$_z*L zb@DUYmmDcPW&2cc3QFsiRHN`r-0(;_H9Qb3-V(Op!8p0#wmef@wQQo4+4qh*t-{km zE;**{`lMb($Q8G)!_jE{Ym7d|*auTv$ZcXO+%gHF3lh6p42NpW_{rNT(D&!&T}< z2zQC_t|3ZyQw?*}ixD;`R{W`IG%yYCX*fkcM#4@U?fVNuDMG6}(-PCPUsZ!WUxZ(S zbPk1!|E9w_=`d8gL;T(aV!k`XA6+1Bbcgu!e<32c87OcI3-li)O>0=Bo^q@5B7Ob= D^_<*N literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/QueryTaskOpinionTableHead.class b/bin/cn/com/customization/util/QueryTaskOpinionTableHead.class new file mode 100644 index 0000000000000000000000000000000000000000..be3a847895132830633d1e9dab851d998c675ba3 GIT binary patch literal 6086 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 literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/ResultDialog$1.class b/bin/cn/com/customization/util/ResultDialog$1.class new file mode 100644 index 0000000000000000000000000000000000000000..3751690f6b4a55328ebb154381b70368bfd45b14 GIT binary patch literal 750 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 literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/ShowMessageDialog$1.class b/bin/cn/com/customization/util/ShowMessageDialog$1.class new file mode 100644 index 0000000000000000000000000000000000000000..21561d7ef54c59b571b72fc76cdf63d87f315338 GIT binary patch literal 807 zcmb7C+invv5IvKGY_lvR6bQGLUdTh53fv0biV&z2DPjvqrFnNYCULc~(b{RH{#7L| z5)XU;AB7k%k$3TzYMdn0cLx zqlrB`RL;qHA3q|o=TBRGZt@$Co1z1>V(xYE6==8r^WIm9E4)Hu$3*-r65dxiECf}5$4DVF&!4^|BBCK`Oe=2nlRNLDc z#JG*S5$+JS7tkrey|7d?((a>myautY{BIH=KC-hSQ?GPbyZzT~KMFK?g9DT0)@d_7 zRDNPd2{yx|dbpJ1J|XEFzTf>^I;R}gS?em>B~YssB}B?za2zsmZ~HTn z-d9|`C~L0qS?3y{k7YiS(vNW+H#j2PM0?)hIsZe4rQRnbUvTRWJ}&dGd2U+vX#cL8 f_h1B8u*&Ev?lZoEHRcP{Sn&-!U@veC4EXy6xkSb; literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/ShowMessageDialog.class b/bin/cn/com/customization/util/ShowMessageDialog.class new file mode 100644 index 0000000000000000000000000000000000000000..018ef84130a4a7a05c9cd8cca8ea439f54027bcf GIT binary patch literal 3294 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 SC@Q$j|MR15OjM?#3C_Q0S=6Zj literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/TableColumnRender.class b/bin/cn/com/customization/util/TableColumnRender.class new file mode 100644 index 0000000000000000000000000000000000000000..68a256ed6295674927549361f8bc98359bb287fd GIT binary patch literal 1678 zcmb7EU31$+6g?X|k?SgL>b8NDB($`owv$GM@RBXM!?79cOtSGQLs9!5JHQoEA9S@B+Eh>mJC^L=z}9RGR@@h9Q-KF&iIwk-&|{|2W*5z+6Y3JVZrx zAFDtHvB2$OBYpULCfb^@IlfCd?jJmo?Raf}zg{mTX7@ODULdUHF^yL(yh7S1fo#m+ zlE9fEi7n|;bAdOC3D&6QN$|vnxU-nIFefmd#*IyO(w;V6$7Slz7*!R@PN;gpA=wN< zI0;=}g@j~e8&`3S?$N0G`9z15cd4Z*EZDd{gx_@AKP2!Psbr%(L`tvBV#&r0EDKnM zl2-X#noLy%vEg#l##?xseuj(oE2LN$H%&s|9UJfBJ%MRDZmH0FMg-U2@V!pZHCfCS z>!nr>9|*9fRK0; z`KIcHZCUkvQcT28UunylGp?|1GWrI>C5&T&Z;M}J$nnoJ;50{@mKDBPHW)Aeg2|ta z%UOc zW~WSgwiZ64K6>?Y&L;TV tz!%u3T3^yyLgp_lSeV_hApYUz9N!kEEvyPYT)>#Ie8phjaKjkB{TG;1ob~_! literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/UtilApi.class b/bin/cn/com/customization/util/UtilApi.class new file mode 100644 index 0000000000000000000000000000000000000000..160ec4a782f79e09fd692e64c3c6476ff18cec5b GIT binary patch literal 20141 zcmc(H33yc1+5h{VJ2Q7Oxd|a*kPwid5tAVy0vaVO3JFUf2}%&k;xZ%y3?`W{GhwrJ zMG@Sqwz9b37VECHA&6@i^|SkDS8Z!sE7fjx-(2$j-gE9uCS;_x{XfqiA#>;4bKdjr z+d1)-51)FLh^DGXY*I|)TRW>;V;$A4-HBwZBf2e|jK(^vyOYuO>a+1gcL`JBP=HLi9heth7g-bAGMT9?8%Rw^lbJRrwnZRzB-X75 zrT!VM?a|I?au$frm?c*SS%@DHK(CsnJg)FD3=_0I?kbC<-0q0a(OoT!qK(Wv)3e&U|(`}!@RQ_W_NY9M_aWDOs`lLAd5x@sGLGJRWNBa zIfCg&gW%9as$>eRizHo2wBG0_vIZ$l6Fe z(%BkmiNrTWTcI73vkM@N<&Y)Q{WOPZWLs7Q15{7*Y?{kdbu{q|0qW3vS^&==s-aDu z>BRDep_G0E@e3VVM5l?2<53tRL(WCX)~+TF^>3aw0eEy-}}1#n!h;rM{! z+|Er*6UsjpdVXqQq5z#u%WZ^>}5rI2AC1K-i;4yP)6`f<# zY9KS!yhc(`}MCFt8MOm(3M~bHI|ALtV5Hx*F@o z`k-NGG**2kyuK&`96A6%n#UZe^K-hR?QM~`pSr<1&48)^#c8v+$SnYsO*qSPshzet zbfMrZ{9Y8brFEe*-6gq$CSm4pWVq=A-K_~}vb z7rDU9nKS+LICe}#x&RzsZTfu5>NB7P=m`m>qp8=S1H$D%A{mY+HJ@epphHj5A%W8^ z@fb;vaKB-w5>1!c&p7lfJ%<#gJ)B53bhbsdhy=1q3o&6dy&%xPC^p}a9pn@AWrw~( zF9NS{Tie|BNC!B41jLj~krs@mmmT^a!N881-G#odI`lQsI}0EJ^bPu!P2Xf1Jz&a9 zx;vB6j>z0Ct&uLtG9CK1q(sBC0&Bm!6q$%<05}W&8lFNGHUSqmhs)q81no<92-~4L zYum$E!q6hCD+ZnC2K)o4F&VNxa(@6A2BFStkA;)-;;{}5DJvK2ZTczLH$V!eLPm4C z*CM_K=nW&=Hy!!~y#=gV*N5Y?fwKn^tdrNj6i4wkQ%QN

~ua5bPUbzrUv6+Vq>0 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 F{{ebsPagmP literal 0 HcmV?d00001 diff --git a/bin/cn/com/customization/util/WriteAndCopyFile.class b/bin/cn/com/customization/util/WriteAndCopyFile.class new file mode 100644 index 0000000000000000000000000000000000000000..44bd0251afc4dca5067ad155243c46f59ddbf9de GIT binary patch literal 1767 zcma)6T~`}b6y2B1WI`Bh_y{xzv=+62KvGMKm_R?mM~Mx=3JnslIt&9&4KrEE#I`>B zD}2%?p8FEk5|=-~x4!p3_y@GO?<7SiJji0*k8{u2XPYA}#wgkHKu4$BuM%9-0mQnG( zvugt5`Tx%-Bhda#vXt}$;_>`{>{h+1?d)Yr=S`zU4P644eP7#6$>5c`SE+l9v5fsN zBIuFadjsV8pRvIM;bm97&^_d;ChR0-Pu`qZdw)DCLJI9`c_yexf|y9YgNN! zcwB~$3iP}U&#jyUk=iZ`E*SfMBhCrNej1gEPSK*h(=TD!sI&$mWVQxR;Q9q^xTvuL;gdpZ8a@-~e=C9Pa?Ux` z=2=sJhUOqHOw6tgo0so@T51LxOehKnz+;gctxKe zZOJ1>Ep+kVT7?U{y^d+CNp0{ zi0c@$CeVv&zEN24DFq-NXQqO4Q~t^EXc^>a>Y1 z_WCyZnWIEeq;j{Q{)1r+(;8;qphrVQXn68BRG}Z!S<}$x|I2qiGU^GV1isz@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;dPzh=UDrjYIzB!Y*=$y%)9I=9^@z)cW|GMy6h*lZ*xdPtmG$}se=r!t z^z<|U%(Ta37eHumaM1NAM&B%<5d`v21~BzFb}ptU3RG1cZ=XZDDcI>v)}dfTJS=(ffTJ16(s;jDd50&Zi%qU}B++$)#WTSom>0fN7er zEDOzM6Q^xF9*+R51=Smk>m8A0S>T+5a}G)=WLX9w{lA|8*!wrv3TX&6SX<1W%PtpQ;9vd&1QQjjF6Clm@j z8Xg{oBuQ+3ex7v<@KUqc{Jyrf_SWa~z2}?{b={_3DijJ#*Y(euradc_N`Gz~004`N zi>zL+e=C>EFBxOCuKwh1luRZS04NrVjavbD>Hh%c&AG0kS^MMw0000M?M literal 0 HcmV?d00001 diff --git a/bin/cn/com/teamcenter/rac/form/GCSelectionUserCommand.class b/bin/cn/com/teamcenter/rac/form/GCSelectionUserCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..8e785e50a0bc7b1ec9afcec07dee847490aefb06 GIT binary patch literal 3377 zcmbVOYf}?f7=8|fEXI`}f{K?4DoVJxiuMArT0}uAw{lal)h@|FSCZYh*$CR!+Iy|F zm#_WW51oFrqj5%O9Q&mo`a7IX`yZUP&)I|&WTm!~Np^G2dwt&Leb4#z&-)Jn?8mnn z$^`Z$Y$M^M4NscsgtR^B8m^fzW*j$d^!1F%luUS*V^3tI+vB9urk&If5{L!pnAVKZ zJ)QNa?{)Y0mc+vXjTgrEi>hu z7l;o8IO0;;u?@}>1G{!T+Vv}JA(}7JS$~bN}$)0sU$VS z2QAz34hfuS4pQ(_?e9G*v$LL)2@G;py0%Oi)Z?Txj!mxhxlS%aTvkC~s}2p7%JnuK4QLdoHbxQJrGj~*arj_cqXPn-YN!o^*i-LxZy-Ki(g59Y(^GbHu9(OVkX568(2@eRY z=GJJ=w$14jgV|8bEXC$97M6YPL4I_ee|L*4}|E3kjy zKQ}gMuO$nN7T6I~!lh)Q{37I;DR^l~* z=pWZ_{C4xl-|u|?_`!q6_wTC`AJNf+qXKJ)xrK>988&=ewH?ngU(dK4N_JbjU;MLaeY!644)coT1t-VA9-&P|%B9HChnPEkR_ITH3v z5X{dQ^+m-9Oe8c+3+xRTeJkqfNP_X`jIK0~c&rhv081qnmqgk6W`QjN z3o~_5wd2LJVeyh8M^49OMYl@NDYQrg^SG+vioo^&_@3$&9q-^>=Fe^|oXJZ_RO-qI zuHm|d_c>VtY?cx`HlL6gbp_DzfjUv68FsZd=9!7vao$8&<8=$2m+)^KQuUTVL!n87 zPLM+P2?$~oF?r2!d}8~fOWlVSE<~I#&&d{rwL0tyEa2>aKD|ZE;jk6VWo3sYEGWIk zhhWgm_~(L#ul@zc61AE0n3Ho8ve#0>Y;*7}aF3b{XyiFo&Tj?E_~8N0n`N0Aqs4?_x{K9e(q8K|MoxY*)|na=z{I-|}cF z?(Fej^4PcV|F-Y(MgF$J#66G5T@o?`I z{$ph5L>Hq~Z*d%C9s;l8P%-`iN|$l3S~(Uqhx6!eX}ybM|M;)+?KLopMntjQ_p!d9 zQ}R*mW5ZI?a$nK%1oad$QQtCA>27HYFx*7dU8utDMZrf)hNC!+ej211--QbPb(|=; z5FK=&aqkqZ4-B@|jOH=^9YVMHcj^(&4z>S+%Jzq9rM%)1xcbk4XIrB%@vgJ_4=whU*Bo%1oTRWpNSdP5} zy@T)^K#WrRm`Ml0?JvP literal 0 HcmV?d00001 diff --git a/bin/cn/com/teamcenter/rac/form/ORTableColorRender.class b/bin/cn/com/teamcenter/rac/form/ORTableColorRender.class new file mode 100644 index 0000000000000000000000000000000000000000..d1cb81dc6a73a1f7c13c2e6ad5904e62be1edeb3 GIT binary patch literal 1691 zcmb7ET~8cU7=8}B?CcIh`6ydNpxDw{KDLa~`n8K~fn8ea7Ic?VSvAct46t=}rq0e5 z<6R9m#>7h#8j_lLVZ2jJmc%ATZ@ln-K+>P!P2+QBwg}>dW_Qk<^M0K7eV+Gy=Z|MU z{{r9=K2p#maM5&h)2-;fWmHVd@hwmH3{ziqy^20xSTL4tYudG4uV6VVmZu;p(0_x*XOK5>mMFee(@2{7u0($;`F-au-Yu0gu({AOy z>#z_4*M^QTb2A8<31o-a&y-5Dv%{g-*zom(8!{4PuZ9=UqoDst-HN`)GN~BA83iv9 z-C^d!KpM_sP@t7b&bXen=D9Uzg_c7{La{R#W&r0ky!_mJ$}m3;&Eps%m;2ja>^-UP zZ$Eze?N?8?zE{zQ5e=hAv6!ao_(s_wf4w2v5ZUy);T5eP->kz6R7c^Q+{#TgD_gikY{9yyQvTt&DhpifK%wEp^($Vl~Khab5SYV z+(E}^sy`V`HYa0syqH!}zr#)ahQ2MVkJfQI9p`#3ok+%_-{3~-SM+sWsAG5wEjzfF zPJD;Uf$S1xkI)wEU#sJdK%bHNu0VDr@QLr>S~}6A^u+6!<||RhY>)B-^N0j+(>TF> zFFMfAhCa=y9l#Jd9OEvHL0rW-lyDw*IiLEoiR8$E2!j#ifZF3WnW(2*nuWkW zap8cFIPd{TT=*bF^~kL9#eJBrs;;W3_g;Pd@%amYJ7^Z+5H@}7`6l!dDMDZBL`GgD zd~al;(0kE)a`)9iWR9hu>~f&iDk4u10}s}ITEQ#o?2($45cDe zVi^TO^<@+XMnCIp6KIbx*ETv%giiWGrLw@2*h7SwU?9r@^3HlrURD4ht?^EE1aaDf*PVftHWba3G_M zD#Ak7_)L;us+hWQFmI_Kc+%`zNVISeyWvFdxKisnpIe z$n+%?>YYyGB_S7?6Be?=wEIS-p(d1iCXIZ#8z@Ow{(om~S&j+i9qlU<^TzDU+woH6mj5p^vDoa>y1pzUt77?^CP3wfzXm^aXVVesI5dC%NSMG zF~>XSU}Sf zHS6o*EY7iKdz{Aw{*Sd*u*$E5i?}rI`+)Ckj@*0BaPX(w_rJP1zq>iOj5V&YxmC6t YuD+6aSFz4_9yMG?gRK&0**rc!0Zga(ivR!s literal 0 HcmV?d00001 diff --git a/bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$10.class b/bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$10.class new file mode 100644 index 0000000000000000000000000000000000000000..d6dc4c81544d27cbda8675e2cd1bf73ff0600bee GIT binary patch literal 844 zcmb7BU279T6g`toHo9(YthQ?X)>xAiyOH`JD19((p%O)`2JDMWH@9ZXW=3XamHsRr zq~Jq;K%r0id&E0Spdx+A!0y~TbI+M`&prP0^9aBy9@SA1SV>iq>T%*oj#E;OOk!l3 z>}fMjK5oBz_UWzB`;@v(K4?Da)=?Gco&m7#ASXK_atR~8kZ}j=($UMpIjsa5mP{t| z0U4WV^1k!1RBj;if@-YGFCh@RQD&Q6fyezR1U_fri%ey1jYYPmLbeA2 z)t(;Gd9d0T5iUdsFc%}nWr3jO3ugP7qBq5Om&|*)o0Gs?U#HxbZI59_!uusnsCF`9VDBU1G3-$^dD+Wj-;U$`t!PV2arcuOfVyI}f!WR>E`2X+uJGTZ5uRY4RhxQ7Q=;wa)f H|0b`$xYWpO literal 0 HcmV?d00001 diff --git a/bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$2.class b/bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$2.class new file mode 100644 index 0000000000000000000000000000000000000000..4db76325cbacab1656ea8e654bbc9f8d5c417bac GIT binary patch literal 1827 zcmb7EOHUI~6#h5Q3~sz1R0p$ik; znkc>!e}F&1g$rK`H*VZ$40`Ugl8Q>xHZyY{=YHpW=YHqBUViZkz(I^@h!F-Y*R;H% z8A?&Kq#H`#^o3>4dw$WJnVLLyb;9=+q!o_xLf^241fgv~+!UrG+-v6LS+%F3fsl+= z#jVhkHyOtq_ey~**g+^==@S~l>vqsL#10E}c+Bv@leTMzrwK!;x=!{_6B1c(PBwwi zVn9QqjyPHkG@*?UPbq`eg6+ynrQ)pguZUSk650!%C7fyD+iG4}OsL=qW<3G)4Ri2D zQDq_P*w&()BXp$-|H@KMB`niFtz!$eY1m5G`d>2x+mU2K*JK#MX1$UdMs)Hzy3nJc zn=nvEiVf_`eDSGNzJ{NS23BhN zZ}bs4FG@~W4oN!Bq;%(`FMS;*T6Hd}!x|0|cKm&^iiLqAILg`!n0^%oAyt;g?_^aI zs&J>xOz2)ax2)EdsZdyp~HnvR8vsuZH~m8yKRSR zR+jdJ&!SP&mS}TQI#NV)eab8OmK?QJQEgh?N%pG*aSC#-<#++>W?Y8Xy*UFHaFNiV zD!$Tp&Wpgd^6tFHd{@b1Y|8RI$C(hWRHc@8xzS`D!SMv>;i8Z8vkuhOrfQ#CUIRZ( z(0R3)M~4vOKcJ@vp1?>y#rj7)i(v!58`uW)7VSJX)R<3gL zVRPah4#ZDAz}{ryF1pi?VLZc*CG;krqd$gAgD+vuJjH<}4Bv@Svhn`UH_BZ+a@WNH zg5IH#-lK&+pq)OVmp-v>-{S~1TnT~)$hr#Ob=9Egs6IDrfY-pjO3;uK?^X5?lh zelS>1>^mPMoLPzbFmEc}w3_ah$WLc^bHxu;{1DF8hWJ_o;#_TrZ#5v!*M?YL6C#dm Wlz|cC_?zIKIf^`wlrGdw^Y0hTO0ot3 literal 0 HcmV?d00001 diff --git a/bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$3.class b/bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$3.class new file mode 100644 index 0000000000000000000000000000000000000000..c79ec44773cd6115c0c2c3e9545a5e7179c50506 GIT binary patch literal 1006 zcmb7C+iuf95IyVMAaR?}3zrsXpaGJUVo+X?iVz}gB}XY#1cIOsXya_CtM#trwJH1) zFFYV59{2!03NdSitMZb4@XpN6jOUy)-+z4l2B3p>2@b<{pu9jwULtrD2$hJ~i+SKp zbR2oF2G8!lIgIs*2$FpYG&&{Z88%P&JO17?r=fc5C43}>w<{(*mC1AK9O$u-3^gO- zkjtTnO{moif0u#v7#6x(nS`rk$Ym-DG>JWop_m+prg4`h>d!IK4i!EKRhT?vc-fq* z^602Lc^%E)2Kg^Oi|c5{wC)qbeNlQbHMIHQVT zsjmYfi4#>s-87iDR4{n+z-e@dib{hktv*CLHALjftjYdKy2r3Q12V&6Xu3kmy>Xc7 z%TQ?ge(N{~wGBJN`Wp5C~TFOJN1kvL9N{P5DxiP|^PCDjj z=Nzn|fFgON%sW%7S#dKPB<=#eERxrw>^$9Wd+Rf*?c3X5aPCuf$_=KSvF;3_t##^%<^a;W-R V=3U1o-FY-{6D_jJlx6ei`~;`c_X7X` literal 0 HcmV?d00001 diff --git a/bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$4.class b/bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$4.class new file mode 100644 index 0000000000000000000000000000000000000000..eff2d39c2a1f1a031945190f8508ebbbbd9619c0 GIT binary patch literal 1828 zcmb7E+fEZv6kTUp85pKe@d}iSQlYfM0D`wFDz#`yQ38g9CvzAMIx?LxGgIXQ{11IF zF+Q3ocuD*K|G-}{M%`yxNV!PUPNs7%`>eh9I&1GAf4+VPa0zoN6owJgF-*5)1cH}L z;RM1nJZ>86u2(WvmKLu*Uhv#!!VG3sjjVCX2iCbyTlXUTbWF)D*+Fd7LUIZ46mCCNh0 zw#*H&#?YH89>!8$5|$la)^HYGDmocD|7)hB8wpD2i3md2oLhE+Fr9*iUi7QzW5_f> zv5s>%&(O?GQ}}*zoFUgB(P2)ThX2wcMa+eiWi=!*sNw<(MaIek)_B7D6bp1Ntn}w+=}RL#8|)b zOOk+FyJ1h!rc9je&v!8NbGov*>xWhSFx;*Wk*Nc5r#{439f+Cw5K~7&M34&^xQje} RqtrBKQJ|3&hP-O}{R8P@sKNjM literal 0 HcmV?d00001 diff --git a/bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$5.class b/bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$5.class new file mode 100644 index 0000000000000000000000000000000000000000..adc1aec4b1ef576effb416e069b902f240cee35f GIT binary patch literal 1007 zcmb7C$!-%t5PdbaV{j(1$-u)Dncce zQ6SVnMsZ;Di}oIYI)sIm(QzVlG7u`21@6QiBFrVnL0r4b9d&1DX_pHh20BO{5nk43 zsysUC+Ce-ec#Nk*JLK+^P-8&Iw|J(r;GtZUFkeCrODn_mMLk{6QQ4h35Q5b8rt?3xOjBRQ z#}E|7A3lH&CEi&Bf{2iX*?Z^iJ!j6IJ3oGY`wn0Y?J@#}`%-ghM%*bel1e+3@k~g5 zV6qW^-Fx}?Z8tN=O1f<-G}p^0GSrU6SnyQnL;hmmzm-v9Sj?;9%yBg)9{xN6BK%}`aqa3Mk&Ga(A7MyR01P>6j) zwUcPIcRCuVY+npg#n9*&Dbl{k62G4mi(WhfpGH7)oy1o~ZbMgP-cdDVSc*IUbZX1H zw$bW`xQgp#Tw_?7!lwxHSYVhDQYvek52ttQjX(HCge8Q3c-9ygd9v_7$z*QN3HfeU zoJ`ybd*(EgYCG|MUjF+QJ@CIz&TMI!8k^|DUFD94<{ zm5X@K?HOVC^PbF1ns$X&WOKBm>5^@x!dhi0P281Se=v9{HS57jcOqsl(ia;T1*C&}e@`^c7b=5LccpdZq$A y(=0^<7GdB}55_s;+;7x`k?^GU7I7`-C{`!PZAt?)aff1&hH@7z%Di+hhMr%D-|u7q literal 0 HcmV?d00001 diff --git a/bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$7.class b/bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$7.class new file mode 100644 index 0000000000000000000000000000000000000000..bf39f41ab93ea3f65161e6e8c18f4b1b1afb5428 GIT binary patch literal 963 zcmb7C?P}CO6g`t&H{BS!A8P$*Ypt%D-J(;pP@y77X`zzp;+7TtBeS#9HZ?mVN!p4( z6d%LK5ER89K7bD;-iZN0L`YzA@7&yT=H%S@@$=hv0C&)H;V|5knoBd`nGzGJbfyxX z2+4O%GU3k#Pwu|xC+0xOY?BI|RTou;=7Bg8JQjM7KOWg{E@}+(c~u-|TpbY)e;~8S z=rBq%rB%XE%l4zRvrH$3C5~Jp;Jrvk*?orPpcJw@WT>v2v8sdNln)nE9x7<~sH4eH z32Z|njI?@mI2oyAM~q^{&<>3h@lYg@-515G70TcpLHJLn zHmqxF-Jyr`xai^n!%_*Ke9U5wVM<7;(zJ8Cyj#!h!Iyk2!283q!obLrx&KKfa|fA_ zFSo_3!YyxL4il+1BkSkczi-hk`}^d~hL*8OBfYn+vVAl5aRULh+hG@Xj$BKP-qO2< zVK(UIB3|?Km@xd|Kqe-R`$8+S+27K1$<||$rYgl{8hC})39x3<&YkYNL#qytswXL1 zp}nnmy`|6adtWg9G4E;7yGA{5-k?pnZ*xMO#u(!gJoC<-E@sXMUp!M#7WYMdG@Wqgaa|S1EPS!8M9i8p?HaDYMe876CO|7$sBKzHoKd zF!dLXThdqaPcqM!U1v*}{yYKkjDiqDbj#Q=^rB&J=u7KzOhG+ETLm><`MTJlJo>ch zTaKNxJYU$tWvKTzEiay?9dk8oIZg{FEZg#@7}ANFRwh>%LRqIE!eF?dK|zBGj);aZ zq6|DCCq#0VEgqLk>%x6%tQQ4CQ_eAs;)>x~vR?&5l01W63xRls$VZHd49mimii!e5 zdm{H&rRJn+ct|{g%Y0k@kUddjmJK1c`Hj9pD*&B<( z-*gHZ=A_3XMxpR*A?uX39h=-m4%QZIx{cYQ;d#QNL!x^??>Vq&R9+DJG1So;hDzvp zY7J6fB5JDZEwt1g8h0ymF4DK2=78^`iQ1ZM)2e1%qDVw>rJCV@cHo39q~1V#kE=mw zJwR-A4;}AtI{=cCt*;T<4LUtRNC#mc2*W`bl>|5>fnG_GA41_D(850=#y=s>Kcka> zK{x-30sakR{5z)k4?N^Y6{4|#OqD3n!UQIXY79wC;T{!xpE6TvKc#Uwrm0tl8DuGj P=zwQ2Pc12rESR3(DX3B) literal 0 HcmV?d00001 diff --git a/bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$9.class b/bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm$9.class new file mode 100644 index 0000000000000000000000000000000000000000..0f4f263467798c9abd08bea13ca911d835f23d7e GIT binary patch literal 4798 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 OPLn*`IwFb!{rw-tYiSSw literal 0 HcmV?d00001 diff --git a/bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm.class b/bin/cn/com/teamcenter/rac/form/YSR8_ProjectForm.class new file mode 100644 index 0000000000000000000000000000000000000000..235b217f29b7dc959c698053bad8d479028ece5f GIT binary patch literal 40513 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 LkKwn#@bmuxoEnmk literal 0 HcmV?d00001 diff --git a/bin/cn/com/teamcenter/rac/form/YSR8_QuotationRevisionMaster$1.class b/bin/cn/com/teamcenter/rac/form/YSR8_QuotationRevisionMaster$1.class new file mode 100644 index 0000000000000000000000000000000000000000..dee00ebb1899d3aa3d593f0c01181e6fc6768e26 GIT binary patch literal 1449 zcmbVMT~8B16g|_{E|jIMKv9%$tMmg|Dk@;r1S=4d)(;9qpUAKsVR5@lcBi$k{u-Z2 z0F4j+0DqM6&eCX9+y|O$@67JK=ia&J-1+|F>o))kc%&i1uxvVp={5~1c+(V)6rSO6 z(|G54P2+8Sb7}W=%avSOuCpoHmQS|Eee%kdG{hLvhrG=Vn>+i)%e_NkN)2&_vEVKL zAPvzbOk>4V09A_u9pN#=<$>jA=P7&jlIhC~Lv3znePL5l0^jz9S7|mF7Q!IcEA>AD z+-8$I4FZclwj4`7WpHz0@nIb)hXwv8aejv(R&g7m7Yr#K8hX^~s*YYH5{P0@M<0e5 zqB-T7s#=bC(Q57qZ;S8Qf?=TQn%v&uo~8EPmoe2|hR}k-PLeHAM^ZfK>nq_YEePuD zM6P-vud9mVa(*X)QH*OCV_3W-t2!ny$+$-EDcMShJMkroxmnr|PBJRvpuJeaqRe33=c)bS$Zo<7&pX zH|Vq*4&4J4oBO`-F-eM#(sKoobXtu7kRDJ2K-W}+o<8XGwVzhYw2zWa6^f@w7G_V8 zE_}woap0Jt|2R2!28m^ON7{QG$%*QUwc;SQqPLTY9n`f9(yEDvuLQie> z425IzP9j6mMM|pBhp9xc6(renWY`);*gC0wBgi%x6gJ+?28_eNe2_JU67EsP1wx=J e_l<^PjGXV&Hi8FuNH#{3vq+}{otda1OTV8A(~GtM literal 0 HcmV?d00001 diff --git a/bin/cn/com/teamcenter/rac/form/YSR8_QuotationRevisionMaster$2.class b/bin/cn/com/teamcenter/rac/form/YSR8_QuotationRevisionMaster$2.class new file mode 100644 index 0000000000000000000000000000000000000000..fc282490a6a52d1d509258b94bf647c22e3ff281 GIT binary patch literal 1753 zcmbVMT~iZR7=F$sWnsHWMC}LFQcJ)j1lFdCXuwt?*w_Ry332QVvn;2$5_Z$w4c5QX zKj5`97CY@sFTLpB>3!{UHjAbm%XG-h=Dd6M{dnHzJn#AAuU~%$@FgDT&;+hKp5^%a zRwV6xM|zPAtiX1x@BLukdf03%Zr$(sksZ0d*N_Kp$hB^V^vafWqy;jM?E~BD*xs&n zZ~L)yA{|2l7vf#}No2_b=Cp1(DnZRD}(F%u)m2&8h#VXWqQa=o{|ErXW5-H`(0HQ%v2Z98z)d$O5U zO$n4w3MN}(Q)6~a)rJhz3CJCR$z1K7Y_2M1%lY;QKEi~Kj|HxskV_Mv;5^%>47$F@ ztZOVSFk5?vF7{;L$&S^kR0f^P!}ye1cp3(aTPqv&%|>l&9Qi}f z?(nS64d(6Zx19e@$Gm_UlkUmL+H6z}%;B=q#25dHIl|I5I8ax0TsbPLw0~QMdy(HY zv4Cp=20Kc21kUCX_yc}rmE*dJ8&Klj4*Vw}rFJ@jm>}VS8(79yIw<@zZ-;O7M@M$m zkeT>eDR-<(lA>m0J9{n8vox@xf+_;j#~sC+G#m>%*yV(tKTdtb*$X-(L5;*)FbON1 zpI+b!oa%o%>OerSuX6+bZ>q9!O_JkF$4YO|eKc;dZg=A$)UhEj@!#XZQ)v3Vz>#aN z8sm${U2yX%4T)U!oQ@w-adjCz@^?&ZDt?F5-LqMxPO2WSv`WVgLm5)@hq(2e z5GGKds+XClgsW6X3JSsup+d`IRGY?xmcx{mM?ouKUYkWpTf>5O2RF284Dlub6Gj42 zS+}uDkfWH!8t$;h6e;)yRpy>2>ioJM*Gs)7jFb+cWaYM!? literal 0 HcmV?d00001 diff --git a/bin/cn/com/teamcenter/rac/form/YSR8_QuotationRevisionMaster$3.class b/bin/cn/com/teamcenter/rac/form/YSR8_QuotationRevisionMaster$3.class new file mode 100644 index 0000000000000000000000000000000000000000..ba8934a60e9abf90708b6885ec37c7e85f88889c GIT binary patch literal 1078 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 XTNNU0k5i(tNb$#7!{ZMM&iws9MTfu& literal 0 HcmV?d00001 diff --git a/bin/com/teamcenter/rac/stylesheet/stylesheet_user.properties b/bin/com/teamcenter/rac/stylesheet/stylesheet_user.properties new file mode 100644 index 0000000..04ca04b --- /dev/null +++ b/bin/com/teamcenter/rac/stylesheet/stylesheet_user.properties @@ -0,0 +1,2 @@ +YSR8_QuotationRevisionMaster.FORMJAVARENDERING=cn.com.teamcenter.rac.form.YSR8_QuotationRevisionMaster +YSR8_ProjectForm.FORMJAVARENDERING=cn.com.teamcenter.rac.form.YSR8_ProjectForm \ No newline at end of file diff --git a/bin/com/teamcenter/rac/viewer/stylesheet/beans/CUSTAutoAssignItemIDPropertyBean$IC_GenerateIDButtonSelectionAdapter.class b/bin/com/teamcenter/rac/viewer/stylesheet/beans/CUSTAutoAssignItemIDPropertyBean$IC_GenerateIDButtonSelectionAdapter.class new file mode 100644 index 0000000000000000000000000000000000000000..d716e535e9d5f41e2bfc34993d93b33bc70332ac GIT binary patch literal 4546 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 WG7teF5ikqOXb4Cm8nA{*@(6>InK&~E;95oP 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 +// ================================================== +// Copyright 2011. +// Siemens Product Lifecycle Management Software Inc. +// All Rights Reserved. +// ================================================== +// @@ + +message.PREFIX=Value must match one of the following patterns: +assignButton.TEXT = Assign +sameAsOldId=An existing item is found. +invalidType=Selected Type should be an Item. +invalidID.MESSAGE=Unable to create item - an invalid ID entered! +error.TITLE = New Item ... +mandatoryGCID.TEXT=It is mandatory to enter a value. \ No newline at end of file diff --git a/bin/com/teamcenter/rac/viewer/stylesheet/beans/beans_locale_zh_CN.properties b/bin/com/teamcenter/rac/viewer/stylesheet/beans/beans_locale_zh_CN.properties new file mode 100644 index 0000000..5695826 --- /dev/null +++ b/bin/com/teamcenter/rac/viewer/stylesheet/beans/beans_locale_zh_CN.properties @@ -0,0 +1,15 @@ +// @@ +// ================================================== +// Copyright 2011. +// Siemens Product Lifecycle Management Software Inc. +// All Rights Reserved. +// ================================================== +// @@ + +message.PREFIX=\u503C\u5FC5\u987B\u540C\u4EE5\u4E0B\u4E00\u79CD\u6837\u5F0F\u5339\u914D\uFF1A +assignButton.TEXT = \u6307\u6D3E +sameAsOldId=\u627E\u5230\u73B0\u6709\u96F6\u7EC4\u4EF6\u3002 +invalidType=\u9009\u5B9A\u7684\u7C7B\u578B\u5E94\u4E3A\u96F6\u7EC4\u4EF6\u3002 +invalidID.MESSAGE=\u65E0\u6CD5\u521B\u5EFA\u96F6\u7EC4\u4EF6 - \u8F93\u5165\u7684 ID \u65E0\u6548\uFF01 +error.TITLE = \u65B0\u5EFA\u96F6\u7EC4\u4EF6... +mandatoryGCID.TEXT=\u5F3A\u5236\u8F93\u5165\u503C\u3002 \ No newline at end of file diff --git a/bin/cust/com/rac/changename/ChangeNameAction.class b/bin/cust/com/rac/changename/ChangeNameAction.class new file mode 100644 index 0000000000000000000000000000000000000000..edc91fa5325ad6aabc66c04eb5f49b5c5a7345af GIT binary patch literal 1222 zcmb7D-A)rh6#k}^Ze13^O6$LZ0=5NNDi>bVm^5vgG}&;2G{L*+GM3TpZZn-~dFP)x>~5i4Wj=h;Ly$vuz@QqUGk~%$e_e=gc|Z{P_L#JAe(`w~%1S`~9AF{ix$A z?z{dT58EQ-9pP4Ecaz+TuVoZkNHRPyKrML37oip^&f)T@$?rs=%VT8Et+aZY=yat~ zA0#uR9?DSaM-276cM8dotnEgn+YO}8P35xpjKAP+K&`o3TFJ0oE;JdE)o54Pn7}y) zldu_T<1qi9cgB;U*z9*&LOtfKKrm#y$mcH zp{sqRNC8KN$*_?xocUcgZerfTErwWvBb0TTC>$){HiJ#g)I{&Oj=Bs>|LCAmAHvEu z7O`w$iD6;%tId;#UBO6 z5+*F=QWYa`9Oa2_unS!|i!LXnqUV}@PVV!Oh GDE$HTu}@e4 literal 0 HcmV?d00001 diff --git a/bin/cust/com/rac/changename/ChangeNameDialog.class b/bin/cust/com/rac/changename/ChangeNameDialog.class new file mode 100644 index 0000000000000000000000000000000000000000..2e9c02e5445965302a3687a27be089d88872acae GIT binary patch literal 3825 zcma)8Yj_mp6@DjKm}N5|u-sInTm;N+VwNOGG(l_(k40kp^<=M+)ccG`qdVQr=}uEmSiLHI zqD@7|(EDOW(lKmzk8bXZ)c2$v?sw{&o2IoFDp+$sAJ8NEpc63$s2{11Ii{72nrX*K z8nyy8ZKTs&QLrgGkKu!coiq}Ww#HUZtxmzBv>j`Xw;4l@f*Yb@ekhV2G?TrNdu6f7 zG!k)9OB#dIY74A`4Gxc3Fbi+W~^b<5>CHuGno2RDq+TSfj~iZX=uL4 z=3v?0oVTeifVEh!Vx0n)FW0BRtgRY0;1&e|I+Mjx!PaYgkOe-ERMQMlu}Q%#^Ta=w zD~mwvG^p^4*C7pIlo1&^&^8z1ns;=hS-8GWj~Ptw4CE?qBXO_iOHNn3iD)Rn5MVeARBPCZ+qq8n_Sja+u${v*M9Jq-=xVNr?HUbB5e(o?)TyX_2d{Pw z#f+4&K*M(2rJy85iaM>19y{2^8YY1YOG6z2n!Q`YdqrcRP`ABVmKroPVkeK z+{Wy9O?E}rfxO6hv{)m3iV*N4rNCcVQCX2N_Bkrp)n_Lqs`nTPKiEnGQ%7H#8X3Mk z`bup8hcF=SB_!A(4Ttd|(oT=Z6>Oj9#2MIgB~_O#1!b*IX8$B#$(Rh4zl zkB`xbOD~?i^xUieICs9*kB_@jPglh!6fB!TK4A?`gY*PGDZbvN;;F1k?$YsY5kEf7 zBDwtX>8aDl12}>K$*)Zpedu zzN?cENa8*(iTeUeDNlVS7xN}aYWTQ@7x6{%Ta*!t7q|IZZ#lreHxUnY~}mIjP~4w2#H!W1-DzjoF5g6w%i;d_zRO z6uS?IFbLn*}N-j@V&iXFl8-tx|58JV2_Zg(i+Pv8FQ?*N89B!Uo!FN@R zDYz*Y+EscQzK64{LAjr-ep`Cr^66Z-%)j4l*t`MvBBNmf=U5|hm$(m+*{azaKY&)8 z*DxunK0X5a{CHgfWcm9VF5(A_$~e@oC)f&S6t7V z`9*YBPqJpmMyW;aB*z*IcIi9Xs;7IwjQM$8X84e;yg0dggUTI(1^~%Gr|) zR#@|U4Sx{UsBtq*--*)AGkm=YRB7&f2g;kw!$d)WL5>AHh?`8gx>n46=2i$xu%4$C z@^1lO5C!sz;ES33Abc{i@3|xE+Z|ca?#TPy9eEdXl>L0S@&5{by$v6&0S)1@@--7! z89s*_GI-BLY#hgC@1yi0%EwU=4xdFua7zYNsEABvu*L)cDC_@vqwt8OReYl5T^astjmlkDq zAN?+HXHm4!b~SZ(<9>R+hpVel@IM~vQ=zDMKt(IBS`~LLq zy=xMkT}zhF{7#^20`HH8C$YC{$*KwHH6kd*7XDVE4pmHZ zH6CKxW4Ik@Y{R3d!7yPtPWVPqi!;=kAVe3L!#A*l48I$HV@Cf@$SxBU0d1X^(=2GK z@fN;`Z!zP;co^U2tbp_H;B*!PAGLklWzgv}63;2z!-0tz&*0UT;A@QF!V4%4{xJAs z^&EcMIYucN$K_v+V(ISN$hP2bva&G2sb{3W8^x-uy^&MUa?8TT5JTLSW8)6Kb3s>& z82U=GYc2UzN^XV7rE0RN1`jag2eA`vl(v&;9Soxrk1$Pfbh`nEy#R77HMsYWJZU9& m|H)-(4QuYtv{vYHb14@52O)AYN=6p{8%4{g{1+FSxBm}{nJ2dZ literal 0 HcmV?d00001 diff --git a/bin/cust/com/rac/changename/ChangeNameHandler.class b/bin/cust/com/rac/changename/ChangeNameHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..80982a01ac27f0ea021ebfb7979c4616303a874d GIT binary patch literal 3097 zcmb7GYf}?f7=DfZZ<0RhInah zy;i4HYe$`STE`Dn+fG1nI)3ios0RAUKhUXt&n85WsA)c&oOAZQKIgst`S0C7094?- zglP;uEgG@?ni=w2s^-`FR3pF*HN^e(&bF1d8&#tx$SnyjA~&sopKC!q9O1-ei6s;w zf{4GiJ7SXzJ4w!vy+${5dmTfT*Vn<|syBPMj4b3Ra3h;xX0vYa)@Z1kTkUFhkTc{q zo0=NzP%T}Ylb0^LPmeGxZ_e1#8U~3U;9Arsnd`jG&$hY2q0&vGVIMc_8ej8nb)V`F z5(xgy-MhJFlPJ02fX2f%5k(~AGL&W_Zk$C%9_C2MXILUIwz(S8NE5dlxK+K^(!&1Q zrpE2I9@OoA1#>ZvAwR(F`lw|QWoC0+$*SO0yhi?$F>O2&aV%K%Yzy{q%izI@(vn;?5*9KnPGfkIrM*5$DQqoLuoz1y z7D#QoY6&FFP}npG3x=u}s&5kD_Np2uAX1EE!BU3e=UI@Vl~D+<0v}2!ib(tR2)7u@ z(ko6mkYX3)H6D~QOgHx%x)InJr5hQ=C|BUe3c4quTP!ooExVs#sdqxmwb>SNObWx~ zRSsUqDhU+~vz~-#TYtpnAq8)sl9J4f58$M#6mKbb8?}`5YB65eMh$;bnTOTmZO$>7!_>+9(0s7!ZBP#L^0uC%q9 zs7M}Y43M!4Tm(ojL!|@qzf|<6{FyAKg0<|MqJ9 z`@`|?evhBO^Vh)O!=DEKzC4gPj@=x3FnntCmusVEjy*hkVeHWP(ceZEc|b)WCw}_O z=#O_F-8&@1#y$yAhN3j^N2$2`Td0Jp0bXYwP_Q2ds2_&S2xaW1iH;<*eJUhPX$${T zf+-3P;$sOPy`a{m8k&MnoJQ>AN}H`}d)ldkQ`2;F(GMw@GVh&~a*^>aQJgLaQfV~a z7DVKUYR$0hx%8>pO3m0Ma@ZLLGR;%b!JpJMF=I?AC}c=)Pz|hPU|pm_>_s7SLR?^w zX*!T9M&Lc)n-us&J;TAgMGZTnj)b$6dznlZiN}%K%&4XDMqP|fbEeE|<-$)a0wp%h zd%!f>(cDF=v)XMF~tSM?XsOIm&Pj<@kpB`W37oX%+Z^n(=k&WdgfiNAis% zc7zW;#b=~h##Id95aF0dyn{GQHq0k!M{tyoEFzj?baIpCkMRYL)03Ih{lBE0ME455 z!U=dtlN%>-ia1V_uGMfqCWVp&CgF^PLJ7qZS|x0yNB)P#)&-AAuWRCGL3vPw!`H+= H4d?y?JCTn0 literal 0 HcmV?d00001 diff --git a/bin/cust/com/rac/integration/AccepComHandler.class b/bin/cust/com/rac/integration/AccepComHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..3e247b82c79f070a6f940f2fac9f82310d355fbd GIT binary patch literal 2548 zcma)8-)|IE6#j16cDBpNkA(s&%C7?57RnY20^JIfT4ZGlwOc^&N1aY@*MZ%gadx(W z7!xrjK!oT68Zf>PO;Dp25?v}1gHI;@9k7Kbo_)ah&2)EZ+G!z8Z|=;T^WAg4^PO|| zpZ{+E37{P#3TgzRdLi$`bTb>XH9cnJ9GSK?$1roTE?t*ax0yYl<%ToTRuB+qHtlpw z>KVhzOFG%^lFiZ}AL|;*JA`n`<^uJOo|pMNp#(N0-4h(CWp&9TZ11pB($2|DY@jojtPvs++ZwE3t&pxYdlAnpzL6JbNj__u3__8orCx9dxjUMiJ>eeDis|)?GN*WR@}xGZ#WGqh z9XmX9QtA$&LOrKRqDyC9!7_o(&jMF*31J1ER}c|c@57#EjM%yr>q_iD;usmjIiq4F zUJz(VOQ*YF+l;BpvNDG5Ra2ln+U!>Z!ccnX*@hW0d z5EW?jA$GbfgJ=(r zV04P6QjTrp((##Z625hv1{_zgO<=1}1l4q_L?;}X?U$p5+qxkRikDUFz)tpsTg)>S z`(h~xf1>tsWI=RLeaBP%I|nPH;|WS9b}M*AV9|6p6??FkjW0haXc=~D!_=J1ebjs+ zgeL4$(T!JmIK$|(<%p!jb(xa(sG&2at^OjYrZ>YS9>jiuCEc8VgMG=~!2xq{UtjOw zk^W=|2k^Rrgh1uFE}vL~7!cS~`sDk`hM4&J(|hBWN>|3F zb;hGR7pqNE`uW?5YroL4^wqh0e-zm$6glTYn>(7HWhQzfme+!2SuC|*W^+v=PGXhc zt2qm7pADi+kpBdtek&|jq|L$V2lW)51?C%*T{hWJ;h7>~vIRTCHJeZK+Dkc_eyUfq zyn9W7&U1aV>5?#41{|Czvta9Tzu{h)ODoxwFYPUEcXD#`RQ^N|sB!OF?rON_{mZqU zPo3T~5Nf%_fAJgCo1V=At_wWRg$Q6VZ5Q$nQ0Yf&EaE#CHH;-hSjv5XPYo`nNYO9I zHy@2-dGF>TUOd#owec>R2;cfQ7KEF_n`+0=dQ9AC{R{0^k!Zb(_KrX#P{j6*+DL79 zR}t~6XlnTtY7t#ZxTlEMI_e^UNZmMkJCul02Dpw$I8_Ckf-7z?fO$*-Y{n&A8yMg+ zhPRx-M%>Go)T~4!FU1zDMjO^}F0Mrv)}fDYk7GTCcsogKM2_>yqSYB}!iQ+}Xy~6z zuuKC}#St7O0RdVa!<(d}9u84XForhl#anor-*#XZ-od*pL?4M8~jv1sbDV dfxu%lDp;jp=rI#VyMoSt5egA|nBQw4{|CUt0NVfn literal 0 HcmV?d00001 diff --git a/bin/cust/com/rac/integration/DeliveryApplicationHandler.class b/bin/cust/com/rac/integration/DeliveryApplicationHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..18ed1a15dffc5ff26409c25e4b5b47de8f3e9c64 GIT binary patch literal 2592 zcmbVO+iw(A9R5z(cDBn1xKLmPxfSTPv}~~;(5*lzt*mUJb_)nz>U4U#4(w%|oo#50 zi5L?gO3*}&7+;7cXrdM(E)|KvClmh;*y0nE zw2_n)2*$IzmO7$YhVxuH^x1D2Ie~5Q|KTzDDDsrl^ET0Uh2szRz1Ov(r@iBJFWMYG zp^a;il$J?G4vn0Ux=pA+?tI$O9fh=1g?A~faQ2bK}cY|hme{vX6a_6JJxsD zHd2N?p<)GA3N$38-IKR0a;l0a!yj(;iU(mTQFO3kRhOaxtil=vs|DP=nH9=MT~)Cb z>lhxA8PY6=QZ{X7GbAOj{ozbX*%5QnWlYm08C5R2Y}TvTfQ=NEkfjU~*!oz&a-I^e zoOcSs0*xNR&dyLjS_GQzPG0}(y>rD6zq@ncle^b0Pk;IoPwt%mZ2H{U;#c3_nf&GM z)l2top7x_vKrI%|7EezWFMK@x&5Zyyqg_EnV4cUu@{C=ipQWHB<=*Tm6>yA`2hwoDJoal@(N0Ncm&Dz;+>>%s}< zgvq*CLct$odx@DJoy@*tiNPJi<%aSAr3_B9o|v4=fCzMa=nEZT-@pG$Sr zd^~_A>{Zc&ef&6S3|MkZGR1Y7kk+`NlhYROB&fJI=StL%K7qwO?25w!@&4hV?C{=! z{^7%e@c{PYB?U2ownqsz2T{cV#MuL#+;pSGya~tVD&-+w00%Lk;1FBHLz|Xc6>fJv zWXhS=t>R@23are@%xGEkssbL$(j$RmVXw-sDB~G;k3{pJ?Z=S7?&AC3&eX>Amml1o zI$!)^a#oStyZKS2eu_VQJ$>m%S{6S)bNklQrk zWtHzMKD%RL?wE2QN&>E5$XPOL7<{ zY)wDeubJ+&Q=mJe{l9y_9-7GJEnW5*&LCY~_NFR*N>hEaQ?u;nB*32&0yWMs=B|c& z4rs3ReCl$afk4Z3{)?ZXUUh92a9!ZuTnHbYrtL!h0V?m&8jE=5pa!v+2ury4@u|VV z6bat*^W@zrEbDJA;Ms#MTpMqpiSTWIU_r1sxT$suZAZnGw%^fl5wW&g=;-u?dHO@62N7If{6-P6|T5K0`uqsSfY!$ zHjv;_(pyHdA!kHWniXi|sBFP%v||msS13t6Y@!?|hj#42t9Xs?wqqw=#~Td90EHXou8ubKc#}H? g8d)xf?>-t8tWq#?pN^wLLD%011c*J#_cf6J0+2NoDF6Tf literal 0 HcmV?d00001 diff --git a/bin/cust/com/rac/integration/InterationOperation.class b/bin/cust/com/rac/integration/InterationOperation.class new file mode 100644 index 0000000000000000000000000000000000000000..bca4cdc64f988e3ff2903cd13b3ca8893c089316 GIT binary patch literal 23373 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 literal 0 HcmV?d00001 diff --git a/bin/cust/com/rac/integration/ProjectPlanHandler.class b/bin/cust/com/rac/integration/ProjectPlanHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..8d4838f0f6112201a9b568a7baa87ed28142afd8 GIT binary patch literal 3912 zcmb7H{Z|y%8GbG-%(B^-WD{d(Or)4aAS}a&3M>moP$CtS0vb)yZfAEdFuJ=l&dyTo zSF}l5&3D_RjZNCr*4Fl%HpZS5i8ejyPd%r9Mo&faQ~!c~Ja=~4pp3?P@N)0m_dfT1 zpZDXw{QWxn-ku~yrjC>|5 z9Ss427R#B{Wjbrx1<7-c8ge-b6!e{`f=d*)EG|&zrVFxAAeumQOkLtiBbS!E#qsVt zDxJK{>eIthC9!^i+Ju=m-9drs=9Ys3fnh5nL#W1GVQ2`}LE!E%YEUb1&zPB)`--`g zbf%3|RtiMMthA9mXgH=?mp=yFIkO-T8~Z;jr5>7Gkm;gJ)WPPlTid+blcI&Y=V?}d z%h(ZP-q6X}tiC^`_#;$k_d;6QiqwLJ2L;;h1a9R>2oK>48tMfe^C8eMXPmUH?;IUD z;F?*}Js!rx*eI}mR=UGQ$DvL;Z98kGJ)a76H@EotfiM;CDXh^|hx$W!6b%|S33zdG zlM8QmG>k8zk#3pw7ijdktVrMK<4gf# zRt{MUVRWL4p>JCS61BH^RZLB}j+vkBU;Aa$*RMAL_iNZH(CMQ=#oP+fqpr+N%6U^| zZ;0h$dl)_FWnL&}9=Dkn50LQBqP?tH2wM;jqaO(hP;|nPGm>GLmQ&K1H`6@V>F=nD z3Tuw^2f=!9|1c|6a$;;eIc+6}CdQKoCdWc}0z(>hGQDqS)EdMvhOvwFNyU%HD1F;J zy4D(B14pn&!;?(oTNV^Aa=nb(Z_83S4Pz8vA|(Zx&#bDf(-tieINa=)l@&&Oo#GP& zKI$@zn0Xxnt#@9;SbGiIrlb6nx?R4r)`huWQCDEwtsu&_`R6!c%vIsXvgHT!IrIqJ zRR$@AYhV+B>)Rws*8|?~8YL_w?$ApPsU2T%A#%mlLF*PcZM>jl$f*j+}Jotjxev zF_kmjrWwb|B@4$3q$X)*2AB#>wqvDPHwL1zFKTo~Q+-j{6YWby4H=ca(bSBZ%Wct= z5jD04@l}TWr)N%GJAdMzOCM|an!tve6L_d-W;4{!TU8|I~>ioif)XM0Cu z15??`um%k@7TuXxZ)3xb!NiE=qH;;4ortOcIhdFkpb0=tz)(g`Dr z9Qy}PLBjR=z^x4dpOjHLSz*{XMl`C+jAecCL0fya%pMCCJC1u3`i;g0Q50zYi~)}j zvXoyii&=A(w6_t&*H@%7hARiVIy!q|9euH`u7-||xc5^!;_U`;TuHBx?;#wXnv8Xp z{w4Gqc7ph(Kz+h+8S!&DzQ=UWszngr7I=_ne7qUNbIh!SUh%o2>tq<;RgXi^wMz9g zh!+Gl4#%JU$BSpLUA(gV&WFoyesuN9~hvjlyC4SjDGitMggDhHvAi8qTmI^Dd_FfqbE8+m_?Xj2Df} zk4n!M#ybeITlG$RC1#pUGVuZ`1E?i)jCpArj*%-I8Xps=au_{=TTK z{2gk&#Q)+?2w&u?3hOwo^G@D}0Pd&keYl6;!X;_k%e6v{aIXpva30`ly}}e*crM5< zb4%DT-nNKG_O)`{{0X)YKK3`Pi?l=@uUSIuDe*z2 z(253haMi=r2z%1~Xu=^h;~BId!`&IQc~(xA^e5kEYSP>K7WkV@82ntPNvQ=)Xlb95(HUEJA5diqFa9F6Q5w=jI# zFu?YA5ZkeXU$(KqdxEXg5GffZ&MxFghJ!t;Xmu;Jx@B6cam=HuiZ|r(F6pW!N;7`O zS%7Gp@N>>;h`9mpaaK#z8vFuhxvOZcN7a9+azKO7@JkKn_@kz8*V3HdP@oFu{|5*a BayxXPffD z7t};RjD9j=OiUvNO~gW?OQmS=lZn5hZ0jdJ`vK!K+wF8irxnxm=FZHy&pqck=Q(Hp z{O9g(09tTXL4`n*p37PxJ)I1hnjSJzmW-R4Wu#M~?`Y?gQeTcY+gmei8EEqzr4nz@lLNNdZqsdO-TH2#ZxH@K!_MDHWBd5?C5FQu1gn*)Pprtv?|J z{L!?oB~EIlVLz8%daScXRv;ApU$N2?MGi|nXAyUQFgkzKokc6g*g3?&!u8Q}+K?7X zXsLMUSpPYxTZHm;4(l>w6Ps1AN}%yc;AW2aum(>n2nf`-Ax6>K1j?jFp0RK+H2 zW@6|}uV&gVrIVR-icSganctIAT}13c8Ps%1kDP-=Z|YQR!B!GW$WrYH?D|i@nF=M| zOvNb(3e>uU^>}T1(Lna5M(_Of-sQr_-xscYJ28G|Vto9;m66HImkM9~@L=?psoNuk z%QvP*t`=@ye{kjNsSkdAc<-VYjRI;Rf2nYBwD9R?lh^P1umjBsLIRszF3vHJp%?|B z#pQwYu!@~{mO{v+vn1_Eu&lm%EYnEE!*kz6Tyy*wa9F`Eft@ZMIH5bFM=Y7_mP3ZE zWgpweb1L>=FEwH(_CkglSxNF|E5GEK7p(%TPWN>0?Q|LCJd8Wsfw644qExbgu{}zBxz2UK|ow z(ZROZ*A=*O)uA)SW(ms}v)4f~8adZo;%gWS%!+M#Vd(#X_;GLjbA8@Fd(Z_;DuJz$k zk1oM^(JRnac>lX;IZb}~;l$V{g)c_Sb@lMx)mgpW{AP0GN17Er|7c=7U(^-nL*1;w zJc6Vp)x+k~EYR@eeVhYG%VbzWZUijYEh%<>cc>BAJs(7gZ1*-Nu-wVsjAqz?+_0Ra zIhU5}mGft@F|FTesru(uAEV8g39iX(oD;Uk()9B&EmIt!3aF$Om!h{>SSSRx=bm)V z)a4<=p3VU$oU-2(J8bQ9NbqX@E)l4(XFGQl+;iS@t>#l(@fq+n+~L3Y8S3q#%@VFl ziYJ%CgXOec%0EEmIa*^G-`S{stRTWl?mc{}u`$Idp7Zj}#WAdoHRiGIXam>U``AYK zra!R6U+>>uIfkZF;#Sk|Xt{=1(|xqGdIFw2cDGgrD*eyr5x$1)4L?E6qh0ZL=J8T% zmHim-1ggdmYgGbD3FHO>{vHR=f5O>{TXbR(!vN*Jf@=+(TtydG)8T+U`$^AQ)N%$l zU;~=5k*#+V+WDpnb$FeFa1dKzup62P!oqgEjYho78Dmq?Jso6;3WkeQc!eZ*XmuKA zNJ}+_@hV=U56w78yf^r55B8xCZ!#HO^hM*YieIYH&z%CDxNG2fgjxmb6%0H=r-Bv* PZGXe(BlaM_S0Mf`x%EJ5 literal 0 HcmV?d00001 diff --git a/bin/cust/com/rac/integration/RequestServer.class b/bin/cust/com/rac/integration/RequestServer.class new file mode 100644 index 0000000000000000000000000000000000000000..c3ee6612a2c0379b04ade444c0f0ece693c9e3ef GIT binary patch literal 5423 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 literal 0 HcmV?d00001 diff --git a/bin/cust/com/rac/integration/UnicodeInputStream.class b/bin/cust/com/rac/integration/UnicodeInputStream.class new file mode 100644 index 0000000000000000000000000000000000000000..3410c698f8abcd4f3072e6528e07f5768c9a93a6 GIT binary patch literal 2215 zcmb7FO-~zF6g|%$jB&<+LLd-uftC<#L)?Uv5Fj*#n8b;Jw16p)G#%^-3^C)#9;aD$ z)kT)w1yvR5BH472NCm1=5h+qPm8vYd>Z+SY>aKsFje6dAIyeDU>cTVky?5@p_nmw1 z_@|fO?*iz3z}u*&G@WoWb#=(Y2GPW(^f&())e>z z>Q}Y9THMITD-HyL(z9S{xuhu&PW_9yRw}M6X_?y<*dc*{QB0bKrDp}i0)4akEv=NZ z5@trAuI!uB%;h+v8s@Te&`qX7o95`$#LemCLV~_YfzVjqELxgrrL|m1_wr&)v1-^L z{fI!c+s&jhgZ&{QX#w9DZySUcM^x0JLBQJ`NmoPQs0sxE1DL&UO5HYmvSV=8*2Qa-7-f|CMmwm^3ElDV9| ztmURH&C(P1GWs3aRRO%i7LwI(U(>CXe760TX5{qj$sl@hTB_H_R2}syn;?>wh<8== z+m(-mVn=oQgvTDxflZ%{=9%NWJuXujsXRMi;Lk zgLYKNbKpgZ4Dsrj+Y{Oyr+Ps*L{aw2n2L*F8~Zp~oCKwNaWt8XBm=m_E}xwl@9jH1 znh1bR?yOQ=T@~=lvw;96oP$&S5;od!ukf?cy-WEuUUG4iBV;O= zC1oa;FS7TWu%O~2r}vX`eM2U>$Qhl^mkJquoVDUW?Ef^Jlyyf3)s-{ow|`Z9LXM98 zW}n+{O3(K(s0a~#n6?KssG?nqH~6gM&MFxsPiu4=^-=F88lyXCnvW^lIJSv!v}Y4- zPi)T)J{#?LN8zJ?HFIu6Gg=toEuOWPdGIzmxgsNuql;0bB{TBSK7np0Zk%s<=8t}h zw#PI)yb|o>fUr%dmH`f-K*V)^z)&*jE;=`^Gs`VRAE7a|gWmbN_%=>W^z>}u%v{e? z0tOzFM`0fx#vr|9lrAO&S_-)jG2I%bTF>1EzMGk38zXffR&lK^CyN@2HjMLRY^K;F zc#nBsAQwOIlL`jws0_!Ho9}beN7$fLS^PoU$DJ24;Roo^|s@!1yh_tn1Kz|mM$pJxNL(YoSrSkuxSRV_z-u8agIu!r;1b5agjP|lugGd z?qLj{aT-2H0{1bFFL4Q9<1!v1iSKX)ySR#HNa06J;%9n4$25My41Plzzhlm>+jYCf zFPyrm_?73gEJzbQ(i{j6BYQcxAwG52y6;*KUF(@^J!iw0JudKG^#}z1##se(;zVal z%U`G#H4MO^e!c#7o5*et*#b$$wlKdpR)-k@RKSnx)aXV<_lMl>=eJ=W?GSffr@j6S VsmjA7XATtAkEH`CKemxK{{ahyx5@wj literal 0 HcmV?d00001 diff --git a/bin/cust/com/rac/integration/XMLDocAPI.class b/bin/cust/com/rac/integration/XMLDocAPI.class new file mode 100644 index 0000000000000000000000000000000000000000..02ed02bf4e789eaeded9c11e660ce652b7d167d3 GIT binary patch literal 7498 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 X3u@RyF7~B<>`R)k3t@6gO^p2?6xXvo literal 0 HcmV?d00001 diff --git a/bin/cust/com/rac/integration/test.class b/bin/cust/com/rac/integration/test.class new file mode 100644 index 0000000000000000000000000000000000000000..e9b663fd9ed882abec6a9b01976e184a0fa7ec05 GIT binary patch literal 3806 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 literal 0 HcmV?d00001 diff --git a/bin/cust/com/rac/workflow/ComparatorTask.class b/bin/cust/com/rac/workflow/ComparatorTask.class new file mode 100644 index 0000000000000000000000000000000000000000..b707d1c1c9ad6d34e9064382901cf072b01b9f64 GIT binary patch literal 3862 zcma)9TUQ&`75+vVX{6C`F<97xO#%tVLVz*YA+ey?M!tXpI0=N*cGG&0#vohL5NU+% z^pdnCmo}FsY1$OpI!@e{UU>0ZE$(VoyV}*Y^3bO~^{qdkZ|zIh>VreSGc!U0+g-Im zXPMt9MMsL>0&-I?2y=(r zf4HtwDn>>N`W-@_VO(MBfbOq=07VC#%9`>2L??2`~KmS&5NSFwAnvkIkW zTI}90cE=<%#l{}AC9a_h-K3qy=y_-C0j3UU=oRrqvPRJ!b7KP(2IWPB_-={1J77A9%EEWaQs_CSW6Vp1I1)VIIT=X`GV?14btZFKbak}joH8oSVk-9QrEI3su zvN5V*3}=|;teKy)=beIQ{>L$?U_wG|CDaMSp4V^|PjOE!lV`t(1afZ^p3yLcX-02b z$$6u2yihQ%GqhOeg`@SG1NFyUU zw@pY_G-ScD3b4P5wAg;X9&mH)+!2EEK@}EWP_R&@WOGGB0fefsO{OzBn&XXeMnwr% z6)Z~FU4i?QaCh=r%3QEBR$jw3sLasMU?uEz(cPB> z-W`FoTSfKTgYcFF<$}p7D_gPAhMY4*j+J@J%yPmZa!mGr8u&?J(PyfNb zzSh3JMBn2fye^deTa+|s6z0fM<9)1EnruwmzMa+CpvIgt3)S~sStTm(ZM>u4I}&zO zs?=N7@UE!pP$qBBxV_j|6-U_yaj{cHA#xxqwO+T6SXS0F82%P8p0*lHStY>y04oZX zw}A1MHT)1iVvCtCl#DD{*mCK*@6urBd12v(h7WO*eLd?U@UXL_&Xc^V2+EE{_ubO) z6a19HrmVcptkJ`sY7#|DPSLlSPnqv_6-lBjTPhPZ-Bo(@pAG#4^if8%FhUAL)1$g)%YD~asO{n zdz&*K>iJpAv%pTsi1Nfv?BGmuccTG~obi?5nq$c~!hN+=DgNQEKcQ(E8(n`yQ$p?* zp8;KN*u9SC8~BIgB(BSM@KF5Ms14r4-*nkq4qjZxBZ;6M^y@)q|2jI>(V0+m>KsMz zqAT=xE1~jAk8@UR4(kCu;B6M>R9*G!YPGqDPF>lYBb3c)<&}!Lnz*j$k#!tgL3>;e z>DoFDub?)rhxHn2SJ70~t|AiGBf3KEaLXF$@jEo0Az45(N!>#l_o5ChB<&$Q%>V6t z?&C~TKOV&hXVch+JUZ}obh4M?xWy;=_vpr7(JKY`RZOJdZI@;*1tc7g;|Y-#N=GR9 z_-!qK1QYG2uYY5ZNfs&mCq73hKtF%RFr^^9-NsQ$3VnWnW0XSlyoBSF!t`%*?+{Dn z7G{y86d{&ToS>u;(PKDCsRpNr=_KS0{0p^;0O98kho=AW!-6|4ZSbI6Il-AE-ha2A zq&FEz4RvRl1xu$agIp|(BCM|Qwq}SQCy&;(DxC10nbw&VF7)SQkXb;@g-_h zp4^3tFqpI%#xP4sb5eB}fxBpNbHfzG5OGpa$(AHBc`5!7-CZvfdMX zx?>n{Mz?DYIM>rNTz!@V&R{pm=^!mJ(l9^*o?y5M1~tUcj+1WD8KWeHur^6f;yTv_ z$w|CON%%T~FXJmDc?Ub}tN0p2*^Ni=5~TolD0rD25O9dv2mfb?DM%}@_*1t*OK!Qk zT%|>=m&o}y@J*K)ww1VTf%;D%ox6jjhF2P1<8AO<Gw%*{*0CjDo_N`$O`__Qm5|uxO;#);6rJGRvtB~bNvAP#_k;iPZS8^OM-NMKw zCvD{OJqKhPS$)rOvKQZF$@qDu3GY*qo%s2e*Ih&$i8*?O@71fkWM5+uy^j54 hTNF%_Yj+b<3_o)UMj)Zj4)GGMQug8J_=Pk6^1qO?5zznu literal 0 HcmV?d00001 diff --git a/bin/cust/com/rac/workflow/CustAddReleaseHandler.class b/bin/cust/com/rac/workflow/CustAddReleaseHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..8780942f4e93d9f248ed40198aae730dbf3b1dbb GIT binary patch literal 3520 zcmb7G-E$LF6#v~e?G4)nHCQx=A4Sl#v;>L*CRix3NTe-D3#e6byS*(-(`4Oj3it`) z7bt$r_~4UTKL&M1gmEm0fQ;k#;Jg2U{qV_GpTyrTX^dvUGLzihd-t5*J@=g7Ip_ZJ z*VzjIR^c^?DuHEYA@9b`+(_Ip%=o^XGd!5d?Te?l+CDI_U1gM!SDTIOKt?$dA%Vu6 zGZa^5#vwE~N;ES@gP3DmB$vXP#tUBDG*BK29$LL^^Y(k=bcDmNzdhhTJ_?UZAD(8qSmykZQj&3ocRH zVx3nux5JmRa@meim35PioqLT@Bc3s`L-DQsdzI-DO6%BfD%+({UgAc9=Gnl_sAyP# zn*gLp2FVmv7IZEr@x;#`q9+U@yUaSG^|IjjvZi)uQeUTtP=P& zzz>zA3NpXah=2Jd@W_=q$-eZ}B)6-4uHcxeOL^UgRex6AAiW=9X)ZtfND9R1MG z#>Ys4bapTo#^WplOxfQL9+`aOi;1tln?5x*dF1%?*qf7IeM;%+!{?i)PkziF^)x(* zrzCbW%KvnpQoqq*_?^;bg<+jB%;8?PV){2kItg_qIj2f8&k2pV|XbOaF=ChZ40k65-2ksOn48 zc_gw;xL6=uDNrTn&<vONmu>Cuk#0%VEHkTmpP9-rcafrm5 zRgRT=T7vhjg2X;vL3;dr-DG*!#D#(P*yUdSuz4&E57%+V&V?HY65)G@v-uuO)fPf}vOk|eeOL21Zn=nt?v`=f znFvKgGIIAg8WT0qnxCOXYc7O7#=J;8vNCiAt9FT#Es^`ik-UiYiQ1M(yZ@R>$f%6g zRJT@-qazU}U^+1;I_JU%=;3%yOK5zYM^~b*dbNHW(Wq9hhqgxR>h`jQ7YE&X!X?PU%*(aZK~(u>-5o$4iBQwb+CEU?YK1 zB=H>9;RxT~qvU676DP0%r_j!QQuqN6;3sVIefbtWPLCG-?!EQHq{l<}5d%=Zjb~}m z5JMZm=iI~Mw?+5>doj#Vw{fQoMi|R9o<Gl1NP$p&-eq8p24$3eva0dke7JaS_vWXyu>1j28kw#7Xj@OHezn&7m4)}DT#v; gFG(Dhc$tK&{}W3taidVVya)QEN4;0LRTWzfSaRpc0cCoG(s~Y=%JE24l(N6=f;BqU;#Prccq#BlV z6bXSL)0iSwvv7HpfRSl+J|)9jZMr+$1ZvTI})|R z)t+QS`*E|5zk?OvFSOCnVMk@`yki#_(E?jS?hL)4;?)YXkHmPo zmqj5&(^~pnu5D6tpDl{5EId8C`i6|+_(B9o+$V6?lAx;Dd^`;qY}0W+w$qrSR$-sO z_7KIwO;;;vHGGh?59ru|UV)Xq0S%XH#R{y6n-UDG5V=`Wl4bC$UuQ-QQ?VvgSZTa| zfwdu=wIW5aOF*B0@uQjJAI!Y++WcpyqZr`H+|(Br-+XWG`1I_NqZ+ngNXKrl%r}~@ zVpa)!A7Y2vpb8VeR*2u&B~;~Fp7e0`N|XbtXqQ}5^(nsrvFb0$8Vv7;S(>YrpMB}o znd5H<+4v}fAX^xE&NLPo>}JFoI_3u)?s;80Pp8yD{w>VK}gUv@N}}F)t0rVfhTx)sLBl zR$tRUSY?U})qiamcg6e*<(`4yxPHZE%ef*$O<85PZJ01}C91eGq-Y969pA5HpOHY(1t2!%KMz8HrXnXXGe~J>^TyC{{li?Qr5PFQ zJpy&ZSsIUl><}&y3RiJd#W<8hSp1V!(4@^(Ia&!q(ku^Rug`FTu}tDWykRLrkUvvN zj7uD4;4LY~sx2+Sd8;IGkR!-okgwY;e^R_*v1xXlpF-?BjCKASI2PCO$$69OGVYRm z3O*a!PD48teAc-(28S(J&UgJX0aoBD?%2F=H9=y0k8rorhpF2^NT2rGGidH>pT_kU z(9+*AjayQYctpl-n?`G@A>QyUw0Oh$hIgPXP;|-C{`f2o}q6EyQmc^Hye+z?LztmD1ALr1QYO3F;Paz)Hn)S%ecvG_;U)HR5 zUO?aAbGqP8J3o18Cf*p^8GA4ujW@+LF^$1Ju|2Uz>ix^7uqrlO7Gw&VFYGiP7bmHo zj`cXlO0)rIgJ(TYfKkq(z-`n#!F?O8a63oI4(`^GK1u3MbaBmc_}Gn&80K7IU=#M^ z9ymy00%<&j%{a#Q*Gc(4JH-jyi&N<4JsEt3`|u661-AS@El!J;?e4#gz@)_^_!|45 z0vXRzqA|KQh7Wj$#c!+e77k#XuI}PZIppcfES^LGHhr|4d=7U}O12j+iuB%o-shnN zjbFMb;XyRvb__xGri57`AiKhYW61HM_?H7qH l5*djj63<9HEAboyuK6ddxx|Yi)$~5-6MpDD&#UV2!Y}4cHe>(* literal 0 HcmV?d00001 diff --git a/bin/cust/com/rac/workflow/ExportSearchResult.class b/bin/cust/com/rac/workflow/ExportSearchResult.class new file mode 100644 index 0000000000000000000000000000000000000000..6f4a23d743f532fdfbeb2200843f6b37bc8d0c9b GIT binary patch literal 6364 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 literal 0 HcmV?d00001 diff --git a/bin/cust/com/rac/workflow/PackExcelInfo.class b/bin/cust/com/rac/workflow/PackExcelInfo.class new file mode 100644 index 0000000000000000000000000000000000000000..042322f1e70f456b010c9a7c4f48b92ea7de43b9 GIT binary patch literal 1933 zcma)+TTdEM5Xa|mcU?plk+yiFipABsReP~&wTY<-3ALsWU+T-Uu5@)_$+C#)XX-KR`cJ)0t%vT@FcK&YUx6X3mfK&+_N*uipT$1qV?GFj&;uEl1I;x?-!E(y{ET z3)AW-C#rV!?ncwiV&lS!LWsfSrFyL@rrM|}AF7wS=Ag^b>rGR2^drO6kJY-)Kq?Kw z%8qR`YP$?#O|_<%jW2l5iVP+k)voEzASr4z4CkZOVIa`%&@$Wg27^RP*R005esY@~ zb_~bFDv>>k+h-6gtei3k9a`tQ06~yMn1DnKrWjmg`L4@(%?y(3Wr7khRFb2ya#36#z zC8MDqx9e5iuBcU_l}eVTny0F5(Ajf_oXGf!;u)@^>v%H9OVK{(_#J#urI>fz)`sZ=HA80a;w}VrX0DST$=}Dh2MR7yZ zlcLBWuY|E>|0qZpI^-0}R@>Ixam2RYo8fhuOUR*6L7aXZeHsDW1!w?Vi(0!Dm3A%a z>{?XWwWu!I1XjQq!*vo**O-s`!q17B9(Exs2fHv!%RDVPSz7Eu z{<~Z439idHI8-r&wFF4wD#0|QAPZBl0BOkMX%+7a7$x@JffbPP#L&OyF(_z>AuRuZ z*{`?>02Pn8&Y3&O;oIb=uLDRvS47ZE}*P*_@|G5;sqY29YOn4PulV+l$@ z!3Xf6#IxIA6%-8vckaD&&zXDA%(w5KzXEuUZ3`8Fr+%Ip*H0o>OW!?D^yDN=&fPb; z(w9S-O%Br_4wAT^M3Ib-Ez|_sMYT~f@>OhOwlH;}GC{UsYPuLNG~%#3c21nk!rzDkSxGYbm>PyW!tMCn+C?y&!}R-o2T zj+Kon79Chv5~%L9NAnQ4?cf&bHoX-GcZw5BT_`^{N?^$gVs(&5W2J|395U1N5?_WR zse>Y(CTr$hkO{cnOyX0FmYix#y?;^G!UMAXAK785bom@}*bsn?HEb0VJ`@EMe6bh{WQSqt2wT_y598l0@fOzRrOlT}8<^Q=zRO7VEKzu(ej nH<%o$KN$x!^d(0FQqF%h%f= literal 0 HcmV?d00001 diff --git a/bin/cust/com/rac/workflow/QueryTaskOpinionHandler.class b/bin/cust/com/rac/workflow/QueryTaskOpinionHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..b1e8b69a74e8fe0dfc035c73291bfe92f78a3d64 GIT binary patch literal 1501 zcmb7ET~8B16g@)=i?s*>RfHmx&lZ6N!A}ecX+TK|#863moGwFMy6tYZTRwgfulgcJ z6Muj&{v-9wQY(pVQXY2ho!N8Gy)*aB{P^|tJAf6e8R!sLuxi!7wA`}kOUpcU{nC-+ zo|q)!Zml1M&n7c$dIL zYxs5@C(!kZX@YfuNIG*M5Y4)WDuxJd$6=sbpf_h%)NZX@P<~z(93{}7b1mr{NZ;1; z`eHQrU{?jq+>Lg%CSa&DWz_=muBUUY3*HP-Jde#2RSDKIxnp@EO-ELW=3e1gSplhH zn`f5t0)nar1_kEZq5B&W!#xZcxGylJdlD#FwwOuzVSA)~$%H!i<4wf$1juC@H_995bJ7oOm3wp;|oOt_1smv`Tr(kxI&F znmK`ie+_E{QEt*NE(y%F-+2mEdY-`Yjdx3}aVz?|w6D|pIa6GM3Y~41^Z&CTI&n>( zjqP&1Cp?-R>4n$Ez*B*AJ1W(pH}IT=H|Yk&*-}-!75i?@x73!c?{2ci^RlSBgA{nW z{5tteb;uL=3R^C?L4c6ZB&15!D%5KCZtzOB#IBr#jh{83 z3~|8^;71{j9S~Psz|DDI`}p`c&&l^6U%vr(jNJeYh9^l?lyPG6*vce6HTL8vGpF(E zO4;`#S)2@}sZNa^OqG=-nT=sO(LH@+0&s?fWBE?TnbebbFg{jE$uK{)CQ(IkAaljg z>Hj$~EN!YM&lsAz${ARXAuOpyeKM>HWosKb`!aFu7$WJ-D0SBfm)SRYu5?*2w4T%B z$`^Fw_Rb*#-#2emgeE!ySI`b|jRA9DxGr!BE$40u1PGnGEhy#p?g&J+TM?MA-I{=? z-93TJXfd?=sa6M7K2~-l$C>{&lgR8)+SILoZSwMMN-ulb|6i`eCmNc{ChAq{x~%+l z6nhRWG3jYdP%>E*stE9qA^ykSG>6|)#Tub$(*F^V5;Jnl5%WsCyb>+1#L6p?@=Bb% z!qKO?1zMeiTNZ*Tdy?BiV@SAASRr-}ydQ{1E}fuDo(4~Y0j swD~72@fnu+XRPxJZ1FGHrThk+6?G>(pek3t<>NMXNF&NIbnyt`Pv$49ivR!s literal 0 HcmV?d00001 diff --git a/bin/cust/com/rac/workflow/QueryTaskOpinionOperation.class b/bin/cust/com/rac/workflow/QueryTaskOpinionOperation.class new file mode 100644 index 0000000000000000000000000000000000000000..5b517c6f5f7b26fbe03388cd6fb6decf56c5ed51 GIT binary patch literal 27695 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 F{{u-dY4895 literal 0 HcmV?d00001 diff --git a/bin/cust/com/rac/workflow/QueryTaskProcessCommand$1.class b/bin/cust/com/rac/workflow/QueryTaskProcessCommand$1.class new file mode 100644 index 0000000000000000000000000000000000000000..f960a8675877643b38863d6803031c456c82356e GIT binary patch literal 1593 zcmb7EU2hXd6g?9=*<`&Wt_c(h1s4pl<0fl|kbWe%H6ck&oe*&FL*FLrA(>{qYwgY! z!cXW==u6c~RURuU3bc{>$U}caUn)V>A5k^EvvCE6@Q{%_o{xLa+;i`_`}@DY{s!O@ z8V33pY$pnp?f7jw;EsLQ54P^O{$2ZKB!cZV9&W7$z9YhL-fy?L*UFU*BpK3Q@~^n< za&N<4+YAJ6F$}0p8Rkj^SU(ivEV<4}PpS&TRQ`~@g(gFC-fxK^Fr+N>W57fLM=Tf^ zW=Q0i6HV!9K+iNjx&ro zUYt*z2EQ%ub0vMxj+AumC84UWdpi_Ctrc20fs+h_8$#(5dOMRZ)Z@&?#&sF0*%VIU zT?3~XhI?-;oWWUQAIkg0h?v%f@E*<^IM-92#&)Pg+d>W($jXlt!?FE0q;IbV(o+pZ z1#Hg_VvGWq=o#fwsbr#nqJeRSqj3PeZWi9h1cTAhNUlfV`F-?Q8w4%AjoCu8p9Du^ zC2LZh$`+<@iJ?Dqh3F84{PjZ9z-5Mu2P>x`c;IYmFUyZCB~-Pxc)M18;X;|Z!eBky-F^P` zcYl5R!{0xCZ(oSepOQpjIOgUJ$n!?W$JiupKN#j@0HvukaI6#b&Fmh z|08iY%e>QVF|*-Efg={BZo<=VsM4gSOMDhQ$Mr+f&$3XPe#^p5P16wfgcB+9w`!gz zf_ayRp$L&BVI@dnES=V00b2FZ&%hv^57BCx_WHyeFaAu^V^|Mjn-Q7^$Obr%G|g7L zHt`lRv?I}DxQp-yk}*Q%2}bM1r?85@;2nl(1+{N_xLzoXS zlbK6AMr8-7dhrpeJ9|$b#Q0OVOyx~Nzdnf+&11C7)2juX#5m5Ph;!6hQiMKBrZkPEJs6{z2Nnsq`KZWCoqn cbk!idWxDUf3U1JUk~(Y^w`ipsR%eICf8Gz8JOBUy literal 0 HcmV?d00001 diff --git a/bin/cust/com/rac/workflow/QueryTaskProcessCommand.class b/bin/cust/com/rac/workflow/QueryTaskProcessCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..ee99832de101eaba9dc52c472680a3a0614a8a29 GIT binary patch literal 1233 zcmb7DYflqF6g^W4TbAWvktzzxQ`#b|K*2{5(==k5Gz0@Q;gcDb0ay0X?92-IuQUoq z5`Ta{%6O-3Kof}RZnAUd?mhS3Irq%3-#>l=Si&m<35Gc*mdbWQ-;TIrABWM=ffpXz zZ(|XiZgY9G8HJ9JvK;z85B3ct8FD&W3GO>0P$FsoxqD!j_N1aDs#IBTg){WG4#L5d7rt8U<`HHJdAZFH{2V7@+aL|xaH26`B#uW8{(M1k<^?eb+T zL$Vz13lkmavtXc~p(C5Cb%WuSg-&#tWDQ!lt^XL}L^!b$4E=aDB} z4IS>)c;xDR%b8T~UCCfq+ajOH$nX}&#P?s!cH=%q4U8}heBd9s?eXBy-a3^^_!b`E zAvGVyieaeQ`0a-FX5T3QNUB()-#4h z5@S0ThbYkS7Z!?IF`ZKJhz4SAg>mGFbyrJe~SfD#5n1%gYGe- zm*hxRf-Itp)^6G*X=lPBYlA!qTKn?n=*`c5!vGoS&ke*7ebW>R5>OH&gd9aLDJDan zOcRAWxJx_2W0>kN@{;K3`)`$Z)D5Gk=`XmK9y`Ot1+u&OuNXK-{tS=5Wdgn z`~klBkJN9LT1kYYJnWn^v)}p7nK|Fgk6&NE1DMC6g(iV%ry54K zWWTK{eX=dXgE!iDR2aUJm0eG13rT^zuS>RaJU0jxBefaIWdcHbxfn*|iR$ncfuXD6 z>ouG}%L}*SMoR*TTz*F&x#I7t6cV_ZhJ{vv_JUhco7Hkr>1|o`lt5>}ccix?wQJ_J z#bors4F&ANwRW{AV5wu}R3q{(anAOh@j9yx4={*bbmuqxP!YEdIUyHPa-AD4l^kow@12r+6nCC^|g1A>$%ZM8u!pE zkSVEXrK&ZN%R%6|jx^~7=5zVNU+0?|TY;xNjOYD6o*bcEJ=l^FxbmoFS z>)YjeTYNMdGKjB@g~tN9MpSA6e&xmNk^FPbmm>~cF literal 0 HcmV?d00001 diff --git a/bin/cust/com/rac/workflow/SearchResultDialog$1.class b/bin/cust/com/rac/workflow/SearchResultDialog$1.class new file mode 100644 index 0000000000000000000000000000000000000000..9df1601fec43d4ab82bcf67778c94c10a5301939 GIT binary patch literal 1087 zcma)4U2hUW6g@*}QP>tlZL8L5D_Wq)+L-u)(FgFONR6>d;^TCgmepm(%*=}Vt2EIx z(ZnC%AM(M(cxNHD(W>mj%)PVc+>dkb*B_t00Jx5N1}TPW5F6_UYT#=g_(P>%>_%$n zZws!2{$pX{$hJZrslC!h25E-kbN-6I_RTPqdw%-~--!f6!3a&DuFxh_^66%afwdWC zn@SqXrS0-47Soi~eT-qo_Cr&;M%g=)rf(4IW++2@i{U|ea$4tbz1EfMCq-|mo`@Qi zETB4<{K`%KxY5JE0U0OB$6_6O5B%yTU$Fysip*C^l zr44F1SK?C1Hv<(LQfv9&)i5juT5u~`Vwcn0lFau7?+MMYTCN+{CimD%OFx8@k;%llY;M}7(i(Y`0qyb*33Z3>qY)D^7Jokkf|TqP?@C>M{upCfl5Y5)KL literal 0 HcmV?d00001 diff --git a/bin/cust/com/rac/workflow/SearchResultDialog$SearchResults.class b/bin/cust/com/rac/workflow/SearchResultDialog$SearchResults.class new file mode 100644 index 0000000000000000000000000000000000000000..3e1db6141b284a50932b1f30b710226f57c046aa GIT binary patch literal 4214 zcmb7`%~u>n5WuS!c7bIA%K{-7H9;Wkhs!4B!$cB{S&X6^LINRCW5_TxurND=GqWb@ z$y+>m(~~zndGRaHrw5;2z4)ysZ~7;A^ZBgm+1Z(Gd)~vtboF#s)%>cuyL!I;=gY4E z;5fX}1qlYHjE3u#4ZB`;bfbL7c6K&Q`%Za@>yEK?mAehoo2%)jy*Uvba=W0DL1tTj zRWF;mwOPKrw#^NXL9%A8^ScbP)o^afb86P+41*p|cXw7Tz0Mi*i@xD--Q#ok1S1nY{GT0~H_+4%^Jlkn`v&q)??7g;&{Z7(jP^?l=9@pyzw><8M_;$Es zakIQ!so3>h+ro)uR7Nyy*Rc)mx=p%l@EQed4MrLJ0?hz36AXl;L&1=#yWS;xonLb~ z2GAPzczxHz94v^;q`a+~J8_gjp}N<#!2nWcF>&53gHmqqX89FNR|SE3fWbo=jKG03 zbig4EM&U4nj$D4F8y;Z*G(Vw15>nJVqCuD6%W2T<_X-*+iP=XrNc+8M4SN0FQ4KV| z_m~FzAcd=4tyz4bQD5WEvc6{Gx@D`jp_?nZQ=|9hU?(Mm!RbB6)V@t=WjDE4>OyffDd505xH-32DKc3y_rP*!e$3K^?MEI}SAbV{GAxKu+V4xX29oaxLI@lLz z21lkZ&=BmZ1iNfyg)g$jM6AV34c^BHs)0G8nN4@<29RgCVjRjMxP8 z?HevyYRIyt!G5xgZn&rpgY=T!a14I2MrU*+dI|XV!Za0nJZAHj#hnUnXqV&dU^B?= zwR&M`kGgf?FoJd99W?+6DmmCoP{9!r%Z-p&Y=p#8BP13YA+gK|iA6?8JaR(fx(kVG zDI~6pkeF*BF@Hkh@e>lW0+7j2NyPUtd`95`_f|sU1*&mQ(e+m!#=^az!f1Y}jX!`IBoNfAwf}E2<{!)TGsf^;hZ2Y&<_<}l$ z^I?)j6p0QhNYc^Tvaf>dHasC*H~B_&8v2ANlaET}<>GRPu=T!{gp`bi*{ zl^`V<AWKS+Wf{a( zf~=@PmSvFF5#)^+5W2DmbJO(3gEklQlIdrFWsHOOrl4v?g zJKWH7wzIlu**SeyaK~7FEZnT+jhWoCms-qdG7~-k37Ee;tpqVkfA%>3V*~4P<48^1N zf(U`3T!Vt3iU2A#giys0h)P0b%FKwF>{?nlb3APchH%O@xHZomQ@-cHV%auB|Cy_w zQjG3U$$cpv31`uE*2Drsb2Rl=wZ^4#$=JM#i>Om@iJ|V_JPq||U#2>1PMnp7RMhk;NS?0v1cRI(c=TJm4h*k#e@YU<1 zm)nQC&yL<~t7t=1!L<{1IA&{zAx@(cPqW-2?at?KTi8_WiHZa|6?8B}&*}#aI#h-r zHw@vDmxAbKC_8xf`QZ8f_@*H&nX^YjZy~EYh?@-R_pPl6eTXSZw>0!iD<})5yKcKA zU5W2nhKB!5hHRDLYra+dx%fBAOGHka^|-M*&DZnRQIE$mVM=q={<&M7G6%^znW4=Z zwYcjFQmf+R#vwu;4$xBqR#hdfOlw?3PY5cZWpwJLcZsO+_FZW4kEnR>bI#FsDRIEY z5T>&x&lFXS8v3QV;6gsbTZ#`5HqyR_+OKHbL-TYZd}R+;U!Xkx0oo_D@1QLa?ka?? z@1QynzTrcvWbL6(Rt`W`Zjqg`36!yWsA2a}&nC$&Q|M$5Fu+n6W;1?Qk>kqwuBZnL nAnEtjhe6z?&W0!(?e7mXDQF8<5^{%-BHYEW{|_T}g5vNCgo;5! literal 0 HcmV?d00001 diff --git a/bin/cust/com/rac/workflow/SearchResultDialog.class b/bin/cust/com/rac/workflow/SearchResultDialog.class new file mode 100644 index 0000000000000000000000000000000000000000..86c209ddc3a3a99072862267d0fae448c2672e3e GIT binary patch literal 19898 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�hnY&`A`GA8yo-m*r)pH|X`|fqr5O^$-O!+TswCAMT-_*`uFJ z5cdU`JN@k~l$ohPe#efu7SKb5h#<;9zG~#+QK(Qq6w$tg`xSIAt=2EP%m^dyAY_VO zeu8Xdpndo$SjunX#ffc{%iHmrIXmHZb^+2WG@D;V9WVw}+e0_;URcn5h)f!h!yf?T zgUI1uL*D*9LOEG%e|(FCqBgBxZ^^x+m`=RGPz3o9hI}{Wknf#3 rWzAR+b{9K++VNfL%<05-t{KVc1NPA)DQ>J4*tT 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 literal 0 HcmV?d00001 diff --git a/bin/cust/com/rac/workflow/SubmitAttachmentInWorkflowCommand$1.class b/bin/cust/com/rac/workflow/SubmitAttachmentInWorkflowCommand$1.class new file mode 100644 index 0000000000000000000000000000000000000000..5e462857729d18dba011c81d96ad1a2fa86ba4ac GIT binary patch literal 1190 zcmbtTZEF)j5Pr5vd+m9)vDWu@O=FsB&rm@mMToJ5K=eyurRbNIt%nDLRr=>Q()8FFQpu+UOkz8J<`nRIwJk_?M2 zBY3pU6XpC-Fz*hH5@N`JjgYwjA67&o#swdw|F|>pfG_{sVBjRZ)Q|c>eitaKi6r8xpnxfakEXC)@dPu&D_?6X9v>YM$ znB^?cIzu_YQxs?oGTX-)ERx4?7V{&7&M2?+6-$*v_=h+@{S8-la?bgT>+PNVZ|ipZ o2+POle#ZL@%h)`@P#Q7hP$r%!te`^QJdJ7<_sQ~!)m25$FYg0Q8~^|S literal 0 HcmV?d00001 diff --git a/bin/cust/com/rac/workflow/SubmitAttachmentInWorkflowCommand.class b/bin/cust/com/rac/workflow/SubmitAttachmentInWorkflowCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..f0bc3a67ad7e418c59d22cf5ded276d3517b1d96 GIT binary patch literal 3016 zcmbtWTXPge6#hCFX0r^p!~j9X5Flg|!V$_aVG|+=;ikguq?1h8-C1U5N$?5? zWdT}hS*0b#gH)+Vm6UQ@&>$r*TIKIZ0zUb!7W(z>5^`Bd70$zSPj{cw=X~F}%x@2W zybGWfr#0jVtT7XD*KgVpzhjvGKHE9m6}J2QZHZ9Ca_e2!Fnc00>IR~FGFy#yBw|E6 zHRK8Sl$?rM`q&H?boTbI4Y_Ou1yGdYWMK%TF>>q1{ zuY=0A^_w!L+=y$KF0eR@CnHvjoE6Axv^%92xtOKHi$a0i3SUP71fJ2M!J}rgbrhs$ zb9LlnikEBibUdq0YqDRO30Dft2wG9ul8A()({6;qTqz9NrV;Ki97}y?7W3R5D=x4u z_>>G2x7kL9NP;qoJ}=6!NW(&bRNy>00LB2QV=>BUFFAb7WQrw5VukO&_{hK+P(jvZ zm@*w#8G1ETFrJ=7!bm8z#$}?@ZnDFj((#~Dpz*qWoc2op=jiZJ?Y(%^L zZLVWQyXz*d1hQf@PH~-vm6OEf2qa!sg4H_KU@ZfyuSYs^m+ay@YRXQ5)fK)2laMl+ zi$&e;!l9|Jz~#;de$8? z;i%+4*lUNBvyD2oVjI_aL91iOq~jhFD9?hvZzB8!co6{&FA2;XMb@!6FV(RfJDAjV zf@Bt_MJ?OkN+Mm-$s$Qwng!;J5=^n&kg(G6xRWK0b#uENYB3_RbYrO(LAP-8H4$L9dK^)zPfVbcG1tZ>f4JF*rTT`3 zw*+dl6t7WPo7H*^M;SndX|ld8S}qX!ALwR7Z(^#myga(EhK{z`3CEO8mTHLQlm5Rf zQ%JDP1fo&tG=`0MT*k40{Wh0BN4Xr?emTogtvNNaF>}o0ju%t8u4lfcVFqW1xRS$h zZsje^tQ0p=$A>%29+Rn1c#D&;8kHJ(!Od z_(hEFp)VI+Z7?e}T6+ulnxAe=bm6(XXTJ7(nknA`wo)R$%0& z!013R=T(GuDPgRpv&&Gzwm2Uv2u&?~SjpD33iVjcGPQ=aWG(uz4)3tRoaFvT*o4op z8DC%vE}{XK(S&aiNCCMi4NL||559tfIDwpx58?909Nusi2^^&@<;>^@9(Q@3sO9f+Au_8UjjE@Bzg5I9&!<*zRt&Q@~%utGllOcPZRwTtw>%YDNDAbFXvbEL=Y|zUj>!DVWdbU8p;Xai)OC21 zz`(`ul^RZ<>4odNdO;wO&20)K7lSR8LIO9_u+S{fT6BH2RxOuQv>{8L5@;_5j`TKV z9!3Cv`# z96PsZ2>R0)Fx^krda@d9NiT&Vj93^J7(OSXeHHo2vo{v&wNGO-R!|tZzFw!a_ctg} zsw-z`@&X-yTUXyi3Cd_^QXqeM4N$x?3O&+n6M8hTaq&)9a1BX?io< d-G#(29wA{tSa@P#*4Uw!7IG%3IU*YH{5Q44tV{p^ literal 0 HcmV?d00001 diff --git a/bin/cust/com/ysr/Activator.class b/bin/cust/com/ysr/Activator.class new file mode 100644 index 0000000000000000000000000000000000000000..0afdcccf9dd72ae8d9f01742094f4960e12ae524 GIT binary patch literal 854 zcmaiyT~8B16o%i^Pr5EeKq|C;QGt|dIu~AIND#y{X$T3@TQgmTb#%Mi%+4bID?cts zyzmG3qYP)Z1QH{XO>wMGW^xPO=j2(`n(@tgj^yZ#9M z`#EZ#Bkq*feRhGB?sv3qc=cSAlhi~Ft(@7IW?wN~&4+lzG;$5OolXpP6`uS_Z?l%C nOkevay@obtP0g?I=$_Iyw7&3IV8_Ut20YIx&JQus?X6z|DYK&W literal 0 HcmV?d00001 diff --git a/bin/cust/com/ysr/test.class b/bin/cust/com/ysr/test.class new file mode 100644 index 0000000000000000000000000000000000000000..e1429b1875fed13052a2833045f69b8671c2b87e GIT binary patch literal 1288 zcmZuw+foxj5IvJ@m`#idD?#H06}*INLQs$d@Qy~qMT4oL(6W}W;A*l-Z8nxv<F(2~&-DEK{dF6_IEoShfv!@c?j=jrN^-02COxa} zNoWF{ug$k+vTQn=$;GwTR>>3Sn6@3;n-vHq28sgO-Rim(K@j06Lg)}Up0^!qp;1}0 z++}mEYzY|oYRN1YP1jcE_NC^%vg-mT@&^iM30g62N1!LMn*UFr;JLQ5nH?zV=pwV# zCAX>=qv9=y!pJTTDlg+bxa6^ z>b0^>HLe~;eRsvS>Jm2uPVRq~^(PrOR}g6{wG?Wn3-P_GrN~OK;}Qnm^eRIe|!_+HgzOoUO(`tbWs| zD#TYK27et8;EvygtK=z3D`-Q5U!Z^T-4U+J4JI7n8r=z?J<3xU$8elCOcvwNprW^o z&irQ>L&m8VPPcF&^c}&KpmC+Jq8W+8{O}J9F3>*`Ot&y>Br{rEGsapN&xCmU4U;Rz z)E8vqq3srCTe#E0Ts*Xr32#s6!3p^hv3NKp)0qwi$2;hJFGWno^bdc2DZ)XYLYnkI zQbFjX7v?{Spr7=INjgQ!Q@nkGPHdnH4(&VsS=HP_Uxh8&oR9SukMNl7^LL_D3ik15zw=Jz4+2QLwkC`g1gi@yGctf@ Fe*r~=6odc( literal 0 HcmV?d00001 diff --git a/bin/ysr/com/teamcenter/BPMTest.class b/bin/ysr/com/teamcenter/BPMTest.class new file mode 100644 index 0000000000000000000000000000000000000000..3022352e37cc4768ed697d2fb9ca45efa28922d4 GIT binary patch literal 7265 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 literal 0 HcmV?d00001 diff --git a/bin/ysr/com/teamcenter/ObjectFactory.class b/bin/ysr/com/teamcenter/ObjectFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..ffded2dd4fdc8f8c6fc2fcd090a611b91713ff5d GIT binary patch literal 8808 zcmcIqTXYlG72TJY%~UN!2?-boU;};-EU+n|*d;MGCLzWc8yp}>-LX6|L#2@;ja|C| zni5i)l;+juou)~fXPXCkv`#|O*Ju0N-~RTuUtOzTT|M_|Jd*C*BZ)3`c`aX^nX}K{ z=iH~R{g?lI{(AtO_){Gg32dCpWfRFvI^jEZI_Y@6lT92MKjS3*emm)BvU7D8#g8`n1GQFMZksRv80Ir(0rJE}hy1u9HqBV@W#fh{2K$9aO!D z!$Rq$bX-Y~Ju$?j$KF7+KDwk&cMM;ZKGb>ZB%SV4%y@eYUz5K3 zspq1M#h!gJtdO4l0!=b%h4ChZ+!4b{2{{x9(JNdWejtYHuuNdZfa^Jf)9G=V#rAm0 zp-K#7l6Gp;&brc84=pUlkQ^x2)5!EsyE$5I1}d#nw4O93vkomHQa-0eptGgb6ssJl zs}3|r5(Wk3P!^73NT9VKszOZ#_VU^)U`gUV0=pTB6~GowNu>=1rTUl>*v3oKok`2L z1)3Qxy0?WfNnX@xJ%2Dt^ST7rM8FOOkw3p(xDiCeXo`gu#%Mp9rYqjCLk2 zvnN`(EENs5aQg~J)>?Er9(TQo#G#%O`wyg?G#$ffJ6k^DPI|UKouvirp_&HozE-9C zNY0w!Y0r1l&ZwJnX{YY-yx>$!+jE zLuE4U_NvkjAp!?jy`?A8O5N+#A`Y9drbTAj%w?+imRp+iZvmB(#vio~WFi6Rqa zm!^ofz!A0=bmwpgRM?X))HY((sfYSx33hUQ&1NNVm=#_+KtiGlg*ac!cx)LMZL$an zt_Tc9V3d{2989aN#gqS+z-&<}sg>2)!&RpexZI@Cj|$b+ho3b6Q$)5fY_zhIhD8Zj zBbn)J(&=~A1zpLX1KQ;=T`s%YalQ1wKkQ7pIX^qsg-vu(xS0Ol5JQ8!yroYK@?KW8 zboZ)Sx?WW+-J+_NE=g5OSD~t<>rU0uRi0yFSyXL3;<%ppZXoMlSVF&n zcdla9$@oq2HS<{eF*XF&CS^4R))r+o2Ue@HwguL9WhDY@r?NT&>+8z8HL$*+tggWN zrm}7etR7|c2G#*(9Sp2Hm37yLBz6%F)9(%{7O<9XZr9PzdbHtY?7;@~VG+fp{~*pr@#hHteI4%`@ekn#QTzqMU)1qujrd3K!zlg|;UCrU7mfJG@Z%`{ zGT|TB@s}C=6SQJIsmA(Kc$(Uk6z``r@_&}YYCMyp6-=%$y|n7cnY7|6o;~>yHpDNB zZS#0uCwWGZ+?aO_CJBM?5?-dTbhCq>hjgzP=^9ORP4Npxx>s1bUnsgq@M=i+nvrg+ ziLN<*$w>DWOZQ7f_aJ^1(!Fk^YctVpi=Q*nU190oP;@hRGo*XVNY`$nOT=f5bf2+w zZ!5Y7@J>kgYa?BUiLNuAGt&K;rTdMdOX1y+?mZ*jZWGGqoFy5eI-y1%h>A1bFx_`2CpDVf%Tn*{IFwz||(cKk4ZlwD+OZO$wErR@y Pl12D~B9do=KLY;+8#J8- literal 0 HcmV?d00001 diff --git a/bin/ysr/com/teamcenter/SendAccepComToBPM.class b/bin/ysr/com/teamcenter/SendAccepComToBPM.class new file mode 100644 index 0000000000000000000000000000000000000000..174d166241727f2f573b09dc0231d130ace99b7c GIT binary patch literal 811 zcma)4+fGwK6kXHyw6s)#0#&?liNq9$4hc_QLQ+u@lPZQb4T(?F(@7n2&P+3BO5m>` zftdK<2l!FOJ*NkW)~GMDFSGVuYwwwF-@kkXu!FS{at!NdiRGb*xsxIerFPQtw$%M* z7|P+Ei96=ihj%3u7-o;fiQtjY1AfpumZ4)P2s_wjsI_jc+RiFHc)?J7skCyt4Ee@J zm!Ny5FDuAnx{4B}7-m{Z%lD(WCv8XcBI(bw37T9(7aNmEFFH68(TJ2)+Gb=!xv#v;`owyk`tcc-4oBLlSawyS zXn>~H#tEm4CjDC}!6`qDBi>WG&&AJMeiTQ3+eu<<=WHlxh_Ud0pfhZ+|MpGmHN&I7 zGi2z37BS5*H!%Z4d1%e>!1krZ8f__0pM;*xuZp}p`SfgbmMP+78QEa-Gb$J4|==`<#61DT+il6+kcma!9@h(y2Jk{pb6>2xsl{EW|)ILu; q)W@id-b<^e@^ZM7GTy}!*=0iAqt11S`*?td6fP%N!Rkk_1i=r=LbIL# literal 0 HcmV?d00001 diff --git a/bin/ysr/com/teamcenter/SendAccepComToBPMResponse.class b/bin/ysr/com/teamcenter/SendAccepComToBPMResponse.class new file mode 100644 index 0000000000000000000000000000000000000000..d2bdd6db7a0d67ad78041a0e38f1ca2672a016f8 GIT binary patch literal 917 zcmb7C-)j>=5dJnlO&V>jZ8TM*wIFFL-3K3A3bnQ%L@P-Mf)BE}3~|fdUfA1|_P

z5r$#<5ALjDo<@sX9|KRAwYk2B#D_f$}>`ZeoqVa(fo-I;+iSSD?|E z7^frZ>qHMiIxr@7%4yCh@Hi!$%kwCd18s&<{f^2vQFs(m#G*J!!KjD?O1~~r`q9#R!~EY`4qn!sXP8+tW~24s7Rt9os5pu)bg+Mlz_f_tx7#!mZx=D>0) zBXXUr>6O;z<+dvjxLrdLB?c!m@M`Na);CZ*Q{jYFR=e@U26U{wczj}qWU`{LFY-1x{pIV`dDOmMcFY(10#SjH{(0xMW$`#1R$ z>K{1xCt3cJd6MZkTfWX$tuP+jR{ZF?W7LbooQyL1pXBy z8WSJ<0sbiCo$Vsg8uexF$DDi5xp(H<_b*=oJi&Se1%`*`spXMLxRWA@q;}Hsj?{y8 z6v@$nNxJ53__~4;!>to>DtIjPkRSC=WaJo1!VVuZG{Wnvj!(6Ded^1k^(so5ZmcEUNMBEcr`8ZFO+y|91JPQ9uC(%}h(zP>H zi>=LRT~#nF)DfUe(DVwr)S5Qr`EIU$7fi1H`Y!ivZqo- z1GKd^PB>*W>EF%>&iGjp^S;spE`Hwf_et!xou!cwuU>{P7&iXS zkfTdlBs9bP)C>&Oku{?uJCGLZw51|_5_&ejD)Nft)3ec8rHGSdWP`2Gs9lm%K%LHV zmR!RP^6L`-Zeori`aPJZ^Vi~!Xk7eOyz|H6MJ(mT`$SdnR9oAh(72|qW!a~s_F2}U qIYH(0URpDgSHN<{cpEEZR|$28IyWWm;vVi(xSHYt){ena1U~>A&9lY; literal 0 HcmV?d00001 diff --git a/bin/ysr/com/teamcenter/SendAccepComToPLMResponse.class b/bin/ysr/com/teamcenter/SendAccepComToPLMResponse.class new file mode 100644 index 0000000000000000000000000000000000000000..6bd6d5efc4daa574159814b2f8573b2773faa9ba GIT binary patch literal 917 zcmb7C-)j>=5dJnlO&V>jZ8TM*wIFFL-3K3A3Z=FnL@P-M1s`N{8RC|^y|A|_?SG}9 z2tN1+_(zGem(wUU1s`tacIW$MzM0wYKfZng@EjXu3{|H?c-wxjl<^oz-TvE70gn zjMEYIb)p9$9T*ck_en;hL6dr{Xu_#VbFe)N}(yvOTJ#Dnx z7s$6Z`y4)uhg3x#i#05uCa~DnhF(vi0ok77s$N?hsIafB_UG)f;NEMNvD5yaIk23{ zh+HRYdZo2_we1Q7?$%I5iNVPXyxO{o^$iryRXAal)owho0Uc{ExjA44w7s&P|ha`K!zPR-Tw?6Vu4ohr36P)cfTMuObmT`x@zzSB`{!RXb z`UejFNtXX4-$NrK?=w2boYL0zXVhnm{%!-*brRXcC1X-WnLsLRqNPIO%1y1}DRC;tt=6{! z353K255Pkqj?=)Piv~Bg&+&JBe&0#H|M>b1z#}{;!eOXSW9|7-=o!I7UnnEA*AZ&a z5`mluJ#BF#y3uj_Wf3mJ;t8K{FW_qE9raIyZx~#zhr0|*?X#J+7sV)1+(O%b20j{$FGw zC=P{bCV(sT?emBwFsxLNM}egAFKM-YUTMMe6CR9-E`4;*R3xs`rlcw zq{@I?J8OKUv3s@k3IuM~P(+Er$qc;OxQg{n6vrwYvC?WM9@&6SwU@m;cO{Sfyao2> zkMTGNC`n>_J{b}VpGy7b(5L7OTReS!(rOCq%&(B4H|C1vDGY5qJhOeW*y7>j`8D$H z{Djz-`Lw|P8h@1pew)HClkIg5N%n$$aqly3eBhrPme_hGINMFO9?AeL;}&~?6|A!T zll&3&_Z z2tN1&{88fB&1%sG^<~awzH`3soSARmzkCJo09!Sb1n!)qPDVD7o>UT%@#N%y%;dmL z$n9INBO2OQ;maB-0+$Zek&>}8Q+Y5xq{s_Yl$+icXoaU&1Mjq%J{G7x(MJ1SfpWJu zV(3#lp$5u0-$V`P1XeZ(^8H*` zyW2Y}tqy@JO$4YiH2n!(?Vd$ux`QJX&skh!VCOEPJ)J3CTehTo*%J8f_1t)!&`776 z$LJelz4F=`o?<8GIF`prEXUeRr22I$-z0HAiYQI38=lOF=U8a}2fDxpdoP}c&jfD& zouNQij7oTn_OdYq>N96&`4_+z@2bonhTkt+7<*;*`Th8;b0pacw!!viG(NCXLX*#G zp4`L*_L~a;E@Fiv{zkaW=kLWI(R%+!@!h4xZLAi>yG&KesJ3@Lp>;~#$g>Yw?W4Ry qXMrl{GijY%UI|xo#%ow(yUwWV+_^)zft$F+;d+VGQ(3l zBzuxL9a1lO6};?FI!;VVRg?sl&eXY*kuoEBIyj@y2~^)&auaI=mV;Te>#R1TJ%P2( z#5f&OU#EHy(V;PkQ%-Y6fkzqPLSDp?9B4C?>Q_|0j-#W9V%Eh;N=C&bQ2AM@vagMH z2Li?RcAvw~k|EVm#9{*rXb3C@+R(`)9+2%RuIjZVp^Ey-YJbizOYWU!8Bc=$90ehWTtyQWTJI(k8`81%s$26G^4L#XV0Zoy z55thsG_k$QF|qEc(tnP8iq5g+;}=K4bAhe-6>{{(Jgq!~u}#L=+d_*+Q{&IV9N&_T`<=xbcC13Rq(6nc!?U*?K4gu#8*m1y-=i_D}Lh zG~aXZce4B|`3}}{@&Tg@%&F|`enN9rx}M$cal!p8LvxDC%X?|-nY;q-W)(NG7B?An Wk29|mHgO*h_{iP1@bC>pit-Oi;N2zw literal 0 HcmV?d00001 diff --git a/bin/ysr/com/teamcenter/SendPStartNotificationToPLM.class b/bin/ysr/com/teamcenter/SendPStartNotificationToPLM.class new file mode 100644 index 0000000000000000000000000000000000000000..8a4f51eefdb726fe75ec299a8bd92861498d0a98 GIT binary patch literal 851 zcmb7CT~8B16g|^+TUx3>g({+0!b^e3knn^Ul13#lS%KK5A@OOt9mhNC-7XTv)c7*@W6r(j+&gpgfI3O(S5y)zj&hJvtzEryzZchz=Q>A@~T@wL** z?J?w=Yh8lAF@0G<9@ABnFvT$AD=iO3QBT^A=!G(AV*(L&g;hzMB@6CU#SB~i|0yN` zrGa#yOp-9m97P`>9k4)ry=OP@D#!B0aY#{elBDgVOWt+)L7#2T{ zv{RAns#wubEv=19_ewKuq*NFDA_{p=={^^~ZuxN(wt_&$v9X=Yp`>xfBm4uMVZHtL z@BFt6tCJZrbU}-VrdgUW4MTZo&G69nrNs(uE>E9{9yM7Xd3o~bQRysG#K|(U-uhQm zK9iF}mCj-LRPM=BIf8Qn97?bjWdjEzoY1to^L6LBhdB=m?M3{GU|7%K0qbg9)0^X+N0 z>#WkFO@^gTs-22uUnOb~$sMhY%aSJyk2AsLN4t@XNggFBX%S0? z^3O`;Ev1#)W+=AS`V@X)hO&ktX6u+ionf}EwA@eQfwVnARlPP7il{HF^5^`rstvTGymDlzYmHZ(U(M zPyFl|HZC9OP8iB0F}8O;mLz{7_@4`ypmS`n_iDHOlA(Edg&f_yf@GS=*qZTy9ZHK; z8dQ;9DQ(kFi+qJnGvu$)S54se%lvxDUZ)Tz&&UVspK;>@{S+`q)-yrbZj$v-0$?7u z$TKWpk?f!3k7&H7;O}JqSMnV!<>YNb7l>0{-}r>av~(@I-K2tBS%$_0m6!L@mNR(; g+|4T9%UWC^)P2glEU|(Ict}U;b`_7_f+Yxk0Dvm!-T(jq literal 0 HcmV?d00001 diff --git a/bin/ysr/com/teamcenter/SendQuotationToPLM.class b/bin/ysr/com/teamcenter/SendQuotationToPLM.class new file mode 100644 index 0000000000000000000000000000000000000000..163252bf2d93ee3e00c7ac3087393230b65296ef GIT binary patch literal 815 zcma)4U279T6g`t<6BDD=*rwKx+9G1wq9gd^2Zf*(gw?7ELGWp^8RC@PnJ_b3+JB{> z2tN1&{88ea&1%tz`ZD)p&b{Z{JM;D1=Pv;6VzYq?!;NESd15l|rN|Pgy|jEF_2gx4 zyzt8Cp?MKMYoNw(?m!$0o(etX`{M(dc!rv=(>n~E_~dHft`Od7h1>9g1-(LmQKbbR?__aha_7x5_cxjQ>k0@iwN?_X}Ce zy{$!IO)y+&BSM{^?gw#fA^UchD|MB%3fM?jKqQLOv(i$EnF?UkLq0~+q-j#az zHcgyxD$%{}5RllV;etet-vI zD6LIQ?{X|j^+e~)aZk`WwtV#RFnGbRaeajx-Lf;E4fQ`Z$@tg|rNKIlrARN3R_13z zzDlP#@;B(KS@xb=~K3RocPnV@X9$$BUOu!uY48J4h2_HXhh zG(S-APcr`}`5sns@;;#p#HnoWd`5Fxx}M$cQo+3}Lvw=4%X?|9OkM%^vx*P07FP-N WkTSOMfoRz^V-$` literal 0 HcmV?d00001 diff --git a/bin/ysr/com/teamcenter/SendTravelOrderToPLM.class b/bin/ysr/com/teamcenter/SendTravelOrderToPLM.class new file mode 100644 index 0000000000000000000000000000000000000000..ea9b6d4ff74a16a21d65334116976320e597b753 GIT binary patch literal 823 zcma)4U279T6g`t<6BE-`V;b#;{lEv479GJStrUW_P}sI&LMZq&*$i>Y?o61Sg!W%4 zD1s0E0Dn~R?q;>rhT508A9LF+C&tvJx`WEcOS;usYv!z ztZ0n3*2W2^jHW5JQ;su!7KOa8^ni=MxBMgu+d&}X*x2s*NYWfr?f*e%Sa1K}oxjKM zU{TSJLb&Qu{jX q(3qk!`b1hIm6yZAl<^Uk$gUA;nL0NlR@36$Sja${=*R$8-Y$60NL2LkKu zv2i-0o=$W>q+?@Zr<~@D0y`<;QeH-(>}xZS>Q_{rN8w3G5$ob41*0MoDE+KdI@CtH zBY}K#x5wdU@qntxW3h$>)C3k=+R&?U)aM=)SM}QBK!rVJwLfQ<1@}&~j3=%C90ef&qQWr?t#;zE4d_&R)s1-zdF-bxus?r@ z$3Z|z65H<8h*5G%rbAj#o6*BbZJgq!~k&Q>`t3rcEljoPni}Ukg zU*^*S`y2dK68KdLze%hC%DJ6Zmfd>88(`H0au=9KpKKcPM=T}^KfxZq)$p*}@r<-N3xR9+7E(u$jDi(8Dk W&zUy}TX=wneB^E$c=QG$LGcH+;N4aL literal 0 HcmV?d00001 diff --git a/bin/ysr/com/teamcenter/YSRServerDelegate.class b/bin/ysr/com/teamcenter/YSRServerDelegate.class new file mode 100644 index 0000000000000000000000000000000000000000..bee18a953d0b47bec0cb3d99889417545806ebb5 GIT binary patch literal 3325 zcmb_e+fvj(5bZ%O0wOE|%3bcDumKT75Ow8lag(J)%cmiX5GtFjnOTHi^T7}Bqbz%} zx$N#FTcq$|Ym-j*In$@Rru)y|U%vrh9zHfe4S~@c?r6H5(*&bAomql8+Slw+mN{3< zS!X6Yr-C&=ErGU6dPOypTIbrq=_S(zfp*TUvrh$EP+{2Cv3I(4^LgfAP@`$<)RZv>FKZ<-q*0Z$R0kb( zlX6~k97B`)DHJT7jgVoWlAPyli?fiuM->m#ah(Xv+=?ai_x18p&FHcqm|~q_}oBycC}dhSpvQC z+=p501hH=mC%;|r<&u`Q$1bvD$Su5aq7iKBvwy_@>(#ldMc8yUZ?CmoK^-7t($e6Se|@K z5wpm>N{Vx=+H~raZ5IJK8PjhOuKke^q4=}6g$hFwYo;74Xx^Qq%^Lyb>o0HMIRYtJ zhK#PW{Fiz$Z)^B`AO9QidlQFdcz|v#9Ig2F z5L!93L8@qK4@{4s1H(Hxbirc|PoNtCQj(zu&AlA@Tqxw}4|uj+9s&a#1{Jcw0Qsp; zHWZkKeXyyn% zvKR4W^YGFuSBZ=Z3fV${yy%m?3QS8r*=tF*?2--DRMsqfUy+f`Si?6_nXW42s{zwn tpZr~5dhe5GB>9J!Ofknb?4%l4cU!X$pEmG^4YgTB+QQ>)e*>b!&OfQo)Dr*z literal 0 HcmV?d00001 diff --git a/bin/ysr/com/teamcenter/YSRServerService.class b/bin/ysr/com/teamcenter/YSRServerService.class new file mode 100644 index 0000000000000000000000000000000000000000..cf4153c9addf375217507d90335c12f2254812fb GIT binary patch literal 2807 zcmb7FT~`xV6x}yaCxnO^B~|=D{0u>v7F(@gMH*s@B%lOA>H}*CR~*d;Yi3aT=&$K( z)d#xjTDDJp=#Of<&zo2j8=+&AJ_E zr(V^KKzsH|WucD$qc!WjuJE-V$z?@Xb%x?Gtq zt(N8sQ;Re6a|(SWIcPU@U_V?aO(+bsohUvk6z_-8=S*~*W?8RAnTp$0y&1U81`)Dt z2oL6_%0-2fEvFk!UHh9(Rof5dc*|qSTh*G|aD&?lUAf^Uh3-Ogoy8qeII&yYo^weY zA?2q*usLqGXf#U6Mn$?Ljw&49t5^zs=uabyPZbW_ijrQ=g;La<#)e%9Jh!ni(Y`Xg z)B_SqqX#JqCl%7I`XzB%Vf=|()8lqw+rCMXo)a`Zds_R?gXU&i7e`$MaHFet>%D)e{YGrVNsoWj{%J=p9HT}WXF7X;^`!tqv|#iw5LrL$Jk6Ja5j)A$4j zq@>|AEF>+A&@^#LWvBL}>DBc*y%D!q;ZVtK=((->n)Vh2Od(ThR-M|C&&$rHK}eC-7ioNn>k3C!S2uL9OpPRyIE{VH4evsV zdsFDbS5o#(g)33n|2W%3hR)sNAxc5B1y5aH;bLhYFC2+p$USZW{GbVUwG(W4BCyc8 zEp#Ro%KN9Y4`jYAPr@|hJoM26ly6UZDLE~U+f{RHPsm461*4Y^ml-7QFdM=a#qZkv zrWYvW*rWfFbXwQ+h7-sDII*zR2;90}a($O3nrbwff$21B9B5O!*jV3ex{ZJbyQQHt z&j+cKn6xjU#PkKSW$pO zf#Xq7@rN1r988?={K9o{)N%CiZa@Z)xpJoRn&MM0(u_OEr`PB<@ni4Mw~{%W$?V|R zTO3!js`QQ@tIVk#oSFR*2g~m;v~pz!=S%swxHR$>xz|L<;1mXtC&CqCUEwlIA$1alb7Op4?bg50%MFiio{>sN>~`M zq%;e88K&8o{!PLt2KMHE#4O6DMhSX>fl&@^Xn@&XjjB{~O9baU*nvNDCr}3qwcrN4Z}Sz4CA9_lPbH z&3=eZr!01WUo`NcQL=GqSyP6hSp4XchFDJolfS+<$o&qBzrVi0C7~O>RDGs9kJyG4 mo_lO?g@?Qz6hw4i=4}Fxj4J(vTj2&(Ig0On96`ay>AwLqe|$y& literal 0 HcmV?d00001 diff --git a/bin/ysr/com/teamcenter/package-info.class b/bin/ysr/com/teamcenter/package-info.class new file mode 100644 index 0000000000000000000000000000000000000000..5678b94fe3c0e35d2aaaa242bece36d13215a00d GIT binary patch literal 250 zcmYk1y-q_h424h1&!z1`7bIAi7`YzUU}EWngw#qEt8XxEO5#*EX;og0fd}BBs^)g6 zYRUF+j_uF?yWc+mPZ(C{8QlM*mTU}^g@YB%($b3UH_zqK=~t|9Zg9Qi4U=b`(|fZN zn+*ojxNfbCofm`A=|tU`4Q?lE%`V8yCD(X)RgIami<%4`-a5~gw!u^5^pp6g(ns)9 yyO6*y27ToqsVpxy?iM+(p6P_MF4%R4e*+ktm8ZJs;o?v)QI$R{%2mmJ!e9^i+D8Nc literal 0 HcmV?d00001 diff --git a/build.properties b/build.properties new file mode 100644 index 0000000..6377a88 --- /dev/null +++ b/build.properties @@ -0,0 +1,7 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + .,\ + plugin.xml,\ + plugin_zh_CN.properties,\ + plugin.properties diff --git a/jxl.jar b/jxl.jar new file mode 100644 index 0000000000000000000000000000000000000000..b210c064fd64bee1fb1cdab71e20084d4857bf7c GIT binary patch literal 720702 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%0Dlc^^a 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%0Af@tOAnpRCK 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

c);a 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%0Dp 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%0AMo^4yzudy`Rfu#sLmH(cWd=Xw%pey#w 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

AAJ=Fc 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 + + + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugin_zh_CN.properties b/plugin_zh_CN.properties new file mode 100644 index 0000000..9ae2c16 --- /dev/null +++ b/plugin_zh_CN.properties @@ -0,0 +1,18 @@ +custYSR=\u5BA2\u6237\u5316\u83DC\u5355 +batchimport=\u6279\u91CF\u5BFC\u5165 +ImportBatchFileHandler=\u6279\u91CF\u5BFC\u5165\u5230\u6570\u636E\u96C6\u7248\u672C +ImportBatchDirectoryHandler=Windows\u76EE\u5F55\u53CA\u6587\u4EF6\u5BFC\u5165 +batchdownload=\u6279\u91CF\u4E0B\u8F7D +BatchDownLoadFileHandler=\u6587\u4EF6\u6279\u91CF\u4E0B\u8F7D +CreatePorjectFolder=\u521B\u5EFA\u9879\u76EE\u6587\u4EF6\u5939 +ItemRename=\u91CD\u547D\u540D +QueryTaskOpinionHandler=\u67E5\u8BE2\u5BA1\u6279\u610F\u89C1 +QueryTaskProcessHandler=\u67E5\u8BE2\u4EFB\u52A1\u6D41\u7A0B +BOMTransPlan=BOM\u8F6C\u8BA1\u5212 +ProjectPlan=\u9879\u76EE\u8BA1\u5212\u4F20\u9012 +DeliveryApplication=\u53D1\u8D27\u7533\u8BF7\u4F20\u9012 +AccepCom=\u9A8C\u6536\u59D4\u6258\u63A5\u53E3 +QuotationList=\u62A5\u4EF7\u6E05\u5355\u4F20\u9012 +CreateFolderFromTemplate=\u521B\u5EFA\u5E38\u89C4\u6587\u4EF6\u5939\u7ED3\u6784 +ModifyTaskorDeliveryName=\u6279\u91CF\u66F4\u6539\u65F6\u95F4\u8868\u4EFB\u52A1\u6216\u4EA4\u4ED8\u7269 +PurchasingDepartmentSearch=\u91C7\u8D2D\u79D1\u5230\u8D27\u4EFB\u52A1\u67E5\u8BE2 \ No newline at end of file diff --git a/src/cn/com/customization/create/CreateFolderFromTemplateCommand.java b/src/cn/com/customization/create/CreateFolderFromTemplateCommand.java new file mode 100644 index 0000000..edae2a6 --- /dev/null +++ b/src/cn/com/customization/create/CreateFolderFromTemplateCommand.java @@ -0,0 +1,19 @@ +package cn.com.customization.create; + + +import com.teamcenter.rac.aif.AbstractAIFCommand; +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aifrcp.AIFUtility; + +public class CreateFolderFromTemplateCommand extends AbstractAIFCommand { + AbstractAIFUIApplication app; + public CreateFolderFromTemplateCommand( + AbstractAIFUIApplication abstractaifuiapplication, String string) { + super(); + this.app = abstractaifuiapplication; + System.out.println("第2个参数" + "\n传递进来的String=" + string); + new CreateFolderFromTemplateDialog(AIFUtility.getActiveDesktop().getFrame(), app); + + } + +} diff --git a/src/cn/com/customization/create/CreateFolderFromTemplateDialog.java b/src/cn/com/customization/create/CreateFolderFromTemplateDialog.java new file mode 100644 index 0000000..88c23e8 --- /dev/null +++ b/src/cn/com/customization/create/CreateFolderFromTemplateDialog.java @@ -0,0 +1,348 @@ +package cn.com.customization.create; + +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.ListSelectionModel; +import javax.swing.SwingUtilities; + +import org.apache.log4j.Logger; + +import com.teamcenter.rac.aif.AbstractAIFApplication; +import com.teamcenter.rac.aif.AbstractAIFDialog; +import com.teamcenter.rac.aif.kernel.AIFComponentContext; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.kernel.TCAccessControlService; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentContextList; +import com.teamcenter.rac.kernel.TCComponentFolder; +import com.teamcenter.rac.kernel.TCComponentFolderType; +import com.teamcenter.rac.kernel.TCComponentQuery; +import com.teamcenter.rac.kernel.TCComponentQueryType; +import com.teamcenter.rac.kernel.TCComponentUser; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.kernel.TCTextService; +import com.teamcenter.rac.kernel.TCTypeService; +import com.teamcenter.rac.util.ButtonLayout; +import com.teamcenter.rac.util.MessageBox; +import com.teamcenter.rac.util.PropertyLayout; + +/** + * 文件夹复制对话框 + * + * @author + */ +@SuppressWarnings("serial") +public class CreateFolderFromTemplateDialog extends AbstractAIFDialog { + /** + * Logger for this class + */ + private static final Logger logger = Logger.getLogger(CreateFolderFromTemplateDialog.class); + + private TCSession session; + + private TCComponent tcTargets[]; + + @SuppressWarnings("rawtypes") + private JList jlist; + + private TCTypeService tctypeservice; + + private TCComponentFolder selectedFolder = null; + + private AbstractAIFApplication app = null; + + public CreateFolderFromTemplateDialog(Frame parent, AbstractAIFApplication papp) { + super(parent, true); + app = papp; + session = (TCSession) papp.getSession(); + int flag = checkTargets(); + if (flag == 0) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + initDialog(); + } + }); + + } + + // } else if (flag == 1) { + // + // MessageBox.post("请选择正确的项目对象!", "提示", 2); + // } else if (flag == 2) { + // + // MessageBox.post("您没有对选中项目对象的写权限!", "提示", 2); + // } else if (flag == 3) { + // + // MessageBox.post("请选择项目对象!", "提示", 2); + // } + } + + /* + * 初始化界面 + */ + @SuppressWarnings({ "unchecked", "rawtypes" }) + public void initDialog() { + this.setTitle("创建常规文件夹结构"); + JPanel mainPanel = new JPanel(new PropertyLayout()); + this.getContentPane().add(mainPanel); + JPanel listPanel = new JPanel(); + TCComponent[] tccoms = getTemplateFolder(); + // String str[]={"111","2222"}; + jlist = new JList(tccoms); + jlist.setSelectionMode(0); + JScrollPane jListScrollPane = new JScrollPane(jlist); + jListScrollPane.setPreferredSize(new Dimension(380, 150)); + jlist.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + listPanel.add(jListScrollPane); + + JPanel botPanel = new JPanel(); + botPanel.setLayout(new ButtonLayout(ButtonLayout.HORIZONTAL, ButtonLayout.CENTER, 10)); + JButton ok_button = new JButton("开始复制"); + ok_button.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + action(e); + } + + }); + + JButton cannel_button = new JButton("取消"); + cannel_button.setActionCommand("取消"); + cannel_button.addActionListener(new ActionListener() { + + public void actionPerformed(ActionEvent e) { + action(e); + + } + + }); + botPanel.add(ok_button); + botPanel.add(cannel_button); + JLabel jl1 = new JLabel("请选择要复制的文件夹"); + + mainPanel.add("1.1.center.center", jl1); + mainPanel.add("2.1.center.center", listPanel); + mainPanel.add("3.1.center.center", botPanel); + this.pack(); + this.centerToScreen(); + this.setVisible(true); + + } + + @SuppressWarnings("deprecation") + public void action(ActionEvent e) { + if (logger.isDebugEnabled()) { + logger.debug("actionPerformed(ActionEvent) - start"); //$NON-NLS-1$ + } + + if (e.getActionCommand().equals("开始复制")) { + Object[] values = jlist.getSelectedValues(); + try { + int number = values.length; + if (number > 0) { + + TCComponentFolder model_root_folder = (TCComponentFolder) jlist.getSelectedValue(); + System.out.println("model_root_folder" + model_root_folder); + + tctypeservice = session.getTypeService(); + if (logger.isInfoEnabled()) { + logger.info("actionPerformed(ActionEvent) - TCTypeService tctypeservice=" + tctypeservice); //$NON-NLS-1$ + } + + // 开始创建folder + System.out.println("开始创建项目目录文件夹"); + // createFolder(model_root_folder, this.selectedFolder); + AIFComponentContext aif[] = model_root_folder.getChildren(); + + for (int i = 0; i < aif.length; i++) { + InterfaceAIFComponent inter = aif[i].getComponent(); + + if (inter instanceof TCComponentFolder) { + + TCComponentFolder srcsubf = (TCComponentFolder) inter; + createFolder(srcsubf, this.selectedFolder, ""); + } + } + } else { + MessageBox.post("没有选择任何模板", "提示", 2); + + if (logger.isDebugEnabled()) { + logger.debug("actionPerformed(ActionEvent) - end"); //$NON-NLS-1$ + } + return; + } + } catch (Exception e1) { + logger.error("actionPerformed(ActionEvent)", e1); //$NON-NLS-1$ + + e1.printStackTrace(); + } + + dispose(); + } else if (e.getActionCommand().equals("取消")) { + + dispose(); + } + + if (logger.isDebugEnabled()) { + logger.debug("actionPerformed(ActionEvent) - end"); //$NON-NLS-1$ + } + } + + /* + * 检查选中的输入对象是否符合条件 + */ + private int checkTargets() { + if (logger.isDebugEnabled()) { + logger.debug("checkTargets() - start"); //$NON-NLS-1$ + } + + int flag = 0; + AIFComponentContext aifcomponentcontext[] = app.getTargetContexts(); + if (aifcomponentcontext != null && aifcomponentcontext.length >= 0) { + tcTargets = new TCComponent[aifcomponentcontext.length]; + for (int i = 0; i < aifcomponentcontext.length; i++) { + tcTargets[i] = (TCComponent) aifcomponentcontext[i].getComponent(); + System.out.println("tcTargets[i]===" + tcTargets[i]); + } + selectedFolder = (TCComponentFolder) tcTargets[0]; + try { + if (!checkAccessPrivilige(session.getUser(), tcTargets[0], "WRITE")) { + flag = 2; + } + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } else { + flag = 3; + } + + if (logger.isDebugEnabled()) { + logger.debug("checkTargets() - end"); //$NON-NLS-1$ + } + return flag; + } + + /** + * 检测用户针对指定对象是否有某项权限 + * + * @param user + * 用户 + * @param comp + * 对象 + * @param accessName + * 权限名称 + * @return 是否有权限 + * @throws TCException + */ + private boolean checkAccessPrivilige(TCComponentUser user, TCComponent comp, String accessName) throws TCException { + if (logger.isDebugEnabled()) { + logger.debug("checkAccessPrivilige(TCComponentUser, TCComponent, String) - start"); //$NON-NLS-1$ + } + + if (logger.isInfoEnabled()) { + logger.info("checkAccessPrivilige(TCComponentUser, TCComponent, String) - TCComponentUser user=" + user); //$NON-NLS-1$ + logger.info("checkAccessPrivilige(TCComponentUser, TCComponent, String) - TCComponentUser comp=" + comp); //$NON-NLS-1$ + logger.info("checkAccessPrivilige(TCComponentUser, TCComponent, String) - TCComponentUser accessName=" + accessName); //$NON-NLS-1$ + } + TCAccessControlService accessService = ((TCSession) session).getTCAccessControlService(); + if (logger.isInfoEnabled()) { + logger.info("checkAccessPrivilige(TCComponentUser, TCComponent, String) - TCAccessControlService accessService=" + accessService); //$NON-NLS-1$ + } + boolean returnboolean = accessService.checkUsersPrivilege(user, comp, accessName); + if (logger.isInfoEnabled()) { + logger.info("checkAccessPrivilige(TCComponentUser, TCComponent, String) - boolean returnboolean=" + returnboolean); //$NON-NLS-1$ + } + + if (logger.isDebugEnabled()) { + logger.debug("checkAccessPrivilige(TCComponentUser, TCComponent, String) - end"); //$NON-NLS-1$ + } + return returnboolean; + } + + // 查找模板 + public TCComponentFolder[] getTemplateFolder() { + TCComponentFolder[] result = null; + try { + String str_key = "Type"; + String str_value = "YSR8_SDFolder"; + String str_key2 = "OwningUser"; + String str_value2 = "infodba"; + + TCTextService textService = session.getTextService(); + TCComponentQueryType querytype = (TCComponentQueryType) session.getTypeComponent("ImanQuery"); + TCComponentQuery query = (TCComponentQuery) querytype.find("常规..."); + querytype.clearCache(); + String as[] = new String[2]; + String as1[] = new String[2]; + as[0] = textService.getTextValue(str_key); + as1[0] = str_value; + as[1] = textService.getTextValue(str_key2); + as1[1] = str_value2; + query.clearCache(); + System.out.println("query " + query); + TCComponentContextList list = query.getExecuteResultsList(as, as1); + + if (list != null) { + int count = list.getListCount(); + System.out.println(" folder coutn " + count); + result = new TCComponentFolder[count]; + for (int i = 0; i < count; i++) { + result[i] = (TCComponentFolder) list.get(i).getComponent(); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + return result; + } + + /* + * 根据模板递归循环创建相同的目录结构 + */ + public void createFolder(TCComponentFolder srcrootf, TCComponentFolder targetrootf, String foldername) { + + try { + String subf_name = ""; + String object_desc = ""; + if (foldername.equals("")) { + subf_name = srcrootf.getProperty("object_name"); + object_desc = srcrootf.getProperty("object_desc"); + } else { + subf_name = foldername; + object_desc = selectedFolder.getProperty("object_desc"); + } + // System.out.println("subf_name "+subf_name); + TCComponentFolderType foldertype = (TCComponentFolderType) tctypeservice.getTypeComponent("Folder"); + TCComponentFolder subfolder = foldertype.create(subf_name, "", "Folder"); + subfolder.setProperty("object_desc", object_desc); + targetrootf.add("contents", subfolder); + + AIFComponentContext aif[] = srcrootf.getChildren(); + + for (int i = 0; i < aif.length; i++) { + InterfaceAIFComponent inter = aif[i].getComponent(); + + if (inter instanceof TCComponentFolder) { + + TCComponentFolder srcsubf = (TCComponentFolder) inter; + createFolder(srcsubf, subfolder, ""); + } + } + } catch (TCException e) { + logger.error("createFolder(TCComponentFolder, TCComponentFolder)", e); //$NON-NLS-1$ + e.printStackTrace(); + } + + } +} diff --git a/src/cn/com/customization/create/CreateFolderFromTemplateHandler.java b/src/cn/com/customization/create/CreateFolderFromTemplateHandler.java new file mode 100644 index 0000000..c1831ab --- /dev/null +++ b/src/cn/com/customization/create/CreateFolderFromTemplateHandler.java @@ -0,0 +1,21 @@ +package cn.com.customization.create; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.commands.IHandler; + +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aifrcp.AIFUtility; + +//创建常规文件夹结构 +public class CreateFolderFromTemplateHandler extends AbstractHandler implements IHandler{ + + + public Object execute(ExecutionEvent arg0) throws ExecutionException { + AbstractAIFUIApplication app = AIFUtility.getCurrentApplication(); + new CreateFolderFromTemplateCommand(app,"CreateFolderFromTemplateHandler"); + return null; + } + +} diff --git a/src/cn/com/customization/download/BatchDownLoadFileCommand.java b/src/cn/com/customization/download/BatchDownLoadFileCommand.java new file mode 100644 index 0000000..7f09827 --- /dev/null +++ b/src/cn/com/customization/download/BatchDownLoadFileCommand.java @@ -0,0 +1,64 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: BatchDownLoadFileCommand.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-4-20 16:05 liqz Ini 文件批量下载Command +#======================================================================================================= +*/ +package cn.com.customization.download; + +import com.teamcenter.rac.aif.AbstractAIFCommand; +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.kernel.TCComponentFolder; +import com.teamcenter.rac.kernel.TCComponentItem; +import com.teamcenter.rac.kernel.TCComponentItemRevision; +import com.teamcenter.rac.kernel.TCComponentPseudoFolder; +import com.teamcenter.rac.kernel.TCComponentTask; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.MessageBox; + +public class BatchDownLoadFileCommand extends AbstractAIFCommand { + + private AbstractAIFUIApplication application; + private TCSession session; + public BatchDownLoadFileCommand(AbstractAIFUIApplication abstractaifapplication) throws TCException { + application = abstractaifapplication; + session = (TCSession)application.getSession(); + execute(); + } + + private void execute() throws TCException { + try { + final InterfaceAIFComponent targetCom = application.getTargetComponent(); + if (targetCom != null) { + String strType = targetCom.getType(); + System.out.println("targetCom.type============" + strType); + //String name = targetCom.toString().trim(); + System.out.println("targetCom.toString============" + targetCom.toString()); + if (strType.equals("TasksToPerform") || targetCom instanceof TCComponentFolder || targetCom instanceof TCComponentPseudoFolder || targetCom instanceof TCComponentItemRevision || targetCom instanceof TCComponentTask || targetCom instanceof TCComponentItem) { + System.out.println("符合条件,开始下载..."); + DatasetFileDown filedown = new DatasetFileDown(application, session, targetCom, false); + //-*-*- 10.1改动 + new Thread(filedown).start(); + //new Thread((Runnable) filedown).start(); + } else { + MessageBox.post("选择的对象类型不正确!", "WARNING", 1); + return; + } + } else { + MessageBox.post("请选择对象!", "WARNING", 1); + return; + } + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/src/cn/com/customization/download/BatchDownLoadFileCommand2.java b/src/cn/com/customization/download/BatchDownLoadFileCommand2.java new file mode 100644 index 0000000..cef5643 --- /dev/null +++ b/src/cn/com/customization/download/BatchDownLoadFileCommand2.java @@ -0,0 +1,65 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: BatchDownLoadFileCommand.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-4-20 16:05 liqz Ini 文件批量下载Command +#======================================================================================================= +*/ +package cn.com.customization.download; + +import com.teamcenter.rac.aif.AbstractAIFCommand; +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.kernel.TCComponentFolder; +import com.teamcenter.rac.kernel.TCComponentItem; +import com.teamcenter.rac.kernel.TCComponentItemRevision; +import com.teamcenter.rac.kernel.TCComponentPseudoFolder; +import com.teamcenter.rac.kernel.TCComponentTask; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.MessageBox; + +public class BatchDownLoadFileCommand2 extends AbstractAIFCommand { + + private AbstractAIFUIApplication application; + private TCSession session; + public BatchDownLoadFileCommand2(AbstractAIFUIApplication abstractaifapplication) throws TCException { + application = abstractaifapplication; + session = (TCSession)application.getSession(); + execute(); + } + + private void execute() throws TCException { + try { + final InterfaceAIFComponent targetCom = application.getTargetComponent(); + if (targetCom != null) { + String strType = targetCom.getType(); + System.out.println("targetCom.type============" + strType); +// String name = targetCom.toString().trim(); + System.out.println("targetCom.toString============" + targetCom.toString()); + if (targetCom instanceof TCComponentTask || targetCom instanceof TCComponentFolder || targetCom instanceof TCComponentPseudoFolder || + targetCom instanceof TCComponentItem || + targetCom instanceof TCComponentItemRevision) { + DatasetFileDown2 filedown = new DatasetFileDown2(application, session, targetCom); + //-*-*- 10.1改动 + //new Thread((Runnable) filedown).start(); + new Thread(filedown).start(); + } else { + MessageBox.post("选择的对象类型不正确!", "WARNING", 1); + return; + } + } else { + MessageBox.post("请选择对象!", "WARNING", 1); + return; + } + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/src/cn/com/customization/download/BatchDownLoadFileHandler.java b/src/cn/com/customization/download/BatchDownLoadFileHandler.java new file mode 100644 index 0000000..94afda3 --- /dev/null +++ b/src/cn/com/customization/download/BatchDownLoadFileHandler.java @@ -0,0 +1,43 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: BatchDownLoadFileHandler.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2017-5-20 15:50 SZ Ini 文件批量下载Handler +#======================================================================================================= +*/ +package cn.com.customization.download; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.commands.IHandler; +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCException; + +public class BatchDownLoadFileHandler extends AbstractHandler implements IHandler{ + + /* + * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) + */ + public Object execute(ExecutionEvent arg0) throws ExecutionException { + AbstractAIFUIApplication app = AIFUtility.getCurrentApplication(); + try { + BatchDownLoadFileCommand command= new BatchDownLoadFileCommand(app); + command.executeModal(); + } + catch (TCException e) { + e.printStackTrace(); + } + catch (Exception e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/cn/com/customization/download/BatchDownLoadFileHandler2.java b/src/cn/com/customization/download/BatchDownLoadFileHandler2.java new file mode 100644 index 0000000..44a5bc2 --- /dev/null +++ b/src/cn/com/customization/download/BatchDownLoadFileHandler2.java @@ -0,0 +1,43 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: BatchDownLoadFileHandler.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2017-5-20 15:50 SZ Ini 文件批量下载Handler +#======================================================================================================= +*/ +package cn.com.customization.download; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.commands.IHandler; +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCException; + +public class BatchDownLoadFileHandler2 extends AbstractHandler implements IHandler{ + + /* + * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) + */ + public Object execute(ExecutionEvent arg0) throws ExecutionException { + AbstractAIFUIApplication app = AIFUtility.getCurrentApplication(); + try { + BatchDownLoadFileCommand2 command = new BatchDownLoadFileCommand2(app); + command.executeModal(); + } + catch (TCException e) { + e.printStackTrace(); + } + catch (Exception e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/cn/com/customization/download/DatasetFileDown.java b/src/cn/com/customization/download/DatasetFileDown.java new file mode 100644 index 0000000..53ed365 --- /dev/null +++ b/src/cn/com/customization/download/DatasetFileDown.java @@ -0,0 +1,795 @@ +/* +#============================================================================= +# +# copyright (c) 2009 Origin Enterprise Solution LTD. +# +#============================================================================= +# File name: DatasetFileDown.java +# File description: +#============================================================================= +# Date Name Action Description of Change +# 2011-4-20 liqz 创建 下载数据集(From Shaangu) +# 2011-5-19 liqz 修改 允许下载未发布的数据集,文件夹下的数据集也允许下载 +#============================================================================= + */ +package cn.com.customization.download; + +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import com.teamcenter.rac.aif.AbstractAIFApplication; +import com.teamcenter.rac.aif.AbstractAIFOperation; +import com.teamcenter.rac.aif.kernel.AIFComponentContext; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.kernel.TCAccessControlService; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentDataset; +import com.teamcenter.rac.kernel.TCComponentFolder; +import com.teamcenter.rac.kernel.TCComponentItem; +import com.teamcenter.rac.kernel.TCComponentItemRevision; +import com.teamcenter.rac.kernel.TCComponentProcess; +import com.teamcenter.rac.kernel.TCComponentPseudoFolder; +import com.teamcenter.rac.kernel.TCComponentTask; +import com.teamcenter.rac.kernel.TCComponentTcFile; +import com.teamcenter.rac.kernel.TCComponentUser; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCPreferenceService; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.ConfirmationDialog; +import com.teamcenter.rac.util.MessageBox; + +import cn.com.customization.imports.importfiles.ORProgressBarThread; +import cn.com.customization.util.GetCommonInfo; +import cn.com.customization.util.PackFailDownInfo; +import cn.com.customization.util.PackResultInfo; +import cn.com.customization.util.PackSuccessfulInfo; +import cn.com.customization.util.ResultDialog; +import cn.com.customization.util.ShowMessageDialog; +import cn.com.customization.util.UtilApi; +import cn.com.customization.util.WriteAndCopyFile; + +@SuppressWarnings("deprecation") +public class DatasetFileDown extends AbstractAIFOperation implements Runnable { + private TCSession session = null; + private InterfaceAIFComponent targetComponent = null; + private ORProgressBarThread progressbarthread = null; + private GetCommonInfo checkcommon; + private String path = ""; + private int downDataSetCount = 0; + private int isNotHavePriviligeCount = 0; + private int haveEqualDataSetCount = 0; + private String validTypeOption = "CUST_batchdown_validtype"; + // 当origin_showLogFile中的值为true则会生成日志文件:c:\\batchExportDataset.log + private String isShowLogOption = "CUST_showLogFile"; + private int notReleasedDataSetCount = 0; + private boolean isDownReleased = false; + private List haveDownDataSet = null; + private WriteAndCopyFile writeLog; + private String logFileName = "c:/batchExportDataset.log"; + private List notExistFiles = new ArrayList(); + private int downCount = 0; + private List failDownInfos = new ArrayList(); + private int needDownCount = 0; + private List successfulInfos = new ArrayList(); + private String currentJob = ""; + private String successfulDir = System.getenv("temp");//"c:/ugs/log"; + private boolean isShiftProcessDown; + private String changePackageName = "更改单"; + private String technologyPackageName = "技术文件"; + + //private TCUserService userService = null; + private List logsList = new ArrayList(); + private boolean isContainsGGD = false; + private boolean isContainsTechnologyItem = false; + + public DatasetFileDown(AbstractAIFApplication application, TCSession tcsession, InterfaceAIFComponent targetCom, boolean isShiftProcessDown) { + checkcommon = new GetCommonInfo(tcsession); + session = tcsession; + targetComponent = targetCom; + writeLog = new WriteAndCopyFile(); + this.isShiftProcessDown = isShiftProcessDown; + + //userService = (TCUserService) session.getUserService(); + + File dir = new File(successfulDir); + if (!dir.exists()) { + dir.mkdir(); + } + if (isShowLog()) { + File file = new File(logFileName); + if (file.exists()) { + writeLog.writeFile(logFileName, false, "\r\n"); + } else { + try { + file.createNewFile(); + writeLog.writeFile(logFileName, false, "\r\n"); + } catch (IOException e) { + e.printStackTrace(); + } + } + } else { + File file = new File(logFileName); + if (file.exists()) { + file.delete(); + } + } + } + + private void writeLogFile(String fileName, String content) { + if (isShowLog()) { + content = content + "\r\n"; + writeLog.writeFile(fileName, true, content); + } + } + + private void writeSuccessfulLogFile(String fileName, String content) { + content = content + "\r\n"; + writeLog.writeFile(fileName, true, content); + logsList.add(content); + } + + public String getTime() { + String strTime = ""; + try { + SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss:SSS"); + strTime = bartDateFormat.format(new Date()); + // System.out.println(strTime); + } catch (Exception e) { + e.printStackTrace(); + } + return strTime; + } + + @Override + public void executeOperation() throws Exception { + System.out.println("Begin to call filedown operation..."); + String cuurentPath = checkcommon.getChoosePath(); + path = cuurentPath; + isDownReleased = false; + isDownReleased(); + haveDownDataSet = new ArrayList(); + if ((cuurentPath != null) && (cuurentPath.length() == 0)) { + return; + } else { + if (checkcommon.isExistFiles(cuurentPath)) { + int value = ConfirmationDialog.post("提示","指定的目录下非空,是否下载?"); + if(value == ConfirmationDialog.NO){ + return; + } + } + } + try { + writeLogFile(logFileName, "开始下载: " + getTime()); + // writeLogFile("所选路径为: " + cuurentPath, logFileName); + writeLogFile(logFileName, " "); + int importAll = 0; + + PackSuccessfulInfo succesfulDataset = new PackSuccessfulInfo(); + succesfulDataset.setIndex("序号"); + succesfulDataset.setItemID("零组件ID"); + succesfulDataset.setItemRev("版本"); + succesfulDataset.setItemOwner("所有者"); + succesfulDataset.setDataset("数据集"); + succesfulDataset.setRefFile("命名的引用"); + successfulInfos.add(succesfulDataset); + + if (targetComponent instanceof TCComponentItemRevision) { + progressbarthread = new ORProgressBarThread("数据集导出中......", "数据导出中,请稍等..."); + progressbarthread.start(); + session.setStatus("导出中..."); + getDataSetFromItemRevision((TCComponentItemRevision) targetComponent, cuurentPath); + } else { + if (targetComponent instanceof TCComponentDataset) { + return; + } else { + if (targetComponent instanceof TCComponentItem) { + progressbarthread = new ORProgressBarThread("数据集导出中......", "数据导出中,请稍等..."); + progressbarthread.start(); + session.setStatus("导出中..."); + getDataSetFromItem((TCComponentItem) targetComponent, cuurentPath); + } else { + if (targetComponent instanceof TCComponentFolder) { +// importAll = new GetMessageDialog("INFO", "是否导出子文件夹?").getValue(); + importAll = ConfirmationDialog.post("提示","是否导出子文件夹?"); + currentJob = ((TCComponentFolder) targetComponent).getProperty("object_name"); + System.out.println("TCComponentFolder===========" + targetComponent); + } else { + if (targetComponent instanceof TCComponentTask) { + TCComponentTask task = (TCComponentTask) targetComponent; + // task.getName(); 电子签名 + TCComponentProcess process = task.getProcess(); + if (process != null) { + currentJob = process.toString(); // 000009/H;1-sgitem测试 + System.out.println("targetComponent.currentJob()===========" + currentJob); + } + } + } + progressbarthread = new ORProgressBarThread("数据集导出中......", "数据导出中,请稍等..."); + progressbarthread.start(); + session.setStatus("导出中..."); + getTargetCom(targetComponent, cuurentPath, importAll); + } + } + } + session.setReadyStatus(); + progressbarthread.setBool(true); + + writeLogFile(logFileName, " "); + writeLogFile(logFileName, "总结:"); + writeLogFile(logFileName, "存在数据集:" + haveDownDataSet.size() + "个"); + writeLogFile(logFileName, "未发布数据集:" + notReleasedDataSetCount + "个"); + writeLogFile(logFileName, "无权限数据集:" + isNotHavePriviligeCount + "个"); + writeLogFile(logFileName, "需要下载文件:" + needDownCount + "个"); + writeLogFile(logFileName, "成功下载文件:" + downDataSetCount + "个"); + writeLogFile(logFileName, "无引用文件数据集:" + notExistFiles.size() + "个"); + writeLogFile(logFileName, "未成功下载文件:" + (needDownCount - downDataSetCount) + "个"); + + PackResultInfo resultInfo = new PackResultInfo(); + SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd:HHmmss"); + String time = date.format(new Date()); + resultInfo.setTime(time); + resultInfo.setPerson(session.getUser().toString()); + resultInfo.setJob(currentJob); + + resultInfo.setExistDataSetCount(haveDownDataSet.size()); + resultInfo.setNeedNum(needDownCount); + resultInfo.setSuccessNum(downDataSetCount); + resultInfo.setNoReleasedNum(notReleasedDataSetCount); + resultInfo.setNoPrivilegelNum(isNotHavePriviligeCount); + resultInfo.setNoReferenceNum(notExistFiles.size()); + resultInfo.setEqualNameNum(haveEqualDataSetCount); + resultInfo.setFailNum((needDownCount - downDataSetCount)); + resultInfo.setFailDownInfo(failDownInfos); + + // 时间:2010-06-15:8890 下载人:XXXXXX, 所选流程(目录):XXXXXXXXXX + // 存在数据集:80 + // 未发布数据集:76 + // 无权限数据集:0 + // 需下载文件:30 + // 成功下载文件:80 + // 无引用文件数据集:0 + + // 未成功下载文件列表: + // 零组件id 版本 所有者 数据集,命名的引用 + String logPath = successfulDir + "/批量下载文件日志_" + (new SimpleDateFormat("yyyyMMdd")).format(new Date()) + ".log"; + writeSuccessfulLogFile(logPath, " "); + writeSuccessfulLogFile(logPath, "==========================================================================================================================="); + writeSuccessfulLogFile(logPath, "时间:" + time + " 下载人:" + session.getUser().toString() + " 所选流程(目录):" + currentJob); + writeSuccessfulLogFile(logPath, " "); + writeSuccessfulLogFile(logPath, "存在数据集:" + haveDownDataSet.size()); + writeSuccessfulLogFile(logPath, "未发布数据集:" + notReleasedDataSetCount); + writeSuccessfulLogFile(logPath, "无权限数据集:" + isNotHavePriviligeCount); + writeSuccessfulLogFile(logPath, "需下载文件:" + needDownCount); + writeSuccessfulLogFile(logPath, "成功下载文件:" + downDataSetCount); + writeSuccessfulLogFile(logPath, "无引用文件数据集:" + notExistFiles.size()); + writeSuccessfulLogFile(logPath, " "); + writeSuccessfulLogFile(logPath, "已成功下载文件列表:"); + writeSuccessfulLogFile(logPath, "---------------------------------------------------------------------------"); + for (int i = 0; i < successfulInfos.size(); i++) { + PackSuccessfulInfo successfulInfo = successfulInfos.get(i); + writeSuccessfulLogFile(logPath, appendSpace(successfulInfo.getIndex().trim(), 5) + appendSpace(successfulInfo.getItemID().trim(), 32) + appendSpace((successfulInfo.getItemRev() == null ? "" : successfulInfo.getItemRev().trim()), 5) + appendSpace(successfulInfo.getItemOwner().trim(), 25) + appendSpace(successfulInfo.getDataset().trim(), 50) + appendSpace(successfulInfo.getRefFile().trim(), 50)); + } + writeSuccessfulLogFile(logPath, " "); + // 服务器端日志 remove by sz 2017-6-1 +// try { +// Object objs[] = new Object[1]; +// objs[0] = logsList.toArray(); +// userService.call("DatasetDownLog", objs); +// } catch (TCException e) { +// e.printStackTrace(); +// } + //end remove + if (haveDownDataSet.size() == 0) { + new ShowMessageDialog("信息提示", "下载了0个数据集!", ""); + return; + } + new ResultDialog(resultInfo, session); + } catch (Exception e) { + session.setReadyStatus(); + if (progressbarthread != null) { + progressbarthread.setBool(true); + } + MessageBox.post("数据导出出现异常:" + e.getMessage(), "ERROR", 1); + e.printStackTrace(); + } + } + + private String appendSpace(String str, int num) { + if (str.length() < num) { + for (int i = UtilApi.length(str) + 1; i <= num; i++) { + str += " "; + } + } + return str; + } + + private void getTargetType(InterfaceAIFComponent aif) { + isContainsGGD = false; + isContainsTechnologyItem = false; + try { + if (aif.getChildren() != null) { + AIFComponentContext[] getChild = aif.getChildren(); + if (getChild.length != 0) { + isContainsTechnologyItem = true; + int revCount = 0; + for (int i = 0; i < getChild.length; i++) { + InterfaceAIFComponent childComponent = getChild[i].getComponent(); + if (childComponent instanceof TCComponentItemRevision) { + TCComponentItemRevision itemRevision = (TCComponentItemRevision) childComponent; + if (itemRevision != null) { + ++revCount; + String revType = itemRevision.getType(); + if (revType.equals("GGDitem Revision") || revType.equals("HTDitem Revision")) { + isContainsGGD = true; + isContainsTechnologyItem = false; + } else { + if (!revType.equals("技术文件 Revision")) { + isContainsTechnologyItem = false; + } + } + } + } + } + if (revCount == 0) { + isContainsTechnologyItem = false; + } + } + } + } catch (Exception e) { + session.setReadyStatus(); + progressbarthread.setBool(true); + MessageBox.post("遍历时出错:" + e.getMessage(), "ERROR", 1); + e.printStackTrace(); + } + } + + /** + * getTargetCom:得到数据集对象 + * @param @return 设定文件 + * @param aif + * @param cuurentPath 文件要保存路径 + * @param importAll importAll=2要导出子文件夹,1只是导出第一层子文件。 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + private void getTargetCom(InterfaceAIFComponent aif, String cuurentPath, int importAll) { + if (aif.toString().equalsIgnoreCase("root_target_attachments") || aif.toString().equalsIgnoreCase("目标")) { + System.out.println("aif=============" + aif); + getTargetType(aif); + if (isContainsGGD) { + cuurentPath = createFile(path, changePackageName); + } else { + if (isContainsTechnologyItem) { + cuurentPath = createFile(path, technologyPackageName); + } + } + } + System.out.println("cuurentPath=============" + cuurentPath); + try { + AIFComponentContext[] getChild = aif.getChildren(); + if (getChild.length != 0) { + for (int i = 0; i < getChild.length; i++) { + InterfaceAIFComponent childComponent = getChild[i].getComponent(); + if (childComponent instanceof TCComponentDataset) { + datasetFileDown((TCComponentDataset) childComponent, cuurentPath, null); + } else if (childComponent instanceof TCComponentTask) { + getTargetCom(childComponent, cuurentPath, importAll); + } else if (childComponent instanceof TCComponentItem) { + if (aif instanceof TCComponentPseudoFolder) { + TCComponentPseudoFolder psefolder1 = (TCComponentPseudoFolder) aif; + String objectString1 = psefolder1.getProperty("object_string"); + if ((objectString1.equalsIgnoreCase("root_target_attachments")) || (objectString1.equalsIgnoreCase("root_reference_attachments")) || (objectString1.equalsIgnoreCase("目标")) || (objectString1.equalsIgnoreCase("引用"))) { + continue; + } + } + getDataSetFromItem((TCComponentItem) childComponent, cuurentPath); + } else if ((childComponent instanceof TCComponentFolder)) { + if (aif instanceof TCComponentPseudoFolder) { + TCComponentPseudoFolder psefolder1 = (TCComponentPseudoFolder) aif; + String objectString1 = psefolder1.getProperty("object_string"); + if ((objectString1.equalsIgnoreCase("root_target_attachments")) || (objectString1.equalsIgnoreCase("root_reference_attachments")) || (objectString1.equalsIgnoreCase("目标")) || (objectString1.equalsIgnoreCase("引用"))) { + continue; + } + } +// if (!path.equalsIgnoreCase(cuurentPath)) { +// continue; +// } + File file = null; + if (importAll == 2) { + String folderName = childComponent.toString(); + List list = new ArrayList(); + list.add("\\"); + list.add("/"); + list.add(":"); + list.add("*"); + list.add("?"); + list.add("\""); + list.add("<"); + list.add(">"); + list.add("|"); + for (int j = 0; j < list.size(); j++) { + while (folderName.indexOf(list.get(j)) >= 0) { + folderName = folderName.replace(list.get(j), "_"); + } + } + file = new File(cuurentPath + "\\" + folderName); + if (!file.exists()) { + file.mkdir(); + } else { + file = new File(cuurentPath + "\\" + folderName + "_" + UtilApi.getTimeNum()); + file.mkdir(); + } + getTargetCom(childComponent, file.getAbsolutePath(), importAll); + } else { + continue; + } + } else if (childComponent instanceof TCComponentItemRevision) { + getDataSetFromItemRevision((TCComponentItemRevision) childComponent, cuurentPath); + } else { + if (childComponent instanceof TCComponentPseudoFolder) { + TCComponentPseudoFolder psefolder = (TCComponentPseudoFolder) childComponent; + String objectString = psefolder.getProperty("object_string"); + if (objectString.equalsIgnoreCase("root_target_attachments") || objectString.equalsIgnoreCase("目标")) { + getTargetCom(childComponent, cuurentPath, importAll); + } + } + } + } + } + } catch (Exception e) { + session.setReadyStatus(); + progressbarthread.setBool(true); + MessageBox.post("在提取数据时出现异常:" + e.getMessage(), "ERROR", 1); + e.printStackTrace(); + } + } + + /** + * getDataSetFromItemRevision:通过版本得到数据集 + * @param @return 设定文件 + * @param tcRevision + * @param cuurentPath 文件要保存路径 + * @throws + * @since CodingExample Ver 1.1 + */ + private void getDataSetFromItemRevision(TCComponentItemRevision tcRevision, String cuurentPath) { + if (tcRevision == null) { + return; + } + try { + tcRevision.refresh(); + } catch (TCException e2) { + e2.printStackTrace(); + } + try { + TCComponent tccomps[] = tcRevision.getRelatedComponents("IMAN_specification"); + try { + String type = tcRevision.getType(); + String revision = tcRevision.getProperty("item_revision_id"); + + if (isShiftProcessDown) { + TCComponentProcess process = tcRevision.getCurrentJob(); + String processName = process.getRootTask().toString(); + // System.out.println("processName===============" + + // processName); + // System.out.println("type================" + type); + if (processName.startsWith("SG_ECR_") && (type.equals("GGDitem Revision"))) { + for (int i = 0; i < tccomps.length; i++) { + if (tccomps[i] instanceof TCComponentDataset) { + TCComponentDataset dataset = (TCComponentDataset) tccomps[i]; + if ((dataset.toString().contains("/" + revision + "/")) || (dataset.toString().contains("/" + revision))) { + datasetFileDown(dataset, cuurentPath, tcRevision); + } + } + } + } else { + if (processName.startsWith("SG_HTR_")) { + for (int i = 0; i < tccomps.length; i++) { + if (tccomps[i] instanceof TCComponentDataset) { + TCComponentDataset dataset = (TCComponentDataset) tccomps[i]; + if ((dataset.toString().contains("/" + revision + "/")) || (dataset.toString().contains("/" + revision))) { + datasetFileDown(dataset, cuurentPath, tcRevision); + } + } + } + } else { + for (int i = 0; i < tccomps.length; i++) { + if (tccomps[i] instanceof TCComponentDataset) { + TCComponentDataset dataset = (TCComponentDataset) tccomps[i]; + datasetFileDown(dataset, cuurentPath, tcRevision); + } + } + } + } + } else { + for (int i = 0; i < tccomps.length; i++) { + if (tccomps[i] instanceof TCComponentDataset) { + datasetFileDown((TCComponentDataset) tccomps[i], cuurentPath, tcRevision); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } catch (TCException e) { + e.printStackTrace(); + } + } + + /** + * getDataSetFromItem:通过Item得到数据集 + * @param @return 设定文件 + * @param item + * @param cuurentPath 文件要保存路径 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + private void getDataSetFromItem(TCComponentItem item, String cuurentPath) { + TCComponentItemRevision tcRevision; + try { + item.refresh(); + } catch (TCException e2) { + e2.printStackTrace(); + } + try { + tcRevision = item.getLatestItemRevision(); + if (tcRevision == null) { + return; + } + try { + TCComponent tccomps[] = tcRevision.getRelatedComponents("IMAN_specification"); + for (int i = 0; i < tccomps.length; i++) { + if (tccomps[i] instanceof TCComponentDataset) { + datasetFileDown((TCComponentDataset) tccomps[i], cuurentPath, tcRevision); + } + } + } catch (TCException e) { + e.printStackTrace(); + } + } catch (TCException e1) { + e1.printStackTrace(); + } + } + + /** + * datasetFileDown:导出数据集对象的引用文件 + * @param @return 设定文件 + * @param dataset + * @param fileCurrentPath + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + + private void datasetFileDown(TCComponentDataset dataSet, String fileCurrentPath, TCComponentItemRevision itemRevision) { + try { + dataSet.refresh(); + } catch (TCException e2) { + e2.printStackTrace(); + } + if (haveDownDataSet != null) { + if (haveDownDataSet.contains(dataSet)) { + return; + } + } + // String fileCurrentPath = currentPath; + haveDownDataSet.add(dataSet); + PackFailDownInfo dataSetInfo = new PackFailDownInfo(); + try { + String itemID = ""; + String rev = ""; + if (itemRevision != null) { + itemID = itemRevision.getProperty("item_id"); + rev = itemRevision.getProperty("current_revision_id"); + } + String owner = dataSet.getProperty("owning_user"); + dataSetInfo.setOwner(owner); + dataSetInfo.setItemId(itemID); + dataSetInfo.setRev(rev); + dataSetInfo.setDatasetName(dataSet.toString()); + dataSetInfo.setDataSet(dataSet); + dataSetInfo.setItemRev(itemRevision); + } catch (TCException e3) { + writeLogFile(logFileName, e3.getMessage()); + e3.printStackTrace(); + } + + writeLogFile(logFileName, "存在数据集:" + dataSet.toString()); + // System.out.println("dataSet............" + dataSet.toString()); + try { + String release = dataSet.getProperty("release_status_list").trim(); + if (release != null) { + // String regex = ".*Released.*"; + // Pattern pattern = Pattern.compile(regex, + // Pattern.CASE_INSENSITIVE); + // Matcher match = pattern.matcher(release); + // boolean find = match.find(); + if (release.length() == 0) { + notReleasedDataSetCount++; + writeLogFile(logFileName, "未发布"); + if (isDownReleased) { + dataSetInfo.setReason("未发布"); + failDownInfos.add(dataSetInfo); + writeLogFile(logFileName, ""); + return; + } + } else { + writeLogFile(logFileName, "已经发布"); + } + } + } catch (TCException e2) { + e2.printStackTrace(); + } + try { + boolean isCanExport = false; + isCanExport = checkAccessPrivilige(session.getUser(), dataSet, "EXPORT"); + if (!isCanExport) { + ++isNotHavePriviligeCount; + dataSetInfo.setReason("没有导出权限"); + failDownInfos.add(dataSetInfo); + writeLogFile(logFileName, "没有导出权限"); + writeLogFile(logFileName, " "); + return; + } else { + writeLogFile(logFileName, "有导出权限 "); + } + } catch (TCException e1) { + e1.printStackTrace(); + } + TCComponentTcFile tcFile = null; + String fileName = ""; + try { + if ((dataSet.getTcFiles() != null) && (dataSet.getTcFiles().length > 0)) { + for (int i = 0; i < dataSet.getTcFiles().length; i++) { + tcFile = dataSet.getTcFiles()[i]; + if (tcFile == null) { + return; + } + tcFile.refresh(); + fileName = tcFile.getProperty("original_file_name"); + if (fileName != null) { + needDownCount++; + dataSetInfo.setFilePath(fileCurrentPath); + dataSetInfo.setReference_file(fileName); + dataSetInfo.setNeedDown("true"); + String fileType = ""; + String preFileName = ""; + int index = fileName.lastIndexOf("."); + if (index > 0) { + fileType = fileName.substring(index, fileName.length()); + preFileName = fileName.substring(0, index); + } else { + preFileName = fileName; + } + boolean flag = checkcommon.existFile(fileCurrentPath, fileName); + if (flag) { + haveEqualDataSetCount++; + int pos = fileName.indexOf('.'); + if (pos > 0) { + fileName = preFileName + "_" + UtilApi.getTimeNum() + fileType; + } + } + if (fileName.indexOf('/') >= 0) { + fileName = fileName.replace('/', '_'); + } + downCount = 0; + getTCFile(tcFile, fileCurrentPath, fileName, dataSetInfo); + } + } + } else { + dataSetInfo.setReason("不存在引用文件"); + failDownInfos.add(dataSetInfo); + notExistFiles.add(dataSet.toString()); + writeLogFile(logFileName, "不存在引用文件!"); + } + writeLogFile(logFileName, " "); + } catch (Throwable e) { + writeLogFile(logFileName, "导出文件时出现异常!"); + writeLogFile(logFileName, e.getMessage()); + writeLogFile(logFileName, " "); + e.printStackTrace(); + } + } + + private File getTCFile(TCComponentTcFile tcFile, String fileCurrentPath, String fileName, PackFailDownInfo dataSetInfo) { + ++downCount; + if (downCount == 2) { + writeLogFile(logFileName, "第二次下载"); + } + File file = null; + try { + file = tcFile.getFile(fileCurrentPath, fileName); + if (file != null) { + ++downDataSetCount; + writeLogFile(logFileName, "导出文件:" + fileName + " " + getTime()); + writeLogFile(logFileName, " "); + // successfulInfos + PackSuccessfulInfo succesfulDataset = new PackSuccessfulInfo(); + succesfulDataset.setIndex(String.valueOf(downDataSetCount)); + succesfulDataset.setItemID(dataSetInfo.getItemId()); + succesfulDataset.setItemRev(dataSetInfo.getRev()); + succesfulDataset.setItemOwner(dataSetInfo.getOwner()); + succesfulDataset.setDataset(dataSetInfo.getDatasetName()); + succesfulDataset.setRefFile(file.getName()); + successfulInfos.add(succesfulDataset); + } else { + writeLogFile(logFileName, "没有导出文件!"); + } + } catch (Throwable e) { + writeLogFile(logFileName, "文件导出时出现异常"); + String exceptionMessage = e.getMessage(); + writeLogFile(logFileName, exceptionMessage); + writeLogFile(logFileName, " "); + e.printStackTrace(); + if (downCount < 2) { + file = getTCFile(tcFile, fileCurrentPath, fileName, dataSetInfo); + } else { + dataSetInfo.setReason(exceptionMessage); + failDownInfos.add(dataSetInfo); + } + } + return file; + } + + /** + * checkAccessPrivilige:检查用户对给Component是否有权限 + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + private boolean checkAccessPrivilige(TCComponentUser user, TCComponent comp, String accessName) throws TCException { + TCAccessControlService accessService = ((TCSession) session).getTCAccessControlService(); + boolean returnboolean = accessService.checkUsersPrivilege(user, comp, accessName); + return returnboolean; + } + + private boolean isShowLog() { + boolean isShowLog = false; + TCPreferenceService preSer = session.getPreferenceService(); + String value = preSer.getString(4, isShowLogOption).trim(); + if (value.equalsIgnoreCase("true")) { + isShowLog = true; + } + return isShowLog; + } + + public void isDownReleased() { + TCPreferenceService preSer = session.getPreferenceService(); + String type = preSer.getString(4, validTypeOption).trim(); + if (type.equalsIgnoreCase("released")) { + isDownReleased = true; + } + } + + private String createFile(String filePath, String fileName) { + System.out.println("路径:" + filePath + "/" + fileName); + File file = new File(filePath + "/" + fileName); + if (!file.exists()) { + try { + file.mkdir(); + } catch (Exception e) { + e.printStackTrace(); + } + } + return file.getAbsolutePath(); + } + + @Override + public void run() { + // TODO Auto-generated method stub + try { + System.out.println("run________________-"); + executeOperation(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } +} diff --git a/src/cn/com/customization/download/DatasetFileDown2.java b/src/cn/com/customization/download/DatasetFileDown2.java new file mode 100644 index 0000000..8f7b17a --- /dev/null +++ b/src/cn/com/customization/download/DatasetFileDown2.java @@ -0,0 +1,716 @@ +/* +#============================================================================= +# +# copyright (c) 2009 Origin Enterprise Solution LTD. +# +#============================================================================= +# File name: DatasetFileDown.java +# File description: +#============================================================================= +# Date Name Action Description of Change +# 2011-4-20 liqz 创建 下载数据集(From Shaangu) +# 2011-5-19 liqz 修改 允许下载未发布的数据集,文件夹下的数据集也允许下载 +#============================================================================= + */ +package cn.com.customization.download; + +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; + +import cn.com.customization.imports.importfiles.ORProgressBarThread; +import cn.com.customization.util.GetCommonInfo; +import cn.com.customization.util.PackFailDownInfo; +import cn.com.customization.util.PackResultInfo; +import cn.com.customization.util.PackSuccessfulInfo; +import cn.com.customization.util.ResultDialog; +import cn.com.customization.util.ShowMessageDialog; +import cn.com.customization.util.UtilApi; +import cn.com.customization.util.WriteAndCopyFile; + +import com.teamcenter.rac.aif.AbstractAIFApplication; +import com.teamcenter.rac.aif.AbstractAIFOperation; +import com.teamcenter.rac.aif.kernel.AIFComponentContext; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.kernel.TCAccessControlService; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentDataset; +import com.teamcenter.rac.kernel.TCComponentFolder; +import com.teamcenter.rac.kernel.TCComponentItem; +import com.teamcenter.rac.kernel.TCComponentItemRevision; +import com.teamcenter.rac.kernel.TCComponentProcess; +import com.teamcenter.rac.kernel.TCComponentPseudoFolder; +import com.teamcenter.rac.kernel.TCComponentTask; +import com.teamcenter.rac.kernel.TCComponentTcFile; +import com.teamcenter.rac.kernel.TCComponentUser; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCPreferenceService; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.ConfirmationDialog; +import com.teamcenter.rac.util.MessageBox; + +public class DatasetFileDown2 extends AbstractAIFOperation implements Runnable { + private TCSession session = null; + private InterfaceAIFComponent targetComponent = null; +// private TCUserService userService = null; + + private ORProgressBarThread progressbarthread = null; + private GetCommonInfo checkcommon = null; + + // 当origin_showLogFile中的值为true则会生成日志文件:c:\\batchExportDataset.log + private String isShowLogOption = "CUST_showLogFile"; + private boolean isShowLog = false; + private String logFileName = "c:/batchExportDataset.log"; + private WriteAndCopyFile writeLog; + //是否只下载release状态 + private String validTypeOption = "CUST_batchdown_validtype"; + private boolean isDownReleased = false; + + private List logsList = new ArrayList(); + + private String rootPath = ""; + private List haveDownDataSet = null; + private List successfulInfos = new ArrayList(); + + private String successfulDir = System.getenv("temp");//"c:/ugs/log"; + private int downDataSetCount = 0; + private int isNotHavePriviligeCount = 0; + private int haveEqualDataSetCount = 0; + private int notReleasedDataSetCount = 0; + private List notExistFiles = new ArrayList(); + private int downCount = 0; + private List failDownInfos = new ArrayList(); + private int needDownCount = 0; + + private HashMap allItemRevisionMap = new HashMap(); + private HashMap allItemMap = new HashMap(); + private HashMap allComponentMap = new HashMap(); + + + public DatasetFileDown2(AbstractAIFApplication application, TCSession tcsession, InterfaceAIFComponent targetCom) { + session = tcsession; + targetComponent = targetCom; +// userService = (TCUserService)session.getUserService(); + + checkcommon = new GetCommonInfo(tcsession); + writeLog = new WriteAndCopyFile(); + + isDownReleased(); + getIsShowLog(); + if (isShowLog) { + File file = new File(logFileName); + if (file.exists()) { + writeLog.writeFile(logFileName, false, "\r\n"); + } else { + try { + file.createNewFile(); + writeLog.writeFile(logFileName, false, "\r\n"); + } catch (IOException e) { + e.printStackTrace(); + } + } + } else { + File file = new File(logFileName); + if (file.exists()) { + file.delete(); + } + } + } + + @SuppressWarnings("deprecation") + public void isDownReleased() { + TCPreferenceService preSer = session.getPreferenceService(); + String type = preSer.getString(4, validTypeOption).trim(); + if (type.equalsIgnoreCase("released")) { + isDownReleased = true; + } + } + + @SuppressWarnings("deprecation") + private void getIsShowLog() { + TCPreferenceService preSer = session.getPreferenceService(); + String value = preSer.getString(4, isShowLogOption).trim(); + if (value.equalsIgnoreCase("true")) { + isShowLog = true; + } + } + + private void writeLogFile(String fileName, String content) { + if (isShowLog) { + content = content + "\r\n"; + writeLog.writeFile(fileName, true, content); + } + } + + private void writeSuccessfulLogFile(String fileName, String content) { + content = content + "\r\n"; + writeLog.writeFile(fileName, true, content); + logsList.add(content); + } + + public String getTime() { + String strTime = ""; + try { + SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss:SSS"); + strTime = bartDateFormat.format(new Date()); + } catch (Exception e) { + e.printStackTrace(); + } + return strTime; + } + + private String appendSpace(String str, int num) { + if (str.length() < num) { + for (int i = UtilApi.length(str) + 1; i <= num; i++) { + str += " "; + } + } + return str; + } + + /** + * checkAccessPrivilige:检查用户对给Component是否有权限 + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + private boolean checkAccessPrivilige(TCComponentUser user, TCComponent comp, String accessName) throws TCException { + TCAccessControlService accessService = ((TCSession) session).getTCAccessControlService(); + boolean returnboolean = accessService.checkUsersPrivilege(user, comp, accessName); + return returnboolean; + } + + + + + ////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////// + @Override + public void run() { + try { + System.out.println("run________________-"); + executeOperation(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + + + ////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////// + @Override + public void executeOperation() throws Exception { + DeleteNullDir deleteNullDir1 = new DeleteNullDir(); + List list1 = deleteNullDir1.visitAll(new File("C:\\Users\\Administrator\\Desktop\\00000\\wtbg1")); + deleteNullDir1.removeNullFile(list1); + if (true) { + //return; + } + System.out.println("Begin to call filedown operation..."); + String parentPath = checkcommon.getChoosePath(); + rootPath = parentPath; + if ((parentPath != null) && (parentPath.length() == 0)) { + return; + } else { + if (checkcommon.isExistFiles(parentPath)) { + int value = ConfirmationDialog.post("提示","指定的目录下非空,是否下载?"); + if(value == ConfirmationDialog.NO){ + return; + } + } + } + writeLogFile(logFileName, "所选路径为: " + parentPath); + haveDownDataSet = new ArrayList(); + try { + writeLogFile(logFileName, "开始下载: " + getTime()); + + PackSuccessfulInfo succesfulDataset = new PackSuccessfulInfo(); + succesfulDataset.setIndex("序号"); + succesfulDataset.setItemID("零组件ID"); + succesfulDataset.setItemRev("版本"); + succesfulDataset.setItemOwner("所有者"); + succesfulDataset.setDataset("数据集"); + succesfulDataset.setRefFile("命名的引用"); + successfulInfos.add(succesfulDataset); + + progressbarthread = new ORProgressBarThread("数据集导出中......", "数据导出中,请稍等..."); + progressbarthread.start(); + session.setStatus("导出中..."); + + String currentJob = ""; + if (targetComponent instanceof TCComponentItemRevision) { + currentJob = ((TCComponentItemRevision)targetComponent).getProperty("object_name"); + getDataSetFromItemRevision((TCComponentItemRevision)targetComponent, parentPath, true); + } else if (targetComponent instanceof TCComponentItem) { + currentJob = ((TCComponentItem)targetComponent).getProperty("object_name"); + getDataSetFromItem((TCComponentItem)targetComponent, parentPath); + } else { + int importAll = ConfirmationDialog.post("提示","是否导出子文件夹下内容?"); + System.out.println("是否导出子文件夹:"+importAll); + if (targetComponent instanceof TCComponentFolder) { + currentJob = ((TCComponentFolder)targetComponent).getProperty("object_name"); + } else { + if (targetComponent instanceof TCComponentTask) { + TCComponentTask task = (TCComponentTask) targetComponent; + TCComponentProcess process = task.getProcess(); + if (process != null) { + currentJob = process.toString(); // 000009/H;1-sgitem测试 + } + } + } + getDataSetFromFolder(targetComponent, parentPath, importAll); + } + DeleteNullDir deleteNullDir = new DeleteNullDir(); + List list = deleteNullDir.visitAll(new File(rootPath)); + deleteNullDir.removeNullFile(list); + session.setReadyStatus(); + progressbarthread.setBool(true); + + writeLogFile(logFileName, " "); + writeLogFile(logFileName, "总结:"); + writeLogFile(logFileName, "存在数据集:" + haveDownDataSet.size() + "个"); + writeLogFile(logFileName, "未发布数据集:" + notReleasedDataSetCount + "个"); + writeLogFile(logFileName, "无权限数据集:" + isNotHavePriviligeCount + "个"); + writeLogFile(logFileName, "需要下载文件:" + needDownCount + "个"); + writeLogFile(logFileName, "成功下载文件:" + downDataSetCount + "个"); + writeLogFile(logFileName, "无引用文件数据集:" + notExistFiles.size() + "个"); + writeLogFile(logFileName, "未成功下载文件:" + (needDownCount - downDataSetCount) + "个"); + + PackResultInfo resultInfo = new PackResultInfo(); + SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd:HHmmss"); + String time = date.format(new Date()); + resultInfo.setTime(time); + resultInfo.setPerson(session.getUser().toString()); + resultInfo.setJob(currentJob); + resultInfo.setExistDataSetCount(haveDownDataSet.size()); + resultInfo.setNeedNum(needDownCount); + resultInfo.setSuccessNum(downDataSetCount); + resultInfo.setNoReleasedNum(notReleasedDataSetCount); + resultInfo.setNoPrivilegelNum(isNotHavePriviligeCount); + resultInfo.setNoReferenceNum(notExistFiles.size()); + resultInfo.setEqualNameNum(haveEqualDataSetCount); + resultInfo.setFailNum((needDownCount - downDataSetCount)); + resultInfo.setFailDownInfo(failDownInfos); + + // 时间:2010-06-15:8890 下载人:XXXXXX, 所选流程(目录):XXXXXXXXXX + // 存在数据集:80 + // 未发布数据集:76 + // 无权限数据集:0 + // 需下载文件:30 + // 成功下载文件:80 + // 无引用文件数据集:0 + + // 未成功下载文件列表: + // 零组件id 版本 所有者 数据集,命名的引用 + String logPath = successfulDir + "/批量下载文件日志_" + (new SimpleDateFormat("yyyyMMdd")).format(new Date()) + ".log"; + writeSuccessfulLogFile(logPath, " "); + writeSuccessfulLogFile(logPath, "==========================================================================================================================="); + writeSuccessfulLogFile(logPath, "时间:" + time + " 下载人:" + session.getUser().toString() + " 所选目标:" + currentJob); + writeSuccessfulLogFile(logPath, " "); + writeSuccessfulLogFile(logPath, "存在数据集:" + haveDownDataSet.size()); + writeSuccessfulLogFile(logPath, "未发布数据集:" + notReleasedDataSetCount); + writeSuccessfulLogFile(logPath, "无权限数据集:" + isNotHavePriviligeCount); + writeSuccessfulLogFile(logPath, "需下载文件:" + needDownCount); + writeSuccessfulLogFile(logPath, "成功下载文件:" + downDataSetCount); + writeSuccessfulLogFile(logPath, "无引用文件数据集:" + notExistFiles.size()); + writeSuccessfulLogFile(logPath, " "); + writeSuccessfulLogFile(logPath, "已成功下载文件列表:"); + writeSuccessfulLogFile(logPath, "---------------------------------------------------------------------------"); + for (int i = 0; i < successfulInfos.size(); i++) { + PackSuccessfulInfo successfulInfo = successfulInfos.get(i); + writeSuccessfulLogFile(logPath, appendSpace(successfulInfo.getIndex().trim(), 5) + appendSpace(successfulInfo.getItemID().trim(), 32) + appendSpace((successfulInfo.getItemRev() == null ? "" : successfulInfo.getItemRev().trim()), 5) + appendSpace(successfulInfo.getItemOwner().trim(), 25) + appendSpace(successfulInfo.getDataset().trim(), 50) + appendSpace(successfulInfo.getRefFile().trim(), 50)); + } + writeSuccessfulLogFile(logPath, " "); + + if (haveDownDataSet.size() == 0) { + new ShowMessageDialog("信息提示", "下载了0个数据集!", ""); + return; + } + new ResultDialog(resultInfo, session); + } catch (Exception e) { + session.setReadyStatus(); + if (progressbarthread != null) { + progressbarthread.setBool(true); + } + MessageBox.post("数据导出出现异常:" + e.getMessage(), "ERROR", 1); + e.printStackTrace(); + } + } + + /** + * getDataSetFromItemRevision:通过版本得到数据集 + * @param @return 设定文件 + * @param tcRevision + * @param perantPath 文件要保存路径 + * @throws + * @since CodingExample Ver 1.1 + */ + private void getDataSetFromItemRevision(TCComponentItemRevision tcRevision, String parentPath, Boolean isLastRevision) { + if (tcRevision == null) { + return; + } + + try { + tcRevision.refresh(); + + String Uid = tcRevision.getUid(); + //System.out.println("tcRevision.getUid()===========" + Uid); + if (allItemRevisionMap.containsKey(Uid)) { + System.out.println("return"); + return; + } + allItemRevisionMap.put(Uid, tcRevision); + + if (isLastRevision) { + TCComponent tccomps[] = tcRevision.getRelatedComponents("IMAN_specification"); + for (int i = 0; i < tccomps.length; i++) { + if (tccomps[i] instanceof TCComponentDataset) { + datasetFileDown((TCComponentDataset) tccomps[i], parentPath, tcRevision); + } + } + } + + AIFComponentContext[] comps = tcRevision.getChildren(); + if (comps != null && comps.length > 0 && comps[0] != null) { + for (int i = 0; i < comps.length; i++) { + TCComponent comp = (TCComponent) comps[i].getComponent(); + if ((comp instanceof TCComponentPseudoFolder)) { + System.out.println("property_name:" + comp.getProperty("property_name")); + if (comp.isTypeOf("PseudoFolder")) { + String objectString = comp.getProperty("object_string"); + if (objectString.equalsIgnoreCase("view") || objectString.equalsIgnoreCase("视图")) { + continue; + } + getDataSetFromFolder(comp, parentPath, 2); + } + } + } + } + } catch (TCException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * getDataSetFromItem:通过Item得到数据集 + * @param @return 设定文件 + * @param tcItem + * @param cuurentPath 文件要保存路径 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + private void getDataSetFromItem(TCComponentItem tcItem, String parentPath) { + TCComponentItemRevision tcRevision; + try { + tcItem.refresh(); + + String Uid = tcItem.getUid(); + //System.out.println("tcItem.getUid()===========" + Uid); + if (allItemMap.containsKey(Uid)) { + System.out.println("return"); + return; + } + allItemMap.put(Uid, tcItem); + + if (parentPath.endsWith("\\")) { + parentPath = parentPath.substring(0, parentPath.length() - 1); + } + if(tcItem.getProperty("object_name").equals("采购单")) { + parentPath += "\\" + tcItem.getProperty("object_name"); + } else + parentPath += "\\" + tcItem.getProperty("item_id") +" "+ tcItem.getProperty("object_name"); + File file = new File(parentPath); + if (!file.exists()) { + file.mkdir(); + } + + TCComponentItemRevision tcLastRevision = tcItem.getLatestItemRevision(); + + AIFComponentContext[] comps = tcItem.getChildren(); + if (comps != null && comps.length > 0 && comps[0] != null) { + for (int i = 0; i < comps.length; i++) { + TCComponent comp = (TCComponent) comps[i].getComponent(); + if ((comp instanceof TCComponentItemRevision)) { + System.out.println("property_name:" + comp.getProperty("object_name")); + tcRevision = (TCComponentItemRevision)comp; + if (tcRevision.getProperty("item_revision_id").equals(tcLastRevision.getProperty("item_revision_id"))) { + getDataSetFromItemRevision(tcLastRevision, parentPath, true); + } else { + getDataSetFromItemRevision(tcRevision, parentPath, false); + } + } + } + } + } catch (TCException e1) { + e1.printStackTrace(); + } + } + + /** + * getTargetCom:得到数据集对象 + * @param @return 设定文件 + * @param aif + * @param parentPath 文件要保存路径 + * @param importAll importAll=2要导出子文件夹,1只是导出第一层子文件。 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + private void getDataSetFromFolder(InterfaceAIFComponent aif, String parentPath, int importAll) { + String Uid = aif.getUid(); + //System.out.println("aif.getUid()===========" + Uid); + if (allComponentMap.containsKey(Uid)) { + System.out.println("return"); + return; + } + allComponentMap.put(Uid, aif); + + //System.out.println("parentPath1=============" + parentPath); + try { + if (parentPath.endsWith("\\")) { + parentPath = parentPath.substring(0, parentPath.length() - 1); + } + if (aif instanceof TCComponentTask) { + parentPath += "\\" + ((TCComponentTask)aif).getProperty("object_name"); + } else if ((aif instanceof TCComponentFolder)) { + parentPath += "\\" + ((TCComponentFolder)aif).getProperty("object_name"); + } else if ((aif instanceof TCComponentPseudoFolder)) { + parentPath += "\\" + ((TCComponentPseudoFolder)aif).getProperty("object_string"); + } + } catch (TCException e) { + e.printStackTrace(); + } + + try { + AIFComponentContext[] getChild = aif.getChildren(); + int count = 0; + if (getChild != null) { + count = getChild.length; + } + //System.out.println("count=============" + count); + for (int i = 0; i < count; i++) { + InterfaceAIFComponent childComponent = getChild[i].getComponent(); + if (childComponent instanceof TCComponentDataset) { + File file = new File(parentPath); + if (!file.exists()) { + file.mkdir(); + } + //System.out.println("parentPath2=============" + parentPath); + datasetFileDown((TCComponentDataset)childComponent, parentPath, null); + } else if (childComponent instanceof TCComponentItemRevision) { + File file = new File(parentPath); + if (!file.exists()) { + file.mkdir(); + } + //System.out.println("parentPath2=============" + parentPath); + getDataSetFromItemRevision((TCComponentItemRevision)childComponent, parentPath, true); + } else if (childComponent instanceof TCComponentItem) { + File file = new File(parentPath); + if (!file.exists()) { + file.mkdir(); + } + //System.out.println("parentPath2=============" + parentPath); + getDataSetFromItem((TCComponentItem)childComponent, parentPath); + } else if (childComponent instanceof TCComponentTask || childComponent instanceof TCComponentFolder || childComponent instanceof TCComponentPseudoFolder) { + if (importAll == 2) { + File file = new File(parentPath); + if (!file.exists()) { + file.mkdir(); + } + System.out.println("parentPath2=============" + parentPath); + getDataSetFromFolder(childComponent, parentPath, 2); + } + } + } + } catch (Exception e) { + session.setReadyStatus(); + progressbarthread.setBool(true); + MessageBox.post("在提取数据时出现异常:" + e.getMessage(), "ERROR", 1); + e.printStackTrace(); + } + } + + /** + * datasetFileDown:导出数据集对象的引用文件 + * @param @return 设定文件 + * @param dataset + * @param fileCurrentPath + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + private void datasetFileDown(TCComponentDataset dataSet, String fileCurrentPath, TCComponentItemRevision itemRevision) { + try { + dataSet.refresh(); + } catch (TCException e2) { + e2.printStackTrace(); + } + if (haveDownDataSet != null) { + if (haveDownDataSet.contains(dataSet)) { + return; + } + } + + haveDownDataSet.add(dataSet); + PackFailDownInfo dataSetInfo = new PackFailDownInfo(); + try { + String itemID = ""; + String rev = ""; + if (itemRevision != null) { + itemID = itemRevision.getProperty("item_id"); + rev = itemRevision.getProperty("current_revision_id"); + } + String owner = dataSet.getProperty("owning_user"); + dataSetInfo.setOwner(owner); + dataSetInfo.setItemId(itemID); + dataSetInfo.setRev(rev); + dataSetInfo.setDatasetName(dataSet.toString()); + dataSetInfo.setDataSet(dataSet); + dataSetInfo.setItemRev(itemRevision); + } catch (TCException e3) { + writeLogFile(logFileName, e3.getMessage()); + e3.printStackTrace(); + } + + writeLogFile(logFileName, "存在数据集:" + dataSet.toString()); + // System.out.println("dataSet............" + dataSet.toString()); + try { + String release = dataSet.getProperty("release_status_list").trim(); + if (release != null) { + if (release.length() == 0) { + notReleasedDataSetCount++; + writeLogFile(logFileName, "未发布"); + if (isDownReleased) { + dataSetInfo.setReason("未发布"); + failDownInfos.add(dataSetInfo); + writeLogFile(logFileName, ""); + return; + } + } else { + writeLogFile(logFileName, "已经发布"); + } + } + } catch (TCException e2) { + e2.printStackTrace(); + } + try { + boolean isCanExport = false; + isCanExport = checkAccessPrivilige(session.getUser(), dataSet, "EXPORT"); + if (!isCanExport) { + ++isNotHavePriviligeCount; + dataSetInfo.setReason("没有导出权限"); + failDownInfos.add(dataSetInfo); + writeLogFile(logFileName, "没有导出权限"); + writeLogFile(logFileName, " "); + return; + } else { + writeLogFile(logFileName, "有导出权限 "); + } + } catch (TCException e1) { + e1.printStackTrace(); + } + TCComponentTcFile tcFile = null; + String fileName = ""; + try { + if ((dataSet.getTcFiles() != null) && (dataSet.getTcFiles().length > 0)) { + for (int i = 0; i < dataSet.getTcFiles().length; i++) { + tcFile = dataSet.getTcFiles()[i]; + if (tcFile == null) { + return; + } + tcFile.refresh(); + fileName = tcFile.getProperty("original_file_name"); + if (fileName != null) { + needDownCount++; + dataSetInfo.setFilePath(fileCurrentPath); + dataSetInfo.setReference_file(fileName); + dataSetInfo.setNeedDown("true"); + String fileType = ""; + String preFileName = ""; + int index = fileName.lastIndexOf("."); + if (index > 0) { + fileType = fileName.substring(index, fileName.length()); + preFileName = fileName.substring(0, index); + } else { + preFileName = fileName; + } + boolean flag = checkcommon.existFile(fileCurrentPath, fileName); + if (flag) { + haveEqualDataSetCount++; + int pos = fileName.indexOf('.'); + if (pos > 0) { + fileName = preFileName + "_" + UtilApi.getTimeNum() + fileType; + } + } + if (fileName.indexOf('/') >= 0) { + fileName = fileName.replace('/', '_'); + } + downCount = 0; + getTCFile(tcFile, fileCurrentPath, fileName, dataSetInfo); + } + } + } else { + dataSetInfo.setReason("不存在引用文件"); + failDownInfos.add(dataSetInfo); + notExistFiles.add(dataSet.toString()); + writeLogFile(logFileName, "不存在引用文件!"); + } + writeLogFile(logFileName, " "); + } catch (Throwable e) { + writeLogFile(logFileName, "导出文件时出现异常!"); + writeLogFile(logFileName, e.getMessage()); + writeLogFile(logFileName, " "); + e.printStackTrace(); + } + } + + private File getTCFile(TCComponentTcFile tcFile, String fileCurrentPath, String fileName, PackFailDownInfo dataSetInfo) { + ++downCount; + if (downCount == 2) { + writeLogFile(logFileName, "第二次下载"); + } + File file = null; + try { + file = tcFile.getFile(fileCurrentPath, fileName); + if (file != null) { + ++downDataSetCount; + writeLogFile(logFileName, "导出文件:" + fileName + " " + getTime()); + writeLogFile(logFileName, " "); + // successfulInfos + PackSuccessfulInfo succesfulDataset = new PackSuccessfulInfo(); + succesfulDataset.setIndex(String.valueOf(downDataSetCount)); + succesfulDataset.setItemID(dataSetInfo.getItemId()); + succesfulDataset.setItemRev(dataSetInfo.getRev()); + succesfulDataset.setItemOwner(dataSetInfo.getOwner()); + succesfulDataset.setDataset(dataSetInfo.getDatasetName()); + succesfulDataset.setRefFile(file.getName()); + successfulInfos.add(succesfulDataset); + } else { + writeLogFile(logFileName, "没有导出文件!"); + } + } catch (Throwable e) { + writeLogFile(logFileName, "文件导出时出现异常"); + String exceptionMessage = e.getMessage(); + writeLogFile(logFileName, exceptionMessage); + writeLogFile(logFileName, " "); + e.printStackTrace(); + if (downCount < 2) { + file = getTCFile(tcFile, fileCurrentPath, fileName, dataSetInfo); + } else { + dataSetInfo.setReason(exceptionMessage); + failDownInfos.add(dataSetInfo); + } + } + return file; + } +} diff --git a/src/cn/com/customization/download/DeleteNullDir.java b/src/cn/com/customization/download/DeleteNullDir.java new file mode 100644 index 0000000..79d67c2 --- /dev/null +++ b/src/cn/com/customization/download/DeleteNullDir.java @@ -0,0 +1,51 @@ +package cn.com.customization.download; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +/** + * 删除指定目录下的所有空文件夹 + * + * @author wxg + * + */ +public class DeleteNullDir { + List list = new ArrayList(); + // 得到某一目录下的所有文件夹 + public List visitAll(File root) + { + File[] dirs = root.listFiles(); + if (dirs != null) + { + for (int i = 0; i < dirs.length; i++) + { + if (dirs[i].isDirectory()) + { + list.add(dirs[i]); + } + visitAll(dirs[i]); + } + } + return list; + } + /** + * 删除空的文件夹 + * @param list + */ + public void removeNullFile(List list) + { + for (int i = list.size() - 1; i >= 0; i--) + { + File temp = list.get(i); + System.out.println("name:" + temp.getPath()); + // 是目录且为空 + if (temp.isDirectory() && temp.listFiles().length <= 0) + { + System.out.println("delete:" + temp.getPath()); + temp.delete(); + } + } + } +} + diff --git a/src/cn/com/customization/imports/ImportBatchDirectoryCommand.java b/src/cn/com/customization/imports/ImportBatchDirectoryCommand.java new file mode 100644 index 0000000..a37f438 --- /dev/null +++ b/src/cn/com/customization/imports/ImportBatchDirectoryCommand.java @@ -0,0 +1,37 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: BatchDownLoadFileCommand.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2017-5-24 上午09:40:43 SZ Ini 初始化文件 +#======================================================================================================= +*/ +package cn.com.customization.imports; + +import cn.com.customization.imports.importfiles.ImportFile; + +import com.teamcenter.rac.aif.AbstractAIFCommand; +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.kernel.TCException; + +public class ImportBatchDirectoryCommand extends AbstractAIFCommand { + + public AbstractAIFUIApplication application; + public ImportBatchDirectoryCommand(AbstractAIFUIApplication abstractaifapplication) throws TCException { + application = abstractaifapplication; + execute(); + } + + private void execute() throws TCException { + new Thread() { + public void run() { + new ImportFile(application, true); + } + }.start(); + } + +} diff --git a/src/cn/com/customization/imports/ImportBatchDirectoryHandler.java b/src/cn/com/customization/imports/ImportBatchDirectoryHandler.java new file mode 100644 index 0000000..ebc65d0 --- /dev/null +++ b/src/cn/com/customization/imports/ImportBatchDirectoryHandler.java @@ -0,0 +1,43 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: ImportBatchDirectoryHandler.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2017-5-24 上午10:40:43 SZ Ini 初始化文件 +#======================================================================================================= +*/ +package cn.com.customization.imports; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.commands.IHandler; +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCException; + +public class ImportBatchDirectoryHandler extends AbstractHandler implements IHandler{ + + /* + * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) + */ + public Object execute(ExecutionEvent arg0) throws ExecutionException { + AbstractAIFUIApplication app = AIFUtility.getCurrentApplication(); + try { + ImportBatchDirectoryCommand command= new ImportBatchDirectoryCommand(app); + command.executeModal(); + } + catch (TCException e) { + e.printStackTrace(); + } + catch (Exception e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/cn/com/customization/imports/ImportBatchFileCommand.java b/src/cn/com/customization/imports/ImportBatchFileCommand.java new file mode 100644 index 0000000..7e2b111 --- /dev/null +++ b/src/cn/com/customization/imports/ImportBatchFileCommand.java @@ -0,0 +1,49 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: ImportBatchFileCommand.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2017-5-24 上午09:40:43 SZ Ini 初始化文件 +#======================================================================================================= + */ +package cn.com.customization.imports; + +import cn.com.customization.imports.importfiles.ImportFile; + +import com.teamcenter.rac.aif.AbstractAIFCommand; +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.kernel.TCException; + +public class ImportBatchFileCommand extends AbstractAIFCommand { + + public AbstractAIFUIApplication application; + + public ImportBatchFileCommand(AbstractAIFUIApplication abstractaifapplication) throws TCException { + application = abstractaifapplication; + execute(); + } + + private void execute() throws TCException { +// System.out.println("--------------------------1"); + //new ImportFile(application, false); +// Display display = Display.getDefault(); +// display.asyncExec(new Runnable(){ +// +// @Override +// public void run() { +// new ImportFile(application, false); +// } +// }); + + new Thread() { + public void run() { +// System.out.println("--------------------------2"); + new ImportFile(application, false); + } + }.start(); + } +} diff --git a/src/cn/com/customization/imports/ImportBatchFileHandler.java b/src/cn/com/customization/imports/ImportBatchFileHandler.java new file mode 100644 index 0000000..a7fda35 --- /dev/null +++ b/src/cn/com/customization/imports/ImportBatchFileHandler.java @@ -0,0 +1,43 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: BatchDownLoadFileHandler.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2017-5-24 上午09:40:43 SZ Ini 初始化文件 +#======================================================================================================= +*/ +package cn.com.customization.imports; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.commands.IHandler; +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCException; + +public class ImportBatchFileHandler extends AbstractHandler implements IHandler{ + + /* + * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) + */ + public Object execute(ExecutionEvent arg0) throws ExecutionException { + AbstractAIFUIApplication app = AIFUtility.getCurrentApplication(); + try { + ImportBatchFileCommand command= new ImportBatchFileCommand(app); + command.executeModal(); + } + catch (TCException e) { + e.printStackTrace(); + } + catch (Exception e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/cn/com/customization/imports/importfiles/CreateDataSet.java b/src/cn/com/customization/imports/importfiles/CreateDataSet.java new file mode 100644 index 0000000..49e1f4a --- /dev/null +++ b/src/cn/com/customization/imports/importfiles/CreateDataSet.java @@ -0,0 +1,622 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: CreateDataSet.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-18 下午04:57:58 tyl Ini 初始化文件 +# 2011-4-21 16:11 liqz Modify 文件个数限制由原来的200个改为500个 +# 2012-2-28 liqz Modify 如果导入的是dwg文件,则将图纸属性同步到form中 +# 2012-3-27 liqz Modify 屏蔽2012-2-28日修改的同步图纸的代码 +#======================================================================================================= + */ +package cn.com.customization.imports.importfiles; + +import java.io.BufferedReader; +import java.io.File; +import java.io.InputStreamReader; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.com.customization.util.GetMessagePromptDialog; + +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.commands.paste.PasteCommand; +import com.teamcenter.rac.kernel.NamedReferenceContext; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentDataset; +import com.teamcenter.rac.kernel.TCComponentDatasetDefinition; +import com.teamcenter.rac.kernel.TCComponentDatasetDefinitionType; +import com.teamcenter.rac.kernel.TCComponentDatasetType; +import com.teamcenter.rac.kernel.TCComponentFolder; +import com.teamcenter.rac.kernel.TCComponentForm; +import com.teamcenter.rac.kernel.TCComponentItemRevision; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.kernel.TCTypeService; +import com.teamcenter.rac.util.MessageBox; + +public class CreateDataSet { + private TCSession session; + private ORProgressBarThread progressbarthread = null; + private AbstractAIFUIApplication app; + private boolean isHaveShowMessage = false; + private int selectFileCount = 0; + private int importFileCount = 0; + private int failImportFileCount = 0; + private boolean isImportFolder = false; + private boolean isError = false; + private Map fileTypeList; + private TCComponent targetRelComponent = null; + + public CreateDataSet(AbstractAIFUIApplication app, boolean isImportFolder, ORProgressBarThread progressbarthread, TCComponent targetRelComponent) { + this.app = app; + this.session = (TCSession) app.getSession(); + this.progressbarthread = progressbarthread; + this.isImportFolder = isImportFolder; + this.targetRelComponent = targetRelComponent; + fileTypeList = new HashMap(); + fileTypeList = new GetAllOptionValue(app).getFileTypeFromOption(); + } + + /** + * getImportFile:得到用户所选择的文件 + * + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ +// public boolean getImportFile(List filepath, String filter, TCComponent parentCom) { + public boolean getImportFile(List filepath, String filter, TCComponent parentCom,String strRelName) { + List filelist = filepath; + selectFileCount = filelist.size(); + System.out.println("selectFileCount = "+selectFileCount); + if (parentCom != null) { + try { + isError = false; + if (filelist.size() > 0) { + int importNum = GetCommonInfo.getSuccessNum(); + System.out.println("importNum = "+importNum); + for (int i = 0; i < filelist.size(); i++) { + if (importNum + importFileCount >= 500) { + progressbarthread.setBool(true); + session.setReadyStatus(); + isError = true; + MessageBox.post(AIFUtility.getActiveDesktop().getShell(), "单次导入超过500个文件限制,程序被中止!", "信息提示", MessageBox.INFORMATION); + return isError; + } + if (!isError) { + isError = false; + createDataSet(filelist.get(i), parentCom,strRelName); + } else { + progressbarthread.setBool(true); + session.setReadyStatus(); + return isError; + } + } + progressbarthread.setBool(true); + session.setReadyStatus(); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + failImportFileCount = selectFileCount - importFileCount; + GetCommonInfo.setNeedNum(selectFileCount + GetCommonInfo.getNeedNum()); + GetCommonInfo.setFailNum(failImportFileCount + GetCommonInfo.getFailNum()); + GetCommonInfo.setSuccessNum(importFileCount + GetCommonInfo.getSuccessNum()); + } + } + return isError; + } + + /** + * createDataSet:将数据集导入到相应的版本下 + * + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + private void createDataSet(String filePath, TCComponent parentCom,String strRelName) { + File file = new File(filePath); + int equalsCount = 0; + boolean isrename = false; + if (file.isFile()) { + String name = file.getName(); + // String strDatasetName = name.substring(0, name.lastIndexOf(".")); + String strDatasetName = name; + byte[] bytestr = strDatasetName.replace(" ", "").getBytes(); + // 数据集名称过长,取前128字节 + if (bytestr.length > 128) { + strDatasetName = new String(bytestr, 0, 128); + } + String suffix = name.substring(name.lastIndexOf(".") + 1); + suffix = suffix.toLowerCase(); + +// List getAllDataSetNames = new GetAllDataSetNames().getDatasetNames(parentCom); + List getAllDataSetNames = null; + if(suffix.equalsIgnoreCase("jt") || suffix.equalsIgnoreCase("jpg")){ + getAllDataSetNames = new GetAllDataSetNames().getDatasetNames(parentCom,"IMAN_Rendering"); + }else{ + getAllDataSetNames = new GetAllDataSetNames().getDatasetNames(parentCom,strRelName); + } + if ((getAllDataSetNames != null) && (getAllDataSetNames.size() > 0)) { + for (int i = 0; i < getAllDataSetNames.size(); i++) { + if (getAllDataSetNames.get(i).equals(strDatasetName)) { + if (equalsCount == 0) { + ++equalsCount; + } else { + ++equalsCount; + } + } + } + } + if ((equalsCount == 0) || (isHaveShowMessage)) { + if (isImportFolder) { +// if (parentCom instanceof TCComponentFolder) { +// addDataSetToFolder((TCComponentFolder) parentCom, strDatasetName, suffix, filePath); + addDataSetToFolder(parentCom, strDatasetName, suffix, filePath,strRelName); +// } + } else { + if (parentCom instanceof TCComponentItemRevision) { + if(suffix.equalsIgnoreCase("jt") || suffix.equalsIgnoreCase("jpg")){ + addDataSetToItemRevision((TCComponentItemRevision) parentCom, strDatasetName, suffix, filePath,fileTypeList,"IMAN_Rendering"); + }else{ + addDataSetToItemRevision((TCComponentItemRevision) parentCom, strDatasetName, suffix, filePath,fileTypeList,"IMAN_specification"); + } + } + } + // 将重命名后的文件删除 + if (isrename) { + File renamedFile = new File(filePath); + { + if (renamedFile.exists()) { + renamedFile.delete(); + } + } + } + } else { + isHaveShowMessage = false; + if (equalsCount > 0) { + progressbarthread.setBool(true); + session.setReadyStatus(); + int value = new GetMessagePromptDialog("信息提示", "存在相同名称的数据集【" + strDatasetName + "】,是否按追加方式导入?").getValue(); + isHaveShowMessage = true; + if (value == 0) { + progressbarthread = new ORProgressBarThread("数据集导入中.....", "数据导入中,请稍等..."); + progressbarthread.start(); + session.setStatus("正在导入..."); + if (isImportFolder) { + if (parentCom instanceof TCComponentFolder) { + addDataSetToFolder((TCComponentFolder) parentCom, strDatasetName, suffix, filePath,strRelName); + } + } else { + if (parentCom instanceof TCComponentItemRevision) { + if(suffix.equalsIgnoreCase("jt") || suffix.equalsIgnoreCase("jpg")){ + addDataSetToItemRevision((TCComponentItemRevision) parentCom, strDatasetName, suffix, filePath,fileTypeList,"IMAN_Rendering"); + }else{ + addDataSetToItemRevision((TCComponentItemRevision) parentCom, strDatasetName, suffix, filePath,fileTypeList,"IMAN_specification"); + } + } + } + if (isrename) { + File renamedFile = new File(filePath); + { + if (renamedFile.exists()) { + renamedFile.delete(); + } + } + } + } else { + isError = true; + progressbarthread.setBool(true); + session.setReadyStatus(); + return; + } + } + } + } + } + + /** + * createDatasetToRelation:在选择的关系文件夹下创建数据集 + * @param String 文件路径 + * @param TCComponentItemRevision 关系文件夹所在的 item Revision + * @param String 关系文件夹名称 + * */ + private void createDatasetToRelation(String filePath,TCComponentItemRevision itemRev,String strRelName){ + try { + File file = new File(filePath); + if (file.isFile()) { + String name = file.getName(); + String suffix = name.substring(name.lastIndexOf(".") + 1); + suffix = suffix.toLowerCase(); + + if(suffix.equalsIgnoreCase("dwg")){ + fileTypeList.put(suffix,"DWG"); + } + + String strTaskName = ""; + TCComponent[] processList = itemRev.getReferenceListProperty("process_stage_list"); + if(processList != null){ + if(processList.length >= 2){ + TCComponent taskcomp = processList[processList.length -1]; + strTaskName = taskcomp.getProperty("object_name"); + } + } + + System.out.println("createDatasetToRelation:: strTaskName = " + strTaskName); + SimpleDateFormat df = new SimpleDateFormat( "yyyyMMdd HH:mm"); + String strDatasetName = strTaskName + "_" + session.getUser().getProperty("user_name") +"_" + df.format(new Date()); + addDataSetToItemRevision(itemRev, strDatasetName, suffix, filePath,fileTypeList,strRelName); + } + } catch (TCException e) { + e.printStackTrace(); + } + } + + + /** + * addDataSet:将数据集导入到相应的版本下 + * + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + private void addDataSetToItemRevision(TCComponentItemRevision itemRevision, String strDatasetName, String suffix, String filePath,Map fileTypeList,String strRel) { + try { + TCTypeService service = session.getTypeService(); + if (service != null) { + TCComponentDatasetType datasetType = (TCComponentDatasetType) service.getTypeComponent("Dataset"); +// MessageBox.post("suffix="+suffix, "提示", MessageBox.INFORMATION); +// MessageBox.post("fileTypeList.get(suffix)="+fileTypeList.get(suffix), "提示", MessageBox.INFORMATION); + System.out.println("suffix="+suffix); +// System.out.println("fileTypeList.get(suffix)="+fileTypeList.get(suffix)); + TCComponentDataset tcd = datasetType.create(strDatasetName, "description", fileTypeList.get(suffix)); + String[] arrTargetName = { filePath }; + + String[] dataset = getFileType(datasetType, fileTypeList.get(suffix)); + tcd.setFiles(arrTargetName, dataset); + if(targetRelComponent != null){ + PasteCommand pastecommand = new PasteCommand(new TCComponent[] {tcd},new TCComponent[] {targetRelComponent},app.getDesktop()); + try { + pastecommand.executeModal(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + }else{ + itemRevision.add(strRel, tcd); + } + + /*============20120327 liqz 同步速度慢,现场要求屏蔽掉===========*/ +// if(suffix.equalsIgnoreCase("dwg")){ +// String[] arrProp = getPropertyFromOption(itemRevision); +// getDWGProperty(itemRevision, arrProp, filePath); +// } + /*============20120327 liqz 同步速度慢,现场要求屏蔽掉===========*/ + importFileCount++; + } + } catch (TCException e) { + progressbarthread.setBool(true); + session.setReadyStatus(); + if(e.getMessage().contains("属性 view 是不可修改的")){ + MessageBox.post("属性 view 是不可修改的!,请选择其他关系文件夹执行操作!","提示",MessageBox.WARNING); + }else{ + int value = new GetMessagePromptDialog("信息提示", "不可识别数据集类型的导入文件【" + filePath + "】", "是否忽略?").getValue(); + if (value == 0) { + progressbarthread = new ORProgressBarThread("数据集导入中.....", "数据导入中,请稍等..."); + progressbarthread.start(); + session.setStatus("正在导入..."); + } else { + isError = true; + } + e.printStackTrace(); + } + } + } + +// private void addDataSetToFolder(TCComponentFolder folder, String strDatasetName, String suffix, String filePath) { + private void addDataSetToFolder(TCComponent folder, String strDatasetName, String suffix, String filePath,String strRelName) { + try { + Map fileTypeList = new HashMap(); + fileTypeList = new GetAllOptionValue(app).getFileTypeFromOption(); + TCTypeService service = session.getTypeService(); + if (service != null) { + TCComponentDatasetType datasetType = (TCComponentDatasetType) service.getTypeComponent("Dataset"); + TCComponentDataset tcd = datasetType.create(strDatasetName, "description", fileTypeList.get(suffix)); + String[] arrTargetName = { filePath }; + // String[] dataset = { getFileType(datasetType, fileTypeList.get(suffix)) }; + String[] dataset = getFileType(datasetType, fileTypeList.get(suffix)); + tcd.setFiles(arrTargetName, dataset); + + if(strRelName.length() > 0){ + folder.add(strRelName, tcd); + }else{ + folder.add("contents", tcd); + } + importFileCount++; + } + } catch (TCException e) { + progressbarthread.setBool(true); + session.setReadyStatus(); + int value = new GetMessagePromptDialog("信息提示", "不可识别数据集类型的导入文件【" + filePath + "】", "是否忽略?").getValue(); + if (value == 0) { + progressbarthread = new ORProgressBarThread("数据集导入中.....", "数据导入中,请稍等..."); + progressbarthread.start(); + session.setStatus("正在导入..."); + } else { + isError = true; + } + e.printStackTrace(); + } + } + + /** + * getFileType:将数据集相应的引用文件的类型 + * + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + private String[] getFileType(TCComponentDatasetType datasetType, String tctype) { + List typeList = new ArrayList(); + if (tctype.equalsIgnoreCase("CATPart")) { + typeList.add("catpart"); + } else if (tctype.equalsIgnoreCase("CATDrawing")) { + typeList.add("catdrawing"); + } else if (tctype.equalsIgnoreCase("CATProduct")) { + typeList.add("catproduct"); + } else if(tctype.equalsIgnoreCase("MSWordX") || tctype.equalsIgnoreCase("MSWord")){ + typeList.add("word"); + }else if(tctype.equalsIgnoreCase("MSExcelX") || tctype.equalsIgnoreCase("MSExcel")){ + typeList.add("excel"); + }else if(tctype.equalsIgnoreCase("ACADDWG")){ + typeList.add("DWG"); + }else if(tctype.equalsIgnoreCase("DirectModel")){ + typeList.add("JTPART"); + }else { + try { + TCTypeService service = session.getTypeService(); + TCComponentDatasetDefinitionType dsdefType; + dsdefType = (TCComponentDatasetDefinitionType) service.getTypeComponent("DatasetType"); + TCComponentDatasetDefinition definition = dsdefType.find(tctype); + NamedReferenceContext[] contexts = definition.getNamedReferenceContexts(); + + if ((contexts != null) && (contexts.length > 0)) { + for (int m = 0; m < contexts.length; m++) { + //System.out.println("contexts[m].getNamedReference()="+contexts[m].getNamedReference()); + //MessageBox.post("contexts[m]="+contexts[m].getNamedReference(), "提示", MessageBox.INFORMATION); + typeList.add(contexts[m].getNamedReference()); + } + } + } catch (TCException e) { + progressbarthread.setBool(true); + session.setReadyStatus(); + e.printStackTrace(); + } + } + String[] types = new String[typeList.size()]; + for (int i = 0; i < typeList.size(); i++) { + types[i] = (String) typeList.get(i); + System.out.println("types[i]="+types[i]); + } + //MessageBox.post("types="+types.toString(), "提示", MessageBox.INFORMATION); + System.out.println("types="+types.toString()); + return types; + } + + /** + * getSubmitFile:根据文件列表导入数据到item Revision的指定关系下 + * @param List 文件列表的 List + * @param TCComponentItemRevision 关系对象所在的item Revision对象 + * @param String 关系文件夹名称 + * */ + public boolean getSubmitFile(List filepaths ,TCComponentItemRevision revision,String strRelName){ + List filelist = filepaths; + selectFileCount = filelist.size(); + if (revision != null) { + try { + isError = false; + if (filelist.size() > 0) { + int importNum = GetCommonInfo.getSuccessNum(); + for (int i = 0; i < filelist.size(); i++) { + if (importNum + importFileCount >= 500) { + progressbarthread.setBool(true); + session.setReadyStatus(); + isError = true; + MessageBox.post(AIFUtility.getActiveDesktop().getShell(), "单次导入超过500个文件限制,程序被中止!", "信息提示", MessageBox.INFORMATION); + return isError; + } + if (!isError) { + isError = false; + createDatasetToRelation(filelist.get(i),revision,strRelName); + } else { + progressbarthread.setBool(true); + session.setReadyStatus(); + return isError; + } + } + progressbarthread.setBool(true); + session.setReadyStatus(); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + failImportFileCount = selectFileCount - importFileCount; + GetCommonInfo.setNeedNum(selectFileCount + GetCommonInfo.getNeedNum()); + GetCommonInfo.setFailNum(failImportFileCount + GetCommonInfo.getFailNum()); + GetCommonInfo.setSuccessNum(importFileCount + GetCommonInfo.getSuccessNum()); + } + } + return isError; + } + + /** + * getPropertyFromOption:根据当前选定的Item类型,从首选项获取该类型需要同步的属性 + * @param TCComponentItemRevision itemRevision + * @return String[] revision和form的属性对应关系数组 + * */ + @SuppressWarnings("unused") + private String[] getPropertyFromOption(TCComponentItemRevision itemRevision){ + String[] arrOption = itemRevision.getSession().getPreferenceService().getStringValues("Dacastal_AutoCAD_Map"); + if(arrOption == null || arrOption.length == 0){ + return null; + } + + String[] arrProp = new String[2]; + StringBuffer strRevisionProp = new StringBuffer(); + StringBuffer strFormProp = new StringBuffer(); + + String strType = itemRevision.getType(); + for(int i = 0; i < arrOption.length ;i++){ + String strTemp = arrOption[i]; + if(strTemp.startsWith(strType)){ + int index = strTemp.indexOf("."); + if(index > 0 ){ + String strOptionType = strTemp.substring(0,index); + String value = strTemp.substring(index + 1); + + if(strOptionType.equalsIgnoreCase(strType)){ + if(strRevisionProp.length() == 0){ + strRevisionProp.append(value); + }else{ + strRevisionProp.append(",").append(value); + } + }else{ + if(strFormProp.length() == 0){ + strFormProp.append(value); + }else{ + strFormProp.append(",").append(value); + } + } + } + } + } + + System.out.println("strRevisionProp = " + strRevisionProp); + System.out.println("strFormProp = " + strFormProp); + + arrProp[0] = strRevisionProp.toString(); + arrProp[1] = strFormProp.toString(); + return arrProp; + } + + /** + * getDWGProperty::根据属性名对应关系获取DWG图纸的属性值 + * @param TCComponentItemRevision revision + * @param String[] revision和form的属性对应关系数组 + * @param strFilePath DWG文件路径 + * */ + @SuppressWarnings("unused") + private void getDWGProperty(TCComponentItemRevision revision,String[] pArrProp,String strFilePath){ + if(pArrProp == null){ + return; + } + HashMap mapRevProp = new HashMap(); + HashMap mapRevFormProp = new HashMap(); + + Runtime rn = Runtime.getRuntime(); + Process p = null; + try { + String str = System.getenv("TPR"); + if (str.endsWith("\\")) { + str = str + "plugins\\"; + } else { + str = str + "\\plugins\\"; + } + str = "\"" + str + "DxfExportExample.exe\"" + " \"" + strFilePath + "\" \"" + pArrProp[0] + "\" \"" + pArrProp[1] + "\""; + System.out.println("getDWGProperty:: str=" + str); + p = rn.exec("cmd /c start exit && " + str); + BufferedReader inputBufferedReader = new BufferedReader(new InputStreamReader(p.getInputStream())); + BufferedReader errorinputBufferedReader = new BufferedReader(new InputStreamReader(p.getErrorStream())); + String line = null; + String errorline = null; + + while ((line = inputBufferedReader.readLine()) != null) { + System.out.println("从exe返回属性名和值: line = " + line); + if(line.contains(":")){ + String[] arrType = line.split(":"); + if(arrType[0].equalsIgnoreCase("ItemRevision")){ + if(arrType[1].contains(";")){ + String[] arrRevPropValue = arrType[1].split(";"); + for(int i = 0 ; i < arrRevPropValue.length;i++){ + String[] temp = arrRevPropValue[i].split("="); + if(temp[0].equalsIgnoreCase("item_revision_id") || temp[0].equalsIgnoreCase("item_id")){ + continue; + } + if(temp.length == 2){ + mapRevProp.put(temp[0],temp[1]); + }else{ + mapRevProp.put(temp[0],""); + } + } + }else{ + String[] temp = arrType[1].split("="); + if(temp[0].equalsIgnoreCase("item_revision_id") || temp[0].equalsIgnoreCase("item_id")){ + continue; + } + if(temp.length == 2){ + mapRevProp.put(temp[0],temp[1]); + }else{ + mapRevProp.put(temp[0],""); + } + } + }else if(arrType[0].equalsIgnoreCase("ItemRevision Master")){ + if(arrType[1].contains(";")){ + String[] arrRevFormPropValue = arrType[1].split(";"); + for(int i = 0 ; i < arrRevFormPropValue.length;i++){ + String[] temp = arrRevFormPropValue[i].split("="); + if(temp.length == 2){ + mapRevFormProp.put(temp[0],temp[1]); + }else{ + mapRevFormProp.put(temp[0],""); + } + } + }else{ + String[] temp = arrType[1].split("="); + if(temp.length == 2){ + mapRevFormProp.put(temp[0],temp[1]); + }else{ + mapRevFormProp.put(temp[0],""); + } + } + } + } + } + while ((errorline = errorinputBufferedReader.readLine()) != null) { + System.out.println(errorline); + } + if (errorline != null) { + System.out.println("error occur..."); + p.destroy(); + } + // p.waitFor(); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("Error to run the exe"); + } + + try { + revision.setProperties(mapRevProp); + TCComponent tccomponent = revision.getRelatedComponent("IMAN_master_form_rev"); + if(tccomponent instanceof TCComponentForm){ + TCComponentForm form = (TCComponentForm) tccomponent; + form.setProperties(mapRevFormProp); + } + } catch (TCException e) { + e.printStackTrace(); + } + } +} diff --git a/src/cn/com/customization/imports/importfiles/CreateFolder.java b/src/cn/com/customization/imports/importfiles/CreateFolder.java new file mode 100644 index 0000000..82c273b --- /dev/null +++ b/src/cn/com/customization/imports/importfiles/CreateFolder.java @@ -0,0 +1,39 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: CreateFolder.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-18 下午04:58:22 tyl Ini 初始化文件 +#======================================================================================================= +*/ +package cn.com.customization.imports.importfiles; + +import com.teamcenter.rac.kernel.TCComponentFolder; +import com.teamcenter.rac.kernel.TCComponentFolderType; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCSession; + +public class CreateFolder { + + TCSession session; + + public CreateFolder(TCSession session) { + this.session = session; + } + + public TCComponentFolder createNewFolder(String name, String desc) { + try { + TCComponentFolderType folderType = (TCComponentFolderType) session.getTypeComponent("Folder"); + // TCComponentFolder newFolder = folderType.create(name, desc, + // "Folder"); + return folderType.create(name, desc, "Folder"); + } catch (TCException e) { + e.printStackTrace(); + return null; + } + } +} diff --git a/src/cn/com/customization/imports/importfiles/GetAllDataSetNames.java b/src/cn/com/customization/imports/importfiles/GetAllDataSetNames.java new file mode 100644 index 0000000..4ce1d84 --- /dev/null +++ b/src/cn/com/customization/imports/importfiles/GetAllDataSetNames.java @@ -0,0 +1,72 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: GetAllDataSetNames.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-18 下午04:59:11 tyl Ini 初始化文件 +#======================================================================================================= +*/ +package cn.com.customization.imports.importfiles; + +import java.util.ArrayList; +import java.util.List; + +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentDataset; +import com.teamcenter.rac.kernel.TCComponentFolder; +import com.teamcenter.rac.kernel.TCComponentItemRevision; +import com.teamcenter.rac.kernel.TCException; + +public class GetAllDataSetNames { + + /** + * Creates a new instance of GetAllDataSet. + */ + public GetAllDataSetNames() {} + + /** + * getDatasetInfo:得到版本下已经存在的数据集的名称 + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public List getDatasetNames(TCComponent component,String strRelName) { + List datasetNames = new ArrayList(); + try { + if (component instanceof TCComponentItemRevision) { + TCComponentItemRevision itemRevision = (TCComponentItemRevision) component; + + TCComponent[] datasets = null; + if(strRelName.length() > 0){ + datasets = (TCComponent[]) itemRevision.getRelatedComponents(strRelName); + }else{ + datasets = (TCComponent[]) itemRevision.getRelatedComponents("IMAN_specification"); + } +// TCComponent[] datasets = (TCComponent[]) itemRevision.getRelatedComponents("IMAN_specification"); + for (int j = 0; j < datasets.length; j++) { + if (datasets[j] instanceof TCComponentDataset) { + String name = datasets[j].getProperty("object_name"); + datasetNames.add(name); + } + } + } else if (component instanceof TCComponentFolder) { + TCComponentFolder folder = (TCComponentFolder) component; + TCComponent[] datasets = (TCComponent[]) folder.getRelatedComponents("contents"); + for (int j = 0; j < datasets.length; j++) { + if (datasets[j] instanceof TCComponentDataset) { + String name = datasets[j].getProperty("object_name"); + datasetNames.add(name); + } + } + } + } catch (TCException e) { + e.printStackTrace(); + } + return datasetNames; + } +} diff --git a/src/cn/com/customization/imports/importfiles/GetAllOptionValue.java b/src/cn/com/customization/imports/importfiles/GetAllOptionValue.java new file mode 100644 index 0000000..9afcd22 --- /dev/null +++ b/src/cn/com/customization/imports/importfiles/GetAllOptionValue.java @@ -0,0 +1,82 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: GetAllOptionValue.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-18 下午04:59:24 tyl Ini 初始化文件 +#======================================================================================================= +*/ +package cn.com.customization.imports.importfiles; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.kernel.TCPreferenceService; +import com.teamcenter.rac.kernel.TCSession; + +public class GetAllOptionValue { + /** + * Creates a new instance of GetAllOptionValue. + */ + private TCSession session; + + public GetAllOptionValue(AbstractAIFUIApplication app) { + this.session = (TCSession) app.getSession(); + } + + /** + * getFileTypeFromOption:选项中配置的文件类型得信息 + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public Map getFileTypeFromOption() { + Map fileTypeList = new HashMap(); + String[] values = null; + try { + if (session != null) { + TCPreferenceService ps = session.getPreferenceService(); + if (ps != null) { + values = ps.getStringValues("CUST_dataset_extension_map"); + if (values != null) { + for (int i = 0; i < values.length; i++) { + String tctype = values[i].substring(0, values[i].indexOf(":")); + String filetype = values[i].substring(values[i].indexOf(":") + 1); + fileTypeList.put(filetype.toLowerCase(), tctype); + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return fileTypeList; + } + + public List getFileType() { + List filetypelist = new ArrayList(); + Map fileTypelList = new HashMap(); + fileTypelList = getFileTypeFromOption(); + if ((fileTypelList != null) && (fileTypelList.size() > 0)) { + Set set = fileTypelList.keySet(); + Iterator it = set.iterator(); + while (it.hasNext()) { + String key = (String) it.next(); + if ((key != null) && (key.length() > 0)) { + filetypelist.add(key); + } + } + } + return filetypelist; + } +} diff --git a/src/cn/com/customization/imports/importfiles/GetChoosePath.java b/src/cn/com/customization/imports/importfiles/GetChoosePath.java new file mode 100644 index 0000000..43dbdce --- /dev/null +++ b/src/cn/com/customization/imports/importfiles/GetChoosePath.java @@ -0,0 +1,134 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: GetChoosePath.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-18 下午04:59:35 tyl Ini 初始化文件 +#======================================================================================================= +*/ +package cn.com.customization.imports.importfiles; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; + +import javax.swing.JFileChooser; + +import com.teamcenter.rac.aif.AbstractAIFUIApplication; + +public class GetChoosePath { + + /** + * Creates a new instance of GetChoosePath. + */ + private List fileTypeList = new ArrayList(); + boolean isImportFolder; + + public GetChoosePath(AbstractAIFUIApplication app, List filterFileTypes, boolean isImportFolder) { + this.fileTypeList = filterFileTypes; + this.isImportFolder = isImportFolder; + } + + /** + * getChoosePath:得到用户所选的路径 + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public List getChoosePath() { + List choosePath = new ArrayList(); +// System.out.println("-----------------------------------------------------0"); + String tempPath = System.getProperty("java.io.tmpdir"); + System.out.println("tempPath="+tempPath); + File tempFile = new File(tempPath + "\\batchimportfile.txt"); + JFileChooser jfc = null; + if (!tempFile.exists()) { + try { + tempFile.createNewFile(); + jfc = new JFileChooser(); + } catch (IOException e) { + e.printStackTrace(); + } + } else { + if (tempFile.exists()) { + BufferedReader in; + try { + in = new BufferedReader(new InputStreamReader(new FileInputStream(tempFile))); + String line; + try { + line = in.readLine(); + if ((line != null) && (line.length() > 0)) { + File file = new File(line); + if (file.exists()) { + jfc = new JFileChooser(file); + } else { + jfc = new JFileChooser(); + } + } else { + jfc = new JFileChooser(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } + } + } + jfc.setFileSelectionMode(JFileChooser.CUSTOM_DIALOG); + jfc.setInheritsPopupMenu(true); + jfc.setDialogTitle("导入数据集"); + jfc.setMultiSelectionEnabled(true); + + if ((fileTypeList != null) && (fileTypeList.size() > 0)) { + jfc.setFileFilter(new javax.swing.filechooser.FileFilter() { + @Override + public boolean accept(File f) { + if (f.isDirectory()) + return true; + String name = f.getName(); + int p = name.lastIndexOf('.'); + if (p == -1) + return false; + String suffix = name.substring(p + 1).toLowerCase(); + return fileTypeList.contains(suffix); + } + + @Override + public String getDescription() { + return null; + } + }); + } + + int openOrCancel = jfc.showSaveDialog(null); + if (openOrCancel == 0) { + try { + BufferedWriter output; + output = new BufferedWriter(new FileWriter(tempFile)); + output.write(jfc.getSelectedFile().getAbsolutePath()); + output.close(); + } catch (IOException e1) { + e1.printStackTrace(); + } + + File[] files = jfc.getSelectedFiles(); + for (int i = 0; i < files.length; i++) { + choosePath.add(files[i].getAbsolutePath()); + } + } + return choosePath; + } +} diff --git a/src/cn/com/customization/imports/importfiles/GetCommonInfo.java b/src/cn/com/customization/imports/importfiles/GetCommonInfo.java new file mode 100644 index 0000000..bf2d679 --- /dev/null +++ b/src/cn/com/customization/imports/importfiles/GetCommonInfo.java @@ -0,0 +1,70 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: GetCommonInfo.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-18 下午04:59:47 tyl Ini 初始化文件 +#======================================================================================================= +*/ +package cn.com.customization.imports.importfiles; + +public class GetCommonInfo { + + /** + * + */ + public GetCommonInfo() { + + } + + public static int successNum = 0; + public static int failNum = 0; + public static int needNum = 0; + + /** + * @return the needNum + */ + public static synchronized int getNeedNum() { + return needNum; + } + + /** + * @param needNum the needNum to set + */ + public static synchronized void setNeedNum(int needNum) { + GetCommonInfo.needNum = needNum; + } + + /** + * @return the successNum + */ + public static synchronized int getSuccessNum() { + return successNum; + } + + /** + * @param successNum the successNum to set + */ + public static synchronized void setSuccessNum(int num) { + successNum = num; + } + + /** + * @return the failNum + */ + public static synchronized int getFailNum() { + return failNum; + } + + /** + * @param failNum the failNum to set + */ + public static synchronized void setFailNum(int num) { + failNum = num; + } + +} \ No newline at end of file diff --git a/src/cn/com/customization/imports/importfiles/GetTargetComponent.java b/src/cn/com/customization/imports/importfiles/GetTargetComponent.java new file mode 100644 index 0000000..2a09e35 --- /dev/null +++ b/src/cn/com/customization/imports/importfiles/GetTargetComponent.java @@ -0,0 +1,86 @@ +/* +#============================================================================= +# +# copyright (c) 2009 Origin Enterprise Solution LTD. +# +#============================================================================= +# File name: GetTargetComponent.java +# File description: +#============================================================================= +# Date Name Action Description of Change +# 2009-11-23 tianyaling 创建 得到用户所选的对象 +# 2012-04-06 liqz 修改 “windows目录及文件导入”功能开放可以向伪文件夹中导入数据 +#============================================================================= + */ +package cn.com.customization.imports.importfiles; + +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentFolder; +import com.teamcenter.rac.kernel.TCComponentItemRevision; +import com.teamcenter.rac.util.MessageBox; + +public class GetTargetComponent { + + /** + * Creates a new instance of GetTargetComponent. + */ + private AbstractAIFUIApplication app; + + public GetTargetComponent(AbstractAIFUIApplication app) { + this.app = app; + } + + /** + * getRootComponent:得到用户所选的对象 + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public TCComponentItemRevision getItemRevision() { + if (app.getTargetComponents() != null) { + TCComponentItemRevision itemRevision = null; + TCComponent component = (TCComponent) app.getTargetComponents()[0]; + if (component != null) { + if (component instanceof TCComponentItemRevision) { + try { + itemRevision = (TCComponentItemRevision) component; + // String name = + // itemRevision.getProperty("object_name"); + } + catch (Exception e) { + e.printStackTrace(); + } + } else { + MessageBox.post("请选择一个零组件版本!", "信息提示", MessageBox.INFORMATION); + } + } + return itemRevision; + } else { + MessageBox.post("请选择一个零组件版本!", "信息提示", MessageBox.INFORMATION); + return null; + } + } + + public TCComponent getSelectedComponent() { + if (app.getTargetComponents() != null) { + TCComponent component = (TCComponent) app.getTargetComponents()[0]; + String strType = component.getType(); + System.out.println("strType = " + strType); + //Modified by liqz on 20120406 如果选择伪文件夹也可以导入 Begin +// if ((component != null) && (component instanceof TCComponentFolder) ) { + if ((component != null) && (component instanceof TCComponentFolder || strType.equals("PseudoFolder")) ) { + //Modified by liqz on 20120406 如果选择伪文件夹也可以导入 End + return component; + } else { + MessageBox.post("请选择一个文件夹!", "信息提示", MessageBox.INFORMATION); + return null; + } + } else { + MessageBox.post("请选择一个文件夹!", "信息提示", MessageBox.INFORMATION); + return null; + } + } + +} diff --git a/src/cn/com/customization/imports/importfiles/ImportFile.java b/src/cn/com/customization/imports/importfiles/ImportFile.java new file mode 100644 index 0000000..589a215 --- /dev/null +++ b/src/cn/com/customization/imports/importfiles/ImportFile.java @@ -0,0 +1,349 @@ +/* +#============================================================================= +# +# copyright (c) 2009 Origin Enterprise Solution LTD. +# +#============================================================================= +# File name: ImportFile.java +# File description: +#============================================================================= +# Date Name Action Description of Change +# 2017-5-24 上午10:40:43 SZ Ini 初始化文件 +#============================================================================= + */ +package cn.com.customization.imports.importfiles; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import cn.com.customization.util.ShowMessageDialog; + +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aif.kernel.AIFComponentContext; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCAccessControlService; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentFolder; +import com.teamcenter.rac.kernel.TCComponentItemRevision; +import com.teamcenter.rac.kernel.TCComponentUser; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCProperty; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.MessageBox; + +public class ImportFile { + /** + * Creates a new instance of ImportFile. + */ + private AbstractAIFUIApplication app; + private TCSession session; + private TCComponent selectedTarget; + private boolean isImportFolder; + private ORProgressBarThread progressbarthread = null; + private int level = 0; + private boolean isError = false; + private TCComponent parentRevision = null; + private TCComponent targetRelComponent = null; + //private boolean isPSEUDOFOLDER = false; + private String strRelName = ""; + + public ImportFile(AbstractAIFUIApplication app, boolean isImportFolder) { + this.app = app; + this.session = (TCSession) (app.getSession()); + this.isImportFolder = isImportFolder; + GetCommonInfo.setNeedNum(0); + GetCommonInfo.setFailNum(0); + GetCommonInfo.setSuccessNum(0); + getTargetComponent(); + session.setReadyStatus(); + } + + public ImportFile(AbstractAIFUIApplication app,TCComponent[] component){ + this.app = app; + this.session = (TCSession) (app.getSession()); + parentRevision = component[0]; + targetRelComponent = component[1]; + GetCommonInfo.setNeedNum(0); + GetCommonInfo.setFailNum(0); + GetCommonInfo.setSuccessNum(0); + submitDataset((TCComponentItemRevision)parentRevision); + session.setReadyStatus(); + } + + /** + * getTargetComponent:得到用户所选的对象 + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + private void getTargetComponent() { + try { + if (isImportFolder) { + selectedTarget = new GetTargetComponent(app).getSelectedComponent(); + if(selectedTarget.getType().equals("PseudoFolder")){ + //isPSEUDOFOLDER = true; + strRelName = selectedTarget.getProperty("property_name"); + AIFComponentContext[] context = selectedTarget.whereReferenced(); + selectedTarget = (TCComponent) context[0].getComponent(); + } + + if (selectedTarget != null) { + boolean isCanRevise = false; + try { + isCanRevise = checkAccessPrivilige(session.getUser(), selectedTarget, "WRITE"); + } + catch (TCException e) { + e.printStackTrace(); + } + if (isCanRevise) { + executeImport(selectedTarget); + } else { + MessageBox.post(AIFUtility.getActiveDesktop().getShell(), "您对当前目录无修改权限!", "信息提示", MessageBox.INFORMATION); + } + } + } else { + importDatasetToRevision(); + } + } catch (TCException e) { + e.printStackTrace(); + } + } + + /** + * importDatasetToRevision:导入数据集到版本 + * */ + private void importDatasetToRevision(){ + boolean isReleased = false; + selectedTarget = new GetTargetComponent(app).getItemRevision(); + if ((selectedTarget != null)) { + TCComponentItemRevision itemRevision = (TCComponentItemRevision) selectedTarget; + boolean isWritable = false; + try { + isWritable = checkAccessPrivilige(session.getUser(), itemRevision, "WRITE"); + String itemType = itemRevision.getItem().getProperty("object_type").trim(); + System.out.println("itemType==================" + itemType); + + TCComponent[] arrayOfTCComponent; + try { + TCProperty localTCProperty = itemRevision.getTCProperty("release_status_list"); + arrayOfTCComponent = localTCProperty.getReferenceValueArray(); + if (arrayOfTCComponent.length > 0) { + isReleased = true; + /*=============Added by liqz on 20110420 Begin 如果有写权限仍可以导入===============*/ + if(!isWritable){ + MessageBox.post(AIFUtility.getActiveDesktop().getShell(), "当前版本对象已经发布,你对它没有写权限,不能进行导入!", "信息提示", MessageBox.INFORMATION); + return; + } + /*=============Added by liqz on 20110420 End 如果有写权限仍可以导入===============*/ + } + } + catch (TCException e) { + e.printStackTrace(); + } + }catch (TCException e2) { + e2.printStackTrace(); + } + + if (!isReleased || isWritable) { + boolean isCreateUser = false; + try { + String currentUser = session.getUser().getUserId(); + String createUser = itemRevision.getProperty("owning_user"); + createUser = (createUser.replace(" ", "")).substring(createUser.indexOf("("), createUser.length() - 2); + if (currentUser.equalsIgnoreCase(createUser)) { + isCreateUser = true; + } + } + catch (TCException e1) { + e1.printStackTrace(); + } + boolean flagPriChild = false; + try { + flagPriChild = checkAccessPrivilige(session.getUser(), itemRevision, "IMPORT"); + } + catch (TCException e) { + e.printStackTrace(); + } + + if(!isWritable){ + MessageBox.post(AIFUtility.getActiveDesktop().getShell(), "你不具有该item版本的批量写权限!", "信息提示", MessageBox.INFORMATION); + return; + } +// if ((!flagPriChild) || (!isCreateUser)) { + if (!flagPriChild) { + MessageBox.post(AIFUtility.getActiveDesktop().getShell(), "你不具有该item版本的批量导入权限!", "信息提示", MessageBox.INFORMATION); + return; + } else { + executeImport(itemRevision); + } + } + } + } + + /** + * executeImport:实现导入 + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + private void executeImport(final TCComponent component) { + if (component != null) { + try { + if (isImportFolder) { + List filepaths = new GetChoosePath(app, new ArrayList(), true).getChoosePath(); + if ((filepaths == null) || (filepaths.size() == 0)) { return; } + progressbarthread = new ORProgressBarThread("数据集导入中.....", "数据导入中,请稍等..."); + progressbarthread.start(); + session.setStatus("正在导入..."); + for (int i = 0; i < filepaths.size(); i++) { + if (!isError) { +// importFolder(new File(filepaths.get(i)), (TCComponentFolder) selectedTarget, 0); + importFolder(new File(filepaths.get(i)), selectedTarget, 0,strRelName); + } else { + break; + } + } + } else { + List filterFileTypes = new GetAllOptionValue(app).getFileType(); + final List filepaths = new GetChoosePath(app, filterFileTypes, false).getChoosePath(); + if ((filepaths == null) || (filepaths.size() == 0)) { return; } + + progressbarthread = new ORProgressBarThread("数据集导入中.....", "数据导入中,请稍等..."); + progressbarthread.start(); + session.setStatus("正在导入..."); + isError = new CreateDataSet(app, false, progressbarthread, null).getImportFile(filepaths, "no", selectedTarget,""); + } + } + catch (Exception e) { + e.printStackTrace(); + } + finally { + progressbarthread.setBool(true); + session.setReadyStatus(); + int failNum = GetCommonInfo.getFailNum(); + int successNum = GetCommonInfo.getSuccessNum(); + int needNum = GetCommonInfo.getNeedNum(); + if (isError) { + new ShowMessageDialog("信息提示!", "成功导入" + successNum + "个文件!", ""); + } else { + /*============modified by liqz on 20110421 不限制导入级数 Begin=================*/ +// if (level > 2) { +// MessageBox.post(AIFUtility.getActiveDesktop().getShell(), "文件夹超过3级限制,导入操作被中止!", "信息提示", MessageBox.INFORMATION); +// } + /*============modified by liqz on 20110421 不限制导入级数 End=================*/ + if (failNum == 0) { + new ShowMessageDialog("信息提示!", "本次需导入" + needNum + "个文件,成功导入" + successNum + "个文件!", ""); + } else { + new ShowMessageDialog("信息提示!", "本次需导入" + needNum + "个文件,成功导入" + successNum + "个文件", "未成功导入" + failNum + "个文件"); + } + } + } + } + } + +// private void importFolder(File file, TCComponentFolder currentFolder, int level) { + private void importFolder(File file, TCComponent currentFolder, int level,String strRelName) { + if (file == null) { return; } + if (file.isDirectory()) { + TCComponentFolder folder = new CreateFolder(session).createNewFolder(file.getName(), ""); + try { + if(level == 0 && strRelName.length() > 0){ + currentFolder.add(strRelName, folder); + }else{ + currentFolder.add("contents", folder); + } + } + catch (TCException e) { + e.printStackTrace(); + } + File[] files = file.listFiles(); + List fileList = new ArrayList(); + List dirList = new ArrayList(); + for (int i = 0; i < files.length; i++) { + File listFile = files[i]; + if (listFile.isFile()) { + fileList.add(listFile.getAbsolutePath()); + } else { + dirList.add(listFile); + } + } + if ((fileList != null) && (fileList.size() > 0)) { + isError = new CreateDataSet(app, true, progressbarthread, null).getImportFile(fileList, "no", folder,""); + if (isError) { return; } + } + if ((dirList != null) && (dirList.size() > 0)) { + level = level + 1; + System.out.println("level========================" + level); + if (this.level < level) { + this.level = level; + } + /*============modified by liqz on 20110421 不限制导入级数 Begin=================*/ + for (int i = 0; i < dirList.size(); i++) { + currentFolder = folder; + if (!isError) { +// importFolder(dirList.get(i), currentFolder, level); + importFolder(dirList.get(i), currentFolder, level,strRelName); + } else { + return; + } + } + } + } else { + List fileList = new ArrayList(); + fileList.add(file.getAbsolutePath()); + isError = new CreateDataSet(app, true, progressbarthread, null).getImportFile(fileList, "no", currentFolder,strRelName); + if (isError) { return; } + } + } + + /** + * checkAccessPrivilige:检查是否有权限 + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + private boolean checkAccessPrivilige(TCComponentUser user, TCComponent comp, String accessName) throws TCException { + TCAccessControlService accessService = ((TCSession) session).getTCAccessControlService(); + boolean returnboolean = accessService.checkUsersPrivilege(user, comp, accessName); + return returnboolean; + } + + + /** + * submitDataset:执行创建(导入)数据集 + * */ + private void submitDataset(TCComponentItemRevision itemRevision){ + try{ + List filterFileTypes = new GetAllOptionValue(app).getFileType(); + List filepaths = new GetChoosePath(app, filterFileTypes, false).getChoosePath(); + if ((filepaths == null) || (filepaths.size() == 0)) { return; } + progressbarthread = new ORProgressBarThread("提交评审附件中.....", "数据提交中,请稍等..."); + progressbarthread.start(); + session.setStatus("正在提交..."); + CreateDataSet objCreate = new CreateDataSet(app, false, progressbarthread, targetRelComponent); + String strRelName = targetRelComponent.getProperty("property_name"); + objCreate.getSubmitFile(filepaths, itemRevision,strRelName); + }catch(Exception e){ + e.printStackTrace(); + }finally{ + progressbarthread.setBool(true); + session.setReadyStatus(); + int failNum = GetCommonInfo.getFailNum(); + int successNum = GetCommonInfo.getSuccessNum(); + int needNum = GetCommonInfo.getNeedNum(); + if (isError) { + new ShowMessageDialog("信息提示!", "成功提交" + successNum + "个文件!", ""); + } else { + if (failNum == 0) { + new ShowMessageDialog("信息提示!", "本次需提交" + needNum + "个文件,成功提交" + successNum + "个文件!", ""); + } else { + new ShowMessageDialog("信息提示!", "本次需提交" + needNum + "个文件,成功提交" + successNum + "个文件", "未成功导入" + failNum + "个文件"); + } + } + } + } +} diff --git a/src/cn/com/customization/imports/importfiles/ORProgressBar.java b/src/cn/com/customization/imports/importfiles/ORProgressBar.java new file mode 100644 index 0000000..d93777b --- /dev/null +++ b/src/cn/com/customization/imports/importfiles/ORProgressBar.java @@ -0,0 +1,180 @@ +/** + * @file ProgressBar.java + * + * @brief Create progress bar + * + * @author Yanghui + * + * @history + * ================================================================ + * Date Name Description of Change + * 25-July-2008 Yanghui this class is used to create + * progress bar. + */ +package cn.com.customization.imports.importfiles; + +import java.awt.Container; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; + +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JProgressBar; +import javax.swing.Timer; + +import com.teamcenter.rac.aif.AbstractAIFDialog; +import com.teamcenter.rac.util.PropertyLayout; + +/** + * @class ProgressBar + * @brief Create progress bar + * @author Yanghui + */ +@SuppressWarnings("serial") +public class ORProgressBar extends AbstractAIFDialog implements ActionListener { + /** + * @var ProgressBar.progressbar + * @brief JProgressBar + */ + private JProgressBar progressbar; + + /** + * @var ProgressBar.label + * @brief label used to tips + */ + private JLabel label; + + /** + * @var ProgressBar.timer + * @brief timer used to timing operation + */ + private Timer timer; + + /** + * @var ProgressBar.bool + * @brief bool used to flag thread return + */ + private boolean bool = false; + + /** + * @var Progressbar.registry + * @brief Registry + */ + //private Registry registry; + + /** + * @fn public ProgressBar() + * @brief constructor + * @param[in] null + */ + private String showLable = null ; + public String getShowLable() { + return showLable; + } + + public void setShowLable(String showLable) { + this.showLable = showLable; + this.label.setText(showLable); + } + + public ORProgressBar(String showlable) { + super(true); + showLable = showlable; + label = new JLabel(showLable, JLabel.CENTER); + } + + /** + * @fn public void setBool(boolean bool) + * @brief set bool value + * @param[in] bool + * @param[out] null + */ + public void setBool(boolean bool) { + this.bool = bool; + } + + /** + * @fn private void initUI() + * @brief createDialog method + * @param[in] null + * @param[out] null + */ + public void initUI() { + Container container = getContentPane(); + JPanel mainPanel = new JPanel(new PropertyLayout()); + //label = new JLabel(showLable, JLabel.CENTER); + progressbar = new JProgressBar(); + progressbar.setOrientation(JProgressBar.HORIZONTAL); + progressbar.setMinimum(0); + progressbar.setMaximum(100); + progressbar.setValue(0); + progressbar.setPreferredSize(new Dimension(200, 15)); + progressbar.setBorderPainted(true); + timer = new Timer(50, (ActionListener) this); + timer.setRepeats(false); + mainPanel.add("1.1.center", new JLabel(" ")); + mainPanel.add("2.1.center", label); + mainPanel.add("3.1.center", progressbar); + mainPanel.add("4.1.center", new JLabel(" ")); + container.add(mainPanel); + pack(); + setLocation(500, 200); + TaskThread thread = new TaskThread(this); + thread.start(); + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + bool = true; + } + }); + setVisible(true); + } + + /** + * @class TaskThread + * @brief Create progressbar + * + */ + class TaskThread extends Thread { + private ORProgressBar bar; + + public TaskThread(ORProgressBar bar) { + this.bar = bar; + } + + public void run() { + if (bool == false) { + // Set Status is running. + // session.setStatus(registry.getString("export Running")); + } + for (int i = 0; i < i + 1; i++) { + timer.start(); + int value = progressbar.getValue(); + if (value < 100) { + value = value + 5; + progressbar.setValue(value); + } else { + timer.stop(); + progressbar.setValue(0); + } + try { + sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + if (bool == true) { + bar.setVisible(false); + bar.dispose(); + return; + + } + + } + } + } + + public void actionPerformed(ActionEvent arg0) { + } +} diff --git a/src/cn/com/customization/imports/importfiles/ORProgressBarThread.java b/src/cn/com/customization/imports/importfiles/ORProgressBarThread.java new file mode 100644 index 0000000..348e4a2 --- /dev/null +++ b/src/cn/com/customization/imports/importfiles/ORProgressBarThread.java @@ -0,0 +1,40 @@ +/** + * @file ProgressBarThread.java + * + * @brief control progressBar. + * + * @author Yanghui + * + * @history + * ================================================================ + * Date Name Description of Change + * 08-Auguest-2008 Yanghui this class is used to control + * progress bar. + */ +package cn.com.customization.imports.importfiles; + +/** + * @class ProgressBarThread + * @brief Create progress bar thread + * @author Yanghui + */ +public class ORProgressBarThread extends Thread { + + private ORProgressBar bar; + + private String title; + + public ORProgressBarThread(String title,String showLable) { + this.title = title; + bar = new ORProgressBar(showLable); + } + + public void run() { + bar.setTitle(title); + bar.initUI(); + } + + public void setBool(boolean bool) { + bar.setBool(true); + } +} diff --git a/src/cn/com/customization/project/CopyFolderAndAssginToProjectDialog.java b/src/cn/com/customization/project/CopyFolderAndAssginToProjectDialog.java new file mode 100644 index 0000000..8ceb2b7 --- /dev/null +++ b/src/cn/com/customization/project/CopyFolderAndAssginToProjectDialog.java @@ -0,0 +1,450 @@ +/* +#============================================================================= +# +# opyright (c) 2009 Origin Enterprise Solution LTD. +# +#============================================================================= +# File name: CopyFolderAndAssginToProjectDialog.java +# File description: +#============================================================================= +# Date Name Action Description of Change +# 2017-5-10 Administrator Ini 初始化 +#============================================================================= + */ +package cn.com.customization.project; + +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Vector; + +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextField; +import javax.swing.ListSelectionModel; + +import com.teamcenter.rac.aif.AbstractAIFDialog; +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aif.kernel.AIFComponentContext; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.commands.paste.PasteOperation; +import com.teamcenter.rac.common.create.BOCreateDefinition; +import com.teamcenter.rac.common.create.BOCreateDefinitionFactory; +import com.teamcenter.rac.common.create.CreateInstanceInput; +import com.teamcenter.rac.common.create.ICreateInstanceInput; +import com.teamcenter.rac.common.create.SOAGenericCreateHelper; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentContextList; +import com.teamcenter.rac.kernel.TCComponentFolder; +import com.teamcenter.rac.kernel.TCComponentFolderType; +import com.teamcenter.rac.kernel.TCComponentProject; +import com.teamcenter.rac.kernel.TCComponentProjectType; +import com.teamcenter.rac.kernel.TCComponentQuery; +import com.teamcenter.rac.kernel.TCComponentQueryType; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.kernel.TCTextService; +import com.teamcenter.rac.util.ButtonLayout; +import com.teamcenter.rac.util.HorizontalLayout; +import com.teamcenter.rac.util.MessageBox; +import com.teamcenter.rac.util.PropertyLayout; +import com.teamcenter.rac.util.VerticalLayout; + +/** + * @author Administrator + */ +@SuppressWarnings({"rawtypes","unchecked"}) +public class CopyFolderAndAssginToProjectDialog extends AbstractAIFDialog { + + private static final long serialVersionUID = 1L; + TCSession session; + AbstractAIFUIApplication app; + + private JList folderList; + private JList proList; + private JTextField jt2; + private String folderType; + private InterfaceAIFComponent selectTarget; + + public CopyFolderAndAssginToProjectDialog(AbstractAIFUIApplication application, TCSession pSession, + Frame frame, boolean flag, String folderType, InterfaceAIFComponent selectTarget) { + super(frame, flag); // true + session = pSession; + app = application; + this.folderType = folderType; + this.selectTarget = selectTarget; + init(); + } + + private void init() { + setTitle("创建项目资料夹"); + JPanel jptop = new JPanel(new HorizontalLayout()); + final JPanel jptopleft = new JPanel(new PropertyLayout(2,2,2,2,2,2)); + final JPanel jptopright = new JPanel(new VerticalLayout()); + Vector folderv = listDCProjTemplFolder(); + folderList = new JList(folderv); + folderList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + jptopleft.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "请选择将要复制的文件夹", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("新宋体", 0, 12))); // NOI18N + JScrollPane folderscrollPane = new JScrollPane(); + folderscrollPane.setPreferredSize(new Dimension(210,310)); + folderscrollPane.getViewport().add(folderList); + jptopleft.add("1.1.left.center", folderscrollPane); + + Vector prov = listPro("*"); + proList = new JList(prov); + jptopright.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "指派到的项目", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("新宋体", 0, 12))); // NOI18N + + proList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + JScrollPane proscrollPane = new JScrollPane(proList); + proscrollPane.setPreferredSize(new Dimension(210,310)); + + final JTextField jt = new JTextField(30); + + jt.addKeyListener(new KeyAdapter() { + public void keyReleased(KeyEvent ke) { + char code = ke.getKeyChar(); + if (code == KeyEvent.VK_ENTER) { + System.out.println("ceshi 回车" + code + "=====" + KeyEvent.VK_ENTER); + Vector pronewVector = listPro(jt.getText()); + proList.setListData(pronewVector); + } + } + + }); + jptopright.add("top.bind.center.top", jt); + jptopright.add("top.bind.center.top", proscrollPane); + + jptop.add("1.1.center.center.resizable.resizable", jptopleft); + jptop.add("1.2.center.center.resizable.resizable", jptopright); + + JPanel jp1 = new JPanel(new HorizontalLayout()); + jt2 = new JTextField(20); + + jp1.add("left.bind.center.center", new JLabel("新创建文件夹名字")); + jp1.add("unbound.bind.center.center", jt2); + + JPanel butPanel = new JPanel(new ButtonLayout()); + JButton okbtn = new JButton("开始复制"); + JButton canceltn = new JButton("取消"); + butPanel.add(okbtn); + butPanel.add(canceltn); + canceltn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionevent) { + dispose(); + } + }); + + JPanel jpx = new JPanel(new VerticalLayout()); + jpx.add("top.bind.center.top", jptop); + jpx.add("top.bind.center.top", jp1); + jpx.add("top.bind.center.top", butPanel); + okbtn.addActionListener(new ActionListener() { + + public void actionPerformed(ActionEvent actionevent) { + try { + doCopy(); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + + MouseListener mouseListener = new MouseAdapter() { + public void mouseClicked(MouseEvent e) { + TCComponentProject tcproject = (TCComponentProject) proList.getSelectedValue(); + try { + String proid = tcproject.getStringProperty("project_id"); + jt2.setText(proid); + } catch (TCException e1) { + e1.printStackTrace(); + } + } + }; + proList.addMouseListener(mouseListener); + add(jpx); + setResizable(false); + pack(); + centerToScreen(); + setVisible(true); + } + + /** + * listDCProjTemplFolder:查询系统项目对象 + */ + public Vector listDCProjTemplFolder() { + Vector result = new Vector(); + try { + String str_key = "object_type"; + String str_value = "YSR8_ProjTemplFolder"; + +// if(folderType.equals("cDC_Projectfolder")){ +// str_value = "cDC_Kprojtemplfolder"; +// } + TCTextService textService = session.getTextService(); + TCComponentQueryType querytype = (TCComponentQueryType) session.getTypeComponent("ImanQuery"); + TCComponentQuery query = (TCComponentQuery) querytype.find("__findfolder"); + System.out.println("getTextValue===========" + textService.getTextValue(str_key)); + if (null == query) { + MessageBox.post(app.getDesktop().getShell(), "请先创建查询构建器findfolder!", "警告", MessageBox.ERROR); + return null; + } + + querytype.clearCache(); + String as[] = { textService.getTextValue(str_key) }; + String as1[] = new String[1]; + as1[0] = str_value; + query.clearCache(); + TCComponentContextList list = query.getExecuteResultsList(as, as1); // as + // =查询key + // ; + // as1 + // =查询value + TCComponentFolder tcfolder = null; + if (list != null) { + int count = list.getListCount(); + System.out.println(" folder coutn " + count); + for (int i = 0; i < count; i++) { + tcfolder = (TCComponentFolder) list.get(i).getComponent(); + result.add(tcfolder); + } + } + } catch (TCException e) { + e.printStackTrace(); + } + return result; + } + + /** + * listPro:获取系统中的项目 + */ + public Vector listPro(String str_value) { + Vector result = new Vector(); + try { + String str_key = "project_id"; + TCTextService textService = session.getTextService(); + TCComponentQueryType querytype = (TCComponentQueryType) session.getTypeComponent("ImanQuery"); + TCComponentQuery query = (TCComponentQuery) querytype.find("__findproject"); + if (null == query) { + MessageBox.post(app.getDesktop().getShell(), "请先创建查询构建器__findproject !", "警告", MessageBox.ERROR); + return null; + } + + querytype.clearCache(); + String as[] = { textService.getTextValue(str_key), textService.getTextValue("is_active")}; + // String as[] = { "project_name" }; + System.out.println("getTextValue===========" + textService.getTextValue(str_key)); + String as1[] = new String[2]; + as1[0] = str_value; + as1[1] = "true"; + query.clearCache(); + TCComponentContextList list = query.getExecuteResultsList(as, as1); // as + // =查询key + // ; + // as1 + // =查询value + TCComponentProject tcpro = null; + + if (list != null) { + int count = list.getListCount(); + System.out.println(" pro coutn " + count); + for (int i = 0; i < count; i++) { + tcpro = (TCComponentProject) list.get(i).getComponent(); + result.add(tcpro); + } + } + } catch (TCException e) { + e.printStackTrace(); + } + return result; + } + + /** + * pasteNewFolder:把对象拷贝到文件夹 + */ + public void pasteNewFolder(TCComponentFolder newFolder, InterfaceAIFComponent pasteTarget) throws Exception { // InterfaceAIFComponent[]pasteTargets + + TCComponentFolder parentcom = (TCComponentFolder)pasteTarget; + InterfaceAIFComponent childcoms = newFolder; + PasteOperation op = new PasteOperation(app,parentcom,childcoms,"contents"); + op.executeOperation(); + } + + /** + * assigntoPro:把对象指派到项目 + */ + public void assigntoPro(TCComponentProject atccomponentproject, TCComponent atccomponent) { + + TCComponentProjectType tccomponentprojecttype; + try { + tccomponentprojecttype = (TCComponentProjectType) session.getTypeComponent("TC_Project"); + tccomponentprojecttype.assignToProject(atccomponentproject, atccomponent); + } catch (TCException e) { + e.printStackTrace(); + } + } + + /** + * createFolder:创建文件夹 + */ + public void createFolder(TCComponentFolder tcf, TCComponentProject tcproject, TCComponentFolder parent) { + try { + AIFComponentContext[] aifcon = tcf.getChildren(); + for (int i = 0; i < aifcon.length; i++) { + String type = aifcon[i].getComponent().getType(); + System.out.println("in getFolderName () the type = " + type); + if (type.equals("Folder")) { + String folderName = aifcon[i].getComponent().getProperty("object_name"); + String folderDescription = ""; + String newFolderType = "Folder"; + TCComponentFolder newFolder = null; + TCComponentFolderType tccomponentfoldertype; + try { + tccomponentfoldertype = (TCComponentFolderType) session.getTypeComponent(newFolderType); + newFolder = tccomponentfoldertype.create(folderName, folderDescription, newFolderType); + + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + InterfaceAIFComponent pasteTarget = parent; + pasteNewFolder(newFolder, pasteTarget); + assigntoPro(tcproject, newFolder); + + TCComponentFolder tcfolder = (TCComponentFolder) aifcon[i].getComponent(); + createFolder(tcfolder, tcproject, newFolder); + } + } + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + /** + * createFolder:创建文件夹 + */ + public void createKSMFolder(TCComponentFolder tcf, TCComponentProject tcproject, TCComponentFolder parent) { + try { + AIFComponentContext[] aifcon = tcf.getChildren(); + for (int i = 0; i < aifcon.length; i++) { + String type = aifcon[i].getComponent().getType(); + System.out.println("in getFolderName () the type = " + type); + if (type.equals("Folder")) { + String folderName = aifcon[i].getComponent().getProperty("object_name"); + TCComponentFolder newFolder = null; + List input = new ArrayList(); + BOCreateDefinition itemDef = (BOCreateDefinition) BOCreateDefinitionFactory.getInstance().getCreateDefinition(session, "cDC_Projectfolder"); + CreateInstanceInput createInput = new CreateInstanceInput(itemDef); + createInput.add("object_name", folderName); + input.add(createInput); + + //SOAGenericCreateHelper helper = new SOAGenericCreateHelper(); + List list1 = SOAGenericCreateHelper.create(session, itemDef, input); + Iterator it = list1.iterator(); + TCComponent component = null; + do { + if (!it.hasNext()) + break; + component = (TCComponent) it.next(); + } while (!(component instanceof TCComponentFolder)); + newFolder = (TCComponentFolder) component; + + InterfaceAIFComponent pasteTarget = parent; + pasteNewFolder(newFolder, pasteTarget); + assigntoPro(tcproject, newFolder); + + TCComponentFolder tcfolder = (TCComponentFolder) aifcon[i].getComponent(); + createKSMFolder(tcfolder, tcproject, newFolder); + } + } + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + /** + * doCopy:在满足条件的情况下复制 + * */ + private boolean doCopy(){ + try { +// InterfaceAIFComponent[] pasteTargets = app.getTargetComponents(); + if(folderList.getSelectedIndex() == -1 || proList.getSelectedIndex() == -1 || jt2.getText().equals("") ){ + MessageBox.post(app.getDesktop().getShell(), "模板文件夹、项目、新创建文件夹名称都不能为空!", "警告", MessageBox.WARNING); + return false; + } + + TCComponentFolder tcfolder = (TCComponentFolder) folderList.getSelectedValue(); + TCComponentProject tcproject = (TCComponentProject) proList.getSelectedValue(); + + if (selectTarget.equals(tcfolder)) { + MessageBox.post(app.getDesktop().getShell(), "复制目标不能是同一个文件夹!", "警告", MessageBox.WARNING); + return false; + } + System.out.println("jt2 text " + jt2.getText()); + + if(folderType.equals("cDC_Projectfolder")){ + TCComponentFolder newFolder = null; + List input = new ArrayList(); + BOCreateDefinition itemDef = (BOCreateDefinition) BOCreateDefinitionFactory.getInstance().getCreateDefinition(session, "cDC_Projectfolder"); + CreateInstanceInput createInput = new CreateInstanceInput(itemDef); + createInput.add("object_name", jt2.getText()); + input.add(createInput); + + //SOAGenericCreateHelper helper = new SOAGenericCreateHelper(); + List list1 = SOAGenericCreateHelper.create(session, itemDef, input); + Iterator it = list1.iterator(); + TCComponent component = null; + do { + if (!it.hasNext()) + break; + component = (TCComponent) it.next(); + } while (!(component instanceof TCComponentFolder)); + newFolder = (TCComponentFolder) component; + pasteNewFolder(newFolder, selectTarget); + assigntoPro(tcproject, newFolder); + + createKSMFolder(tcfolder, tcproject, newFolder); + + }else{ + TCComponentFolder newFolder = null; + TCComponentFolderType tccomponentfoldertype; + tccomponentfoldertype = (TCComponentFolderType) session.getTypeComponent("Folder"); + newFolder = tccomponentfoldertype.create(jt2.getText(), "", "Folder"); + + session.setStatus("正在复制模板文件目录,请稍等..."); + pasteNewFolder(newFolder, selectTarget); + assigntoPro(tcproject, newFolder); + System.out.println("first folder create end "); + createFolder(tcfolder, tcproject, newFolder); + } + System.out.println("actionPerformed end "); + dispose(); + } catch (TCException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + }finally{ + session.setReadyStatus(); + } + return true; + } +} diff --git a/src/cn/com/customization/project/CreateProjectFolderCommand.java b/src/cn/com/customization/project/CreateProjectFolderCommand.java new file mode 100644 index 0000000..7ecb33a --- /dev/null +++ b/src/cn/com/customization/project/CreateProjectFolderCommand.java @@ -0,0 +1,35 @@ +package cn.com.customization.project; + +import javax.swing.SwingUtilities; + +import com.teamcenter.rac.aif.AIFDesktop; +import com.teamcenter.rac.aif.AbstractAIFCommand; +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.kernel.TCComponentFolder; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.MessageBox; + +public class CreateProjectFolderCommand extends AbstractAIFCommand { + AbstractAIFUIApplication app; + TCSession session; + public int i = 0; + + public CreateProjectFolderCommand(AbstractAIFUIApplication abstractaifuiapplication, final String folderType) { + super(); + this.app = abstractaifuiapplication; + session = (TCSession) app.getSession(); + System.out.println("第2个参数" + "\n传递进来的String=" + folderType); + final InterfaceAIFComponent[] pasteTargets = app.getTargetComponents(); + if (pasteTargets.length == 1 && pasteTargets[0] instanceof TCComponentFolder) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + app.getDesktop(); + new CopyFolderAndAssginToProjectDialog(app, session, AIFDesktop.getActiveDesktop(), true, folderType, pasteTargets[0]); + } + }); + } else { + MessageBox.post(app.getDesktop().getShell(), "请选择一个文件夹!", "警告", MessageBox.ERROR); + } + } +} diff --git a/src/cn/com/customization/project/CreateProjectFolderHandler.java b/src/cn/com/customization/project/CreateProjectFolderHandler.java new file mode 100644 index 0000000..d627fb1 --- /dev/null +++ b/src/cn/com/customization/project/CreateProjectFolderHandler.java @@ -0,0 +1,28 @@ +package cn.com.customization.project; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; + +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.util.MessageBox; + +public class CreateProjectFolderHandler extends AbstractHandler +{ + + public Object execute(ExecutionEvent arg0) throws ExecutionException + { + AbstractAIFUIApplication application = AIFUtility.getCurrentApplication(); + try + { + new CreateProjectFolderCommand(application,"FolderCreatePro"); + } + catch (Exception exception) + { + MessageBox.post(exception, true); + } + + return null; + } +} diff --git a/src/cn/com/customization/purchasing/PurchasingDepartmentSearchCommand.java b/src/cn/com/customization/purchasing/PurchasingDepartmentSearchCommand.java new file mode 100644 index 0000000..20491ec --- /dev/null +++ b/src/cn/com/customization/purchasing/PurchasingDepartmentSearchCommand.java @@ -0,0 +1,14 @@ +package cn.com.customization.purchasing; + +import com.teamcenter.rac.aif.AbstractAIFCommand; +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aifrcp.AIFUtility; + +public class PurchasingDepartmentSearchCommand extends AbstractAIFCommand { + AbstractAIFUIApplication app; + public PurchasingDepartmentSearchCommand(AbstractAIFUIApplication abstractaifuiapplication) { + super(); + this.app = abstractaifuiapplication; + new PurchasingDepartmentSearchDialog(AIFUtility.getActiveDesktop().getFrame(), app); + } +} diff --git a/src/cn/com/customization/purchasing/PurchasingDepartmentSearchDialog.java b/src/cn/com/customization/purchasing/PurchasingDepartmentSearchDialog.java new file mode 100644 index 0000000..840aacb --- /dev/null +++ b/src/cn/com/customization/purchasing/PurchasingDepartmentSearchDialog.java @@ -0,0 +1,299 @@ +package cn.com.customization.purchasing; + +import java.awt.Frame; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.PrintWriter; + +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; + +import org.apache.log4j.Logger; +import com.teamcenter.rac.aif.AbstractAIFApplication; +import com.teamcenter.rac.aif.AbstractAIFDialog; +import com.teamcenter.rac.aif.kernel.AIFComponentContext; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCAccessControlService; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentContextList; +import com.teamcenter.rac.kernel.TCComponentFolder; +import com.teamcenter.rac.kernel.TCComponentQuery; +import com.teamcenter.rac.kernel.TCComponentQueryType; +import com.teamcenter.rac.kernel.TCComponentUser; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.kernel.TCTextService; +import com.teamcenter.rac.util.ButtonLayout; +import com.teamcenter.rac.util.MessageBox; +import com.teamcenter.rac.util.PropertyLayout; +import com.teamcenter.rac.util.iTextField; +import cn.com.teamcenter.rac.form.GCSelectionUserCommand; + +/** + * 采购科到货查询对话框 + * + * @author + */ +@SuppressWarnings({"serial","rawtypes"}) +public class PurchasingDepartmentSearchDialog extends AbstractAIFDialog { + /** + * Logger for this class + */ + private static final Logger logger = Logger.getLogger(PurchasingDepartmentSearchDialog.class); + + private TCSession session; + + private TCComponent tcTargets[]; + + private iTextField txtUserId; + private JComboBox comboBoxType; + + private AbstractAIFApplication app = null; + + public PurchasingDepartmentSearchDialog(Frame parent, AbstractAIFApplication papp) { + super(parent, true); + app = papp; + session = (TCSession) papp.getSession(); + SwingUtilities.invokeLater(new Runnable() { + public void run() { + initDialog(); + } + }); + } + + /* + * 初始化界面 + */ + public void initDialog() { + + this.setTitle("采购科到货任务查询"); + JPanel mainPanel = new JPanel(new PropertyLayout()); + this.getContentPane().add(mainPanel); + txtUserId = new iTextField(20); + comboBoxType = new JComboBox(new String[]{"加工确认到货","采购确认到货"}); + + JPanel botPanel = new JPanel(); + botPanel.setLayout(new ButtonLayout(ButtonLayout.HORIZONTAL, ButtonLayout.CENTER, 10)); + JButton selsectUserButton = new JButton("选择"); + selsectUserButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + action(e); + } + }); + + JButton searchButton = new JButton("查询"); + searchButton.addActionListener(new ActionListener() { + + public void actionPerformed(ActionEvent e) { + action(e); + } + + }); + JLabel jl1 = new JLabel("用户:"); + JLabel jl2 = new JLabel(" "); + + try { + txtUserId.setText(session.getUser().getUserId()); + } catch (TCException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + mainPanel.add("1.1.center.center", jl1); + mainPanel.add("1.2.center.center", txtUserId); + mainPanel.add("1.3.center.center", selsectUserButton); + mainPanel.add("1.4.center.center", jl2); + mainPanel.add("1.5.center.center", comboBoxType); + mainPanel.add("1.6.center.center", searchButton); + this.pack(); + this.centerToScreen(); + this.setVisible(true); + + } + + public void action(ActionEvent e) { + if (logger.isDebugEnabled()) { + logger.debug("actionPerformed(ActionEvent) - start"); //$NON-NLS-1$ + } + try { + if (e.getActionCommand().equals("选择")) { + GCSelectionUserCommand selectionUserCmd = new GCSelectionUserCommand(AIFUtility.getCurrentApplication().getDesktop(), session); + selectionUserCmd.setContextBean("采购科到货确认查询",txtUserId); + selectionUserCmd.executeModal(); + } else if (e.getActionCommand().equals("查询")) { + + if(!txtUserId.getText().equals("") && comboBoxType.getSelectedItem() != null){ + doSearch(txtUserId.getText(),comboBoxType.getSelectedItem().toString()); + dispose(); + }else{ + MessageBox.post("请输入查询条件.","提示",MessageBox.INFORMATION); + } + } + } catch (TCException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } catch (Exception e2) { + // TODO Auto-generated catch block + e2.printStackTrace(); + } + + if (logger.isDebugEnabled()) { + logger.debug("actionPerformed(ActionEvent) - end"); //$NON-NLS-1$ + } + } + + private void doSearch(String userId, String taskName){ + System.out.println("userId="+userId); + try { + String str_key = "Type"; + String str_value = "TasksToPerform"; + String str_key2 = "OwningUser"; + String str_value2 = userId; + + TCTextService textService = session.getTextService(); + TCComponentQueryType querytype = (TCComponentQueryType) session.getTypeComponent("ImanQuery"); + TCComponentQuery query = (TCComponentQuery) querytype.find("__find_user_inbox");//常规... + querytype.clearCache(); + String as[] = new String[2]; + String as1[] = new String[2]; + as[0] = textService.getTextValue(str_key); + as1[0] = str_value; + as[1] = textService.getTextValue(str_key2); + as1[1] = str_value2; + query.clearCache(); + System.out.println("query " + query); + TCComponentContextList list = query.getExecuteResultsList(as, as1); + + if (list != null) { + String filePath = System.getenv("temp") + "/logger.txt"; + PrintWriter pw = new PrintWriter(filePath); + int count = list.getListCount(); + System.out.println(" folder coutn " + count); + if(taskName.equals("加工确认到货")){ + for (int i = 0; i < count; i++) { + TCComponent[] tasks = ((TCComponentFolder) list.get(i).getComponent()).getRelatedComponents("contents"); + for(int ix = 0; ix < tasks.length; ix++){ + String rootTaskName = tasks[ix].getProperty("object_name"); + //System.out.println(rootTaskName); + if(rootTaskName.contains("加工完成") || rootTaskName.contains("加工确认到货")){ + TCComponent[] taskAttachments = tasks[ix].getReferenceListProperty("root_target_attachments"); + for(int jy = 0; jy < taskAttachments.length; jy++){ + String attType = taskAttachments[jy].getType(); + //System.out.println(attType); + if(attType.equals("YSR8_ECN2RevisionMaster") || attType.equals("YSR8_ECN4RevisionMaster") ){ + if(!taskAttachments[jy].getProperty("ysr8_PurchFinishDate").equals("")){ + //System.out.println("======找到了,输出到TXT============="); + pw.print(tasks[ix].getProperty("job_name")+";"+taskAttachments[jy].toString()+"\r\n"); + } + } + } + } + } + } + }else{ + for (int i = 0; i < count; i++) { + TCComponent[] tasks = ((TCComponentFolder) list.get(i).getComponent()).getRelatedComponents("contents"); + for(int ix = 0; ix < tasks.length; ix++){ + String rootTaskName = tasks[ix].getProperty("object_name");//job_name.getReferenceProperty("root_task").getProperty("object_name"); + //System.out.println(rootTaskName); + if(rootTaskName.contains("采购完成") || rootTaskName.contains("采购确认到货")){ + TCComponent[] taskAttachments = tasks[ix].getReferenceListProperty("root_target_attachments"); + for(int jy = 0; jy < taskAttachments.length; jy++){ + String attType = taskAttachments[jy].getType(); + //System.out.println(attType); + if(attType.equals("YSR8_ECN1RevisionMaster") || attType.equals("YSR8_ECN3RevisionMaster") ){ + if(!taskAttachments[jy].getProperty("ysr8_PurchFinishDate").equals("")){//creation_date attType.equals("ItemRevision Master") || + //System.out.println("======找到了,输出到TXT============="); + pw.print(tasks[ix].getProperty("job_name")+";"+taskAttachments[jy].toString()+"\r\n"); + } + } + } + } + } + } + } + pw.flush(); + pw.close(); + Runtime runtime = Runtime.getRuntime(); + runtime.exec("cmd /c "+filePath); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + /* + * 检查选中的输入对象是否符合条件 + */ + @SuppressWarnings("unused") + private int checkTargets() { + if (logger.isDebugEnabled()) { + logger.debug("checkTargets() - start"); //$NON-NLS-1$ + } + + int flag = 0; + AIFComponentContext aifcomponentcontext[] = app.getTargetContexts(); + if (aifcomponentcontext != null && aifcomponentcontext.length >= 0) { + tcTargets = new TCComponent[aifcomponentcontext.length]; + for (int i = 0; i < aifcomponentcontext.length; i++) { + tcTargets[i] = (TCComponent) aifcomponentcontext[i].getComponent(); + System.out.println("tcTargets[i]===" + tcTargets[i]); + } + //selectedFolder = (TCComponentFolder) tcTargets[0]; + try { + if (!checkAccessPrivilige(session.getUser(), tcTargets[0], "WRITE")) { + flag = 2; + } + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } else { + flag = 3; + } + + if (logger.isDebugEnabled()) { + logger.debug("checkTargets() - end"); //$NON-NLS-1$ + } + return flag; + } + + /** + * 检测用户针对指定对象是否有某项权限 + * + * @param user + * 用户 + * @param comp + * 对象 + * @param accessName + * 权限名称 + * @return 是否有权限 + * @throws TCException + */ + private boolean checkAccessPrivilige(TCComponentUser user, TCComponent comp, String accessName) throws TCException { + if (logger.isDebugEnabled()) { + logger.debug("checkAccessPrivilige(TCComponentUser, TCComponent, String) - start"); //$NON-NLS-1$ + } + + if (logger.isInfoEnabled()) { + logger.info("checkAccessPrivilige(TCComponentUser, TCComponent, String) - TCComponentUser user=" + user); //$NON-NLS-1$ + logger.info("checkAccessPrivilige(TCComponentUser, TCComponent, String) - TCComponentUser comp=" + comp); //$NON-NLS-1$ + logger.info("checkAccessPrivilige(TCComponentUser, TCComponent, String) - TCComponentUser accessName=" + accessName); //$NON-NLS-1$ + } + TCAccessControlService accessService = ((TCSession) session).getTCAccessControlService(); + if (logger.isInfoEnabled()) { + logger.info("checkAccessPrivilige(TCComponentUser, TCComponent, String) - TCAccessControlService accessService=" + accessService); //$NON-NLS-1$ + } + boolean returnboolean = accessService.checkUsersPrivilege(user, comp, accessName); + if (logger.isInfoEnabled()) { + logger.info("checkAccessPrivilige(TCComponentUser, TCComponent, String) - boolean returnboolean=" + returnboolean); //$NON-NLS-1$ + } + + if (logger.isDebugEnabled()) { + logger.debug("checkAccessPrivilige(TCComponentUser, TCComponent, String) - end"); //$NON-NLS-1$ + } + return returnboolean; + } +} diff --git a/src/cn/com/customization/purchasing/PurchasingDepartmentSearchHandler.java b/src/cn/com/customization/purchasing/PurchasingDepartmentSearchHandler.java new file mode 100644 index 0000000..7717c59 --- /dev/null +++ b/src/cn/com/customization/purchasing/PurchasingDepartmentSearchHandler.java @@ -0,0 +1,21 @@ +package cn.com.customization.purchasing; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.commands.IHandler; + +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aifrcp.AIFUtility; + +//采购科到货任务查询 +public class PurchasingDepartmentSearchHandler extends AbstractHandler implements IHandler{ + + + public Object execute(ExecutionEvent arg0) throws ExecutionException { + AbstractAIFUIApplication app = AIFUtility.getCurrentApplication(); + new PurchasingDepartmentSearchCommand(app); + return null; + } + +} diff --git a/src/cn/com/customization/schedule/AbstracModifyDialog.java b/src/cn/com/customization/schedule/AbstracModifyDialog.java new file mode 100644 index 0000000..9036495 --- /dev/null +++ b/src/cn/com/customization/schedule/AbstracModifyDialog.java @@ -0,0 +1,351 @@ +package cn.com.customization.schedule; + +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.BorderFactory; +import javax.swing.ButtonGroup; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JDialog; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JRadioButton; +import javax.swing.JTextField; + +import com.teamcenter.rac.aif.AbstractAIFApplication; +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentSchedule; +import com.teamcenter.rac.kernel.TCComponentScheduleTask; +import com.teamcenter.rac.kernel.TCComponentUser; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.MessageBox; +import com.teamcenter.rac.util.PropertyLayout; + +public class AbstracModifyDialog extends JDialog { + // public class AbstracModifyDialog extends AbstractAIFDialog{ + public static final long serialVersionUID = 1L; + public String title; + public AbstractAIFUIApplication app; + public TCSession session; + public JRadioButton radio1; + public JRadioButton radio2; + public JRadioButton radio3; + public JRadioButton radio4; + public JTextField txt; + public String scheduleID; + public String scheduleName; + public TCComponentSchedule schedule; + TCComponent[] tasks = null; + TCComponentScheduleTask sch_summary_task = null; + public String currentRole; + public TCComponentUser currentUser; + public TCComponentUser owningUser; + public JTextField replaceSource; + public JTextField replaceObject; + JCheckBox chkTask ; + JCheckBox chkDelivery; + + boolean isSchedule = false; + boolean isTopSchedule = false; + boolean isTask = false; + boolean isModifyTaskName = true; + boolean isModifyDeliveryName = true; + InterfaceAIFComponent[] targets; + +// private static final Logger logger =Logger.getLogger(AbstracModifyDialog.class); + + public AbstracModifyDialog(AbstractAIFApplication app, String title) { + this.title = title; + this.app = (AbstractAIFUIApplication) app; + session = (TCSession) app.getSession(); + if (getTargetSchedule()) { + initUI(); + } + } + + public void initUI() { + setTitle(" " + title); + JPanel panel = new JPanel(new PropertyLayout()); + panel.add("1.1.left.center", new JLabel(" ")); + panel.add("1.2.left.center", setCenterPanel()); + panel.add("1.3.left.center", new JLabel(" ")); + panel.add("2.1.left.center", new JLabel(" ")); + this.getContentPane().add(panel); + this.setResizable(false); + this.setAlwaysOnTop(true); + pack(); + validate(); + Dimension screen = getToolkit().getScreenSize(); + setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2); + this.setVisible(true); + } + + private JPanel setCenterPanel() { + JPanel panel1 = new JPanel(new PropertyLayout()); + JTextField idtxt = new JTextField(32); + idtxt.setText(scheduleID); + idtxt.setEnabled(false); + JTextField nametxt = new JTextField(32); + nametxt.setText(scheduleName); + nametxt.setEnabled(false); + + chkTask = new JCheckBox("任务名称"); + chkTask.setSelected(true); + chkDelivery = new JCheckBox("交付物名称"); + chkDelivery.setSelected(true); + + chkTask.addActionListener(new ActionListener(){ + + public void actionPerformed(ActionEvent arg0) { + if(chkTask.isSelected()){ + isModifyTaskName = true; + }else{ + isModifyTaskName = false; + } + } + }); + + chkDelivery.addActionListener(new ActionListener(){ + + public void actionPerformed(ActionEvent arg0) { + if(chkDelivery.isSelected()){ + isModifyDeliveryName = true; + }else{ + isModifyDeliveryName = false; + } + } + + }); + + JPanel panelModify = new JPanel(new FlowLayout()); + panelModify.add(chkTask); + panelModify.add(chkDelivery); + + panel1.add("1.1.left.center", new JLabel(" ")); + panel1.add("2.1.left.center", new JLabel("时间表ID")); + panel1.add("2.2.left.center", idtxt); + panel1.add("3.1.left.center", new JLabel("时间表名称")); + panel1.add("3.2.left.center", nametxt); + + panel1.add("4.1.left.center", new JLabel("更改内容:")); + panel1.add("4.2.left.center", panelModify); + + JPanel panel2 = new JPanel(new PropertyLayout()); +// panel2.setBorder(BorderFactory.createTitledBorder("更改方式")); + panel2.setBorder(BorderFactory.createTitledBorder("增加前缀")); + + radio1 = new JRadioButton("时间表ID"); + radio2 = new JRadioButton("时间表名称"); + radio3 = new JRadioButton("自定义文本"); + + radio1.setSelected(true); + radio4 = new JRadioButton("替换文本"); + radio1.addActionListener(new buttonListener()); + radio2.addActionListener(new buttonListener()); + radio3.addActionListener(new buttonListener()); + radio4.addActionListener(new buttonListener()); + txt = new JTextField(27); + txt.setEnabled(false); + JPanel txtPanel = new JPanel(); + txtPanel.add(new JLabel("自定义文本:")); + txtPanel.add(txt); + ButtonGroup bg = new ButtonGroup(); + bg.add(radio1); + bg.add(radio2); + bg.add(radio3); + bg.add(radio4); + panel2.add("1.1.left.center", radio1); + + panel2.add("2.1.left.center", radio2); + panel2.add("3.1.left.center", radio3); + panel2.add("4.1.left.center", txtPanel); + + JPanel panel3 = new JPanel(new PropertyLayout()); +// panel3.setBorder(BorderFactory.createTitledBorder("替换")); + replaceSource = new JTextField(28); + replaceObject = new JTextField(28); + replaceSource.setEnabled(false); + replaceObject.setEnabled(false); + panel3.add("1.1.left.center", new JLabel(" 查找內容:")); + panel3.add("1.2.left.center", replaceSource); + panel3.add("2.1.left.center", new JLabel(" 替 换 为:")); + panel3.add("2.2.left.center", replaceObject); + + JPanel panePlace = new JPanel(new PropertyLayout()); + panePlace.add("1.1.left.center", radio4); + panePlace.add("2.1.left.center", panel3); + + JPanel panel = new JPanel(new PropertyLayout()); + panel.add("1.1.left.center", panel1); + panel.add("2.1.left.center", panel2); + panel.add("3.1.left.center", panePlace); + panel.add("4.1.center.center", setButtonPanel()); + + return panel; + } + + private JPanel setButtonPanel() { + JPanel panel = new JPanel(new PropertyLayout()); + JButton confirmBtn = new JButton("确定更改"); + JButton cancelBtn = new JButton("取消更改"); +// JButton replaceBtn = new JButton("全部替换"); + confirmBtn.addActionListener(new buttonListener()); + cancelBtn.addActionListener(new buttonListener()); +// replaceBtn.addActionListener(new buttonListener()); + + panel.add("1.1.left.center", new JLabel(" ")); + panel.add("2.1.left.center", confirmBtn); + // panel.add("2.2.left.center", replaceBtn); + panel.add("2.2.left.center", cancelBtn); + return panel; + } + + public boolean getTargetSchedule() { + boolean flag = true; + + targets = app.getTargetComponents(); + if(targets == null || targets.length == 0){ + MessageBox.post("请选择时间表或者时间表任务执行操作!", "提示", MessageBox.INFORMATION); + return false; + }else{ + for(int i = 0;i < targets.length; i++){ + if(targets[i] instanceof TCComponentSchedule){ + isSchedule = true; + }else if(targets[i] instanceof TCComponentScheduleTask){ + try { + if(((TCComponentScheduleTask)targets[0]).getReferenceProperty("fnd0ParentTask") == null){ + isSchedule = true; + isTopSchedule =true;//说明是在时间表管理器中选中的时间表,此时时间表加载的仍然是时间表任务 + }else{ + isTask = true; + } + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + if(isSchedule && isTask){ + MessageBox.post("请选择时间表或者时间表任务执行操作!", "提示", MessageBox.INFORMATION); + return false; + } + } + + try { + if(isSchedule && !isTask){ + if(isTopSchedule){ + schedule = (TCComponentSchedule) ((TCComponentScheduleTask)targets[0]).getReferenceProperty("schedule_tag"); + }else{ + schedule = (TCComponentSchedule) targets[0]; + } + }else{ + schedule = (TCComponentSchedule) ((TCComponentScheduleTask)targets[0]).getReferenceProperty("schedule_tag"); + } + + if(isSchedule && !isTask){ + try { + tasks = schedule.getAllTasks(); + } catch (TCException e) { + e.printStackTrace(); + } + }else if(!isSchedule && isTask){ + tasks = new TCComponent[targets.length]; + for(int i = 0; i < targets.length; i++){ + tasks[i] = (TCComponent) targets[i]; + } + } + try { +// sch_summary_task = (TCComponentScheduleTask) schedule.getReferenceProperty("sch_summary_task"); + sch_summary_task = (TCComponentScheduleTask) schedule.getReferenceProperty("fnd0SummaryTask"); + } catch (TCException e) { + e.printStackTrace(); + } + System.out.println("schedule = " + schedule); + + scheduleID = schedule.getProperty("item_id"); + scheduleName = schedule.getProperty("object_name"); + currentUser = session.getUser(); + currentRole = session.getCurrentRole().toString(); + owningUser = (TCComponentUser) schedule.getReferenceProperty("owning_user"); + } catch (TCException e) { + e.printStackTrace(); + } + return flag; + } + + + class buttonListener implements ActionListener { + public void actionPerformed(ActionEvent actionevent) { + Object obj = actionevent.getSource(); + if (obj instanceof JButton) { + JButton button = (JButton) obj; + String buttonName = button.getText(); + if (buttonName.equals("取消更改")) { + cancelAction(); + } else if (buttonName.equals("确定更改")) { + if(!isModifyDeliveryName && !isModifyTaskName){ + MessageBox.post("请选择更改内容!", "提示", MessageBox.INFORMATION); + return; + } + if (radio1.isSelected()) { + confirmAction(0, ""); + } else if (radio2.isSelected()) { + confirmAction(1, ""); + } else if (radio3.isSelected()) { + confirmAction(2, txt.getText()); + } else if (radio4.isSelected()) { + replaceAction(); + } + } + } else { + if (obj instanceof JRadioButton) { + if (radio3.isSelected()) { + txt.setEnabled(true); + replaceSource.setEnabled(false); + replaceObject.setEnabled(false); + replaceSource.setText(""); + replaceObject.setText(""); + } else { + if (radio4.isSelected()) { + replaceSource.setEnabled(true); + replaceObject.setEnabled(true); + } else { + replaceSource.setEnabled(false); + replaceObject.setEnabled(false); + replaceSource.setText(""); + replaceObject.setText(""); + } + txt.setEnabled(false); + txt.setText(""); + } + } + } + } + } + + public String replaceName(String s, String source, String object) { + String newString = ""; + int first = 0; + while (s.indexOf(source) != -1) { + first = s.indexOf(source); + if (first != s.length()) { + newString = newString + s.substring(0, first) + object; + s = s.substring(first + source.length(), s.length()); + } + } + newString = newString + s; + return newString; + } + + public void replaceAction() {} + + public void confirmAction(int index, String txt) {} + + public void cancelAction() {} +} diff --git a/src/cn/com/customization/schedule/BOMTransPlanCommand.java b/src/cn/com/customization/schedule/BOMTransPlanCommand.java new file mode 100644 index 0000000..9ff967d --- /dev/null +++ b/src/cn/com/customization/schedule/BOMTransPlanCommand.java @@ -0,0 +1,44 @@ +package cn.com.customization.schedule; + +import javax.swing.SwingUtilities; + +import com.teamcenter.rac.aif.AIFDesktop; +import com.teamcenter.rac.aif.AbstractAIFCommand; +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCComponentSchedule; +import com.teamcenter.rac.kernel.TCComponentScheduleTask; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.util.MessageBox; + +public class BOMTransPlanCommand extends AbstractAIFCommand { + + private AbstractAIFUIApplication application = null; + + public BOMTransPlanCommand() { + + super(); + + application = AIFUtility.getCurrentApplication(); + + InterfaceAIFComponent selectTarget = application.getTargetComponent(); + if (selectTarget instanceof TCComponentScheduleTask) { + try { + final TCComponentSchedule scheduleTag = (TCComponentSchedule) ((TCComponentScheduleTask) selectTarget).getReferenceProperty("schedule_tag"); + SwingUtilities.invokeLater(new Runnable() { + public void run() { + application.getDesktop(); + new BOMTransPlanDialog(application, AIFDesktop.getActiveDesktop(), scheduleTag); + } + }); + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } else { + MessageBox.post(application.getDesktop().getShell(), "请选择一个时间表对象执行此功能!", "提示", MessageBox.INFORMATION); + } + } +} diff --git a/src/cn/com/customization/schedule/BOMTransPlanDialog.java b/src/cn/com/customization/schedule/BOMTransPlanDialog.java new file mode 100644 index 0000000..cdf4d8e --- /dev/null +++ b/src/cn/com/customization/schedule/BOMTransPlanDialog.java @@ -0,0 +1,420 @@ +package cn.com.customization.schedule; + +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; +import java.util.ArrayList; +import java.util.List; + +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTree; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeCellRenderer; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreeSelectionModel; + +import com.teamcenter.rac.aif.AbstractAIFDialog; +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aif.kernel.AIFComponentContext; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.common.TCTypeRenderer; +import com.teamcenter.rac.common.lov.LOVComboBox; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentBOMLine; +import com.teamcenter.rac.kernel.TCComponentBOMWindow; +import com.teamcenter.rac.kernel.TCComponentBOMWindowType; +import com.teamcenter.rac.kernel.TCComponentItem; +import com.teamcenter.rac.kernel.TCComponentItemRevision; +import com.teamcenter.rac.kernel.TCComponentItemType; +import com.teamcenter.rac.kernel.TCComponentRevisionRule; +import com.teamcenter.rac.kernel.TCComponentRevisionRuleType; +import com.teamcenter.rac.kernel.TCComponentSchedule; +import com.teamcenter.rac.kernel.TCComponentScheduleTask; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCProperty; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.kernel.TCUserService; +import com.teamcenter.rac.schedule.commands.reload.ReloadOperation; +import com.teamcenter.rac.schedule.common.tree.ScheduleTreeLine; +import com.teamcenter.rac.schedule.scheduler.componentutils.ScheduleHelper; +import com.teamcenter.rac.schedule.scheduler.componentutils.TaskHelper; +import com.teamcenter.rac.util.PropertyLayout; +import com.teamcenter.rac.util.iTextField; + +import cn.com.customization.util.UtilApi; +import cn.com.teamcenter.rac.form.GCSelectionUserCommand; + +@SuppressWarnings({"deprecation","rawtypes"}) +public class BOMTransPlanDialog extends AbstractAIFDialog implements WindowListener{ + + private static final long serialVersionUID = 1L; + private TCSession session = null; + private AbstractAIFUIApplication application = null; + private TCComponentSchedule scheduleTag = null; + private ScheduleTreeLine rootscheduleTreeLine = null; + + private JButton addButton; + private JButton removeButton; +// private JComboBox ysr8_TaskUse; + private LOVComboBox ysr8_TaskUse; + private JComboBox workFlowTemp; + private iTextField taskReso; + private JCheckBox isTranOwner; + private JCheckBox isDevi; + + private JTree scheduleTree; + private JTree bomTree; + + //private String strLOVTaskUse = "YSR_Task_Use_LOV"; + private String strLOVWorkFlowTemp = "YSR_Workflow_Template_LOV"; + + public BOMTransPlanDialog(AbstractAIFUIApplication application, Frame frame, TCComponentSchedule scheduleTag) { + super(frame, true); + session = (TCSession) application.getSession(); + this.application = application; + this.scheduleTag = scheduleTag; + init(); + } + + private void init() { + + setLayout(new PropertyLayout(5, 5, 5, 5, 5, 5)); + + setTitle("添加BOM到工作计划"); + this.addWindowListener(this); + + rootscheduleTreeLine = new ScheduleTreeLine(scheduleTag); + DefaultMutableTreeNode scheduleTop = new DefaultMutableTreeNode(rootscheduleTreeLine); + initTreeTableModel(scheduleTag, scheduleTop); + + DefaultTreeModel scheduleModel = new DefaultTreeModel(scheduleTop); + scheduleTree = new JTree(scheduleModel); + scheduleTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);// 一次只能选择一个节点的选项 + scheduleTree.setCellRenderer(new ScheduleDefaultTreeCellRenderer()); + JScrollPane jScrollPane = new JScrollPane(scheduleTree); + jScrollPane.setPreferredSize(new Dimension(300, 400)); + add("1.1.left.center",jScrollPane); + + JPanel centerPanel = new JPanel(); + centerPanel.setLayout(new PropertyLayout(5, 5, 5, 5, 5, 5)); + addButton = new JButton("<<<添加"); + removeButton = new JButton("移除>>>"); + removeButton.setVisible(false); +// ysr8_TaskUse = new JComboBox(); +// UtilApi.getOptionValues(session, ysr8_TaskUse, strLOVTaskUse); + ysr8_TaskUse = new LOVComboBox("YSR8_ScheduleTask01_LOV"); + workFlowTemp = new JComboBox(); + UtilApi.getOptionValues(session, workFlowTemp, strLOVWorkFlowTemp); + taskReso = new iTextField(30); + taskReso.setEditable(false); + taskReso.setToolTipText("双击选择"); + final GCSelectionUserCommand selectionUserCmd = new GCSelectionUserCommand(AIFUtility.getCurrentApplication().getDesktop(), session); + taskReso.addMouseListener(new MouseAdapter() { + + public void mouseClicked(MouseEvent mouseevent) { + if (mouseevent.getClickCount() == 2) { + isTranOwner.setSelected(false); + selectionUserCmd.setContextBean(taskReso); + try { + selectionUserCmd.executeModal(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + }); + isTranOwner = new JCheckBox("所有者转任务执行者"); + isTranOwner.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent arg0) { + // TODO Auto-generated method stub + if(isTranOwner.isSelected()){ + taskReso.setText(""); + } + } + }); + isDevi = new JCheckBox("关联交付对象版本到时间表"); + addButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent actionevent) { + // TODO Auto-generated method stub + addButtonListener(); + } + }); + removeButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent actionevent) { + // TODO Auto-generated method stub + removeButtonListener(); + } + }); + centerPanel.add("1.1.center.center",addButton); + centerPanel.add("2.1.center.center",removeButton); + centerPanel.add("3.1.left.center",new JLabel(" ")); + centerPanel.add("4.1.left.center",new JLabel("任务用途分类:")); + centerPanel.add("5.1.left.center",ysr8_TaskUse); + centerPanel.add("6.1.left.center",new JLabel("工作流触发流程模板:")); + centerPanel.add("7.1.left.center",workFlowTemp); + centerPanel.add("8.1.left.center",new JLabel("任务责任人:")); + centerPanel.add("9.1.left.center",taskReso); + centerPanel.add("10.1.left.center",new JLabel(" ")); + centerPanel.add("11.1.left.center",isTranOwner); + //centerPanel.add("12.1.left.center",isDevi); + add("1.2.left.center",centerPanel); + + try { + TCComponent[] projectList = scheduleTag.getReferenceListProperty("project_list"); + if( projectList != null && projectList.length > 0){ + String project_id = projectList[0].getProperty("project_id"); + TCComponentItemType tccomItemType = (TCComponentItemType) session.getTypeComponent("Item"); + TCComponentItem systemPart = tccomItemType.find(project_id); + if( systemPart != null){ + TCComponentItemRevision systemPartRevision = systemPart.getLatestItemRevision(); + TCComponentBOMLine bomLine=getBOMLine(session, systemPartRevision); + CheckBoxTreeNode itemRevTop = new CheckBoxTreeNode(systemPartRevision); + AIFComponentContext[] childLines = bomLine.getChildren(); + int childCount = bomLine.getChildrenCount(); + for(int ix = 0; ix < childCount; ix++ ){ + TCComponentBOMLine cl = (TCComponentBOMLine)childLines[ix].getComponent(); + String clt = cl.getItemRevision().getType(); + if(clt.equals("YSR8_MachPartsRevision") || clt.equals("YSR8_ElecPartsRevision")){ + CheckBoxTreeNode childTreeNode = new CheckBoxTreeNode(cl.getItemRevision()); + childTreeNode.setQuantity(cl.getProperty("bl_quantity")); + itemRevTop.add(childTreeNode); + } + } + + DefaultTreeModel bomModel = new DefaultTreeModel(itemRevTop); + bomTree = new JTree(bomModel); + bomTree.addMouseListener(new CheckBoxTreeNodeSelectionListener()); + bomTree.setCellRenderer(new CheckBoxTreeCellRenderer()); + JScrollPane jScrollPaneBom = new JScrollPane(bomTree); + jScrollPaneBom.setPreferredSize(new Dimension(300, 400)); + add("1.3.left.center",jScrollPaneBom); + } + } + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + pack(); + centerToScreen(); + setVisible(true); + } + + private void addButtonListener(){ + if(scheduleTree != null && bomTree != null ){ + DefaultMutableTreeNode scheduleNode = (DefaultMutableTreeNode) scheduleTree.getLastSelectedPathComponent(); + CheckBoxTreeNode bomNode = (CheckBoxTreeNode) bomTree.getModel().getRoot(); + if(scheduleNode != null){ + int bomNodeChildCount = bomNode.getChildCount(); + List systemPartRevisions = new ArrayList(); + Listquantity = new ArrayList(); + for(int ix = 0; ix < bomNodeChildCount; ix++){ + CheckBoxTreeNode bomChildNode = (CheckBoxTreeNode) bomNode.getChildAt(ix); + if(bomChildNode.isSelected){ +// TCComponentItemRevision systemPartRevision = (TCComponentItemRevision) bomChildNode.getUserObject(); +// System.out.println("systemPartRevision = "+systemPartRevision); + systemPartRevisions.add((TCComponentItemRevision) bomChildNode.getUserObject()); + quantity.add(bomChildNode.getQuantity()); + } + } + TCUserService userService = (TCUserService) session.getUserService(); + Object objs[] = new Object[9]; + objs[0] = (TCComponentScheduleTask)((ScheduleTreeLine)scheduleNode.getUserObject()).getUserObject(); + objs[1] = systemPartRevisions.toArray(); + if(ysr8_TaskUse.getSelectedItem() != null ){ + objs[2] = ysr8_TaskUse.getSelectedDisplayString(); + objs[8] = ysr8_TaskUse.getSelectedItem(); + }else{ + objs[2] = ""; + objs[8] = "-1"; + } + if(workFlowTemp.getSelectedItem() != null){ + objs[3] = workFlowTemp.getSelectedItem(); + }else{ + objs[3] = ""; + } + objs[4] = isTranOwner.isSelected(); + objs[5] = isDevi.isSelected(); + objs[6] = quantity.toArray(); + objs[7] = taskReso.getText(); + try { + Object[] reb = (Object[])userService.call("BOM_Trans_Plan", objs); + if( reb != null ){ + int rebCnt = reb.length; + System.out.println("reb.length = "+rebCnt); + ScheduleTreeLine parentTreeLine = (ScheduleTreeLine)scheduleNode.getUserObject(); + for(int ix = 0; ix < rebCnt; ix++ ){ + populateTask(parentTreeLine, (TCComponent)reb[ix], scheduleNode); + } + scheduleTree.repaint(); + scheduleTree.updateUI(); + scheduleTag.refresh(); + } + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + } + + private void removeButtonListener(){ + + } + + private void initTreeTableModel(TCComponentSchedule scheduleTag, DefaultMutableTreeNode top) { + try { + TCComponent scheduleTask = ScheduleHelper.getScheduleSummaryTask(scheduleTag); + TCProperty tcproperty = scheduleTask.getTCProperty("child_task_taglist"); + TCComponent atccomponent[] = tcproperty.getReferenceValueArray(); + for (int l = 0; l < atccomponent.length; l++) + populateTask(rootscheduleTreeLine, atccomponent[l], top); + + } catch (TCException e) { + e.printStackTrace(); + } + } + + public void populateTask(ScheduleTreeLine parentScheduleTreeLine, TCComponent tccomponent, DefaultMutableTreeNode parentTreeNode) { + if (tccomponent != null) { + ScheduleTreeLine scheduletreeline = new ScheduleTreeLine(tccomponent); + DefaultMutableTreeNode treeNode = new DefaultMutableTreeNode(scheduletreeline); + parentTreeNode.add(treeNode); + parentScheduleTreeLine.add(scheduletreeline); + try { + TCComponent atccomponent[] = TaskHelper.getChildTasks((TCComponentScheduleTask) tccomponent); + for (int i = 0; i < atccomponent.length; i++) + populateTask(scheduletreeline, atccomponent[i], treeNode); + + } catch (TCException tcexception) { + tcexception.printStackTrace(); + } + } + } + + /** + * 自定义树描述类,将树的每个节点设置成不同的图标 + * @author + * + */ + public class ScheduleDefaultTreeCellRenderer extends DefaultTreeCellRenderer + { + /** + * ID + */ + private static final long serialVersionUID = 1L; + + /** + * 重写父类DefaultTreeCellRenderer的方法 + */ + @Override + public Component getTreeCellRendererComponent(JTree tree, Object value, + boolean sel, boolean expanded, boolean leaf, int row, + boolean hasFocus) + { + + //执行父类原型操作 + super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); + +// setText(value.toString()); + + if (sel) + { + setForeground(getTextSelectionColor()); + } + else + { + setForeground(getTextNonSelectionColor()); + } + + //得到每个节点的TreeNode + DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; + + this.setIcon(TCTypeRenderer.getIcon(((ScheduleTreeLine)node.getUserObject()).getUserObject())); + + return this; + } + } + public static TCComponentBOMLine getBOMLine(TCSession session, TCComponentItemRevision revision) { + TCComponentBOMLine bomLine = null; + try { + // 获取版本规则 + TCComponentRevisionRuleType revRuleType = (TCComponentRevisionRuleType) session.getTypeComponent("RevisionRule"); + TCComponentRevisionRule revRule = revRuleType.getDefaultRule(); + // 创建BOMWindow + TCComponentBOMWindowType bomWinType = (TCComponentBOMWindowType) session.getTypeComponent("BOMWindow"); + TCComponentBOMWindow window = bomWinType.create(revRule); + window.lock(); + bomLine = window.setWindowTopLine(revision.getItem(), revision, null, null); + window.unlock(); + } catch (TCException e) { + e.printStackTrace(); + } + return bomLine; + } + + @Override + public void windowActivated(WindowEvent arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void windowClosed(WindowEvent arg0) { + // TODO Auto-generated method stub + ReloadOperation reloadoperation = new ReloadOperation(application); + try { + reloadoperation.executeOperation(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + @Override + public void windowClosing(WindowEvent arg0) { + // TODO Auto-generated method stub + } + + @Override + public void windowDeactivated(WindowEvent arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void windowDeiconified(WindowEvent arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void windowIconified(WindowEvent arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void windowOpened(WindowEvent arg0) { + // TODO Auto-generated method stub + + } +} diff --git a/src/cn/com/customization/schedule/BOMTransPlanHandler.java b/src/cn/com/customization/schedule/BOMTransPlanHandler.java new file mode 100644 index 0000000..cee9640 --- /dev/null +++ b/src/cn/com/customization/schedule/BOMTransPlanHandler.java @@ -0,0 +1,25 @@ +package cn.com.customization.schedule; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; + +import com.teamcenter.rac.util.MessageBox; + +public class BOMTransPlanHandler extends AbstractHandler +{ + + public Object execute(ExecutionEvent arg0) throws ExecutionException + { + try + { + BOMTransPlanCommand cmd = new BOMTransPlanCommand(); + } + catch (Exception exception) + { + MessageBox.post(exception, true); + } + + return null; + } +} diff --git a/src/cn/com/customization/schedule/CheckBoxTreeCellRenderer.java b/src/cn/com/customization/schedule/CheckBoxTreeCellRenderer.java new file mode 100644 index 0000000..c96000f --- /dev/null +++ b/src/cn/com/customization/schedule/CheckBoxTreeCellRenderer.java @@ -0,0 +1,96 @@ +package cn.com.customization.schedule; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; + +import javax.swing.JCheckBox; +import javax.swing.JPanel; +import javax.swing.JTree; +import javax.swing.UIManager; +import javax.swing.plaf.ColorUIResource; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.TreeCellRenderer; + +import com.teamcenter.rac.common.TCTypeRenderer; +import com.teamcenter.rac.kernel.TCComponentItemRevision; +import com.teamcenter.rac.schedule.common.tree.ScheduleTreeLine; + +public class CheckBoxTreeCellRenderer extends JPanel implements TreeCellRenderer +{ + protected JCheckBox check; + protected CheckBoxTreeLabel label; + + public CheckBoxTreeCellRenderer() + { + setLayout(null); + add(check = new JCheckBox()); + add(label = new CheckBoxTreeLabel()); + check.setBackground(UIManager.getColor("Tree.textBackground")); + label.setForeground(UIManager.getColor("Tree.textForeground")); + } + + /** + * 返回的是一个JPanel对象,该对象中包含一个JCheckBox对象 + * 和一个JLabel对象。并且根据每个结点是否被选中来决定JCheckBox + * 是否被选中。 + */ + @Override + public Component getTreeCellRendererComponent(JTree tree, Object value, + boolean selected, boolean expanded, boolean leaf, int row, + boolean hasFocus) + { + String stringValue = tree.convertValueToText(value, selected, expanded, leaf, row, hasFocus); + setEnabled(tree.isEnabled()); + check.setSelected(((CheckBoxTreeNode)value).isSelected()); + label.setFont(tree.getFont()); + label.setText(stringValue); + label.setSelected(selected); + label.setFocus(hasFocus); +// if(leaf) +// label.setIcon(UIManager.getIcon("Tree.leafIcon")); +// else if(expanded) +// label.setIcon(UIManager.getIcon("Tree.openIcon")); +// else +// label.setIcon(UIManager.getIcon("Tree.closedIcon")); + + //得到每个节点的TreeNode + DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; + + label.setIcon(TCTypeRenderer.getIcon((TCComponentItemRevision)node.getUserObject())); + return this; + } + + @Override + public Dimension getPreferredSize() + { + Dimension dCheck = check.getPreferredSize(); + Dimension dLabel = label.getPreferredSize(); + return new Dimension(dCheck.width + dLabel.width, dCheck.height < dLabel.height ? dLabel.height: dCheck.height); + } + + @Override + public void doLayout() + { + Dimension dCheck = check.getPreferredSize(); + Dimension dLabel = label.getPreferredSize(); + int yCheck = 0; + int yLabel = 0; + if(dCheck.height < dLabel.height) + yCheck = (dLabel.height - dCheck.height) / 2; + else + yLabel = (dCheck.height - dLabel.height) / 2; + check.setLocation(0, yCheck); + check.setBounds(0, yCheck, dCheck.width, dCheck.height); + label.setLocation(dCheck.width, yLabel); + label.setBounds(dCheck.width, yLabel, dLabel.width, dLabel.height); + } + + @Override + public void setBackground(Color color) + { + if(color instanceof ColorUIResource) + color = null; + super.setBackground(color); + } +} diff --git a/src/cn/com/customization/schedule/CheckBoxTreeLabel.java b/src/cn/com/customization/schedule/CheckBoxTreeLabel.java new file mode 100644 index 0000000..fc374c5 --- /dev/null +++ b/src/cn/com/customization/schedule/CheckBoxTreeLabel.java @@ -0,0 +1,75 @@ +package cn.com.customization.schedule; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; + +import javax.swing.Icon; +import javax.swing.JLabel; +import javax.swing.UIManager; +import javax.swing.plaf.ColorUIResource; + +public class CheckBoxTreeLabel extends JLabel +{ + private boolean isSelected; + private boolean hasFocus; + + public CheckBoxTreeLabel() + { + } + + @Override + public void setBackground(Color color) + { + if(color instanceof ColorUIResource) + color = null; + super.setBackground(color); + } + + @Override + public void paint(Graphics g) + { + String str; + if((str = getText()) != null) + { + if(0 < str.length()) + { + if(isSelected) + g.setColor(UIManager.getColor("Tree.selectionBackground")); + else + g.setColor(UIManager.getColor("Tree.textBackground")); + Dimension d = getPreferredSize(); + int imageOffset = 0; + Icon currentIcon = getIcon(); + if(currentIcon != null) + imageOffset = currentIcon.getIconWidth() + Math.max(0, getIconTextGap() - 1); + g.fillRect(imageOffset, 0, d.width - 1 - imageOffset, d.height); + if(hasFocus) + { + g.setColor(UIManager.getColor("Tree.selectionBorderColor")); + g.drawRect(imageOffset, 0, d.width - 1 - imageOffset, d.height - 1); + } + } + } + super.paint(g); + } + + @Override + public Dimension getPreferredSize() + { + Dimension retDimension = super.getPreferredSize(); + if(retDimension != null) + retDimension = new Dimension(retDimension.width + 3, retDimension.height); + return retDimension; + } + + public void setSelected(boolean isSelected) + { + this.isSelected = isSelected; + } + + public void setFocus(boolean hasFocus) + { + this.hasFocus = hasFocus; + } +} diff --git a/src/cn/com/customization/schedule/CheckBoxTreeNode.java b/src/cn/com/customization/schedule/CheckBoxTreeNode.java new file mode 100644 index 0000000..a16cca3 --- /dev/null +++ b/src/cn/com/customization/schedule/CheckBoxTreeNode.java @@ -0,0 +1,113 @@ +package cn.com.customization.schedule; + +import javax.swing.tree.DefaultMutableTreeNode; + +public class CheckBoxTreeNode extends DefaultMutableTreeNode +{ + protected boolean isSelected; + private String quantity = ""; + + public CheckBoxTreeNode() + { + this(null); + } + + public CheckBoxTreeNode(Object userObject) + { + this(userObject, true, false); + } + + public CheckBoxTreeNode(Object userObject, boolean allowsChildren, boolean isSelected) + { + super(userObject, allowsChildren); + this.isSelected = isSelected; + } + + public boolean isSelected() + { + return isSelected; + } + + public void setSelected(boolean _isSelected) + { + this.isSelected = _isSelected; + + if(_isSelected) + { + // 如果选中,则将其所有的子结点都选中 + if(children != null) + { + for(Object obj : children) + { + CheckBoxTreeNode node = (CheckBoxTreeNode)obj; + if(_isSelected != node.isSelected()) + node.setSelected(_isSelected); + } + } + // 向上检查,如果父结点的所有子结点都被选中,那么将父结点也选中 + CheckBoxTreeNode pNode = (CheckBoxTreeNode)parent; + // 开始检查pNode的所有子节点是否都被选中 + if(pNode != null) + { + int index = 0; + for(; index < pNode.children.size(); ++ index) + { + CheckBoxTreeNode pChildNode = (CheckBoxTreeNode)pNode.children.get(index); + if(!pChildNode.isSelected()) + break; + } + /* + * 表明pNode所有子结点都已经选中,则选中父结点, + * 该方法是一个递归方法,因此在此不需要进行迭代,因为 + * 当选中父结点后,父结点本身会向上检查的。 + */ + if(index == pNode.children.size()) + { + if(pNode.isSelected() != _isSelected) + pNode.setSelected(_isSelected); + } + } + } + else + { + /* + * 如果是取消父结点导致子结点取消,那么此时所有的子结点都应该是选择上的; + * 否则就是子结点取消导致父结点取消,然后父结点取消导致需要取消子结点,但 + * 是这时候是不需要取消子结点的。 + */ + if(children != null) + { + int index = 0; + for(; index < children.size(); ++ index) + { + CheckBoxTreeNode childNode = (CheckBoxTreeNode)children.get(index); + if(!childNode.isSelected()) + break; + } + // 从上向下取消的时候 + if(index == children.size()) + { + for(int i = 0; i < children.size(); ++ i) + { + CheckBoxTreeNode node = (CheckBoxTreeNode)children.get(i); + if(node.isSelected() != _isSelected) + node.setSelected(_isSelected); + } + } + } + + // 向上取消,只要存在一个子节点不是选上的,那么父节点就不应该被选上。 + CheckBoxTreeNode pNode = (CheckBoxTreeNode)parent; + if(pNode != null && pNode.isSelected() != _isSelected) + pNode.setSelected(_isSelected); + } + } + + public String getQuantity() { + return quantity; + } + + public void setQuantity(String quantity) { + this.quantity = quantity; + } +} diff --git a/src/cn/com/customization/schedule/CheckBoxTreeNodeSelectionListener.java b/src/cn/com/customization/schedule/CheckBoxTreeNodeSelectionListener.java new file mode 100644 index 0000000..6185786 --- /dev/null +++ b/src/cn/com/customization/schedule/CheckBoxTreeNodeSelectionListener.java @@ -0,0 +1,31 @@ +package cn.com.customization.schedule; + +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; + +import javax.swing.JTree; +import javax.swing.tree.TreePath; +import javax.swing.tree.DefaultTreeModel; + +public class CheckBoxTreeNodeSelectionListener extends MouseAdapter +{ + @Override + public void mouseClicked(MouseEvent event) + { + JTree tree = (JTree)event.getSource(); + int x = event.getX(); + int y = event.getY(); + int row = tree.getRowForLocation(x, y); + TreePath path = tree.getPathForRow(row); + if(path != null) + { + CheckBoxTreeNode node = (CheckBoxTreeNode)path.getLastPathComponent(); + if(node != null) + { + boolean isSelected = !node.isSelected(); + node.setSelected(isSelected); + ((DefaultTreeModel)tree.getModel()).nodeStructureChanged(node); + } + } + } +} \ No newline at end of file diff --git a/src/cn/com/customization/schedule/ModifyTaskOrDeliveryNameCommand.java b/src/cn/com/customization/schedule/ModifyTaskOrDeliveryNameCommand.java new file mode 100644 index 0000000..99b60cf --- /dev/null +++ b/src/cn/com/customization/schedule/ModifyTaskOrDeliveryNameCommand.java @@ -0,0 +1,32 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: ModifyTaskNameCommand.java +#======================================================================================================= +# Date Name Action Description of Change +# 2010-12-2 tyl Ini 初始化文件 +#======================================================================================================= + */ +package cn.com.customization.schedule; + +import com.teamcenter.rac.aif.AbstractAIFApplication; +import com.teamcenter.rac.aif.AbstractAIFCommand; +import com.teamcenter.rac.kernel.TCException; + +public class ModifyTaskOrDeliveryNameCommand extends AbstractAIFCommand { + public AbstractAIFApplication application; + + public ModifyTaskOrDeliveryNameCommand(AbstractAIFApplication abstractaifapplication) throws TCException { + application = abstractaifapplication; + execute(); + + } + + private void execute() throws TCException { + new ModifyTaskOrDeliveryNameDialog(application,"批量更改时间表任务或交付物名称"); + } + +} diff --git a/src/cn/com/customization/schedule/ModifyTaskOrDeliveryNameDialog.java b/src/cn/com/customization/schedule/ModifyTaskOrDeliveryNameDialog.java new file mode 100644 index 0000000..56b15c8 --- /dev/null +++ b/src/cn/com/customization/schedule/ModifyTaskOrDeliveryNameDialog.java @@ -0,0 +1,152 @@ +package cn.com.customization.schedule; + +import com.teamcenter.rac.aif.AbstractAIFApplication; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentScheduleDeliverable; +import com.teamcenter.rac.kernel.TCComponentScheduleTask; +import com.teamcenter.rac.kernel.TCComponentTaskDeliverable; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.util.MessageBox; + +public class ModifyTaskOrDeliveryNameDialog extends AbstracModifyDialog { + + /** + * serialVersionUID:TODO(描述变量的功能) + * @since Ver 1.1 + */ + public static final long serialVersionUID = 1L; + + public ModifyTaskOrDeliveryNameDialog(AbstractAIFApplication abstractaifapplication, String title) { + super(abstractaifapplication, title); + } + + public void confirmAction(int index, String txt) { + if (!((currentRole.equalsIgnoreCase("DBA")) || (currentUser.equals(owningUser)))) { + MessageBox.post("不是时间表所有者或DBA用户,不能修改!", "INFO", MessageBox.ERROR); + return; + } + if(isModifyTaskName){ + modifyTaskName(index, txt, false); + } + if(isModifyDeliveryName){ + modifyDeliveryName(index, txt, false); + } + this.dispose(); + } + + public void modifyTaskName(int index, String txt, boolean isReplace) { + try { + System.out.println("modifyTaskName = " + tasks.length); + for (int i = 0; i < tasks.length; i++) { + TCComponentScheduleTask task = (TCComponentScheduleTask) tasks[i]; + System.out.println("modifyTaskName:: sch_summary_task = " + sch_summary_task); + + if (sch_summary_task != null && !sch_summary_task.equals(task)) { + + String status = task.getTCProperty("fnd0status").getStringValue(); + System.out.println("status = "+status); + //MessageBox.post("status1222222222211111="+status, "INFO", MessageBox.ERROR); + if (status.equals("not_started")||status.equals("未开始")) { + String taskName = task.getProperty("object_name"); + System.out.println("taskName="+taskName); + if (isReplace) { + taskName = replaceName(taskName, replaceSource.getText(), replaceObject.getText()); + task.setProperty("object_name", taskName); + } else { + switch (index) { + case 0: + System.out.println(" scheduleID + taskName=" +scheduleID + taskName); + task.setProperty("object_name", scheduleID + taskName); + break; + case 1: + task.setProperty("object_name", scheduleName + taskName); + break; + case 2: + task.setProperty("object_name", txt + taskName); + break; + } + } + } + } + } + } + catch (TCException e) { + e.printStackTrace(); + } + } + + /** + * modifyDeliveryName:修改时间表交付物名称 + * */ + public void modifyDeliveryName(int index, String txt, boolean isReplace) { + try { + System.out.println("modifyDeliveryName = " + tasks.length); + for (int i = 0; i < tasks.length; i++) { + TCComponentScheduleTask task = (TCComponentScheduleTask) tasks[i]; + String status = task.getProperty("status"); + if (status.equals("0")) { +// String taskName = task.getProperty("object_name"); + TCComponent[] deliveries = task.getReferenceListProperty("sch_task_deliverable_list"); + if (deliveries != null) { + for (int m = 0; m < deliveries.length; m++) { + TCComponentTaskDeliverable delivery = (TCComponentTaskDeliverable) deliveries[m]; + + System.out.println("delivery = " + delivery); + TCComponentScheduleDeliverable scheduleDelivery = (TCComponentScheduleDeliverable) delivery.getReferenceProperty("schedule_deliverable"); + TCComponent deliverable_inst = scheduleDelivery.getReferenceProperty("deliverable_inst"); + if (deliverable_inst == null) { + String deliverable_name = scheduleDelivery.getProperty("deliverable_name"); + String strTaskDeliverableName = delivery.getProperty("object_name"); + System.out.println("strTaskDeliverableName[" + i +"] = " + strTaskDeliverableName); + if (isReplace) { + deliverable_name = replaceName(deliverable_name, replaceSource.getText(), replaceObject.getText()); + scheduleDelivery.setProperty("deliverable_name", deliverable_name); + scheduleDelivery.setProperty("object_name", deliverable_name); + + strTaskDeliverableName = replaceName(strTaskDeliverableName, replaceSource.getText(), replaceObject.getText()); + delivery.setProperty("object_name",strTaskDeliverableName); + } else { + switch (index) { + case 0: + scheduleDelivery.setProperty("deliverable_name", scheduleID + deliverable_name); + scheduleDelivery.setProperty("object_name", scheduleID + deliverable_name); + delivery.setProperty("object_name",scheduleID + strTaskDeliverableName); + break; + case 1: + scheduleDelivery.setProperty("deliverable_name", scheduleName + deliverable_name); + scheduleDelivery.setProperty("object_name", scheduleName + deliverable_name); + delivery.setProperty("object_name",scheduleName + strTaskDeliverableName); + break; + case 2: + scheduleDelivery.setProperty("deliverable_name", txt + deliverable_name); + scheduleDelivery.setProperty("object_name", txt + deliverable_name); + delivery.setProperty("object_name",txt + strTaskDeliverableName); + break; + } + } + } + } + } + } + } + } + catch (TCException e) { + e.printStackTrace(); + } + } + + + public void replaceAction() { + if(isModifyTaskName){ + modifyTaskName(-1, "", true); + } + if(isModifyDeliveryName){ + modifyDeliveryName(-1, "", true); + } + this.dispose(); + } + + public void cancelAction() { + this.dispose(); + } +} \ No newline at end of file diff --git a/src/cn/com/customization/schedule/ModifyTaskOrDeliveryNameHandler.java b/src/cn/com/customization/schedule/ModifyTaskOrDeliveryNameHandler.java new file mode 100644 index 0000000..0b249c6 --- /dev/null +++ b/src/cn/com/customization/schedule/ModifyTaskOrDeliveryNameHandler.java @@ -0,0 +1,39 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: ModifyTaskNameHandler.java +#======================================================================================================= +# Date Name Action Description of Change +# 2010-12-2 tyl Ini 初始化文件 +#======================================================================================================= +*/ +package cn.com.customization.schedule; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; + +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCException; + +public class ModifyTaskOrDeliveryNameHandler extends AbstractHandler{ + + public Object execute(ExecutionEvent arg0) throws ExecutionException { + AbstractAIFUIApplication app = AIFUtility.getCurrentApplication(); + try { + ModifyTaskOrDeliveryNameCommand modifyCommand =new ModifyTaskOrDeliveryNameCommand(app); + modifyCommand.executeModal(); + } + catch (TCException e) { + e.printStackTrace(); + } + catch (Exception e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/src/cn/com/customization/schedule/YSRScheduleTreeTableModel.java b/src/cn/com/customization/schedule/YSRScheduleTreeTableModel.java new file mode 100644 index 0000000..813c7fa --- /dev/null +++ b/src/cn/com/customization/schedule/YSRScheduleTreeTableModel.java @@ -0,0 +1,16 @@ +package cn.com.customization.schedule; + +import com.teamcenter.rac.aif.common.AIFTreeTableModel; +import com.teamcenter.rac.schedule.common.tree.ScheduleTreeLine; + +public class YSRScheduleTreeTableModel extends AIFTreeTableModel { + + /** + * + */ + private static final long serialVersionUID = 1L; + + public YSRScheduleTreeTableModel(ScheduleTreeLine scheduleTreeLine, String []titleNames){ + super(scheduleTreeLine, titleNames); + } +} diff --git a/src/cn/com/customization/schedule/YSRTreeTable.java b/src/cn/com/customization/schedule/YSRTreeTable.java new file mode 100644 index 0000000..5833d2e --- /dev/null +++ b/src/cn/com/customization/schedule/YSRTreeTable.java @@ -0,0 +1,10 @@ +package cn.com.customization.schedule; + +import com.teamcenter.rac.aif.common.AIFTreeTable; + +public class YSRTreeTable extends AIFTreeTable { + + public YSRTreeTable(YSRScheduleTreeTableModel ysrSTTM){ + super(ysrSTTM); + } +} diff --git a/src/cn/com/customization/util/CheckBoxColumnRender.java b/src/cn/com/customization/util/CheckBoxColumnRender.java new file mode 100644 index 0000000..288a92e --- /dev/null +++ b/src/cn/com/customization/util/CheckBoxColumnRender.java @@ -0,0 +1,52 @@ +/* +#============================================================================= +# +# Copyright (c) 2009 Origin Enterprise Solution LTD. +# +#============================================================================= +# File name: CheckBoxColumnRender.java +# File description: +#============================================================================= +# Date Name Action Description of Change +# 2011-4-20 liqz Ini 初始化(From Shaangu) +#============================================================================= +*/ +package cn.com.customization.util; + +import java.awt.Component; + +import javax.swing.JCheckBox; +import javax.swing.JLabel; +import javax.swing.JTable; +import javax.swing.UIManager; +import javax.swing.table.DefaultTableCellRenderer; + +public class CheckBoxColumnRender extends DefaultTableCellRenderer { + + /** + * + */ + private static final long serialVersionUID = 1L; + + /** + * + */ + public CheckBoxColumnRender() { + super(); + } + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + //得到表头 + JCheckBox checkBox=new JCheckBox(); +// JTableHeader header = table.getTableHeader(); +// if (header != null) { +// setForeground(header.getForeground()); +// setBackground(header.getBackground()); +// setFont(header.getFont()); +// } + setHorizontalAlignment(JLabel.CENTER); + checkBox.setSelected(Boolean.valueOf(value.toString())); +// (value == null) ? "" : value.toString() + setBorder(UIManager.getBorder("TableHeader.cellBorder")); + return checkBox; + } +} diff --git a/src/cn/com/customization/util/ColumnGroup.java b/src/cn/com/customization/util/ColumnGroup.java new file mode 100644 index 0000000..353cbc3 --- /dev/null +++ b/src/cn/com/customization/util/ColumnGroup.java @@ -0,0 +1,197 @@ +package cn.com.customization.util; + +import java.awt.Component; +import java.awt.Dimension; +import java.util.Enumeration; +import java.util.Vector; + +import javax.swing.JLabel; +import javax.swing.JTable; +import javax.swing.UIManager; +import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.JTableHeader; +import javax.swing.table.TableCellRenderer; +import javax.swing.table.TableColumn; + +public class ColumnGroup { + protected TableCellRenderer renderer; + + protected Vector v; + + protected String text; + + protected int margin = 0; + + public ColumnGroup(String text) { + this(null, text); + } + + public ColumnGroup(TableCellRenderer renderer, String text) { + if (renderer == null) { + this.renderer = new DefaultTableCellRenderer() { + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + JTableHeader header = table.getTableHeader(); + if (header != null) { + setForeground(header.getForeground()); + setBackground(header.getBackground()); + setFont(header.getFont()); + } + setHorizontalAlignment(JLabel.CENTER); + this.setText((value == null) ? "" : value.toString()); + setBorder(UIManager.getBorder("TableHeader.cellBorder")); + return this; + } + }; + } else { + this.renderer = renderer; + } + this.text = text; + v = new Vector(); + } + + /** + * @param obj TableColumn or ColumnGroup + */ + public void add(Object obj) { + if (obj == null) { return; } + v.addElement(obj); + } + + /** + * @param c TableColumn + * @param v ColumnGroups + */ + public Vector getColumnGroups(TableColumn c, Vector g) { + g.addElement(this); + if (v.contains(c)) + return g; + Enumeration enumeration = v.elements(); + while (enumeration.hasMoreElements()) { + Object obj = enumeration.nextElement(); + if (obj instanceof ColumnGroup) { + Vector groups = (Vector) ((ColumnGroup) obj).getColumnGroups(c, (Vector) g.clone()); + if (groups != null) + return groups; + } + } + return null; + } + + public TableCellRenderer getHeaderRenderer() { + return renderer; + } + + public Object getHeaderValue() { + return text; + } + + public int getSize() { + return v == null ? 0 : v.size(); + } + + public Dimension getSize(JTable table) { + Component comp = renderer.getTableCellRendererComponent(table, getHeaderValue(), false, false, -1, -1); + int height = comp.getPreferredSize().height; + int width = 0; + Enumeration enumeration = v.elements(); + while (enumeration.hasMoreElements()) { + Object obj = enumeration.nextElement(); + if (obj instanceof TableColumn) { + TableColumn aColumn = (TableColumn) obj; + width += aColumn.getWidth(); + width += margin; + } else { + width += ((ColumnGroup) obj).getSize(table).width; + } + } + return new Dimension(width, height); + } + + /** + * 创建日期:(2003-7-14 10:53:26) + * @return java.lang.String + */ + public java.lang.String getText() { + return text; + } + + /** + * 列表头中删除Column 创建日期:(2002-9-25 15:49:00) + */ + public boolean removeColumn(ColumnGroup ptg, TableColumn tc) { + boolean retFlag = false; + if (tc != null) { + for (int i = 0; i < ptg.v.size(); i++) { + Object tmpObj = ptg.v.get(i); + if (tmpObj instanceof ColumnGroup) { + retFlag = removeColumn((ColumnGroup) tmpObj, tc); + // 如果找到返回 + if (retFlag) + break; + } else if (tmpObj instanceof TableColumn) { + // 判断是否查找的对象 + if (tmpObj == tc) { + ptg.v.remove(i); + retFlag = true; + break; + } + } + } + } + return retFlag; + } + + /** + * 列表头中删除ColumnGrp 删除返回true,否则返回false; 创建日期:(2002-9-25 15:49:00) + */ + public boolean removeColumnGrp(ColumnGroup ptg, ColumnGroup tg) { + boolean retFlag = false; + if (tg != null) { + for (int i = 0; i < ptg.v.size(); i++) { + Object tmpObj = ptg.v.get(i); + if (tmpObj instanceof ColumnGroup) { + // 判断是否查找的对象 + if (tmpObj == tg) { + ptg.v.remove(i); + retFlag = true; + break; + } else { + retFlag = removeColumnGrp((ColumnGroup) tmpObj, tg); + // 如果找到返回 + if (retFlag) + break; + + } + } else if (tmpObj instanceof TableColumn) { + break; + } + } + } + return retFlag; + } + + public void setColumnMargin(int margin) { + this.margin = margin; + Enumeration enumeration = v.elements(); + while (enumeration.hasMoreElements()) { + Object obj = enumeration.nextElement(); + if (obj instanceof ColumnGroup) { + ((ColumnGroup) obj).setColumnMargin(margin); + } + } + } + + public void setHeaderRenderer(TableCellRenderer renderer) { + if (renderer != null) { + this.renderer = renderer; + } + } + + /** + * 创建日期:(2003-7-14 10:53:26) + * @param newText java.lang.String + */ + public void setText(java.lang.String newText) { + text = newText; + } +} diff --git a/src/cn/com/customization/util/DataSetFinder.java b/src/cn/com/customization/util/DataSetFinder.java new file mode 100644 index 0000000..496295a --- /dev/null +++ b/src/cn/com/customization/util/DataSetFinder.java @@ -0,0 +1,251 @@ +/* + #======================================================================================================= + # + # Copyright (c) 2007 Origin Enterprise Solution LTD. + # + #======================================================================================================= + # File description: 搜索数据集 + #======================================================================================================= + # Date Name Action Description of Change + # 20090301 Matt Shan Ini 搜索数据集 + #======================================================================================================= + */ +package cn.com.customization.util; + +import java.io.File; + +import com.teamcenter.rac.kernel.TCAccessControlService; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentDataset; +import com.teamcenter.rac.kernel.TCComponentItem; +import com.teamcenter.rac.kernel.TCComponentItemRevision; +import com.teamcenter.rac.kernel.TCComponentItemType; +import com.teamcenter.rac.kernel.TCComponentQuery; +import com.teamcenter.rac.kernel.TCComponentQueryType; +import com.teamcenter.rac.kernel.TCComponentTcFile; +import com.teamcenter.rac.kernel.TCComponentUser; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.kernel.TCTextService; +import com.teamcenter.rac.util.MessageBox; + +public class DataSetFinder { + + private TCSession session = null; + + /** + * 搜索数据集 + * @param session 系统session + */ + public DataSetFinder(TCSession pSession) { + queryType = null; + datasetQuery = null; + boolean flag = false; + try { + session = pSession; + its = session.getTextService(); + queryType = (TCComponentQueryType) session.getTypeComponent("ImanQuery"); + } + catch (TCException imane) { + imane.printStackTrace(); + imane.dump(); + } + try { + datasetQuery = (TCComponentQuery) queryType.find("数据集..."); + } + catch (TCException imane) { + imane.printStackTrace(); + imane.dump(); + flag = true; + } + if (datasetQuery == null || flag) { + try { + datasetQuery = (TCComponentQuery) queryType.find(its.getTextValue("DataSet...")); + } + catch (TCException imane) { + imane.printStackTrace(); + imane.dump(); + } + } + } + + /** + * 查询数据集 + * @param datasetname 数据集名称 + * @return 根据数据集名称查询数据集 + */ + public TCComponentDataset FindDatasetByName(String datasetname, String pOwningUser, String pOwningGroup, String pDatasetType) { + System.out.println("-----------FindDatasetByName"); + try { + //String f_dataset_name[] = { its.getTextValue("Name"), its.getTextValue("OwningUser"), its.getTextValue("OwningGroup"), its.getTextValue("DatasetType") }; + String f_dataset_name[] = new String[4]; + f_dataset_name[0] = its.getTextValue("Name"); + if(f_dataset_name[0] == null){ + f_dataset_name[0] = "Name"; + } + f_dataset_name[1] = its.getTextValue("OwningUser"); + if(f_dataset_name[1] == null){ + f_dataset_name[1] = "Owning User"; + } + f_dataset_name[2] = its.getTextValue("OwningGroup"); + if(f_dataset_name[2] == null){ + f_dataset_name[2] = "Owning Group"; + } + f_dataset_name[3] = its.getTextValue("DatasetType"); + if(f_dataset_name[3] == null){ + f_dataset_name[3] = "Dataset Type"; + } + f_dataset_name_value = new String[4]; + f_dataset_name_value[0] = datasetname; + f_dataset_name_value[1] = pOwningUser; + f_dataset_name_value[2] = pOwningGroup; + f_dataset_name_value[3] = pDatasetType; + com.teamcenter.rac.kernel.TCComponent dataset[] = datasetQuery.execute(f_dataset_name, f_dataset_name_value); + if (dataset == null || dataset.length == 0) { + return null; + } else { + TCComponentDataset dataset0 = (TCComponentDataset) dataset[0]; + TCComponentDataset dataset1 = dataset0.latest(); + return dataset1; + } + } + catch (TCException imane) { + imane.printStackTrace(); + imane.dump(); + return null; + } + } + + /** + * 获取模版数据集 + * @param datasetname 数据集名称 + * @return 根据数据集名称查询数据集 + */ + public TCComponentDataset FindDatasetByName(String datasetname) { + TCComponent[] components = null; + try { + TCComponentItemRevision revision =null; + TCComponentItemType tccomItemType = (TCComponentItemType) session.getTypeComponent("Item"); + TCComponentItem[]items =tccomItemType.findItems(datasetname); + if(items.length >0){ + revision=items[0].getLatestItemRevision() ; + } + components = revision.getRelatedComponents("IMAN_specification");// 通过关系找对象 + for (TCComponent component : components) { + if (component instanceof TCComponentDataset) { + TCComponentDataset dataset = (TCComponentDataset) component; + return dataset; + } + } + } catch (TCException e) { + e.printStackTrace(); + return null; + } + return null; + } + + /** + * 导出数据集相关文件到指定路径 + * @param dataset 数据集 + * @param nameRef 数据集名称 + * @param filename 新命名文件 + * @param dir 导出到得路径 + * @return 新生成文件 + */ + public File ExportFileToDir(TCComponentDataset dataset, String nameRef, String filename, String dir) { + File exportFile = null; + try { + String workdir = dir; + File tFile = new File(workdir, filename); + if (tFile.exists()) + tFile.delete(); + if (!checkAccessPrivilige(session.getUser(), dataset, "EXPORT")) { + MessageBox.post("您没有权限下载报表模板文件!", "提示", MessageBox.WARNING); + return null; + } + TCComponentTcFile files[] = dataset.getTcFiles(); + if (files.length != 1) { + MessageBox.post("请检查报表模板文件是否配置正确!", "提示", MessageBox.WARNING); + return null; + } + for (int i = 0; i < files.length; i++) { + exportFile = files[i].getFile(workdir, filename); + } + return exportFile; + } + catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + private boolean checkAccessPrivilige(TCComponentUser user, TCComponent comp, String accessName) throws TCException { + TCAccessControlService accessService = ((TCSession) session).getTCAccessControlService(); + boolean returnboolean = accessService.checkUsersPrivilege(user, comp, accessName); + return returnboolean; + } + + /** + * 导出数据集相关文件到指定路径 + * @param dataset 数据集 + * @param nameRef 数据集名称 + * @param filename 新命名文件 + * @param dir 导出到得路径 + * @return 新生成文件 + */ + public File ExportFileToDir(TCComponentDataset dataset, String filename, String dir) { + File exportFile = null; + try { + String workdir = dir; + File tFile = new File(workdir, filename); + if (tFile.exists()) + tFile.delete(); + if (!checkAccessPrivilige(session.getUser(), dataset, "EXPORT")) { + MessageBox.post("您没有权限下载报表模板文件!", "提示", MessageBox.WARNING); + return null; + } + TCComponentTcFile files[] = dataset.getTcFiles(); + if (files.length != 1) { + MessageBox.post("请检查报表模板文件是否配置正确!", "提示", MessageBox.WARNING); + return null; + } + for (int i = 0; i < files.length; i++) { + exportFile = files[i].getFile(workdir, filename); + } + return exportFile; + } + catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public File ExportFileToDir(TCComponentDataset dataset, String dir) { + File exportFile = null; + try { + String workdir = dir; + if (!checkAccessPrivilige(session.getUser(), dataset, "EXPORT")) { + MessageBox.post("您没有权限下载报表模板文件!", "提示", MessageBox.WARNING); + return null; + } + TCComponentTcFile files[] = dataset.getTcFiles(); + if (files.length != 1) { + MessageBox.post("请检查报表模板文件是否配置正确!", "提示", MessageBox.WARNING); + return null; + } + for (int i = 0; i < files.length; i++) { + exportFile = files[i].getFile(workdir); + } + return exportFile; + } + catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + private TCComponentQueryType queryType; + private TCComponentQuery datasetQuery; + private TCTextService its; + private String f_dataset_name_value[]; +} diff --git a/src/cn/com/customization/util/GetAllUserIds.java b/src/cn/com/customization/util/GetAllUserIds.java new file mode 100644 index 0000000..3bd2af7 --- /dev/null +++ b/src/cn/com/customization/util/GetAllUserIds.java @@ -0,0 +1,132 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: GetAllUserIds.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-17 下午03:51:32 tyl Ini 初始化文件 +#======================================================================================================= + */ +package cn.com.customization.util; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.kernel.TCComponentContextList; +import com.teamcenter.rac.kernel.TCComponentQuery; +import com.teamcenter.rac.kernel.TCComponentQueryType; +import com.teamcenter.rac.kernel.TCComponentUser; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.kernel.TCTextService; + +public class GetAllUserIds { + private AbstractAIFUIApplication pseapp; + /** + * TC中定义的Query对象 + */ + private String findType = "__WEB_find_user"; + /** + * TC中定义的Query对象的搜索条件中的用户本地化键 + */ + private String str_key = "UserId"; + /** + * TC中定义的Query对象中本地化键的取值 + */ + private String str_value = "*"; + /** + * 用来包装用户信息 + */ + private List allUsers = null; + private Map userMap; + + public GetAllUserIds(AbstractAIFUIApplication app) { + System.out.println("_______________GetAllUserIds________"); + this.pseapp = app; + userMap = new HashMap(); + allUsers = new ArrayList(); + getAllUser(); + } + + /** + * getAllUser:通过查询构建器得到所有的用户 + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public void getAllUser() { + System.out.println("__________getAllUser__________"); + TCSession session = (TCSession) pseapp.getSession(); + InterfaceAIFComponent components[] = null; + TCComponentUser user = null; + try { + TCTextService textService = session.getTextService(); + TCComponentQueryType querytype = (TCComponentQueryType) session.getTypeComponent("ImanQuery"); + TCComponentQuery query = (TCComponentQuery) querytype.find(findType); + //querytype.clearCache(); + String as[] = { textService.getTextValue(str_key) }; + String as1[] = new String[1]; + as1[0] = str_value; + //query.clearCache(); + TCComponentContextList list = query.getExecuteResultsList(as, as1); + System.out.println("list = "+list); + if (list != null) { + int count = list.getListCount(); + System.out.println("count = " + count); + if(count > 0){ + components = new InterfaceAIFComponent[count]; + for (int i = 0; i < count; i++) { + if(list.get(i) != null){ + components[i] = list.get(i).getComponent(); + } + } + } + } else { + System.out.println("__WEB_find_user==null"); + } + } + catch (TCException e) { + e.printStackTrace(); + } + for (int i = 0; i < components.length; i++) { + if (components[i] instanceof TCComponentUser) { + user = (TCComponentUser) components[i]; + try { + String userid = user.getUserId().toString(); + String userName = user.getProperty("user_name"); + userMap.put(userid + "(" + userName + ")", user.toString()); + allUsers.add(userid + "(" + userName + ")"); + } + catch (TCException e) { + e.printStackTrace(); + } + } + } + } + + private static List userIDs = new ArrayList(); + + public static synchronized void setUsers(List users) { + userIDs = users; + } + + public static synchronized List getUsers() { + return userIDs; + } + + public List getAllUsers() { + return allUsers; + } + + public Map getUserMap() { + return userMap; + } +} diff --git a/src/cn/com/customization/util/GetChoosePath.java b/src/cn/com/customization/util/GetChoosePath.java new file mode 100644 index 0000000..e7b02b5 --- /dev/null +++ b/src/cn/com/customization/util/GetChoosePath.java @@ -0,0 +1,100 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: GetChoosePath.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-17 下午03:45:21 tyl Ini 初始化文件 +#======================================================================================================= +*/ +package cn.com.customization.util; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStreamReader; + +import javax.swing.JFileChooser; + +public class GetChoosePath { + + public String getPath(String filename) { + String tempPath = System.getProperty("java.io.tmpdir"); + File tempFile = new File(tempPath + filename); + JFileChooser jfc = null; + if (!tempFile.exists()) { + try { + tempFile.createNewFile(); + jfc = new JFileChooser(); + } catch (IOException e) { + e.printStackTrace(); + } + } else { + if (tempFile.exists()) { + BufferedReader in; + try { + in = new BufferedReader(new InputStreamReader(new FileInputStream(tempFile))); + String line; + try { + line = in.readLine(); + if ((line != null) && (line.length() > 0)) { + File file = new File(line); + if (file.exists()) { + jfc = new JFileChooser(file); + } else { + jfc = new JFileChooser(); + } + } else { + jfc = new JFileChooser(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } + } + } + jfc.setFileSelectionMode(JFileChooser.SAVE_DIALOG); + jfc.setInheritsPopupMenu(true); +// jfc.setDialogTitle("..."); + jfc.setMultiSelectionEnabled(false); + + jfc.setFileFilter(new javax.swing.filechooser.FileFilter() { + @Override + public boolean accept(File f) { + if (f.isDirectory()) + return true; + else + return false; + } + + @Override + public String getDescription() { + return null;//写的是文件的类型 + } + }); + + int openOrCancel = jfc.showSaveDialog(null); + if (openOrCancel == 0) { + try { + BufferedWriter output; + output = new BufferedWriter(new FileWriter(tempFile)); + output.write(jfc.getSelectedFile().getAbsolutePath()); + output.close(); + } catch (IOException e1) { + e1.printStackTrace(); + } + File file = jfc.getSelectedFile(); + return file.getAbsolutePath(); + } + return ""; + } +} \ No newline at end of file diff --git a/src/cn/com/customization/util/GetCommonInfo.java b/src/cn/com/customization/util/GetCommonInfo.java new file mode 100644 index 0000000..14e0fd8 --- /dev/null +++ b/src/cn/com/customization/util/GetCommonInfo.java @@ -0,0 +1,164 @@ +/* +#============================================================================= +# +# copyright (c) 2009 Origin Enterprise Solution LTD. +# +#============================================================================= +# File name: GetCommonInfo.java +# File description: +#============================================================================= +# Date Name Action Description of Change +# 2011-4-20 liqz 创建 得到一些通用信息(From shangu) +#============================================================================= + */ +package cn.com.customization.util; + +import java.awt.HeadlessException; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStreamReader; + +import javax.swing.JFileChooser; + +import com.teamcenter.rac.kernel.TCAccessControlService; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentUser; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCPreferenceService; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.MessageBox; + +public class GetCommonInfo { + private TCSession session; + + public GetCommonInfo(TCSession session) { + this.session = session; + + } + + /** + * getChoosePath:得到用户所选择的路径 + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public String getChoosePath() { + String tempPath = System.getProperty("java.io.tmpdir"); + String currentPath = ""; + try { + File file1 = new File(tempPath + "\\export.txt"); + JFileChooser jfc = null; + if (file1.exists()) { + BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file1))); + String line = in.readLine(); + if (line != null) { + jfc = new JFileChooser(new File(line)); + } else { + jfc = new JFileChooser(); + } + } else { + jfc = new JFileChooser(); + } + + jfc.setFileSelectionMode(JFileChooser.SAVE_DIALOG); + int openOrCann = jfc.showSaveDialog(null); + if (openOrCann == 1) { + return currentPath; + } + // 用来存储用户所选的路径: + File file2 = new File(tempPath + "\\export.txt"); + if (!file2.exists()) { + file2.createNewFile(); + } + try { + BufferedWriter output = new BufferedWriter(new FileWriter(file2)); + output.write(jfc.getSelectedFile().getAbsolutePath()); + output.close(); + currentPath = jfc.getSelectedFile().getAbsolutePath(); + } catch (IOException e) { + e.printStackTrace(); + } + + } catch (HeadlessException e) { + e.printStackTrace(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return currentPath; + } + + public boolean isExistFiles(String path) { + boolean flag = false; + File file = new File(path); + if (file.isDirectory()) { + if (file.listFiles().length > 0) { + flag = true; + } + } + return flag; + } + + /** + * existFile:判断文件是否存在 + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public boolean existFile(String filePath, String fileName) { + boolean exist = false; + try { + if (fileName.indexOf('/') >= 0) { + fileName = fileName.replace('/', '_'); + } + File file = new File(filePath + "\\" + fileName); + System.out.println("filePath_fileName:" + filePath + "\\" + fileName); + if (file.exists()) { + exist = true; + } + } catch (Exception e) { + e.printStackTrace(); + MessageBox.post("在检查文件是否存在的时候,出现错误!", "ERROR", MessageBox.ERROR); + } + return exist; + } + + /** + * 是否已经发布 + * @param tccomponent 对象 + * @return 是否发布 + */ + public boolean isReleased(TCComponent tccomponent) { + boolean flag = false; + try { + String s = tccomponent.getProperty("release_status_list"); + if (s != null && s.length() > 0) + flag = true; + } catch (TCException tcexception) { + flag = false; + } + return flag; + } + + /** + * existFile:检验是否有权限 + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public boolean checkAccessPrivilige(TCComponentUser user, TCComponent comp, String accessName) throws TCException { + TCAccessControlService accessService = ((TCSession) session).getTCAccessControlService(); + boolean returnboolean = accessService.checkUsersPrivilege(user, comp, accessName); + return returnboolean; + } + +} diff --git a/src/cn/com/customization/util/GetMessageDialog.java b/src/cn/com/customization/util/GetMessageDialog.java new file mode 100644 index 0000000..bfa86f6 --- /dev/null +++ b/src/cn/com/customization/util/GetMessageDialog.java @@ -0,0 +1,91 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: GetMessageDialog.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-17 下午04:01:59 tyl Ini 初始化文件 +#======================================================================================================= +*/ +package cn.com.customization.util; + +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.net.URL; + +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; + +import com.teamcenter.rac.aif.AbstractAIFDialog; +import com.teamcenter.rac.util.PropertyLayout; +import com.teamcenter.rac.util.Separator; +import com.teamcenter.rac.util.VerticalLayout; + +public class GetMessageDialog extends AbstractAIFDialog { + /** + * serialVersionUID:TODO(用一句话描述这个变量表示什么) + * @since Ver 1.1 + */ + + private static final long serialVersionUID = 1L; + private int value = 0; + private String title = ""; + private String info = ""; + + public GetMessageDialog(String title, String info) { + super(true); + this.title=title; + this.info=info; + this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); + } + + public int getValue() { + setPersistentDisplay(true); + setOptimalDisplay(false); + setTitle(title); + JPanel parentPanel; + JPanel itemInfoPanel; + parentPanel = new JPanel(new VerticalLayout(5, 2, 2, 2, 2)); + itemInfoPanel = new JPanel(new PropertyLayout()); + + URL url=this.getClass().getResource("image/info.png"); + JLabel iconLabel=new JLabel(); + iconLabel.setIcon(new ImageIcon(url)); + + itemInfoPanel.add("1.1.left.center",iconLabel); + itemInfoPanel.add("1.2.left.center",new JLabel(info)); + JButton buttonYes = new JButton("是"); + buttonYes.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + value = 0; + GetMessageDialog.this.dispose(); + } + }); + JButton buttonNo = new JButton("否"); + buttonNo.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + value = 1; + GetMessageDialog.this.dispose(); + } + }); + JPanel panelButton = new JPanel(new FlowLayout()); + panelButton.add(buttonYes); + panelButton.add(buttonNo); + parentPanel.add("top.bin", new Separator()); + parentPanel.add("top.bind.left.top", itemInfoPanel); + parentPanel.add("bottom.nobind.center.top", panelButton); + getContentPane().add(parentPanel); + pack(); + Dimension screen = getToolkit().getScreenSize(); // 得到屏幕尺寸 + setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2); + setVisible(true); + return value; + } +} \ No newline at end of file diff --git a/src/cn/com/customization/util/GetMessagePromptDialog.java b/src/cn/com/customization/util/GetMessagePromptDialog.java new file mode 100644 index 0000000..9e7d337 --- /dev/null +++ b/src/cn/com/customization/util/GetMessagePromptDialog.java @@ -0,0 +1,106 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: GetMessagePromptDialog.java +#======================================================================================================= +# Date Name Action Description of Change +# 2009-11-13 tyl 创建 消息提示窗体 +#======================================================================================================= + */ +package cn.com.customization.util; + +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.net.URL; + +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; + +import com.teamcenter.rac.aif.AbstractAIFDialog; +import com.teamcenter.rac.util.PropertyLayout; +import com.teamcenter.rac.util.VerticalLayout; + +public class GetMessagePromptDialog extends AbstractAIFDialog { + + /** + * serialVersionUID:TODO(用一句话描述这个变量表示什么) + * @since Ver 1.1 + */ + + private static final long serialVersionUID = 1L; + private String title; + private String info; + private String info2; + private int value = 1; + + /** + * Creates a new instance of PromptDialog. + */ + + public GetMessagePromptDialog(String title, String info) { + super(true); + this.title = title; + this.info = info; + } + + public GetMessagePromptDialog(String title, String info, String info2) { + super(true); + this.title = title; + this.info = info; + this.info2 = info2; + } + + // 返回决定: + public int getValue() { + setPersistentDisplay(true); + setOptimalDisplay(false); + setTitle(title); + + JPanel parentPanel; + JPanel itemInfoPanel; + parentPanel = new JPanel(new VerticalLayout(5, 2, 2, 2, 2)); + itemInfoPanel = new JPanel(new PropertyLayout()); + URL url = this.getClass().getResource("image/info.png"); + JLabel iconLabel = new JLabel(); + iconLabel.setIcon(new ImageIcon(url)); + + itemInfoPanel.add("1.1.left.center", iconLabel); + itemInfoPanel.add("1.2.left.center", new JLabel(info)); + itemInfoPanel.add("2.1.left.center", new JLabel(" ")); + itemInfoPanel.add("2.2.left.center", new JLabel(info2)); + JButton buttonYes = new JButton("是"); + buttonYes.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + value = 0; + GetMessagePromptDialog.this.dispose(); + } + }); + JButton buttonNo = new JButton("否"); + buttonNo.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + value = 1; + GetMessagePromptDialog.this.dispose(); + } + }); + JPanel panelButton = new JPanel(new FlowLayout()); + panelButton.add(buttonYes); + panelButton.add(buttonNo); + parentPanel.add("top.bin", new JLabel(" ")); + parentPanel.add("top.bind.left.top", itemInfoPanel); + parentPanel.add("bottom.nobind.center.top", panelButton); + getContentPane().add(parentPanel); + pack(); + Dimension screen = getToolkit().getScreenSize(); // 得到屏幕尺寸 + setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2); + setVisible(true); + return value; + } + +} diff --git a/src/cn/com/customization/util/GroupableTableHeader.java b/src/cn/com/customization/util/GroupableTableHeader.java new file mode 100644 index 0000000..e45705b --- /dev/null +++ b/src/cn/com/customization/util/GroupableTableHeader.java @@ -0,0 +1,89 @@ +package cn.com.customization.util; + + +import java.util.Enumeration; +import java.util.Vector; + +import javax.swing.table.JTableHeader; +import javax.swing.table.TableColumn; +import javax.swing.table.TableColumnModel; + + + +/** + * GroupableTableHeader + * @author flyx + */ + +public class GroupableTableHeader extends JTableHeader { + /** + * + */ + private static final long serialVersionUID = 1L; + private static final String uiClassID = "GroupableTableHeaderUI"; + protected Vector columnGroups = null; + public GroupableTableHeader(TableColumnModel model) { + super(model); + setUI(new GroupableTableHeaderUI()); + setReorderingAllowed(false); + setRequestFocusEnabled(false); + } +public void addColumnGroup(ColumnGroup g) { + if (columnGroups == null) { + columnGroups = new Vector(); + } + columnGroups.addElement(g); +} +/** + * + * 创建日期:(2001-8-31 15:54:29) + */ +public void clearColumnGroups() { + columnGroups = null; +} +public ColumnGroup[] getColumnGroups() { + ColumnGroup[] retg=null; + if (columnGroups.size()>0) { + retg=new ColumnGroup[columnGroups.size()]; + columnGroups.copyInto(retg); + } + return retg; +} +public Enumeration getColumnGroups(TableColumn col) { + if (columnGroups == null) + return null; + Enumeration enumi = columnGroups.elements(); + while (enumi.hasMoreElements()) { + ColumnGroup cGroup = (ColumnGroup) enumi.nextElement(); + Vector v_ret = (Vector) cGroup.getColumnGroups(col, new Vector()); + if (v_ret != null) { + return v_ret.elements(); + } + } + return null; +} +/** + * Identifies whether or not this component can receive the focus. + * A disabled button, for example, would return false. + * + * @return true if this component can receive the focus + */ +public boolean isFocusTraversable() { + return super.isFocusTraversable() && isRequestFocusEnabled(); +} +public void setColumnMargin() { + if (columnGroups == null) + return; + int columnMargin = getColumnModel().getColumnMargin(); + Enumeration enumi = columnGroups.elements(); + while (enumi.hasMoreElements()) { + ColumnGroup cGroup = (ColumnGroup) enumi.nextElement(); + cGroup.setColumnMargin(columnMargin); + } +} +public void setReorderingAllowed(boolean b) { + reorderingAllowed = b; +} +} + + diff --git a/src/cn/com/customization/util/GroupableTableHeaderUI.java b/src/cn/com/customization/util/GroupableTableHeaderUI.java new file mode 100644 index 0000000..bcd951d --- /dev/null +++ b/src/cn/com/customization/util/GroupableTableHeaderUI.java @@ -0,0 +1,242 @@ +package cn.com.customization.util; + + +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Rectangle; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Vector; + +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JTable; +import javax.swing.UIManager; +import javax.swing.plaf.basic.BasicTableHeaderUI; +import javax.swing.table.*; + +/** + * 多表头TableHeaderUI + * + * @author flyx + */ +public class GroupableTableHeaderUI extends BasicTableHeaderUI { + private int m_height; + + private Dimension createHeaderSize(long width) { + TableColumnModel columnModel = header.getColumnModel(); + width += columnModel.getColumnMargin() * columnModel.getColumnCount(); + if (width > Integer.MAX_VALUE) { + width = Integer.MAX_VALUE; + } + return new Dimension((int) width, getHeaderHeight()); + } + + /** + * 获得该多表头下的基本列数(zjb) 递归 创建日期:(02-4-8 18:03:56) + * + * @return int + * @param cg + * nc.ui.pub.beans.table.ColumnGroup + */ + private int getColCountUnderColGroup(ColumnGroup cg, int iCount) { + Vector v = cg.v; + for (int i = 0; i < v.size(); i++) { + Object obj = v.elementAt(i); + if (obj instanceof ColumnGroup) + iCount = getColCountUnderColGroup((ColumnGroup) obj, iCount); + else + iCount++; + } + return iCount; + } + + public int getHeaderHeight() { + int height = 0; + TableColumnModel columnModel = header.getColumnModel(); + for (int column = 0; column < columnModel.getColumnCount(); column++) { + TableColumn aColumn = columnModel.getColumn(column); + TableCellRenderer renderer = aColumn.getHeaderRenderer(); + // + if (renderer == null) { + renderer = new DefaultTableCellRenderer() { + public Component getTableCellRendererComponent( + JTable table, Object value, boolean isSelected, + boolean hasFocus, int row, int column) { + JTableHeader header = table.getTableHeader(); + if (header != null) { + setForeground(header.getForeground()); + setBackground(header.getBackground()); + setFont(header.getFont()); + } + setHorizontalAlignment(JLabel.CENTER); + setText((value == null) ? "" : value.toString()); + setBorder(UIManager.getBorder("TableHeader.cellBorder")); + return this; + } + }; + } + // + Component comp = renderer.getTableCellRendererComponent(header + .getTable(), aColumn.getHeaderValue(), false, false, -1, + column); + int cHeight = comp.getPreferredSize().height; + Enumeration enumeration = ((GroupableTableHeader) header) + .getColumnGroups(aColumn); + if (enumeration != null) { + while (enumeration.hasMoreElements()) { + ColumnGroup cGroup = (ColumnGroup) enumeration + .nextElement(); + cHeight += cGroup.getSize(header.getTable()).height; + } + } + height = Math.max(height, cHeight); + } + height = Math.max(height, m_height); + return height; + } + + public Dimension getPreferredSize(JComponent c) { + long width = 0; + Enumeration enumeration = header.getColumnModel().getColumns(); + while (enumeration.hasMoreElements()) { + TableColumn aColumn = (TableColumn) enumeration.nextElement(); + width = width + aColumn.getWidth(); + } + + return createHeaderSize(width); + } + + public void paint(Graphics g, JComponent c) { + Rectangle clipBounds = g.getClipBounds(); + if (header.getColumnModel() == null) + return; + ((GroupableTableHeader) header).setColumnMargin(); + int column = 0; + Dimension size = header.getSize(); + Rectangle cellRect = new Rectangle(0, 0, size.width, size.height); + Hashtable h = new Hashtable(); + int columnMargin = header.getColumnModel().getColumnMargin(); + Enumeration enumeration = header.getColumnModel().getColumns(); + while (enumeration.hasMoreElements()) { + cellRect.height = size.height; + cellRect.y = 0; + TableColumn aColumn = (TableColumn) enumeration.nextElement(); + Enumeration cGroups = ((GroupableTableHeader) header) + .getColumnGroups(aColumn); + if (cGroups != null) { + int groupHeight = 0; + while (cGroups.hasMoreElements()) { + ColumnGroup cGroup = (ColumnGroup) cGroups.nextElement(); + Rectangle groupRect = (Rectangle) h.get(cGroup); + if (groupRect == null) { + groupRect = new Rectangle(cellRect); + Dimension d = cGroup.getSize(header.getTable()); + if (!System.getProperty("java.vm.version").startsWith( + "1.2")) { + int iColCount = getColCountUnderColGroup(cGroup, 0); // 获得该多表头下的基本列数(zjb) + // System.out.println(iColCount); + groupRect.width = d.width - iColCount + * columnMargin; + } else + groupRect.width = d.width; + groupRect.height = d.height; + h.put(cGroup, groupRect); + } + paintCell(g, groupRect, cGroup); + groupHeight += groupRect.height; + cellRect.height = size.height - groupHeight; + cellRect.y = groupHeight; + } + } + if (!System.getProperty("java.vm.version").startsWith("1.2")) + cellRect.width = aColumn.getWidth(); + else + cellRect.width = aColumn.getWidth() + columnMargin; + + if (cellRect.intersects(clipBounds)) { + paintCell(g, cellRect, column); + } + cellRect.x += cellRect.width; + column++; + } + } + + private void paintCell(Graphics g, Rectangle cellRect, int columnIndex) { + TableColumn aColumn = header.getColumnModel().getColumn(columnIndex); + TableCellRenderer renderer = aColumn.getHeaderRenderer(); + // + if (renderer == null) { + renderer = new DefaultTableCellRenderer() { + public Component getTableCellRendererComponent(JTable table, + Object value, boolean isSelected, boolean hasFocus, + int row, int column) { + JTableHeader header = table.getTableHeader(); + if (header != null) { + setForeground(header.getForeground()); + setBackground(header.getBackground()); + setFont(header.getFont()); + } + setHorizontalAlignment(JLabel.CENTER); + setText((value == null) ? "" : value.toString()); + setBorder(UIManager.getBorder("TableHeader.cellBorder")); + return this; + } + }; + } + // + // Component component = + // renderer.getTableCellRendererComponent(header.getTable(), + // aColumn.getHeaderValue(), false, false, -1, columnIndex); + // + String headerValue = aColumn.getHeaderValue().toString(); + Component component = renderer.getTableCellRendererComponent(header + .getTable(), headerValue, false, false, -1, columnIndex); + + rendererPane.add(component); + rendererPane.paintComponent(g, component, header, cellRect.x, + cellRect.y, cellRect.width, cellRect.height, true); + } + + private void paintCell(Graphics g, Rectangle cellRect, ColumnGroup cGroup) { + TableCellRenderer renderer = cGroup.getHeaderRenderer(); + // + if (renderer == null) { + renderer = new DefaultTableCellRenderer() { + public Component getTableCellRendererComponent(JTable table, + Object value, boolean isSelected, boolean hasFocus, + int row, int column) { + JTableHeader header = table.getTableHeader(); + if (header != null) { + setForeground(header.getForeground()); + setBackground(header.getBackground()); + setFont(header.getFont()); + } + setHorizontalAlignment(JLabel.CENTER); + setText((value == null) ? "" : value.toString()); + setBorder(UIManager.getBorder("TableHeader.cellBorder")); + return this; + } + }; + } + // + // Component component = + // renderer.getTableCellRendererComponent(header.getTable(), + // cGroup.getHeaderValue(), false, false, -1, -1); + // + String headerValue = cGroup.getHeaderValue().toString(); + Component component = renderer.getTableCellRendererComponent(header + .getTable(), headerValue, false, false, -1, -1); + + rendererPane.add(component); + rendererPane.paintComponent(g, component, header, cellRect.x, + cellRect.y, cellRect.width, cellRect.height, true); + } + + public void setHeaderHeight(int iHeight) { + m_height = iHeight; + } +} + + diff --git a/src/cn/com/customization/util/KUtil.java b/src/cn/com/customization/util/KUtil.java new file mode 100644 index 0000000..5ca1ba5 --- /dev/null +++ b/src/cn/com/customization/util/KUtil.java @@ -0,0 +1,54 @@ +package cn.com.customization.util; + +import java.awt.Dimension; +import java.awt.Toolkit; + +import com.teamcenter.rac.aif.AbstractAIFDialog; +import com.teamcenter.rac.commands.open.OpenFormDialog; + +public class KUtil { + public static final int MINWIDTH = 1280; + public static final int MINHEIGHT = 768; + + public static void fitToScreen(AbstractAIFDialog abstractAIFDialog) { + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + double screenWidth = screenSize.getWidth(); + double screenHeight = screenSize.getHeight(); + Dimension dialogSize = abstractAIFDialog.getSize(); + if (screenWidth < MINWIDTH && dialogSize.getWidth() > screenWidth) { + abstractAIFDialog.setSize(new Dimension((int) Math.floor(screenWidth - 20), (int) Math.floor(dialogSize.getHeight()))); + abstractAIFDialog.setLocation(10, (int) Math.floor(abstractAIFDialog.getLocation().getY())); + } + if (screenHeight < MINHEIGHT && dialogSize.getHeight() > screenHeight) { + abstractAIFDialog.setSize(new Dimension((int) Math.floor(dialogSize.getWidth()), (int) Math.floor(screenHeight - 20))); + abstractAIFDialog.setLocation((int) Math.floor(abstractAIFDialog.getLocation().getX()), 10); + } + /* + * if((screenWidth + * MINWIDTH||dialogSize.getHeight()>MINHEIGHT)) { abstractAIFDialog.setSize(new + * Dimension((int)Math.floor(screenWidth-20),(int)Math.floor(screenHeight-20))); + * abstractAIFDialog.setLocation(10, 10); } + */ + } + + public static void fitToScreen(OpenFormDialog openFormDialog) { + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + double screenWidth = screenSize.getWidth(); + double screenHeight = screenSize.getHeight(); + Dimension dialogSize = openFormDialog.getSize(); + if (screenWidth < MINWIDTH && dialogSize.getWidth() > screenWidth) { + openFormDialog.setSize(new Dimension((int) Math.floor(screenWidth - 20), (int) Math.floor(dialogSize.getHeight()))); + openFormDialog.setLocation(10, (int) Math.floor(openFormDialog.getLocation().getY())); + } + if (screenHeight < MINHEIGHT && dialogSize.getHeight() > screenHeight) { + openFormDialog.setSize(new Dimension((int) Math.floor(dialogSize.getWidth()), (int) Math.floor(screenHeight - 20))); + openFormDialog.setLocation((int) Math.floor(openFormDialog.getLocation().getX()), 10); + } + /* + * if((screenWidth + * MINWIDTH||dialogSize.getHeight()>MINHEIGHT)) { openFormDialog.setSize(new + * Dimension((int)Math.floor(screenWidth-20),(int)Math.floor(screenHeight-20))); + * openFormDialog.setLocation(10, 10); } + */ + } +} diff --git a/src/cn/com/customization/util/PackFailDownInfo.java b/src/cn/com/customization/util/PackFailDownInfo.java new file mode 100644 index 0000000..09eb5a2 --- /dev/null +++ b/src/cn/com/customization/util/PackFailDownInfo.java @@ -0,0 +1,151 @@ +/* +#============================================================================= +# +# Copyright (c) 2009 Origin Enterprise Solution LTD. +# +#============================================================================= +# File name: PackFailDownInfo.java +# File description: +#============================================================================= +# Date Name Action Description of Change +# 2011-4-20 liqz Ini 初始化(From Shaangu) +#============================================================================= +*/ +package cn.com.customization.util; + +import com.teamcenter.rac.kernel.TCComponentDataset; +import com.teamcenter.rac.kernel.TCComponentItemRevision; + +public class PackFailDownInfo { + private TCComponentItemRevision itemRev=null; + private String itemId; + private String rev; + private String datasetName; + private String reference_file; + private TCComponentDataset dataSet; + private String filePath=""; + private String reason=""; + private String owner=""; + private String needDown="false"; + /** + * @return the owner + */ + public String getOwner() { + return owner; + } + /** + * @return the itemRev + */ + public TCComponentItemRevision getItemRev() { + return itemRev; + } + /** + * @param itemRev the itemRev to set + */ + public void setItemRev(TCComponentItemRevision itemRev) { + this.itemRev = itemRev; + } + /** + * @param owner the owner to set + */ + public void setOwner(String owner) { + this.owner = owner; + } + /** + * @return the itemId + */ + public String getItemId() { + return itemId; + } + /** + * @param itemId the itemId to set + */ + public void setItemId(String itemId) { + this.itemId = itemId; + } + /** + * @return the rev + */ + public String getRev() { + return rev; + } + /** + * @param rev the rev to set + */ + public void setRev(String rev) { + this.rev = rev; + } + /** + * @return the datasetName + */ + public String getDatasetName() { + return datasetName; + } + /** + * @param datasetName the datasetName to set + */ + public void setDatasetName(String datasetName) { + this.datasetName = datasetName; + } + /** + * @return the reference_file + */ + public String getReference_file() { + return reference_file; + } + /** + * @param reference_file the reference_file to set + */ + public void setReference_file(String reference_file) { + this.reference_file = reference_file; + } + /** + * @return the dataSet + */ + public TCComponentDataset getDataSet() { + return dataSet; + } + /** + * @param dataSet the dataSet to set + */ + public void setDataSet(TCComponentDataset dataSet) { + this.dataSet = dataSet; + } + /** + * @return the filePath + */ + public String getFilePath() { + return filePath; + } + /** + * @param filePath the filePath to set + */ + public void setFilePath(String filePath) { + this.filePath = filePath; + } + /** + * @return the reason + */ + public String getReason() { + return reason; + } + /** + * @param reason the reason to set + */ + public void setReason(String reason) { + this.reason = reason; + } + /** + * @return the needDown + */ + public String getNeedDown() { + return needDown; + } + /** + * @param needDown the needDown to set + */ + public void setNeedDown(String needDown) { + this.needDown = needDown; + } + +} diff --git a/src/cn/com/customization/util/PackResultInfo.java b/src/cn/com/customization/util/PackResultInfo.java new file mode 100644 index 0000000..aafd5e2 --- /dev/null +++ b/src/cn/com/customization/util/PackResultInfo.java @@ -0,0 +1,203 @@ +/* +#============================================================================= +# +# Copyright (c) 2009 Origin Enterprise Solution LTD. +# +#============================================================================= +# File name: PackResultInfo.java +# File description: +#============================================================================= +# Date Name Action Description of Change +# 2011-4-20 liqz Ini 初始化(From Shaangu) +#============================================================================= + */ +package cn.com.customization.util; + +import java.util.List; + +public class PackResultInfo { + + // 时间:2010-06-15:8890 下载人:XXXXXX, 所选流程(目录):XXXXXXXXXX + + private String time = ""; + private String person = ""; + private String job = ""; + private int needNum = 0; + private int successNum = 0; + private int failNum = 0; + private int noReferenceNum = 0; + private int noPrivilegelNum = 0; + private int equalNameNum = 0; + private int noReleasedNum = 0; + private int existDataSetCount = 0; + private List failDownInfo = null; + + /** + * @return the time + */ + public String getTime() { + return time; + } + + /** + * @param time the time to set + */ + public void setTime(String time) { + this.time = time; + } + + /** + * @return the person + */ + public String getPerson() { + return person; + } + + /** + * @param person the person to set + */ + public void setPerson(String person) { + this.person = person; + } + + /** + * @return the job + */ + public String getJob() { + return job; + } + + /** + * @param job the job to set + */ + public void setJob(String job) { + this.job = job; + } + + /** + * @return the needNum + */ + public int getNeedNum() { + return needNum; + } + + /** + * @param needNum the needNum to set + */ + public void setNeedNum(int needNum) { + this.needNum = needNum; + } + + /** + * @return the successNum + */ + public int getSuccessNum() { + return successNum; + } + + /** + * @param successNum the successNum to set + */ + public void setSuccessNum(int successNum) { + this.successNum = successNum; + } + + /** + * @return the failNum + */ + public int getFailNum() { + return failNum; + } + + /** + * @param failNum the failNum to set + */ + public void setFailNum(int failNum) { + this.failNum = failNum; + } + + /** + * @return the noReferenceNum + */ + public int getNoReferenceNum() { + return noReferenceNum; + } + + /** + * @param noReferenceNum the noReferenceNum to set + */ + public void setNoReferenceNum(int noReferenceNum) { + this.noReferenceNum = noReferenceNum; + } + + /** + * @return the noPrivilegelNum + */ + public int getNoPrivilegelNum() { + return noPrivilegelNum; + } + + /** + * @param noPrivilegelNum the noPrivilegelNum to set + */ + public void setNoPrivilegelNum(int noPrivilegelNum) { + this.noPrivilegelNum = noPrivilegelNum; + } + + /** + * @return the equalNameNum + */ + public int getEqualNameNum() { + return equalNameNum; + } + + /** + * @param equalNameNum the equalNameNum to set + */ + public void setEqualNameNum(int equalNameNum) { + this.equalNameNum = equalNameNum; + } + + /** + * @return the noReleasedNum + */ + public int getNoReleasedNum() { + return noReleasedNum; + } + + /** + * @param noReleasedNum the noReleasedNum to set + */ + public void setNoReleasedNum(int noReleasedNum) { + this.noReleasedNum = noReleasedNum; + } + + /** + * @return the failDownInfo + */ + public List getFailDownInfo() { + return failDownInfo; + } + + /** + * @param failDownInfo the failDownInfo to set + */ + public void setFailDownInfo(List failDownInfo) { + this.failDownInfo = failDownInfo; + } + + /** + * @return the existDataSetCount + */ + public int getExistDataSetCount() { + return existDataSetCount; + } + + /** + * @param existDataSetCount the existDataSetCount to set + */ + public void setExistDataSetCount(int existDataSetCount) { + this.existDataSetCount = existDataSetCount; + } + +} diff --git a/src/cn/com/customization/util/PackSuccessfulInfo.java b/src/cn/com/customization/util/PackSuccessfulInfo.java new file mode 100644 index 0000000..d901a9b --- /dev/null +++ b/src/cn/com/customization/util/PackSuccessfulInfo.java @@ -0,0 +1,108 @@ +/* +#============================================================================= +# +# opyright (c) 2009 Origin Enterprise Solution LTD. +# +#============================================================================= +# File name: PackSuccessfulInfo.java +# File description: +#============================================================================= +# Date Name Action Description of Change +# 2011-4-20 liqz Ini 初始化(From Shaangu) +#============================================================================= + */ +package cn.com.customization.util; + +public class PackSuccessfulInfo { + private String index = ""; + private String itemID = ""; + private String itemRev = ""; + private String itemOwner = ""; + private String dataset = ""; + private String refFile = ""; + + /** + * @return the index + */ + public String getIndex() { + return index; + } + + /** + * @param index the index to set + */ + public void setIndex(String index) { + this.index = index; + } + + /** + * @return the itemID + */ + public String getItemID() { + return itemID; + } + + /** + * @param itemID the itemID to set + */ + public void setItemID(String itemID) { + this.itemID = itemID; + } + + /** + * @return the itemRev + */ + public String getItemRev() { + return itemRev; + } + + /** + * @param itemRev the itemRev to set + */ + public void setItemRev(String itemRev) { + this.itemRev = itemRev; + } + + /** + * @return the itemOwner + */ + public String getItemOwner() { + return itemOwner; + } + + /** + * @param itemOwner the itemOwner to set + */ + public void setItemOwner(String itemOwner) { + this.itemOwner = itemOwner; + } + + /** + * @return the dataset + */ + public String getDataset() { + return dataset; + } + + /** + * @param dataset the dataset to set + */ + public void setDataset(String dataset) { + this.dataset = dataset; + } + + /** + * @return the refFile + */ + public String getRefFile() { + return refFile; + } + + /** + * @param refFile the refFile to set + */ + public void setRefFile(String refFile) { + this.refFile = refFile; + } + +} diff --git a/src/cn/com/customization/util/QueryTaskOpinionTableHead.java b/src/cn/com/customization/util/QueryTaskOpinionTableHead.java new file mode 100644 index 0000000..e6911dc --- /dev/null +++ b/src/cn/com/customization/util/QueryTaskOpinionTableHead.java @@ -0,0 +1,219 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: test.java +#======================================================================================================= +# Date Name Action Description of Change +# 2010-1-6 tyl 修改 +# 2010-4-25 zyn 修改 横向显示模式修改为纵向显示模式 +#======================================================================================================= + */ + +package cn.com.customization.util; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.GridLayout; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.util.List; +import java.util.Vector; + +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JSplitPane; +import javax.swing.JTable; +import javax.swing.JTextArea; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import javax.swing.plaf.SplitPaneUI; +import javax.swing.plaf.basic.BasicSplitPaneUI; +import javax.swing.table.DefaultTableModel; +import javax.swing.table.TableCellRenderer; +import javax.swing.table.TableColumn; +import javax.swing.table.TableColumnModel; + +import com.teamcenter.rac.util.VerticalLayout; + +//import components.TableDemo; + +public class QueryTaskOpinionTableHead extends JPanel { + /** + * serialVersionUID:TODO(描述变量的功能) + * @since Ver 1.1 + */ + private static final long serialVersionUID = 1L; + private Object[][] objArray; // 表中的数据 + private DefaultTableModel dm; + private JTable table; + private JTextArea textarea; +// private String[] headers = { "流程名称","序号", "任务" , "签审决定","执行人","提交时间","注释"}; + private String[] headers = { "流程名称", "任务" , "签审决定","执行人","提交时间","注释"}; + + public QueryTaskOpinionTableHead() { + super(new GridLayout(1, 0)); + } + + // 设置组合表格标题 + public void setTableHeadTestModel(Vector titleArrayTemp) { + dm = new DefaultTableModel(objArray, headers); + table = new JTable(dm); + textarea = new JTextArea(15,35); + textarea.setAutoscrolls(true); + textarea.setLineWrap(true); + textarea.setEditable(false); + textarea.addMouseListener(new MouseAdapter() { + public void mouseEntered(MouseEvent mouseEvent) { + textarea.setCursor(new Cursor(Cursor.TEXT_CURSOR)); //鼠标进入Text区后变为文本输入指针 + } + public void mouseExited(MouseEvent mouseEvent) { + textarea.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); //鼠标离开Text区后恢复默认形态 + } + }); + textarea.getCaret().addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent e) { + textarea.getCaret().setVisible(true); //使textarea区的文本光标显示 + } + }); + + GroupableTableHeader header = new GroupableTableHeader(table.getColumnModel()); + + table.setTableHeader(header); +// table.setPreferredScrollableViewportSize(new Dimension(670, 150)); + table.setPreferredScrollableViewportSize(new Dimension(690, 150)); + addListener(); + + JScrollPane scrollPane = new JScrollPane(table); + + JPanel jpane = new JPanel(new BorderLayout()); + jpane.add(new JLabel("注释:"),BorderLayout.NORTH); + jpane.add(textarea,BorderLayout.CENTER); + + JSplitPane splitPane = new JSplitPane(); + splitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT); + splitPane.setLeftComponent(scrollPane); + splitPane.setRightComponent(jpane); + splitPane.setDividerLocation(0.6); + splitPane.setEnabled(false); + SplitPaneUI ui = splitPane.getUI(); + if (ui instanceof BasicSplitPaneUI) { + ((BasicSplitPaneUI) ui).getDivider().setBorder(null);//隐藏分割线 + } + + add(splitPane); + } + + public void setobjArray(Object[][] objArrayTemp) { + objArray = objArrayTemp; + } + + /* + * This method picks good column sizes. If all column heads are wider than + * the column's cells' contents, then you can just use + * column.sizeWidthToFit(). + */ + public void initColumnSizes() { + table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); + // DefaultTableModel model = (DefaultTableModel) table.getModel(); + TableColumn column = null; + Component comp = null; + int headerWidth = 0; + int cellWidth = 0; + TableCellRenderer headerRenderer = table.getTableHeader().getDefaultRenderer(); + TableColumnModel colmode = table.getColumnModel(); + int count = colmode.getColumnCount(); + for (int i = 0; i < count; i++) { + column = table.getColumnModel().getColumn(i); + comp = headerRenderer.getTableCellRendererComponent(table, column.getHeaderValue(), false, false, 0, 0); + headerWidth = comp.getPreferredSize().width; +// if (i == 1) { +// cellWidth = 50; +// }else if (i == 2) { +// cellWidth = 50; +// }else if (i == 3) { +// cellWidth = 80; +// }else if (i == 4) { +// cellWidth = 100; +// }else { +// cellWidth = 130; +// } + if (i == 0) { + cellWidth = 180; + }else if (i == 1) { + cellWidth = 75; + }else if (i == 2) { + cellWidth = 75; + }else if (i == 3) { + cellWidth = 100; + }else { + cellWidth = 130; + } + column.setPreferredWidth(Math.max(headerWidth, cellWidth)); + } + } + + public String getUserChoose() { + String cellValue = null; + int selectRows = table.getSelectedRows().length;// 取得用户所选行的行数 + if (selectRows == 1) { + int selectedRowIndex = table.getSelectedRow(); // 取得用户所选单行 + cellValue = (String) table.getValueAt(selectedRowIndex, 5); + } + return cellValue; + } + + /** + * 添加单击事件,获得注释信息 + */ + public void addListener(){ + table.addMouseListener(new MouseListener(){ + + public void mouseClicked(MouseEvent e) { + String userComments = getUserChoose(); + String Comments = ""; + if(userComments!=null){ + int len = userComments.split("\t").length; + for(int i = 0;i tableData; + private JButton confirmButton = null; + private String validTypeOption = "origin_batchdown_validtype"; + // 当origin_showLogFile中的值为true则会生成日志文件:c:\\batchExportDataset.log + private String isShowLogOption = "origin_showLogFile"; + private String logFileName = "c:\\batchExportDataset.log"; + private PackResultInfo resultInfo; + private boolean isDownReleased = false; + private WriteAndCopyFile writeLog; + + private int downDataSetCount = 0; + private int isNotHavePriviligeCount = 0; + private int haveEqualDataSetCount = 0; + private int needDownCount = 0; + private int notReleasedDataSetCount = 0; + private int downCount = 0; + private List haveDownDataSet = new ArrayList(); + private List notExistFiles = new ArrayList(); + private List failDownInfos = new ArrayList(); + + private JLabel existDataSetLb = new JLabel(); + private JLabel needLb = new JLabel(); + private JLabel successLb = new JLabel(); + private JLabel noReleaseLb = new JLabel(); + private JLabel noPrevilegeLb = new JLabel(); + private JLabel noReferenceFileLb = new JLabel(); + private JLabel failLb = new JLabel(); + private List successfulInfos = new ArrayList(); + private String successfulDir = "c:/ugs/log"; + private TCUserService userService = null; + private List logsList = new ArrayList(); + + public ResultDialog(PackResultInfo resultInfo, TCSession session) { + super(true); + this.resultInfo = resultInfo; + this.session = session; + checkcommon = new GetCommonInfo(session); + this.tableData = resultInfo.getFailDownInfo(); + writeLog = new WriteAndCopyFile(); + userService = (TCUserService) session.getUserService(); + + if (isShowLog()) { + File file = new File(logFileName); + if (file.exists()) { + writeLog.writeFile(logFileName, true, "\n"); + } else { + try { + file.createNewFile(); + writeLog.writeFile(logFileName, true, "\n"); + } catch (IOException e) { + e.printStackTrace(); + } + } + } else { + File file = new File(logFileName); + if (file.exists()) { + file.delete(); + } + } + initUI(); + } + + public void initUI() { + // setPersistentDisplay(true); + setOptimalDisplay(false); + this.setTitle("下载结果"); + BorderLayout borderLayout = new BorderLayout(); + JPanel panel = new JPanel(borderLayout); + panel.add(setTopPanel(), BorderLayout.NORTH); +// panel.add(setCenterPanel(), BorderLayout.CENTER); + panel.add(setBottomPanel(), BorderLayout.SOUTH); + getContentPane().add(panel); + Dimension screen = getToolkit().getScreenSize(); + setPreferredSize(new Dimension(400,300)); +// setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2); + centerToScreen(); + this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); + this.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + dispose(); + } + }); + pack(); + this.setVisible(true); + } + + private JPanel setTopPanel() { + JPanel panel1 = new JPanel(new PropertyLayout()); + JLabel infoLb = new JLabel(" 下载文件统计:"); + existDataSetLb.setText(" 存在数据集:" + resultInfo.getExistDataSetCount()); + noReleaseLb.setText(" 未发布数据集:" + resultInfo.getNoReleasedNum()); + noPrevilegeLb.setText(" 无权限数据集:" + resultInfo.getNoPrivilegelNum()); + needLb.setText(" 需要下载文件:" + resultInfo.getNeedNum()); + successLb.setText(" 成功下载文件:" + resultInfo.getSuccessNum()); + noReferenceFileLb.setText(" 无引用文件数据集:" + resultInfo.getNoReferenceNum()); + failLb.setText(" 未成功下载文件个数:" + resultInfo.getFailNum()); + + panel1.add("1.1.left.center", new JLabel()); + panel1.add("2.1.left.center", existDataSetLb); + panel1.add("3.1.left.center", noReleaseLb); + panel1.add("4.1.left.center", noPrevilegeLb); + panel1.add("5.1.left.center", needLb); + panel1.add("6.1.left.center", successLb); + panel1.add("7.1.left.center", noReferenceFileLb); + + JPanel panel2 = new JPanel(new PropertyLayout()); + panel2.add("1.1.left.center", new JLabel()); + panel2.add("2.1.left.center", failLb); + + JPanel panel = new JPanel(new PropertyLayout()); + panel.add("1.1.left.center", new JLabel()); + panel.add("2.1.left.center", infoLb); + panel.add("3.1.left.center", panel1); + panel.add("4.1.left.center", panel2); + return panel; + } + + private JPanel setCenterPanel() { + JPanel panel = new JPanel(new PropertyLayout()); + dtm = new ResultTableModel(tableData); + table = new JTable(dtm); + table.setRowHeight(20); + dtm.setTableColumnsWidth(table); + table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); + // 对列进行渲染 + table.getColumnModel().getColumn(0).setCellRenderer(new TableColumnRender()); + table.getColumnModel().getColumn(7).setCellRenderer(new CheckBoxColumnRender()); + + JScrollPane scrollPane = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); + scrollPane.setAutoscrolls(true); + scrollPane.setPreferredSize(new Dimension(690, 200)); + panel.add("1.1.left.center", scrollPane); + panel.add("2.1.left.center", new JLabel(" ")); + panel.setBorder(new TitledBorder("")); + return panel; + } + + private JPanel setBottomPanel() { + JPanel southPanel = new JPanel(new FlowLayout()); + southPanel.setSize(60, 10); + confirmButton = new JButton("重新下载"); + confirmButton.addActionListener(new buttonListener()); + JButton exitButton = new JButton("取消"); + exitButton.addActionListener(new buttonListener()); + southPanel.add(confirmButton); + southPanel.add(exitButton); + return southPanel; + } + + class buttonListener implements ActionListener { + public void actionPerformed(ActionEvent event) { + String name = ((JButton) event.getSource()).getText(); + if (name.equals("重新下载")) { + confirmButtonAction(); + } else { + if (name.equals("取消")) { + dispose(); + } + } + } + } + + private void writeSuccessfulLogFile(String fileName, String content) { + content = content + "\n"; + writeLog.writeFile(fileName, true, content); + logsList.add(content); + } + + private void confirmButtonAction() { + System.out.println("tableData.size()......." + tableData.size()); + if (tableData.size() > 0) { + writeLogFile(logFileName, "\n"); + writeLogFile(logFileName, "重新下载:\n"); + PackSuccessfulInfo succesfulDataset = new PackSuccessfulInfo(); + succesfulDataset.setIndex("序号"); + succesfulDataset.setItemID("零组件ID"); + succesfulDataset.setItemRev("版本"); + succesfulDataset.setItemOwner("所有者"); + succesfulDataset.setDataset("数据集"); + succesfulDataset.setRefFile("命名的引用"); + successfulInfos.add(succesfulDataset); + + boolean need = false; + for (int i = 0; i < tableData.size(); i++) { + TCComponentDataset dataSet = tableData.get(i).getDataSet(); + String needDown = tableData.get(i).getNeedDown(); + if (needDown.equals("true")) { + need = true; + String filePath = tableData.get(i).getFilePath(); + String itemId = tableData.get(i).getItemId(); + String rev = tableData.get(i).getRev(); + String owner = tableData.get(i).getOwner(); + TCComponentItemRevision itemRevision = tableData.get(i).getItemRev(); + datasetFileDown(itemRevision, dataSet, filePath, itemId, rev, owner); + } + } + + SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd:HHmmss"); + String time = date.format(new Date()); + String logPath = successfulDir + "/陕鼓批量下载文件日志_" + (new SimpleDateFormat("yyyyMMdd")).format(new Date()) + ".log"; + writeSuccessfulLogFile(logPath, " "); + writeSuccessfulLogFile(logPath, "==========================================================================================================================="); + writeSuccessfulLogFile(logPath, "时间:" + time + " 下载人:" + resultInfo.getPerson() + " 所选流程(目录):" + resultInfo.getJob()); + writeSuccessfulLogFile(logPath, " "); + writeSuccessfulLogFile(logPath, "存在数据集:" + haveDownDataSet.size()); + writeSuccessfulLogFile(logPath, "未发布数据集:" + notReleasedDataSetCount); + writeSuccessfulLogFile(logPath, "无权限数据集:" + isNotHavePriviligeCount); + writeSuccessfulLogFile(logPath, "需下载文件:" + needDownCount); + writeSuccessfulLogFile(logPath, "成功下载文件:" + downDataSetCount); + writeSuccessfulLogFile(logPath, "无引用文件数据集:" + notExistFiles.size()); + writeSuccessfulLogFile(logPath, " "); + writeSuccessfulLogFile(logPath, "已成功下载文件列表:"); + writeSuccessfulLogFile(logPath, "---------------------------------------------------------------------------"); + for (int i = 0; i < successfulInfos.size(); i++) { + PackSuccessfulInfo successfulInfo = successfulInfos.get(i); + writeSuccessfulLogFile(logPath, appendSpace(successfulInfo.getIndex().trim(), 5) + appendSpace(successfulInfo.getItemID().trim(), 32) + appendSpace(successfulInfo.getItemRev().trim(), 5) + appendSpace(successfulInfo.getItemOwner().trim(), 25) + appendSpace(successfulInfo.getDataset().trim(), 50) + appendSpace(successfulInfo.getRefFile().trim(), 50)); + } + writeSuccessfulLogFile(logPath, " "); + // 服务器端日志 + try { + Object objs[] = new Object[1]; + objs[0] = logsList.toArray(); + userService.call("DatasetDownLog", objs); + } catch (TCException e) { + e.printStackTrace(); + } + + if (need) { + writeLogFile(logFileName, " "); + writeLogFile(logFileName, "总结:"); + writeLogFile(logFileName, "存在数据集:" + haveDownDataSet.size() + "个"); + writeLogFile(logFileName, "未发布数据集:" + notReleasedDataSetCount + "个"); + writeLogFile(logFileName, "无权限数据集:" + isNotHavePriviligeCount + "个"); + writeLogFile(logFileName, "需要下载文件:" + needDownCount + "个"); + writeLogFile(logFileName, "成功下载文件:" + downDataSetCount + "个"); + writeLogFile(logFileName, "无引用文件数据集:" + notExistFiles.size() + "个"); + writeLogFile(logFileName, "未成功下载文件:" + (needDownCount - downDataSetCount) + "个"); + + resultInfo.setExistDataSetCount(haveDownDataSet.size()); + resultInfo.setNeedNum(needDownCount); + resultInfo.setSuccessNum(downDataSetCount); + resultInfo.setNoReleasedNum(notReleasedDataSetCount); + resultInfo.setNoPrivilegelNum(isNotHavePriviligeCount); + resultInfo.setNoReferenceNum(notExistFiles.size()); + resultInfo.setEqualNameNum(haveEqualDataSetCount); + resultInfo.setFailNum(failDownInfos.size()); + resultInfo.setFailDownInfo(failDownInfos); + updateDialog(); + } else { + MessageBox.post("没有需要重新下载的数据集!", "INFO", MessageBox.INFORMATION); + } + } else { + MessageBox.post("没有需要重新下载的数据集!", "INFO", MessageBox.INFORMATION); + } + } + + private String appendSpace(String str, int num) { + if (str.length() < num) { + for (int i = UtilApi.length(str) + 1; i <= num; i++) { + str += " "; + } + } + return str; + } + + private void updateDialog() { + existDataSetLb.setText(" 存在数据集:" + resultInfo.getExistDataSetCount()); + noReleaseLb.setText(" 未发布数据集:" + resultInfo.getNoReleasedNum()); + noPrevilegeLb.setText(" 无权限数据集:" + resultInfo.getNoPrivilegelNum()); + needLb.setText(" 需要下载文件:" + resultInfo.getNeedNum()); + successLb.setText(" 成功下载文件:" + resultInfo.getSuccessNum()); + noReferenceFileLb.setText(" 无引用文件数据集:" + resultInfo.getNoReferenceNum()); + failLb.setText(" 需重新下载:" + resultInfo.getFailNum()); + + tableData = resultInfo.getFailDownInfo(); + dtm = new ResultTableModel(tableData); + table.setModel(dtm); + table.setRowHeight(20); + dtm.setTableColumnsWidth(table); + table.getColumnModel().getColumn(0).setCellRenderer(new TableColumnRender()); + table.getColumnModel().getColumn(7).setCellRenderer(new CheckBoxColumnRender()); + dtm.setTableColumnsWidth(table); + + downDataSetCount = 0; + isNotHavePriviligeCount = 0; + haveEqualDataSetCount = 0; + needDownCount = 0; + notReleasedDataSetCount = 0; + downCount = 0; + failDownInfos = new ArrayList(); + haveDownDataSet = new ArrayList(); + notExistFiles = new ArrayList(); + } + + /** + * datasetFileDown:导出数据集对象的引用文件 + * @param @return 设定文件 + * @param dataset + * @param fileCurrentPath + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + + private void datasetFileDown(TCComponentItemRevision itemRevision, TCComponentDataset dataSet, String currentPath, String itemId, String rev, String owner) { + + try { + dataSet.refresh(); + } catch (TCException e2) { + e2.printStackTrace(); + } + if (haveDownDataSet != null) { + if (haveDownDataSet.contains(dataSet)) { + return; + } + } + String fileCurrentPath = currentPath; + haveDownDataSet.add(dataSet); + writeLogFile(logFileName, "存在数据集:" + dataSet.toString()); + System.out.println("dataSet............" + dataSet.toString()); + PackFailDownInfo dataSetInfo = new PackFailDownInfo(); + dataSetInfo.setItemId(itemId); + dataSetInfo.setRev(rev); + dataSetInfo.setDatasetName(dataSet.toString()); + dataSetInfo.setDataSet(dataSet); + dataSetInfo.setOwner(owner); + dataSetInfo.setItemRev(itemRevision); + try { + String release = dataSet.getProperty("release_status_list").trim(); + if (release != null) { + String regex = ".*Released.*"; + Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); + Matcher match = pattern.matcher(release); + boolean find = match.find(); + if (!find) { + notReleasedDataSetCount++; + writeLogFile(logFileName, "未发布"); + if (isDownReleased) { + dataSetInfo.setReason("未发布"); + failDownInfos.add(dataSetInfo); + writeLogFile(logFileName, ""); + return; + } + } else { + writeLogFile(logFileName, "已经发布"); + } + } + } catch (TCException e2) { + e2.printStackTrace(); + } + try { + boolean isCanExport = false; + isCanExport = checkAccessPrivilige(session.getUser(), dataSet, "EXPORT"); + if (!isCanExport) { + ++isNotHavePriviligeCount; + dataSetInfo.setReason("没有导出权限"); + failDownInfos.add(dataSetInfo); + writeLogFile(logFileName, "没有导出权限"); + writeLogFile(logFileName, " "); + return; + } else { + writeLogFile(logFileName, "有导出权限 "); + } + } catch (TCException e1) { + e1.printStackTrace(); + } + TCComponentTcFile tcFile = null; + String fileName = ""; + try { + if ((dataSet.getTcFiles() != null) && (dataSet.getTcFiles().length > 0)) { +// if (itemRevision != null) { +// String revType = itemRevision.getType(); +// if (revType.equals("GGDitem Revision") || revType.equals("HTDitem Revision")) { +// fileCurrentPath = createFile(fileCurrentPath, changePackageName); +// } +// } + + for (int i = 0; i < dataSet.getTcFiles().length; i++) { + tcFile = dataSet.getTcFiles()[i]; + if (tcFile == null) { + return; + } + tcFile.refresh(); + fileName = tcFile.getProperty("original_file_name"); + if (fileName != null) { + needDownCount++; + dataSetInfo.setReference_file(fileName); + dataSetInfo.setFilePath(fileCurrentPath); + dataSetInfo.setNeedDown("true"); + String fileType = ""; + String preFileName = ""; + int index = fileName.lastIndexOf("."); + if (index > 0) { + fileType = fileName.substring(index, fileName.length()); + preFileName = fileName.substring(0, index); + } else { + preFileName = fileName; + } + boolean flag = checkcommon.existFile(fileCurrentPath, fileName); + if (flag) { + haveEqualDataSetCount++; + int pos = fileName.indexOf('.'); + if (pos > 0) { + fileName = preFileName + "_" + UtilApi.getTimeNum() + fileType; + } + } + if (fileName.indexOf('/') >= 0) { + fileName = fileName.replace('/', '_'); + } + downCount = 0; + getTCFile(tcFile, fileCurrentPath, fileName, dataSetInfo); + } + } + } else { + dataSetInfo.setReason("不存在引用文件"); + failDownInfos.add(dataSetInfo); + notExistFiles.add(dataSet.toString()); + writeLogFile(logFileName, "不存在引用文件!"); + } + writeLogFile(logFileName, " "); + } catch (Throwable e) { + writeLogFile(logFileName, "导出文件时出现异常!"); + writeLogFile(logFileName, e.getMessage()); + writeLogFile(logFileName, " "); + e.printStackTrace(); + } + } + + private File getTCFile(TCComponentTcFile tcFile, String fileCurrentPath, String fileName, PackFailDownInfo dataSetInfo) { + ++downCount; + if (downCount == 2) { + writeLogFile(logFileName, "第二次下载"); + } + File file = null; + try { + file = tcFile.getFile(fileCurrentPath, fileName); + if (file != null) { + ++downDataSetCount; + writeLogFile(logFileName, "导出文件:" + fileName + " " + getTime()); + writeLogFile(logFileName, " "); + + // successfulInfos + PackSuccessfulInfo succesfulDataset = new PackSuccessfulInfo(); + succesfulDataset.setIndex(String.valueOf(downDataSetCount)); + succesfulDataset.setItemID(dataSetInfo.getItemId()); + succesfulDataset.setItemRev(dataSetInfo.getRev()); + succesfulDataset.setItemOwner(dataSetInfo.getOwner()); + succesfulDataset.setDataset(dataSetInfo.getDatasetName()); + succesfulDataset.setRefFile(file.getName()); + successfulInfos.add(succesfulDataset); + } else { + writeLogFile(logFileName, "没有导出文件!"); + } + } catch (Throwable e) { + writeLogFile(logFileName, "文件导出时出现异常"); + String exceptionMessage = e.getMessage(); + writeLogFile(logFileName, exceptionMessage); + writeLogFile(logFileName, " "); + e.printStackTrace(); + if (downCount < 2) { + file = getTCFile(tcFile, fileCurrentPath, fileName, dataSetInfo); + } else { + dataSetInfo.setReason(exceptionMessage); + failDownInfos.add(dataSetInfo); + } + } + return file; + } + + private void writeLogFile(String fileName, String content) { + if (isShowLog()) { + content = content + "\n"; + writeLog.writeFile(fileName, true, content); + } + } + + public String getTime() { + String strTime = ""; + try { + SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss:SSS"); + strTime = bartDateFormat.format(new Date()); + // System.out.println(strTime); + } catch (Exception e) { + e.printStackTrace(); + } + return strTime; + } + + /** + * checkAccessPrivilige:检查用户对给Component是否有权限 + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + private boolean checkAccessPrivilige(TCComponentUser user, TCComponent comp, String accessName) throws TCException { + TCAccessControlService accessService = ((TCSession) session).getTCAccessControlService(); + boolean returnboolean = accessService.checkUsersPrivilege(user, comp, accessName); + return returnboolean; + } + + private boolean isShowLog() { + boolean isShowLog = false; + TCPreferenceService preSer = session.getPreferenceService(); + String value = preSer.getString(4, isShowLogOption).trim(); + if (value.equalsIgnoreCase("true")) { + isShowLog = true; + } + return isShowLog; + } + + public void isDownReleased() { + TCPreferenceService preSer = session.getPreferenceService(); + String type = preSer.getString(4, validTypeOption).trim(); + if (type.equalsIgnoreCase("released")) { + isDownReleased = true; + } + } +} diff --git a/src/cn/com/customization/util/ResultTableModel.java b/src/cn/com/customization/util/ResultTableModel.java new file mode 100644 index 0000000..8c71d5c --- /dev/null +++ b/src/cn/com/customization/util/ResultTableModel.java @@ -0,0 +1,97 @@ +/* +#============================================================================= +# +# Copyright (c) 2009 Origin Enterprise Solution LTD. +# +#============================================================================= +# File name: ResultTableModel.java +# File description: +#============================================================================= +# Date Name Action Description of Change +# 2011-4-20 liqz Ini 初始化(From Shaangu) +#============================================================================= + */ +package cn.com.customization.util; + +import java.util.Enumeration; +import java.util.List; + +import javax.swing.JTable; +import javax.swing.table.DefaultTableModel; +import javax.swing.table.JTableHeader; +import javax.swing.table.TableColumn; + + +public class ResultTableModel extends DefaultTableModel { + + /** + * + */ + private static final long serialVersionUID = 1L; + private static String[] names = { "*", "零组件ID", "版本", "所有者","数据集", "命名的引用" ,"原因","可重新下载"}; + + /** + * Creates a new instance of EditBatchProcessLineTableModel. + * @param data + */ + public ResultTableModel(List data) { + super(getData(data), names); + } + + public static Object[][] getData(List data) { + Object[][] datas = new Object[data.size()][]; + for (int i = 0; i < data.size(); i++) { + String[] info = new String[8]; + info[0] = String.valueOf(i + 1); + info[1] = data.get(i).getItemId(); + info[2] = data.get(i).getRev(); + info[3] = data.get(i).getOwner(); + info[4] = data.get(i).getDatasetName(); + info[5] = data.get(i).getReference_file(); + info[6] = data.get(i).getReason(); + info[7] = data.get(i).getNeedDown(); + datas[i] = info; + } + return datas; + } + + @Override + public boolean isCellEditable(int row, int column) { + if (column < 7) { + return false; + } else { + return true; + } + } + + // 根据标题大小设置列宽 + public void FitTableColumns(JTable myTable) { + JTableHeader header = myTable.getTableHeader(); + int rowCount = myTable.getRowCount(); + Enumeration columns = myTable.getColumnModel().getColumns(); + while (columns.hasMoreElements()) { + TableColumn column = (TableColumn) columns.nextElement(); + int col = header.getColumnModel().getColumnIndex(column.getIdentifier()); + int width = (int) myTable.getTableHeader().getDefaultRenderer().getTableCellRendererComponent(myTable, column.getIdentifier(), false, false, -1, col).getPreferredSize().getWidth(); + for (int row = 0; row < rowCount; row++) { + int preferedWidth = (int) myTable.getCellRenderer(row, col).getTableCellRendererComponent(myTable, myTable.getValueAt(row, col), false, false, row, col).getPreferredSize().getWidth(); + width = Math.max(width, preferedWidth); + } + header.setResizingColumn(column); + column.setWidth(width + myTable.getIntercellSpacing().width); + } + } + + // 设置列宽 + public void setTableColumnsWidth(JTable myTable) { + myTable.getColumnModel().getColumn(0).setPreferredWidth(25); + myTable.getColumnModel().getColumn(1).setPreferredWidth(100); + myTable.getColumnModel().getColumn(2).setPreferredWidth(40); + myTable.getColumnModel().getColumn(3).setPreferredWidth(100); + myTable.getColumnModel().getColumn(4).setPreferredWidth(100); + myTable.getColumnModel().getColumn(5).setPreferredWidth(125); + myTable.getColumnModel().getColumn(6).setPreferredWidth(100); + myTable.getColumnModel().getColumn(7).setPreferredWidth(80); + } + +} diff --git a/src/cn/com/customization/util/ShowMessageDialog.java b/src/cn/com/customization/util/ShowMessageDialog.java new file mode 100644 index 0000000..30838e0 --- /dev/null +++ b/src/cn/com/customization/util/ShowMessageDialog.java @@ -0,0 +1,93 @@ +/* +#============================================================================= +# +# Copyright (c) 2009 Origin Enterprise Solution LTD. +# +#============================================================================= +# File name: ShowMessageDialog.java +# File description: +#============================================================================= +# Date Name Action Description of Change +# 2009-10-30 tyl 创建 显示信息 +# 2010-02-10 tyl Mod 信息前减少空格 +#============================================================================= + */ + +package cn.com.customization.util; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.net.URL; + +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; + +import com.teamcenter.rac.aif.AbstractAIFDialog; +import com.teamcenter.rac.util.PropertyLayout; +import com.teamcenter.rac.util.VerticalLayout; + +public class ShowMessageDialog extends AbstractAIFDialog { + + private static final long serialVersionUID = 1L; + private String title = ""; + private String info1 = ""; + private String info2 = ""; + + public ShowMessageDialog(String title, String info1, String info2) { + super(true); + this.title = title; + this.info1 = info1; + this.info2 = info2; + initUI(); + } + + public void initUI() { + setPersistentDisplay(true); + setOptimalDisplay(false); + setTitle(title); + JPanel parentPanel; + JPanel iconPanel = new JPanel(); + JPanel itemInfoPanel1; + JPanel itemInfoPanel2; + parentPanel = new JPanel(new VerticalLayout(5, 2, 2, 2, 2)); + itemInfoPanel2 = new JPanel(new GridLayout(2, 1)); + itemInfoPanel1 = new JPanel(new PropertyLayout()); + + URL url = this.getClass().getResource("image/info.png"); + JLabel iconLabel = new JLabel(); + iconLabel.setIcon(new ImageIcon(url)); + iconPanel.add(iconLabel); + + itemInfoPanel2.add(new JLabel(" " + info1)); + itemInfoPanel2.add(new JLabel(info2)); + + itemInfoPanel1.add("1.1.left.center", iconPanel); + itemInfoPanel1.add("1.2.left.center", itemInfoPanel2); + + JButton buttonYes = new JButton("确定"); + buttonYes.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + ShowMessageDialog.this.dispose(); + } + }); + JPanel panelButton = new JPanel(new BorderLayout()); + panelButton.setSize(10, 20); + panelButton.add(buttonYes, BorderLayout.CENTER); + + parentPanel.add("top.bin", new JLabel(" ")); + parentPanel.add("top.bind.left.top", itemInfoPanel1); + parentPanel.add("bottom.nobind.center.top", panelButton); + + getContentPane().add(parentPanel); + + pack(); + Dimension screen = getToolkit().getScreenSize(); // 得到屏幕尺寸 + setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2); + setVisible(true); + } +} diff --git a/src/cn/com/customization/util/TableColorRender.java b/src/cn/com/customization/util/TableColorRender.java new file mode 100644 index 0000000..bdcde5c --- /dev/null +++ b/src/cn/com/customization/util/TableColorRender.java @@ -0,0 +1,54 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: TableColorRender.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-17 下午03:46:31 tyl Ini 初始化文件 +#======================================================================================================= + */ +package cn.com.customization.util; + +import java.awt.Color; +import java.awt.Component; + +import javax.swing.JTable; +import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.TableCellRenderer; + +public class TableColorRender implements TableCellRenderer { + // + public static final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer(); + + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + Component renderer = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + + Color foreground = table.getForeground(); + Color background = table.getBackground(); + if (isSelected) { + foreground = Color.WHITE; + background = Color.LIGHT_GRAY; + } else { + if (value != null) { + if (((String) value).startsWith("◆")) { + foreground = Color.RED; + background = Color.WHITE; + } else { + if (((String) value).startsWith("★")) { + System.out.println("value============" + value); + foreground = Color.RED; + background = Color.WHITE; + } + } + } + foreground = table.getForeground(); + background = table.getBackground(); + } + renderer.setForeground(foreground); + renderer.setBackground(background); + return renderer; + } +} \ No newline at end of file diff --git a/src/cn/com/customization/util/TableColumnRender.java b/src/cn/com/customization/util/TableColumnRender.java new file mode 100644 index 0000000..c078f1d --- /dev/null +++ b/src/cn/com/customization/util/TableColumnRender.java @@ -0,0 +1,51 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: TableColumnRender.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-17 下午03:50:26 tyl Ini 初始化文件 +#======================================================================================================= +*/ +package cn.com.customization.util; + +import java.awt.Component; + +import javax.swing.JLabel; +import javax.swing.JTable; +import javax.swing.UIManager; +import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.JTableHeader; + +public class TableColumnRender extends DefaultTableCellRenderer { + + /** + * serialVersionUID:TODO(描述变量的功能) + * @since Ver 1.1 + */ + private static final long serialVersionUID = 1L; + + /** + * + */ + public TableColumnRender() { + super(); + } + + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + //得到表头 + JTableHeader header = table.getTableHeader(); + if (header != null) { + setForeground(header.getForeground()); + setBackground(header.getBackground()); + setFont(header.getFont()); + } + setHorizontalAlignment(JLabel.CENTER); + this.setText((value == null) ? "" : value.toString()); + setBorder(UIManager.getBorder("TableHeader.cellBorder")); + return this; + } +} \ No newline at end of file diff --git a/src/cn/com/customization/util/UtilApi.java b/src/cn/com/customization/util/UtilApi.java new file mode 100644 index 0000000..10b2267 --- /dev/null +++ b/src/cn/com/customization/util/UtilApi.java @@ -0,0 +1,918 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: UtilApi.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-17 下午03:56:51 tyl Ini 初始化文件 +#======================================================================================================= + */ +package cn.com.customization.util; + +import java.awt.Dimension; +import java.awt.Point; +import java.awt.Toolkit; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Vector; + +import javax.swing.JComboBox; + +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aif.kernel.AIFComponentContext; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentBOMLine; +import com.teamcenter.rac.kernel.TCComponentContextList; +import com.teamcenter.rac.kernel.TCComponentQuery; +import com.teamcenter.rac.kernel.TCComponentQueryType; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCPreferenceService; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.kernel.TCTextService; +import com.teamcenter.rac.util.MessageBox; + +public class UtilApi { + /** + * Logger for this class + */ + private static HashMap loginUserInfoHm = new HashMap(); + + /** + * 系统session + */ + private TCSession session; + + /** + * 通用api + * @param pseapplication 抽象界面应用程序 + */ + public UtilApi(AbstractAIFUIApplication pseapplication) { + session = (TCSession) pseapplication.getSession(); + } + + /** + * 通用api + * @param newsession session + */ + public UtilApi(TCSession newsession) { + session = newsession; + } + + private String getDefaultExportDirectory() { + String s = null; + if (s == null || s.length() == 0) { + TCPreferenceService tcpreferenceservice = session.getPreferenceService(); + s = tcpreferenceservice.getString(0, "defaultExportDirectory"); + } + if (s != null) { + s = s.trim(); + if (s.length() == 0) + s = null; + } + return s; + } + + public String getEnv(String name) { + String str = ""; + Iterator it = System.getenv().entrySet().iterator(); + while (it.hasNext()) { + Map.Entry entry = (Map.Entry) it.next(); + System.out.println("entry-" + entry.getKey() + ":" + entry.getValue()); + if (entry.getKey().toString().equals(name)) { + str = entry.getValue() + ""; + if (!str.endsWith("\\")) { + str = str + "\\"; + } + break; + } + } + return str; + } + + /** + * Enter 按键 + */ + public static String ENTER = new String(new byte[] { 13, 10 }, 0); + + /** + * 按照指定分隔符,将string转换为vector + * @param msg 源字符串 + * @param sepStr 分隔符 + * @return vector对象 + */ + public static Vector getVector(String msg, String sepStr) { + System.out.println("***********getVector()"); + System.out.println("msg===" + msg); + System.out.println("sepStr===" + sepStr); + Vector vt = new Vector(); + try { + String tmpStr = null; + boolean flag = false; + int pos = -1; + if (msg == null || msg.trim().length() == 0) { return null; } + if (msg.startsWith(sepStr)) { + msg = msg.substring(1); + } + if (msg.lastIndexOf(sepStr) == msg.length() - 1) { + flag = true; + msg = msg.substring(0, msg.length() - 1); + } + while ((pos = msg.indexOf(sepStr)) > 0) { + try { + tmpStr = msg.substring(0, pos); + vt.addElement(tmpStr); + if (msg.length() > pos + 1) + msg = msg.substring(pos + 1); + } + catch (RuntimeException e) { + break; + } + } + vt.add(msg); + if (flag) + vt.add(""); + } + catch (RuntimeException e) { + e.printStackTrace(); + } + return vt; + } + + /** + * 提取字符串中数字 + * @param src 源字符串 + * @return double数字 + */ + public static double getFloatFromStr(String src) { + double d = 0d; + try { + if (src == null || src.length() == 0) { return 0d; } + src = src.trim(); + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < src.length(); i++) { + if (src.charAt(i) == '.' || src.charAt(i) == '+' || src.charAt(i) == '-') { + sb.append(src.charAt(i)); + } else if (src.charAt(i) >= '0' && src.charAt(i) <= '9') { + sb.append(src.charAt(i)); + } + } + d = Double.parseDouble(sb.toString()); + } + catch (NumberFormatException e) { + e.printStackTrace(); + } + return d; + } + + /** + * getMsgboxLocate:设定窗体位置 + * @param @return 窗体位置 + * @return Point 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public static Point getMsgboxLocate() { + Toolkit kit = Toolkit.getDefaultToolkit(); + Dimension screenSize = kit.getScreenSize(); + int frmLocateWidth = screenSize.width * 2 / 5; + int frmLocateHeight = screenSize.height * 4 / 7; + Point p = new Point(frmLocateWidth, frmLocateHeight); + return p; + } + + /** + * 获得消息提示窗体位置 + * @param formLocHeigh 当前窗体纵向起始位置 + * @return 窗体位置 + */ + public static Point getMsgboxLocate(double formLocHeigh) { + Toolkit kit = Toolkit.getDefaultToolkit(); + Dimension screenSize = kit.getScreenSize(); + String tmp = formLocHeigh + ""; + if (tmp.indexOf(".") >= 0) { + tmp = tmp.substring(0, tmp.indexOf(".")); + } + int t = Integer.parseInt(tmp); + int frmLocateWidth = screenSize.width * 2 / 5; + int frmLocateHeight = t - 120; + if (frmLocateHeight <= 0) + frmLocateHeight = 0; + Point p = new Point(frmLocateWidth, frmLocateHeight); + return p; + } + + /** + * double数字转换为指定小数长度的数字 + * @param srcdouble 原数字 + * @param length 长度 + * @return 指定长度的数字 + */ + public static double round(double srcdouble, int length) { + double t = 0d; + try { + t = (double) Math.pow(10, length); + } + catch (RuntimeException e) { + e.printStackTrace(); + } + return (Math.round(srcdouble * t)) / t; + } + + /** + * 验证选中bomline的所有者是否是当前用户 + * @param selectedLine 选中bomline + * @param newsession 系统session + * @return 验证结果 + */ + public static boolean validateOwnringUser(TCComponentBOMLine selectedLine, TCSession newsession) { + String userName = ""; + String ownerName = ""; + try { + userName = newsession.getUserName(); + userName = "(" + userName + ")"; + + ownerName = selectedLine.getProperty("bl_rev_owning_user"); + } + catch (TCException e) { + e.printStackTrace(); + return false; + } + if (ownerName.indexOf(userName) < 0) { + MessageBox messagebox1 = new MessageBox("错误:您非当前选中对象的所有者,不能进行此操作!", "错误...", MessageBox.ERROR); + messagebox1.setVisible(true); + return false; + } + return true; + } + + private MessageBox messagebox1; + + /** + * getTimeNum:获得时间字符串 + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public static String getTimeNum() { + String strTime = ""; + try { + SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + strTime = bartDateFormat.format(new Date()); + System.out.println(strTime); + } + catch (Exception e) { + e.printStackTrace(); + } + return strTime; + } + + /** + * getTimeNum:获得时间字符串 例: format为yyyyMMddHHmmssSSS + * @param @param format 格式 + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public static String getTimeNum(String format) { + String strTime = ""; + try { + SimpleDateFormat bartDateFormat = new SimpleDateFormat(format); + strTime = bartDateFormat.format(new Date()); + System.out.println(strTime); + } + catch (Exception e) { + e.printStackTrace(); + } + return strTime; + } + + /** + * 获得格式化时间字符串 + * @param pDate 日期 + * @param pFormat 字符串格式 + * @return 格式化时间字符串 例:pFormat=yyyyMMddHHmmssSSS + */ + public static String getFormatTimeNum(Date pDate, String pFormat) { + String strTime = ""; + try { + if (pDate == null) { return ""; } + SimpleDateFormat bartDateFormat = new SimpleDateFormat(pFormat); + strTime = bartDateFormat.format(pDate); + System.out.println(strTime); + } + catch (Exception e) { + e.printStackTrace(); + } + return strTime; + } + + /** + * 获得当前系统java临时路径 + * @return 当前系统java临时路径 + */ + public static String getJavaTmpDir() { + String filepath = System.getProperty("java.io.tmpdir"); + if (!filepath.endsWith("\\")) { + filepath = filepath + "\\"; + } + System.out.println("getJavaTmpDir() - String filepath=" + filepath); //$NON-NLS-1$ + return filepath; + } + + /** + * getLimLenTxtIgnSomeVt:以固定长度拆分可能包含中文的字符串(忽略指定字符),返回矢量数组 + * @param src 待处理字符串 + * @param rowLength 长度 + * @param repStr 分隔符 + * @param someStr 忽略的字符 + * @param @return 设定文件 + * @return Vector 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public static Vector getLimLenTxtIgnSomeVt(String src, int rowLength, String repStr, String someStr) { + // if (logger.isDebugEnabled()) { + // logger.debug("getLimLenTxtIgnSomeVt(String, int, String, String) - start"); //$NON-NLS-1$ + // } + String ret = ""; + String tmpstr = ""; + Vector v = new Vector(); + Vector vt = new Vector(); + Vector vt1 = new Vector(); + if (src != null || UtilApi.length(src) > 0) { + v = UtilApi.str2vt(src, someStr); + for (int i = 0; i < v.size(); i++) { + tmpstr = v.get(i).toString(); + tmpstr = UtilApi.getLimRowLenText(tmpstr, rowLength, repStr); + tmpstr = UtilApi.nbsp2space(tmpstr); + if (tmpstr.indexOf(repStr) >= 0) { + vt = UtilApi.str2vt(tmpstr, repStr); + for (int j = 0; j < vt.size(); j++) { + vt1.add(vt.get(j).toString()); + } + } else { + vt1.add(tmpstr); + } + } + } + + // if (logger.isDebugEnabled()) { + // logger.debug("getLimLenTxtIgnSomeVt(String, int, String, String) - end"); //$NON-NLS-1$ + // } + return vt1; + } + + /** + * getLimRowLenText:以固定长度拆解可能包含中文的字符串(忽略指定字符) + * @param src 待处理字符串 + * @param rowLength 长度 + * @param repStr 分隔符 + * @param @return 添加了分隔符的字符串 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public static String getLimRowLenText(String src, int rowLength, String repStr) { + String ret = ""; + try { + if (src != null || UtilApi.length(src) > 0) { + src = UtilApi.nbsp2space(src); + while (UtilApi.length(src) > 0) { + if (UtilApi.length(src) > rowLength) { + ret += UtilApi.substring(src, 0, rowLength) + repStr; + src = UtilApi.substring(src, rowLength); + } else { + ret += src; + src = ""; + } + } + } + } + catch (Exception e) { + + e.printStackTrace(); + } + String returnString = UtilApi.space2nbsp(ret); + return returnString; + } + + /** + * space2nbsp:空格转换为nbsp + * @param pStr 待处理字符串 + * @param @return 转换后的字符串 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public static String space2nbsp(String pStr) { + if (pStr == null || pStr.length() < 1) + return pStr; + String s1 = ""; + for (int i = 0; i < pStr.length(); i++) + if (pStr.charAt(i) == ' ') + s1 = s1 + " "; + else s1 = s1 + pStr.charAt(i); + return s1; + } + + /** + * substring: 拆分字符串 + * @param source 待处理字符串 + * @param iniPos 初始化位置 + * @param endPos 结束为止 + * @param @return 处理后的字符串 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public static String substring(String source, int iniPos, int endPos) { + String tmpStr = ""; + String tmpStr1 = ""; + String retStr = ""; + int tmpLen = 0; + int len = 0; + try { + len = endPos - iniPos; + if (iniPos >= UtilApi.length(source)) + return ""; + tmpStr = UtilApi.substr(source, iniPos); + tmpLen = tmpStr.length(); + tmpStr1 = source.substring(tmpLen); + if (UtilApi.length(tmpStr1) <= len) + retStr = tmpStr1; + else retStr = UtilApi.substr(tmpStr1, len); + } + catch (Exception e) {} + return retStr; + } + + /* + * 截取一段字符的长度,不区分中英文,如果数字不正好,则少取一个字符位 + * @author patriotlml @param String origin, 原始字符串 @param int len, + * 截取长度(一个汉字长度按2算的) @return String, 返回的字符串(0位置到len位置) + */ + public static String substr(String source, int len) { + String retStr = ""; + if (source == null || source.equals("")) + return ""; + byte[] strByte = new byte[len]; + if (len > UtilApi.length(source)) + return source; + System.arraycopy(source.getBytes(), 0, strByte, 0, len); + int count = 0; + for (int i = 0; i < len; i++) { + int value = (int) strByte[i]; + if (value < 0) { + count++; + } + } + if (count % 2 != 0) { + len = (len == 1) ? ++len : --len; + } + + try { + retStr = new String(strByte, 0, len); + } + catch (Exception e) { + + try { + System.arraycopy(source.getBytes(), 0, strByte, 0, len); + retStr = new String(strByte, 0, len); + } + catch (Exception ex) {} + } + return retStr; + } + + /* + * 截取一段字符的长度,不区分中英文,如果数字不正好,则少取一个字符位 + * @author patriotlml @param String origin, 原始字符串 @param int iniPos, + * 截取字符串的初始位置 @param int len, 截取长度(一个汉字长度按2算的) @return String, + * 返回的字符串(0位置到len位置) + */ + public static String substring(String source, int iniPos) { + String tmpStr = ""; + String tmpStr1 = ""; + String retStr = ""; + int endPos = 0; + try { + endPos = UtilApi.length(source); + tmpStr = UtilApi.substring(source, iniPos, endPos + 1); + } + catch (Exception e) {} + return tmpStr; + } + + /** + * 得到一个字符串的长度,显示的长度,一个汉字或日韩文长度为2,英文字符长度为1 + * @param String s ,需要得到长度的字符串 + * @return int, 得到的字符串长度 + */ + public static int length(String s) { + if (s == null) + return 0; + char[] c = s.toCharArray(); + int len = 0; + for (int i = 0; i < c.length; i++) { + len++; + if (!isLetter(c[i])) { + len++; + } + } + return len; + } + + /** + * getLimRowLenTextWithSplitstr: 处理字符串,获得固定长度的字符串,并且替换指定字符串 + * @param src 待处理字符串 + * @param rowLength 每行长度 + * @param repStr 替换的字符串 + * @param splitStr 分隔符 + * @param @return 处理后的字符串 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public static String getLimRowLenTextWithSplitstr(String src, int rowLength, String repStr, String splitStr) { + Vector v = new Vector(); + String retStr = ""; + try { + src = UtilApi.nbsp2space(src); + v = UtilApi.getLimLenTxtIgnSomeVt(src, rowLength, repStr, splitStr); + for (int i = 0; i < v.size(); i++) { + retStr += v.get(i).toString(); + if (i != v.size() - 1) + retStr += repStr; + } + } + catch (Exception e) {} + return retStr; + } + + /** + * nbsp2space:(描述这个方法的作用) + * @param s + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public static String nbsp2space(String s) { + if (s == null || s.length() < 1) + return s; + String s1 = ""; + if (s.indexOf(" ") >= 0) + s1 = UtilApi.ReplaceAll(s, " ", " "); + else s1 = s; + return s1; + } + + /** + * 判断一个字符是Ascill字符还是其它字符(如汉,日,韩文字符) + * @param char c, 需要判断的字符 + * @return boolean, 返回true,Ascill字符 + */ + public static boolean isLetter(char c) { + int k = 0x80; + return c / k == 0 ? true : false; + } + + /** + * ReplaceAll:替换字符串中的特定字符串 + * @param source 待处理字符串 + * @param regex 代替换的字符串 + * @param replacement 替换的字符串 + * @param @return 替换后的字符串 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public static String ReplaceAll(String source, String regex, String replacement) { + if (source == null) + return ""; + String stmp1 = source; + String stmp2 = ""; + String stmp3 = ""; + int posRegex = stmp1.indexOf(regex); + int regexLen = regex.length(); + while (posRegex >= 0) { + stmp2 = stmp1.substring(0, posRegex); + stmp3 += stmp2 + replacement; + stmp1 = stmp1.substring(posRegex + regexLen); + posRegex = stmp1.indexOf(regex); + } + return stmp3 += stmp1; + } + + /** + * str2vt:将字符串以指定分隔符分隔,生成矢量数组 + * @param source 待处理字符串 + * @param sepStr 分隔符 + * @param @return 矢量数组 + * @return Vector 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public static Vector str2vt(String source, String sepStr) { + String stmp1 = source; + String stmp2 = ""; + String stmp3 = ""; + Vector vt = new Vector(); + int sepPos = 0; + int sepLen = sepStr.length(); + try { + do { + sepPos = stmp1.indexOf(sepStr); + if (sepPos < 0 || sepLen == 0) { + vt.add(stmp1); + return vt; + } + stmp2 = stmp1.substring(0, sepPos); + vt.add(stmp2); + stmp1 = stmp1.substring(sepPos + sepLen); + } while (stmp1.indexOf(sepStr) >= 0); + vt.add(stmp1); + } + catch (Exception e) {} + return vt; + } + + /** + * str2vt:将字符串以指定分隔符分隔,生成二维矢量数组 + * @param source 待处理字符串 + * @param sepStr1 分隔符一 + * @param sepStr2 分隔符二 + * @param @return 矢量数组 + * @return Vector 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public static Vector str2vt(String source, String sepStr1, String sepStr2) { + + if (source.indexOf(sepStr1) < 0) { return str2vt(source, sepStr2); } + Vector vector = str2vt(source, sepStr1); + Vector vector1 = new Vector(); + for (int i = 0; i < vector.size(); i++) + vector1.addElement(str2vt((String) vector.get(i), sepStr2)); + return vector1; + } + + /** + * str2vt:将字符串以指定分隔符分隔,生成三维矢量数组 + * @param source 待处理字符串 + * @param sepStr1 分隔符一 + * @param sepStr2 分隔符二 + * @param sepStr3 分隔符三 + * @param @return 矢量数组 + * @return Vector 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public static Vector str2vt(String source, String sepStr1, String sepStr2, String sepStr3) { + if (source.indexOf(sepStr1) < 0) { return str2vt(source, sepStr2, sepStr3); } + Vector vector = str2vt(source, sepStr1); + Vector vector1 = new Vector(); + for (int i = 0; i < vector.size(); i++) { + vector1.addElement(str2vt((String) vector.get(i), sepStr2, sepStr3)); + } + return vector1; + } + + /** + * str2vt:将字符串以指定分隔符分隔,生成四维矢量数组 + * @param source 待处理字符串 + * @param sepStr1 分隔符一 + * @param sepStr2 分隔符二 + * @param sepStr3 分隔符三 + * @param sepStr4 分隔符四 + * @param @return 矢量数组 + * @return Vector 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public static Vector str2vt(String source, String sepStr1, String sepStr2, String sepStr3, String sepStr4) { + if (source.indexOf(sepStr1) < 0) { return str2vt(source, sepStr2, sepStr3, sepStr4); } + Vector vector = str2vt(source, sepStr1); + Vector vector1 = new Vector(); + for (int i = 0; i < vector.size(); i++) + vector1.addElement(str2vt((String) vector.get(i), sepStr2, sepStr3, sepStr4)); + return vector1; + } + + /** + * getPreferenceHashMap:获得系统配置项属性值 + * @param session tcsession + * @param scope 作用域 + * @param pid 选项名 + * @param @return 设定文件 + * @return HashMap 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public static String[] getPreference(TCSession session, int scope, String pid) { + try { + String options[] = session.getPreferenceService().getStringArray(scope, pid); + return options; + } + catch (Exception e) { + System.out.println("没找到选项:" + pid); + e.printStackTrace(); + return null; + } + + } + + /** + * getPreferenceHashMap:获得系统配置项属性值 + * @param session tcsession + * @param scope 作用域 + * @param pid 选项名 + * @param @return 设定文件 + * @return HashMap 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public static HashMap getPreferenceHashMap(TCSession pSession, int pScope, String pid) { + HashMap hm = new HashMap(); + try { + String[] options = getPreference(pSession, pScope, pid); + if (options == null || options.length == 0) { + System.out.println("processRows(Vector, HashMap) - ************ 没有配置" + pid + "选项!"); + } + String key = ""; + String value = ""; + for (int i = 0; i < options.length; i++) { + if (options[i].indexOf("=") > 0) { + key = options[i].substring(0, options[i].indexOf("=")); + value = options[i].substring(options[i].indexOf("=") + 1); + hm.put(key, value); + } else { + hm.put("" + i, options[i]); + } + } + } + catch (Exception e) { + e.printStackTrace(); + return null; + } + return hm; + } + + public static InterfaceAIFComponent[] getQueryList(TCSession session, String queryName, String as[], String as1[]) { + System.out.println("begin=====query【" + queryName + "】"); + InterfaceAIFComponent[] components = null; + // 使用查询构建器: + try { + components = session.search(queryName, as, as1); + } + catch (Exception e) { + e.printStackTrace(); + MessageBox.post("querying 【" + queryName + "】 error!" + e.getMessage(), "INFO", MessageBox.INFORMATION); + } + System.out.println("end=====query【" + queryName + "】"); + return components; + } + + // ======利用系统查询构建器查询数据集======= + public static TCComponent[] searchComponentCollection(TCSession session, String queryName, String as[], String as1[]) { + TCComponent returnaimancomponent[] = null; + try { + TCTextService textService = session.getTextService(); + TCComponentQueryType querytype = (TCComponentQueryType) session.getTypeComponent("ImanQuery"); + TCComponentQuery query = (TCComponentQuery) querytype.find(queryName); + querytype.clearCache(); + if(query == null){ + System.out.println("未找到查询构建器:" + queryName); + return null; + } + int asLen = as.length; + String tValue = ""; + for(int ix = 0; ix < asLen; ix++){ + tValue = textService.getTextValue(as[ix]); + if(tValue != null && !tValue.equals("")){ + as[ix] = tValue; + } + } + TCComponentContextList list = query.getExecuteResultsList(as, as1); + if (list != null && list.getListCount() > 0) { + int count = list.getListCount(); + returnaimancomponent = new TCComponent[count]; + for (int i = 0; i < count; i++) { + AIFComponentContext context = list.get(i); + returnaimancomponent[i] = (TCComponent) context.getComponent(); + } + return returnaimancomponent; + } else { + return null; + } + } + catch (TCException e) { + e.printStackTrace(); + } + return null; + } + + /** + * 将特定格式的字符串转化成日期 + * @param str 日期字符串 + * @param pattern 字符串模式,如:yyyy年M月d日,yyyy-MM-dd等 + * @return 日期对象 + * @throws java.text.ParseException + */ + public static Date convertStringToDate(String pattern, String str) { + Date date = null; + try { + if (str.equals("") || str == null) + return date; + + SimpleDateFormat formatter = new SimpleDateFormat(pattern); + date = formatter.parse(str); + } + catch (Exception e) { + e.printStackTrace(); + } + + return date; + } + + private static HashMap msghm = new HashMap(); + + public static synchronized void setMsg(String key, String msg) { + msghm.put(key, msg); + } + + public static synchronized String getMsg(String key) { + String msg = ""; + try { + if (msghm.get(key) == null) { + msg = ""; + } else { + msg = "" + msghm.get(key); + } + } + catch (Exception e) { + e.printStackTrace(); + } + return msg; + } + + /** + * getOptionValues:: 读取首选项值,并且填充到comboBox中 + * @param JComboBox + * @param String + * @author liqz + * @since 20111215 + * */ + public static void getOptionValues(TCSession pSession,JComboBox cbo,String strOptionName){ + String[] arrValue= pSession.getPreferenceService().getStringArray(4, strOptionName); + cbo.addItem(""); + for (int i = 0; i < arrValue.length; i++) { + cbo.addItem(arrValue[i]); + } + } + + /** + * getDaysBetween::计算间隔的天数 + * + * @param Date + * 较早的日期 + * @param Date + * 较晚的日期 + * @return int 间隔的天数 + */ + public static int getDaysBetween(Date dtFormer, Date dtLater) { + GregorianCalendar vFormer = (GregorianCalendar) GregorianCalendar.getInstance(); + GregorianCalendar vLatter = (GregorianCalendar) GregorianCalendar.getInstance(); + + vFormer.setTime(dtFormer); + vLatter.setTime(dtLater); + + vFormer.set(Calendar.MILLISECOND, 0); + vFormer.set(Calendar.SECOND, 0); + vFormer.set(Calendar.MINUTE, 0); + vFormer.set(Calendar.HOUR_OF_DAY, 0); + vLatter.set(Calendar.MILLISECOND, 0); + vLatter.set(Calendar.SECOND, 0); + vLatter.set(Calendar.MINUTE, 0); + vLatter.set(Calendar.HOUR_OF_DAY, 0); + + int iCounter = 0; + while (vFormer.before(vLatter)) { + vFormer.add(Calendar.DATE, 1); + iCounter++; + } + // iCounter = iCounter + 1; + return iCounter; + } +} \ No newline at end of file diff --git a/src/cn/com/customization/util/WriteAndCopyFile.java b/src/cn/com/customization/util/WriteAndCopyFile.java new file mode 100644 index 0000000..ba6b4a1 --- /dev/null +++ b/src/cn/com/customization/util/WriteAndCopyFile.java @@ -0,0 +1,75 @@ +/* +#============================================================================= +# +# copyright (c) 2009 Origin Enterprise Solution LTD. +# +#============================================================================= +# File name: WriteAndCopyFile.java +# File description: +#============================================================================= +# Date Name Action Description of Change +# 2011-4-20 liqz 创建 实现对文件的操作(From Shaangu) +#============================================================================= +*/ +package cn.com.customization.util; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.FileInputStream; + + +public class WriteAndCopyFile { + + /** + * Creates a new instance of WriteAndCopyFile. + */ + public WriteAndCopyFile() { + + } + + /** + * writeFile:写相关信息到文本文件中 + * @param @param fileName 文件全路径名称 true是增加。 + * @param @param append 是否附加到文件结尾 + * @param @param content 文件内容 + * @since CodingExample Ver 1.1 + */ + public void writeFile(String fileName, boolean append, String content) { + FileOutputStream fos; + try { + fos = new FileOutputStream(fileName, append); + fos.write(content.getBytes()); + fos.close(); + } catch (final FileNotFoundException e) { + e.printStackTrace(); + } catch (final IOException e) { + e.printStackTrace(); + } + } + /** + * copyFile:实现文件的Copy + * + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public static void copyFile(String src, String dest) throws IOException { + FileInputStream in = new FileInputStream(src); + File file = new File(dest); + if (!file.exists()) + file.createNewFile(); + FileOutputStream out = new FileOutputStream(file); + int c; + byte buffer[] = new byte[1024]; + while ((c = in.read(buffer)) != -1) { + for (int i = 0; i < c; i++) + out.write(buffer[i]); + } + in.close(); + out.close(); + } + +} diff --git a/src/cn/com/customization/util/image/info.png b/src/cn/com/customization/util/image/info.png new file mode 100644 index 0000000000000000000000000000000000000000..48dd7d01ffdd5e5401c57f14eb86aff57d183465 GIT binary patch literal 772 zcmV+f1N;1mP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;dPzh=UDrjYIzB!Y*=$y%)9I=9^@z)cW|GMy6h*lZ*xdPtmG$}se=r!t z^z<|U%(Ta37eHumaM1NAM&B%<5d`v21~BzFb}ptU3RG1cZ=XZDDcI>v)}dfTJS=(ffTJ16(s;jDd50&Zi%qU}B++$)#WTSom>0fN7er zEDOzM6Q^xF9*+R51=Smk>m8A0S>T+5a}G)=WLX9w{lA|8*!wrv3TX&6SX<1W%PtpQ;9vd&1QQjjF6Clm@j z8Xg{oBuQ+3ex7v<@KUqc{Jyrf_SWa~z2}?{b={_3DijJ#*Y(euradc_N`Gz~004`N zi>zL+e=C>EFBxOCuKwh1luRZS04NrVjavbD>Hh%c&AG0kS^MMw0000M?M literal 0 HcmV?d00001 diff --git a/src/cn/com/teamcenter/rac/form/GCSelectionUserCommand.java b/src/cn/com/teamcenter/rac/form/GCSelectionUserCommand.java new file mode 100644 index 0000000..6c60e2f --- /dev/null +++ b/src/cn/com/teamcenter/rac/form/GCSelectionUserCommand.java @@ -0,0 +1,66 @@ +package cn.com.teamcenter.rac.form; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; + +import com.teamcenter.rac.aif.AIFDesktop; +import com.teamcenter.rac.aif.AbstractAIFCommand; +import com.teamcenter.rac.common.organization.OrgObject; +import com.teamcenter.rac.common.organization.OrgSelectionDialog; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentGroupMember; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.iTextField; + +public class GCSelectionUserCommand extends AbstractAIFCommand implements PropertyChangeListener { + private OrgSelectionDialog orgSelectionDialog; + private iTextField selectPersonText; + + public GCSelectionUserCommand(AIFDesktop desktop, TCSession tcSession) { + orgSelectionDialog = new OrgSelectionDialog(desktop.getFrame(), tcSession, null); + orgSelectionDialog.addPropertyChangeListener(this); + orgSelectionDialog.setOrgTreeSelectionMode(1); + orgSelectionDialog.setSelectionCriteria(false, false, true); + orgSelectionDialog.setShowDetailInfoFlag(false); + orgSelectionDialog.setAlwaysOnTop(true); + setRunnable(orgSelectionDialog); + orgSelectionDialog.setAlwaysOnTop(true); + } + + public void setContextBean(iTextField selectPersonText) { + orgSelectionDialog.setHeaderInfo(null, "选择责任人"); + this.selectPersonText = selectPersonText; + } + + public void setContextBean(String title, iTextField selectPersonText) { + orgSelectionDialog.setHeaderInfo(null, title); + this.selectPersonText = selectPersonText; + } + + public void propertyChange(PropertyChangeEvent propertychangeevent) { + String s = propertychangeevent.getPropertyName(); + if(!s.equals("OrgTree Selection Changed")) + { + return; + } + OrgObject aorgobject[] = (OrgObject[])propertychangeevent.getNewValue(); + if(aorgobject == null || aorgobject.length == 0) + { + return; + } + TCComponent selecttionUser = aorgobject[0].getComponent(); + if(!(selecttionUser instanceof TCComponentGroupMember)) { + return; + } + TCComponentGroupMember groupMember = (TCComponentGroupMember)selecttionUser; + try { + //System.out.println("groupMember.getUserId()="+groupMember.getUserId()); + selectPersonText.setText(groupMember.getUser().getProperty("user_name").toString()); + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } +} diff --git a/src/cn/com/teamcenter/rac/form/ORTableColorRender.java b/src/cn/com/teamcenter/rac/form/ORTableColorRender.java new file mode 100644 index 0000000..e7b98c3 --- /dev/null +++ b/src/cn/com/teamcenter/rac/form/ORTableColorRender.java @@ -0,0 +1,50 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: TableColorRender.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-11-22 下午03:46:31 zyn Ini 初始化文件 +#======================================================================================================= + */ +package cn.com.teamcenter.rac.form; + +import java.awt.Color; +import java.awt.Component; + +import javax.swing.JTable; +import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.TableCellRenderer; + +public class ORTableColorRender implements TableCellRenderer { + // + public static final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer(); + + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + Component renderer = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + + if (value != null&& value instanceof String) { + Color foreground = table.getForeground(); + Color background = table.getBackground(); + + if(column == 1){ + if (((String) value).contains("有延期风险")) { + background = Color.YELLOW; + } else if(((String) value).contains("已拖期")||((String) value).equals("拖期")) { + background = Color.RED; + } else if(((String) value).contains("暂停")) { + background = Color.GRAY; + } + } + renderer.setForeground(foreground); + renderer.setBackground(background); + } + + return renderer; + } +} + + diff --git a/src/cn/com/teamcenter/rac/form/YSR8_ProjectForm.java b/src/cn/com/teamcenter/rac/form/YSR8_ProjectForm.java new file mode 100644 index 0000000..25fc247 --- /dev/null +++ b/src/cn/com/teamcenter/rac/form/YSR8_ProjectForm.java @@ -0,0 +1,1875 @@ +package cn.com.teamcenter.rac.form; + +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.GridLayout; +import java.awt.Insets; +import java.awt.Point; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Hashtable; +import java.util.List; +import java.util.Vector; + +import javax.swing.BorderFactory; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTabbedPane; +import javax.swing.JTable; +import javax.swing.JTextArea; +import javax.swing.border.EmptyBorder; +import javax.swing.border.TitledBorder; +import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.DefaultTableModel; +import javax.swing.table.TableColumn; + +import com.teamcenter.rac.aif.AbstractAIFDialog; +import com.teamcenter.rac.aif.kernel.AIFComponentContext; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.commands.open.OpenFormDialog; +import com.teamcenter.rac.common.organization.OrgTreePanel; +import com.teamcenter.rac.common.organization.OrganizationTree; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentForm; +import com.teamcenter.rac.kernel.TCComponentGroup; +import com.teamcenter.rac.kernel.TCComponentGroupMember; +import com.teamcenter.rac.kernel.TCComponentItem; +import com.teamcenter.rac.kernel.TCComponentItemType; +import com.teamcenter.rac.kernel.TCComponentProject; +import com.teamcenter.rac.kernel.TCComponentRole; +import com.teamcenter.rac.kernel.TCComponentSchedule; +import com.teamcenter.rac.kernel.TCComponentUser; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCFormProperty; +import com.teamcenter.rac.kernel.TCPreferenceService; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.kernel.TCUserService; +import com.teamcenter.rac.stylesheet.AbstractRendering; +import com.teamcenter.rac.stylesheet.PropertyDateButton; +import com.teamcenter.rac.util.DateButton; +import com.teamcenter.rac.util.MessageBox; +import com.teamcenter.rac.util.PropertyLayout; +import com.teamcenter.rac.util.iTextArea; +import com.teamcenter.rac.util.iTextField; + +import cn.com.customization.util.KUtil; +import cn.com.customization.util.UtilApi; + +public class YSR8_ProjectForm extends AbstractRendering { + + private static final long serialVersionUID = 1L; + private TCSession session = null; + private TCComponentForm ysr8ProjectForm = null; + private TCComponentSchedule schedule; + private TCComponentProject projectComp; + + private DateButton dateUpdateTime; + private JButton btnUpdateData; + private iTextField ysr8_QuotationNo; // 报价单编号 + private iTextField ysr8_ProjectCode; // 订货单编号 + private iTextField ysr8_ProjectName; // 项目名称 + private iTextField ysr8_OrderManufacturer; // 订货厂家 + private iTextField ysr8_CustomerName; // 用户名称 + private iTextField ysr8_ProjectCategory; // 项目类别 + private iTextField ysr8_Factory; // 厂别 + private iTextField ysr8_Product; // 产品 + private iTextField ysr8_Use; // 用途 + private iTextArea ysr8_ProjectContent; // 项目内容 + private iTextField ysr8_FixtrueCount; // 夹具数量 + private iTextField ysr8_AttachCount; // 附具数量 + private iTextField ysr8_GuidCount; // 安全栏 + private iTextField ysr8_JigCount; // 变位机 + private iTextField ysr8_PositionerCount; // 外委数 + private iTextField ysr8_RobotCount; // 机器人数 + private iTextArea ysr8_RobotModel; // 机器人型号 + private DateButton ysr8_ReceiveDate; // 订单下发日期 + private DateButton ysr8_SaleStartDate; // 销售启动日期 + private DateButton ysr8_StartDate; // 系统科启动日期 + private DateButton ysr8_ContractDate; // 签订合同日期 + private DateButton ysr8_ActualFactoryDate; // 实际出厂时间 + private DateButton ysr8_PlanDeliveryDate; // 交货时间(启动通知) + private DateButton ysr8_ActualDeliveryDate; // 交货时间(合同) + private DateButton ysr8_ProductionDate; // 量产预定时间 + private DateButton ysr8_PlanAcceptance; // 计划验收日期 + private DateButton ysr8_FinalAcceptance; // 实际验收日期 + + private DefaultTableModel modMilestone; + private DefaultTableModel modKeyTasks; + private DefaultTableModel modMembers; + + private JTable tblProjectMilestone;// 项目里程碑 + private JTable tblProjectKeyTasks; // 项目关键任务 + private JTable tblProjectMembers; // 项目人员 + + private iTextField ysr8_ProjectManager; // 项目经理 + private iTextField ysr8_Planner; // 计划管理员 + private iTextField ysr8_DesignDirector; // 设计主管 + private iTextField ysr8_ElectricDirector; // 电气主管 + private iTextField ysr8_Purcher; // 采购负责人 + private iTextField ysr8_Machiner; // 加工负责人 + private iTextField ysr8_EngineerDebug; // 工程调试人员 + private iTextField ysr8_ElecDebug; // 电气调试人员 + private iTextField ysr8_Sales; // 销售负责人 + + private JButton btnAddMember; + private JButton btnRemoveMember; + + private Vector vtProjectAdmin; + // private Vector vtProjectMembers; + private Vector vtProjectMembers; + private Vector vtPrivilegedUsers; + private HashMap hmUserRole; + private String[] arrMilestoneTaskProp; + private String[] arrKeyTaskProp; + private JDialog dlg; + + private Vector allComponents = new Vector(); + private TCFormProperty[] formProperties; + private Hashtable indices = new Hashtable(); + private static SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd"); + + public YSR8_ProjectForm(TCComponentForm form) throws Exception { + super(form); + // Auto-generated constructor stub + this.ysr8ProjectForm = form; + session = ysr8ProjectForm.getSession(); + + addUIComponents(); + initUI(); + loadRendering(); + + getSchedule(); + getScheduleTasks(); + getMilestoneTaskInfo(); + getKeyTaskInfo(); + loadProjectMember(); + } + + + + @Override + public void displayDialog(AbstractAIFDialog arg0, boolean arg1) { + KUtil.fitToScreen(arg0); + super.displayDialog(arg0, arg1); + } + + + + @Override + public void displayDialog(OpenFormDialog arg0, boolean arg1) { + KUtil.fitToScreen(arg0); + super.displayDialog(arg0, arg1); + } + + + + private void initUI() { + + // JPanel projectBasicInfo = new JPanel(new BorderLayout()); + // projectBasicInfo.add(BorderLayout.NORTH, initProjectBasicInfo()); + // JPanel projectPersonInfo = new JPanel(new BorderLayout()); + + JTabbedPane tabPane = new JTabbedPane(); + tabPane.addTab("项目基础信息", initProjectBasicInfo()); + tabPane.addTab("项目人员信息", initProjectPersonInfo()); + + setLayout(new GridLayout()); + add(tabPane); + } + + private JScrollPane initProjectBasicInfo() { + + JPanel paneUpdate = new JPanel(new PropertyLayout(5, 5, 5, 5, 5, 0)); + paneUpdate.add("1.1.right.right", new JLabel("更新时间: ")); + paneUpdate.add("1.2.right.right", dateUpdateTime); + paneUpdate.add("1.3.right.right", btnUpdateData); + + JPanel paneBasic = new JPanel(new GridBagLayout()); + GridBagConstraints g4 = new GridBagConstraints(); + g4.insets = new Insets(5, 5, 5, 5); + g4.anchor = GridBagConstraints.WEST; + g4.fill = GridBagConstraints.HORIZONTAL; + + g4.gridx = 0; + g4.gridy = 0; + paneBasic.add(new JLabel("项目名称:"), g4); + + g4.gridx = 1; + g4.gridy = 0; + g4.gridwidth=3; + paneBasic.add(ysr8_ProjectName, g4); + g4.gridwidth=1; + + g4.gridx = 0; + g4.gridy = 1; + paneBasic.add(new JLabel("项目内容:"), g4); + + g4.gridx = 1; + g4.gridy = 1; + g4.gridheight = 4; + g4.gridwidth=3; + paneBasic.add(new JScrollPane(ysr8_ProjectContent), g4); + g4.gridwidth=1; + g4.gridheight=1; + + g4.gridwidth = 1; + g4.gridx = 0; + g4.gridy = 5; + paneBasic.add(new JLabel("报价单编号:"), g4); + + g4.gridx = 1; + paneBasic.add(ysr8_QuotationNo, g4); + + g4.gridx = 2; + paneBasic.add(new JLabel("订货单编号:"), g4); + + g4.gridx = 3; + paneBasic.add(ysr8_ProjectCode, g4); + + g4.gridx = 0; + g4.gridy++; + paneBasic.add(new JLabel("订货厂家:"), g4); + + g4.gridx = 1; + g4.gridwidth = 3; + paneBasic.add(ysr8_OrderManufacturer, g4); + + g4.gridx = 0; + g4.gridy++; + paneBasic.add(new JLabel("用户名称:"), g4); + + g4.gridx = 1; + g4.gridwidth = 3; + paneBasic.add(ysr8_CustomerName, g4); + + g4.gridwidth = 1; + g4.gridx = 0; + g4.gridy++; + paneBasic.add(new JLabel("项目类别:"), g4); + + g4.gridx = 1; + paneBasic.add(ysr8_ProjectCategory, g4); + + g4.gridx = 2; + paneBasic.add(new JLabel("厂别:"), g4); + + g4.gridx = 3; + paneBasic.add(ysr8_Factory, g4); + + g4.gridx = 0; + g4.gridy++; + paneBasic.add(new JLabel("产品:"), g4); + + g4.gridx = 1; + paneBasic.add(ysr8_Product, g4); + + g4.gridx = 2; + paneBasic.add(new JLabel("用途:"), g4); + + g4.gridx = 3; + paneBasic.add(ysr8_Use, g4); + + + + /*JPanel paneCount = new JPanel(new GridBagLayout()); + GridBagConstraints g3 = new GridBagConstraints(); + g3.insets = new Insets(5, 5, 5, 5); + g3.anchor = GridBagConstraints.WEST; + g3.fill = GridBagConstraints.HORIZONTAL; + + g3.gridwidth = 1; + g3.gridx = 0; + g3.gridy = 0; + paneCount.add(new JLabel("夹具数量:"), g3); + + g3.gridx = 1; + g3.gridy = 0; + paneCount.add(ysr8_FixtrueCount, g3); + + g3.gridx = 2; + g3.gridy = 0; + paneCount.add(new JLabel("附具数量:"), g3); + + g3.gridx = 3; + g3.gridy = 0; + paneCount.add(ysr8_AttachCount, g3); + + g3.gridx = 4; + g3.gridy = 0; + paneCount.add(new JLabel("安全栏:"), g3); + + g3.gridx = 5; + g3.gridy = 0; + paneCount.add(ysr8_GuidCount, g3); + + g3.gridx = 0; + g3.gridy = 1; + paneCount.add(new JLabel("变位机:"), g3); + + g3.gridx = 1; + g3.gridy = 1; + paneCount.add(ysr8_JigCount, g3); + + g3.gridx = 2; + g3.gridy = 1; + paneCount.add(new JLabel("外委数:"), g3); + + g3.gridx = 3; + g3.gridy = 1; + paneCount.add(ysr8_PositionerCount, g3); + + g3.gridx = 4; + g3.gridy = 1; + paneCount.add(new JLabel("机器人数:"), g3); + + g3.gridx = 5; + g3.gridy = 1; + paneCount.add(ysr8_RobotCount, g3); + + g3.gridx = 0; + g3.gridy = 2; + paneCount.add(new JLabel("机器人型号:"), g3); + + g3.gridx = 1; + g3.gridy = 2; + g3.gridheight = 2; + g3.gridwidth=5; + JScrollPane scrollPane = new JScrollPane(ysr8_RobotModel); + scrollPane.setPreferredSize(new Dimension(755, 57)); + paneCount.add(scrollPane, g3); + g3.gridwidth=1;*/ + + JPanel pane1 = new JPanel(new GridBagLayout()); + GridBagConstraints g2 = new GridBagConstraints(); + g2.insets = new Insets(5, 5, 5, 5); + g2.anchor = GridBagConstraints.WEST; + g2.fill = GridBagConstraints.HORIZONTAL; + + g2.gridx = 0; + g2.gridy = 0; + pane1.add(new JLabel("订单下发: "), g2); + + g2.gridx = 1; + g2.gridy = 0; + ysr8_ReceiveDate.setPreferredSize(new Dimension(133, 23)); + pane1.add(ysr8_ReceiveDate, g2); + + g2.gridx = 2; + g2.gridy = 0; + pane1.add(new JLabel("销售启动:"), g2); + + g2.gridx = 3; + g2.gridy = 0; + ysr8_SaleStartDate.setPreferredSize(new Dimension(133, 23)); + pane1.add(ysr8_SaleStartDate, g2); + + g2.gridx = 4; + g2.gridy = 0; + pane1.add(new JLabel("系统科启动:"), g2); + + g2.gridx = 5; + g2.gridy = 0; + ysr8_StartDate.setPreferredSize(new Dimension(133, 23)); + pane1.add(ysr8_StartDate, g2); + + g2.gridx = 6; + g2.gridy = 0; + pane1.add(new JLabel("签订合同:"), g2); + + g2.gridx = 7; + g2.gridy = 0; + ysr8_ContractDate.setPreferredSize(new Dimension(132, 23)); + pane1.add(ysr8_ContractDate, g2); + + JPanel pane2 = new JPanel(new GridBagLayout()); + GridBagConstraints g1 = new GridBagConstraints(); + g1.insets = new Insets(5, 5, 5, 5); + g1.anchor = GridBagConstraints.WEST; + g1.fill = GridBagConstraints.HORIZONTAL; + + g1.gridx = 0; + g1.gridy = 0; + pane2.add(new JLabel("实际出厂时间:"), g1); + + g1.gridx = 1; + g1.gridy = 0; + ysr8_ActualFactoryDate.setPreferredSize(new Dimension(161, 23)); + pane2.add(ysr8_ActualFactoryDate, g1); + + g1.gridx = 2; + g1.gridy = 0; + pane2.add(new JLabel("交货时间(启动通知):"), g1); + + g1.gridx = 3; + g1.gridy = 0; + ysr8_PlanDeliveryDate.setPreferredSize(new Dimension(161, 23)); + pane2.add(ysr8_PlanDeliveryDate, g1); + + g1.gridx = 4; + g1.gridy = 0; + pane2.add(new JLabel("交货时间(合同):"), g1); + + g1.gridx = 5; + g1.gridy = 0; + ysr8_ActualDeliveryDate.setPreferredSize(new Dimension(160, 23)); + pane2.add(ysr8_ActualDeliveryDate, g1); + + g1.gridx = 0; + g1.gridy = 1; + pane2.add(new JLabel("量产预定时间:"), g1); + + g1.gridx = 1; + g1.gridy = 1; + pane2.add(ysr8_ProductionDate, g1); + + g1.gridx = 2; + g1.gridy = 1; + pane2.add(new JLabel("计划验收日期:"), g1); + + g1.gridx = 3; + g1.gridy = 1; + pane2.add(ysr8_PlanAcceptance, g1); + + g1.gridx = 4; + g1.gridy = 1; + pane2.add(new JLabel("实际验收日期:"), g1); + + g1.gridx = 5; + g1.gridy = 1; + pane2.add(ysr8_FinalAcceptance, g1); + + // 项目里程碑 + JPanel paneMilestone = new JPanel(new BorderLayout()); + paneMilestone.setBorder(new TitledBorder(BorderFactory.createEtchedBorder(), "项目里程碑")); + String[] arrMilestoneTitle = new String[] { "里程碑", "完成情况", "倒计时", "计划完成时间", "实际完成时间", "描述" }; + modMilestone = new DefaultTableModel(new Object[0][6], arrMilestoneTitle) { + + private static final long serialVersionUID = 1L; + + public boolean isCellEditable(int row, int column) { + return false; + } + }; + + tblProjectMilestone = new JTable(modMilestone); + tblProjectMilestone.setDefaultRenderer(Object.class, new ORTableColorRender()); + tblProjectMilestone.setColumnSelectionAllowed(false); + tblProjectMilestone.getTableHeader().setReorderingAllowed(false); + + JScrollPane jspMilestone = new JScrollPane(tblProjectMilestone); + paneMilestone.add(BorderLayout.CENTER, jspMilestone); + paneMilestone.setPreferredSize(new Dimension(835, 150)); + tblProjectMilestone.addMouseListener(new MouseListener() { + + @Override + public void mouseClicked(MouseEvent e) { + if (e.getClickCount() == 1) { + for (int i = 0; i <= 5; i++) { + if (i != 1) { + TableColumn column = tblProjectMilestone.getColumnModel().getColumn(i); + column.setCellRenderer(new DefaultTableCellRenderer()); + } + } + } + } + + @Override + public void mouseEntered(MouseEvent e) { + + } + + @Override + public void mouseExited(MouseEvent e) { + + } + + @Override + public void mousePressed(MouseEvent e) { + + } + + @Override + public void mouseReleased(MouseEvent e) { + + } + + }); + + // 项目关键任务 + JPanel paneKeyTasks = new JPanel(new BorderLayout()); + paneKeyTasks.setBorder(new TitledBorder(BorderFactory.createEtchedBorder(), "项目关键任务")); + String[] arrKeyTasksTitle = new String[] { "项目任务", "完成情况", "倒计时", "任务状态", "描述", "计划开始时间", "计划完成时间", "实际开始时间", "实际完成时间" }; + modKeyTasks = new DefaultTableModel(new Object[0][9], arrKeyTasksTitle) { + + private static final long serialVersionUID = 1L; + + public boolean isCellEditable(int row, int column) { + return false; + } + }; + tblProjectKeyTasks = new JTable(modKeyTasks); + tblProjectKeyTasks.setDefaultRenderer(Object.class, new ORTableColorRender()); + tblProjectKeyTasks.getTableHeader().setReorderingAllowed(false); + + JScrollPane jspKeyTasks = new JScrollPane(tblProjectKeyTasks); + paneKeyTasks.add(BorderLayout.CENTER, jspKeyTasks); + paneKeyTasks.setPreferredSize(new Dimension(835, 150)); + tblProjectKeyTasks.addMouseListener(new MouseListener() { + + @Override + public void mouseClicked(MouseEvent e) { + if (e.getClickCount() == 1) { + for (int i = 0; i <= 8; i++) { + if (i != 1) { + TableColumn column = tblProjectKeyTasks.getColumnModel().getColumn(i); + column.setCellRenderer(new DefaultTableCellRenderer()); + } + } + } + } + + @Override + public void mouseEntered(MouseEvent e) { + + } + + @Override + public void mouseExited(MouseEvent e) { + + } + + @Override + public void mousePressed(MouseEvent e) { + + } + + @Override + public void mouseReleased(MouseEvent e) { + + } + }); + + JPanel paneProjectBasicInfo = new JPanel(); + paneProjectBasicInfo.setLayout(new PropertyLayout()); + //int width=(int) paneBasic.getPreferredSize().getWidth(); + //paneCount.setPreferredSize(new Dimension(width, (int)paneCount.getPreferredSize().getHeight())); + paneProjectBasicInfo.add("1.1.left.center", paneUpdate); + paneProjectBasicInfo.add("2.1.left.center", paneBasic); +// paneProjectBasicInfo.add("3.1.left.center", paneCount); + paneProjectBasicInfo.add("3.1.left.center", pane1); + paneProjectBasicInfo.add("4.1.left.center", pane2); + paneProjectBasicInfo.add("5.1.left.center", paneMilestone); + paneProjectBasicInfo.add("6.1.left.center", paneKeyTasks); + + JScrollPane sMain = new JScrollPane(paneProjectBasicInfo); + return sMain; + } + + private JScrollPane initProjectPersonInfo() { + + JPanel topPanel = new JPanel(); + topPanel.setLayout(new PropertyLayout(10,7,5,5,5,5)); + + topPanel.add("1.1.left.center", new JLabel("项目经理:")); + topPanel.add("1.2.left.center", ysr8_ProjectManager); + topPanel.add("1.3.left.center", new JLabel("计划管理员:")); + topPanel.add("1.4.left.center", ysr8_Planner); + topPanel.add("1.5.left.center", new JLabel("机械设计主管:")); + // hubing 20180615 + topPanel.add("1.6.left.center", ysr8_DesignDirector); + topPanel.add("2.1.left.center", new JLabel("电气设计:")); + topPanel.add("2.2.left.center", ysr8_ElectricDirector); + topPanel.add("2.3.left.center", new JLabel("采购负责人:")); + topPanel.add("2.4.left.center", ysr8_Purcher); + topPanel.add("2.5.left.center", new JLabel("加工负责人: ")); + topPanel.add("2.6.left.center", ysr8_Machiner); + topPanel.add("3.1.left.center", new JLabel("工程调试人员:")); + topPanel.add("3.2.left.center", ysr8_EngineerDebug); + topPanel.add("3.3.left.center", new JLabel("电气调试员:")); + topPanel.add("3.4.left.center", ysr8_ElecDebug); + topPanel.add("3.5.left.center", new JLabel("销售负责人: ")); + topPanel.add("3.6.left.center", ysr8_Sales); + + String[] arrMemberTitle = new String[] { "项目角色", "组织角色", "项目人员(姓名)", "联系电话" }; + modMembers = new DefaultTableModel(new Object[0][4], arrMemberTitle) { + private static final long serialVersionUID = 1L; + + public boolean isCellEditable(int row, int column) { + return false; + } + }; + tblProjectMembers = new JTable(modMembers); + tblProjectMembers.getTableHeader().setReorderingAllowed(false); + JScrollPane jspMembers = new JScrollPane(tblProjectMembers); + jspMembers.setPreferredSize(new Dimension(946, 300)); + + btnAddMember = new JButton("添加人员"); + btnAddMember.setVisible(false); + btnAddMember.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (checkPrivilege()) { + AddMember(); + } + } + }); + btnRemoveMember = new JButton("移除人员"); + btnRemoveMember.setVisible(false); + btnRemoveMember.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if (checkPrivilege()) { + removeMember(); + } + } + }); + JPanel paneButton = new JPanel(new PropertyLayout()); + paneButton.add("1.1.left.center", btnAddMember); + paneButton.add("2.1.left.center", btnRemoveMember); + + JPanel panelMember = new JPanel(new PropertyLayout()); + panelMember.add("1.1.left.center", jspMembers); + panelMember.add("1.2.left.center", paneButton); + + JPanel paneProjectPersonInfo = new JPanel(); + paneProjectPersonInfo.setBorder(new EmptyBorder(5, 5, 5, 5)); + paneProjectPersonInfo.setLayout(new PropertyLayout()); + paneProjectPersonInfo.add("1.1.left.center", topPanel); + paneProjectPersonInfo.add("2.1.left.center", panelMember); + + JScrollPane sMain = new JScrollPane(paneProjectPersonInfo); + return sMain; + } + + @Override + public void loadRendering() throws TCException { + // Auto-generated method stub + try { + this.formProperties = ysr8ProjectForm.getAllFormProperties(); + int length = this.formProperties.length; + int pSize = allComponents.size(); + for (int k = 0; k < length; ++k) { + String propName = this.formProperties[k].getPropertyName().trim(); + // System.out.println("propName="+propName); + for (int i = 0; i < pSize; i++) { + Component component = allComponents.get(i); + String name = component.getName(); + if (component instanceof iTextField) { + iTextField textField = (iTextField) component; + if (propName.equalsIgnoreCase(name)) { + textField.setText(this.formProperties[k].getStringValue()); + indices.put(formProperties[k], textField); + break; + } + } else if (component instanceof JTextArea) { + JTextArea textArea = (JTextArea) component; + if (propName.equalsIgnoreCase(name)) { + textArea.setText(this.formProperties[k].getStringValue()); + indices.put(formProperties[k], textArea); + break; + } + } else if (component instanceof JComboBox) { + JComboBox combox = (JComboBox) component; + if (propName.equalsIgnoreCase(name)) { + combox.setSelectedItem(this.formProperties[k].getStringValue()); + indices.put(formProperties[k], combox); + break; + } + } else if (component instanceof DateButton) { + DateButton btn = (DateButton) component; + if (propName.equalsIgnoreCase(name)) { + btn.setDate(formProperties[k].getDateValue()); + indices.put(formProperties[k], btn); + break; + } + } + } + } + } catch (TCException imanexception) { + throw imanexception; + } + } + + @Override + public void saveRendering() { + // Auto-generated method stub + Enumeration enumeration = this.indices.keys(); + Enumeration enumeration1 = this.indices.elements(); + TCFormProperty[] aimanformproperty = new TCFormProperty[this.indices.size()]; + try { + for (int i = 0; enumeration.hasMoreElements(); i++) { + TCFormProperty imanformproperty = (TCFormProperty) enumeration.nextElement(); + Object component = enumeration1.nextElement(); + //String propName = imanformproperty.getPropertyName(); + if (component instanceof iTextField) { + //setByPass(true); + //System.out.println("属性:"+imanformproperty.getName()+" = "+((iTextField) component).getText().toString()); + setStringToPropertyValue(imanformproperty, ((iTextField) component).getText().toString()); + //setByPass(false); + } else if (component instanceof JTextArea) { + setStringToPropertyValue(imanformproperty, ((JTextArea) component).getText().toString()); + } else if (component instanceof JComboBox) { + setStringToPropertyValue(imanformproperty, ((JComboBox) component).getSelectedItem().toString()); + } else if (component instanceof DateButton) { + DateButton btn = (DateButton) component; + if (btn.getDate() != null) { + imanformproperty.setDateValue(btn.getDate()); + } else { + imanformproperty.setDateValue(null); + } + } + aimanformproperty[i] = imanformproperty; + } + try { + ysr8ProjectForm.setTCProperties(aimanformproperty); + } catch (Exception exception) { + exception.printStackTrace(); + MessageBox.post(exception); + } + } catch (TCException imane) { + imane.printStackTrace(); + } + + updateProjectMember(); + } + + public static void setByPass(boolean val) throws TCException { + TCUserService userservice = null; + if (userservice == null) { + userservice = ((TCSession) AIFUtility.getCurrentApplication().getSession()).getUserService(); + } + Object[] obj = new Object[1]; + obj[0] = "origin"; + if (val) { + userservice.call("YSR_set_bypass", obj); + } else { + userservice.call("YSR_close_bypass", obj); + } + } + @Override + public boolean isRenderingModified() { + Enumeration enumeration = this.indices.keys(); + Enumeration enumeration1 = this.indices.elements(); + for (int i = 0; enumeration.hasMoreElements(); i++) { + TCFormProperty imanformproperty = (TCFormProperty) enumeration.nextElement(); + Object component = enumeration1.nextElement(); + if (component instanceof iTextField) { + String strTempValue = ((iTextField) component).getText().toString(); + if (!imanformproperty.getStringValue().equals(strTempValue)) { + return true; + } + } else if (component instanceof iTextArea) { + String strTempValue = ((iTextArea) component).getText().toString(); + if (!imanformproperty.getStringValue().equals(strTempValue)) { + return true; + } + } else if (component instanceof JComboBox) { + String strTempValue = ((JComboBox) component).getSelectedItem().toString(); + if (!imanformproperty.getStringValue().equals(strTempValue)) { + return true; + } + } else if (component instanceof DateButton) { + DateButton btn = (DateButton) component; + if (imanformproperty.getDateValue() != null && btn.getDate() != null) { + if (imanformproperty.getDateValue().getTime() != btn.getDate().getTime()) { + return true; + } + } else if (imanformproperty.getDateValue() != null && btn.getDate() == null) { + return true; + } else if (imanformproperty.getDateValue() == null && btn.getDate() != null) { + return true; + } + } + } + return false; + } + //kk 首选项增加多个角色配置,用;隔开 + public String getUserNames(String orgName) { + String[] orgNameSplit = orgName.split(";"); + StringBuilder res=new StringBuilder(); + for (String org : orgNameSplit) { + String val=getPropertyValue2(org); + if(!"".equals(val)) { + res.append(val).append(";"); + } + } + if(res.length()>0) { + res.setLength(res.length()-1); + } + return res.toString(); + } + + public String getPropertyValue2(String orgName) { + String value = ""; + if(orgName==null||"".equals(orgName)) { + return value; + } + //kk 首选项增加两个配置项,写在等号右边 + if("项目小组管理员".equals(orgName)) { + TCComponent[] comps; + try { + comps = schedule.getReferenceListProperty("project_list"); + if (comps != null && comps.length > 0) { + projectComp = (TCComponentProject) comps[0]; + } + if (projectComp == null) { + return value; + } + TCComponentUser[] admins = (TCComponentUser[])projectComp.getTeam().get(1); + StringBuilder valueB = new StringBuilder(); + for (TCComponentUser admin : admins) { + valueB.append(admin.getStringProperty("user_name")).append(";"); + } + if(valueB.length()>0) { + valueB.setLength(valueB.length()-1); + } + value = valueB.toString(); + return value; + } catch (TCException e) { + e.printStackTrace(); + return value; + } + }else if("项目所有者".equals(orgName)) { + TCComponent[] comps; + try { + comps = schedule.getReferenceListProperty("project_list"); + if (comps != null && comps.length > 0) { + projectComp = (TCComponentProject) comps[0]; + } + if (projectComp == null) { + return value; + } + TCComponentUser user=(TCComponentUser) projectComp.getReferenceProperty("owning_user"); + value=user.getStringProperty("user_name"); + return value; + } catch (TCException e) { + e.printStackTrace(); + return value; + } + } + StringBuilder valueB = new StringBuilder(); + int rowCount = tblProjectMembers.getRowCount(); + for (int i = 0; i < rowCount; i++) { + Object orgObj = tblProjectMembers.getModel().getValueAt(i, 1); + Object userNameObj = tblProjectMembers.getModel().getValueAt(i, 2); + String orgStr = orgObj == null ? "" : orgObj.toString(); + String userNameStr = userNameObj == null ? "" : userNameObj.toString(); + if (orgName.equalsIgnoreCase(orgStr)) { + valueB.append(userNameStr).append(";"); + } + } + if(valueB.length()>0) { + valueB.setLength(valueB.length()-1); + } + value = valueB.toString(); + if (value.endsWith(";")) { + value.substring(0, value.length() - 1); + } + + return value; + } + + private void getPropertyValueByPreference() { + ysr8_ProjectManager.setName("ysr8_ProjectManager"); + ysr8_Planner.setName("ysr8_Planner"); + ysr8_EngineerDebug.setName("ysr8_EngineerDebug"); + ysr8_ElecDebug.setName("ysr8_ElecDebug"); + ysr8_Sales.setName("ysr8_Sales"); + ysr8_DesignDirector.setName("ysr8_DesignDirector"); + ysr8_ElectricDirector.setName("ysr8_ElectricDirector"); + ysr8_Purcher.setName("ysr8_Purcher"); + ysr8_Machiner.setName("ysr8_Machiner"); + + TCPreferenceService service = session.getPreferenceService(); + + String[] values = service.getStringValues("YSR_ProjectForm_Personnel"); + if (values == null || values.length < 2) { + return; + } + for (String value : values) { + String[] names = value.split("="); + if (names == null || names.length < 2) { + continue; + } + String propName = names[0]; + String orgName = names[1]; + //System.out.println(propName); + switch (propName) { + case "ysr8_ProjectManager": + ysr8_ProjectManager.setText(getUserNames(orgName)); + break; + case "ysr8_Planner": + ysr8_Planner.setText(getUserNames(orgName)); + break; + case "ysr8_EngineerDebug": + ysr8_EngineerDebug.setText(getUserNames(orgName)); + break; + case "ysr8_ElecDebug": + ysr8_ElecDebug.setText(getUserNames(orgName)); + break; + case "ysr8_Sales": + ysr8_Sales.setText(getUserNames(orgName)); + break; + case "ysr8_DesignDirector": + //System.out.println(getUserNames(orgName)+"@"+orgName); + ysr8_DesignDirector.setText(getUserNames(orgName)); + break; + case "ysr8_ElectricDirector": + ysr8_ElectricDirector.setText(getUserNames(orgName)); + break; + case "ysr8_Purcher": + ysr8_Purcher.setText(getUserNames(orgName)); + break; + case "ysr8_Machiner": + ysr8_Machiner.setText(getUserNames(orgName)); + break; + + } + + } + } + + private void addUIComponents() { + + dateUpdateTime = newDateButton(); + // dateUpdateTime.setPreferredSize(new Dimension(186, 23)); + btnUpdateData = new JButton("数据更新"); // kk 增加项目所有者 和 项目小组管理员 + btnUpdateData.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + clearData(); + dateUpdateTime.setDate(new Date()); + boolean isOK = getBasicInfo(); + if (!isOK) { + return; + } + loadProjectMember(); + getScheduleTasks(); + getMilestoneTaskInfo(); + getKeyTaskInfo(); + // 添加 + getPropertyValueByPreference(); + } + }); + + ysr8_QuotationNo = new iTextField(30); + ysr8_QuotationNo.setEnabled(false); + ysr8_ProjectCode = new iTextField(30); + ysr8_ProjectCode.setEnabled(false); + ysr8_ProjectName = new iTextField(30); + ysr8_ProjectName.setEnabled(false); + ysr8_OrderManufacturer = new iTextField(30); + ysr8_OrderManufacturer.setEnabled(false); + ysr8_CustomerName = new iTextField(30); + ysr8_CustomerName.setEnabled(false); + + ysr8_ProjectCategory = new iTextField(30); + ysr8_ProjectCategory.setEnabled(false); + ysr8_Factory = new iTextField(30); + ysr8_Factory.setEnabled(false); + ysr8_Product = new iTextField(30); + ysr8_Product.setEnabled(false); + ysr8_Use = new iTextField(30); + ysr8_Use.setEnabled(false); + ysr8_ProjectContent = new iTextArea(7, 60); + ysr8_ProjectContent.setEnabled(false); + + ysr8_FixtrueCount = new iTextField(16); + ysr8_AttachCount = new iTextField(16); + ysr8_GuidCount = new iTextField(16); + ysr8_JigCount = new iTextField(16); + ysr8_PositionerCount = new iTextField(16); + + ysr8_RobotCount = new iTextField(16); + ysr8_RobotModel = new iTextArea(3, 60); + + ysr8_ReceiveDate = new DateButton(new Date(), "yyyy-MM-dd", false, false, false); + ysr8_SaleStartDate = new DateButton(new Date(), "yyyy-MM-dd", false, false, false); + ysr8_StartDate = new DateButton(new Date(), "yyyy-MM-dd", false, false, false); + ysr8_ContractDate = new DateButton(new Date(), "yyyy-MM-dd", false, false, false); + ysr8_ActualFactoryDate = new DateButton(new Date(), "yyyy-MM-dd", false, false, false); + ysr8_PlanDeliveryDate = new DateButton(new Date(), "yyyy-MM-dd", false, false, false); + ysr8_ActualDeliveryDate = new DateButton(new Date(), "yyyy-MM-dd", false, false, false); + ysr8_ProductionDate = new DateButton(new Date(), "yyyy-MM-dd", false, false, false); + ysr8_PlanAcceptance = new DateButton(new Date(), "yyyy-MM-dd", false, false, false); + ysr8_FinalAcceptance = new DateButton(new Date(), "yyyy-MM-dd", false, false, false); + + ysr8_ProjectManager = new iTextField(20); + ysr8_ProjectManager.setEnabled(false); + ysr8_Planner = new iTextField(20); + ysr8_Planner.setEnabled(false); + // HUBING 20180615 + ysr8_DesignDirector = new iTextField(20); + ysr8_DesignDirector.setEnabled(false); + ysr8_ElectricDirector = new iTextField(20); + ysr8_ElectricDirector.setEnabled(false); + ysr8_Purcher = new iTextField(20); + ysr8_Purcher.setEnabled(false); + // HUBING 20180615 + final GCSelectionUserCommand selectionUserCmd = new GCSelectionUserCommand(AIFUtility.getCurrentApplication().getDesktop(), session); + /*ysr8_Purcher.setToolTipText("双击选择"); + ysr8_Purcher.addMouseListener(new MouseAdapter() { + + public void mouseClicked(MouseEvent mouseevent) { + if (mouseevent.getClickCount() == 2) { + ViewEditHelper editHelp = new ViewEditHelper(session); + boolean checkedOut = editHelp.isCheckedOutByUser(ysr8ProjectForm); + if (checkedOut && isModifiable()) { + selectionUserCmd.setContextBean(ysr8_Purcher); + try { + selectionUserCmd.executeModal(); + } catch (Exception e) { + // Auto-generated catch block + e.printStackTrace(); + } + } + } + } + });*/ + ysr8_Machiner = new iTextField(20); + ysr8_Machiner.setEnabled(false); + /*ysr8_Machiner.setToolTipText("双击选择"); + ysr8_Machiner.addMouseListener(new MouseAdapter() { + + public void mouseClicked(MouseEvent mouseevent) { + if (mouseevent.getClickCount() == 2) { + ViewEditHelper editHelp = new ViewEditHelper(session); + boolean checkedOut = editHelp.isCheckedOutByUser(ysr8ProjectForm); + if (checkedOut && isModifiable()) { + selectionUserCmd.setContextBean(ysr8_Machiner); + try { + selectionUserCmd.executeModal(); + } catch (Exception e) { + // Auto-generated catch block + e.printStackTrace(); + } + } + } + } + });*/ + ysr8_EngineerDebug = new iTextField(20); + ysr8_EngineerDebug.setEnabled(false); + /*ysr8_EngineerDebug.setToolTipText("双击选择"); + ysr8_EngineerDebug.addMouseListener(new MouseAdapter() { + + public void mouseClicked(MouseEvent mouseevent) { + if (mouseevent.getClickCount() == 2) { + ViewEditHelper editHelp = new ViewEditHelper(session); + boolean checkedOut = editHelp.isCheckedOutByUser(ysr8ProjectForm); + if (checkedOut && isModifiable()) { + selectionUserCmd.setContextBean(ysr8_EngineerDebug); + try { + selectionUserCmd.executeModal(); + } catch (Exception e) { + // Auto-generated catch block + e.printStackTrace(); + } + } + } + } + });*/ + ysr8_ElecDebug = new iTextField(20); + ysr8_ElecDebug.setEnabled(false); + /*ysr8_ElecDebug.setToolTipText("双击选择"); + ysr8_ElecDebug.addMouseListener(new MouseAdapter() { + + public void mouseClicked(MouseEvent mouseevent) { + if (mouseevent.getClickCount() == 2) { + ViewEditHelper editHelp = new ViewEditHelper(session); + boolean checkedOut = editHelp.isCheckedOutByUser(ysr8ProjectForm); + if (checkedOut && isModifiable()) { + selectionUserCmd.setContextBean(ysr8_ElecDebug); + try { + selectionUserCmd.executeModal(); + } catch (Exception e) { + // Auto-generated catch block + e.printStackTrace(); + } + } + } + } + });*/ + ysr8_Sales = new iTextField(20); + ysr8_Sales.setEnabled(false); + + dateUpdateTime.setName("ysr8_UpdateT"); + ysr8_QuotationNo.setName("ysr8_QuotationNo"); + ysr8_ProjectCode.setName("ysr8_ProjectCode"); + ysr8_ProjectName.setName("ysr8_ProjectName"); + ysr8_OrderManufacturer.setName("ysr8_OrderManufacturer"); + ysr8_CustomerName.setName("ysr8_CustomerName"); + ysr8_ProjectCategory.setName("ysr8_ProjectCategory"); + ysr8_Factory.setName("ysr8_Factory"); + ysr8_Product.setName("ysr8_Product"); + ysr8_Use.setName("ysr8_Use"); + ysr8_ProjectContent.setName("ysr8_ProjectContent"); + ysr8_FixtrueCount.setName("ysr8_FixtrueCount"); + ysr8_AttachCount.setName("ysr8_AttachCount"); + ysr8_GuidCount.setName("ysr8_GuidCount"); + ysr8_JigCount.setName("ysr8_JigCount"); + ysr8_PositionerCount.setName("ysr8_PositionerCount"); + ysr8_RobotCount.setName("ysr8_RobotCount"); + ysr8_RobotModel.setName("ysr8_RobotModel"); + ysr8_ReceiveDate.setName("ysr8_ReceiveDate"); + ysr8_SaleStartDate.setName("ysr8_SaleStartDate"); + ysr8_StartDate.setName("ysr8_StartDate"); + ysr8_ContractDate.setName("ysr8_ContractDate"); + ysr8_ActualFactoryDate.setName("ysr8_ActualFactoryDate"); + ysr8_PlanDeliveryDate.setName("ysr8_PlanDeliveryDate"); + ysr8_ActualDeliveryDate.setName("ysr8_ActualDeliveryDate"); + ysr8_ProductionDate.setName("ysr8_ProductionDate"); + ysr8_PlanAcceptance.setName("ysr8_PlanAcceptance"); + ysr8_FinalAcceptance.setName("ysr8_FinalAcceptance"); + + ysr8_ProjectManager.setName("ysr8_ProjectManager"); + ysr8_Planner.setName("ysr8_Planner"); + // HUBING 20180615 + ysr8_DesignDirector.setName("ysr8_DesignDirector"); + ysr8_ElectricDirector.setName("ysr8_ElectricDirector"); + ysr8_Purcher.setName("ysr8_Purcher"); + ysr8_Machiner.setName("ysr8_Machiner"); + ysr8_EngineerDebug.setName("ysr8_EngineerDebug"); + ysr8_ElecDebug.setName("ysr8_ElecDebug"); + ysr8_Sales.setName("ysr8_Sales"); + + allComponents.add(dateUpdateTime); + allComponents.add(ysr8_QuotationNo); + allComponents.add(ysr8_ProjectCode); + allComponents.add(ysr8_ProjectName); + allComponents.add(ysr8_OrderManufacturer); + allComponents.add(ysr8_CustomerName); + allComponents.add(ysr8_ProjectCategory); + allComponents.add(ysr8_Factory); + allComponents.add(ysr8_Product); + allComponents.add(ysr8_Use); + allComponents.add(ysr8_ProjectContent); + allComponents.add(ysr8_FixtrueCount); + allComponents.add(ysr8_AttachCount); + allComponents.add(ysr8_GuidCount); + allComponents.add(ysr8_JigCount); + allComponents.add(ysr8_PositionerCount); + allComponents.add(ysr8_RobotCount); + allComponents.add(ysr8_RobotModel); + allComponents.add(ysr8_ReceiveDate); + allComponents.add(ysr8_SaleStartDate); + allComponents.add(ysr8_StartDate); + allComponents.add(ysr8_ContractDate); + allComponents.add(ysr8_ActualFactoryDate); + allComponents.add(ysr8_PlanDeliveryDate); + allComponents.add(ysr8_ActualDeliveryDate); + allComponents.add(ysr8_ProductionDate); + allComponents.add(ysr8_PlanAcceptance); + allComponents.add(ysr8_FinalAcceptance); + allComponents.add(ysr8_ProjectManager); + allComponents.add(ysr8_Planner); + // HUBING 20180615 + allComponents.add(ysr8_DesignDirector); + allComponents.add(ysr8_ElectricDirector); + allComponents.add(ysr8_Purcher); + allComponents.add(ysr8_Machiner); + allComponents.add(ysr8_EngineerDebug); + allComponents.add(ysr8_ElecDebug); + allComponents.add(ysr8_Sales); + } + + /** + * getSchedule:: 根据表单获取时间表对象 + */ + private void getSchedule() { + try { + AIFComponentContext[] context = ysr8ProjectForm.whereReferenced(); + for (int i = 0; i < context.length; i++) { + if (context[i].getComponent() instanceof TCComponentSchedule) { + schedule = (TCComponentSchedule) context[i].getComponent(); + } + } + } catch (TCException e) { + e.printStackTrace(); + } + } + + /** + * getScheduleMilestone:: 获取项目里程碑任务和关键任务 + */ + private void getScheduleTasks() { + if (schedule == null) { + return; + } + try { + TCUserService service = session.getUserService(); + Object[] parameters = new Object[] { schedule }; + + long startime = System.currentTimeMillis(); + Object getScheduleTasks = service.call("Get_Schedule_Tasks", parameters); + if (getScheduleTasks == null) { + return; + } + Object taskproperties[] = (Object[]) getScheduleTasks; + // Object taskproperties[] = (Object[]) + // service.call("Get_Schedule_Tasks", parameters); + + int iTotalMaxLen = taskproperties.length; + + // 里程碑个数 + int iMilestonMaxLen = Integer.parseInt(taskproperties[iTotalMaxLen - 1].toString()); + + arrMilestoneTaskProp = new String[iMilestonMaxLen]; + + for (int i = 0; i < iMilestonMaxLen; i++) { + arrMilestoneTaskProp[i] = taskproperties[i].toString(); + } + if (iMilestonMaxLen != (iTotalMaxLen - 1)) { + arrKeyTaskProp = new String[iTotalMaxLen - 1 - iMilestonMaxLen]; + for (int i = iMilestonMaxLen; i < iTotalMaxLen - 1; i++) { + arrKeyTaskProp[i - iMilestonMaxLen] = taskproperties[i].toString(); + } + } + long lendTime = System.currentTimeMillis(); + System.out.println("调用C获取时间任务属性,耗时:" + (lendTime - startime) + "毫秒"); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * getMilestoneTaskInfo::获取项目里程碑信息 + */ + private void getMilestoneTaskInfo() { + try { + Object[] objData; + for (int i = 0; arrMilestoneTaskProp != null && i < arrMilestoneTaskProp.length; i++) { + String strProperty = arrMilestoneTaskProp[i]; + String[] arrProperties = strProperty.split("&&"); + + // 任务名称 + String strTaskName = arrProperties[0]; + // 计划完成时间 + Date dtFinish = null; + String strFinishDate = arrProperties[2].equals("N/A") ? "" : arrProperties[2]; + if (!strFinishDate.equals("")) { + dtFinish = format.parse(strFinishDate); + } + + // 实际完成时间 + Date dtActualFinish = null; + String strActualFinishDate = arrProperties[3].equals("N/A") ? "" : arrProperties[3]; + if (!strActualFinishDate.equals("")) { + dtActualFinish = format.parse(strActualFinishDate); + } + + // 描述 + String strDesc = arrProperties[1].equals("N/A") ? "" : arrProperties[1]; + + // 完成情况 + String strPerfor = ""; + long day = 0; + if (strActualFinishDate != "") { + if (dtFinish.after(dtActualFinish)) { + day = UtilApi.getDaysBetween(dtActualFinish, dtFinish); + if (day == 0) { + strPerfor = "准时完成"; + } else { + strPerfor = "提前完成"; + } + } else { + day = UtilApi.getDaysBetween(dtFinish, dtActualFinish); + if (day == 0) { + strPerfor = "准时完成"; + } else { + day = (-1) * day; + strPerfor = "拖期完成"; + } + } + } else { + Date nowDate = new Date(); + if (dtFinish.after(nowDate)) { + day = UtilApi.getDaysBetween(nowDate, dtFinish); + if (day == 0) { + strPerfor = "已拖期"; + } else if (day <= 15) { + strPerfor = "有延期风险"; + } else { + strPerfor = "正常"; + } + } else { + day = UtilApi.getDaysBetween(dtFinish, nowDate); + strPerfor = "已拖期"; + if (day != 0) { + day = (-1) * day; + } + } + } + + // 倒计时 + String strCountdown = "0天"; + if (day != 0) { + strCountdown = day + "天"; + } + objData = new Object[] { strTaskName, strPerfor, strCountdown, strFinishDate, strActualFinishDate, strDesc }; + modMilestone.addRow(objData); + } + } catch (ParseException e) { + e.printStackTrace(); + } + } + + /** + * getKeyTaskInfo::获取项目关键任务信息 + */ + private void getKeyTaskInfo() { + Object[] objData; + for (int i = 0; arrKeyTaskProp != null && i < arrKeyTaskProp.length; i++) { + String strProperty = arrKeyTaskProp[i]; + String[] arrProperties = strProperty.split("&&"); + + // 项目任务 + String strTaskName = arrProperties[0]; + + // 任务状态 + String strTaskStatus = arrProperties[2]; + + // 描述 + String strDesc = arrProperties[1].equals("N/A") ? "" : arrProperties[1]; + + // 计划开始时间 + String strStartDate = arrProperties[3].equals("N/A") ? "" : arrProperties[3]; + + // 计划完成时间 + String strFinishDate = arrProperties[5].equals("N/A") ? "" : arrProperties[5]; + + // 实际开始时间 + String strActualStartDate = arrProperties[4].equals("N/A") ? "" : arrProperties[4]; + + // 实际完成时间 + String strActualFinishDate = arrProperties[6].equals("N/A") ? "" : arrProperties[6]; + + // 完成情况 + String strPerfor = ""; + + Date dtActualFinish = null; + Date dtFinish = null; + try { + if (!strActualFinishDate.equals("")) { + dtActualFinish = format.parse(strActualFinishDate); + } + if (!strFinishDate.equals("")) { + dtFinish = format.parse(strFinishDate); + } + } catch (ParseException e) { + e.printStackTrace(); + } + + long day = 0; + Date nowDate = new Date(); + if (dtActualFinish != null) {// 完成 + if (dtFinish.after(dtActualFinish)) { + day = UtilApi.getDaysBetween(dtActualFinish, dtFinish); + if (day == 0) { + strPerfor = "准时完成"; + } else { + strPerfor = "提前完成"; + } + } else { + day = UtilApi.getDaysBetween(dtFinish, dtActualFinish); + if (day == 0) { + strPerfor = "准时完成"; + } else { + day = (-1) * day; + strPerfor = "拖期完成"; + } + } + } else {// 未完成 + if (dtFinish.after(nowDate)) { + day = UtilApi.getDaysBetween(nowDate, dtFinish); + if (day == 0) { + strPerfor = "已拖期"; + } else if (day <= 15) { + strPerfor = "有延期风险"; + } else { + strPerfor = "正常"; + } + } else { + day = UtilApi.getDaysBetween(dtFinish, nowDate); + strPerfor = "已拖期"; + if (day != 0) { + day = (-1) * day; + } + } + } + + // 倒计时 + String strCountDown = "0天"; + if (day != 0) { + strCountDown = day + "天"; + } + + objData = new Object[] { strTaskName, strPerfor, strCountDown, strTaskStatus, strDesc, strStartDate, strFinishDate, strActualStartDate, strActualFinishDate }; + modKeyTasks.addRow(objData); + } + } + + /** + * checkPrivilege:: 检查当前用户是否是项目管理员,如果不是则不能添加、移除项目成员 + * + * @return boolean 返回是否有权限 + */ + private boolean checkPrivilege() { + if (!vtProjectAdmin.contains(session.getUser())) { + MessageBox.post("您不是项目管理员,没有权限管理项目成员!", "警告", MessageBox.WARNING); + return false; + } + return true; + } + + /** + * loadProjectMember:: 加载项目人员信息 + */ + private void loadProjectMember() { + try { + if (schedule == null) { + return; + } + + hmUserRole = new HashMap(); + + vtProjectAdmin = new Vector(); + vtProjectMembers = new Vector(); + vtPrivilegedUsers = new Vector(); + List oldvtUser = null; + + TCComponent[] comps = schedule.getReferenceListProperty("project_list"); + if (comps != null && comps.length > 0) { + projectComp = (TCComponentProject) comps[0]; + } + if (projectComp == null) { + return; + } + oldvtUser = projectComp.getTeam(); + // (TCComponentUser[])projectComp.getTeam().get(1) + // System.out.println("oldvtUser = " + oldvtUser); + + TCComponent[] teamMembers = (TCComponent[]) oldvtUser.get(0); + TCComponentUser[] teamAdmin = (TCComponentUser[]) oldvtUser.get(1); + TCComponentUser[] privilegedUsers = (TCComponentUser[]) oldvtUser.get(2); + + for (int ix = 0; ix < teamAdmin.length; ix++) + vtProjectAdmin.add(teamAdmin[ix]); + + for (int ix = 0; ix < privilegedUsers.length; ix++) + vtPrivilegedUsers.add(privilegedUsers[ix]); + + for (int j = 0; j < teamMembers.length; j++) { + TCComponent compUser = teamMembers[j]; + // System.out.println("j = " + j + ":: compUser = " + compUser); + TCComponentUser user = null; + if (compUser instanceof TCComponentGroupMember) { + TCComponentGroupMember tmpGroupMember = (TCComponentGroupMember) compUser; + try { + user = tmpGroupMember.getUser(); + } catch (TCException e) { + e.printStackTrace(); + } + if (vtProjectMembers.contains(tmpGroupMember)) { + continue; + } + vtProjectMembers.add(tmpGroupMember); + hmUserRole.put(user, compUser.toString()); + } else if (compUser instanceof TCComponentGroup) { + TCComponentGroup group = (TCComponentGroup) compUser; + getGroup(group, false); + } + // else if (compUser instanceof TCComponentUser) { + // user = (TCComponentUser) compUser; + // if (vtProjectMembers.contains(user)) { + // continue; + // } + // vtProjectMembers.add(user); + // hmUserRole.put(user, compUser.toString()); + // } + } + + Object[] objData; + for (int i = 0; vtProjectAdmin != null && i < vtProjectAdmin.size(); i++) { + TCComponentUser user = vtProjectAdmin.get(i); + // System.out.println("user = " + user); + String strRoleName = "项目经理"; + String strGroupName = hmUserRole.get(user); + if (strGroupName == null) { + continue; + } + System.out.println("i = " + i + ":: strGroupName = " + strGroupName); + strGroupName = strGroupName.substring(0, strGroupName.lastIndexOf("/")); + strGroupName = strGroupName.replace(".", "/"); + + String strUserName = user.getProperty("user_name"); + String strPhone = user.getReferenceProperty("person").getProperty("PA10"); + objData = new Object[] { strRoleName, strGroupName, strUserName, strPhone }; + modMembers.addRow(objData); + } + + for (int i = 0; vtProjectMembers != null && i < vtProjectMembers.size(); i++) { + TCComponentUser user = vtProjectMembers.get(i).getUser(); + if (vtProjectAdmin.contains(user)) { + continue; + } + String strRoleName = "项目成员"; + String strGroupName = ""; + strGroupName = hmUserRole.get(user); + strGroupName = strGroupName.substring(0, strGroupName.lastIndexOf("/")); + strGroupName = strGroupName.replace(".", "/"); + + String strUserName = user.getProperty("user_name"); + String strPhone = user.getReferenceProperty("person").getProperty("PA10"); + + objData = new Object[] { strRoleName, strGroupName, strUserName, strPhone }; + modMembers.addRow(objData); + } + } catch (TCException e) { + e.printStackTrace(); + } + } + + /** + * getGroup::根据组得到User对象 + * + * @param TCComponentGroup + * group + */ + private void getGroup(TCComponentGroup group, boolean isAdmin) { + try { + TCComponent[] comprolegroup = group.getRolesAndGroups(); + for (int i = 0; i < comprolegroup.length; i++) { + TCComponent tccomponent = comprolegroup[i]; + if (tccomponent instanceof TCComponentRole) { + getRole((TCComponentRole) tccomponent, group, isAdmin); + continue; + } + if (tccomponent instanceof TCComponentGroup) { + getGroup((TCComponentGroup) tccomponent, isAdmin); + } + } + } catch (TCException e) { + e.printStackTrace(); + } + } + + /** + * getRole::根据role得到User + * + * @param TCComponentRole + * @param TCComponentGroup + */ + private void getRole(TCComponentRole tccomponentrole, TCComponentGroup tccomponentgroup, boolean isAdmin) { + try { + TCComponentGroupMember atccomponentgroupmember[] = tccomponentrole.getGroupMembers(tccomponentgroup); + for (int i = 0; i < atccomponentgroupmember.length; i++) { + TCComponentUser user = atccomponentgroupmember[i].getUser(); + + if (!isAdmin) { + if (vtProjectMembers.contains(atccomponentgroupmember[i])) { + continue; + } + vtProjectMembers.add(atccomponentgroupmember[i]); + } + hmUserRole.put(user, atccomponentgroupmember[i].toString()); + } + } catch (TCException e) { + e.printStackTrace(); + } + } + + /** + * AddMember:: 添加人员 + */ + private void AddMember() { + OrgTreePanel org = new OrgTreePanel(session); + final OrganizationTree orgTree = org.getOrgTree(); + orgTree.addMouseListener(new MouseAdapter() { + + public void mouseClicked(MouseEvent mouseevent) { + if (mouseevent.getClickCount() == 2) { + if (orgTree.getSelectedNode() != null && orgTree.getSelectedNode().isLeaf()) { + + String strUserInfo = orgTree.getSelectedNode().getUserObject().toString(); + System.out.println("strUserInfo = " + strUserInfo); + String strGroupName = ""; + String strRoleName = ""; + String strUserName = ""; + if (strUserInfo.contains("/")) { + strGroupName = strUserInfo.substring(0, strUserInfo.lastIndexOf("/")); + strGroupName = strGroupName.replace(".", "/"); + strUserName = strUserInfo.substring(strUserInfo.lastIndexOf("/") + 1); + } else { + Object[] obj = orgTree.getSelectedNode().getUserObjectPath(); + int objLen = obj.length - 2; + for (int i = 1; i < objLen; i++) { + if (strGroupName.length() == 0) { + strGroupName = obj[i].toString(); + } else { + strGroupName = strGroupName + "/" + obj[i]; + } + } + strRoleName = obj[obj.length - 2].toString(); + strUserName = obj[obj.length - 1].toString(); + strUserName = strUserName.substring(0, strUserName.indexOf("(")).trim(); + } + + String strPhone = ""; + try { + String[] attr = new String[1]; + String[] values = new String[1]; + attr[0] = "PersonName"; + values[0] = strUserName; + TCComponent[] comp = UtilApi.searchComponentCollection(session, "__Cust_findUser", attr, values); + TCComponentUser userComp = null; + if (comp != null && comp.length > 0) { + userComp = (TCComponentUser) comp[0]; + strPhone = userComp.getReferenceProperty("person").getProperty("PA10"); + if (!vtProjectMembers.contains(userComp)) { + Object[] objData = new Object[] { "项目成员", strGroupName + "/" + strRoleName, strUserName, strPhone }; + modMembers.addRow(objData); + comp = UtilApi.searchComponentCollection(session, "__Cust_GroupMember", new String[] { "user_name", "Group", "Role" }, + new String[] { strUserName, strGroupName, strRoleName }); + if (comp != null && comp.length > 0) { + vtProjectMembers.add((TCComponentGroupMember) comp[0]); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + dlg.setVisible(false); + dlg = null; + } + } + } + }); + + Point point = tblProjectMembers.getLocationOnScreen(); + dlg = new JDialog(); + dlg.setTitle("选择人员"); + dlg.add(org); + dlg.setLocation(point.x + 50, point.y - 50); + dlg.setPreferredSize(new Dimension(300, 400)); + dlg.pack(); + dlg.setVisible(true); + } + + /** + * removeMember:: 移除人员 + */ + private void removeMember() { + try { + int[] rows = tblProjectMembers.getSelectedRows(); + if (rows == null || rows.length == 0) { + MessageBox.post("请选择要移除的行!", "提示", MessageBox.WARNING); + return; + } + + for (int i = 0; i < rows.length; i++) { + String strRoleName = tblProjectMembers.getValueAt(rows[i], 0).toString(); + String strUserName = tblProjectMembers.getValueAt(rows[i], 2).toString(); + if (strRoleName.equals("项目经理")) { + vtProjectAdmin.remove(rows[i]); + } else if (strRoleName.equals("项目成员")) { + for (int j = vtProjectMembers.size() - 1; j >= 0; j--) { + if (vtProjectMembers.get(j).getProperty("user_name").equals(strUserName)) { + vtProjectMembers.remove(j); + } + } + } + modMembers.removeRow(rows[i]); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * updateProjectMember::更新项目用户 + */ + private void updateProjectMember() { + if (vtProjectMembers == null || vtProjectMembers.size() == 0) { + return; + } + TCComponent[] comp = new TCComponent[vtProjectMembers.size()]; + vtProjectMembers.toArray(comp); + // TCComponentUser[] privilegedUsers = new TCComponentUser[comp.length]; + + // for (int j = 0; j < comp.length; j++) { + // if (comp[j] instanceof TCComponentGroupMember) { + // TCComponentGroupMember tmpGroupMember = (TCComponentGroupMember) + // comp[j]; + // try { + // privilegedUsers[j] = tmpGroupMember.getUser(); + // } catch (TCException e) { + // privilegedUsers[j] = null; + // e.printStackTrace(); + // } + // } else { + // privilegedUsers[j] = (TCComponentUser) comp[j]; + // } + // } + try { + projectComp.modifyTeam(comp, vtProjectAdmin.toArray(new TCComponentUser[vtProjectAdmin.size()]), vtPrivilegedUsers.toArray(new TCComponentUser[vtPrivilegedUsers.size()])); + } catch (TCException e) { + e.printStackTrace(); + } + } + + @SuppressWarnings("deprecation") + private DateButton newDateButton() { + DateButton db = new PropertyDateButton() { + + private static final long serialVersionUID = 1L; + + @Override + public void setEnabled(boolean f) { + super.setEnabled(false); + } + }; + return db; + } + + /** + * clearData::清除表格中的数据 + */ + private void clearData() { + for (int row = tblProjectKeyTasks.getRowCount() - 1; row >= 0; row--) { + modKeyTasks.removeRow(row); + } + for (int row = tblProjectMembers.getRowCount() - 1; row >= 0; row--) { + modMembers.removeRow(row); + } + for (int row = tblProjectMilestone.getRowCount() - 1; row >= 0; row--) { + modMilestone.removeRow(row); + } + arrMilestoneTaskProp = null; + arrKeyTaskProp = null; + } + + /** + * getBasicInfo::从项目启动通知版本表单获取基本信息 + * + * @return boolean + **/ + @SuppressWarnings("deprecation") + private boolean getBasicInfo() { + System.out.println("--从项目启动通知版本表单获取基本信息--Start"); + try { + if (schedule == null) { + MessageBox.post("根据该表单未找到时间表对象,请检查!", "警告", MessageBox.WARNING); + return false; + } + // String strScheduleName = schedule.getProperty("object_name"); + // if (strScheduleName.contains("【") && + // strScheduleName.contains("】")) { + // strProjectNum = + // strScheduleName.substring(strScheduleName.indexOf("【") + 1, + // strScheduleName.indexOf("】")); + // } + // + // String[] attr = new String[1]; + // String[] values = new String[1]; + // TCTextService textService = session.getTextService(); + // attr[0] = textService.getTextValue("ProjectID"); + // values[0] = strProjectNum; + // + // TCComponent[] components = + // UtilApi.searchComponentCollection(session, "Projects...", attr, + // values); + // if (components == null || components.length == 0) { + // MessageBox.post("尚未创建当前项目号的项目!", "提示", MessageBox.WARNING); + // return false; + // } + // + // // 获取时间表里指派的项目 + // TCComponent[] comps = + // schedule.getReferenceListProperty("project_list"); + // if (comps != null && comps.length > 0) { + // for (int i = 0; i < comps.length; i++) { + // if (comps[i] instanceof TCComponentProject + // && comps[i].getProperty("project_id").equals(strProjectNum)) { + // projectComp = (TCComponentProject) comps[i]; + // break; + // } + // } + // } + if (projectComp == null) { + MessageBox.post("该项目尚未指派到该时间表中,无法获取相关信息!", "提示", MessageBox.WARNING); + return false; + } + + // 获取项目编号 + String strProjectNum = projectComp.getProperty("project_id"); + // 设置属性值 + String strDocId = new StringBuffer(strProjectNum).append("_XMQD").toString(); + TCComponentItemType itemType = (TCComponentItemType) session.getTypeComponent("Item"); + TCComponentItem docItem = itemType.find(strDocId); + TCComponentForm docForm = null; + if (docItem != null) { + AIFComponentContext[] context = docItem.getLatestItemRevision().getRelated("IMAN_master_form_rev"); + if (context != null && context.length > 0) { + for (int index = 0; index < context.length; index++) { + if (context[index].getComponent() instanceof TCComponentForm) { + docForm = (TCComponentForm) context[index].getComponent(); + break; + } + } + } + } + + if (docForm == null) { + MessageBox.post("未获取项目启动通知,无法获取相关信息!", "提示", MessageBox.WARNING); + return false; + } else { + ysr8_QuotationNo.setText(docForm.getProperty("ysr8_QuotationNo")); + ysr8_ProjectCode.setText(docForm.getProperty("ysr8_ProjectCode")); + ysr8_ProjectName.setText(docForm.getProperty("ysr8_ProjectName")); + ysr8_OrderManufacturer.setText(docForm.getProperty("ysr8_OrderManufacturer")); + ysr8_CustomerName.setText(docForm.getProperty("ysr8_CustomerName")); + ysr8_ProjectCategory.setText(docForm.getProperty("ysr8_ProjectCategory")); + ysr8_Factory.setText(docForm.getProperty("ysr8_Factory")); + ysr8_Product.setText(docForm.getProperty("ysr8_Product")); + ysr8_Use.setText(docForm.getProperty("ysr8_Use")); + ysr8_ProjectContent.setText(docForm.getProperty("ysr8_ProjectContent")); + + ysr8_Sales.setText(docForm.getProperty("ysr8_Sales")); + ysr8_ProjectManager.setText(docForm.getProperty("ysr8_ProjectManager")); + ysr8_Planner.setText(docForm.getProperty("ysr8_Planner")); + // HUBING 20180615 + ysr8_DesignDirector.setText(docForm.getProperty("ysr8_DesignDirector")); + ysr8_ElectricDirector.setText(docForm.getProperty("ysr8_ElectricDirector")); + + ysr8_ReceiveDate.setDate(docForm.getDateProperty("ysr8_ReceiveDate")); + ysr8_StartDate.setDate(docForm.getDateProperty("ysr8_StartDate")); + ysr8_ProductionDate.setDate(docForm.getDateProperty("ysr8_ProductionDate")); + ysr8_PlanAcceptance.setDate(docForm.getDateProperty("ysr8_FinalAcceptance")); + } + } catch (TCException e) { + // Auto-generated constructor stub + e.printStackTrace(); + } + System.out.println("--从项目启动通知版本表单获取基本信息--End"); + return true; + } +} diff --git a/src/cn/com/teamcenter/rac/form/YSR8_QuotationRevisionMaster.java b/src/cn/com/teamcenter/rac/form/YSR8_QuotationRevisionMaster.java new file mode 100644 index 0000000..4a4aa9f --- /dev/null +++ b/src/cn/com/teamcenter/rac/form/YSR8_QuotationRevisionMaster.java @@ -0,0 +1,1211 @@ +package cn.com.teamcenter.rac.form; + +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Desktop; +import java.awt.Dimension; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.io.FileWriter; +import java.net.URI; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Hashtable; +import java.util.LinkedHashMap; +import java.util.Vector; +import java.util.logging.Logger; + +import javax.swing.BorderFactory; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JProgressBar; +import javax.swing.JScrollPane; +import javax.swing.JSplitPane; +import javax.swing.JTabbedPane; +import javax.swing.JTextArea; +import javax.swing.JViewport; +import javax.swing.table.JTableHeader; +import javax.swing.text.JTextComponent; + +import com.teamcenter.rac.aif.kernel.AIFComponentContext; +import com.teamcenter.rac.aifrcp.AIFUtility; +//import com.teamcenter.rac.common.lov.LOVComboBox; +import com.teamcenter.rac.conditionalproperties.FormFieldManager; +import com.teamcenter.rac.conditionalproperties.WidgetTypeAdapter; +import com.teamcenter.rac.kernel.ListOfValuesInfo; +import com.teamcenter.rac.kernel.TCComponentForm; +import com.teamcenter.rac.kernel.TCComponentItem; +import com.teamcenter.rac.kernel.TCComponentItemType; +import com.teamcenter.rac.kernel.TCComponentListOfValues; +import com.teamcenter.rac.kernel.TCComponentListOfValuesType; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCFormProperty; +import com.teamcenter.rac.kernel.TCProperty; +import com.teamcenter.rac.kernel.TCPropertyDescriptor; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.kernel.TCUserService; +import com.teamcenter.rac.stylesheet.AbstractPropertyComponent; +import com.teamcenter.rac.stylesheet.AbstractRendering; +import com.teamcenter.rac.stylesheet.InterfacePropertyComponent; +import com.teamcenter.rac.stylesheet.InterfaceRendererEvent; +import com.teamcenter.rac.stylesheet.PropertyArray; +import com.teamcenter.rac.stylesheet.PropertyComment; +import com.teamcenter.rac.stylesheet.PropertyLogicalPanel; +import com.teamcenter.rac.stylesheet.PropertyObjectLink; +import com.teamcenter.rac.util.DateButton; +import com.teamcenter.rac.util.MessageBox; +import com.teamcenter.rac.util.Registry; +import com.teamcenter.rac.util.iTextField; + +@SuppressWarnings("deprecation") +public class YSR8_QuotationRevisionMaster extends AbstractRendering { + + private static final long serialVersionUID = 1L; + + private TCSession session; + private iTextField ItemID; //编号 + private iTextField ysr8_Sales; //销售担当 + private iTextField ysr8_OrderManufacturer; //订货厂家 + private iTextField ysr8_CustomerName; //最终用户 + private iTextField ysr8_QuotationLevel; //报价水平 + private iTextField ysr8_Contact; //联系人 + private iTextField ysr8_ContactDept; //所属部门 + private iTextField ysr8_ContactPosition; //职务 + private iTextField ysr8_ContactPhone; //联系电话 + + private DateButton ysr8_RequestedDate; //希望答复日期 + private DateButton ysr8_SysPlanDate; //报价完成时限 + + private iTextField ysr8_ProjectManager; //项目经理 +// private iTextField ysr8_ProjectLevel; //报价等级 + private JComboBox ysr8_ProjectLevel; + private iTextField ysr8_Ratio; //系数 + + private iTextField ysr8_SytemName; //系统名称 +// private iTextField ysr8_ProjectDes; //输入状态 + private JComboBox ysr8_QuotationStatus; //报价输入状态 + private JComboBox ysr8_Product; //产品 + private JComboBox ysr8_use; //用途 + private DateButton ysr8_EstimatedDate; //预计启动时间 + private iTextField ysr8_Possibility; //可能性 + private DateButton ysr8_ReceiveDate; //受理时间 + private DateButton ysr8_FinishedDate; //报价完成时限 +// private DateButton date_released; //报价完成时限 + private iTextField ysr8_OfferAmount; //报价金额 + private JTextArea ysr8_RobotModelAndNum; //机器人型号、数量 + private JTextArea ysr8_QuotationRemarks; //备注 + +// private JComboBox ysr8_QuotationState; //报价状态//lidy20180925增加属性 +// private String[] ysr8_Qutation_LOV; +// private String[] ysr8_Qutation2_LOV; +// private String[] ysr8_QuotationStatus_lov; + private HashMap> lovMap = new HashMap<>(); +// private LinkedHashMap lovQuotation2; + + private JButton jBPM = new JButton("BPM报价单"); + + TCComponentForm componentForm = null; + TCComponentItem componentItem = null; + private VectorallComponents = new Vector(); + private TCFormProperty[] formProperties; + private Hashtable indices = new Hashtable(); + + public YSR8_QuotationRevisionMaster(TCComponentForm componentForm) throws Exception { + super(componentForm); + this.componentForm = componentForm; + this.session = componentForm.getSession(); + String formName = componentForm.getProperty("object_name"); + try { + TCComponentItemType imancomponentitemtype = (TCComponentItemType) session.getTypeService().getTypeComponent("Item"); + componentItem = imancomponentitemtype.find(formName.substring(0, formName.length()-2)); +// System.out.println(formName.substring(0, formName.length()-2)); + } catch (TCException e) { + e.printStackTrace(); + } + addUIComponents(); + initUI(); + setName(); + loadRendering(); + } + + private void initUI() { + + JPanel paneMain = new JPanel(new GridBagLayout()); + + JPanel paneTop = new JPanel(new GridBagLayout()); + paneTop.setBorder(BorderFactory.createTitledBorder("基础信息")); + GridBagConstraints g4 = new GridBagConstraints(); + g4.insets = new Insets(5, 5, 5, 5); + g4.anchor = GridBagConstraints.WEST; + g4.fill = GridBagConstraints.HORIZONTAL; + + g4.gridx = 0; + g4.gridy = 0; + g4.gridwidth=1; + paneTop.add(new JLabel("编号:  "), g4); + + g4.gridx = 1; + g4.gridy = 0; + g4.gridwidth=3; + paneTop.add(ItemID, g4); + + g4.gridx = 4; + g4.gridy = 0; + g4.gridwidth=1; + paneTop.add(new JLabel("销售担当:"), g4); + + g4.gridx = 5; + g4.gridy = 0; + g4.gridwidth=3; + paneTop.add(ysr8_Sales, g4); + + g4.gridx=6; + g4.weightx=1; + paneTop.add(new JLabel(""),g4); + g4.weightx=0; + + g4.gridx = 0; + g4.gridy = 1; + g4.gridwidth=1; + paneTop.add(new JLabel("订货厂家:  "), g4); + + g4.gridx = 1; + g4.gridy = 1; + g4.gridwidth=3; + paneTop.add(ysr8_OrderManufacturer, g4); + + g4.gridx = 4; + g4.gridy = 1; + g4.gridwidth=1; + paneTop.add(new JLabel("最终用户:"), g4); + + g4.gridx = 5; + g4.gridy = 1; + g4.gridwidth=3; + paneTop.add(ysr8_CustomerName, g4); + + g4.gridx = 0; + g4.gridy = 2; + g4.gridwidth=1; + paneTop.add(new JLabel("报价水平:  "), g4); + + g4.gridx = 1; + g4.gridy = 2; + g4.gridwidth=1; + paneTop.add(ysr8_QuotationLevel, g4); + + g4.gridx = 2; + g4.gridy = 2; + g4.gridwidth=2; + paneTop.add(new JLabel("(详细,概略,参考,其他)"), g4); + + g4.gridx = 4; + g4.gridy = 2; + g4.gridwidth=1; + paneTop.add(new JLabel("受理时间:"), g4);// + + g4.gridx = 5; + g4.gridwidth=1; + paneTop.add(ysr8_ReceiveDate, g4); + + g4.gridx = 6; + g4.gridy = 2; + g4.gridwidth=1; + paneTop.add(new JLabel(" 希望答复日期: "), g4); + + g4.gridx = 7; + g4.gridy = 2; + g4.gridwidth=1; + paneTop.add(ysr8_RequestedDate, g4); + + g4.gridx = 0; + g4.gridy = 3; + g4.gridwidth=1; + paneTop.add(new JLabel("联系人:  "), g4); + + g4.gridx = 1; + g4.gridy = 3; + g4.gridwidth=1; + paneTop.add(ysr8_Contact, g4); + + g4.gridx = 2; + g4.gridy = 3; + g4.gridwidth=1; + paneTop.add(new JLabel("所属部门:"), g4); + + g4.gridx = 3; + g4.gridy = 3; + paneTop.add(ysr8_ContactDept, g4); + + g4.gridx = 4; + g4.gridy = 3; + g4.gridwidth=1; + paneTop.add(new JLabel("职务:"), g4); + + g4.gridx = 5; + g4.gridy = 3; + g4.gridwidth=1; + paneTop.add(ysr8_ContactPosition, g4); + + g4.gridx = 6; + g4.gridy = 3; + paneTop.add(new JLabel(" 联系电话:"), g4); + + g4.gridx = 7; + g4.gridy = 3; + g4.gridwidth=1; + paneTop.add(ysr8_ContactPhone, g4); + + JPanel paneCenter = new JPanel(new GridBagLayout()); + paneCenter.setBorder(BorderFactory.createTitledBorder("系统科科长填写")); + g4.gridx=0; + g4.gridy=0; + g4.gridwidth=1; + paneCenter.add(new JLabel("项目经理:  "),g4); + g4.gridx=1; + g4.gridwidth=2; + paneCenter.add(ysr8_ProjectManager,g4); + g4.gridwidth=1; + g4.gridx=3; + JButton pmButton = new JButton("..."); + pmButton.setPreferredSize(new Dimension(30, 20)); + paneCenter.add(pmButton,g4); + g4.gridwidth=1; + g4.gridx=4; + paneCenter.add(new JLabel("报价完成时限(系统科):"),g4); + g4.gridwidth=1; + g4.gridx=5; + paneCenter.add( ysr8_SysPlanDate,g4); + g4.gridx=6; + g4.gridwidth=2; + paneCenter.add(new JLabel("      "),g4); +// g4.gridx=6; +// paneCenter.add(new JLabel("   "),g4); + + g4.gridx=7; + g4.weightx=1; + g4.gridwidth=1; + paneCenter.add(new JLabel(""),g4); + + g4.gridy=1; + g4.gridx=0; + paneCenter.add(new JLabel("报价等级:  "),g4); + g4.gridx=1; + g4.gridwidth=3; + paneCenter.add(ysr8_ProjectLevel,g4); + g4.gridwidth=1; + g4.gridx=4; + paneCenter.add(new JLabel("系数:"),g4); + g4.gridx=5; + paneCenter.add(ysr8_Ratio,g4); + g4.gridx=6;// + paneCenter.add(new JLabel("          "),g4); +// g4.gridx=6; +// paneCenter.add( ysr8_QuotationState,g4); + + final GCSelectionUserCommand selectionUserCmd = new GCSelectionUserCommand(AIFUtility.getCurrentApplication().getDesktop(), session); + pmButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent actionevent) { + selectionUserCmd.setContextBean(ysr8_ProjectManager); + try { +// dialog.setVisible(false); + selectionUserCmd.executeModal(); +// dialog.setVisible(true); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); +// JPanel paneCenter = new JPanel(new GridBagLayout()); +// paneCenter.setBorder(BorderFactory.createTitledBorder("技术部 ")); +// GridBagConstraints g3 = new GridBagConstraints(); +// g3.insets = new Insets(5, 5, 5, 5); +// g3.anchor = GridBagConstraints.WEST; +// g3.fill = GridBagConstraints.HORIZONTAL; +// +// g3.gridx = 0; +// g3.gridy = 0; +// g4.gridwidth=1; +// paneCenter.add(new JLabel("项目经理:"), g3); +// +// g3.gridx = 1; +// g3.gridy = 0; +// g3.gridwidth=3; +//// paneCenter.add(ysr8_ProjectManager, g3); +// +// JPanel panelPM = new JPanel(new GridBagLayout()); +// GridBagConstraints g16 = new GridBagConstraints(); +// g16.insets = new Insets(0, 5, 0, 5); +// g16.anchor = GridBagConstraints.WEST; +// g16.fill = GridBagConstraints.HORIZONTAL; +// g16.gridx = 0; +// g16.gridy = 0; +// g16.gridwidth=2; +// panelPM.add(ysr8_ProjectManager, g16); +// g16.gridx = 1; +// g16.gridy = 0; +// g16.gridwidth=1; +// JButton iconLabel6 = new JButton("..."); +// panelPM.add(iconLabel6, g16); +// paneCenter.add(panelPM, g3); +// +// g3.gridx = 0; +// g3.gridy = 1; +// g4.gridwidth=1; +// paneCenter.add(new JLabel("报价等级:"), g3); +// +// g3.gridx = 1; +// g3.gridy = 1; +// g3.gridwidth=2; +// paneCenter.add(ysr8_ProjectLevel, g3); +// +// g3.gridx = 3; +// g3.gridy = 1; +// g4.gridwidth=1; +// paneCenter.add(new JLabel("报价完成时限(系统科):"), g3); +// +// g3.gridx = 4; +// g3.gridy = 1; +// g4.gridwidth=1; +// paneCenter.add(ysr8_SysPlanDate, g3); + + JPanel panelBotton = new JPanel(new GridBagLayout()); + panelBotton.setBorder(BorderFactory.createTitledBorder("项目经理填写")); + GridBagConstraints g2 = new GridBagConstraints(); + g2.insets = new Insets(5, 5, 5, 5); + g2.anchor = GridBagConstraints.WEST; + g2.fill = GridBagConstraints.HORIZONTAL; + + g2.gridy = 0; + g2.gridx = 0; + g2.gridwidth=1; + panelBotton.add(new JLabel("系统名称:"), g2); + + g2.gridx = 1; + g2.gridwidth=3; + panelBotton.add(ysr8_SytemName, g2); + + g2.gridx = 4; + g2.gridwidth=1; +// panelBotton.add(new JLabel("  输入状态:"), g2);//ysr8_EstimatedDate + panelBotton.add(new JLabel("机器人型号、数量:"), g2); + + + g2.gridx = 5; + g2.gridwidth=6; + g2.gridheight=3; + panelBotton.add(ysr8_RobotModelAndNum, g2); +// panelBotton.add(ysr8_QuotationStatus, g2); + + g2.gridx=6; + g2.weightx=1; + panelBotton.add(new JLabel(""),g2); + g2.weightx=0; + +// g2.gridy = 1; +// g2.gridx = 0; +// g2.gridwidth=1; +// panelBotton.add(new JLabel("受理时间:"), g2);// +// +// g2.gridx = 1; +// g2.gridwidth=1; +// panelBotton.add(ysr8_ReceiveDate, g2); + + g2.gridy = 1; + g2.gridx = 0; + g2.gridwidth=1; + g2.gridheight=1; +// panelBotton.add(new JLabel("完成时间:"), g2); + panelBotton.add(new JLabel("方案报价状态:"), g2); + + g2.gridx = 1; + g2.gridwidth=3; +// panelBotton.add(ysr8_FinishedDate, g2); + panelBotton.add(ysr8_QuotationStatus, g2); +// g2.gridx = 4; +// g2.gridwidth=1; +// panelBotton.add(new JLabel(" "), g2); +// g2.gridx = 5; +// g2.gridwidth=1; +// panelBotton.add(new JLabel(" "), g2); + + g2.gridy = 5; + g2.gridx = 0; + g2.gridwidth=1; + g2.gridheight=1; + panelBotton.add(new JLabel("产品:"), g2); + + g2.gridx = 1; + g2.gridwidth=3; + panelBotton.add(ysr8_Product, g2); + + g2.gridx = 4; + g2.gridwidth=1; +// g2.gridheight=1; + panelBotton.add(new JLabel("用途:"), g2); + + g2.gridx = 5; + g2.gridwidth=6; + panelBotton.add(ysr8_use, g2); + + g2.gridy = 6; + g2.gridx = 0; + g2.gridwidth=1; + panelBotton.add(new JLabel("可能性:"), g2); + + g2.gridx = 1; + g2.gridwidth=2; + panelBotton.add(ysr8_Possibility, g2); + + g2.gridx = 3; + g2.gridwidth=1; + panelBotton.add(new JLabel("% "), g2); + g2.gridx = 4; + g2.gridwidth=1; + panelBotton.add(new JLabel("预计启动时间:"), g2); + + g2.gridx = 5; + g2.gridwidth=6; + panelBotton.add(ysr8_EstimatedDate, g2); + + g2.gridy = 7; + g2.gridx = 0; + g2.gridwidth=1; + panelBotton.add(new JLabel("报价金额(RMB/元):"), g2); + + g2.gridx = 1; + g2.gridwidth=3; + panelBotton.add(ysr8_OfferAmount, g2); + + g2.gridx = 4; + g2.gridwidth=1; + panelBotton.add(new JLabel("完成时间:"), g2); + + g2.gridx = 5; + g2.gridwidth=6; + panelBotton.add(ysr8_FinishedDate, g2); +// panelBotton.setBackground(Color.WHITE); + + g2.gridy = 8; + g2.gridx = 0; + g2.gridwidth=1; + panelBotton.add(new JLabel("备注:"), g2);//TODO 备注 + + g2.gridx = 1; + g2.gridwidth=5; + g2.gridheight=2; + panelBotton.add(ysr8_QuotationRemarks, g2); + + + GridBagConstraints g = new GridBagConstraints(); + g.insets = new Insets(5, 5, 5, 5); + g.anchor = GridBagConstraints.WEST; + g.fill = GridBagConstraints.BOTH; + g.gridx=0; + g.gridy=0; + g.weightx=0; + g.weighty=0; + g.gridwidth=2; + paneMain.add( paneTop,g); + g.gridx=1; + g.weightx=1; + paneMain.add(new JLabel(""),g); + g.weightx=0; + + + g.gridx=0; + g.gridy++; + paneMain.add( paneCenter,g); + g.gridy++; + /*JSeparator jSep = new JSeparator(); + jSep.setOrientation(JSeparator.HORIZONTAL); + paneMain.add("3.1.left.center", jSep );*/ + paneMain.add( panelBotton,g); + g.gridy++; + g.gridwidth=1; + paneMain.add(jBPM,g); + g.gridy++; + g.weighty=1; + paneMain.add(new JLabel(""),g); + + jBPM.addActionListener(new ActionListener(){ + + @Override + public void actionPerformed(ActionEvent arg0) { + try { + final String urlStr = componentForm.getProperty("ysr8_BPMURL_BJWT"); + if(urlStr != null && !urlStr.equals("")){ +// String str = "cmd /c start iexplore "+urlStr; + try { + URI uri = new URI(urlStr); + Desktop.getDesktop().browse(uri); + } catch (Exception e) { + e.printStackTrace(); + } +// IWorkbenchWindow localIWorkbenchWindow = AIFUtility.getActiveDesktop().getDesktopWindow(); +// final IWorkbenchPage workbenchpage = localIWorkbenchWindow.getActivePage(); +// final BrowserView viewDK = (BrowserView)workbenchpage.findView("com.teamcenter.rac.aifrcp.BrowserView"); +// if(viewDK == null){ +// Display.getDefault().syncExec(new Runnable() { +// public void run() { +// try { +// ((BrowserView) workbenchpage.showView("com.teamcenter.rac.aifrcp.BrowserView")).setUrl(urlStr); +//// viewDK.setUrl(urlStr); +// } catch (PartInitException e) { +// e.printStackTrace(); +// } +// } +// }); +// }else{ +// Display.getDefault().syncExec(new Runnable() { +// +// @Override +// public void run() { +// viewDK.setUrl(urlStr); +// } +// +// }); +// } + } + } catch (TCException e1) { + e1.printStackTrace(); + } + } + }); + + try { + AIFComponentContext[] YSR8_QuotationRevisions = componentForm.whereReferencedByTypeRelation(new String[] {"YSR8_QuotationRevision"}, new String[] {"IMAN_master_form"}); + if(YSR8_QuotationRevisions != null){ + ItemID.setText(YSR8_QuotationRevisions[0].getComponent().getProperty("item_id")); + } + } catch (TCException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + + JScrollPane scPanel = new JScrollPane(); + scPanel.setViewportView(paneMain); + setLayout(new BorderLayout()); + add(BorderLayout.CENTER, scPanel); + + } + private void addUIComponents() { + + ItemID = new iTextField(); + ItemID.setEditable(false); + ItemID.setEnabled(false); + ysr8_Sales = new iTextField(); + ysr8_Sales.setEditable(false); + ysr8_Sales.setEnabled(false); + ysr8_OrderManufacturer = new iTextField(); + ysr8_OrderManufacturer.setEditable(false); + ysr8_OrderManufacturer.setEnabled(false); + ysr8_CustomerName = new iTextField(); + ysr8_CustomerName.setEditable(false); + ysr8_CustomerName.setEnabled(false); + ysr8_QuotationLevel = new iTextField(9); + ysr8_QuotationLevel.setEditable(false); + ysr8_QuotationLevel.setEnabled(false); + ysr8_Contact = new iTextField(); + ysr8_Contact.setEditable(false); + ysr8_Contact.setEnabled(false); + ysr8_ContactDept = new iTextField(9); + ysr8_ContactDept.setEditable(false); + ysr8_ContactDept.setEnabled(false); + ysr8_ContactPosition = new iTextField(); + ysr8_ContactPosition.setEditable(false); + ysr8_ContactPosition.setEnabled(false); + ysr8_ContactPhone = new iTextField(); + ysr8_ContactPhone.setEditable(false); + ysr8_ContactPhone.setEnabled(false); + + ysr8_ProjectManager = new iTextField(20); + ysr8_ProjectManager.setEditable(false); + ysr8_ProjectManager.setEnabled(false); + ysr8_Ratio = new iTextField(); + ysr8_Ratio.setEditable(true); + ysr8_Ratio.setEnabled(true); +// ysr8_ProjectLevel = new iTextField(40); + lovMap.put("ysr8_ProjectLevel", getLOV("ysr8_Qutation_LOV")); + String[] ysr8_Qutation_LOV = new String[lovMap.get("ysr8_ProjectLevel").size()]; + int i = 0; + for(String v : lovMap.get("ysr8_ProjectLevel").keySet()) { + ysr8_Qutation_LOV[i] = v; + i++; + } + ysr8_ProjectLevel = new JComboBox(ysr8_Qutation_LOV); + ysr8_ProjectLevel.setPreferredSize(new Dimension(233, 23)); +// lovMap.put("ysr8_ProjectLevel", getLOV("ysr8_Qutation_LOV")); + +// lovMap.put("ysr8_QuotationState", getLOV("ysr8_Qutation2_LOV")); +// ysr8_Qutation2_LOV = new String[lovMap.get("ysr8_QuotationState").size()]; +// i = 0; +// for(String v : lovMap.get("ysr8_QuotationState").values()) { +// ysr8_Qutation2_LOV[i] = v; +// i++; +// } +// ysr8_QuotationState = new JComboBox(ysr8_Qutation2_LOV); +// ysr8_QuotationState.setPreferredSize(new Dimension(100, 23)); + int g1 = 22; + ysr8_SytemName = new iTextField(g1); +// ysr8_SytemName.setBackground(Color.WHITE); + ysr8_EstimatedDate = new DateButton(null, "yyyy-MM-dd", false, false, false); + ysr8_Possibility = new iTextField(12); +// ysr8_Possibility.setBackground(Color.WHITE); +// ysr8_ProjectDes = new iTextField(31); + String[] ysr8_QuotationStatus_lov = session.getPreferenceService().getStringValues("ysr8_QuotationStatus_lov"); + String[] ysr8_QuotationStatus_lov1 = new String[ysr8_QuotationStatus_lov.length+1]; + ysr8_QuotationStatus_lov1[0] = ""; + for(int i1=1; i1(ysr8_QuotationStatus_lov1); + try { + String ysr8_QuotationStatusVal = componentForm.getProperty("ysr8_QuotationStatus"); + System.out.println("ysr8_QuotationStatusVal:"+ysr8_QuotationStatusVal); + ysr8_QuotationStatus.setSelectedItem(ysr8_QuotationStatusVal); + } catch (TCException e) { + e.printStackTrace(); + } + ysr8_QuotationStatus.setPreferredSize(new Dimension(208, 23)); + ysr8_QuotationStatus.setEditable(true); + ysr8_QuotationStatus.setEnabled(true); + + lovMap.put("ysr8_Product", getLOV("ysr8_Product_LOV")); + String[] ysr8_Product_LOV = new String[lovMap.get("ysr8_Product").size()]; + i = 0; + for(String v : lovMap.get("ysr8_Product").keySet()) { + ysr8_Product_LOV[i] = v; + i++; + } + ysr8_Product = new JComboBox(ysr8_Product_LOV); + ysr8_Product.setPreferredSize(new Dimension(208, 23)); + + lovMap.put("ysr8_use", getLOV("ysr8_Use_LOV")); + String[] ysr8_Use_LOV = new String[lovMap.get("ysr8_use").size()]; + i = 0; + for(String v : lovMap.get("ysr8_use").keySet()) { + ysr8_Use_LOV[i] = v; + i++; + } + ysr8_use = new JComboBox(ysr8_Use_LOV); + ysr8_use.setPreferredSize(new Dimension(208, 23)); + + ysr8_RequestedDate = newDateButton(); + ysr8_SysPlanDate = new DateButton(null, "yyyy-MM-dd", false, false, false); + ysr8_ReceiveDate = newDateButton(); +// ysr8_FinishedDate = new DateButton(null, "yyyy-MM-dd", false, false, false); + ysr8_FinishedDate = newDateButton(); + + ysr8_OfferAmount = new iTextField(g1); + ysr8_OfferAmount.setEditable(false); + ysr8_OfferAmount.setEnabled(false); +// ysr8_OfferAmount.setBackground(Color.WHITE); + ysr8_RobotModelAndNum = new JTextArea(5, 26); +// ysr8_RobotModelAndNum = new iTextArea(); + ysr8_RobotModelAndNum.setRows(3); + ysr8_RobotModelAndNum.setBorder(BorderFactory.createLoweredBevelBorder()); + ysr8_RobotModelAndNum.setLineWrap(true); + ysr8_RobotModelAndNum.setWrapStyleWord(true); + ysr8_RobotModelAndNum.setOpaque(true); +// ysr8_RobotModelAndNum.setBackground(ysr8_Ratio.getBackground()); +// System.out.println("Color:"+ysr8_Ratio.getBackground()); + ysr8_QuotationRemarks = new JTextArea(5, 60);//TODO + ysr8_QuotationRemarks.setRows(3); + ysr8_QuotationRemarks.setBorder(BorderFactory.createLoweredBevelBorder()); + ysr8_QuotationRemarks.setLineWrap(true); + ysr8_QuotationRemarks.setWrapStyleWord(true); + ysr8_QuotationRemarks.setOpaque(true); + + allComponents.add( ysr8_Sales ); + allComponents.add( ysr8_OrderManufacturer ); + allComponents.add( ysr8_CustomerName ); + allComponents.add( ysr8_QuotationLevel ); + allComponents.add( ysr8_Contact ); + allComponents.add( ysr8_ContactDept ); + allComponents.add( ysr8_ContactPosition ); + allComponents.add( ysr8_ContactPhone ); + allComponents.add( ysr8_ProjectManager ); + allComponents.add( ysr8_Ratio ); + allComponents.add( ysr8_ProjectLevel ); +// allComponents.add( ysr8_QuotationState ); + allComponents.add( ysr8_SytemName ); + allComponents.add( ysr8_RequestedDate ); + allComponents.add( ysr8_SysPlanDate ); + allComponents.add( ysr8_ReceiveDate ); + allComponents.add( ysr8_FinishedDate ); + allComponents.add( ysr8_OfferAmount ); + allComponents.add( ysr8_RobotModelAndNum ); +// allComponents.add( ysr8_QuotationRemarks ); +// allComponents.add( ysr8_QuotationStatus ); +// allComponents.add( ysr8_EstimatedDate ); +// allComponents.add( ysr8_Possibility ); + allComponents.add( ysr8_Product ); + allComponents.add( ysr8_use ); + } + + private void setName() { + ysr8_Sales.setName("ysr8_Sales"); + ysr8_OrderManufacturer.setName("ysr8_OrderManufacturer"); + ysr8_CustomerName.setName("ysr8_CustomerName"); + ysr8_QuotationLevel.setName("ysr8_QuotationLevel"); + ysr8_Contact.setName("ysr8_Contact"); + ysr8_ContactDept.setName("ysr8_ContactDept"); + ysr8_ContactPosition.setName("ysr8_ContactPosition"); + ysr8_ContactPhone.setName("ysr8_ContactPhone"); + ysr8_ProjectManager.setName("ysr8_ProjectManager"); + ysr8_Ratio.setName("ysr8_Ratio"); + ysr8_ProjectLevel.setName("ysr8_ProjectLevel"); +// ysr8_QuotationState.setName("ysr8_QuotationState"); + ysr8_SytemName.setName("ysr8_SytemName"); + ysr8_RequestedDate.setName("ysr8_RequestedDate"); + ysr8_SysPlanDate.setName("ysr8_SysPlanDate"); + ysr8_ReceiveDate.setName("ysr8_ReceiveDate"); + ysr8_FinishedDate.setName("ysr8_FinishedDate"); + ysr8_OfferAmount.setName("ysr8_OfferAmount"); + ysr8_RobotModelAndNum.setName("ysr8_RobotModelAndNum"); + + + ysr8_QuotationStatus.setName("ysr8_QuotationStatus"); + ysr8_EstimatedDate.setName("ysr8_EstimatedDate"); + ysr8_Possibility.setName("ysr8_Possibility"); + ysr8_QuotationRemarks.setName("ysr8_QuotationRemarks"); + ysr8_Product.setName("ysr8_Product"); + ysr8_use.setName("ysr8_use"); + } + + @Override + public void loadRendering() throws TCException { + System.out.println("loadForm------------------------start"); + try { + this.formProperties = componentForm.getAllFormProperties(); + int length = this.formProperties.length; + int pSize = allComponents.size(); + for (int k = 0; k < length; ++k) { + String propName = this.formProperties[k].getPropertyName().trim(); + for (int i = 0; i < pSize; i++) { + Component component = allComponents.get(i); + String name = component.getName(); + if (name.equals("ysr8_OfferAmount")) {//lidy20181108报价金额增加千位分隔符 + iTextField textField = (iTextField) component; + if (propName.equalsIgnoreCase(name)) { + DecimalFormat df = new DecimalFormat(",###,###"); + try { + Double OfferAmount = new Double(this.formProperties[k].getStringValue()); + textField.setText(df.format(OfferAmount)); + } catch(NumberFormatException e) { + textField.setText(this.formProperties[k].getStringValue()); + } + indices.put(formProperties[k], textField); + break; + } + } else + if (component instanceof iTextField) { + iTextField textField = (iTextField) component; + if (propName.equalsIgnoreCase(name)) { + textField.setText(this.formProperties[k].getStringValue()); + indices.put(formProperties[k], textField); + break; + } + } else if (component instanceof JComboBox) { + @SuppressWarnings("rawtypes") + JComboBox combox = (JComboBox) component; + if (propName.equalsIgnoreCase(name)) { +// combox.setSelectedItem(this.formProperties[k].getStringValue()); + System.out.println(component.getName()); + combox.setSelectedItem(componentForm.getProperty(component.getName())); + indices.put(formProperties[k], combox); + break; + } +// } else if (component instanceof LOVComboBox) { +// LOVComboBox combox = (LOVComboBox) component; +// if (propName.equalsIgnoreCase(name)) { +// combox.setSelectedItem(this.formProperties[k].getStringValue()); +//// combox.setSelectedItem(lovMap.get(component.getName()).get(this.formProperties[k].getStringValue())); +// indices.put(formProperties[k], combox); +// break; +// } + } else if(component instanceof DateButton){ + DateButton btn = (DateButton) component; + if(propName.equalsIgnoreCase(name)){ + btn.setDate(formProperties[k].getDateValue()); + indices.put(formProperties[k], btn); + break; + } + }else if (component instanceof JTextArea) { + JTextArea textArea = (JTextArea) component; + if (propName.equalsIgnoreCase(name)) { + textArea.setText(formProperties[k].getStringValue()); + indices.put(formProperties[k], textArea); + break; + } + } + } + } + ysr8_FinishedDate.setDate(componentForm.getDateProperty("ysr8_FinishedDate")); + + ysr8_QuotationStatus.setSelectedItem(componentItem.getProperty("ysr8_QuotationStatus")); + ysr8_EstimatedDate.setDate(componentItem.getDateProperty("ysr8_EstimatedDate")); + ysr8_Possibility.setText(componentItem.getProperty("ysr8_Possibility")); + ysr8_QuotationRemarks.setText(componentItem.getProperty("ysr8_QuotationRemarks")); + } catch (Exception imanexception) { + throw imanexception; + } + if (this.formProperties == null) { + Registry registry = Registry.getRegistry(this); + throw new TCException(registry.getString("failedLoadingFormProperties")); + } + } + + @Override + public void saveRendering() { + FileWriter fos = null; + try { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + String out = System.getProperty("java.io.tmpdir")+"\\报价日志.txt";//"+sdf.format(new Date())+" + File htmlfile = new File(out); + if(htmlfile.exists()) + htmlfile.delete(); + htmlfile.createNewFile(); + fos = new FileWriter(htmlfile); + fos.write(sdf.format(new Date()) +" saveRendering start\r\n\r\n"); + + Enumeration enumeration = this.indices.keys(); + Enumeration enumeration1 = this.indices.elements(); + TCFormProperty[] aimanformproperty = new TCFormProperty[this.indices.size()]; + + for (int i = 0; enumeration.hasMoreElements(); i++) { + TCFormProperty imanformproperty = (TCFormProperty) enumeration.nextElement(); + Object component = enumeration1.nextElement(); + String propName = imanformproperty.getPropertyName(); + fos.write(sdf.format(new Date()) +" propName:"+propName+"\r\n\r\n"); + if (propName.equals("ysr8_OfferAmount")) {//lidy20181108报价金额增加千位分隔符 + String strTempValue = ((iTextField) component).getText().toString(); + setStringToPropertyValue(imanformproperty, strTempValue.replace(",", "")); + } else if (component instanceof iTextField) { + String strTempValue = ((iTextField) component).getText().toString(); + setStringToPropertyValue(imanformproperty, strTempValue); + } else if (component instanceof JComboBox) { + //kk 0813 不选时的空引用异常 + @SuppressWarnings("rawtypes") + Object sItem = ((JComboBox) component).getSelectedItem(); +// String strTempValue = ""; + String strTempValue = sItem==null?"":sItem.toString(); +// componentForm.setProperty(propName, strTempValue); +// for(Map.Entry lovEntry : lovMap.get(((Component) component).getName()).entrySet()) { +// if(lovEntry.getValue().equals(sItem.toString())) { +// strTempValue = lovEntry.getKey().toString(); +// break; +// } +// } +// String strTempValue = sItem==null?"":sItem.toString();propName + if(lovMap.containsKey(propName)) { + System.out.println("lovMap:"+strTempValue+"~~"+lovMap.get(propName)); + fos.write(sdf.format(new Date()) +" "+propName+"=="+strTempValue+"~~"+lovMap.get(propName)+"\r\n\r\n"); + setStringToPropertyValue(imanformproperty, lovMap.get(propName).get(strTempValue)); + }else + setStringToPropertyValue(imanformproperty, strTempValue); +// } else if (component instanceof LOVComboBox) { +// //kk 0813 不选时的空引用异常 +// Object sItem = ((LOVComboBox) component).getSelectedItem(); +// String strTempValue = sItem==null?"":sItem.toString(); +// setStringToPropertyValue(imanformproperty,strTempValue); + } else if (component instanceof DateButton) { + DateButton btn = (DateButton) component; + if (btn.getDate() != null) { + imanformproperty.setDateValue(btn.getDate()); + } else { + imanformproperty.setDateValue(null); + } + } else if (component instanceof JTextArea) { + setStringToPropertyValue(imanformproperty,((JTextArea) component).getText().toString()); + } + aimanformproperty[i] = imanformproperty; + } + System.out.println("设置Item属性:"+componentItem); + // lidy20181030设置Item属性 +// TCUserService userservice = session.getUserService(); +// Object[] obj = new Object[2]; +// obj[0] = "Set_ByPass"; +// obj[1] = "true"; +// userservice.call("YSR8UserService", obj); +//// System.out.println("result:"+result); +// componentItem.lock(); +// componentItem.setStringProperty("ysr8_QuotationStatus", ysr8_QuotationStatus.getSelectedItem().toString()); +// componentItem.setDateProperty("ysr8_EstimatedDate", ysr8_EstimatedDate.getDate()); +// componentItem.setStringProperty("ysr8_Possibility", ysr8_Possibility.getText()); + String params = "", proName = "", ysr8_EstimatedDateVal = ""; + StringBuilder proVal = new StringBuilder("");//TODO + proName = "ysr8_EstimatedDate@@@@ysr8_Possibility@@@@ysr8_QuotationStatus@@@@ysr8_QuotationRemarks"; + ysr8_EstimatedDateVal = ysr8_EstimatedDate.getDate()==null?"":String.format("%tF", ysr8_EstimatedDate.getDate()); + proVal.append(ysr8_EstimatedDateVal).append("@@@@").append(ysr8_Possibility.getText()).append("@@@@"); + proVal.append(ysr8_QuotationStatus.getSelectedItem().toString()).append("@@@@").append(ysr8_QuotationRemarks.getText()); + params = componentItem.getUid() + "^^^^" + proName + "^^^^" + proVal.toString(); + String cmd = "Update_Item_TCProperty"; + Object[] objParams = new Object[2]; + objParams[0] = cmd; + objParams[1] = params; + TCUserService userService = session.getUserService(); + String result = (String) userService.call("YSR8UserService", objParams); + System.out.println("更新Item属性:"+result); +// componentItem.save(); +// componentItem.unlock(); +// obj[1] = "false"; +// userservice.call("YSR8UserService", obj); + + try { + componentForm.setTCProperties(aimanformproperty); + } + catch (Exception exception) { + exception.printStackTrace(); + MessageBox.post(exception); + } + } catch (Exception imane) { + imane.printStackTrace(); + }finally { + if(fos!=null) + try { + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + @SuppressWarnings("rawtypes") + public boolean isRenderingModified() { + Enumeration enumeration = this.indices.keys(); + Enumeration enumeration1 = this.indices.elements(); + for (; enumeration.hasMoreElements(); ) { + TCFormProperty imanformproperty = (TCFormProperty) enumeration.nextElement(); + Object component = enumeration1.nextElement(); +// String propName = imanformproperty.getPropertyName(); + if (imanformproperty.getName().equals("ysr8_OfferAmount")) {//lidy20181108报价金额增加千位分隔符 + String strTempValue = ((iTextField) component).getText().toString(); + if(!imanformproperty.getStringValue().equals(strTempValue.replace(",", ""))){ + return true; + } + } else + if (component instanceof iTextField) { + String strTempValue = ((iTextField) component).getText().toString(); + if(!imanformproperty.getStringValue().equals(strTempValue)){ + return true; + } + } else if (component instanceof JComboBox) { + Object sItem = ((JComboBox) component).getSelectedItem(); + String strTempValue = sItem==null?"":sItem.toString(); +// System.out.println(strTempValue+"::"+imanformproperty.getStringValue()+"::"+map.get(imanformproperty.getStringValue())); + try{ + if(!strTempValue.equals(componentForm.getProperty(((JComboBox)component).getName()))){ + return true; + } + } catch(TCException e) { + e.printStackTrace(); + } +// } else if (component instanceof LOVComboBox) { +// //kk 0809 不选时的空引用异常 +// Object sItem = ((LOVComboBox) component).getSelectedItem(); +// String strTempValue = sItem==null?"":sItem.toString(); +// if(!imanformproperty.getStringValue().equals(strTempValue)){ +// return true; +// } + } else if (component instanceof DateButton) { + DateButton btn = (DateButton) component; + if(imanformproperty.getDateValue() != null && btn.getDate() != null){ + if(imanformproperty.getDateValue().getTime() != btn.getDate().getTime()){ + return true; + } + }else if(imanformproperty.getDateValue() != null && btn.getDate() == null){ + return true; + }else if(imanformproperty.getDateValue() == null && btn.getDate() != null){ + return true; + } + } else if (component instanceof JTextArea) { + String strTempValue = ((JTextArea) component).getText().toString(); + if (!imanformproperty.getStringValue().equals(strTempValue)) { + return true; + } + } + + try { + String sItem = ysr8_QuotationStatus.getSelectedItem().toString(); + if(!componentItem.getProperty("ysr8_QuotationStatus").equals(sItem)) { +// System.out.println("ysr8_QuotationStatus"); + return true; + } + if(ysr8_EstimatedDate.getDate() != null && componentItem.getDateProperty("ysr8_EstimatedDate") != null){ + if(ysr8_EstimatedDate.getDate().getTime()!=(componentItem.getDateProperty("ysr8_EstimatedDate")).getTime()) { + return true; + } + }else if(ysr8_EstimatedDate.getDate() == null && componentItem.getDateProperty("ysr8_EstimatedDate") != null){ + return true; + }else if(ysr8_EstimatedDate.getDate() != null && componentItem.getDateProperty("ysr8_EstimatedDate") == null){ + return true; + } + if(!ysr8_Possibility.getText().equals(componentItem.getProperty("ysr8_Possibility"))) { + return true; + } + if(!ysr8_QuotationRemarks.getText().equals(componentItem.getProperty("ysr8_QuotationRemarks"))) { + return true; + } + } catch (TCException e) { + e.printStackTrace(); + } + } + return false; + } + + public void setRenderingReadOnly() + { + setModifiableComponents(this, false); + if(getController() != null) + getController().setFormReadOnly(); + jBPM.setEnabled(true); + if(jBPM.getParent() != null) + jBPM.getParent().setEnabled(true); + if(jBPM.getParent().getParent() != null) + jBPM.getParent().getParent().setEnabled(true); + } + + public void setRenderingReadWrite() + { + setModifiableComponents(this, true); + jBPM.setEnabled(true); + } + + private void setModifiableComponents(java.awt.Component component1, boolean flag) + { + if(component1 == null) + return; + boolean flag1 = flag; + if(flag && (component1 instanceof PropertyComment)) + flag1 = ((PropertyComment)component1).isLabelEditable(); + else + if(flag && (component1 instanceof InterfacePropertyComponent)) + { + String s = ((InterfacePropertyComponent)component1).getProperty(); + try + { + TCPropertyDescriptor tcpropertydescriptor = typeComponent.getPropertyDescriptor(s); + if(tcpropertydescriptor != null) + { + flag1 = tcpropertydescriptor.isEnabled(); + if(component != null) + { + TCProperty tcproperty = component.getTCProperty(s); + boolean flag3 = tcproperty.isEnabled(); + flag1 = flag3; + } + if(isConditionalFieldBehaviorEnabled() && FormFieldManager.isCustomizationEnabled()) + { + boolean flag2 = WidgetTypeAdapter.isInterfacePropertyComponentEnabled((InterfacePropertyComponent)component1); + flag1 = flag1 && flag2; + } + } + } + catch(TCException tcexception) + { + Logger.getLogger("com.teamcenter.rac.stylesheet.AbstractRendering").info(tcexception.getLocalizedMessage()); + } + } + if(!(component1 instanceof JTabbedPane) && !(component1 instanceof JSplitPane) && !(component1 instanceof JPanel) && !(component1 instanceof JLabel) && !(component1 instanceof JScrollPane) && !(component1 instanceof JViewport) && !(component1 instanceof JProgressBar) && !(component1 instanceof JTableHeader)) + if(component1 instanceof JTextComponent) + ((JTextComponent)component1).setEditable(flag1); + else + component1.setEnabled(flag1); + if(component1 instanceof InterfaceRendererEvent) + if(flag1) + ((InterfaceRendererEvent)component1).setReadWrite(); + else + ((InterfaceRendererEvent)component1).setReadOnly(); + if(component1 instanceof PropertyArray) + ((PropertyArray)component1).setModifiable(flag1); + else + if(component1 instanceof PropertyObjectLink) + ((PropertyObjectLink)component1).setModifiable(flag1); + else + if(component1 instanceof PropertyLogicalPanel) + ((PropertyLogicalPanel)component1).setModifiable(flag1); + else + if(component1 instanceof AbstractPropertyComponent) + ((AbstractPropertyComponent)component1).setModifiable(flag1); + else + if(component1 instanceof JScrollPane) + { + JScrollPane jscrollpane = (JScrollPane)component1; + java.awt.Component component2 = jscrollpane.getCorner("LOWER_LEFT_CORNER"); + if(component2 != null) + setModifiableComponents(component2, flag1); + component2 = jscrollpane.getCorner("LOWER_RIGHT_CORNER"); + if(component2 != null) + setModifiableComponents(component2, flag1); + component2 = jscrollpane.getCorner("UPPER_LEFT_CORNER"); + if(component2 != null) + setModifiableComponents(component2, flag1); + component2 = jscrollpane.getCorner("UPPER_RIGHT_CORNER"); + if(component2 != null) + setModifiableComponents(component2, flag1); + setModifiableComponents(((java.awt.Component) (jscrollpane.getViewport())), flag1); + } else + if(component1 instanceof java.awt.Container) + { + java.awt.Component acomponent[] = ((java.awt.Container)component1).getComponents(); + if(acomponent != null) + { + for(int i = 0; i < acomponent.length; i++) + setModifiableComponents(acomponent[i], flag1); + + } + } + } + @SuppressWarnings( "serial" ) + private DateButton newDateButton() { +// DateButton db = new PropertyDateButton() { + DateButton db = new DateButton(null, "yyyy-MM-dd", false, false, false) { + @Override + public void setEnabled(boolean f) { + super.setEnabled(false); + } + }; + return db; + } + private LinkedHashMap getLOV(String lovName){ + LinkedHashMap lovValue = new LinkedHashMap<>(); + lovValue.put("", ""); + TCComponentListOfValuesType lovType; + try { + lovType = (TCComponentListOfValuesType)session.getTypeComponent("ListOfValues"); + TCComponentListOfValues[] lov = lovType.find(lovName); + if(lov.length==0) { + return lovValue; + } + ListOfValuesInfo lovInfo = lov[0].getListOfValues(); + Object[] v1 = lovInfo.getListOfValues(); + String[] v2 = lovInfo.getLOVDisplayValues(); + for(int i=0; i map = lovInfo.getValueTable(); +// for(Object k : map.keySet()) { +// lovValue.put(k.toString(), map.get(k)); +// } + } catch (Exception e) { + e.printStackTrace(); + } + return lovValue; + } + +} diff --git a/src/com/teamcenter/rac/stylesheet/stylesheet_user.properties b/src/com/teamcenter/rac/stylesheet/stylesheet_user.properties new file mode 100644 index 0000000..04ca04b --- /dev/null +++ b/src/com/teamcenter/rac/stylesheet/stylesheet_user.properties @@ -0,0 +1,2 @@ +YSR8_QuotationRevisionMaster.FORMJAVARENDERING=cn.com.teamcenter.rac.form.YSR8_QuotationRevisionMaster +YSR8_ProjectForm.FORMJAVARENDERING=cn.com.teamcenter.rac.form.YSR8_ProjectForm \ No newline at end of file diff --git a/src/com/teamcenter/rac/viewer/stylesheet/beans/CUSTAutoAssignItemIDPropertyBean.java b/src/com/teamcenter/rac/viewer/stylesheet/beans/CUSTAutoAssignItemIDPropertyBean.java new file mode 100644 index 0000000..33b52bc --- /dev/null +++ b/src/com/teamcenter/rac/viewer/stylesheet/beans/CUSTAutoAssignItemIDPropertyBean.java @@ -0,0 +1,496 @@ +package com.teamcenter.rac.viewer.stylesheet.beans; + +import cn.com.origin.autocode.newitem.newcode.NewCodeItemDialog; +import cn.com.origin.autocodemanager.common.PackCodeDescInfos; +import com.teamcenter.rac.aif.AIFDesktop; +import com.teamcenter.rac.commands.newitem.NamingRulesHelper; +import com.teamcenter.rac.common.Activator; +import com.teamcenter.rac.kernel.TCComponentType; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCProperty; +import com.teamcenter.rac.kernel.TCPropertyDescriptor; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.kernel.TCTextService; +import com.teamcenter.rac.services.ISessionService; +import com.teamcenter.rac.util.Registry; +import com.teamcenter.rac.util.controls.SWTComboBox; +import com.teamcenter.rac.util.controls.TextControl; +import com.teamcenter.services.rac.core.DataManagementService; +import com.teamcenter.soa.client.model.NamingRule; +import java.util.Map; +import org.apache.log4j.Logger; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.forms.widgets.FormToolkit; + +// Referenced classes of package com.teamcenter.rac.viewer.stylesheet.beans: +// AbstractPropertyBean, TextfieldPropertyBean, AbstractAutoAssignBean + +public class CUSTAutoAssignItemIDPropertyBean extends AbstractPropertyBean +{ + private class IC_GenerateIDButtonSelectionAdapter extends SelectionAdapter + { + + public void widgetSelected(SelectionEvent selectionevent) + { + try + { + String itemType = getOwningTypeName(m_propDesc); + Composite composite = m_propBean.getControl().getParent().getParent(); + textObject_name = getSession().getTextService().getTextValue(object_name); + textObject_desc = getSession().getTextService().getTextValue(object_desc); + textObject_rev1 = getSession().getTextService().getTextValue(revision_id1); + getNameTextByLabel(composite, object_name); + if(itemNameText == null) + getNameTextByLabel(composite, textObject_name); + getNameTextByLabel(composite, object_desc); + if(itemDescText == null) + getNameTextByLabel(composite, textObject_desc); + getNameTextByLabel(composite, revision_id1); + if(itemRevText == null) + getNameTextByLabel(composite, textObject_rev1); + if(itemRevText == null) + { + getNameTextByLabel(composite, revision_id2); + if(itemRevText == null) + getNameTextByLabel(composite, textObject_rev2); + } + if(m_propBean instanceof TextfieldPropertyBean) + { + TextfieldPropertyBean textfieldPropertyBean = (TextfieldPropertyBean)m_propBean; + itemIDText = textfieldPropertyBean.getTextField(); + } +// itemType = itemType.replace("版本", "").replace("Revision", ""); +// System.out.println("CECAutoAssignItemIDPropertyBean itemType = "+itemType); + PackCodeDescInfos packCodeDescInfos = new PackCodeDescInfos(); +// (new NewCodeItemDialog(AIFDesktop.getActiveDesktop().getShell(), itemType, packCodeDescInfos)).open(); + (new NewCodeItemDialog(AIFDesktop.getActiveDesktop().getShell(), "", packCodeDescInfos)).open(); + if(packCodeDescInfos.getGenerateID() != null) + { + itemIDText.setText(packCodeDescInfos.getGenerateID()); + if(itemNameText != null) + itemNameText.setText(packCodeDescInfos.getNameValue()); + //remove and add 2017-10-12 + itemIDText.setEnabled(false); + assignButton.setEnabled(false); +// if(packCodeDescInfos.getCodeRuleName().trim().length() > 0) +// { +// itemIDText.setEnabled(false); +// assignButton.setEnabled(false); +// setCodeInfo(composite.getParent().getParent().getParent(), packCodeDescInfos, null); +// } + //end + } + } + catch(TCException e) + { + e.printStackTrace(); + } + } + + private TCPropertyDescriptor m_propDesc; + private SWTComboBox m_comboBox; + private Button m_sourceObject; + + public IC_GenerateIDButtonSelectionAdapter(TCPropertyDescriptor tcpropertydescriptor, SWTComboBox swtcombobox) + { + super(); + m_propDesc = tcpropertydescriptor; + m_comboBox = swtcombobox; + } + } + + + public CUSTAutoAssignItemIDPropertyBean(FormToolkit formtoolkit, Composite composite, boolean flag, Map map) + { + item_id = "object_name"; + object_name = "object_name"; + object_desc = "object_desc"; + revision_id1 = "item_revision_id"; + revision_id2 = "revision:item_revision_id"; + textObject_name = "object_name"; + textObject_desc = "object_desc"; + textObject_rev1 = "item_revision_id"; + textObject_rev2 = "revision:item_revision_id"; + assignButton = null; + m_localComposite = new Composite(composite, 0); + addDefaultBeanControl(formtoolkit, m_localComposite, flag, map); + } + + protected void addDefaultBeanControl(FormToolkit formtoolkit, Composite composite, boolean flag, Map map) + { + m_propBean = new TextfieldPropertyBean(formtoolkit, composite, flag, map); + setPageAttrib(map); + setControl(m_propBean.getControl()); + m_propBean.addPropertyChangeListener(this); + ((TextfieldPropertyBean)m_propBean).removePropertyChangeListner(); + ((TextfieldPropertyBean)m_propBean).getTextControl().addPropertyChangeListener(this); + } + + private void setPageAttrib(Map map) + { + String s = map == null ? null : (String)map.get("column"); + int i = 32; + if(s != null && s.length() > 0) + try + { + i = Integer.parseInt(s); + } + catch(NumberFormatException numberformatexception) + { + Logger.getLogger(com.teamcenter.rac.viewer.stylesheet.beans.AbstractAutoAssignBean.class).error(numberformatexception.getClass().getName(), numberformatexception); + } + setSize(i); + } + + private void setSize(int i) + { + if(m_propBean instanceof TextfieldPropertyBean) + { + int j = i; + if(j == 0) + j = 32; + int k = j * 5; + GridData griddata = new GridData(4, 16777216, true, true); + griddata.widthHint = k; + ((TextfieldPropertyBean)m_propBean).setLayoutData(griddata); + } + } + + public boolean isPropertyModified(TCProperty tcproperty) + throws Exception + { + return m_propBean.isPropertyModified(tcproperty); + } + + public void setModifiable(boolean flag) + { + m_propBean.setModifiable(flag); + } + + public boolean isMandatory() + { + return m_propBean.isMandatory(); + } + + public Object getEditableValue() + { + return m_propBean.getEditableValue(); + } + + public void load(TCProperty tcproperty) + throws Exception + { + load(tcproperty.getPropertyDescriptor()); + setDirty(false); + } + + public void load(TCPropertyDescriptor tcpropertydescriptor) + throws Exception + { + setLayout(2); + m_propBean.setProperty(getProperty()); + descriptor = tcpropertydescriptor; + NamingRule namingrule = descriptor.getNamingRule(); + if(namingrule != null) + { + String as[] = getNamingRulePatternsWithCounters(tcpropertydescriptor); + String s = getPreferredNamingRulePattern(tcpropertydescriptor); + if(as != null && as.length > 0) + { + m_validationNeeded = true; + addMoreWidgets(tcpropertydescriptor, as, s); + } else + { + setLayout(1); + m_validationNeeded = true; + } + } else + { + setLayout(2); + Button button = getButtonWidget(); + button.setData("RCAF_ID", tcpropertydescriptor.getName()); + assignButton = button; + button.addSelectionListener(new IC_GenerateIDButtonSelectionAdapter(tcpropertydescriptor, null)); + } + m_propBean.load(tcpropertydescriptor); + } + + private void addMoreWidgets(TCPropertyDescriptor tcpropertydescriptor, String as[], String s) + { + setLayout(3); + SWTComboBox swtcombobox = new SWTComboBox(m_localComposite, 2056); + GridData griddata = new GridData(4, 16777216, true, true); + swtcombobox.setLayoutData(griddata); + String as1[]; + int j = (as1 = as).length; + for(int i = 0; i < j; i++) + { + String s1 = as1[i]; + swtcombobox.addItem(s1); + } + + swtcombobox.setAutoCompleteSuggestive(false); + if(s != null && s.length() > 0) + swtcombobox.setSelectedItem(s); + else + swtcombobox.setSelectedIndex(0); + Button button = getButtonWidget(); + button.setData("RCAF_ID", tcpropertydescriptor.getName()); + button.addSelectionListener(new IC_GenerateIDButtonSelectionAdapter(tcpropertydescriptor, swtcombobox)); + } + + private String[] getNamingRulePatternsWithCounters(TCPropertyDescriptor tcpropertydescriptor) + { + DataManagementService datamanagementservice = DataManagementService.getService(getSession()); + com.teamcenter.services.rac.core._2008_06.DataManagement.GetNRPatternsWithCountersResponse getnrpatternswithcountersresponse = null; + com.teamcenter.services.rac.core._2008_06.DataManagement.NRAttachInfo anrattachinfo[] = new com.teamcenter.services.rac.core._2008_06.DataManagement.NRAttachInfo[1]; + anrattachinfo[0] = new com.teamcenter.services.rac.core._2008_06.DataManagement.NRAttachInfo(); + anrattachinfo[0].propName = getProperty(); + anrattachinfo[0].typeName = getOwningTypeName(tcpropertydescriptor); + getnrpatternswithcountersresponse = datamanagementservice.getNRPatternsWithCounters(anrattachinfo); + com.teamcenter.services.rac.core._2008_06.DataManagement.PatternsWithCounters apatternswithcounters[] = getnrpatternswithcountersresponse.patterns; + return apatternswithcounters[0].patternStrings; + } + + protected String getOwningTypeName(TCPropertyDescriptor tcpropertydescriptor) + { + String s = tcpropertydescriptor.getTypeComponent().getOwningType(); + if(s == null || s.isEmpty()) + s = tcpropertydescriptor.getTypeComponent().getTypeName(); + return s; + } + + private String getPreferredNamingRulePattern(TCPropertyDescriptor tcpropertydescriptor) + { + String s = tcpropertydescriptor.getTypeComponent().getOwningType().toString(); + String s1 = s == null || s.isEmpty() ? tcpropertydescriptor.getTypeComponent().toString() : s; + String as[] = { + tcpropertydescriptor.getName() + }; + String as1[] = { + s1 + }; + com.teamcenter.rac.commands.newitem.NamingRule anamingrule[] = NamingRulesHelper.getInstance().getNamingRules(getSession(), as1, as); + return anamingrule[0].getPreferredPattern(); + } + + private Button getButtonWidget() + { + Button button = new Button(m_localComposite, 0); + button.setText(appReg.getString("assignButton.TEXT")); + return button; + } + + public TCSession getSession() + { + TCSession tcsession = null; + try + { + tcsession = (TCSession)Activator.getDefault().getSessionService().getSession("com.teamcenter.rac.kernel.TCSession"); + } + catch(Exception exception) + { + Logger.getLogger(com.teamcenter.rac.viewer.stylesheet.beans.AbstractAutoAssignBean.class).error(exception); + return null; + } + return tcsession; + } + + protected void setLayout(int i) + { + if(m_localComposite != null) + { + GridLayout gridlayout = new GridLayout(i, false); + gridlayout.marginHeight = 0; + gridlayout.marginWidth = 0; + m_localComposite.setLayout(gridlayout); + GridData griddata = new GridData(4, 16777216, true, true); + m_localComposite.setLayoutData(griddata); + } + } + + public TCProperty getPropertyToSave(TCProperty tcproperty) + throws Exception + { + return tcproperty; + } + + public void setUIFValue(Object obj) + { + m_propBean.setUIFValue(obj); + } + + public void setCodeInfo(Composite composite, PackCodeDescInfos packCodeDescInfos, Control next) + { + try + { + Control childrens[] = composite.getChildren(); + for(int i = 0; i < childrens.length; i++) + { + Control child = childrens[i]; + if(child instanceof Label) + { + Label label = (Label)child; + String text = label.getText(); + if(text.equals("cd9_codeDesc:") || text.equals((new StringBuilder(String.valueOf(getSession().getTextService().getTextValue("cd9_codeDesc")))).append(":").toString())) + { + if(next instanceof Text) + { + Text textField = (Text)next; + textField.setText(packCodeDescInfos.getIdDesc()); + textField.setEnabled(false); + } + } else + if(text.equals("cd9_codePattern:") || text.equals((new StringBuilder(String.valueOf(getSession().getTextService().getTextValue("cd9_codePattern")))).append(":").toString())) + { + if(next instanceof Text) + { + Text textField = (Text)next; + textField.setText(packCodeDescInfos.getCodetz()); + textField.setEnabled(false); + } + } else + if(text.equals("cd9_codeRuleName:") || text.equals((new StringBuilder(String.valueOf(getSession().getTextService().getTextValue("cd9_codeRuleName")))).append(":").toString())) + { + if(next instanceof Text) + { + Text textField = (Text)next; + //remove 2017-10-12 +// textField.setText(packCodeDescInfos.getCodeRuleName()); + //end + textField.setEnabled(false); + } + } else + if(text.equals("cd9_codeID:") || text.equals((new StringBuilder(String.valueOf(getSession().getTextService().getTextValue("cd9_codeID")))).append(":").toString())) + { + if(next instanceof Text) + { + Text textField = (Text)next; + textField.setText(packCodeDescInfos.getIdjl()); + textField.setEnabled(false); + } + } else + if(text.equals("cd9_generateID:") || text.equals((new StringBuilder(String.valueOf(getSession().getTextService().getTextValue("cd9_generateID")))).append(":").toString())) + { + if(next instanceof Text) + { + Text textField = (Text)next; + textField.setText(packCodeDescInfos.getGenerateID()); + textField.setEnabled(false); + } + } else + if((text.equals("cd9_codeStyle:") || text.equals((new StringBuilder(String.valueOf(getSession().getTextService().getTextValue("cd9_codeStyle")))).append(":").toString())) && (next instanceof Text)) + { + Text textField = (Text)next; + textField.setText(packCodeDescInfos.getCodeStyle()); + textField.setEnabled(false); + } + } + } + + for(int i = 0; i < childrens.length; i++) + { + Control child = childrens[i]; + Control child2 = null; + if(i + 1 < childrens.length) + child2 = childrens[i + 1]; + if(child instanceof Composite) + setCodeInfo((Composite)child, packCodeDescInfos, child2); + } + + } + catch(TCException e) + { + e.printStackTrace(); + } + } + + public void getNameTextByLabel(Composite composite, String labelName) + { + boolean isEqual = false; + int equalNum = 0; + Control childrens[] = composite.getChildren(); + for(int i = 0; i < childrens.length; i++) + { + Control child = childrens[i]; + if((child instanceof Composite) && !isEqual && isValidLabelByText((Composite)child, labelName)) + { + isEqual = true; + equalNum = i; + } + if(isEqual) + if(labelName.equals(object_name) || labelName.equals(textObject_name)) + { + if((child instanceof Text) && i == equalNum + 1) + { + Text textField = (Text)child; + itemNameText = textField; + return; + } + } else + if(labelName.equals(object_desc) || labelName.equals(textObject_desc)) + { + if((child instanceof Text) && i == equalNum + 1) + { + Text textField = (Text)child; + itemDescText = textField; + return; + } + } else + if((labelName.equals(revision_id1) || labelName.equals(textObject_rev1) || labelName.equals(revision_id2) || labelName.equals(textObject_rev2)) && (child instanceof Text) && i == equalNum + 1) + { + Text textField = (Text)child; + itemRevText = textField; + return; + } + } + + } + + private boolean isValidLabelByText(Composite composite, String labelName) + { + boolean isValid = false; + Control childrens[] = composite.getChildren(); + for(int i = 0; i < childrens.length; i++) + { + Control child = childrens[i]; + if(child instanceof Label) + { + Label label = (Label)child; + String text = label.getText(); + if(text.equals((new StringBuilder(String.valueOf(labelName))).append(":").toString())) + isValid = true; + } + } + + return isValid; + } + + Text itemIDText; + Text itemNameText; + Text itemDescText; + Text itemRevText; + String item_id; + String object_name; + String object_desc; + String revision_id1; + String revision_id2; + String textObject_name; + String textObject_desc; + String textObject_rev1; + String textObject_rev2; + public Button assignButton; + protected AbstractPropertyBean m_propBean; + private Composite m_localComposite; + protected static final Registry appReg = Registry.getRegistry(com.teamcenter.rac.viewer.stylesheet.beans.CUSTAutoAssignItemIDPropertyBean.class); + protected boolean m_validationNeeded; + +} \ No newline at end of file diff --git a/src/com/teamcenter/rac/viewer/stylesheet/beans/beans_locale.properties b/src/com/teamcenter/rac/viewer/stylesheet/beans/beans_locale.properties new file mode 100644 index 0000000..c552968 --- /dev/null +++ b/src/com/teamcenter/rac/viewer/stylesheet/beans/beans_locale.properties @@ -0,0 +1,15 @@ +// @@ +// ================================================== +// Copyright 2011. +// Siemens Product Lifecycle Management Software Inc. +// All Rights Reserved. +// ================================================== +// @@ + +message.PREFIX=Value must match one of the following patterns: +assignButton.TEXT = Assign +sameAsOldId=An existing item is found. +invalidType=Selected Type should be an Item. +invalidID.MESSAGE=Unable to create item - an invalid ID entered! +error.TITLE = New Item ... +mandatoryGCID.TEXT=It is mandatory to enter a value. \ No newline at end of file diff --git a/src/com/teamcenter/rac/viewer/stylesheet/beans/beans_locale_zh_CN.properties b/src/com/teamcenter/rac/viewer/stylesheet/beans/beans_locale_zh_CN.properties new file mode 100644 index 0000000..5695826 --- /dev/null +++ b/src/com/teamcenter/rac/viewer/stylesheet/beans/beans_locale_zh_CN.properties @@ -0,0 +1,15 @@ +// @@ +// ================================================== +// Copyright 2011. +// Siemens Product Lifecycle Management Software Inc. +// All Rights Reserved. +// ================================================== +// @@ + +message.PREFIX=\u503C\u5FC5\u987B\u540C\u4EE5\u4E0B\u4E00\u79CD\u6837\u5F0F\u5339\u914D\uFF1A +assignButton.TEXT = \u6307\u6D3E +sameAsOldId=\u627E\u5230\u73B0\u6709\u96F6\u7EC4\u4EF6\u3002 +invalidType=\u9009\u5B9A\u7684\u7C7B\u578B\u5E94\u4E3A\u96F6\u7EC4\u4EF6\u3002 +invalidID.MESSAGE=\u65E0\u6CD5\u521B\u5EFA\u96F6\u7EC4\u4EF6 - \u8F93\u5165\u7684 ID \u65E0\u6548\uFF01 +error.TITLE = \u65B0\u5EFA\u96F6\u7EC4\u4EF6... +mandatoryGCID.TEXT=\u5F3A\u5236\u8F93\u5165\u503C\u3002 \ No newline at end of file diff --git a/src/cust/com/rac/changename/ChangeNameAction.java b/src/cust/com/rac/changename/ChangeNameAction.java new file mode 100644 index 0000000..48bb123 --- /dev/null +++ b/src/cust/com/rac/changename/ChangeNameAction.java @@ -0,0 +1,19 @@ +package cust.com.rac.changename; + +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aif.common.actions.AbstractAIFAction; +import com.teamcenter.rac.aifrcp.AIFUtility; + +public class ChangeNameAction extends AbstractAIFAction { + + public ChangeNameAction(AbstractAIFUIApplication arg0, String arg1) { + super(arg0, arg1); + } + + public void run() { + ChangeNameDialog dialog = new ChangeNameDialog(AIFUtility + .getCurrentApplication().getDesktop().getFrame(), + "更改名称", true); + } + +} diff --git a/src/cust/com/rac/changename/ChangeNameDialog.java b/src/cust/com/rac/changename/ChangeNameDialog.java new file mode 100644 index 0000000..b21e5a5 --- /dev/null +++ b/src/cust/com/rac/changename/ChangeNameDialog.java @@ -0,0 +1,93 @@ +package cust.com.rac.changename; + +import java.awt.BorderLayout; +import java.awt.FlowLayout; +import java.awt.Frame; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; + +import com.teamcenter.rac.aif.AbstractAIFDialog; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.MessageBox; +import com.teamcenter.rac.util.PropertyLayout; + +public class ChangeNameDialog extends AbstractAIFDialog implements ActionListener { + + private TCSession session; + public JTextField srcIdText; + public JTextField newIdText; + public JButton okBtn; + public JButton cancelBtn; + public TCComponent targetComponent; + public String srcName; + public ChangeNameDialog(Frame arg0, String arg1, boolean arg2) { + super(arg0, arg1, arg2); + session=(TCSession) AIFUtility.getCurrentApplication().getSession(); + targetComponent=(TCComponent) AIFUtility.getCurrentApplication().getTargetComponent(); + try { + srcName=targetComponent.getProperty("object_name"); + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + initUI(); + setVisible(true); + } + + public void initUI(){ + JPanel panel1 = new JPanel(new PropertyLayout(20,20,20,20,20,20)); + srcIdText=new JTextField(23); + srcIdText.setEditable(false); + srcIdText.setText(srcName); + newIdText=new JTextField(23); + panel1.add("1.1.left",new JLabel("原名称:")); + panel1.add("1.2.left",srcIdText); + panel1.add("2.1.left",new JLabel("更改为:")); + panel1.add("2.2.left",newIdText); + JPanel panel2 = new JPanel(new FlowLayout()); + okBtn = new JButton("确定"); + cancelBtn = new JButton("取消"); + okBtn.addActionListener(this); + cancelBtn.addActionListener(this); + panel2.add(okBtn); + panel2.add(cancelBtn); + getContentPane().add(BorderLayout.CENTER, panel1); + getContentPane().add(BorderLayout.SOUTH, panel2); + centerToScreen(); + pack(); + } + + @Override + public void actionPerformed(ActionEvent e) { + // TODO Auto-generated method stub + if(e.getSource() == okBtn){ + String newNameString=newIdText.getText().trim(); + if("".equals(newNameString)){ + MessageBox.post("请输入更改后名称!", "提示", 4); + return; + } + try { + targetComponent.setProperty("object_name", newNameString); + } catch (TCException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + MessageBox.post("重命名失败!", "提示", 4); + } + this.setVisible(false); + this.dispose(); + }else if(e.getSource() == cancelBtn){ + this.setVisible(false); + this.dispose(); + } + } + +} + diff --git a/src/cust/com/rac/changename/ChangeNameHandler.java b/src/cust/com/rac/changename/ChangeNameHandler.java new file mode 100644 index 0000000..d30215a --- /dev/null +++ b/src/cust/com/rac/changename/ChangeNameHandler.java @@ -0,0 +1,58 @@ +package cust.com.rac.changename; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; + +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentUser; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.MessageBox; + +/** + * Our sample handler extends AbstractHandler, an IHandler base class. + * @see org.eclipse.core.commands.IHandler + * @see org.eclipse.core.commands.AbstractHandler + */ +public class ChangeNameHandler extends AbstractHandler { + /** + * The constructor. + */ + public ChangeNameHandler() { + } + + /** + * the command has been executed, so extract extract the needed information + * from the application context. + */ + public Object execute(ExecutionEvent event) throws ExecutionException { + TCSession session=(TCSession) AIFUtility.getCurrentApplication().getSession(); + TCComponent inter=(TCComponent) AIFUtility.getCurrentApplication().getTargetComponent(); + try { + TCComponentUser user=session.getUser(); + String userTarget=inter.getProperty("owning_user"); + boolean flag1=false; + System.out.println("=====userTarget==========="+userTarget); + System.out.println("======user.toString()=========="+user.toString()); + if(userTarget.equals(user.toString())){ + flag1=true; + } + boolean flag=session.getCurrentGroup().isDBA(); + if(flag||flag1){ + ChangeNameAction action=new ChangeNameAction(AIFUtility.getCurrentApplication(),""); + new Thread(action).start(); + }else{ + MessageBox.post("您不是对象的所有者,无权更改。如需更改请与管理员联系!", "提示!", 2); + return null; + } + + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } +} + diff --git a/src/cust/com/rac/integration/AccepComHandler.java b/src/cust/com/rac/integration/AccepComHandler.java new file mode 100644 index 0000000..7923a77 --- /dev/null +++ b/src/cust/com/rac/integration/AccepComHandler.java @@ -0,0 +1,48 @@ +package cust.com.rac.integration; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; + +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCComponentItemRevision; +import com.teamcenter.rac.kernel.TCPreferenceService; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.MessageBox; + +public class AccepComHandler extends AbstractHandler{ + + private TCSession tcsession = null; + + public Object execute(ExecutionEvent arg0) throws ExecutionException { + // TODO Auto-generated method stub + final AbstractAIFUIApplication app = AIFUtility.getCurrentApplication(); + InterfaceAIFComponent aifComponent = app.getTargetComponent(); + tcsession = (TCSession) app.getSession(); + + if(aifComponent == null){ + MessageBox.post("请选择验收委托单版本对象!", "消息提示", MessageBox.INFORMATION); + return null; + } + + if( aifComponent instanceof TCComponentItemRevision){ + TCComponentItemRevision AccepComRevision = (TCComponentItemRevision)aifComponent; + String itemRevType = AccepComRevision.getType(); + if(itemRevType.equals("YSR8_AccepComRevision")){ + String url = tcsession.getPreferenceService().getString(TCPreferenceService.TC_preference_site, "Cust_PLM_To_BPM_URL"); + String msg = InterationOperation.sendAccepComToBPM(AccepComRevision, url); + MessageBox.post(msg, "消息提示", MessageBox.INFORMATION); + }else{ + MessageBox.post("您选择的不是验收委托单,请选择正确的文件!", "消息提示", MessageBox.INFORMATION); + return null; + } + }else{ + MessageBox.post("请选择验收委托单版本对象!", "消息提示", MessageBox.INFORMATION); + return null; + } + return null; + } + +} diff --git a/src/cust/com/rac/integration/DeliveryApplicationHandler.java b/src/cust/com/rac/integration/DeliveryApplicationHandler.java new file mode 100644 index 0000000..51b0f7e --- /dev/null +++ b/src/cust/com/rac/integration/DeliveryApplicationHandler.java @@ -0,0 +1,48 @@ +package cust.com.rac.integration; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; + +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCComponentItemRevision; +import com.teamcenter.rac.kernel.TCPreferenceService; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.MessageBox; + +public class DeliveryApplicationHandler extends AbstractHandler{ + + private TCSession tcsession = null; + + public Object execute(ExecutionEvent arg0) throws ExecutionException { + // TODO Auto-generated method stub + final AbstractAIFUIApplication app = AIFUtility.getCurrentApplication(); + InterfaceAIFComponent aifComponent = app.getTargetComponent(); + tcsession = (TCSession) app.getSession(); + + if(aifComponent == null){ + MessageBox.post("请选择发货申请单版本对象!", "消息提示", MessageBox.INFORMATION); + return null; + } + + if( aifComponent instanceof TCComponentItemRevision){ + TCComponentItemRevision DeliveryRevision = (TCComponentItemRevision)aifComponent; + String itemRevType = DeliveryRevision.getType(); + if(itemRevType.equals("YSR8_DeliveryRevision")){ + String url = tcsession.getPreferenceService().getString(TCPreferenceService.TC_preference_site, "Cust_PLM_To_BPM_URL"); + String msg = InterationOperation.sendDeliveryApplicationToBPM(DeliveryRevision, url); + MessageBox.post(msg, "消息提示", MessageBox.INFORMATION); + }else{ + MessageBox.post("您选择的不是发货申请单,请选择正确的文件!", "消息提示", MessageBox.INFORMATION); + return null; + } + }else{ + MessageBox.post("请选择发货申请单版本对象!", "消息提示", MessageBox.INFORMATION); + return null; + } + return null; + } + +} diff --git a/src/cust/com/rac/integration/InterationOperation.java b/src/cust/com/rac/integration/InterationOperation.java new file mode 100644 index 0000000..809270d --- /dev/null +++ b/src/cust/com/rac/integration/InterationOperation.java @@ -0,0 +1,838 @@ +package cust.com.rac.integration; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.StringWriter; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.regex.Pattern; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.DateUtil; +import org.apache.poi.xssf.usermodel.XSSFCell; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.dom4j.Document; +import org.dom4j.DocumentHelper; +import org.dom4j.Element; +import org.dom4j.io.OutputFormat; +import org.dom4j.io.XMLWriter; + +import com.teamcenter.rac.aif.kernel.AIFComponentContext; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentDataset; +import com.teamcenter.rac.kernel.TCComponentForm; +import com.teamcenter.rac.kernel.TCComponentItem; +import com.teamcenter.rac.kernel.TCComponentItemRevision; +import com.teamcenter.rac.kernel.TCComponentTcFile; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.kernel.TCUserService; + +@SuppressWarnings("deprecation") +public class InterationOperation { + + private static String totalCost = ""; + private static String norobotCost = ""; + private static int startRow = 0; + private static int stepNo = 1; + private static HashMap jqrbt; + private static DecimalFormat df = new DecimalFormat(".00"); + private static String[] stations = new String[] { "", "", "", "", "" }; + + public static String sendProjectPlanToBPM(TCComponentItemRevision itemRevision, String url){ + + String errMsg = ""; + + try { + TCComponentForm masterForm = (TCComponentForm) itemRevision.getRelatedComponent("IMAN_master_form_rev"); +// String itemInfo = XMLDocAPI.createProjectPlanXML(masterForm, itemRevision.getProperty("project_ids"));// lidy20190603处理特殊字符 + String itemInfo = XMLDocAPI.createProjectPlanXML(masterForm, itemRevision.getProperty("project_ids")) + .replaceAll("%26", "&").replaceAll("%3C", "<").replaceAll("%3E", ">").replaceAll("%27", "'") + .replaceAll("%22", """); + if( !itemInfo.startsWith("Error")){ + System.out.println("deliveryInfo = "+itemInfo); + String subUrl = url + "method=Submit&from_system_id=PLM&process=%e9%a1%b9%e7%9b%ae%e8%bf%9b%e5%ba%a6"; + String requestXML = RequestServer.request(subUrl, itemInfo); + if(!requestXML.startsWith("Error")){ + System.out.println("sendProjectPlanToBPM errMsg = "+requestXML); + errMsg = XMLDocAPI.readXmlErrorMsg(requestXML); + }else{ + errMsg = requestXML; + } + if(errMsg.equals("")){ + TCComponent[] components = itemRevision.getRelatedComponents("IMAN_specification"); + if (components != null && components.length != 0) { + for (TCComponent comp : components) { + if (comp instanceof TCComponentDataset) { + TCComponentDataset dataSet = (TCComponentDataset)comp; + if ((dataSet.getTcFiles() != null) && (dataSet.getTcFiles().length > 0)) { + TCComponentTcFile tcFile = dataSet.getTcFiles()[0]; + String fileName = tcFile.getProperty("original_file_name"); + File file = tcFile.getFile(System.getenv("temp"), fileName); + if(file != null){ +// subUrl = url + "from_system_id=PLM&process=%e9%a1%b9%e7%9b%ae%e8%bf%9b%e5%ba%a6&taskid=" +// +XMLDocAPI.readXmlTaskID(requestXML);//itemRevision.getProperty("item_id"); + subUrl = "http://192.168.0.69:3378/YZSoft/Attachment/Upload.ashx?from_system_id=PLM&process" + + "=%e9%a1%b9%e7%9b%ae%e8%bf%9b%e5%ba%a6&taskid="+XMLDocAPI.readXmlTaskID(requestXML); + System.out.println("subUrl="+subUrl); + errMsg = RequestServer.sendFile(subUrl, file.getAbsolutePath()); + if(!errMsg.startsWith("Error")){ + System.out.println("sendFileToBPM errMsg = "+errMsg); + errMsg = XMLDocAPI.readXmlErrorMsg(errMsg); + } + } + } + break; + } + } + } + } + if(errMsg.equals("")){ + errMsg = "传递成功!"; + } + }else{ + errMsg = itemInfo; + } + } catch (TCException e) { + errMsg = e.getMessage(); + e.printStackTrace(); + } + return errMsg; + } + + public static String sendDeliveryApplicationToBPM(TCComponentItemRevision DeliveryRevision, String url){ + + String errMsg = ""; + + try { + TCComponentForm masterForm = (TCComponentForm) DeliveryRevision.getRelatedComponent("IMAN_master_form_rev"); + String deliveryInfo = XMLDocAPI.createDeliveryApplicationXML(masterForm); + if( !deliveryInfo.startsWith("Error")){ + System.out.println("deliveryInfo = "+deliveryInfo); + url = url + "method=Submit&from_system_id=PLM&process=%e5%8f%91%e8%b4%a7%e7%94%b3%e8%af%b7%e5%8d%95"; + errMsg = RequestServer.request(url, deliveryInfo); + if(!errMsg.startsWith("Error")){ + System.out.println("errMsg = "+errMsg); + errMsg = XMLDocAPI.readXmlErrorMsg(errMsg); + } + if(errMsg.equals("")){ + errMsg = "传递成功!"; + } + }else{ + errMsg = deliveryInfo; + } + } catch (TCException e) { + errMsg = e.getMessage(); + e.printStackTrace(); + } + return errMsg; + } + + public static String sendAccepComToBPM(TCComponentItemRevision AccepComRevision, String url){ + + String errMsg = ""; + + try { + TCComponentForm masterForm = (TCComponentForm) AccepComRevision.getRelatedComponent("IMAN_master_form_rev"); + // lidy20190603处理特殊字符 +// String acceptComInfo = XMLDocAPI.createAcceptComInfoXML(masterForm, AccepComRevision.getProperty("item_id")); + String acceptComInfo = XMLDocAPI.createAcceptComInfoXML(masterForm, AccepComRevision.getProperty("item_id")) + .replaceAll("%26", "&").replaceAll("%3C", "<").replaceAll("%3E", ">").replaceAll("%27", "'") + .replaceAll("%22", """); + if( !acceptComInfo.startsWith("Error")){ + System.out.println("deliveryInfo = "+acceptComInfo); + url = url + "method=Submit&from_system_id=PLM&process=%e9%aa%8c%e6%94%b6%e5%a7%94%e6%89%98"; + errMsg = RequestServer.request(url, acceptComInfo); + if(!errMsg.startsWith("Error")){ + System.out.println("errMsg = "+errMsg); + errMsg = XMLDocAPI.readXmlErrorMsg(errMsg); + } + if(errMsg.equals("")){ + errMsg = "传递成功!"; + } + }else{ + errMsg = acceptComInfo; + } + } catch (TCException e) { + errMsg = e.getMessage(); + e.printStackTrace(); + } + return errMsg; + } + + public static String sendQuotationApplicationToBPM(TCSession session, TCComponentItemRevision quotationRevision, String url){ + System.out.println("sendQuotationApplicationToBPM"); + + String errMsg = ""; + jqrbt = new HashMap(); + FileInputStream in = null; + + try { + TCComponentForm masterForm = (TCComponentForm) quotationRevision.getRelatedComponent("IMAN_master_form_rev"); + Date finished = masterForm.getDateProperty("ysr8_FinishedDate");//lidy20181108完成日期不为空不允许传递 + if(finished!=null) { + return "该报价已完成传递,请勿重复传递!"; + } + TCComponent quotationMX = null; + TCComponent quotationFA = null; + String tempName = ""; + + String itemID = quotationRevision.getProperty("item_id"); + String version = quotationRevision.getProperty("item_revision_id");//lidy20181106增加版本号 + TCComponent[] relatedComs = quotationRevision.getRelatedComponents(); + int cnt = relatedComs.length; + + for(int ix = 0; ix < cnt; ix++){ + tempName = relatedComs[ix].getProperty("object_name"); + if(tempName.startsWith(itemID+"MX")){ + quotationMX = relatedComs[ix]; +// }else if(tempName.equals(itemID+"FA.docx") || tempName.equals(itemID+"FA.doc")){//lidy20180925数据集名称加后缀 + }else if(tempName.startsWith(itemID+"FA")){//lidy20180925数据集名称加后缀 + quotationFA = relatedComs[ix]; + } + } + + if(quotationMX != null && quotationMX.getType().equals("MSExcelX")){ + TCComponentDataset dataset = (TCComponentDataset) quotationMX; + if(dataset.getTcFiles() != null){ + File file = dataset.getTcFiles()[0].getFile(System.getenv("temp")); + System.out.println("file:"+file.getPath()); + + in = new FileInputStream(file);// + System.out.println("in"); + XSSFWorkbook wb = new XSSFWorkbook(in); + System.out.println("wb:"+wb.getNumberOfSheets()); + XSSFSheet sheet = wb.getSheetAt(0); + + Document document = DocumentHelper.createDocument(); + Element FormData = document.addElement("FormData"); + +// readBaseInfo(sheet, FormData, itemID, version, masterForm.getProperty("ysr8_Remark")); + System.out.println("readBaseInfo"); + readBaseInfo(sheet, FormData, itemID, version, quotationRevision.getItem().getProperty("ysr8_QuotationRemarks")); + System.out.println("getTotalCostMX"); + getTotalCostMX(sheet, FormData); + System.out.println("getLabourCostMX"); + getLabourCostMX(sheet, FormData); + System.out.println("getWorkStation"); + + int sheetCount = wb.getNumberOfSheets(); + for(int ix = 1; ix < sheetCount; ix++){ + sheet = wb.getSheetAt(ix); + if(isInteger(sheet.getSheetName())){ + getWorkStation(sheet,FormData); + } + } + in.close(); + + XMLWriter xmlWriter = null; + StringWriter stringWrite = new StringWriter(); + + OutputFormat format = OutputFormat.createPrettyPrint(); //转换字符串格式 + format.setEncoding("UTF-8"); + format.setNewlines(true); + + //输出字符串 + xmlWriter = new XMLWriter(stringWrite, format); + xmlWriter.write(document); + xmlWriter.flush(); + xmlWriter.close(); + //lidy20190314处理特殊字符 +// String msg = stringWrite.toString().replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">") +// .replaceAll("'", "'").replaceAll("\"", """); + String msg = stringWrite.toString().replaceAll("%26", "&").replaceAll("%3C", "<").replaceAll("%3E", ">") + .replaceAll("%27", "'").replaceAll("%22", """); + System.out.println("msg="+msg); + + String subUrl = url + "method=Submit&from_system_id=PLM&process=%e6%8a%a5%e4%bb%b7%e6%b8%85%e5%8d%95%e6%95%b0%e6%8d%ae"; + String requestXML = RequestServer.request(subUrl, msg); + if(!requestXML.startsWith("Error")){ + System.out.println("sendProjectPlanToBPM errMsg = "+requestXML); + errMsg = XMLDocAPI.readXmlErrorMsg(requestXML); + }else{ + errMsg = requestXML; + } + + if(errMsg.equals("")){ + String taskid = XMLDocAPI.readXmlTaskID(requestXML); + subUrl = "http://192.168.0.69:3378/YZSoft/Attachment/Upload.ashx?from_system_id=PLM&process=" + + "%e6%8a%a5%e4%bb%b7%e6%b8%85%e5%8d%95%e6%95%b0%e6%8d%ae&taskid="+taskid; + System.out.println("subUrl="+subUrl); + errMsg = RequestServer.sendFile(subUrl, file.getAbsolutePath()); + if(!errMsg.startsWith("Error")){ + System.out.println("sendFileToBPM errMsg = "+errMsg); + errMsg = XMLDocAPI.readXmlErrorMsg(errMsg); + } + +// if(quotationFA != null && (quotationMX.getType().equals("MSWordX") || quotationMX.getType().equals("MSWord"))){ + if(quotationFA != null){ + dataset = (TCComponentDataset) quotationFA; + if(dataset.getTcFiles() != null){ + file = dataset.getTcFiles()[0].getFile(System.getenv("temp")); + errMsg = RequestServer.sendFile(subUrl, file.getAbsolutePath()); + if(!errMsg.startsWith("Error")){ + System.out.println("sendFileToBPM errMsg = "+errMsg); + errMsg = XMLDocAPI.readXmlErrorMsg(errMsg); + } + } + } + + if(errMsg.equals("")){ + errMsg = "传递成功!"; + if(masterForm != null){ + //lidy20181108更新已传递版本 + TCComponentItem quotation = quotationRevision.getItem(); + String ysr8_HistoricRev = quotation.getStringProperty("ysr8_HistoricRev"); + if(ysr8_HistoricRev.isEmpty()) { + ysr8_HistoricRev = version; + } else { + ysr8_HistoricRev = ysr8_HistoricRev+","+version; + } + String params = quotation.getUid() + "^^^^ysr8_HistoricRev^^^^" + ysr8_HistoricRev; + String cmd = "Update_Item_TCProperty"; + Object[] objParams = new Object[2]; + objParams[0] = cmd; + objParams[1] = params; + TCUserService userService = session.getUserService(); + String result = (String) userService.call("YSR8UserService", objParams); + System.out.println("更新Item属性:"+result); + +// Calendar cal = Calendar.getInstance(); + +// System.out.println("ysr8_FinishedDate:"+cal.getTime()+"--ysr8_OfferAmount:"+totalCost+"--jqrbt:"+jqrbt.size()); + + // 20191029取A版完成时间 + if(!version.equals("A")) { + TCComponentForm formA = (TCComponentForm)getItemRevisionFromItem(quotation, "A") + .getRelatedComponent("IMAN_master_form_rev"); + masterForm.setDateProperty("ysr8_FinishedDate", formA.getDateProperty("ysr8_FinishedDate")); + }else + masterForm.setDateProperty("ysr8_FinishedDate", new Date()); + if(totalCost.isEmpty()) + totalCost = "0"; + masterForm.setProperty("ysr8_OfferAmount", totalCost); + StringBuffer robotModelAndNum = new StringBuffer(); + for (String s : jqrbt.keySet()) { + System.out.println(s+"×"+jqrbt.get(s)); + robotModelAndNum.append(s).append("×").append(jqrbt.get(s)).append(";"); + } + System.out.println("key:" + robotModelAndNum); + masterForm.setProperty("ysr8_RobotModelAndNum", robotModelAndNum.toString()); + + masterForm.setProperty("ysr8_NoRobotCost", norobotCost);//TODO + masterForm.setProperty("ysr8_RobotCount", stations[0]); + masterForm.setProperty("ysr8_Positioner", stations[1]); + masterForm.setProperty("ysr8_Fixture", stations[2]); + masterForm.setProperty("ysr8_Grid", stations[3]); + masterForm.setProperty("ysr8_Attachment", stations[4]); + } + } + } + } + } else { + errMsg="未找到正确的报价明细表!"; + } + + } catch (Exception e) { + errMsg = "错误:"+e.getMessage(); + e.printStackTrace(); + }finally { + if(in != null) + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return errMsg; + } + + private static void readBaseInfo(XSSFSheet sheet, Element FormData, String itemID, String version, String remark){ + + String customerName = ""; + String projectName = ""; + String validityPeriod = ""; + String manuCycle = ""; +// String totalCost = ""; + String quotationOrderNo = ""; + String quoteDate = ""; + String approver = ""; + String reviewer = ""; + String creator = ""; + +// sheet.setForceFormulaRecalculation(true); + XSSFRow row = sheet.getRow(5); + if(row != null){ + XSSFCell cell = row.getCell(1); + if(cell != null){ + customerName = cell.getStringCellValue(); + } + cell = row.getCell(6); + if(cell != null){ + quotationOrderNo = cell.getStringCellValue(); + } + } + row = sheet.getRow(6); + if(row != null){ + XSSFCell cell = row.getCell(1); + if(cell != null){ + projectName = cell.getStringCellValue(); + } + cell = row.getCell(6); + if(cell != null){ + //lidy20190301支持日期格式 + if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC && DateUtil.isCellDateFormatted(cell)) { + quoteDate = String.format("%tF", cell.getDateCellValue()).replaceAll("-0", "-").replaceAll("-", "."); + }else + quoteDate = cell.getStringCellValue(); + } + } + row = sheet.getRow(7); + if(row != null){ + XSSFCell cell = row.getCell(1); + if(cell != null){ + validityPeriod = cell.getStringCellValue(); + } + } + row = sheet.getRow(8); + if(row != null){ + XSSFCell cell = row.getCell(1); + if(cell != null){ + manuCycle = cell.getStringCellValue(); + } + cell = row.getCell(5); + if(cell != null){ + approver = cell.getStringCellValue(); + } + cell = row.getCell(6); + if(cell != null){ + reviewer = cell.getStringCellValue(); + } + cell = row.getCell(7); + if(cell != null){ + creator = cell.getStringCellValue(); + } + } + row = sheet.getRow(9); + if(row != null){ + XSSFCell cell = row.getCell(1); + if(cell != null){ + int type = cell.getCellType(); + if(type==XSSFCell.CELL_TYPE_FORMULA || type==XSSFCell.CELL_TYPE_BLANK) { + totalCost = df.format(cell.getNumericCellValue()); + if(totalCost.equals(".00")) + totalCost = ""; + }else { + cell.setCellType(XSSFCell.CELL_TYPE_STRING); + totalCost = cell.getStringCellValue(); + } + } + } + row = sheet.getRow(10); + if(row != null){ + XSSFCell cell = row.getCell(1); + if(cell != null){ + int type = cell.getCellType(); + if(type==XSSFCell.CELL_TYPE_FORMULA || type==XSSFCell.CELL_TYPE_BLANK) { + norobotCost = df.format(cell.getNumericCellValue()); + if(norobotCost.equals(".00")) + norobotCost = ""; + }else { + cell.setCellType(XSSFCell.CELL_TYPE_STRING); + norobotCost = cell.getStringCellValue(); + } + } + } + +// System.out.println("客户名称="+customerName); +// System.out.println("项目名称="+projectName); +// System.out.println("报价有效期="+validityPeriod); +// System.out.println("制造周期="+manuCycle); +// System.out.println("成本总金额="+totalCost); +// System.out.println("报价委托单编号="+quotationOrderNo); +// System.out.println("报价时间="+quoteDate); +// System.out.println("批准="+approver); +// System.out.println("审核="+reviewer); +// System.out.println("作成="+creator); + + Element home1 = FormData.addElement("Home1"); + home1.addElement("PLMItemID").addText(itemID); + try { + home1.addElement("ysr8_CustomerName").addText(URLEncoder.encode(customerName,"UTF-8")); + home1.addElement("ysr8_ProjectName").addText(URLEncoder.encode(projectName,"UTF-8")); + home1.addElement("ysr8_Version").addText(version); + home1.addElement("ValidityPeriod").addText(URLEncoder.encode(validityPeriod,"UTF-8")); + home1.addElement("ManuCycle").addText(URLEncoder.encode(manuCycle,"UTF-8")); + home1.addElement("TotalCost").addText(URLEncoder.encode(totalCost,"UTF-8")); + home1.addElement("QuotationOrderNo").addText(URLEncoder.encode(quotationOrderNo,"UTF-8")); + home1.addElement("QuoteDate").addText(URLEncoder.encode(quoteDate,"UTF-8")); + home1.addElement("Approver").addText(URLEncoder.encode(approver,"UTF-8")); + home1.addElement("Reviewer").addText(URLEncoder.encode(reviewer,"UTF-8")); + home1.addElement("Creator").addText(URLEncoder.encode(creator,"UTF-8")); + home1.addElement("ysr8_Remark").addText(URLEncoder.encode(remark,"UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + + private static void getTotalCostMX(XSSFSheet sheet, Element FormData) throws UnsupportedEncodingException{ + + startRow = 11; + XSSFRow row = sheet.getRow(startRow); + while(startRow<20){ + row = sheet.getRow(startRow); + if(row != null){ + XSSFCell cell = row.getCell(0); + if(cell != null){ + if(cell.getStringCellValue().equals("成本总金额明细")){ + break; + }else{ + startRow++; + } + } + } + } + + if(startRow<20){ + startRow+=3; + } + System.out.println("成本总金额明细startRow="+startRow); + int[] cols = new int[] { 7, 9 }; + row = sheet.getRow(startRow-1); + XSSFCell cell = row.getCell(5); + if(cell != null && cell.getRichStringCellValue().toString().equals("价格")){//TODO Price + cols = new int[] { 5, 6 }; + } + + String cValue = ""; + row = sheet.getRow(startRow); + while(row != null ){ + cell = row.getCell(1); + if(cell != null){ +// System.out.println(row.getCell(0).getRawValue() + ";"+row.getCell(1).getRichStringCellValue()+";"+row.getCell(2).getRawValue() +// +";"+row.getCell(3).getRawValue()+";"+row.getCell(4).getRawValue()+";"+row.getCell(5).getRawValue() +// +";"+row.getCell(6).getRawValue()); + if(cell.getRichStringCellValue().toString().equals("合计")) { + cValue = row.getCell(2).getRawValue(); + stations[0] = cValue==null? "":cValue; + + cValue = row.getCell(3).getRawValue(); + stations[1] = cValue==null? "":cValue; + + cValue = row.getCell(4).getRawValue(); + stations[2] = cValue==null? "":cValue; + + if(cols[0]==7) { + cValue = row.getCell(5).getRawValue(); + stations[3] = cValue==null? "":cValue; + + cValue = row.getCell(6).getRawValue(); + stations[4] = cValue==null? "":cValue; + } + + break; + } + + Element home2 = FormData.addElement("Home2"); + home2.addElement("RelationRowGuid").addText(String.valueOf(stepNo++)); + home2.addElement("RowPrimaryKeys"); + + cValue = row.getCell(0).getRawValue(); + cValue = cValue==null?"":cValue; + home2.addElement("SerialNo").addText(cValue); + + cValue = cell.getRichStringCellValue().toString(); + cValue = cValue==null?"":cValue; + home2.addElement("WorkStationName").addText(URLEncoder.encode(cValue,"UTF-8")); + + cValue = row.getCell(2).getRawValue(); + cValue = cValue==null?"":cValue; + home2.addElement("RobotSystem").addText(URLEncoder.encode(cValue,"UTF-8")); + + cValue = row.getCell(3).getRawValue(); + cValue = cValue==null?"":cValue; + home2.addElement("Positioner").addText(URLEncoder.encode(cValue,"UTF-8")); + + cValue = row.getCell(4).getRawValue(); + cValue = cValue==null?"":cValue; + home2.addElement("Fixture").addText(URLEncoder.encode(cValue,"UTF-8")); + +// cValue = row.getCell(5).getRawValue(); +// cValue = cValue==null?"":cValue; +// home2.addElement("Price").addText(URLEncoder.encode(cValue,"UTF-8")); + cValue = getNum(row.getCell(cols[0])); + home2.addElement("Price").addText(URLEncoder.encode(cValue,"UTF-8")); + + cValue = row.getCell(cols[1]).getStringCellValue(); + cValue = cValue==null?"":cValue; + home2.addElement("Remark").addText(URLEncoder.encode(cValue,"UTF-8")); + + row = sheet.getRow(++startRow); + + }else{ + break; + } + } + } + + private static void getLabourCostMX(XSSFSheet sheet, Element FormData) throws UnsupportedEncodingException{ + + startRow+= 2; + int rowCount = sheet.getLastRowNum(); + XSSFRow row = sheet.getRow(startRow); + while(startRow"+cValue+";"+cell.getCellType()); + + Element home4 = FormData.addElement("Home4"); + home4.addElement("RelationRowGuid").addText(String.valueOf(stepNo++)); + home4.addElement("RowPrimaryKeys"); + home4.addElement("WorkStationName").addText(URLEncoder.encode(WorkStationName,"UTF-8")); + + cValue = cValue==null?"":cValue; + home4.addElement("SerialNo").addText(URLEncoder.encode(cValue,"UTF-8")); + + cValue = row.getCell(1).getRichStringCellValue().toString(); + cValue = cValue==null?"":cValue; + home4.addElement("Name").addText(URLEncoder.encode(cValue,"UTF-8")); + isFind = cValue.equals("机器人本体"); + + modelName = row.getCell(2).getRichStringCellValue().toString(); + modelName = modelName==null?"":modelName; + home4.addElement("Model").addText(URLEncoder.encode(modelName,"UTF-8")); + + XSSFCell countCell = row.getCell(3); + if (countCell == null) { + cValue = ""; + } else if (countCell.getCellType()==0) { + double numericValue = countCell.getNumericCellValue(); + // 格式化为两位小数,避免科学计数法 + System.out.println("numericValue==="+numericValue); + cValue = String.format("%.2f", numericValue); + } else { + cValue = countCell.getStringCellValue(); + } + cValue = cValue == null ? "" : cValue; + + System.out.println("cValue=="+cValue); + + home4.addElement("Count").addText(URLEncoder.encode(cValue, "UTF-8")); + + + + + if( isFind ){ + if(jqrbt.get(modelName) != null){ + jqrbt.put(modelName,jqrbt.get(modelName)+ parseToInt(cValue)); + }else{ + jqrbt.put(modelName, parseToInt(cValue)); + } + } + + cValue = row.getCell(4)==null?"":row.getCell(4).getStringCellValue(); + cValue = cValue==null?"":cValue; + home4.addElement("Unit").addText(URLEncoder.encode(cValue,"UTF-8")); + + cValue = row.getCell(5)==null?"":row.getCell(5).getRawValue(); + cValue = cValue==null?"":cValue; + home4.addElement("UnitPrice").addText(URLEncoder.encode(cValue,"UTF-8")); + + cValue = row.getCell(6)==null?"":row.getCell(6).getRawValue(); + cValue = cValue==null?"":cValue; + home4.addElement("DesignFee").addText(URLEncoder.encode(cValue,"UTF-8")); + + cValue = row.getCell(7)==null?"":row.getCell(7).getRawValue(); + cValue = cValue==null?"":cValue; + home4.addElement("TotalPrice").addText(URLEncoder.encode(cValue,"UTF-8")); + +// System.out.println(sheet.getSheetName()+">"+row.getRowNum()+">"+row.getLastCellNum()); +// System.out.println("cell:"+row.getCell(8)); + cValue = row.getCell(8)==null?"":row.getCell(8).getStringCellValue(); + cValue = cValue==null?"":cValue; + home4.addElement("Brand").addText(URLEncoder.encode(cValue,"UTF-8")); + + cValue = row.getCell(9)==null?"":row.getCell(9).getStringCellValue(); + cValue = cValue==null?"":cValue; + home4.addElement("Remark").addText(URLEncoder.encode(cValue,"UTF-8")); + + } + } + + } + + /* + * 判断是否为整数 + * + * @param str 传入的字符串 + * + * @return 是整数返回true,否则返回false + */ + + private static boolean isInteger(String str) { + Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$"); + return pattern.matcher(str).matches(); + } + private static TCComponentItemRevision getItemRevisionFromItem(TCComponentItem item, String rev) throws TCException { + if (item != null) { +// System.out.println("rev-----" + rev); + AIFComponentContext[] contexts = item.getChildren("revision_list"); + if (contexts != null && contexts.length > 0) { + for (int i = 0; i < contexts.length; i++) { + InterfaceAIFComponent component = contexts[i].getComponent(); + if (component instanceof TCComponentItemRevision) { + TCComponentItemRevision revision = (TCComponentItemRevision) component; + if (revision.getProperty("item_revision_id").equals(rev)) { + return (TCComponentItemRevision) revision; + } + } + } + } + } + return null; + } + private static String getNum(XSSFCell cell) { + String cValue = ""; + int type = cell.getCellType(); +// System.out.println("PriceCell:"+type); + if(type==XSSFCell.CELL_TYPE_FORMULA || type==XSSFCell.CELL_TYPE_BLANK) { + cValue = df.format(cell.getNumericCellValue()); + cValue = cValue.equals(".00") ? "":cValue; + }else { + cValue = cell.getRawValue(); + cValue = cValue==null?"":cValue; + } + return cValue; + } + + + public static int parseToInt(String str) { + if (str == null || str.trim().isEmpty()) { + return 0; + } + try { + return (int) Double.parseDouble(str.trim()); + } catch (NumberFormatException e) { + return 0; + } + } +} diff --git a/src/cust/com/rac/integration/ProjectPlanHandler.java b/src/cust/com/rac/integration/ProjectPlanHandler.java new file mode 100644 index 0000000..e9e6f23 --- /dev/null +++ b/src/cust/com/rac/integration/ProjectPlanHandler.java @@ -0,0 +1,75 @@ +package cust.com.rac.integration; + +import java.io.UnsupportedEncodingException; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; + +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCComponentItemRevision; +import com.teamcenter.rac.kernel.TCPreferenceService; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.MessageBox; + +public class ProjectPlanHandler extends AbstractHandler{ + + private TCSession tcsession = null; + + public Object execute(ExecutionEvent arg0) throws ExecutionException { + // TODO Auto-generated method stub + final AbstractAIFUIApplication app = AIFUtility.getCurrentApplication(); + InterfaceAIFComponent aifComponent = app.getTargetComponent(); + tcsession = (TCSession) app.getSession(); + + if(aifComponent == null){ + MessageBox.post("请选择版本对象执行此功能!", "消息提示", MessageBox.INFORMATION); + return null; + } + if( aifComponent instanceof TCComponentItemRevision){ + TCComponentItemRevision itemRevision = (TCComponentItemRevision)aifComponent; + String itemRevType = itemRevision.getType(); + + String url = tcsession.getPreferenceService().getString(TCPreferenceService.TC_preference_site, "Cust_PLM_To_BPM_URL"); + + String msg = InterationOperation.sendProjectPlanToBPM(itemRevision, url); + MessageBox.post(msg, "消息提示", MessageBox.INFORMATION); + + }else{ + MessageBox.post("请选择版本对象执行此功能!", "消息提示", MessageBox.INFORMATION); + return null; + } + return null; + } + + public Object execute_test(ExecutionEvent arg0) throws ExecutionException { + // TODO Auto-generated method stub + String url = "http://192.168.0.69:3378/YZSoft/BPM/Services/Post.ashx?method=Submit&from_system_id=PLM&process=%e9%a1%b9%e7%9b%ae%e8%bf%9b%e5%ba%a6"; + String name = "陈秀丽"; + + try { + String xml = ""+ + ""+ + ""+ + ""+ + ""+java.net.URLEncoder.encode(name, "UTF-8")+""+ + "chenxiuli"+ + "2017-09-22 00:00:00"+ + "YSR-1111111"+ + ""+ + ""+ + ""; + String paramsXML = java.net.URLEncoder.encode(xml, "UTF-8"); +// String rs = RequestServer.request(url, xml); + String rs = RequestServer.sendFile(url, "C:\\Ⅱ类更改建议单.pdf"); + System.out.println("request="+rs); + } catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/cust/com/rac/integration/QuotationListHandler.java b/src/cust/com/rac/integration/QuotationListHandler.java new file mode 100644 index 0000000..e7e355b --- /dev/null +++ b/src/cust/com/rac/integration/QuotationListHandler.java @@ -0,0 +1,49 @@ +package cust.com.rac.integration; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; + +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCComponentItemRevision; +import com.teamcenter.rac.kernel.TCPreferenceService; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.MessageBox; + +public class QuotationListHandler extends AbstractHandler{ + + private TCSession tcsession = null; + + public Object execute(ExecutionEvent arg0) throws ExecutionException { + // TODO Auto-generated method stub + final AbstractAIFUIApplication app = AIFUtility.getCurrentApplication(); + InterfaceAIFComponent aifComponent = app.getTargetComponent(); + tcsession = (TCSession) app.getSession(); + + if(aifComponent == null){ + MessageBox.post("请选择报价任务版本对象执行此功能!", "消息提示", MessageBox.INFORMATION); + return null; + } + + if( aifComponent instanceof TCComponentItemRevision){ + TCComponentItemRevision QuotationRevision = (TCComponentItemRevision)aifComponent; + String itemRevType = QuotationRevision.getType(); + if(itemRevType.equals("YSR8_QuotationRevision")){ + @SuppressWarnings("deprecation") + String url = tcsession.getPreferenceService().getString(TCPreferenceService.TC_preference_site, "Cust_PLM_To_BPM_URL"); + String msg = InterationOperation.sendQuotationApplicationToBPM(tcsession, QuotationRevision, url); + MessageBox.post(msg, "消息提示", MessageBox.INFORMATION); + }else{ + MessageBox.post("您选择的不是报价任务,请选择正确的文件!", "消息提示", MessageBox.INFORMATION); + return null; + } + }else{ + MessageBox.post("请选择报价任务版本对象!", "消息提示", MessageBox.INFORMATION); + return null; + } + return null; + } + +} diff --git a/src/cust/com/rac/integration/RequestServer.java b/src/cust/com/rac/integration/RequestServer.java new file mode 100644 index 0000000..59b722f --- /dev/null +++ b/src/cust/com/rac/integration/RequestServer.java @@ -0,0 +1,147 @@ +package cust.com.rac.integration; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.URL; + +public class RequestServer { + + public static String request( String urlStr, String params ){ + String result = ""; + + HttpURLConnection httpCon = getHttpConnection(urlStr); + if(httpCon == null){ + return "Error:连接BPM失败!"; + } + try { + PrintWriter printWriter = new PrintWriter(httpCon.getOutputStream()); + printWriter.print(params); + printWriter.flush(); + printWriter.close(); + + InputStream inputStream = httpCon.getInputStream(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + int i = 0; + byte []array = new byte[1024]; + while( (i = inputStream.read(array)) != -1){ + out.write(array, 0, i); + } + result = new String(out.toByteArray(),"GBK"); + } catch (IOException e) { + // TODO Auto-generated catch block + result = "Error:"+e.getMessage(); + e.printStackTrace(); + } + return result; + } + + public static String sendFile( String urlStr, String filePathAndName ){ + + String result = ""; + + try { + HttpURLConnection httpCon = getHttpConnection(urlStr); + if(httpCon == null){ + return "Error:连接BPM失败!"; + } + + File file = new File(filePathAndName); + if(!file.exists()){ + return "Error:文件不存在:"+filePathAndName; + } + String boundary = "----------Ef1ae0gL6GI3KM7Ef1ei4KM7cH2ae0"; + + StringBuffer boundaryBefore = new StringBuffer("--").append(boundary).append("\r\n"); + boundaryBefore.append("Content-Disposition: form-data; name=\"Filename\"\r\n\r\n"); + boundaryBefore.append(file.getName()).append("\r\n").append("--").append(boundary).append("\r\n"); + boundaryBefore.append("Content-Disposition: form-data; name=\"Filedata\"; filename=\"").append(file.getName()).append("\"\r\n"); + boundaryBefore.append("Content-Type: application/octet-stream\r\n\r\n"); + + StringBuffer boundaryAfter = new StringBuffer("\r\n--").append(boundary).append("\r\n"); + boundaryAfter.append("Content-Disposition: form-data; name=\"Upload\"\r\n\r\n"); + boundaryAfter.append("Submit Query\r\n").append("--").append(boundary).append("--\r\n"); + + byte[] boundaryBeforeBytes = boundaryBefore.toString().getBytes("UTF-8"); + byte[] boundaryAfterBytes = boundaryAfter.toString().getBytes("UTF-8"); + + FileInputStream fis = new FileInputStream(filePathAndName);//用来读 + int blockLen = fis.available(); + System.out.println("blockLen="+blockLen); + byte dataBytes[] = new byte[blockLen]; + fis.read(dataBytes); + fis.close(); + + byte[] postBytes = new byte[boundaryBeforeBytes.length + dataBytes.length + boundaryAfterBytes.length]; + System.arraycopy(boundaryBeforeBytes, 0, postBytes, 0, boundaryBeforeBytes.length); + System.arraycopy(dataBytes, 0, postBytes, boundaryBeforeBytes.length, dataBytes.length); + System.arraycopy(boundaryAfterBytes, 0, postBytes, boundaryBeforeBytes.length + dataBytes.length, boundaryAfterBytes.length); + + httpCon.setRequestProperty("User-Agent", "HttpUploadTester Console Application"); + httpCon.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); + OutputStream ots = httpCon.getOutputStream(); + DataOutputStream dataOut = new DataOutputStream(ots); + dataOut.write(postBytes); + dataOut.flush(); + dataOut.close(); +// PrintWriter printWriter = new PrintWriter(ots); +//// String sendStr = boundaryBefore.append("------test upload file--------").append(boundaryAfter).toString(); +// String sendStr = boundaryBefore.append(dataBytes).append(boundaryAfter).toString(); +// System.out.println("sendStr = "+sendStr); +// printWriter.print(postBytes);//postBytes +// printWriter.flush(); +// printWriter.close(); + + InputStream inputStream = httpCon.getInputStream(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + int i = 0; + byte []array = new byte[1024]; + while( (i = inputStream.read(array)) != -1){ + out.write(array, 0, i); + } + result = new String(out.toByteArray(), "UTF-8"); +// System.out.println("result errMsg = "+result); + + } catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + result = "Error:"+e.getMessage(); + e.printStackTrace(); + }catch (FileNotFoundException e) { + // TODO Auto-generated catch block + result = "Error:"+e.getMessage(); + e.printStackTrace(); + } + catch (IOException e) { + // TODO Auto-generated catch block + result = "Error:"+e.getMessage(); + e.printStackTrace(); + } + return result; + } + public static HttpURLConnection getHttpConnection(String urlStr ){ + HttpURLConnection httpCon = null; + + try { + URL url = new URL(urlStr); + httpCon = (HttpURLConnection)url.openConnection(); + httpCon.setDoInput(true); + httpCon.setDoOutput(true); + httpCon.setUseCaches(false); + httpCon.setDefaultUseCaches(false); + httpCon.setRequestMethod("POST"); + httpCon.setConnectTimeout(30*1000); + httpCon.setReadTimeout(30*1000); + } catch(Exception er){ + er.printStackTrace(); + } + return httpCon; + } +} diff --git a/src/cust/com/rac/integration/UnicodeInputStream.java b/src/cust/com/rac/integration/UnicodeInputStream.java new file mode 100644 index 0000000..53d28e1 --- /dev/null +++ b/src/cust/com/rac/integration/UnicodeInputStream.java @@ -0,0 +1,100 @@ +package cust.com.rac.integration; + +import java.io.*; + +/** + * This inputstream will recognize unicode BOM marks and will skip bytes if + * getEncoding() method is called before any of the read(...) methods. + * + * Usage pattern: String enc = "ISO-8859-1"; // or NULL to use systemdefault + * FileInputStream fis = new FileInputStream(file); UnicodeInputStream uin = new + * UnicodeInputStream(fis, enc); enc = uin.getEncoding(); // check and skip + * possible BOM bytes InputStreamReader in; if (enc == null) in = new + * InputStreamReader(uin); else in = new InputStreamReader(uin, enc); + */ +public class UnicodeInputStream extends InputStream { + PushbackInputStream internalIn; + boolean isInited = false; + String defaultEnc; + String encoding; + + private static final int BOM_SIZE = 4; + + public UnicodeInputStream(InputStream in, String defaultEnc) { + internalIn = new PushbackInputStream(in, BOM_SIZE); + this.defaultEnc = defaultEnc; + } + + public String getDefaultEncoding() { + return defaultEnc; + } + + public String getEncoding() { + if (!isInited) { + try { + init(); + } catch (IOException ex) { + IllegalStateException ise = new IllegalStateException( + "Init method failed."); + ise.initCause(ise); + throw ise; + } + } + return encoding; + } + + /** + * Read-ahead four bytes and check for BOM marks. Extra bytes are unread + * back to the stream, only BOM bytes are skipped. + */ + protected void init() throws IOException { + if (isInited) + return; + + byte bom[] = new byte[BOM_SIZE]; + int n, unread; + n = internalIn.read(bom, 0, bom.length); + + if ((bom[0] == (byte) 0x00) && (bom[1] == (byte) 0x00) + && (bom[2] == (byte) 0xFE) && (bom[3] == (byte) 0xFF)) { + encoding = "UTF-32BE"; + unread = n - 4; + } else if ((bom[0] == (byte) 0xFF) && (bom[1] == (byte) 0xFE) + && (bom[2] == (byte) 0x00) && (bom[3] == (byte) 0x00)) { + encoding = "UTF-32LE"; + unread = n - 4; + } else if ((bom[0] == (byte) 0xEF) && (bom[1] == (byte) 0xBB) + && (bom[2] == (byte) 0xBF)) { + encoding = "UTF-8"; + unread = n - 3; + } else if ((bom[0] == (byte) 0xFE) && (bom[1] == (byte) 0xFF)) { + encoding = "UTF-16BE"; + unread = n - 2; + } else if ((bom[0] == (byte) 0xFF) && (bom[1] == (byte) 0xFE)) { + encoding = "UTF-16LE"; + unread = n - 2; + } else { + // Unicode BOM mark not found, unread all bytes + encoding = defaultEnc; + unread = n; + } + // System.out.println("read=" + n + ", unread=" + unread); + + if (unread > 0) + internalIn.unread(bom, (n - unread), unread); + + isInited = true; + } + + public void close() throws IOException { + // init(); + isInited = true; + internalIn.close(); + } + + public int read() throws IOException { + // init(); + isInited = true; + return internalIn.read(); + } +} \ No newline at end of file diff --git a/src/cust/com/rac/integration/XMLDocAPI.java b/src/cust/com/rac/integration/XMLDocAPI.java new file mode 100644 index 0000000..df1bf7a --- /dev/null +++ b/src/cust/com/rac/integration/XMLDocAPI.java @@ -0,0 +1,218 @@ +package cust.com.rac.integration; + +import java.io.FileWriter; +import java.io.IOException; +import java.io.StringWriter; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Iterator; + +import org.dom4j.Document; +import org.dom4j.DocumentException; +import org.dom4j.DocumentHelper; +import org.dom4j.Element; +import org.dom4j.io.OutputFormat; +import org.dom4j.io.XMLWriter; + +import com.teamcenter.rac.kernel.TCComponentForm; +import com.teamcenter.rac.kernel.TCComponentUser; +import com.teamcenter.rac.kernel.TCException; + +public class XMLDocAPI { + + public static String createProjectPlanXML(TCComponentForm masterForm, String project_code){ + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + StringBuffer errMsg = new StringBuffer("Error:"); + try { + TCComponentUser appUer = (TCComponentUser)masterForm.getReferenceProperty("owning_user"); + + Document document = DocumentHelper.createDocument(); + Element FormData = document.addElement("FormData"); + Element pm_project_schedule = FormData.addElement("pm_project_schedule"); + pm_project_schedule.addElement("code").addText(""); + pm_project_schedule.addElement("app_user_name").addText(URLEncoder.encode(appUer.getOSUserName(), "UTF-8")); + pm_project_schedule.addElement("app_user_code").addText(appUer.getUserId()); + pm_project_schedule.addElement("app_date").addText(sdf.format(new Date())); + pm_project_schedule.addElement("project_code").addText(project_code); + pm_project_schedule.addElement("attachment").addText(""); + + XMLWriter xmlWriter = null; + StringWriter stringWrite = new StringWriter(); + + OutputFormat format = OutputFormat.createPrettyPrint(); //转换字符串格式 + format.setEncoding("UTF-8"); + format.setNewlines(true); + + //输出字符串 + xmlWriter = new XMLWriter(stringWrite, format); + xmlWriter.write(document); + xmlWriter.flush(); + xmlWriter.close(); + + return stringWrite.toString(); + + } catch (TCException e) { + // TODO Auto-generated catch block + errMsg.append(e.getMessage()); + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + errMsg.append(e.getMessage()); + e.printStackTrace(); + } + + return errMsg.toString(); + } + + public static String createDeliveryApplicationXML(TCComponentForm masterForm){ + + StringBuffer errMsg = new StringBuffer("Error:"); + try { + Document document = DocumentHelper.createDocument(); + Element FormData = document.addElement("FormData"); + Element EF_YSR_ProjuctSendApp_M = FormData.addElement("EF_YSR_ProjuctSendApp_M"); + EF_YSR_ProjuctSendApp_M.addElement("ProjectCode").addText(URLEncoder.encode(masterForm.getProperty("ysr8_ProjectCode"), "UTF-8")); + EF_YSR_ProjuctSendApp_M.addElement("code").addText(""); + EF_YSR_ProjuctSendApp_M.addElement("ApplicantName").addText(URLEncoder.encode(masterForm.getProperty("ysr8_Applicant"), "UTF-8")); + EF_YSR_ProjuctSendApp_M.addElement("ApplicantCode").addText(""); + EF_YSR_ProjuctSendApp_M.addElement("ApplicantDate").addText(URLEncoder.encode(masterForm.getProperty("ysr8_ApplicantDate"), "UTF-8")); + EF_YSR_ProjuctSendApp_M.addElement("ProjectName").addText(URLEncoder.encode(masterForm.getProperty("ysr8_ProjectName"), "UTF-8")); + EF_YSR_ProjuctSendApp_M.addElement("CustomerName").addText(URLEncoder.encode(masterForm.getProperty("ysr8_CustomerName"), "UTF-8")); + EF_YSR_ProjuctSendApp_M.addElement("TimeRequiremente").addText(URLEncoder.encode(masterForm.getProperty("ysr8_TimeRequiremente"), "UTF-8")); + EF_YSR_ProjuctSendApp_M.addElement("DeliveryDate").addText(URLEncoder.encode(masterForm.getProperty("ysr8_DeliveryDate"), "UTF-8")); + EF_YSR_ProjuctSendApp_M.addElement("Departure").addText(URLEncoder.encode(masterForm.getProperty("ysr8_Departure"), "UTF-8")); + EF_YSR_ProjuctSendApp_M.addElement("Receiver").addText(URLEncoder.encode(masterForm.getProperty("ysr8_Receiver"), "UTF-8")); + EF_YSR_ProjuctSendApp_M.addElement("ReceiverPhone").addText(URLEncoder.encode(masterForm.getProperty("ysr8_ReceiverPhone"), "UTF-8")); + EF_YSR_ProjuctSendApp_M.addElement("ReceiptAddress").addText(URLEncoder.encode(masterForm.getProperty("ysr8_ReceiptAddress"), "UTF-8")); + EF_YSR_ProjuctSendApp_M.addElement("SendInstall").addText(URLEncoder.encode(masterForm.getProperty("ysr8_SendInstall"), "UTF-8")); + EF_YSR_ProjuctSendApp_M.addElement("DeliveryContent").addText(URLEncoder.encode(masterForm.getProperty("ysr8_DeliveryContent"), "UTF-8")); + EF_YSR_ProjuctSendApp_M.addElement("ysr8_Fininshed").addText(URLEncoder.encode(masterForm.getProperty("ysr8_Fininshed"), "UTF-8")); + +// FileWriter fileWriter = null; + XMLWriter xmlWriter = null; + StringWriter stringWrite = new StringWriter(); + + OutputFormat format = OutputFormat.createPrettyPrint(); //转换字符串格式 + format.setEncoding("UTF-8"); + format.setNewlines(true); + + //输出字符串 + xmlWriter = new XMLWriter(stringWrite, format); + xmlWriter.write(document); + xmlWriter.flush(); + xmlWriter.close(); + + return stringWrite.toString(); + + } catch (TCException e) { + // TODO Auto-generated catch block + errMsg.append(e.getMessage()); + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + errMsg.append(e.getMessage()); + e.printStackTrace(); + } + + return errMsg.toString(); + } + + public static String createAcceptComInfoXML(TCComponentForm masterForm, String item_id){ + + StringBuffer errMsg = new StringBuffer("Error:"); + try { + Document document = DocumentHelper.createDocument(); + Element FormData = document.addElement("FormData"); + Element EF_YSR_AcceptClient_M = FormData.addElement("EF_YSR_AcceptClient_M"); + EF_YSR_AcceptClient_M.addElement("code").addText(""); + EF_YSR_AcceptClient_M.addElement("PLMItemID").addText(URLEncoder.encode(item_id, "UTF-8")); + EF_YSR_AcceptClient_M.addElement("ProjectCode").addText(URLEncoder.encode(masterForm.getProperty("ysr8_ProjectCode"), "UTF-8")); + EF_YSR_AcceptClient_M.addElement("SendDate").addText(masterForm.getProperty("ysr8_SendDate")); + EF_YSR_AcceptClient_M.addElement("HopeReceiveDate").addText(masterForm.getProperty("ysr8_HopeReceiveDate")); + EF_YSR_AcceptClient_M.addElement("ProjectName").addText(URLEncoder.encode(masterForm.getProperty("ysr8_ProjectName"), "UTF-8")); + EF_YSR_AcceptClient_M.addElement("CustomerName").addText(URLEncoder.encode(masterForm.getProperty("ysr8_CustomerName"), "UTF-8")); + EF_YSR_AcceptClient_M.addElement("ProjectManager").addText(URLEncoder.encode(masterForm.getProperty("ysr8_ProjectManager"), "UTF-8")); + EF_YSR_AcceptClient_M.addElement("Planner").addText(URLEncoder.encode(masterForm.getProperty("ysr8_Planner"), "UTF-8")); + EF_YSR_AcceptClient_M.addElement("Sales").addText(URLEncoder.encode(masterForm.getProperty("ysr8_Sales"), "UTF-8")); + EF_YSR_AcceptClient_M.addElement("ProductionState").addText(URLEncoder.encode(masterForm.getProperty("ysr8_ProductionState"), "UTF-8")); + EF_YSR_AcceptClient_M.addElement("ProductionDate").addText(masterForm.getProperty("ysr8_ProductionDate")); + EF_YSR_AcceptClient_M.addElement("ProjectState").addText(URLEncoder.encode(masterForm.getProperty("ysr8_ProjectState"), "UTF-8")); + EF_YSR_AcceptClient_M.addElement("PlanFinishDate").addText(masterForm.getProperty("ysr8_PlanFinishDate")); + EF_YSR_AcceptClient_M.addElement("DocumentState").addText(URLEncoder.encode(masterForm.getProperty("ysr8_DocumentState"), "UTF-8")); + EF_YSR_AcceptClient_M.addElement("PlanSendtDate1").addText(masterForm.getProperty("ysr8_PlanSendtDate1")); + EF_YSR_AcceptClient_M.addElement("SpareParts").addText(URLEncoder.encode(masterForm.getProperty("ysr8_SpareParts"), "UTF-8")); + EF_YSR_AcceptClient_M.addElement("PlanSendtDate2").addText(masterForm.getProperty("ysr8_PlanSendtDate2")); + EF_YSR_AcceptClient_M.addElement("CustomerState").addText(URLEncoder.encode(masterForm.getProperty("ysr8_CustomerState"), "UTF-8")); + EF_YSR_AcceptClient_M.addElement("Reason1").addText(URLEncoder.encode(masterForm.getProperty("ysr8_Reason1"), "UTF-8")); + EF_YSR_AcceptClient_M.addElement("ConfirmContent").addText(URLEncoder.encode(masterForm.getProperty("ysr8_ConfirmContent"), "UTF-8")); + EF_YSR_AcceptClient_M.addElement("Others").addText(URLEncoder.encode(masterForm.getProperty("ysr8_Others"), "UTF-8")); + EF_YSR_AcceptClient_M.addElement("OtherContent").addText(URLEncoder.encode(masterForm.getProperty("ysr8_OtherContent"), "UTF-8")); + +// FileWriter fileWriter = null; + XMLWriter xmlWriter = null; + StringWriter stringWrite = new StringWriter(); + + OutputFormat format = OutputFormat.createPrettyPrint(); //转换字符串格式 + format.setEncoding("UTF-8"); + format.setNewlines(true); + + //输出字符串 + xmlWriter = new XMLWriter(stringWrite, format); + xmlWriter.write(document); + xmlWriter.flush(); + xmlWriter.close(); + + return stringWrite.toString(); + + } catch (TCException e) { + // TODO Auto-generated catch block + errMsg.append(e.getMessage()); + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + errMsg.append(e.getMessage()); + e.printStackTrace(); + } + + return errMsg.toString(); + } + + public static String readXmlErrorMsg(String xmlDoc) { + + String errMsg = ""; + try { + Document doc = DocumentHelper.parseText(xmlDoc); + Element rootElt = doc.getRootElement(); // 获取根节点 +// Iterator iter = rootElt.elementIterator("errmsg"); + errMsg = rootElt.elementTextTrim("errmsg"); + System.out.println("errMsg="+errMsg); +// return URLEncoder.encode(errMsg, "UTF-8"); +// return URLEncoder.encode(errMsg, "GBK"); + } catch (DocumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } +// } catch (UnsupportedEncodingException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } + return errMsg; + } + + public static String readXmlTaskID(String xmlDoc) { + + String taskID = ""; + try { + Document doc = DocumentHelper.parseText(xmlDoc); + Element rootElt = doc.getRootElement(); // 获取根节点 + taskID = rootElt.elementTextTrim("taskid"); + } catch (DocumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return taskID; + } +} diff --git a/src/cust/com/rac/integration/test.java b/src/cust/com/rac/integration/test.java new file mode 100644 index 0000000..f3ccb4f --- /dev/null +++ b/src/cust/com/rac/integration/test.java @@ -0,0 +1,112 @@ +package cust.com.rac.integration; + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.StringWriter; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.nio.charset.Charset; + +import org.dom4j.Document; +import org.dom4j.DocumentHelper; +import org.dom4j.Element; +import org.dom4j.io.OutputFormat; +import org.dom4j.io.XMLWriter; + +public class test { + + public static void main(String[] args) throws UnsupportedEncodingException { + // TODO Auto-generated method stub + +// String xml = ""+ +// ""+ +// "失败返回错误描述;成功返回空"+ +// "单号"+ +// "流程ID"+ +// ""; +// String errMsg = XMLDocAPI.readXmlErrorMsg(xml); +// System.out.println(errMsg); + + //createProjectPlanXML(); + String str = "鏃犳晥鐨勬枃浠"; + + // System.out.println(str.getBytes("UTF-8")); + // str = URLEncoder.encode(str, "GBK"); + // System.out.println(str); + // System.out.println(URLEncoder.encode(str, "UTF-8")); + // ByteArrayInputStream in=new ByteArrayInputStream(str.getBytes()); + OutputStream os = System.out; + try { + os.write(str.getBytes()); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + try { + String dc = Charset.defaultCharset().name(); + InputStream is = new ByteArrayInputStream(str.getBytes()); + UnicodeInputStream uin = new UnicodeInputStream(is,dc); + BufferedReader br = new BufferedReader(new InputStreamReader(uin)); + String line = br.readLine(); + while(line != null) + { + System.out.println("line="+line); + line = br.readLine(); + } + + + OutputStreamWriter osw = new OutputStreamWriter(os, dc); + osw.write("111="+str); + osw.close(); + os.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + +// System.out.println(str); +// System.out.println(getUnicode(str)); + } + + public static String getUnicode(String source) { + String result = ""; + + for (int i = 0; i < source.length(); i++) { + result += "\\u"+Integer.toHexString((int) source.charAt(i)); + } + + return result; + } + + public static void createProjectPlanXML(){ + Document document = DocumentHelper.createDocument(); + Element FormData = document.addElement("FormData"); + Element pm_project_schedule = FormData.addElement("pm_project_schedule"); + pm_project_schedule.addElement("code").addText("中国"); + + XMLWriter xmlWriter = null; + StringWriter stringWrite = new StringWriter(); + + OutputFormat format = OutputFormat.createPrettyPrint(); //转换字符串格式 + format.setEncoding("UTF-8"); + format.setNewlines(true); + + //输出字符串 + xmlWriter = new XMLWriter(stringWrite, format); + try { + xmlWriter.write(document); + xmlWriter.flush(); + xmlWriter.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + System.out.println(stringWrite.toString()) ; + } +} diff --git a/src/cust/com/rac/workflow/ComparatorTask.java b/src/cust/com/rac/workflow/ComparatorTask.java new file mode 100644 index 0000000..2435e46 --- /dev/null +++ b/src/cust/com/rac/workflow/ComparatorTask.java @@ -0,0 +1,139 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: ComparatorTask.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-17 下午03:42:41 tyl Ini 初始化文件 +#======================================================================================================= + */ +package cust.com.rac.workflow; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Comparator; +import java.util.Date; + +public class ComparatorTask implements Comparator { + private int count = 0; + + public int compare(Object obj1, Object obj2) { + // Object : id$$$processDate1$$$taskDate1$$$taskFinishDate1 + // id$$$processDate1$$$processName$$$previousTaskFinishDate1 + int returnvalue = 0; + if (obj1 instanceof String) { + String str1 = (String) obj1; + String str2 = (String) obj2; + if (str1.indexOf("$$$") > 0) { + count = 0; + getNum(str1); + if (count == 3) { + // String id1 = str1.substring(0, str1.indexOf("$$$")); + String sep1 = str1.substring(str1.indexOf("$$$") + 3); + String processDate1 = sep1.substring(0, sep1.indexOf("$$$")).trim(); + String processName1 = sep1.substring(sep1.indexOf("$$$") + 3, sep1.lastIndexOf("$$$")).trim(); + String taskCreateDate1 = sep1.substring(sep1.lastIndexOf("$$$") + 3).trim(); + + // String id2 = str2.substring(0, str2.indexOf("$$$")); + String sep2 = str2.substring(str2.indexOf("$$$") + 3); + String processDate2 = sep2.substring(0, sep2.indexOf("$$$")).trim(); + String processName2 = sep2.substring(sep2.indexOf("$$$") + 3, sep2.lastIndexOf("$$$")).trim(); + String taskCreateDate2 = sep2.substring(sep2.lastIndexOf("$$$") + 3).trim(); + + // 先流程创建时间降序,再流程名称排,再任务上步骤完成时间降序 + returnvalue = (compareDate(processDate1, processDate2) == 0 ? (compareStr(processName1, processName2) == 0 ? (compareDate(taskCreateDate1, taskCreateDate2)) : compareStr(processName1, processName2)) : compareDate(processDate2, processDate1)); + } + } + } + return returnvalue; + } + + /** + * compareStr:对String类型排序 + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public int compareStr(String o1, String o2) { + String s1 = (String) o1; + String s2 = (String) o2; + if ((s1 == null) || (s1.length() == 0) || (s2 == null) || (s2.length() == 0)) { return 0; } + int len1 = s1.length(); + int len2 = s2.length(); + int n = Math.min(len1, len2); + char v1[] = s1.toCharArray(); + char v2[] = s2.toCharArray(); + int pos = 0; + while (n-- != 0) { + char c1 = v1[pos]; + char c2 = v2[pos]; + + if (c1 != c2) { return c1 - c2; } + pos++; + } + return len1 - len2; + } + + public int compareDate(String strDate1, String strDate2) { + SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date1; + try { + date1 = simpleDate.parse(strDate1); + Date date2 = simpleDate.parse(strDate2); + if (date1.getTime() > date2.getTime()) { + return 1; + } else { + if (date1.getTime() == date2.getTime()) { + return 0; + } else { + return -1; + } + } + } + catch (ParseException e) { + e.printStackTrace(); + return 0; + } + } + + public static void main(String[] args) { + new ComparatorTask().compareDate("01-3-2011 11:17", "02-3-2011 11:17"); + } + + /** + * compareInt:对int类型排序 + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public int compareInt(Integer o1, Integer o2) { + int val1 = o1.intValue(); + int val2 = o2.intValue(); + return (val1 < val2 ? -1 : (val1 == val2 ? 0 : 1)); + } + + /** + * compareBoolean:对Boolean类型排序 + * @param @return 设定文件 + * @return String 对象类型 + * @throws + * @since CodingExample Ver 1.1 + */ + public int compareBoolean(Boolean o1, Boolean o2) { + return (o1.equals(o2) ? 0 : (o1.booleanValue() == true ? 1 : -1)); + } + + private void getNum(String name) { + if (name.contains("$$$")) { + count++; + getNum(name.substring(name.indexOf("$$$") + 3)); + } else { + return; + } + } +} diff --git a/src/cust/com/rac/workflow/CustAddReleaseHandler.java b/src/cust/com/rac/workflow/CustAddReleaseHandler.java new file mode 100644 index 0000000..3a8c4ba --- /dev/null +++ b/src/cust/com/rac/workflow/CustAddReleaseHandler.java @@ -0,0 +1,73 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: QueryTaskOpinionHandler.java +#======================================================================================================= +# Date time Name Action Description of Change +# +#======================================================================================================= +*/ +package cust.com.rac.workflow; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.commands.IHandler; + +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCAttachmentType; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentProcessType; +import com.teamcenter.rac.kernel.TCComponentTaskTemplate; +import com.teamcenter.rac.kernel.TCComponentTaskTemplateType; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCPreferenceService; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.MessageBox; + +public class CustAddReleaseHandler extends AbstractHandler implements IHandler{ + + /* + * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) + */ + public Object execute(ExecutionEvent arg0) throws ExecutionException { + AbstractAIFUIApplication app = AIFUtility.getCurrentApplication(); + TCSession session = (TCSession) app.getSession(); + try { + TCPreferenceService preSer = session.getPreferenceService(); + String[] value = preSer.getStringArray(4, "Cust_Release_Templates"); + + if(value == null || value.length < 1){ + MessageBox.post("Cust_Release_Templates配置不正确,请联系管理员!", "WARNING", 1); + return null; + } + + TCComponentProcessType procType = (TCComponentProcessType) session.getTypeComponent("Job"); + TCComponentTaskTemplateType taskTempType = (TCComponentTaskTemplateType) session.getTypeComponent("EPMTaskTemplate"); + TCComponentTaskTemplate taskTemp = taskTempType.find(value[0], TCComponentTaskTemplate.PROCESS_TEMPLATE_TYPE); + + InterfaceAIFComponent[] selectComps = app.getTargetComponents(); + if(selectComps.length > 0){ + int[] intArr = new int[selectComps.length]; + TCComponent[] comps = new TCComponent[selectComps.length]; + for (int i = 0; i < intArr.length; i++) { + intArr[i] = TCAttachmentType.TARGET; + comps[i] = (TCComponent) selectComps[i]; + } + procType.create("自动发起", "添加状态", taskTemp, comps, intArr, null); + MessageBox.post("添加状态成功!", "Info", 0); + }else{ + MessageBox.post("请选择对象执行此功能,谢谢!", "WARNING", 1); + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/cust/com/rac/workflow/CustRemoveReleaseHandler.java b/src/cust/com/rac/workflow/CustRemoveReleaseHandler.java new file mode 100644 index 0000000..b238edc --- /dev/null +++ b/src/cust/com/rac/workflow/CustRemoveReleaseHandler.java @@ -0,0 +1,73 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: QueryTaskOpinionHandler.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-17 上午10:18:54 tyl Ini 初始化文件 +#======================================================================================================= +*/ +package cust.com.rac.workflow; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.commands.IHandler; + +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCAttachmentType; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentProcessType; +import com.teamcenter.rac.kernel.TCComponentTaskTemplate; +import com.teamcenter.rac.kernel.TCComponentTaskTemplateType; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCPreferenceService; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.MessageBox; + +public class CustRemoveReleaseHandler extends AbstractHandler implements IHandler{ + + /* + * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) + */ + public Object execute(ExecutionEvent arg0) throws ExecutionException { + AbstractAIFUIApplication app = AIFUtility.getCurrentApplication(); + TCSession session = (TCSession) app.getSession(); + try { + TCPreferenceService preSer = session.getPreferenceService(); + String[] value = preSer.getStringArray(4, "Cust_Release_Templates"); + + if(value == null || value.length < 2){ + MessageBox.post("Cust_Release_Templates配置不正确,请联系管理员!", "WARNING", 1); + return null; + } + + TCComponentProcessType procType = (TCComponentProcessType) session.getTypeComponent("Job"); + TCComponentTaskTemplateType taskTempType = (TCComponentTaskTemplateType) session.getTypeComponent("EPMTaskTemplate"); + TCComponentTaskTemplate taskTemp = taskTempType.find(value[1], TCComponentTaskTemplate.PROCESS_TEMPLATE_TYPE); + + InterfaceAIFComponent[] selectComps = app.getTargetComponents(); + if(selectComps.length > 0){ + int[] intArr = new int[selectComps.length]; + TCComponent[] comps = new TCComponent[selectComps.length]; + for (int i = 0; i < intArr.length; i++) { + intArr[i] = TCAttachmentType.TARGET; + comps[i] = (TCComponent) selectComps[i]; + } + procType.create("自动发起", "移除状态", taskTemp, comps, intArr, null); + MessageBox.post("移除状态成功!", "Info", 0); + }else{ + MessageBox.post("请选择对象执行此功能,谢谢!", "WARNING", 1); + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/cust/com/rac/workflow/ExportSearchResult.java b/src/cust/com/rac/workflow/ExportSearchResult.java new file mode 100644 index 0000000..e57b3be --- /dev/null +++ b/src/cust/com/rac/workflow/ExportSearchResult.java @@ -0,0 +1,159 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: ExportSearchResult.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-17 下午03:43:41 tyl Ini 初始化文件 +#======================================================================================================= +*/ +package cust.com.rac.workflow; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import jxl.Workbook; +import jxl.read.biff.BiffException; +import jxl.write.Label; +import jxl.write.WritableSheet; +import jxl.write.WritableWorkbook; +import jxl.write.WriteException; +import jxl.write.biff.RowsExceededException; +import com.teamcenter.rac.util.MessageBox; + +import cust.com.rac.workflow.SearchResultDialog.SearchResults; + +public class ExportSearchResult { + public ExportSearchResult(List tableInfos, PackExcelInfo excelInfo) { + createExcel(tableInfos, excelInfo); + } + + protected void createExcel(List tableInfos, PackExcelInfo excelInfo) { + Workbook workbook = null; + WritableSheet sourceSheet; + WritableWorkbook writeWorkbook; + File file = new File(excelInfo.getTemplateFileName()); + int listsize = tableInfos.size(); + int pageSize = excelInfo.getPageSize(); + List listTemp = new ArrayList(); + try { + workbook = Workbook.getWorkbook(file); + writeWorkbook = Workbook.createWorkbook(new File(excelInfo.getTargetFileName()), workbook); + sourceSheet = writeWorkbook.getSheet(0); + WritableSheet sheet = writeWorkbook.getSheet(0); + + String sourceSheetName = sourceSheet.getName(); + int page = listsize / pageSize; + if (((listsize % pageSize) > 0)) { + page = page + 1; + } + for (int i = 1; i <= page; i++) { + sheet = null; + listTemp = new ArrayList(); + writeWorkbook.copySheet(sourceSheetName, "第" + i + "页", i); + sheet = writeWorkbook.getSheet("第" + i + "页"); + for (int j = (i - 1) * pageSize; (j < pageSize * (i)) && ((j < listsize)); j++) { + listTemp.add(tableInfos.get(j)); + } + addDataToExcel(sourceSheet, sheet, listTemp, i, excelInfo); + } + writeWorkbook.removeSheet(0); + writeWorkbook.write(); + writeWorkbook.close(); + } catch (BiffException e1) { + e1.printStackTrace(); + } catch (WriteException e1) { + e1.printStackTrace(); + } catch (IOException e1) { + MessageBox.post("请检查:文件是否正在使用,请关闭", "信息提示", MessageBox.INFORMATION); + e1.printStackTrace(); + } + } + + private void addDataToExcel(WritableSheet sourceSheet, WritableSheet sheet, List listTemp, int currentpage, PackExcelInfo excelInfo) { + int row = excelInfo.getInitRow(); + try { + for (row = 0; row < 34; row++) { + for (int col = 0; col < 15; col++) { + if (row >= 4) { + SearchResults result = (SearchResults) listTemp.get(row - 4); + if (result != null) { + if (col == 0) { + insertCell(sourceSheet, sheet, col, row, result.getIndex()); + } else if (col == 1) { + insertCell(sourceSheet, sheet, col, row, result.getTask_name()); + } else if (col == 2) { + insertCell(sourceSheet, sheet, col, row, result.getTask_executor()); + } else if (col == 3) { + insertCell(sourceSheet, sheet, col, row, result.getTask_createDate()); + } else if (col == 4) { + insertCell(sourceSheet, sheet, col, row, result.getTask_finishDate()); + } else if (col == 5) { + insertCell(sourceSheet, sheet, col, row, result.getTask_status()); + } else if (col == 6) { + insertCell(sourceSheet, sheet, col, row, result.getTask_note()); + } else if (col == 7) { + insertCell(sourceSheet, sheet, col, row, result.getTask_type()); + } else if (col == 8) { + insertCell(sourceSheet, sheet, col, row, result.getProcess_executor()); + } else if (col == 9) { + insertCell(sourceSheet, sheet, col, row, result.getProcess_name()); + } else if (col == 10) { + insertCell(sourceSheet, sheet, col, row, result.getProcess_createDate()); + } else if (col == 11) { + insertCell(sourceSheet, sheet, col, row, result.getProcess_finishDate()); + } else if (col == 12) { + insertCell(sourceSheet, sheet, col, row, result.getProcess_lastModeUser()); + } else if (col == 13) { + insertCell(sourceSheet, sheet, col, row, result.getProcess_status()); + } else if (col == 14) { + insertCell(sourceSheet, sheet, col, row, result.getProcess_templateName()); + } + } + } else { + if ((row == 0) && (col == 0)) { + insertCell(sourceSheet, sheet, col, row, excelInfo.getTitle()); + } else + insertCell(sourceSheet, sheet, col, row, ""); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void insertCell(WritableSheet sourceSheet, WritableSheet sheet, int col, int row, String value) { + try { + if ((value.trim().length() == 0) || (value == null)) { + Label lab = new Label(col, row, sourceSheet.getCell(col, row).getContents()); + if (lab != null) { + if (sourceSheet.getCell(col, row) != null) { + if (sourceSheet.getCell(col, row).getCellFormat() != null) { + lab.setCellFormat(sourceSheet.getCell(col, row).getCellFormat()); + } + } + sheet.addCell(lab); + } + } else { + Label lab = new Label(col, row, value); + if (lab != null) { + if (sourceSheet.getCell(col, row) != null) { + if (sourceSheet.getCell(col, row).getCellFormat() != null) { + lab.setCellFormat(sourceSheet.getCell(col, row).getCellFormat()); + } + } + sheet.addCell(lab); + } + } + } catch (RowsExceededException e) { + e.printStackTrace(); + } catch (WriteException e) { + e.printStackTrace(); + } } + } \ No newline at end of file diff --git a/src/cust/com/rac/workflow/PackExcelInfo.java b/src/cust/com/rac/workflow/PackExcelInfo.java new file mode 100644 index 0000000..056bae4 --- /dev/null +++ b/src/cust/com/rac/workflow/PackExcelInfo.java @@ -0,0 +1,122 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: PackExcelInfo.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-17 下午03:45:50 tyl Ini 初始化文件 +#======================================================================================================= +*/ +package cust.com.rac.workflow; + +public class PackExcelInfo { + private String templateFileName = "c:\\viewTaskTemplate.xls"; + private int pageSize = 30; + private String targetFileName = "c:\\report.xls"; + private int initRow = 0; + private int initColumn = 0; + private int secondePageSize = 0; + private String title = ""; + + /** + * @return the initRow + */ + public int getInitRow() { + return initRow; + } + + /** + * @param initRow the initRow to set + */ + public void setInitRow(int initRow) { + this.initRow = initRow; + } + + /** + * @return the title + */ + public String getTitle() { + return title; + } + + /** + * @param title the title to set + */ + public void setTitle(String title) { + this.title = title; + } + + /** + * @return the initColumn + */ + public int getInitColumn() { + return initColumn; + } + + /** + * @param initColumn the initColumn to set + */ + public void setInitColumn(int initColumn) { + this.initColumn = initColumn; + } + + /** + * @return the pageSize + */ + public int getPageSize() { + return pageSize; + } + + /** + * @param pageSize the pageSize to set + */ + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + /** + * @return the targetFileName + */ + public String getTargetFileName() { + return targetFileName; + } + + /** + * @param targetFileName the targetFileName to set + */ + public void setTargetFileName(String targetFileName) { + this.targetFileName = targetFileName; + } + + /** + * @return the templateFileName + */ + public String getTemplateFileName() { + return templateFileName; + } + + /** + * @param templateFileName the templateFileName to set + */ + public void setTemplateFileName(String templateFileName) { + this.templateFileName = templateFileName; + } + + /** + * @return the secondePageSize + */ + public int getSecondePageSize() { + return secondePageSize; + } + + /** + * @param secondePageSize the secondePageSize to set + */ + public void setSecondePageSize(int secondePageSize) { + this.secondePageSize = secondePageSize; + } + +} diff --git a/src/cust/com/rac/workflow/QueryTaskOpinionCommand.java b/src/cust/com/rac/workflow/QueryTaskOpinionCommand.java new file mode 100644 index 0000000..095bf5c --- /dev/null +++ b/src/cust/com/rac/workflow/QueryTaskOpinionCommand.java @@ -0,0 +1,32 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: QueryTaskOpinionCommand.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-17 上午10:19:09 tyl Ini 初始化文件 +#======================================================================================================= +*/ +package cust.com.rac.workflow; + +import com.teamcenter.rac.aif.AbstractAIFCommand; +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.kernel.TCException; + + +public class QueryTaskOpinionCommand extends AbstractAIFCommand { + + public AbstractAIFUIApplication application; + public QueryTaskOpinionCommand(AbstractAIFUIApplication abstractaifapplication) throws TCException { + application = abstractaifapplication; + execute(); + } + + private void execute() throws TCException { + new QueryTaskOpinionOperation(application,""); + } + +} diff --git a/src/cust/com/rac/workflow/QueryTaskOpinionHandler.java b/src/cust/com/rac/workflow/QueryTaskOpinionHandler.java new file mode 100644 index 0000000..3043cad --- /dev/null +++ b/src/cust/com/rac/workflow/QueryTaskOpinionHandler.java @@ -0,0 +1,44 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: QueryTaskOpinionHandler.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-17 上午10:18:54 tyl Ini 初始化文件 +#======================================================================================================= +*/ +package cust.com.rac.workflow; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.commands.IHandler; + +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCException; + +public class QueryTaskOpinionHandler extends AbstractHandler implements IHandler{ + + /* + * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) + */ + public Object execute(ExecutionEvent arg0) throws ExecutionException { + AbstractAIFUIApplication app = AIFUtility.getCurrentApplication(); + try { + QueryTaskOpinionCommand command= new QueryTaskOpinionCommand(app); + command.executeModal(); + } + catch (TCException e) { + e.printStackTrace(); + } + catch (Exception e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/cust/com/rac/workflow/QueryTaskOpinionOperation.java b/src/cust/com/rac/workflow/QueryTaskOpinionOperation.java new file mode 100644 index 0000000..c89c3a2 --- /dev/null +++ b/src/cust/com/rac/workflow/QueryTaskOpinionOperation.java @@ -0,0 +1,1213 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: QueryTaskOpinion.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-17 上午10:29:16 tyl Ini 初始化文件 +# 2011-4-25 上午10:38:00 zyn 修改 横向显示模式修改为纵向显示模式 +# 2011-5-24 上午12:02:00 zyn add 添加流程名称列 +#======================================================================================================= + */ +package cust.com.rac.workflow; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.List; +import java.util.Vector; + +import javax.swing.JFrame; +import javax.swing.JScrollPane; + +import cn.com.customization.util.QueryTaskOpinionTableHead; + +import com.fnd0.services.internal.rac.auditmanager.ProcessHistoryManagementService; +import com.fnd0.services.internal.rac.auditmanager._2012_09.ProcessHistoryManagement.ProcessHistoryAuditRecordStruct; +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aif.kernel.AIFComponentContext; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentDataset; +import com.teamcenter.rac.kernel.TCComponentFnd0AuditLog; +import com.teamcenter.rac.kernel.TCComponentFolder; +import com.teamcenter.rac.kernel.TCComponentForm; +import com.teamcenter.rac.kernel.TCComponentItemRevision; +import com.teamcenter.rac.kernel.TCComponentProcess; +import com.teamcenter.rac.kernel.TCComponentTask; +import com.teamcenter.rac.kernel.TCComponentUser; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.kernel.UserList; +import com.teamcenter.rac.processhistory.BaseProcessHistoryEntry; +import com.teamcenter.rac.util.MessageBox; + +public class QueryTaskOpinionOperation { + private Vector taskNameVector; + private Vector vector_infor; + private String firstTaskName = ""; + private List RouteTaskList = new ArrayList(); + private List AcknowladgeTaskList = new ArrayList(); + private List reviewTaskList = new ArrayList(); + private List doTaskList = new ArrayList(); + private List conditionTaskList = new ArrayList(); + private List addStatusTaskList = new ArrayList(); + private List smallTitleList = new ArrayList(); + private Vector tableTitleVector; + private String[] doAndConditionTaskTitle = { "执行者", "完成时间", "注释" }; + private String[] firstTaskTitle = { "执行者", "提交时间", "注释" }; + private String[] auditingTitle = { "会签", "审核时间", "注释" }; + private String[] notifyTitle = { "会签", "认可时间", "注释" }; + + private List rootProcessHistory; + private List processNames; + + public QueryTaskOpinionOperation(AbstractAIFUIApplication abstractaifuiapplication, String s) { + this.myuiapp = abstractaifuiapplication; + session = (TCSession) this.myuiapp.getSession(); + run(); + } + + //-----------------------------------------------------*-*- + public void readInfo(InterfaceAIFComponent ainterfaceaifcomponent) { + //InterfaceAIFComponent ainterfaceaifcomponent = myuiapp.getTargetComponent(); + if (ainterfaceaifcomponent != null) { + + ProcessHistoryManagementService processhistorymanagementservice = ProcessHistoryManagementService.getService(session); + com.fnd0.services.internal.rac.auditmanager._2012_09.ProcessHistoryManagement.GetProcessHistoryAuditRecordsResponse getprocesshistoryauditrecordsresponse = processhistorymanagementservice.getProcssHistoryAuditRecords((TCComponent) ainterfaceaifcomponent); + com.fnd0.services.internal.rac.auditmanager._2012_09.ProcessHistoryManagement.ProcessHistoryAuditRecordStruct aprocesshistoryauditrecordstruct[] = getprocesshistoryauditrecordsresponse.rootProcessHistoryAuditRecords; + //----------------------------------------------------- + rootProcessHistory = new ArrayList(); + processNames = new ArrayList(); + String as1[]; + int j = (as1 = getprocesshistoryauditrecordsresponse.processNames).length; + for(int i = 0; i < j; i++) + { + String s = as1[i]; + //System.out.println("s================"+s); + processNames.add(s); + } + loadProcessHistoryData(aprocesshistoryauditrecordstruct); +// loadProcessHistoryData(aprocesshistoryauditrecordstruct, rootProcessHistory); +// +// System.out.println("rootProcessHistory.size()="+rootProcessHistory.size()); +// TCComponent comp = ((BaseProcessHistoryEntry)rootProcessHistory.get(0)).getComponent(); +// String[] strNames = comp.getPropertyNames(); +// for(int i = 0; i < strNames.length; i++){ +// System.out.println("strNames["+i+"]="+strNames[i]); +// try { +// System.out.println(comp.getProperty(strNames[i])); +// } catch (TCException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// } + } + } + + private void loadProcessHistoryData(ProcessHistoryAuditRecordStruct aprocesshistoryauditrecordstruct[]) + { + com.fnd0.services.internal.rac.auditmanager._2012_09.ProcessHistoryManagement.ProcessHistoryAuditRecordStruct aprocesshistoryauditrecordstruct1[]; + int j = (aprocesshistoryauditrecordstruct1 = aprocesshistoryauditrecordstruct).length; + //System.out.println("j="+j); + String templateName = ""; + String taskType = ""; + String taskName = ""; + String endTime = ""; + String result = ""; + String pzUser = ""; + String comment = ""; + String eventType = ""; + boolean isNotFirstGobak = false; + + for(int i = 0; i < j; i++) + { + com.fnd0.services.internal.rac.auditmanager._2012_09.ProcessHistoryManagement.ProcessHistoryAuditRecordStruct processhistoryauditrecordstruct = aprocesshistoryauditrecordstruct1[i]; + BaseProcessHistoryEntry baseprocesshistoryentry = new BaseProcessHistoryEntry(); + if(processhistoryauditrecordstruct.auditRecord != null) + { + try { + if(processhistoryauditrecordstruct.auditRecord.getProperty("fnd0EventTypeName").equals("删除")){ + continue; + } + } catch (TCException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + com.fnd0.services.internal.rac.auditmanager._2012_09.ProcessHistoryManagement.ProcessHistoryAuditRecordStruct aprocesshistoryauditrecordstruct2[] = processhistoryauditrecordstruct.childrenAuditRecords; + for(int k = 0; k < aprocesshistoryauditrecordstruct2.length; k++ ){ + int num = 1; + + try { + templateName = aprocesshistoryauditrecordstruct2[k].auditRecord.getProperty("object_name"); + System.out.println("templateName = "+templateName); + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + com.fnd0.services.internal.rac.auditmanager._2012_09.ProcessHistoryManagement.ProcessHistoryAuditRecordStruct aprocesshistoryauditrecordstruct3[] = aprocesshistoryauditrecordstruct2[k].childrenAuditRecords; + for(int m = 0; m < aprocesshistoryauditrecordstruct3.length; m++){ + if(num != 1){ + templateName = ""; + }else{ + num++; + } + try { + taskType = aprocesshistoryauditrecordstruct3[m].auditRecord.getProperty("object_type"); + if(taskType.equals("EPMOrTask")){ + continue; + } + eventType = aprocesshistoryauditrecordstruct3[m].auditRecord.getProperty("fnd0EventTypeName"); + if(eventType.equals("退回")){ + if(isNotFirstGobak){ + continue; + }else{ + isNotFirstGobak = true; + if(taskType.equals("EPMDoTask")){ + taskName = aprocesshistoryauditrecordstruct3[m].auditRecord.getProperty("object_name"); + endTime = aprocesshistoryauditrecordstruct3[m].auditRecord.getProperty("fnd0LoggedDate"); + //result = aprocesshistoryauditrecordstruct3[m].auditRecord.getProperty("task_result"); + comment = aprocesshistoryauditrecordstruct3[m].auditRecord.getProperty("fnd0Comments"); + SignInfo oneSignInfo = new SignInfo(); + oneSignInfo.processName = templateName; + oneSignInfo.num = num++; + oneSignInfo.taskName = taskName; + oneSignInfo.actionTime = endTime; + oneSignInfo.userAction = "Rejected"; + oneSignInfo.userComments = comment; + pzUser = aprocesshistoryauditrecordstruct3[m].auditRecord.getProperty("fnd0UserId"); + TCComponentUser tccomponentuser = UserList.getUser(session, "(" + pzUser + ")"); + if (tccomponentuser != null) { + pzUser = tccomponentuser.toString(); + oneSignInfo.userName = pzUser; + } + vector_infor.add(oneSignInfo); + }else{ + taskName = aprocesshistoryauditrecordstruct3[m].auditRecord.getProperty("object_name"); + getComment( aprocesshistoryauditrecordstruct3[m], templateName, taskName ); + } + } + }else{//else if(!eventType.equals("开始")) + isNotFirstGobak = false; + if(taskType.equals("EPMDoTask")||taskType.equals("EPMConditionTask")){ + taskName = aprocesshistoryauditrecordstruct3[m].auditRecord.getProperty("object_name"); + endTime = aprocesshistoryauditrecordstruct3[m].auditRecord.getProperty("fnd0LoggedDate"); + result = aprocesshistoryauditrecordstruct3[m].auditRecord.getProperty("task_result"); + comment = aprocesshistoryauditrecordstruct3[m].auditRecord.getProperty("fnd0Comments"); + SignInfo oneSignInfo = new SignInfo(); + oneSignInfo.processName = templateName; + oneSignInfo.num = num++; + oneSignInfo.taskName = taskName; + oneSignInfo.actionTime = endTime; + oneSignInfo.userAction = result; + oneSignInfo.userComments = comment; + pzUser = aprocesshistoryauditrecordstruct3[m].auditRecord.getProperty("fnd0UserId"); + TCComponentUser tccomponentuser = UserList.getUser(session, "(" + pzUser + ")"); + if (tccomponentuser != null) { + pzUser = tccomponentuser.toString(); + oneSignInfo.userName = pzUser; + } + System.out.println("oneSignInfo中taskName="+taskName+";user="+pzUser+";endTime="+endTime+";result="+result); + vector_infor.add(oneSignInfo); + } +// else if(taskType.equals("EPMRouteTask")){ +// ProcessHistoryAuditRecordStruct aprocesshistoryauditrecordstruct4[] = aprocesshistoryauditrecordstruct3[m].childrenAuditRecords; +// if(aprocesshistoryauditrecordstruct4.length > 0){ +// taskName = aprocesshistoryauditrecordstruct3[m].auditRecord.getProperty("object_name"); +// getComment( aprocesshistoryauditrecordstruct4[aprocesshistoryauditrecordstruct4.length-1], templateName, taskName ); +// } +// } + else{ + taskName = aprocesshistoryauditrecordstruct3[m].auditRecord.getProperty("object_name"); + getComment( aprocesshistoryauditrecordstruct3[m], templateName, taskName ); +// vector_infor.add(oneSignInfo); + } + } + + System.out.println("taskName="+taskName+";user="+pzUser+";endTime="+endTime+";result="+result); + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + } + } + System.out.println("--------------------------------------------------------------"); + for (int i = 0; i < vector_infor.size(); i++) { + String taskName1 = ((SignInfo) vector_infor.elementAt(i)).taskName.trim(); + String userAction = ((SignInfo) vector_infor.elementAt(i)).userAction; + System.out.println("taskName="+taskName1+";userAction="+userAction); + } + System.out.println("--------------------------------------------------------------"); + } + + private String getComment( ProcessHistoryAuditRecordStruct aprocesshistoryauditrecordstruct, String templateName, String taskName ){ + + String pzUser = ""; + int cnt = 0; +// String taskName = ""; +// try { +// taskName = aprocesshistoryauditrecordstruct.auditRecord.getProperty("object_name"); +// } catch (TCException e1) { +// // TODO Auto-generated catch block +// e1.printStackTrace(); +// } + System.out.println("-----------------------------00"); + ProcessHistoryAuditRecordStruct aprocesshistoryauditrecordstruct1[] = aprocesshistoryauditrecordstruct.childrenAuditRecords; + if( aprocesshistoryauditrecordstruct1 != null ){ + System.out.println("aprocesshistoryauditrecordstruct1.length="+aprocesshistoryauditrecordstruct1.length); + if(aprocesshistoryauditrecordstruct1.length > 1){ + try { + TCComponentFnd0AuditLog auditRecord = aprocesshistoryauditrecordstruct1[aprocesshistoryauditrecordstruct1.length - 1].auditRecord; + if(auditRecord.getProperty("fnd0EventTypeName").equals("提升")){ +// SignInfo oneSignInfo = new SignInfo(); +// oneSignInfo.actionTime = auditRecord.getProperty("fnd0LoggedDate"); +// oneSignInfo.userAction = auditRecord.getProperty("fnd0EventTypeName"); +// oneSignInfo.userComments = auditRecord.getProperty("fnd0Comments"); +// oneSignInfo.processName = templateName; +// oneSignInfo.taskName = taskName; +// pzUser = auditRecord.getProperty("fnd0UserId"); +// TCComponentUser tccomponentuser = UserList.getUser(session, "(" + pzUser + ")"); +// if (tccomponentuser != null) { +// pzUser = tccomponentuser.toString(); +// oneSignInfo.userName = pzUser; +// } +// System.out.println("getComment中taskName="+taskName+";user="+pzUser+";endTime="+oneSignInfo.actionTime+";result="+oneSignInfo.userAction ); +// vector_infor.add(oneSignInfo); + auditRecord = aprocesshistoryauditrecordstruct.auditRecord; + TCComponent[] valid_signoffs = auditRecord.getReferenceProperty("fnd0Object").getReferenceListProperty("valid_signoffs"); + for(int ix = 0; ix < valid_signoffs.length; ix++ ){ + SignInfo oneSignInfo = new SignInfo(); + oneSignInfo.actionTime = valid_signoffs[ix].getProperty("decision_date"); + oneSignInfo.userAction = valid_signoffs[ix].getProperty("decision"); + if(oneSignInfo.userAction.endsWith("89")){ + oneSignInfo.userAction = "认可"; + } + oneSignInfo.userComments = valid_signoffs[ix].getProperty("comments"); + oneSignInfo.processName = templateName; + oneSignInfo.taskName = taskName; + oneSignInfo.userName = valid_signoffs[ix].getProperty("fnd0Assignee"); + System.out.println("getComment中taskName="+taskName+";user="+pzUser+";endTime="+oneSignInfo.actionTime+";result="+oneSignInfo.userAction ); + vector_infor.add(oneSignInfo); + } + }else{ + ProcessHistoryAuditRecordStruct aprocesshistoryauditrecordstruct2[] = aprocesshistoryauditrecordstruct1[aprocesshistoryauditrecordstruct1.length - 1].childrenAuditRecords; + for(cnt = 0; cnt < aprocesshistoryauditrecordstruct2.length; cnt++){ + SignInfo oneSignInfo = new SignInfo(); + + oneSignInfo.actionTime = aprocesshistoryauditrecordstruct2[cnt].auditRecord.getProperty("fnd0LoggedDate"); + oneSignInfo.userAction = aprocesshistoryauditrecordstruct2[cnt].auditRecord.getProperty("fnd0EventTypeName"); + oneSignInfo.userComments = aprocesshistoryauditrecordstruct2[cnt].auditRecord.getProperty("fnd0Comments"); + oneSignInfo.processName = templateName; + oneSignInfo.taskName = taskName; + pzUser = aprocesshistoryauditrecordstruct2[cnt].auditRecord.getProperty("fnd0UserId"); + TCComponentUser tccomponentuser = UserList.getUser(session, "(" + pzUser + ")"); + if (tccomponentuser != null) { + pzUser = tccomponentuser.toString(); + oneSignInfo.userName = pzUser; + } + System.out.println("getComment中taskName="+taskName+";user="+pzUser+";endTime="+oneSignInfo.actionTime+";result="+oneSignInfo.userAction ); + vector_infor.add(oneSignInfo); + } + } + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } +// else{ +// try { +// comment = aprocesshistoryauditrecordstruct.auditRecord.getProperty("fnd0Comments"); +// } catch (TCException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// } + + return ""; + } +// private void loadProcessHistoryData(com.fnd0.services.internal.rac.auditmanager._2012_09.ProcessHistoryManagement.ProcessHistoryAuditRecordStruct aprocesshistoryauditrecordstruct[], List list) +// { +// com.fnd0.services.internal.rac.auditmanager._2012_09.ProcessHistoryManagement.ProcessHistoryAuditRecordStruct aprocesshistoryauditrecordstruct1[]; +// int j = (aprocesshistoryauditrecordstruct1 = aprocesshistoryauditrecordstruct).length; +// System.out.println("j="+j); +// for(int i = 0; i < j; i++) +// { +// com.fnd0.services.internal.rac.auditmanager._2012_09.ProcessHistoryManagement.ProcessHistoryAuditRecordStruct processhistoryauditrecordstruct = aprocesshistoryauditrecordstruct1[i]; +// BaseProcessHistoryEntry baseprocesshistoryentry = new BaseProcessHistoryEntry(); +// if(processhistoryauditrecordstruct.auditRecord != null) +// { +// try { +// System.out.println("1----"+processhistoryauditrecordstruct.auditRecord.getProperty("object_name")); +// } catch (TCException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// baseprocesshistoryentry.setComponent(processhistoryauditrecordstruct.auditRecord); +// list.add(baseprocesshistoryentry); +// ArrayList arraylist = new ArrayList(); +// com.teamcenter.rac.kernel.TCComponentFnd0SecondaryAudit atccomponentfnd0secondaryaudit[] = processhistoryauditrecordstruct.secondaryAuditRecords; +// com.teamcenter.rac.kernel.TCComponentFnd0SecondaryAudit atccomponentfnd0secondaryaudit1[]; +// int l = (atccomponentfnd0secondaryaudit1 = atccomponentfnd0secondaryaudit).length; +// for(int k = 0; k < l; k++) +// { +// com.teamcenter.rac.kernel.TCComponentFnd0SecondaryAudit tccomponentfnd0secondaryaudit = atccomponentfnd0secondaryaudit1[k]; +// baseprocesshistoryentry = new BaseProcessHistoryEntry(); +// baseprocesshistoryentry.setComponent(tccomponentfnd0secondaryaudit); +// arraylist.add(baseprocesshistoryentry); +// try { +// System.out.println("2----"+tccomponentfnd0secondaryaudit.getProperty("object_name")); +// } catch (TCException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// } +// +// com.fnd0.services.internal.rac.auditmanager._2012_09.ProcessHistoryManagement.ProcessHistoryAuditRecordStruct aprocesshistoryauditrecordstruct2[] = processhistoryauditrecordstruct.childrenAuditRecords; +// loadProcessHistoryData(aprocesshistoryauditrecordstruct2, ((List) (arraylist))); +// baseprocesshistoryentry.setChildEntries(arraylist); +// } +// } +// +// } + + public void run() { + try { + InterfaceAIFComponent ainterfaceaifcomponent[] = myuiapp.getTargetComponents(); + if (ainterfaceaifcomponent != null) { + + if (ainterfaceaifcomponent.length > 1) { + MessageBox messagebox = new MessageBox("您只能选择一个对象!", "提示", MessageBox.WARNING); + messagebox.setModal(true); + messagebox.setVisible(true); + return; + } + if (ainterfaceaifcomponent[0] != null) { + if ((ainterfaceaifcomponent[0] instanceof TCComponentItemRevision) || (ainterfaceaifcomponent[0] instanceof TCComponentTask) || + (ainterfaceaifcomponent[0] instanceof TCComponentDataset) || (ainterfaceaifcomponent[0] instanceof TCComponentForm) + || (ainterfaceaifcomponent[0] instanceof TCComponentFolder)) { + // 我现在只是针对: TCComponentItemRevision, TCComponentTask, + // TCComponentDataset, TCComponentForm 这几个对象 + if (!(ainterfaceaifcomponent[0] instanceof TCComponentTask)) { + TCComponent com = (TCComponent) ainterfaceaifcomponent[0]; + AIFComponentContext[] aif = com.whereReferenced(); + if (aif != null && aif.length > 0) { + List listProcess = new ArrayList(); + for (int j = 0; j < aif.length; j++) { + TCComponent tccomponent = (TCComponent) aif[j].getComponent(); + if (tccomponent instanceof TCComponentTask) { + System.out.println("----"); + System.out.println("object_name="+((TCComponentTask) tccomponent).getProperty("object_name")); + listProcess.add((TCComponentTask) tccomponent); + } + } + if(listProcess.size()>0){ + viewWfInfo(listProcess,ainterfaceaifcomponent[0]); + }else{ + MessageBox messagebox = new MessageBox("当前对象无引用流程!!!", "提示", MessageBox.WARNING); + messagebox.setModal(true); + messagebox.setVisible(true); + } + + }else{ + MessageBox messagebox = new MessageBox("当前对象无引用流程!!!", "提示", MessageBox.WARNING); + messagebox.setModal(true); + messagebox.setVisible(true); + } + } else { + if (ainterfaceaifcomponent[0] instanceof TCComponentTask) { + viewWfInfo(ainterfaceaifcomponent[0]); + } + } + } else { + MessageBox messagebox = new MessageBox("请选择正确类型的对象!", "提示", MessageBox.WARNING); + messagebox.setModal(true); + messagebox.setVisible(true); + return; + } + } else { + MessageBox messagebox = new MessageBox("请选择对象!", "提示", MessageBox.WARNING); + messagebox.setModal(true); + messagebox.setVisible(true); + return; + } + } + } + catch (Exception exception) { + exception.printStackTrace(); + } + } + + public void viewWfInfo(List listProcess, InterfaceAIFComponent ainterfaceaifcomponent) { + System.out.println("viewWfInfo(List listProcess)...........viewWfInfo"); + taskNameVector = new Vector(); + smallTitleList = new ArrayList(); + tableTitleVector = new Vector(); + Vector fileNameVector = new Vector(); + for(int j=0;j vector_infor = readerFromText(fileNameVector); + vector_infor = new Vector(); + vector_infor = readerFromText(fileNameVector); + readInfo( ainterfaceaifcomponent ); + System.out.println("--------------------------------------------------------------"); + for (int i = 0; i < vector_infor.size(); i++) { + String taskName = ((SignInfo) vector_infor.elementAt(i)).taskName.trim(); + String userAction = ((SignInfo) vector_infor.elementAt(i)).userAction; + System.out.println("taskName="+taskName+";userAction="+userAction); + } + System.out.println("--------------------------------------------------------------"); + Object[][] objData = null; + objData = getDataAuditing(vector_infor, taskNameVector); + QueryTaskOpinionTableHead tableHeadTestPanel = new QueryTaskOpinionTableHead(); + tableHeadTestPanel.setAutoscrolls(true); + //tableHeadTestPanel.settitleArray(smallTitleList); + //更改显示模式 2011.4.22 + tableHeadTestPanel.setobjArray(objData); + tableHeadTestPanel.setTableHeadTestModel(tableTitleVector); + tableHeadTestPanel.initColumnSizes(); + String processName = null; + try { + processName = listProcess.get(0).getRoot().getProperty("job_name"); + } catch (TCException e) { + e.printStackTrace(); + }// 流程名 + String processCreator = null; + try { + processCreator = listProcess.get(0).getRoot().getProperty("owning_user"); + } catch (TCException e) { + e.printStackTrace(); + }// 流程创建者 + String processCreateDate = null; + try { + processCreateDate = listProcess.get(0).getRoot().getProperty("creation_date"); + } catch (TCException e) { + e.printStackTrace(); + }// 流程创建时间 + JFrame frame = new JFrame("流程名:" + processName + " 流程创建者:" + processCreator + " 流程创建时间:" + processCreateDate); + tableHeadTestPanel.setOpaque(true); // content panes + JScrollPane scrollPane = new JScrollPane(tableHeadTestPanel); + scrollPane.setAutoscrolls(true); + frame.setContentPane(scrollPane); + frame.pack(); + frame.setLocation(200, 100); + frame.setVisible(true); + + } + + public void viewWfInfo(InterfaceAIFComponent interfaceaifcomponent_top) { + System.out.println("viewWfInfo(InterfaceAIFComponent interfaceaifcomponent_top)...........viewWfInfo"); + if (interfaceaifcomponent_top instanceof TCComponentTask) { + TCComponentTask tccomponenttask = (TCComponentTask) interfaceaifcomponent_top; + taskNameVector = new Vector(); + smallTitleList = new ArrayList(); + tableTitleVector = new Vector(); + try { + TCComponentTask tccomponent_root_task = tccomponenttask.getRoot(); +// AIFComponentContext[] aif = tccomponent_root_task.getChildren();//remove by -*-*- + AIFComponentContext[] aif = tccomponent_root_task.getChildren("child_tasks"); + for (int i = 0; i < aif.length; i++) { + if (aif[i].getComponent() instanceof TCComponentTask) { + TCComponentTask task = (TCComponentTask) aif[i].getComponent(); + if (task.getPrevious() == null) { + firstTaskName = task.toString(); + taskNameVector.add(firstTaskName); + break; + } + } + } + getNextTask(aif); + + String stringInformation = tccomponenttask.getAuditInfo(true);// 此函数的值就是系统调用后所得到的值 + + String fileName = "D:\\流程审核.txt"; + // 把获得的信息写到一个文本文件里面 + writeToText(fileName, stringInformation); + // 读取某一个文本文件的信息 +// Vector vector_infor = readerFromText(fileName); + vector_infor = new Vector(); + vector_infor = readerFromText(fileName); + readInfo( tccomponenttask ); + Object[][] objData = null; + objData = getDataAuditing(vector_infor, taskNameVector); + QueryTaskOpinionTableHead tableHeadTestPanel = new QueryTaskOpinionTableHead(); + tableHeadTestPanel.setAutoscrolls(true); + //tableHeadTestPanel.settitleArray(smallTitleList); + //更改显示模式 2011.4.22 + tableHeadTestPanel.setobjArray(objData); + tableHeadTestPanel.setTableHeadTestModel(tableTitleVector); + tableHeadTestPanel.initColumnSizes(); + String processName = tccomponenttask.getProperty("job_name");// 流程名 + String processCreator = tccomponenttask.getProperty("owning_user");// 流程创建者 + String processCreateDate = tccomponenttask.getProperty("creation_date");// 流程创建时间 + JFrame frame = new JFrame("流程名:" + processName + " 流程创建者:" + processCreator + " 流程创建时间:" + processCreateDate); + tableHeadTestPanel.setOpaque(true); // content panes + JScrollPane scrollPane = new JScrollPane(tableHeadTestPanel); + scrollPane.setAutoscrolls(true); + frame.setContentPane(scrollPane); + frame.pack(); + frame.setLocation(200, 100); + frame.setVisible(true); + } + catch (TCException e2) { + e2.printStackTrace(); + } + } else { + MessageBox.post("流传审核选择的对象不对,请重新选择", "提示", MessageBox.INFORMATION); + } + } + + /* + * 按照流程走向顺序依次遍历查找相对应的"子流程" + */ + public void getNextTask(AIFComponentContext[] aif) { + for (int i = 0; i < aif.length; i++) { + InterfaceAIFComponent interfaceaifcomponent = aif[i].getComponent(); + //System.out.println("interfaceaifcomponent.getType()"+interfaceaifcomponent.getType()); + if (interfaceaifcomponent instanceof TCComponentTask) { + //System.out.println("---------------getNextTask------------------"); + if ((interfaceaifcomponent.getType().equals("EPMAcknowledgeTask"))) { + AcknowladgeTaskList.add(interfaceaifcomponent.toString()); + if (!taskNameVector.contains(interfaceaifcomponent.toString())) { + taskNameVector.addElement(interfaceaifcomponent.toString()); + } + } + if ((interfaceaifcomponent.getType().equals("EPMReviewTask"))) { + reviewTaskList.add(interfaceaifcomponent.toString()); + if (!taskNameVector.contains(interfaceaifcomponent.toString())) { + taskNameVector.addElement(interfaceaifcomponent.toString()); + } + } + if ((interfaceaifcomponent.getType().equals("EPMDoTask"))) { + doTaskList.add(interfaceaifcomponent.toString()); + if (!taskNameVector.contains(interfaceaifcomponent.toString())) { + taskNameVector.addElement(interfaceaifcomponent.toString()); + } + } + if ((interfaceaifcomponent.getType().equals("EPMConditionTask"))) { + conditionTaskList.add(interfaceaifcomponent.toString()); + if (!taskNameVector.contains(interfaceaifcomponent.toString())) { + taskNameVector.addElement(interfaceaifcomponent.toString()); + } + } + if ((interfaceaifcomponent.getType().equals("EPMAddStatusTask"))) { + addStatusTaskList.add(interfaceaifcomponent.toString()); + if (!taskNameVector.contains(interfaceaifcomponent.toString())) { + taskNameVector.addElement(interfaceaifcomponent.toString()); + } + } + if ((interfaceaifcomponent.getType().equals("EPMRouteTask"))) { + RouteTaskList.add(interfaceaifcomponent.toString()); + if (!taskNameVector.contains(interfaceaifcomponent.toString())) { + taskNameVector.addElement(interfaceaifcomponent.toString()); + } + } + } + } + } + + /* + * 构造表中数据 + */ + public Object[][] getDataAuditing(Vector vector_infor, Vector taskNameVector1) { + // System.out.println("taskNameVector.............." + taskNameVector); + // System.out.println("vector_infor.............." + + // vector_infor.size()); + int columWidth = 0; + if (vector_infor != null) { + columWidth = 6 + 1; + } + + Object[][] objData = new Object[vector_infor.size() + 1][columWidth]; + if (vector_infor.size() == 0) { + objData = new Object[vector_infor.size() + 1][columWidth]; + tableTitleVector.add(firstTaskName + "(首任务)"); + for (int j = 0; j < firstTaskTitle.length; j++) { + smallTitleList.add(firstTaskTitle[j]); + } + } + // 代表行 + int countNum = 0; + if ((vector_infor != null) && (vector_infor.size() > 0)) { + boolean isRefused = false; + String taskName = ""; + String userAction = ""; + for (int i = 0; i < vector_infor.size(); i++) { + taskName = ((SignInfo) vector_infor.elementAt(i)).taskName.trim(); + userAction = ((SignInfo) vector_infor.elementAt(i)).userAction; + System.out.println("taskName="+taskName+";userAction="+userAction); + //if (taskNameVector.contains(taskName)) { + if (userAction.equals("Completed") || userAction.equalsIgnoreCase("true") || userAction.equalsIgnoreCase("false")||userAction.equals("完成")) {//userAction.equals("完成") + if (taskName.equals(firstTaskName.trim())) { + if (!tableTitleVector.contains(firstTaskName + "(首任务)")) { + tableTitleVector.add(firstTaskName + "(首任务)"); + for (int j = 0; j < firstTaskTitle.length; j++) { + smallTitleList.add(firstTaskTitle[j]); + } + } + isRefused = false; + objData[i][0] = ((SignInfo) vector_infor.elementAt(i)).processName; + objData[i][1] = ((SignInfo) vector_infor.elementAt(i)).taskName; + if(userAction.equals("Completed")) + objData[i][2] = "完成"; + else if(userAction.equalsIgnoreCase("true")) + objData[i][2] = "是"; + else if(userAction.equalsIgnoreCase("false")) + objData[i][2] = "否"; + objData[i][3] = ((SignInfo) vector_infor.elementAt(i)).userName; + objData[i][4] = ((SignInfo) vector_infor.elementAt(i)).actionTime; + objData[i][5] = ((SignInfo) vector_infor.elementAt(i)).userComments; + } else { + if ((doTaskList.contains(taskName)) || (conditionTaskList.contains(taskName) || addStatusTaskList.contains(taskName))) { + int col = 0; + if (doTaskList.contains(taskName)) { + if (!tableTitleVector.contains("【DOTask】" + taskName)) { + tableTitleVector.add("【DOTask】" + taskName); + for (int j = 0; j < doAndConditionTaskTitle.length; j++) { + smallTitleList.add(doAndConditionTaskTitle[j]); + } + } + col = tableTitleVector.indexOf("【DOTask】" + taskName); + } else if (conditionTaskList.contains(taskName)) { + if (!tableTitleVector.contains("【ConditionTask】" + taskName)) { + tableTitleVector.add("【ConditionTask】"+ taskName); + for (int j = 0; j < doAndConditionTaskTitle.length; j++) { + smallTitleList.add(doAndConditionTaskTitle[j]); + } + } + col = tableTitleVector.indexOf("【ConditionTask】" + taskName); + } else if (addStatusTaskList.contains(taskName)) { + if (!tableTitleVector.contains("【AddStatusTask】" + taskName)) { + tableTitleVector.add("【AddStatusTask】"+ taskName); + for (int j = 0; j < doAndConditionTaskTitle.length; j++) { + smallTitleList.add(doAndConditionTaskTitle[j]); + } + } + col = tableTitleVector.indexOf("【AddStatusTask】" + taskName); + } + if (isRefused) { + for (int m = col + 1; m < columWidth; m++) { + objData[i][m] = ""; + } + } + + isRefused = false; + objData[i][0] = ((SignInfo) vector_infor.elementAt(i)).processName; + objData[i][1] = ((SignInfo) vector_infor.elementAt(i)).taskName; + if(userAction.equals("Completed")) + objData[i][2] = "完成"; + else if(userAction.equalsIgnoreCase("true")) + objData[i][2] = "是"; + else if(userAction.equalsIgnoreCase("false")) + objData[i][2] = "否"; + objData[i][3] = ((SignInfo) vector_infor.elementAt(i)).userName; + objData[i][4] = ((SignInfo) vector_infor.elementAt(i)).actionTime; + objData[i][5] = ((SignInfo) vector_infor.elementAt(i)).userComments; + } + } + } else if ((userAction.equals("Rejected")||userAction.equals("拒绝"))) {//userAction.equals("拒绝") + if ((reviewTaskList.contains(taskName)) || (AcknowladgeTaskList.contains(taskName))) { + if (!tableTitleVector.contains(taskName)) { + tableTitleVector.add(taskName); + for (int j = 0; j < auditingTitle.length; j++) { + smallTitleList.add(auditingTitle[j]); + } + } else { + if (AcknowladgeTaskList.contains(taskName)) { + tableTitleVector.add(taskName); + for (int j = 0; j < notifyTitle.length; j++) { + smallTitleList.add(notifyTitle[j]); + } + } + } + int col = tableTitleVector.indexOf(taskName); + objData[i][0] = ((SignInfo) vector_infor.elementAt(i)).processName; + objData[i][1] = ((SignInfo) vector_infor.elementAt(i)).taskName; + //objData[i][2] = ((SignInfo) vector_infor.elementAt(i)).userAction; + objData[i][2] = "拒绝"; + objData[i][3] = ((SignInfo) vector_infor.elementAt(i)).userName; + objData[i][4] = ((SignInfo) vector_infor.elementAt(i)).actionTime; + objData[i][5] = ((SignInfo) vector_infor.elementAt(i)).userComments; + ++countNum; + isRefused = true; + } + } else if (userAction.equals("Approved")||userAction.equals("批准") || (userAction.equals("认可"))) {//(userAction.equals("批准")) || (userAction.equals("认可")) + if ((reviewTaskList.contains(taskName)) || (AcknowladgeTaskList.contains(taskName)) || RouteTaskList.contains(taskName)) { + if (!tableTitleVector.contains(taskName)) { + if (reviewTaskList.contains(taskName)) { + tableTitleVector.add(taskName); + for (int j = 0; j < auditingTitle.length; j++) { + smallTitleList.add(auditingTitle[j]); + } + } else { + if (AcknowladgeTaskList.contains(taskName)) { + tableTitleVector.add(taskName); + for (int j = 0; j < notifyTitle.length; j++) { + smallTitleList.add(notifyTitle[j]); + } + } + } + } + int col = tableTitleVector.indexOf(taskName); + // 目的:如果是拒绝后的,将其所在列后面的清空 + if (isRefused) { + // 目的:如果是拒绝后的,将其所在列后面的清空 + for (int m = col + 1; m < columWidth; m++) { + objData[i][m] = ""; + } + } + isRefused = false; + objData[i][0] = ((SignInfo) vector_infor.elementAt(i)).processName; + objData[i][1] = ((SignInfo) vector_infor.elementAt(i)).taskName; + //objData[i][2] = ((SignInfo) vector_infor.elementAt(i)).userAction; + objData[i][2] = "批准"; + objData[i][3] = ((SignInfo) vector_infor.elementAt(i)).userName; + objData[i][4] = ((SignInfo) vector_infor.elementAt(i)).actionTime; + objData[i][5] = ((SignInfo) vector_infor.elementAt(i)).userComments; + } + }else if(userAction.equals("提升") || userAction.equals("skipped")){ + if ( AcknowladgeTaskList.contains(taskName)) { + if (!tableTitleVector.contains(taskName)) { + if (reviewTaskList.contains(taskName)) { + tableTitleVector.add(taskName); + for (int j = 0; j < auditingTitle.length; j++) { + smallTitleList.add(auditingTitle[j]); + } + } else { + if (AcknowladgeTaskList.contains(taskName)) { + tableTitleVector.add(taskName); + for (int j = 0; j < notifyTitle.length; j++) { + smallTitleList.add(notifyTitle[j]); + } + } + } + } + int col = tableTitleVector.indexOf(taskName); + // 目的:如果是拒绝后的,将其所在列后面的清空 + if (isRefused) { + // 目的:如果是拒绝后的,将其所在列后面的清空 + for (int m = col + 1; m < columWidth; m++) { + objData[i][m] = ""; + } + } + isRefused = false; + objData[i][0] = ((SignInfo) vector_infor.elementAt(i)).processName; + objData[i][1] = ((SignInfo) vector_infor.elementAt(i)).taskName; + //objData[i][2] = ((SignInfo) vector_infor.elementAt(i)).userAction; + objData[i][2] = "提升"; + objData[i][3] = ((SignInfo) vector_infor.elementAt(i)).userName; + objData[i][4] = ((SignInfo) vector_infor.elementAt(i)).actionTime; + objData[i][5] = ((SignInfo) vector_infor.elementAt(i)).userComments; + } + }else{//add by -*-*- + if (!tableTitleVector.contains(taskName)) { + if (reviewTaskList.contains(taskName)) { + tableTitleVector.add(taskName); + for (int j = 0; j < auditingTitle.length; j++) { + smallTitleList.add(auditingTitle[j]); + } + } else { + if (AcknowladgeTaskList.contains(taskName)) { + tableTitleVector.add(taskName); + for (int j = 0; j < notifyTitle.length; j++) { + smallTitleList.add(notifyTitle[j]); + } + } + } + } + int col = tableTitleVector.indexOf(taskName); + // 目的:如果是拒绝后的,将其所在列后面的清空 + if (isRefused) { + // 目的:如果是拒绝后的,将其所在列后面的清空 + for (int m = col + 1; m < columWidth; m++) { + objData[i][m] = ""; + } + } + isRefused = false; + objData[i][0] = ((SignInfo) vector_infor.elementAt(i)).processName; + objData[i][1] = ((SignInfo) vector_infor.elementAt(i)).taskName; + objData[i][2] = ((SignInfo) vector_infor.elementAt(i)).userAction; + //objData[i][2] = "开始"; + objData[i][3] = ((SignInfo) vector_infor.elementAt(i)).userName; + objData[i][4] = ((SignInfo) vector_infor.elementAt(i)).actionTime; + objData[i][5] = ((SignInfo) vector_infor.elementAt(i)).userComments; + } + //} + } + } + return objData; + } + + /** + * 把字符流数据写入一个文本文件里面(writeToText) *************流程处理 + */ + public void writeToText(String fileName, String stringInformation) { + PrintWriter pw; + try { + pw = new PrintWriter(new FileWriter(fileName)); + pw.println(stringInformation); + pw.close(); + } + catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * 从一个文本文件里面读取信息(readerFromText) *************流程处理 + */ + public Vector readerFromText(String fileName) { + System.out.println("readerFromText(String) - start"); //$NON-NLS-1$ + BufferedReader br = null; + Vector vs = new Vector(); + try { + int num = 1; + br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName))); + String strLine = null; + String processName = ""; + while ((strLine = br.readLine()) != null) { + if((strLine.startsWith("流程模板名"))){ + System.out.println("strLine=="+strLine); + String [] temps = strLine.split(" "); + int y=0; + System.out.println(" temps.length=="+ temps.length); + for (int i = 0; i < temps.length; i++) { + if (temps[i].trim().length() != 0) { + ++y; + if (y == 2) { + processName = temps[i].trim();//获得流程名称 + } + } + } + System.out.println("processName=="+processName); + }else if ((strLine.startsWith("完成")) || (strLine.startsWith("拒绝")) || (strLine.startsWith("批准")) ) {//|| (strLine.startsWith("提升")) + String[] temp = strLine.split(" "); + int k = 0; + String taskName = ""; + String pzUser = ""; + String pzTime = ""; + + for (int i = 0; i < temp.length; i++) { + if (temp[i].trim().length() != 0) { + ++k; + if (k == 2) { + taskName = temp[i].trim(); + } + if (k == 3) { + pzTime = temp[i].trim(); + } + if (k == 4) { + pzTime = pzTime + " " + temp[i].trim(); + } + if (k == 5) { + pzUser = temp[i].trim(); + break; + } + } + } + + try { + TCComponentUser tccomponentuser1 = UserList.getUser(session, "(" + pzUser + ")"); + if (tccomponentuser1 != null) { + pzUser = tccomponentuser1.toString(); + } + } + catch (TCException e) { + e.printStackTrace(); + } + + SignInfo oneSignInfo = new SignInfo(); + + oneSignInfo.userName = pzUser; + oneSignInfo.actionTime = pzTime; + if(num==1){ + oneSignInfo.processName = processName; + }else{ + oneSignInfo.processName = ""; + } + + if ((strLine.startsWith("完成"))) { + oneSignInfo.taskName = taskName; + if (taskNameVector.contains(taskName)) { + if (strLine.startsWith("完成")) { + oneSignInfo.userAction = "完成"; + if ((!reviewTaskList.contains(taskName)) && (!AcknowladgeTaskList.contains(taskName))) { + br.readLine(); + br.mark(400); + strLine = br.readLine(); + if (!(strLine.startsWith(" ") || strLine.startsWith("\t"))) { + br.reset(); + } else { + String Comments = strLine.trim(); + while((strLine = br.readLine()) != null){ + if(strLine.equals("")){ + break; + }else{ + Comments = Comments + "\t"+strLine.trim(); + } + } + oneSignInfo.userComments = Comments; + } + oneSignInfo.num = num++; + vs.add(oneSignInfo); + } + } + } + } else { + if ((strLine.startsWith("批准"))) { + oneSignInfo.userAction = "批准"; + } else { + oneSignInfo.userAction = "拒绝"; + } + strLine = br.readLine(); + temp = strLine.split(":"); + taskName = temp[1].trim(); + if (taskNameVector.contains(taskName)) { + oneSignInfo.taskName = taskName; + if (AcknowladgeTaskList.contains(taskName)) { + oneSignInfo.userAction = "认可"; + } + br.mark(400); + strLine = br.readLine(); + if (!(strLine.startsWith(" ") || strLine.startsWith("\t"))) { + br.reset(); + } else { + String Comments = strLine.trim(); + while((strLine = br.readLine()) != null){ + if(strLine.equals("")){ + break; + }else{ + Comments = Comments + "\t"+strLine.trim(); + } + } + oneSignInfo.userComments = Comments; + } + oneSignInfo.num = num++; + vs.add(oneSignInfo); + } + } + } + } + br.close(); + } + catch (FileNotFoundException e1) { + e1.printStackTrace(); + } + catch (IOException e2) { + e2.printStackTrace(); + } + System.out.println("readerFromText(String) - end" + vs.size()); //$NON-NLS-1$ + return vs; + } + + + /** + * 从一个文本文件里面读取信息(readerFromText) *************流程处理 + */ + public Vector readerFromText(Vector fileNameVector) { + System.out.println("readerFromText(String) - start"); //$NON-NLS-1$ + BufferedReader br = null; + Vector vs = new Vector(); + for(int n = 0; n < fileNameVector.size(); n++){ + int num = 1; + try { + br = new BufferedReader(new InputStreamReader(new FileInputStream(fileNameVector.get(n)))); + String strLine = null; + String processName = ""; + while ((strLine = br.readLine()) != null) { + if((strLine.startsWith("流程模板名"))){ + System.out.println("strLine=="+strLine); + String [] temps = strLine.split(" "); + int y=0; + System.out.println(" temps.length=="+ temps.length); + for (int i = 0; i < temps.length; i++) { + if (temps[i].trim().length() != 0) { + ++y; + if (y == 2) { + processName = temps[i].trim();//获得流程名称 + } + } + } + System.out.println("processName=="+processName); + }else + if ((strLine.startsWith("完成")) || (strLine.startsWith("拒绝")) || (strLine.startsWith("批准"))) { + String[] temp = strLine.split(" "); + int k = 0; + String taskName = ""; + String pzUser = ""; + String pzTime = ""; + + for (int i = 0; i < temp.length; i++) { + if (temp[i].trim().length() != 0) { + ++k; + if (k == 2) { + taskName = temp[i].trim(); + } + if (k == 3) { + pzTime = temp[i].trim(); + } + if (k == 4) { + pzTime = pzTime + " " + temp[i].trim(); + } + if (k == 5) { + pzUser = temp[i].trim(); + break; + } + } + } + + try { + TCComponentUser tccomponentuser1 = UserList.getUser(session, "(" + pzUser + ")"); + if (tccomponentuser1 != null) { + pzUser = tccomponentuser1.toString(); + } + } + catch (TCException e) { + e.printStackTrace(); + } + + SignInfo oneSignInfo = new SignInfo(); + + oneSignInfo.userName = pzUser; + oneSignInfo.actionTime = pzTime; + if(num==1){ + oneSignInfo.processName = processName; + }else{ + oneSignInfo.processName = ""; + } + + + if ((strLine.startsWith("完成"))) { + oneSignInfo.taskName = taskName; + if (taskNameVector.contains(taskName)) { + if (strLine.startsWith("完成")) { + oneSignInfo.userAction = "完成"; + if ((!reviewTaskList.contains(taskName)) && (!AcknowladgeTaskList.contains(taskName))) { + br.readLine(); + br.mark(400); + strLine = br.readLine(); + if (!(strLine.startsWith(" ") || strLine.startsWith("\t"))) { + br.reset(); + } else { + String Comments = strLine.trim(); + while((strLine = br.readLine()) != null){ + if(strLine.equals("")){ + break; + }else{ + Comments = Comments + "\t"+strLine.trim(); + } + } + oneSignInfo.userComments = Comments; + } + oneSignInfo.num = num++; + vs.add(oneSignInfo); + } + } + } + } else { + if ((strLine.startsWith("批准"))) { + oneSignInfo.userAction = "批准"; + } else { + oneSignInfo.userAction = "拒绝"; + } + strLine = br.readLine(); + temp = strLine.split(":"); + taskName = temp[1].trim(); + if (taskNameVector.contains(taskName)) { + oneSignInfo.taskName = taskName; + if (AcknowladgeTaskList.contains(taskName)) { + oneSignInfo.userAction = "认可"; + } + br.mark(400); + strLine = br.readLine(); + if (!(strLine.startsWith(" ") || strLine.startsWith("\t"))) { + br.reset(); + } else { + String Comments = strLine.trim(); + while((strLine = br.readLine()) != null){ + if(strLine.equals("")){ + break; + }else{ + Comments = Comments + "\t"+strLine.trim(); + } + } + oneSignInfo.userComments = Comments; + } + oneSignInfo.num = num++; + vs.add(oneSignInfo); + } + } + } + } + br.close(); + } + catch (FileNotFoundException e1) { + e1.printStackTrace(); + } + catch (IOException e2) { + e2.printStackTrace(); + } + } + + System.out.println("readerFromText(String) - end" + vs.size()); //$NON-NLS-1$ + return vs; + } + + // 读取一个文本文件需要建立的一个静态类 + static class SignInfo { + public String processName = ""; + public int num = 0; + public String taskName = ""; + public String userName = ""; + public String userAction = ""; + public String actionTime = ""; + public String userComments = ""; + } + + private TCSession session = null; + private AbstractAIFUIApplication myuiapp; +} diff --git a/src/cust/com/rac/workflow/QueryTaskProcessCommand.java b/src/cust/com/rac/workflow/QueryTaskProcessCommand.java new file mode 100644 index 0000000..cb3f5cc --- /dev/null +++ b/src/cust/com/rac/workflow/QueryTaskProcessCommand.java @@ -0,0 +1,55 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: QueryTaskProcessCommand.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-17 上午10:19:35 tyl Ini 初始化文件 +#======================================================================================================= + */ +package cust.com.rac.workflow; + +import java.util.List; + +import cn.com.customization.util.GetAllUserIds; + +import com.teamcenter.rac.aif.AbstractAIFCommand; +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.kernel.TCException; + +public class QueryTaskProcessCommand extends AbstractAIFCommand { + + public AbstractAIFUIApplication application; + + public QueryTaskProcessCommand(AbstractAIFUIApplication abstractaifapplication) throws TCException { + application = abstractaifapplication; + execute(); + } + + private void execute() throws TCException { + System.out.println(" QueryTaskProcessCommand "); + GetAllUserIds.setUsers(new GetAllUserIds(application).getAllUsers()); + new Thread() { + public void run() { + while (true) { + try { + List users = GetAllUserIds.getUsers(); + if ((users == null) || (users.size() == 0)) { + System.out.println("--------------1000"); + sleep(20000); + } else { + new SearchTaskDialog(application, "任务查询", false); + break; + } + } + catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + }.start(); + } +} diff --git a/src/cust/com/rac/workflow/QueryTaskProcessHandler.java b/src/cust/com/rac/workflow/QueryTaskProcessHandler.java new file mode 100644 index 0000000..f2ba632 --- /dev/null +++ b/src/cust/com/rac/workflow/QueryTaskProcessHandler.java @@ -0,0 +1,46 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: QueryTaskProcessHandler.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-17 上午10:19:51 tyl Ini 初始化文件 +#======================================================================================================= + */ +package cust.com.rac.workflow; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.commands.IHandler; +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCException; + +public class QueryTaskProcessHandler extends AbstractHandler implements IHandler { + + /* + * @see + * org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands. + * ExecutionEvent) + */ + public Object execute(ExecutionEvent arg0) throws ExecutionException { + final AbstractAIFUIApplication app = AIFUtility.getCurrentApplication(); + try { + QueryTaskProcessCommand command = new QueryTaskProcessCommand(app); + command.executeModal(); + + } + catch (TCException e) { + e.printStackTrace(); + } + catch (Exception e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/cust/com/rac/workflow/SearchResultDialog.java b/src/cust/com/rac/workflow/SearchResultDialog.java new file mode 100644 index 0000000..34be8e1 --- /dev/null +++ b/src/cust/com/rac/workflow/SearchResultDialog.java @@ -0,0 +1,708 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: SearchResultDialog.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-17 下午03:46:01 tyl Ini 初始化文件 +#======================================================================================================= + */ +package cust.com.rac.workflow; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.border.TitledBorder; +import javax.swing.table.JTableHeader; + +import cn.com.customization.util.ColumnGroup; +import cn.com.customization.util.DataSetFinder; +import cn.com.customization.util.GetChoosePath; +import cn.com.customization.util.GetMessageDialog; +import cn.com.customization.util.GroupableTableHeader; +import cn.com.customization.util.TableColorRender; +import cn.com.customization.util.TableColumnRender; +import cn.com.customization.util.UtilApi; + +import com.teamcenter.rac.aif.AIFDesktop; +import com.teamcenter.rac.aif.AbstractAIFCommand; +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aif.kernel.AIFComponentContext; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.commands.open.OpenCommand; +import com.teamcenter.rac.kernel.TCComponentDataset; +import com.teamcenter.rac.kernel.TCComponentSignoff; +import com.teamcenter.rac.kernel.TCComponentTask; +import com.teamcenter.rac.kernel.TCComponentUserType; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCPreferenceService; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.kernel.TCTypeService; +import com.teamcenter.rac.util.MessageBox; +import com.teamcenter.rac.util.PropertyLayout; +import com.teamcenter.rac.util.Registry; + +import cust.com.rac.workflow.SearchTaskDialog.SearchCondition; + +//public class SearchResultDialog extends AbstractAIFDialog { +public class SearchResultDialog extends JFrame { + private static final long serialVersionUID = 1L; + private List results = new ArrayList(); + private JTable table1; + private SearchResultTableModel dtm1; + private String title = ""; + private TCSession session; + private SearchCondition searchCondition; + private String[] names1 = { "*", "任务名称", "执行者", "上步骤完成时间", "完成时间", "任务状态", "会签注释", "任务类型", "流程所有者", "工作流名称", "创建时间", "最后一次修改时间", "最后一次修改者", "状态", "工作流模板名称" }; + private String[] names2 = { "*", "流程所有者", "工作流名称", "任务名称", "创建时间", "最后一次修改时间", "最后一次修改者", "状态" }; + private Map taskMap = new HashMap(); + + private String reportOption = "origin_viewTask_report"; + private String reportPath = "c:"; + private PackExcelInfo excelInfo = new PackExcelInfo(); + private boolean isExceptionSearch; + + public SearchResultDialog(AbstractAIFUIApplication app, List components, SearchCondition searchCondition, boolean isExceptionSearch) { + this.session = (TCSession) app.getSession(); + this.searchCondition = searchCondition; + this.isExceptionSearch = isExceptionSearch; + getResultValue(components); + initUI(); + File file = new File(excelInfo.getTemplateFileName()); + if (file.exists()) { + file.delete(); + } + } + + @SuppressWarnings("deprecation") + private void getResultValue(List components) { + try { + title = (new Date().toLocaleString()) + "_" + session.getUser() + "_执行任务查询条件:任务执行者:" + searchCondition.getUsername() + "任务时间段:[" + searchCondition.getCreateDate() + "]_[" + searchCondition.getFinishDate() + "]"; + if (components != null) { + List taskList = new ArrayList(); + List taskIndexList = new ArrayList(); + for (int i = 0; i < components.size(); i++) { + TCComponentTask task = (TCComponentTask) components.get(i); + + if (task != null) { + SearchResults result = new SearchResults(); + if (!isExceptionSearch) { + if (((task.getTaskType()).equalsIgnoreCase("EPMSelectSignoffTask")) || ((task.getTaskType()).equalsIgnoreCase("EPMPerformSignoffTask"))) { + TCComponentSignoff[] sigoffs = task.getValidSignoffs(); + for (int m = 0; m < sigoffs.length; m++) { + String comment = sigoffs[m].getComments(); + result.setTask_note(comment); + result.setTask_executor(sigoffs[m].getProperty("signoff_member")); + result.setTask_finishDate(sigoffs[m].getProperty("decision_date")); + } + } else { + result.setTask_executor(task.getProperty("owning_user")); + result.setTask_finishDate(task.getProperty("last_mod_date")); + result.setTask_note(""); + } + } + + if (((task.getTaskType()).equalsIgnoreCase("EPMSelectSignoffTask")) || ((task.getTaskType()).equalsIgnoreCase("EPMPerformSignoffTask"))) { + task = task.getParent(); + } + if (taskList.contains(task)) { + int taskIndex = taskList.indexOf(task); + taskList.remove(task); + taskIndexList.remove(taskIndex); + } + + result.setTask_name(task.getProperty("object_name")); + if (result.getTask_type().equals("EPMTask")) { + if (result.getTask_status().equals("已开始")) { + result.setTask_name("◆" + result.getTask_name()); + result.setTask_finishDate(""); + } + } + + Date taskCreateDate = null; + SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + result.setTask(task); + taskCreateDate = task.getDateProperty("creation_date"); + + result.setTask_createDate(task.getProperty("creation_date")); + TCComponentTask previousTask = task.getPrevious(); + if (previousTask != null) { + result.setTask_createDate(previousTask.getProperty("last_mod_date")); + taskCreateDate = previousTask.getDateProperty("last_mod_date"); + } + result.setTask_type(task.getProperty("object_type")); + result.setTask_status(task.getProperty("real_state")); + + if (!result.getTask_status().equals("已完成")) { + result.setTask_finishDate(""); + } + + TCComponentTask rootTask = task.getRoot(); + result.setProcess_name(rootTask.getProperty("job_name")); + result.setProcess_createDate(rootTask.getProperty("creation_date")); + result.setProcess_finishDate(rootTask.getProperty("last_mod_date")); + result.setProcess_lastModeUser(rootTask.getProperty("last_mod_user")); + result.setProcess_executor(rootTask.getProperty("owning_user")); + result.setProcess_status(rootTask.getProperty("real_state")); + result.setProcess_templateName(rootTask.getProperty("task_template")); + // String index = String.valueOf(i + 1) + "$$$" + + // result.getProcess_createDate() + "$$$" + + // result.getTask_createDate() + "$$$" + + // result.getTask_finishDate(); + String index = String.valueOf(i + 1) + "$$$" + simpleDate.format(rootTask.getDateProperty("creation_date")) + "$$$" + result.getProcess_name() + "$$$" + simpleDate.format(taskCreateDate); + taskIndexList.add(index); + taskMap.put(index, result); + } + taskList.add(task); + } + + Collections.sort(taskIndexList, new ComparatorTask()); + for (int i = 0; i < taskIndexList.size(); i++) { + SearchResults result = taskMap.get(taskIndexList.get(i)); + result.setIndex(String.valueOf(i + 1)); + results.add(result); + } + } + } + catch (TCException e) { + e.printStackTrace(); + } + } + + public String getUserByID(String userID) { + try { + TCTypeService service = session.getTypeService(); + TCComponentUserType userType = (TCComponentUserType) service.getTypeComponent("User"); + if (userType.find(userID) != null) { + String user = userType.find(userID).toString(); + return user; + } + } + catch (TCException e1) { + e1.printStackTrace(); + } + return ""; + } + + public void initUI() { + this.setTitle("查询任务"); + ImageIcon image = Registry.getImageIconFromPath("/com/teamcenter/rac/ecmanagement/images/processviewer_16.png"); + this.setIconImage(image.getImage()); + JPanel panel = new JPanel(new BorderLayout()); + panel.add(BorderLayout.NORTH, setTopPanel()); + panel.add(BorderLayout.CENTER, setCenterPanel()); + panel.add(BorderLayout.SOUTH, setBottomPanel()); + getContentPane().add(panel); + // this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); + // this.addWindowListener(new WindowAdapter() { + // public void windowClosing(WindowEvent e) { + // dispose(); + // } + // }); + // showDialog(); + pack(); + Dimension screen = getToolkit().getScreenSize(); + setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2); + this.setVisible(true); + } + + private JPanel setTopPanel() { + JPanel panel = new JPanel(new BorderLayout()); + panel.add(new JLabel(" "), BorderLayout.NORTH); + if (!isExceptionSearch) { + panel.add(new JLabel(" " + title), BorderLayout.CENTER); + } + panel.add(new JLabel(" "), BorderLayout.SOUTH); + return panel; + } + + private JPanel setCenterPanel() { + JPanel panel1 = new JPanel(new PropertyLayout()); + panel1.setBorder(new TitledBorder("")); + if (!isExceptionSearch) { + dtm1 = new SearchResultTableModel(names1, results, 0); + table1 = new JTable(dtm1) { + private static final long serialVersionUID = 1L; + + protected JTableHeader createDefaultTableHeader() { + return new GroupableTableHeader(columnModel); + } + }; + GroupableTableHeader header = new GroupableTableHeader(table1.getColumnModel()); + javax.swing.table.TableColumnModel cm = table1.getColumnModel(); + // 接受类型 + ColumnGroup taskCol = new ColumnGroup("所参入任务信息"); + taskCol.add(cm.getColumn(1)); + taskCol.add(cm.getColumn(2)); + taskCol.add(cm.getColumn(3)); + taskCol.add(cm.getColumn(4)); + taskCol.add(cm.getColumn(5)); + taskCol.add(cm.getColumn(6)); + taskCol.add(cm.getColumn(7)); + header.addColumnGroup(taskCol); + + ColumnGroup processCol = new ColumnGroup("所属工作流信息"); + processCol.add(cm.getColumn(8)); + processCol.add(cm.getColumn(9)); + processCol.add(cm.getColumn(10)); + processCol.add(cm.getColumn(11)); + processCol.add(cm.getColumn(12)); + processCol.add(cm.getColumn(13)); + processCol.add(cm.getColumn(14)); + header.addColumnGroup(processCol); + table1.setTableHeader(header); + table1.setDefaultRenderer(Object.class, new TableColorRender()); + dtm1.setTableColumnsWidth(table1, 0); + } else { + dtm1 = new SearchResultTableModel(names2, results, 1); + table1 = new JTable(dtm1); + dtm1.setTableColumnsWidth(table1, 1); + } + table1.setRowHeight(20); + table1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); + + // 对列进行渲染 + table1.getColumnModel().getColumn(0).setCellRenderer(new TableColumnRender()); + Dimension screen = getToolkit().getScreenSize(); + JScrollPane scrollPane1 = new JScrollPane(table1, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); + if (!isExceptionSearch) { + scrollPane1.setPreferredSize(new Dimension((int) (screen.getWidth() * (0.75)), (int) (screen.getHeight() * (0.6)))); + } else { + scrollPane1.setPreferredSize(new Dimension((int) (screen.getWidth() * (0.62)), (int) (screen.getHeight() * (0.5)))); + } + JPanel panel = new JPanel(new BorderLayout()); + panel.setBorder(new TitledBorder("")); + panel.add(scrollPane1); + return panel; + } + + private JPanel setBottomPanel() { + JPanel southPanel = new JPanel(new FlowLayout()); + // southPanel.setSize(100, 15); + JButton confirmButton = new JButton("查看流程"); + JButton exitButton = new JButton("退 出"); + JButton exportButton = new JButton("导出Excel"); + confirmButton.addActionListener(new buttonListener()); + exitButton.addActionListener(new buttonListener()); + exportButton.addActionListener(new buttonListener()); + southPanel.add(new JLabel(" ")); + southPanel.add(new JLabel(" ")); + southPanel.add(new JLabel(" ")); + southPanel.add(new JLabel(" ")); + southPanel.add(new JLabel(" ")); + southPanel.add(confirmButton); + if (!isExceptionSearch) { + southPanel.add(exportButton); + } + southPanel.add(exitButton); + return southPanel; + } + + class buttonListener implements ActionListener { + public void actionPerformed(ActionEvent event) { + String name = ((JButton) event.getSource()).getText(); + if (name.equals("查看流程")) { + showProcess(); + } else if (name.equals("导出Excel")) { + exportResult(); + } else if (name.equals("退 出")) { + dispose(); + } + } + } + + private void exportResult() { + String dir = new GetChoosePath().getPath("\\viewTask.txt"); + if ((dir != "") || (dir.trim().length() > 0)) { + excelInfo.setTitle(title); + excelInfo.setTemplateFileName(getTemplateFile()); + String times = String.valueOf(new SimpleDateFormat("yyyyMMddhhmmss").format(new Date(System.currentTimeMillis()))); + excelInfo.setTargetFileName(dir + "\\查询任务_" + times + ".xls"); + new ExportSearchResult(results, excelInfo); + openFile(excelInfo.getTargetFileName(), false); + this.setVisible(true); + } + } + + public String getTemplateFile() { + HashMap cfghm = UtilApi.getPreferenceHashMap(session, TCPreferenceService.TC_preference_site, reportOption); + if (cfghm == null) { + MessageBox.post("没有配置首选项【" + reportOption + "】!", "INFO", MessageBox.INFORMATION); + return ""; + } + String DatasetOwningUser = (cfghm.get("DatasetOwningUser") + "").trim(); + String DatasetOwningGroup = (cfghm.get("DatasetOwningGroup") + "").trim(); + String DatasetName = (cfghm.get("DatasetName") + "").trim(); + DataSetFinder dataset_finder = new DataSetFinder(session); + TCComponentDataset imancomponentdataset = dataset_finder.FindDatasetByName(DatasetName, DatasetOwningUser, DatasetOwningGroup, "MSExcel"); + System.out.println("imancomponentdataset=========" + imancomponentdataset); + if (imancomponentdataset != null) { + try { + File file1 = new File(reportPath); + if (!file1.exists()) { + file1.createNewFile(); + } + File file = dataset_finder.ExportFileToDir(imancomponentdataset, reportPath); + if (file != null) { + System.out.println("file=========" + file.getAbsolutePath()); + return file.getAbsolutePath(); + } + } + catch (Exception e) { + MessageBox.post("导出数据集命名引用时出错!", "INFO", MessageBox.INFORMATION); + e.printStackTrace(); + } + } else { + MessageBox.post("配置的【" + DatasetName + "】数据集模板不存在!", "INFO", MessageBox.INFORMATION); + } + return ""; + } + + public void openFile(String targetFile, boolean isDir) { + File file = new File(targetFile); + if (file.exists()) { + int value = 0; + if (isDir) { + value = new GetMessageDialog("INFO", "文件已经生成,是否打开其所在目录?").getValue(); + // value = + // MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), + // "INFO", "文件已经生成,是否打开其所在目录?"); + } else { + // value = + // MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), + // "INFO", "文件已经生成,是否打开?"); + value = new GetMessageDialog("INFO", "文件已经生成,是否打开?").getValue(); + } + if (value == 0) { + try { + Runtime runtime = Runtime.getRuntime(); + runtime.exec("cmd /c start exit &&\"" + targetFile + "\" "); + } + catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + private void showProcess() { + int row = table1.getSelectedRow(); + if (row >= 0) { + final SearchResults result = results.get(row); + AIFDesktop localAIFDesktop = AIFUtility.getActiveDesktop(); + + // try { + // ExplorerService exploreService = new ExplorerService(); + // // exploreService.expand(); + // // exploreService.refresh(); + // } + // catch (Exception e1) { + // e1.printStackTrace(); + // } + // String str = "com.teamcenter.rac.explorer.ExplorerApplication"; + // localAIFDesktop.sendToApplication(result.getTask(), str); + + TCComponentTask task = result.getTask(); + try { + AIFComponentContext[] context = task.getChildren(); + InterfaceAIFComponent[] contexts = new InterfaceAIFComponent[] { (InterfaceAIFComponent) context[0].getComponent() }; + try { + System.out.println("task.getName()==" + task.getName()); + } + catch (TCException e1) { + e1.printStackTrace(); + } + AbstractAIFCommand abstractaifcommand = new OpenCommand(localAIFDesktop, contexts); + try { + abstractaifcommand.executeModal(); + } + catch (Exception e1) { + e1.printStackTrace(); + } + } + catch (TCException e1) { + e1.printStackTrace(); + } + + try { + Thread.sleep(500); + } + catch (InterruptedException e) { + e.printStackTrace(); + } + SearchResultDialog.this.setExtendedState(JFrame.ICONIFIED); + } else { + MessageBox.post("请选择要查看的流程!", "INFO", MessageBox.INFORMATION); + this.setVisible(true); + } + } + + class SearchResults { + private String index = ""; + private String task_name = ""; + private String task_createDate = ""; + private String task_finishDate = ""; + private String task_status = ""; + private String task_executor = ""; + private String task_note = ""; + private String task_type = ""; + + /** + * @return the task_type + */ + public String getTask_type() { + return task_type; + } + + /** + * @param task_type the task_type to set + */ + public void setTask_type(String task_type) { + this.task_type = task_type; + } + + private TCComponentTask task; + + private String process_name; + private String process_createDate; + private String process_finishDate; + private String process_status; + private String process_executor; + private String process_lastModeUser; + private String process_templateName; + + /** + * @return the task + */ + public TCComponentTask getTask() { + return task; + } + + /** + * @return the process_lastModeUser + */ + public String getProcess_lastModeUser() { + return process_lastModeUser; + } + + /** + * @param process_lastModeUser the process_lastModeUser to set + */ + public void setProcess_lastModeUser(String process_lastModeUser) { + this.process_lastModeUser = process_lastModeUser; + } + + /** + * @param task the task to set + */ + public void setTask(TCComponentTask task) { + this.task = task; + } + + /** + * @return the index + */ + public String getIndex() { + return index; + } + + /** + * @param index the index to set + */ + public void setIndex(String index) { + this.index = index; + } + + /** + * @return the task_name + */ + public String getTask_name() { + return task_name; + } + + /** + * @param task_name the task_name to set + */ + public void setTask_name(String task_name) { + this.task_name = task_name; + } + + /** + * @return the task_createDate + */ + public String getTask_createDate() { + return task_createDate; + } + + /** + * @param task_createDate the task_createDate to set + */ + public void setTask_createDate(String task_createDate) { + this.task_createDate = task_createDate; + } + + /** + * @return the task_finishDate + */ + public String getTask_finishDate() { + return task_finishDate; + } + + /** + * @param task_finishDate the task_finishDate to set + */ + public void setTask_finishDate(String task_finishDate) { + this.task_finishDate = task_finishDate; + } + + /** + * @return the task_status + */ + public String getTask_status() { + return task_status; + } + + /** + * @param task_status the task_status to set + */ + public void setTask_status(String task_status) { + this.task_status = task_status; + } + + /** + * @return the task_executor + */ + public String getTask_executor() { + return task_executor; + } + + /** + * @param task_executor the task_executor to set + */ + public void setTask_executor(String task_executor) { + this.task_executor = task_executor; + } + + /** + * @return the task_note + */ + public String getTask_note() { + return task_note; + } + + /** + * @param task_note the task_note to set + */ + public void setTask_note(String task_note) { + this.task_note = task_note; + } + + /** + * @return the process_name + */ + public String getProcess_name() { + return process_name; + } + + /** + * @param process_name the process_name to set + */ + public void setProcess_name(String process_name) { + this.process_name = process_name; + } + + /** + * @return the process_createDate + */ + public String getProcess_createDate() { + return process_createDate; + } + + /** + * @param process_createDate the process_createDate to set + */ + public void setProcess_createDate(String process_createDate) { + this.process_createDate = process_createDate; + } + + /** + * @return the process_finishDate + */ + public String getProcess_finishDate() { + return process_finishDate; + } + + /** + * @param process_finishDate the process_finishDate to set + */ + public void setProcess_finishDate(String process_finishDate) { + this.process_finishDate = process_finishDate; + } + + /** + * @return the process_status + */ + public String getProcess_status() { + return process_status; + } + + /** + * @param process_status the process_status to set + */ + public void setProcess_status(String process_status) { + this.process_status = process_status; + } + + /** + * @return the process_executor + */ + public String getProcess_executor() { + return process_executor; + } + + /** + * @param process_executor the process_executor to set + */ + public void setProcess_executor(String process_executor) { + this.process_executor = process_executor; + } + + /** + * @return the process_templateName + */ + public String getProcess_templateName() { + return process_templateName; + } + + /** + * @param process_templateName the process_templateName to set + */ + public void setProcess_templateName(String process_templateName) { + this.process_templateName = process_templateName; + } + + } +} diff --git a/src/cust/com/rac/workflow/SearchResultTableModel.java b/src/cust/com/rac/workflow/SearchResultTableModel.java new file mode 100644 index 0000000..f969cc0 --- /dev/null +++ b/src/cust/com/rac/workflow/SearchResultTableModel.java @@ -0,0 +1,135 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: SearchResultTableModel.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-17 下午03:46:12 tyl Ini 初始化文件 +#======================================================================================================= +*/ +package cust.com.rac.workflow; + +import java.util.Enumeration; +import java.util.List; + +import javax.swing.JTable; +import javax.swing.table.DefaultTableModel; +import javax.swing.table.JTableHeader; +import javax.swing.table.TableColumn; + +import cust.com.rac.workflow.SearchResultDialog.SearchResults; + +public class SearchResultTableModel extends DefaultTableModel { + + private static final long serialVersionUID = 1L; + + /** + * Creates a new instance of EditBatchProcessLineTableModel. + * @param data + */ + public SearchResultTableModel(String[] names, List data, int index) { + super(getData(data, index), names); + } + + public static Object[][] getData(List data, int index) { + Object[][] datas = new Object[data.size()][]; + for (int i = 0; i < data.size(); i++) { + if (index == 0) { + String[] info = new String[15]; + info[0] = String.valueOf(i + 1); + info[1] = data.get(i).getTask_name(); + info[2] = data.get(i).getTask_executor(); + info[3] = data.get(i).getTask_createDate(); + info[4] = data.get(i).getTask_finishDate(); + info[5] = data.get(i).getTask_status(); + info[6] = data.get(i).getTask_note(); + info[7] = data.get(i).getTask_type(); + info[8] = data.get(i).getProcess_executor(); + info[9] = data.get(i).getProcess_name(); + info[10] = data.get(i).getProcess_createDate(); + info[11] = data.get(i).getProcess_finishDate(); + info[12] = data.get(i).getProcess_lastModeUser(); + info[13] = data.get(i).getProcess_status(); + info[14] = data.get(i).getProcess_templateName(); + datas[i] = info; + } else { + if (index == 1) { + String[] info = new String[8]; + info[0] = String.valueOf(i + 1); + info[1] = data.get(i).getProcess_executor(); + info[2] = data.get(i).getProcess_name(); + info[3] = data.get(i).getTask_name(); + info[4] = data.get(i).getProcess_createDate(); + info[5] = data.get(i).getProcess_finishDate(); + info[6] = data.get(i).getProcess_lastModeUser(); + info[7] = data.get(i).getProcess_status(); + datas[i] = info; + } + } + } + return datas; + } + + @Override + public boolean isCellEditable(int row, int column) { + if (column == 0) { + return false; + } else { + return true; + } + } + + // 设置列宽 + public void setTableColumnsWidth(JTable myTable, int index) { + if (index == 0) { + myTable.getColumnModel().getColumn(0).setPreferredWidth(30); + myTable.getColumnModel().getColumn(1).setPreferredWidth(80); + myTable.getColumnModel().getColumn(2).setPreferredWidth(80); + myTable.getColumnModel().getColumn(3).setPreferredWidth(80); + myTable.getColumnModel().getColumn(4).setPreferredWidth(80); + myTable.getColumnModel().getColumn(5).setPreferredWidth(60); + myTable.getColumnModel().getColumn(6).setPreferredWidth(60); + myTable.getColumnModel().getColumn(7).setPreferredWidth(60); + myTable.getColumnModel().getColumn(8).setPreferredWidth(80); + myTable.getColumnModel().getColumn(9).setPreferredWidth(80); + myTable.getColumnModel().getColumn(10).setPreferredWidth(80); + myTable.getColumnModel().getColumn(11).setPreferredWidth(80); + myTable.getColumnModel().getColumn(12).setPreferredWidth(80); + myTable.getColumnModel().getColumn(13).setPreferredWidth(50); + myTable.getColumnModel().getColumn(14).setPreferredWidth(80); + } else { + if (index == 1) { + myTable.getColumnModel().getColumn(0).setPreferredWidth(30); + myTable.getColumnModel().getColumn(1).setPreferredWidth(100); + myTable.getColumnModel().getColumn(2).setPreferredWidth(120); + myTable.getColumnModel().getColumn(3).setPreferredWidth(100); + myTable.getColumnModel().getColumn(4).setPreferredWidth(120); + myTable.getColumnModel().getColumn(5).setPreferredWidth(120); + myTable.getColumnModel().getColumn(6).setPreferredWidth(100); + myTable.getColumnModel().getColumn(7).setPreferredWidth(80); + } + } + } + + // 设置列宽: + public void FitTableColumns(JTable myTable) { + JTableHeader header = myTable.getTableHeader(); + // header.getColumnModel().getColumn(0) + int rowCount = myTable.getRowCount(); + Enumeration columns = myTable.getColumnModel().getColumns(); + while (columns.hasMoreElements()) { + TableColumn column = (TableColumn) columns.nextElement(); + int col = header.getColumnModel().getColumnIndex(column.getIdentifier()); + int width = (int) myTable.getTableHeader().getDefaultRenderer().getTableCellRendererComponent(myTable, column.getIdentifier(), false, false, -1, col).getPreferredSize().getWidth(); + for (int row = 0; row < rowCount; row++) { + int preferedWidth = (int) myTable.getCellRenderer(row, col).getTableCellRendererComponent(myTable, myTable.getValueAt(row, col), false, false, row, col).getPreferredSize().getWidth(); + width = Math.max(width, preferedWidth); + } + header.setResizingColumn(column); + column.setWidth(width + myTable.getIntercellSpacing().width); + } + } +} diff --git a/src/cust/com/rac/workflow/SearchTaskDialog.java b/src/cust/com/rac/workflow/SearchTaskDialog.java new file mode 100644 index 0000000..8960677 --- /dev/null +++ b/src/cust/com/rac/workflow/SearchTaskDialog.java @@ -0,0 +1,450 @@ +/* +#======================================================================================================= +# +# Copyright (c) 2007 Origin Enterprise Solution LTD. +# +#======================================================================================================= +# File description: SearchTaskDialog.java +#======================================================================================================= +# Date time Name Action Description of Change +# 2011-1-17 下午03:46:21 tyl Ini 初始化文件 +#======================================================================================================= + */ +package cust.com.rac.workflow; + +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.List; + +import javax.swing.BorderFactory; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JLabel; +import javax.swing.JPanel; + +import cn.com.customization.util.GetAllUserIds; +import cn.com.customization.util.UtilApi; + +import com.teamcenter.rac.aif.AbstractAIFDialog; +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; //import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCComponentTask; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.DateButton; +import com.teamcenter.rac.util.MessageBox; +import com.teamcenter.rac.util.PropertyLayout; + +public class SearchTaskDialog extends AbstractAIFDialog { + // public class SearchTaskDialog extends JDialog { + // public class SearchTaskDialog extends JFrame { + private static final long serialVersionUID = 1L; + private JComboBox user_cmb; + private DateButton startTime_jtb; + private DateButton endTime_jtb; + private JCheckBox EPMTask_ck; + private JCheckBox EPMDoTask_ck; + private JCheckBox EPMReviewTask_ck; + private JCheckBox EPMAcknowledgeTask_ck; + private JCheckBox EPMAddStatusTask_ck; + private JCheckBox EPMConditionTask_ck; + private String title; + private AbstractAIFUIApplication app; + private String queryName = "__SearachViewTask"; + private String querySelectSigoff = "__SearchEPMReviewTask"; + private TCSession session; + private boolean isExceptionSearch = false; + // private String serverInfoOption = "origin_serverinfo"; + + public SearchTaskDialog(AbstractAIFUIApplication app, String title, boolean isExceptionSearch) { + super(true); + this.title = title; + this.isExceptionSearch = isExceptionSearch; + this.app = app; + session = (TCSession) app.getSession(); + initUI(); + } + + public void initUI() { + // setPersistentDisplay(false); + // setOptimalDisplay(false); + setTitle(title); + this.setResizable(false); + // this.setAlwaysOnTop(true); + // ImageIcon image = + // Registry.getImageIconFromPath("/com/teamcenter/rac/ecmanagement/images/processviewer_16.png"); + // this.setIconImage(image.getImage()); + JPanel panel = new JPanel(new PropertyLayout()); + panel.add("1.1.left.center", new JLabel(" ")); + if (isExceptionSearch) { + panel.add("1.2.left.center", setSearchExceptionPanel()); + } else { + panel.add("1.2.left.center", setSearchPanel()); + } + panel.add("2.1.left.center", new JLabel(" ")); + this.getContentPane().add(panel); + pack(); + validate(); + Dimension screen = getToolkit().getScreenSize(); + setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2); + this.setVisible(true); + + // showDialog(); + // Dimension screen = getToolkit().getScreenSize(); + // setLocation((screen.width - getSize().width) / 2, (screen.height - + // getSize().height) / 2); + } + + private JPanel setSearchExceptionPanel() { + startTime_jtb = new DateButton(); + endTime_jtb = new DateButton(); + JPanel panel1 = new JPanel(new PropertyLayout()); + panel1.setBorder(BorderFactory.createTitledBorder("请输入任务查询条件")); + panel1.add("1.1.left.center", new JLabel(" ")); + panel1.add("2.1.left.center", new JLabel(" 执行时间_自 ")); + panel1.add("2.2.left.center", startTime_jtb); + panel1.add("2.3.left.center", new JLabel(" ")); + panel1.add("3.1.left.center", new JLabel(" 执行时间_止 ")); + panel1.add("3.2.left.center", endTime_jtb); + panel1.add("4.1.left.center", new JLabel(" ")); + + JPanel panel = new JPanel(new PropertyLayout()); + panel.add("1.1.left.center", panel1); + panel.add("1.2.left.center", setButtonPanel()); + return panel; + } + + private JPanel setSearchPanel() { + user_cmb = new JComboBox(); + user_cmb.setPreferredSize(new Dimension(156, 27)); + startTime_jtb = new DateButton(); + endTime_jtb = new DateButton(); + + java.util.Date myDate = new java.util.Date(); + long myTime = (myDate.getTime() / 1000) - 60 * 60 * 24 * 7; + myDate.setTime(myTime * 1000); + startTime_jtb.setDate(myDate); + new Thread() { + public void run() { + while (true) { + try { + String userRole = session.getPreferenceService().getString(4, "Cust_search_task_role"); + if(session.getCurrentRole().getRoleName().equals(userRole)){ + List users = GetAllUserIds.getUsers(); + Collections.sort(users); + if (users != null) { + for (int i = 0; i < users.size(); i++) { + user_cmb.addItem(users.get(i)); + if (users.get(i).equalsIgnoreCase(session.getUser().getUserId())) { + user_cmb.setSelectedIndex(i); + } + } + user_cmb.setEnabled(true); + break; + } + }else{ + user_cmb.addItem(session.getUser()); + break; + } + } + catch (TCException e) { + e.printStackTrace(); + } + } + } + }.start(); + + JPanel panel1 = new JPanel(new PropertyLayout()); + panel1.setBorder(BorderFactory.createTitledBorder("请输入任务查询条件")); + panel1.add("1.1.left.center", new JLabel(" 执 行 者 ")); + panel1.add("1.2.left.center", user_cmb); + panel1.add("1.3.left.center", new JLabel(" ")); + panel1.add("2.1.left.center", new JLabel(" 执行时间_自 ")); + panel1.add("2.2.left.center", startTime_jtb); + panel1.add("2.3.left.center", new JLabel(" ")); + panel1.add("3.1.left.center", new JLabel(" 执行时间_止 ")); + panel1.add("3.2.left.center", endTime_jtb); + panel1.add("3.3.left.center", new JLabel(" ")); + + JPanel panel2 = new JPanel(new PropertyLayout()); + panel2.setBorder(BorderFactory.createTitledBorder("请选择查询任务类型")); + EPMTask_ck = new JCheckBox("EPMTask"); + EPMDoTask_ck = new JCheckBox("EPMDoTask"); + EPMReviewTask_ck = new JCheckBox("EPMReviewTask"); + EPMAcknowledgeTask_ck = new JCheckBox("EPMAcknowledgeTask"); + EPMAddStatusTask_ck = new JCheckBox("EPMAddStatusTask"); + EPMConditionTask_ck = new JCheckBox("EPMConditionTask"); + + EPMTask_ck.setSelected(true); + EPMDoTask_ck.setSelected(true); + EPMReviewTask_ck.setSelected(true); + EPMAcknowledgeTask_ck.setSelected(true); + + panel2.add("1.1.left.center", EPMTask_ck); + panel2.add("1.2.left.center", EPMDoTask_ck); + panel2.add("1.3.left.center", new JLabel(" ")); + panel2.add("2.1.left.center", EPMReviewTask_ck); + panel2.add("2.2.left.center", EPMConditionTask_ck); + panel2.add("2.3.left.center", new JLabel(" ")); + panel2.add("3.1.left.center", EPMAcknowledgeTask_ck); + panel2.add("3.2.left.center", EPMAddStatusTask_ck); + + JPanel panel = new JPanel(new PropertyLayout()); + panel.add("1.1.left.center", panel1); + panel.add("2.1.left.center", panel2); + panel.add("2.2.left.center", setButtonPanel()); + return panel; + } + + private JPanel setButtonPanel() { + JPanel panel = new JPanel(new PropertyLayout()); + JButton confirmBtn = new JButton("确定"); + JButton cancelBtn = new JButton("取消"); + confirmBtn.addActionListener(new buttonListener()); + cancelBtn.addActionListener(new buttonListener()); + + panel.add("1.1.left.center", new JLabel(" ")); + panel.add("2.1.left.center", confirmBtn); + panel.add("3.1.left.center", new JLabel(" ")); + panel.add("4.1.left.center", cancelBtn); + panel.add("5.1.left.center", new JLabel(" ")); + return panel; + } + + class buttonListener implements ActionListener { + public void actionPerformed(ActionEvent actionevent) { + session.setStatus("正在查询,稍等..."); + JButton obj = ((JButton) actionevent.getSource()); + if (obj.getText().equals("确定")) { + try { + if (startTime_jtb.getDate() == null) { + MessageBox.post("【执行时间_自】不允许为空!", "INFO", MessageBox.INFORMATION); + return; + } + Date endDate = new Date(); + if (endTime_jtb.getDate() != null) { + endDate = endTime_jtb.getDate(); + } + if (startTime_jtb.getDate().compareTo(endDate) >= 0) { + MessageBox.post("【执行时间_止】应比【执行时间_自】晚", "INFO", MessageBox.INFORMATION); + return; + } + List components = new ArrayList(); + SearchCondition searchCondition = new SearchCondition(); + String as[] = { "修改时间晚于", "修改时间早于", "ID", "类型", "ModUserID"}; + + SimpleDateFormat fomat = new SimpleDateFormat("dd-M-yyyy HH:ss"); + // fomat = new SimpleDateFormat("dd-M-yyyy HH:ss:mm"); + + String startTime = fomat.format(startTime_jtb.getDate()); + String endTime = fomat.format(endDate); + /* + * windows HashMap cfghm = + * UtilApi.getPreferenceHashMap(session, + * TCPreferenceService.TC_preference_site, + * serverInfoOption); if (cfghm == null) { + * MessageBox.post("没有配置首选项【" + serverInfoOption + "】!", + * "INFO", MessageBox.INFORMATION); return; } String + * isWindows = (cfghm.get("isWindowsServer") + "").trim(); + * if (isWindows.equalsIgnoreCase("true")) { startTime = + * startTime_jtb.getDate().toLocaleString(); endTime = + * endDate.toLocaleString(); + * System.out.println("Windows:startTime=========" + + * startTime); System.out.println("Windows:endTime=========" + * + endTime); } + */ +// System.out.println("Windows:startTime=========" + startTime); +// System.out.println("Windows:endTime=========" + endTime); + searchCondition.setCreateDate(startTime); + searchCondition.setFinishDate(endTime); + + if (!isExceptionSearch) { + String user = (user_cmb.getSelectedItem().toString()); + if ((user.length() == 0) || (user == null)) { + MessageBox.post("用户不允许为空!", "INFO", MessageBox.INFORMATION); + return; + } + if ((!(EPMTask_ck.isSelected())) && (!(EPMDoTask_ck.isSelected())) && (!(EPMReviewTask_ck.isSelected())) && (!(EPMAcknowledgeTask_ck.isSelected())) && (!(EPMAddStatusTask_ck.isSelected()))) { + MessageBox.post("选择查询任务类型!", "INFO", MessageBox.INFORMATION); + return; + } + searchCondition.setUsername(user); + user = user.substring(0, user.indexOf("(")).trim(); + List taskList = new ArrayList(); + if (EPMTask_ck.isSelected()) { + taskList.add("EPMTask"); + } + if (EPMDoTask_ck.isSelected()) { + taskList.add("EPMDoTask"); + } + if (EPMReviewTask_ck.isSelected()) { + taskList.add("EPMReviewTask"); + } + if (EPMAcknowledgeTask_ck.isSelected()) { + taskList.add("EPMAcknowledgeTask"); + } + if (EPMAddStatusTask_ck.isSelected()) { + taskList.add("EPMAddStatusTask"); + } + if (EPMConditionTask_ck.isSelected()) { + taskList.add("EPMConditionTask"); + } + + for (int i = 0; i < taskList.size(); i++) { + if (taskList.get(i).equals("EPMTask")) { + String as1[] = { startTime, endTime, user, taskList.get(i).trim(), "*" }; + InterfaceAIFComponent[] components1 = UtilApi.getQueryList((TCSession) app.getSession(), queryName, as, as1); + if (components1 != null) { + for (int m = 0; m < components1.length; m++) { + components.add(components1[m]); + } + } + } else { + if (taskList.get(i).equals("EPMReviewTask")) { + String strID[] = { "memberUser" }; + String as1[] = { user }; + InterfaceAIFComponent[] components1 = UtilApi.getQueryList((TCSession) app.getSession(), querySelectSigoff,strID, as1); + if (components1 != null) { + for (int m = 0; m < components1.length; m++) { + components.add(components1[m]); + } + } + } else { + String as1[] = { startTime, endTime, user, taskList.get(i).trim(), "*"}; + InterfaceAIFComponent[] components1 = UtilApi.getQueryList((TCSession) app.getSession(), queryName, as, as1); + if (components1 != null) { + for (int m = 0; m < components1.length; m++) { + components.add(components1[m]); + } + } + } + } + } + } else { + String as1[] = { startTime, endTime, "*", "EPMTask", "*" }; + InterfaceAIFComponent[] components1 = UtilApi.getQueryList((TCSession) app.getSession(), queryName, as, as1); + if (components1 != null) { + for (int m = 0; m < components1.length; m++) { + TCComponentTask task = (TCComponentTask) components1[m]; + isValidTask(task, components); + } + } + } + if ((components == null) || (components.size() == 0)) { + MessageBox.post("没有符合要求的记录!", "INFO", MessageBox.INFORMATION); + } else { + SearchTaskDialog.this.dispose(); + new SearchResultDialog(app, components, searchCondition, isExceptionSearch); + } + } + catch (Exception e) { + e.printStackTrace(); + } + } else { + SearchTaskDialog.this.dispose(); + } + session.setReadyStatus(); + } + } + + private boolean isValidTask(TCComponentTask task, List components) { + try { + TCComponentTask[] children = task.getSubtasks(); + for (int i = 0; i < children.length; i++) { + TCComponentTask childrenTask = children[i]; + String childState = childrenTask.getProperty("real_state"); + if (childState.equals("待处理")) { + TCComponentTask previousTask = childrenTask.getPrevious(); + if (previousTask != null) { + String previousType = previousTask.getProperty("object_type"); + String previousState = previousTask.getProperty("real_state"); + if ((previousState.equals("已完成")) && (!previousType.equals("EPMConditionTask"))) { + components.add(childrenTask); + return false; + } else { + if (!isValidTask(childrenTask, components)) { + components.add(childrenTask); + return false; + } + } + } + } + } + String taskState = task.getProperty("real_state"); + if (taskState.equals("已开始")) { + if ((children != null) && (children.length >= 3)) { + int count = 0; + for (int i = 0; i < children.length; i++) { + TCComponentTask childrenTask = children[i]; + String childState = childrenTask.getProperty("real_state"); + if (childState.equals("已开始")) { + count++; + } + } + if (count == 0) { + components.add(task); + return false; + } + } + } + } + catch (TCException e) { + e.printStackTrace(); + } + return true; + } + + class SearchCondition { + private String username; + private String createDate; + private String finishDate; + + /** + * @return the username + */ + public String getUsername() { + return username; + } + + /** + * @param username the username to set + */ + public void setUsername(String username) { + this.username = username; + } + + /** + * @return the createDate + */ + public String getCreateDate() { + return createDate; + } + + /** + * @param createDate the createDate to set + */ + public void setCreateDate(String createDate) { + this.createDate = createDate; + } + + /** + * @return the finishDate + */ + public String getFinishDate() { + return finishDate; + } + + /** + * @param finishDate the finishDate to set + */ + public void setFinishDate(String finishDate) { + this.finishDate = finishDate; + } + } +} diff --git a/src/cust/com/rac/workflow/SubmitAttachmentInWorkflowCommand.java b/src/cust/com/rac/workflow/SubmitAttachmentInWorkflowCommand.java new file mode 100644 index 0000000..e1228e3 --- /dev/null +++ b/src/cust/com/rac/workflow/SubmitAttachmentInWorkflowCommand.java @@ -0,0 +1,74 @@ +/* +#============================================================================= +# +# opyright (c) 2009 Origin Enterprise Solution LTD. +# +#============================================================================= +# File name: SubmitAttachmentInWorkflowCommand.java +# File description: +#============================================================================= +# Date Name Action Description of Change +# +#============================================================================= +*/ +package cust.com.rac.workflow; + +import cn.com.customization.imports.importfiles.ImportFile; + +import com.teamcenter.rac.aif.AbstractAIFCommand; +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aif.kernel.AIFComponentContext; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentItemRevision; +import com.teamcenter.rac.kernel.TCComponentPseudoFolder; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.util.MessageBox; + +/** + * @author + */ +public class SubmitAttachmentInWorkflowCommand extends AbstractAIFCommand { + + public AbstractAIFUIApplication application; + private TCComponent theTargetComp= null; + private TCComponent parentComp = null; + + public SubmitAttachmentInWorkflowCommand(AbstractAIFUIApplication abstractaifapplication) throws TCException { + application = abstractaifapplication; + execute(); + } + + private void execute() throws TCException { + InterfaceAIFComponent aifComp = application.getTargetComponent(); + if(!(aifComp instanceof TCComponentPseudoFolder)){ + MessageBox.post("请选择流程中item Revision下的关系文件夹执行操作!", "警告", MessageBox.WARNING); + return; + } + + TCComponent target = (TCComponent) aifComp; + AIFComponentContext[] context = target.whereReferenced(); + for(int i = 0; context != null && i < context.length ;i++ ){ + parentComp = (TCComponent) context[i].getComponent(); + if(parentComp instanceof TCComponentItemRevision){ + String strJobName = parentComp.getProperty("current_job"); + System.out.println("strJobName = " + strJobName); + if(!strJobName.equals("") && !strJobName.equals("没有值")){ + theTargetComp = (TCComponent) aifComp; + break; + } + } + } + if(theTargetComp == null){ + MessageBox.post("请选择流程中item Revision下的关系文件夹执行操作!", "警告", MessageBox.WARNING); + return; + } + new Thread() { + public void run() { + new ImportFile(application,new TCComponent[]{parentComp,theTargetComp}); + } + }.start(); + + + } +} diff --git a/src/cust/com/rac/workflow/SubmitAttachmentInWorkflowHandler.java b/src/cust/com/rac/workflow/SubmitAttachmentInWorkflowHandler.java new file mode 100644 index 0000000..852b52c --- /dev/null +++ b/src/cust/com/rac/workflow/SubmitAttachmentInWorkflowHandler.java @@ -0,0 +1,46 @@ +/* +#============================================================================= +# +# copyright (c) 2009 Origin Enterprise Solution LTD. +# +#============================================================================= +# File name: SubmitAttachmentInWorkflowHandler.java +# File description: +#============================================================================= +# Date Name Action Description of Change +# +#============================================================================= + */ +package cust.com.rac.workflow; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.commands.IHandler; +import com.teamcenter.rac.aif.AbstractAIFUIApplication; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCException; + +/** + * @author + */ +public class SubmitAttachmentInWorkflowHandler extends AbstractHandler implements IHandler { + + /* + * @see + * org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands. + * ExecutionEvent) + */ + public Object execute(ExecutionEvent arg0) throws ExecutionException { + AbstractAIFUIApplication app = AIFUtility.getCurrentApplication(); + try { + SubmitAttachmentInWorkflowCommand command = new SubmitAttachmentInWorkflowCommand(app); + command.executeModal(); + } catch (TCException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/src/cust/com/ysr/Activator.java b/src/cust/com/ysr/Activator.java new file mode 100644 index 0000000..f94eeec --- /dev/null +++ b/src/cust/com/ysr/Activator.java @@ -0,0 +1,47 @@ +package cust.com.ysr; + +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.osgi.framework.BundleContext; + +public class Activator extends AbstractUIPlugin { + + // The plug-in ID + public static final String PLUGIN_ID = "cust.com.ysr"; //$NON-NLS-1$ + + // The shared instance + private static Activator plugin; + + /** + * The constructor + */ + public Activator() { + } + + /* + * (non-Javadoc) + * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) + */ + public void start(BundleContext context) throws Exception { + super.start(context); + plugin = this; + } + + /* + * (non-Javadoc) + * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) + */ + public void stop(BundleContext context) throws Exception { + plugin = null; + super.stop(context); + } + + /** + * Returns the shared instance + * + * @return the shared instance + */ + public static Activator getDefault() { + return plugin; + } + +} diff --git a/src/cust/com/ysr/test.java b/src/cust/com/ysr/test.java new file mode 100644 index 0000000..90a0b00 --- /dev/null +++ b/src/cust/com/ysr/test.java @@ -0,0 +1,21 @@ +package cust.com.ysr; + +public class test { + + public static void main(String[] args) { + // TODO Auto-generated method stub + String str ="[ProjectID]_9000"; + System.out.println(str.indexOf("[ProjectID]")); + Object stt = new Object[]{"1","2"}; + Object arr[] = (Object[])stt; + System.out.println(arr[0]); + + String s1="1||2"; + String[] s3 = s1.split("\\|\\|"); + System.out.println("len="+s3.length); + for(String s2:s3){ + System.out.println(s2); + } + } + +} diff --git a/src/ysr/com/teamcenter/BPMTest.java b/src/ysr/com/teamcenter/BPMTest.java new file mode 100644 index 0000000..d7afd67 --- /dev/null +++ b/src/ysr/com/teamcenter/BPMTest.java @@ -0,0 +1,171 @@ +package ysr.com.teamcenter; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + +public class BPMTest { + + public static void main(String[] args) { + // TODO Auto-generated method stub +// sendPStartNotificationToPLM(); +// sendOrderNoticeToPLM(); +// sendTravelOrderToPLM(); + SendDeliveryDateToPLM(); +// SendAccepComToPLM(); + } + + public static void SendAccepComToPLM(){ + String xml = ""+ + ""+ + ""+ + "张国良"+ + "2017-10-06 17:59:06"+//希望答复日期 + ""+ + "确认结果"+ + "原因"+ + "遗留事项"+ + "客户意见及建议"+ + "URL"+ + ""+ + ""; + YSRServerService ysrServer = new YSRServerService(); + String rError = ysrServer.getYSRServerPort().sendAccepComToPLM(xml); + System.out.println("rError="+rError); + } + + public static void SendDeliveryDateToPLM(){ + YSRServerService ysrServer = new YSRServerService(); + String rError = ysrServer.getYSRServerPort().sendDeliveryDateToPLM("000108", "2017-10-06 17:59:06"); + System.out.println("rError="+rError); + } + public static void sendQuotationToPLM(){ + String xml = ""+ + ""+ + ""+ + "订货厂家"+ + "最终用户"+ + "报价水平"+ + "19-Apr-2017 01:00:34"+//收到日期2017-05-06 08:59:06 + "2017-10-06 17:59:06"+//希望答复日期 + "销售担当"+ + "项目经理"+ + "报价等级"+ + "报价完成时间"+ + "联系人"+ + "所属部门"+ + "职务"+ + "联系电话"+ + "报价金额"+ + "URL"+ + ""+ + ""; + YSRServerService ysrServer = new YSRServerService(); + String rError = ysrServer.getYSRServerPort().sendQuotationToPLM(xml); + System.out.println("rError="+rError); + } + + public static void sendPStartNotificationToPLM(){ + String xml = ""+ + ""+ + ""+ + "2017-05-06 08:59:06"+ + "2017-10-06 17:59:06"+ + "发行版本"+ + "订货单编号"+ + "类型"+ + "10.2"+ + "2"+ + "80"+ + "销售担当"+ + "订货客户"+ + "最终用户"+ + "项目内容"+ + "预计合同支付方式"+ + "2017-11-06 17:59:06"+ + "2018-10-06 17:59:06"+ + "其他说明"+ + "URL"+ + ""+ + ""; + YSRServerService ysrServer = new YSRServerService(); + String rError = ysrServer.getYSRServerPort().sendPStartNotificationToPLM(xml); + System.out.println("rError="+rError); + } + + public static void sendOrderNoticeToPLM(){ + String xml = ""+ + ""+ + ""+ + "类型"+ + "2017-05-06 08:59:06"+ + "2017-10-06 17:59:06"+ + "营业担当"+ + "报价单编号"+ + "合同买方"+ + "最终用户"+ + "客户类别"+ + "出资国"+ + "行业"+ + "产品名称"+ + "用途"+ + ""+ + "10"+ + "收货公司名称"+ + "公司地址、邮编"+ + "联系人"+ + "电话"+ + "备注"+ + "URL"+ + ""+ + ""; + YSRServerService ysrServer = new YSRServerService(); + String rError = ysrServer.getYSRServerPort().sendOrderNoticeToPLM(xml); + System.out.println("rError="+rError); + } + + public static void sendTravelOrderToPLM(){ + String xml = ""+ + ""+ + ""+ + "委托人"+ + "2017-05-06 08:59:06"+ + "2017-05-10 08:59:06"+ + "2017-06-06 08:59:06"+ + "客户名称"+ + "项目号"+ + "客户地址"+ + "客户联系人"+ + "客户电话"+ + "出差内容"+ + "22"+ + "30"+ + "受托部门"+ + "出差人员"+ + "备注"+ + "是否有附件"+ + "URL"+ + ""+ + ""; + YSRServerService ysrServer = new YSRServerService(); + String rError = ysrServer.getYSRServerPort().sendTravelOrderToPLM(xml); + System.out.println("rError="+rError); + } + + private void test(){ + SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss",Locale.ENGLISH);// HH:mm:ss + try { + System.out.println(sdf.parse("19-Apr-2017 01:00:34")); +// System.out.println(sdf.parse("1970-02-30 00:00:00").getTime()); + + SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss",Locale.ENGLISH); + String date = dateFormat.format(new Date()); + System.out.println("date="+date); + + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } +} diff --git a/src/ysr/com/teamcenter/ObjectFactory.class b/src/ysr/com/teamcenter/ObjectFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..d6e7d26e6828bf8cb481f3f16860ff0f64124a7f GIT binary patch literal 7575 zcmcJUS#%Ud6o&r_kTh+C*dm66B^xAR8#WP1L?ZzdLkLNXpeRlzO&FXd&U7MC1Vr3% z-}imrP#-wTIX?KPufF=~o5xq5Jlv1<%&tIU7}MpSLla?F%-l*}iDQV*8Q}o9)XsYT3SGV;AQZKzo zO7=}AJxy-%oD7Kbk7R<+Ubj_yR^>Nq_^M{5)EEk_iZhp0Yo)5HyQ7Jyw@qMHN9TyZ z?Cr@hS73f$G~xD7#z(2b;n5f!X^Es<8WkRB6H;JfM`z!3Iu(i};~~!t$0KgSb5o&W zooMVk^XL+(32ZfAp+sN0P(%Jg>R1V^GLuy?p=OjrJ)5m?(Q=qN5xOZKW#MeggV&p5 z)psFmy$MSLP%e%z%kr3lJ1HOBIx|h%gP>O$paLCb!U)oshXmFUfz@VEKuxgLBCvd_ zn=S&H?M3hz^H9B)iq1n-OsM93oQC-?u)!Rqp$~!kJ4|=7sZZyO1%5P|7z^$0*?+^1 zm>Z`>fPiy{qT`9MH<_Zv}i3OY9`^_ z+0g!Y%+IOUjl?*w+-61td&Ki5wuWY`eQRkcT+2%$Ev+o1XgpnXLA{6Q*cn zrv-KxLo0l2C^cw_N^p$1DY0-;PMU_T@OZHmLw&j`m5+JFxG0h_qX30-k}HOKMqsb8 zwyHKeuBEa&U0Gt;S?1#7Y!~yiG-V*L#~5SbsOOj^7RwWrv01O~w&j+>JnR1x(O3f`EjQ~;3IVG-67yfb z?V;pkD&p>p^2@ffcl4+m@pgtIUNSYkmOq>bv=@IW9dyT|X)iV1Rg0b2B@nvE7jc2j zh8`scuiem5z1_`0smkmi3#>7)^|zkD^0M^wK4{PtJR9W0Xe&ofud4=G;L%E8UAfYH z5T-h-6HGw9a%jH77>1ITtNh0~_1&!&*I+A8s&8u1#lO0_xt5!4++4@a_1yGua|1Wq zx#{I*2e#5PNuHj2TgrU;W9~Wn=AkJ@!95^Q$Ba-coEQ&f&Ik;4%(x{KaF;xl(Ql81 z)9IoIGQ=+a0@j{^W_k{Jsc2$+W>^16=LnkVi|H2nz*|cnT&Y6ztAXnyEtN=Gs*jZhtWChtdE6+oGOFsl|qLx1{1FPxN z@)|m_8#hzS@+LaYa_a)B4xGoVbM!mYqgo!{L~S4TP^+kClX{M-?j~J7_6F6}q^?ob zy`&q!zM$G7^;}imN4h}_1=TjGFHzOQq#MR9L3J&uFICkCNjHL9gX(#tp0BFMNVgvc zg6cX_U#6;Kq`M8b2h|R#FIUwb=?>zKpn3tRuTa&;Np~j>1=R~leWj{CL%O>V4yx-( zy+~D`mFiK~YLQcf9KpSMWV16*i~QL~9@8SH2|0}W^vD*cR*U@AN8YbR@&xV2 z1A1huQ>{h*<|9vNktYc`fKz&8n`3E_zx&7swaC+i9K=I<BLDD_XSB$N3E787 z^vD&?Y%TIHANi;j`4}O0<8eK*-Ko+d|MrnjXpv9SpBB&NwvIn(ci?}YT|mbHr_-Sw zWYza*^u5*6TjG0bq_@=f)=F=g?}en-H9jdmE+K=6jo@x7_!x zlHLm6+bq5I{Pwni_F15j{vx`V{x88wET!Fd8SRTrG^Lv{iWW?u6(`U}2`|U%SV8O3 QQ`DylPs`HqcJ~bMFWIVpR{#J2 literal 0 HcmV?d00001 diff --git a/src/ysr/com/teamcenter/ObjectFactory.java b/src/ysr/com/teamcenter/ObjectFactory.java new file mode 100644 index 0000000..31d046d --- /dev/null +++ b/src/ysr/com/teamcenter/ObjectFactory.java @@ -0,0 +1,251 @@ + +package ysr.com.teamcenter; + +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlElementDecl; +import javax.xml.bind.annotation.XmlRegistry; +import javax.xml.namespace.QName; + + +/** + * This object contains factory methods for each + * Java content interface and Java element interface + * generated in the ysr.com.teamcenter package. + *

An ObjectFactory allows you to programatically + * construct new instances of the Java representation + * for XML content. The Java representation of XML + * content can consist of schema derived interfaces + * and classes representing the binding of schema + * type definitions, element declarations and model + * groups. Factory methods for each of these are + * provided in this class. + * + */ +@XmlRegistry +public class ObjectFactory { + + private final static QName _SendPStartNotificationToPLM_QNAME = new QName("http://teamcenter.com.ysr/", "SendPStartNotificationToPLM"); + private final static QName _SendDeliveryDateToPLMResponse_QNAME = new QName("http://teamcenter.com.ysr/", "SendDeliveryDateToPLMResponse"); + private final static QName _SendTravelOrderToPLM_QNAME = new QName("http://teamcenter.com.ysr/", "SendTravelOrderToPLM"); + private final static QName _SendDeliveryDateToPLM_QNAME = new QName("http://teamcenter.com.ysr/", "SendDeliveryDateToPLM"); + private final static QName _SendAccepComToPLM_QNAME = new QName("http://teamcenter.com.ysr/", "SendAccepComToPLM"); + private final static QName _SendAccepComToPLMResponse_QNAME = new QName("http://teamcenter.com.ysr/", "SendAccepComToPLMResponse"); + private final static QName _SendQuotationToPLM_QNAME = new QName("http://teamcenter.com.ysr/", "sendQuotationToPLM"); + private final static QName _SendOrderNoticeToPLM_QNAME = new QName("http://teamcenter.com.ysr/", "SendOrderNoticeToPLM"); + private final static QName _SendOrderNoticeToPLMResponse_QNAME = new QName("http://teamcenter.com.ysr/", "SendOrderNoticeToPLMResponse"); + private final static QName _SendQuotationToPLMResponse_QNAME = new QName("http://teamcenter.com.ysr/", "sendQuotationToPLMResponse"); + private final static QName _SendPStartNotificationToPLMResponse_QNAME = new QName("http://teamcenter.com.ysr/", "SendPStartNotificationToPLMResponse"); + private final static QName _SendTravelOrderToPLMResponse_QNAME = new QName("http://teamcenter.com.ysr/", "SendTravelOrderToPLMResponse"); + + /** + * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: ysr.com.teamcenter + * + */ + public ObjectFactory() { + } + + /** + * Create an instance of {@link SendTravelOrderToPLMResponse } + * + */ + public SendTravelOrderToPLMResponse createSendTravelOrderToPLMResponse() { + return new SendTravelOrderToPLMResponse(); + } + + /** + * Create an instance of {@link SendPStartNotificationToPLMResponse } + * + */ + public SendPStartNotificationToPLMResponse createSendPStartNotificationToPLMResponse() { + return new SendPStartNotificationToPLMResponse(); + } + + /** + * Create an instance of {@link SendOrderNoticeToPLM } + * + */ + public SendOrderNoticeToPLM createSendOrderNoticeToPLM() { + return new SendOrderNoticeToPLM(); + } + + /** + * Create an instance of {@link SendOrderNoticeToPLMResponse } + * + */ + public SendOrderNoticeToPLMResponse createSendOrderNoticeToPLMResponse() { + return new SendOrderNoticeToPLMResponse(); + } + + /** + * Create an instance of {@link SendQuotationToPLMResponse } + * + */ + public SendQuotationToPLMResponse createSendQuotationToPLMResponse() { + return new SendQuotationToPLMResponse(); + } + + /** + * Create an instance of {@link SendQuotationToPLM } + * + */ + public SendQuotationToPLM createSendQuotationToPLM() { + return new SendQuotationToPLM(); + } + + /** + * Create an instance of {@link SendAccepComToPLMResponse } + * + */ + public SendAccepComToPLMResponse createSendAccepComToPLMResponse() { + return new SendAccepComToPLMResponse(); + } + + /** + * Create an instance of {@link SendAccepComToPLM } + * + */ + public SendAccepComToPLM createSendAccepComToPLM() { + return new SendAccepComToPLM(); + } + + /** + * Create an instance of {@link SendDeliveryDateToPLM } + * + */ + public SendDeliveryDateToPLM createSendDeliveryDateToPLM() { + return new SendDeliveryDateToPLM(); + } + + /** + * Create an instance of {@link SendDeliveryDateToPLMResponse } + * + */ + public SendDeliveryDateToPLMResponse createSendDeliveryDateToPLMResponse() { + return new SendDeliveryDateToPLMResponse(); + } + + /** + * Create an instance of {@link SendTravelOrderToPLM } + * + */ + public SendTravelOrderToPLM createSendTravelOrderToPLM() { + return new SendTravelOrderToPLM(); + } + + /** + * Create an instance of {@link SendPStartNotificationToPLM } + * + */ + public SendPStartNotificationToPLM createSendPStartNotificationToPLM() { + return new SendPStartNotificationToPLM(); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link SendPStartNotificationToPLM }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://teamcenter.com.ysr/", name = "SendPStartNotificationToPLM") + public JAXBElement createSendPStartNotificationToPLM(SendPStartNotificationToPLM value) { + return new JAXBElement(_SendPStartNotificationToPLM_QNAME, SendPStartNotificationToPLM.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link SendDeliveryDateToPLMResponse }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://teamcenter.com.ysr/", name = "SendDeliveryDateToPLMResponse") + public JAXBElement createSendDeliveryDateToPLMResponse(SendDeliveryDateToPLMResponse value) { + return new JAXBElement(_SendDeliveryDateToPLMResponse_QNAME, SendDeliveryDateToPLMResponse.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link SendTravelOrderToPLM }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://teamcenter.com.ysr/", name = "SendTravelOrderToPLM") + public JAXBElement createSendTravelOrderToPLM(SendTravelOrderToPLM value) { + return new JAXBElement(_SendTravelOrderToPLM_QNAME, SendTravelOrderToPLM.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link SendDeliveryDateToPLM }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://teamcenter.com.ysr/", name = "SendDeliveryDateToPLM") + public JAXBElement createSendDeliveryDateToPLM(SendDeliveryDateToPLM value) { + return new JAXBElement(_SendDeliveryDateToPLM_QNAME, SendDeliveryDateToPLM.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link SendAccepComToPLM }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://teamcenter.com.ysr/", name = "SendAccepComToPLM") + public JAXBElement createSendAccepComToPLM(SendAccepComToPLM value) { + return new JAXBElement(_SendAccepComToPLM_QNAME, SendAccepComToPLM.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link SendAccepComToPLMResponse }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://teamcenter.com.ysr/", name = "SendAccepComToPLMResponse") + public JAXBElement createSendAccepComToPLMResponse(SendAccepComToPLMResponse value) { + return new JAXBElement(_SendAccepComToPLMResponse_QNAME, SendAccepComToPLMResponse.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link SendQuotationToPLM }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://teamcenter.com.ysr/", name = "sendQuotationToPLM") + public JAXBElement createSendQuotationToPLM(SendQuotationToPLM value) { + return new JAXBElement(_SendQuotationToPLM_QNAME, SendQuotationToPLM.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link SendOrderNoticeToPLM }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://teamcenter.com.ysr/", name = "SendOrderNoticeToPLM") + public JAXBElement createSendOrderNoticeToPLM(SendOrderNoticeToPLM value) { + return new JAXBElement(_SendOrderNoticeToPLM_QNAME, SendOrderNoticeToPLM.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link SendOrderNoticeToPLMResponse }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://teamcenter.com.ysr/", name = "SendOrderNoticeToPLMResponse") + public JAXBElement createSendOrderNoticeToPLMResponse(SendOrderNoticeToPLMResponse value) { + return new JAXBElement(_SendOrderNoticeToPLMResponse_QNAME, SendOrderNoticeToPLMResponse.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link SendQuotationToPLMResponse }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://teamcenter.com.ysr/", name = "sendQuotationToPLMResponse") + public JAXBElement createSendQuotationToPLMResponse(SendQuotationToPLMResponse value) { + return new JAXBElement(_SendQuotationToPLMResponse_QNAME, SendQuotationToPLMResponse.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link SendPStartNotificationToPLMResponse }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://teamcenter.com.ysr/", name = "SendPStartNotificationToPLMResponse") + public JAXBElement createSendPStartNotificationToPLMResponse(SendPStartNotificationToPLMResponse value) { + return new JAXBElement(_SendPStartNotificationToPLMResponse_QNAME, SendPStartNotificationToPLMResponse.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link SendTravelOrderToPLMResponse }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://teamcenter.com.ysr/", name = "SendTravelOrderToPLMResponse") + public JAXBElement createSendTravelOrderToPLMResponse(SendTravelOrderToPLMResponse value) { + return new JAXBElement(_SendTravelOrderToPLMResponse_QNAME, SendTravelOrderToPLMResponse.class, null, value); + } + +} diff --git a/src/ysr/com/teamcenter/SendAccepComToBPM.class b/src/ysr/com/teamcenter/SendAccepComToBPM.class new file mode 100644 index 0000000000000000000000000000000000000000..e52f6e78b26196724ff5608daf174204cc47d235 GIT binary patch literal 678 zcmaixT}xX*5Qg8)*D+~Y6E(JK6~8W`qU(h>+9IS{L5Q_9K?JWhCrem4XE*HGi1}9v zir|Gmz#k=@bJU6-R2F7tXWw~dmbtyVz5%d?sRA+>&m)Zq4_`e@GGv79tTGJMkHv}L zfzTb^a8~KgH-_AIrIp)cNLLpQNV;X(l3}o}wEWczThcZ~E1-N)&02dR6W-0?Eb88GtB+J(}Oyr zMMw?Gul~Z2?^@H{w{2;Q@GwwB7CDCbeq_0CLhhspeW{(a{Egz$)1vlU$I^G0p?zj( zzqFy4L{XYz0+Y?tZIV1ApIy8HJ5PiKvbiKVP4)wdWS>hfkUD!IT_({-e0q@1B1MNV ui%XYCJz)z;cAX~KplFa3DU?tqKSj|HRS!#ypn_4leva@3V@F^SvVQ^6pPNDe literal 0 HcmV?d00001 diff --git a/src/ysr/com/teamcenter/SendAccepComToBPM.java b/src/ysr/com/teamcenter/SendAccepComToBPM.java new file mode 100644 index 0000000..70c84f7 --- /dev/null +++ b/src/ysr/com/teamcenter/SendAccepComToBPM.java @@ -0,0 +1,60 @@ + +package ysr.com.teamcenter; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + *

SendAccepComToBPM complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType name="SendAccepComToBPM">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="arg0" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "SendAccepComToBPM", propOrder = { + "arg0" +}) +public class SendAccepComToBPM { + + protected String arg0; + + /** + * 获取arg0属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getArg0() { + return arg0; + } + + /** + * 设置arg0属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setArg0(String value) { + this.arg0 = value; + } + +} diff --git a/src/ysr/com/teamcenter/SendAccepComToBPMResponse.class b/src/ysr/com/teamcenter/SendAccepComToBPMResponse.class new file mode 100644 index 0000000000000000000000000000000000000000..22ba6156a118ad1444c5f2ad1b609b10789a843a GIT binary patch literal 776 zcmaJg;o0t=n>Lr(9y5vQ+qwWT+?8Im6;t|d?(Q|wLMt#sD^=dT`S zkk!t=h(f>7cezh!Ul*F~KH1Sul2Eqm%)q^P`?^OV<9_IA(Z0au{H_XW2+j{qGvd}N z$12TP_RQRc|Kf~w&e?yp*L^AQXnv(Bx^cd|KpqiQjrag8`zb$m?ZJt#K3_D;r-S zK24ZccrBPNRl8KsYZK_!E(VR;IDh!Q_6v$6RFrI~DF@^y=?ZS(FrBT87A aSZwodmDx84H*pIsKC;`}xbq$&pz;gDa=VQH literal 0 HcmV?d00001 diff --git a/src/ysr/com/teamcenter/SendAccepComToBPMResponse.java b/src/ysr/com/teamcenter/SendAccepComToBPMResponse.java new file mode 100644 index 0000000..5c52e9a --- /dev/null +++ b/src/ysr/com/teamcenter/SendAccepComToBPMResponse.java @@ -0,0 +1,62 @@ + +package ysr.com.teamcenter; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

SendAccepComToBPMResponse complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType name="SendAccepComToBPMResponse">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="return" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "SendAccepComToBPMResponse", propOrder = { + "_return" +}) +public class SendAccepComToBPMResponse { + + @XmlElement(name = "return") + protected String _return; + + /** + * 获取return属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getReturn() { + return _return; + } + + /** + * 设置return属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setReturn(String value) { + this._return = value; + } + +} diff --git a/src/ysr/com/teamcenter/SendAccepComToPLM.class b/src/ysr/com/teamcenter/SendAccepComToPLM.class new file mode 100644 index 0000000000000000000000000000000000000000..c7da2b390fb3a41eb438283d6632a8bdf1851863 GIT binary patch literal 678 zcmaixTT5F(5Xb+U+i7Cz{n|FcRv)5L*N47%K?qTykk(>C5PaI4EMeuG-LPjP`mGc! zf)9QGKUC?Qqfxw|EX>T#{^vKd%R+e4^dC@>H zReAXyvkMK=x4zs{F>ksdb*Jk4vR5-<)BLIbT8*b;m^`M{{i`Hn_vI{ literal 0 HcmV?d00001 diff --git a/src/ysr/com/teamcenter/SendAccepComToPLM.java b/src/ysr/com/teamcenter/SendAccepComToPLM.java new file mode 100644 index 0000000..0024a43 --- /dev/null +++ b/src/ysr/com/teamcenter/SendAccepComToPLM.java @@ -0,0 +1,60 @@ + +package ysr.com.teamcenter; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + *

SendAccepComToPLM complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType name="SendAccepComToPLM">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="arg0" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "SendAccepComToPLM", propOrder = { + "arg0" +}) +public class SendAccepComToPLM { + + protected String arg0; + + /** + * 获取arg0属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getArg0() { + return arg0; + } + + /** + * 设置arg0属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setArg0(String value) { + this.arg0 = value; + } + +} diff --git a/src/ysr/com/teamcenter/SendAccepComToPLMResponse.class b/src/ysr/com/teamcenter/SendAccepComToPLMResponse.class new file mode 100644 index 0000000000000000000000000000000000000000..04e1549c6d325b96b8477b0013f97bf4f0389944 GIT binary patch literal 776 zcmaJ z2tN1&{88fFG&T6quZv~dS z$Ld7MRN1lYN3ZR8OQ6-uZPbPibg-t0t=n>Lr(9y5vQ+rwWYVY8Im6;t|d?(Q|wLMt#sD^=dT`S zkk!t=h(f>7cezh!Ul*F~KH1Sul2Eqm%)q_tzUfiOxF336v@ftZzpH{8g7bs3jJUPR ziAr;pJvVphzc^=IaQ0vCbzccQnO|v&Ze41ae^BOKcHl?kn^;7%i3+L$&(4CEi8C^i zG6|1>yqqJlG#mTD@R*W_M|?rbd|`Mrg(AlqpB6b@;kO>pV1Otp@_Ln1Ya9i~%EniS zPZQ=fUJE8zjc1D`UjKxCM(N{UP|2VhSe`;3qr?x(Y;1l(X(rp4eBEMe+q}EUh!R#N a7TdgAW%ez?ZQMbNkL>m??!AWysQd!#zPqac literal 0 HcmV?d00001 diff --git a/src/ysr/com/teamcenter/SendAccepComToPLMResponse.java b/src/ysr/com/teamcenter/SendAccepComToPLMResponse.java new file mode 100644 index 0000000..15bd4bd --- /dev/null +++ b/src/ysr/com/teamcenter/SendAccepComToPLMResponse.java @@ -0,0 +1,62 @@ + +package ysr.com.teamcenter; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

SendAccepComToPLMResponse complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType name="SendAccepComToPLMResponse">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="return" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "SendAccepComToPLMResponse", propOrder = { + "_return" +}) +public class SendAccepComToPLMResponse { + + @XmlElement(name = "return") + protected String _return; + + /** + * 获取return属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getReturn() { + return _return; + } + + /** + * 设置return属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setReturn(String value) { + this._return = value; + } + +} diff --git a/src/ysr/com/teamcenter/SendBPMToPLM.class b/src/ysr/com/teamcenter/SendBPMToPLM.class new file mode 100644 index 0000000000000000000000000000000000000000..e37253e3ef852eb741ee543b03ff2318d64910ee GIT binary patch literal 663 zcmah`T}xX*5Ivi(Ytr};t5#bRtG+~~T_1d@mO@%96ru?x1ffrxnC;i2kbz zmO>x=0sbiIA)dTZXMz z^NgQ`0dFha;o|QvKM8}1?@MbV(>(7>+A4i2f&q28o%ETiQO&`(uho5q^`|@Cu~S-v z)F5xi)?mo?P1LWMjx>3An8+iI48zK~HQbLv?xYBPshu=@e0_$Q`^(hYJ?T5F(g9O+ zP&&y_giw+&X_C!SR3y*Hr#F9rUBtv3*-V^#OZElwWFJy5k@)e5`i@AGn7X5`AwiF1 uHn)BvaW9*Tvma=ZT|(2uNMHs9@+CsERQ*z74)a)`@Rh|PmcD~or2hc$E0rAp literal 0 HcmV?d00001 diff --git a/src/ysr/com/teamcenter/SendBPMToPLMResponse.class b/src/ysr/com/teamcenter/SendBPMToPLMResponse.class new file mode 100644 index 0000000000000000000000000000000000000000..f3a170759749326608bf2cfff3881bcdb430fb82 GIT binary patch literal 761 zcmaJ>b7O2!Q@QNU?wvDd&dluZKRc{Nfj(hB$X=+0UNz^6VQJhPl*eBl_sjJlLlk^qc z7&2eGk4X7T?KrUk?dg=W+9uQ6I@<5VN6q~fxdE3#AJfVORv#{CGYH7J*mf=k#8u_a zRG2X1wXXlR;X3LjX7BTEb4TFa!1jaLD}yuh_L{ literal 0 HcmV?d00001 diff --git a/src/ysr/com/teamcenter/SendDeliveryDateToPLM.class b/src/ysr/com/teamcenter/SendDeliveryDateToPLM.class new file mode 100644 index 0000000000000000000000000000000000000000..c0b2e29fb8287c5b010e8d3cf46d94fbb2d4ba51 GIT binary patch literal 829 zcmaiy-%b-j6vn^V{#m+IL7)mKYRgT5gu%o+(WJ2wO{y4MiHTR!?MX9acea_GHuS9| z!I*gA1NczJv!zI^Rd3EYbLN}hcP2C6e|-H0;4!uX6mY+UJRW4>p^vJMnm}IJ{(-r{=DjFjoiwzJywpIq)e5-1*Oqun!sTz%(+yU&vz2`sg=p*O?0OSYrB5qJDPxyFRH zR^OS&^V2IqrT*uB#-1YBbgJblXeUD((vi+QHrr%+O^Wo0?6|2Mb&|KO*ZbM<0vqp! z#_5<&bgFrxhB1j#PA4W6*qa!h$+I|;U2S?&{o0iu;;0dZl%|R8j0eOwFN{<)WV_32 z{O8ownWI-PT1|oNe>+Xpd81-BsLZ{OKxtr;!LjX;Eu(~>j3WFp7T^oi$ElTJ5=%!a z4#_yO@-LL->qkBAo>J&g<+m^JhwwNvlB;}1+XJmIOjs3%&|CW z);Qk4O^&}yFW`Neksh#U3CmMyjeWfgv%B{h-ZeIubPsukr>wj+7oD3$zhvpkd~|LW o-C^{5Hd$qJ4{NA!u5xvo8FvWl*uW+)@20qit&i|h6jLnx1bdCG&;S4c literal 0 HcmV?d00001 diff --git a/src/ysr/com/teamcenter/SendDeliveryDateToPLM.java b/src/ysr/com/teamcenter/SendDeliveryDateToPLM.java new file mode 100644 index 0000000..5fa717e --- /dev/null +++ b/src/ysr/com/teamcenter/SendDeliveryDateToPLM.java @@ -0,0 +1,87 @@ + +package ysr.com.teamcenter; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + *

SendDeliveryDateToPLM complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType name="SendDeliveryDateToPLM">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="arg0" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="arg1" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "SendDeliveryDateToPLM", propOrder = { + "arg0", + "arg1" +}) +public class SendDeliveryDateToPLM { + + protected String arg0; + protected String arg1; + + /** + * 获取arg0属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getArg0() { + return arg0; + } + + /** + * 设置arg0属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setArg0(String value) { + this.arg0 = value; + } + + /** + * 获取arg1属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getArg1() { + return arg1; + } + + /** + * 设置arg1属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setArg1(String value) { + this.arg1 = value; + } + +} diff --git a/src/ysr/com/teamcenter/SendDeliveryDateToPLMResponse.class b/src/ysr/com/teamcenter/SendDeliveryDateToPLMResponse.class new file mode 100644 index 0000000000000000000000000000000000000000..21af296a79dfbfeb1bebc24c177663a94b79914a GIT binary patch literal 788 zcmah{T}xX*5Ir07VPe{*e$-kUZ7r0j(Cve7iXe?bA=Q!uDfB@$H$zytcW>C;8_d6I zp+)e)AJ89FIyc6KwwiL;ncX{Q&YYduA3v|I0qo#K30XWZVg}U$)(Th`D4bdHi8TWA zjdL|nGE}A~Ti$BZ+Z9-8CdTWCPPNmWkPeKAz4AIXPT=(@;X+SendDeliveryDateToPLMResponse complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType name="SendDeliveryDateToPLMResponse">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="return" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "SendDeliveryDateToPLMResponse", propOrder = { + "_return" +}) +public class SendDeliveryDateToPLMResponse { + + @XmlElement(name = "return") + protected String _return; + + /** + * 获取return属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getReturn() { + return _return; + } + + /** + * 设置return属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setReturn(String value) { + this._return = value; + } + +} diff --git a/src/ysr/com/teamcenter/SendOrderNoticeToPLM.class b/src/ysr/com/teamcenter/SendOrderNoticeToPLM.class new file mode 100644 index 0000000000000000000000000000000000000000..7450a41efd4146f254687469164f88ed17618ab3 GIT binary patch literal 687 zcmah`T}xX*5Ivi(Ytpo8OxmhVsQO?&(CtHC`avO71tHba1S$Bmxmm)7dw0X$P0)X( z&?5NIAJ89FI=M|6T7$AMGdpw6nHlEiuiGC0UZavj3L9A@vFYK3hcZJ-*#0YqLTez# zf(JtPdD~f~`|lVs@0C{W14FV}J0s{v(~}I#Ev4njDC|nx5#4|?USGOqEK{u3772OL z3{a}xtxvRbZ8NgIJW>4j``gBv_Bb;YF|d$sZgG&NKx~q*2W2^ zjE)!@vGxVO2m{_#y2r)eD*qY=P2ZPMWNhbhC~3R&SOg>L_GjV;SToMi@nP$LVdwr% zQ*=s;kQx*ht;3KVS~HBd%)`S{9%*D4b}u8#eG_sgMd(ZIq~(kGEAxw;b_ddT*rLOx z=+Jbki5NvmibKFx7iZtlByTBNCPV@&SS4Sfs6gyBi6TmPO5bM@o@4zSEJFG>CcB@K literal 0 HcmV?d00001 diff --git a/src/ysr/com/teamcenter/SendOrderNoticeToPLM.java b/src/ysr/com/teamcenter/SendOrderNoticeToPLM.java new file mode 100644 index 0000000..f39f816 --- /dev/null +++ b/src/ysr/com/teamcenter/SendOrderNoticeToPLM.java @@ -0,0 +1,60 @@ + +package ysr.com.teamcenter; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + *

SendOrderNoticeToPLM complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType name="SendOrderNoticeToPLM">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="arg0" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "SendOrderNoticeToPLM", propOrder = { + "arg0" +}) +public class SendOrderNoticeToPLM { + + protected String arg0; + + /** + * 获取arg0属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getArg0() { + return arg0; + } + + /** + * 设置arg0属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setArg0(String value) { + this.arg0 = value; + } + +} diff --git a/src/ysr/com/teamcenter/SendOrderNoticeToPLMResponse.class b/src/ysr/com/teamcenter/SendOrderNoticeToPLMResponse.class new file mode 100644 index 0000000000000000000000000000000000000000..b66143979eadf0692c27b80d2807046bd7fd5207 GIT binary patch literal 785 zcmaJYvW@c}0e_jLF#OoT0Sgc|KOBF0vup&@7bre!(1ZJCO z>RicKnZ9fXr%iuLV4;yg{HK}XcFhs`f7@&hi3-e(;U*ce~fP85;%)^#oi z#MPC~Rh%;Oy}tjp<38#kX7BTE^OL~a@tKC`#c`UsO#^2Kc}aClqFzS{WdV8Vos4WE z1F0n9L6DQSendOrderNoticeToPLMResponse complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType name="SendOrderNoticeToPLMResponse">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="return" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "SendOrderNoticeToPLMResponse", propOrder = { + "_return" +}) +public class SendOrderNoticeToPLMResponse { + + @XmlElement(name = "return") + protected String _return; + + /** + * 获取return属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getReturn() { + return _return; + } + + /** + * 设置return属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setReturn(String value) { + this._return = value; + } + +} diff --git a/src/ysr/com/teamcenter/SendPStartNotificationToPLM.class b/src/ysr/com/teamcenter/SendPStartNotificationToPLM.class new file mode 100644 index 0000000000000000000000000000000000000000..ce2319ae4dc2b607f2f1f5766d929d35baca7f8e GIT binary patch literal 708 zcmaix-%49S5XQgFztg0tNn=u*T1D+mRLu6GH@2k^Y6FGT1QSH?YICv;E9dNnJsUA^ z)q*1Qq7TrA5+}!4u}aFq%bhD;2lCG7AmL#cHl zP6ZEy9`dfUN)JCUWIigb+$V-)ZS#=O&t@PQ3N5AO{y6MQ+Y|kOGTu*8$Pa?~G6LKd-=u7RS<#T0Z2D*T_Cap6q?}9El(QpgROT z!@>;RK!Og*Y;9j4aVMLLv%56Odx{D~Bv8b2@~ae;sCrSNj0#@Rbt%G2RFASendPStartNotificationToPLM complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType name="SendPStartNotificationToPLM">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="arg0" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "SendPStartNotificationToPLM", propOrder = { + "arg0" +}) +public class SendPStartNotificationToPLM { + + protected String arg0; + + /** + * 获取arg0属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getArg0() { + return arg0; + } + + /** + * 设置arg0属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setArg0(String value) { + this.arg0 = value; + } + +} diff --git a/src/ysr/com/teamcenter/SendPStartNotificationToPLMResponse.class b/src/ysr/com/teamcenter/SendPStartNotificationToPLMResponse.class new file mode 100644 index 0000000000000000000000000000000000000000..f8d2dc3e19fc7cc775ff2140137225a252a60993 GIT binary patch literal 806 zcma)4T}xX*5Ir07(ZsZVRNLBCtqKwqx-X?KN zS_*yW59p5)=U!t&zeFxOvwP>vnKQHd^YZ%-0I%?(h9aIx!k!KKL`Qi$9edFH&>}zJ&gf+}2!V~;``eBp z^4_}6#elfU(wT}=E^saLzf-x+y2;snztemtuyT8)A$sKw(s^hDX9xSPN3M=>)axjr zEb#imI~mzT22x4H*FsL-iEeWADE7Oj6a_5t^C|Lk;)~0;*;n{9&i)>+sz;3hBCE~z zK8NPn3-+b;ZxEmJ%m-|LYGnCk7?F7zM?Rqt>u3= kS=tuw9x|eUnOx!m?`Aps5#ceOV2+Qh_9>nnLwJ;~041=SendPStartNotificationToPLMResponse complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType name="SendPStartNotificationToPLMResponse">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="return" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "SendPStartNotificationToPLMResponse", propOrder = { + "_return" +}) +public class SendPStartNotificationToPLMResponse { + + @XmlElement(name = "return") + protected String _return; + + /** + * 获取return属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getReturn() { + return _return; + } + + /** + * 设置return属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setReturn(String value) { + this._return = value; + } + +} diff --git a/src/ysr/com/teamcenter/SendQuotationToPLM.class b/src/ysr/com/teamcenter/SendQuotationToPLM.class new file mode 100644 index 0000000000000000000000000000000000000000..a15b82b080ca34089e36b214f777d60faf900679 GIT binary patch literal 681 zcmaixZEF)j5Xb+Ur!z6NHBGI3q_!0DKwV$>Mk_+l77FQOLJ|6E@3MpqcY9%XFSOrE zK@oi62k=7`CueH0DV2kn+1cOxXZGgT^^czbUSqw49F~j7V#UL%hc$+rF#T5ymG(f4 z1P_Jo^Nur0_jefz@03>VJwvuuKPU7<+>;EmZKdT=68X|}g&$JJ>r2;4WvaFMeL|kS z0Tyc0_hao+Cr(Tt_tjW$u_JZwG>M&XD%Rcjq<#2uJRZZ+S)!eaGK$fAI zDqr%;DCEAl>ZWG@V6Xj=Ve8>e6FR3w zL=7r->M;z(p^1mbrYB7q9v+pEM}cAc${HTT5qDBVfz(bKKK&~g=5BX&>n!%F^x`_;Z vB-3bqL*`btlxE-1ByTC2B_e}4JSD$QQH84KC8}7!GdeC>Jjc=nm_`0Ka#Wq( literal 0 HcmV?d00001 diff --git a/src/ysr/com/teamcenter/SendQuotationToPLM.java b/src/ysr/com/teamcenter/SendQuotationToPLM.java new file mode 100644 index 0000000..5ce0791 --- /dev/null +++ b/src/ysr/com/teamcenter/SendQuotationToPLM.java @@ -0,0 +1,60 @@ + +package ysr.com.teamcenter; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + *

sendQuotationToPLM complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType name="sendQuotationToPLM">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="arg0" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "sendQuotationToPLM", propOrder = { + "arg0" +}) +public class SendQuotationToPLM { + + protected String arg0; + + /** + * 获取arg0属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getArg0() { + return arg0; + } + + /** + * 设置arg0属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setArg0(String value) { + this.arg0 = value; + } + +} diff --git a/src/ysr/com/teamcenter/SendQuotationToPLMResponse.class b/src/ysr/com/teamcenter/SendQuotationToPLMResponse.class new file mode 100644 index 0000000000000000000000000000000000000000..da7707d951409e0cb7c33df9e5b3635e1948cfc2 GIT binary patch literal 779 zcmaJ%*=)CyWA{1>wh*pzQ3O>kYa|u&+XT!{FY5$di zBKY7B@JESf)70Qc$};!P>^=9~bLY;FpWnU%c!v88lyR?)8LZT>TEm(`?Sqq$JF76? zK8{WzokVt^yTKVd*iu;PLZ}PM!?jT|ZV@CdDcbF-mBgAONB?5R~n<2{Zz%gqM^%%`>rppiCHw8sGzFwVnr7?#fPEYS!VQw<{{ob*}0T1{_%6v1NPC-du<7t-u3Rm5uL4Ybs(q3g~g cEQ}sendQuotationToPLMResponse complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType name="sendQuotationToPLMResponse">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="return" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "sendQuotationToPLMResponse", propOrder = { + "_return" +}) +public class SendQuotationToPLMResponse { + + @XmlElement(name = "return") + protected String _return; + + /** + * 获取return属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getReturn() { + return _return; + } + + /** + * 设置return属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setReturn(String value) { + this._return = value; + } + +} diff --git a/src/ysr/com/teamcenter/SendTravelOrderToPLM.class b/src/ysr/com/teamcenter/SendTravelOrderToPLM.class new file mode 100644 index 0000000000000000000000000000000000000000..524670471be75a2f158675cfa7f2a9db66d92293 GIT binary patch literal 687 zcmah`$w~u35Ph9(OpJTn7hDcTMcacH7lhyfLR>IG1W%nw6Iy0^LQf~?UnwYp2S31% z5-a0|8kB~r>Z(`oRZ-6`k52&BFqJ_9V`;=O?qI^fBtt@&+A2eT@lrGe_k^zTk~K=# zHW^Y|N-Mj~5YI215p*Z0N`{`I((kT?5jo)pU@-r?-r~-b zf`)PBzH0G}mZYwhjc7{m*i=a-I4K^kv<9TwX+vA(%QF=!5-(^SSYcJ5Lx!b@`-)%r z9Ir-&wa1px-tv{Q@*ZC+Ai4?UW3%$CjO`Eqi6qMuei%F_qWnJI-!M60=ahU zFr@1ys7L!{;h-anBvK6X*P-EV;Bza5?@Dc@;qCi-zb`K>ho)1t$S8_a zOx$GC^qVBl$R`&cz-}X8hHNTIPLu6Kmh5-v9bz{>pvwg6Liam#7BPB6v$%AR*cWXk m%C6HS8x-{rB8Fb{k)NWdpSlMmau~!AeTPGgVDthkMDi6@^q;l> literal 0 HcmV?d00001 diff --git a/src/ysr/com/teamcenter/SendTravelOrderToPLM.java b/src/ysr/com/teamcenter/SendTravelOrderToPLM.java new file mode 100644 index 0000000..babb506 --- /dev/null +++ b/src/ysr/com/teamcenter/SendTravelOrderToPLM.java @@ -0,0 +1,60 @@ + +package ysr.com.teamcenter; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + *

SendTravelOrderToPLM complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType name="SendTravelOrderToPLM">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="arg0" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "SendTravelOrderToPLM", propOrder = { + "arg0" +}) +public class SendTravelOrderToPLM { + + protected String arg0; + + /** + * 获取arg0属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getArg0() { + return arg0; + } + + /** + * 设置arg0属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setArg0(String value) { + this.arg0 = value; + } + +} diff --git a/src/ysr/com/teamcenter/SendTravelOrderToPLMResponse.class b/src/ysr/com/teamcenter/SendTravelOrderToPLMResponse.class new file mode 100644 index 0000000000000000000000000000000000000000..62b48080bc3471bd3e7213e126c9af2db3dd3edc GIT binary patch literal 785 zcmaJ8L2CiA6M39@m>SmORW^b<-S{(x$NZeV!|eTWi2((LShMrlUdDE{tI+CEP=i6~*E akhsayDx+@+ZsQKtc%|CAxc3e!L**x_uD}5R literal 0 HcmV?d00001 diff --git a/src/ysr/com/teamcenter/SendTravelOrderToPLMResponse.java b/src/ysr/com/teamcenter/SendTravelOrderToPLMResponse.java new file mode 100644 index 0000000..7e35f32 --- /dev/null +++ b/src/ysr/com/teamcenter/SendTravelOrderToPLMResponse.java @@ -0,0 +1,62 @@ + +package ysr.com.teamcenter; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

SendTravelOrderToPLMResponse complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType name="SendTravelOrderToPLMResponse">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="return" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "SendTravelOrderToPLMResponse", propOrder = { + "_return" +}) +public class SendTravelOrderToPLMResponse { + + @XmlElement(name = "return") + protected String _return; + + /** + * 获取return属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getReturn() { + return _return; + } + + /** + * 设置return属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setReturn(String value) { + this._return = value; + } + +} diff --git a/src/ysr/com/teamcenter/YSRServerDelegate.class b/src/ysr/com/teamcenter/YSRServerDelegate.class new file mode 100644 index 0000000000000000000000000000000000000000..767712ee693f8fb33ef526732269de847ee77d3e GIT binary patch literal 3325 zcmb_eSyR+N5bi+^K~WYLlvBAuj({K{c&)$!7MHt}X!$gR5kh5?H8YFw*L?5?_@gX) zvN?8l5+sEWd!*C-ecfMo&Ghd-KYszh0(@wK%_i6)(9W54{IO&UDh%5?u=lrj2#k(z zpV4!wnbbPb^1?B!la&e8M4&5IvV>7!pA2psnJi;j9uOzc;Ral2XFs@h$c}cHIJJ*g z6nl>Gk}1%BUr^_SiCtP?yhwFM00{JXAQuHwL!2D@USeDvI<#114hA)wwoXkML!kRq zh~l!Q2}TP#vjlTybh|Kf$sG+Hb(3;lb{s*I`>Mh-A0b13EjcgR7H1)Qw<;c%<2n(T zz7|X9@9X82n$cxLu*3$#DwYI+_4x9>QvN;Xm^o5?oq5MWT4tk~ z$6}OFJ$s`7LS?jT0)-J9NlUNI$va30Y~CEHO1%Szo-@;>t5i=l$El}!y6V-MLoMRe zi;qaGo(koSU}E)DBwxJ_IeU118F-9cuHhNx$+r}77r95tzi+1wId&0{<1zCV;o27o z5sE*1U8pc5v1UqI!SHS+9o`5iUw?T5&k;z;He__26<6(o*MgK3p~f~GQ+SPAml7HZ zF?Ah?(0wgwu~n%AnkBkMugJb7Z{Ht3f|+M5V{%)r1n1N&A?@HcN~qzIQ?c`Cdq-zX7g?$c+qpz%*{NEe z2=caY<0~UH65PM)a9adutS4{_>hY-opH}g^5r3QT{cR4-(1I`TaQwojyU@zv9^5aR z+5%Gw+A;hAhct9>=!Ay|kdh3K(A>qL+l4}&o`7f5Yt#eb{#!GT&UBdue4*{?u!*!T;1JJRX^ literal 0 HcmV?d00001 diff --git a/src/ysr/com/teamcenter/YSRServerDelegate.java b/src/ysr/com/teamcenter/YSRServerDelegate.java new file mode 100644 index 0000000..ac58f52 --- /dev/null +++ b/src/ysr/com/teamcenter/YSRServerDelegate.java @@ -0,0 +1,120 @@ + +package ysr.com.teamcenter; + +import javax.jws.WebMethod; +import javax.jws.WebParam; +import javax.jws.WebResult; +import javax.jws.WebService; +import javax.xml.bind.annotation.XmlSeeAlso; +import javax.xml.ws.Action; +import javax.xml.ws.RequestWrapper; +import javax.xml.ws.ResponseWrapper; + + +/** + * This class was generated by the JAX-WS RI. + * JAX-WS RI 2.2.9-b130926.1035 + * Generated source version: 2.2 + * + */ +@WebService(name = "YSRServerDelegate", targetNamespace = "http://teamcenter.com.ysr/") +@XmlSeeAlso({ + ObjectFactory.class +}) +public interface YSRServerDelegate { + + + /** + * + * @param arg0 + * @return + * returns java.lang.String + */ + @WebMethod + @WebResult(targetNamespace = "") + @RequestWrapper(localName = "sendQuotationToPLM", targetNamespace = "http://teamcenter.com.ysr/", className = "ysr.com.teamcenter.SendQuotationToPLM") + @ResponseWrapper(localName = "sendQuotationToPLMResponse", targetNamespace = "http://teamcenter.com.ysr/", className = "ysr.com.teamcenter.SendQuotationToPLMResponse") + @Action(input = "http://teamcenter.com.ysr/YSRServerDelegate/sendQuotationToPLMRequest", output = "http://teamcenter.com.ysr/YSRServerDelegate/sendQuotationToPLMResponse") + public String sendQuotationToPLM( + @WebParam(name = "arg0", targetNamespace = "") + String arg0); + + /** + * + * @param arg0 + * @return + * returns java.lang.String + */ + @WebMethod(operationName = "SendPStartNotificationToPLM") + @WebResult(targetNamespace = "") + @RequestWrapper(localName = "SendPStartNotificationToPLM", targetNamespace = "http://teamcenter.com.ysr/", className = "ysr.com.teamcenter.SendPStartNotificationToPLM") + @ResponseWrapper(localName = "SendPStartNotificationToPLMResponse", targetNamespace = "http://teamcenter.com.ysr/", className = "ysr.com.teamcenter.SendPStartNotificationToPLMResponse") + @Action(input = "http://teamcenter.com.ysr/YSRServerDelegate/SendPStartNotificationToPLMRequest", output = "http://teamcenter.com.ysr/YSRServerDelegate/SendPStartNotificationToPLMResponse") + public String sendPStartNotificationToPLM( + @WebParam(name = "arg0", targetNamespace = "") + String arg0); + + /** + * + * @param arg0 + * @return + * returns java.lang.String + */ + @WebMethod(operationName = "SendOrderNoticeToPLM") + @WebResult(targetNamespace = "") + @RequestWrapper(localName = "SendOrderNoticeToPLM", targetNamespace = "http://teamcenter.com.ysr/", className = "ysr.com.teamcenter.SendOrderNoticeToPLM") + @ResponseWrapper(localName = "SendOrderNoticeToPLMResponse", targetNamespace = "http://teamcenter.com.ysr/", className = "ysr.com.teamcenter.SendOrderNoticeToPLMResponse") + @Action(input = "http://teamcenter.com.ysr/YSRServerDelegate/SendOrderNoticeToPLMRequest", output = "http://teamcenter.com.ysr/YSRServerDelegate/SendOrderNoticeToPLMResponse") + public String sendOrderNoticeToPLM( + @WebParam(name = "arg0", targetNamespace = "") + String arg0); + + /** + * + * @param arg0 + * @return + * returns java.lang.String + */ + @WebMethod(operationName = "SendTravelOrderToPLM") + @WebResult(targetNamespace = "") + @RequestWrapper(localName = "SendTravelOrderToPLM", targetNamespace = "http://teamcenter.com.ysr/", className = "ysr.com.teamcenter.SendTravelOrderToPLM") + @ResponseWrapper(localName = "SendTravelOrderToPLMResponse", targetNamespace = "http://teamcenter.com.ysr/", className = "ysr.com.teamcenter.SendTravelOrderToPLMResponse") + @Action(input = "http://teamcenter.com.ysr/YSRServerDelegate/SendTravelOrderToPLMRequest", output = "http://teamcenter.com.ysr/YSRServerDelegate/SendTravelOrderToPLMResponse") + public String sendTravelOrderToPLM( + @WebParam(name = "arg0", targetNamespace = "") + String arg0); + + /** + * + * @param arg1 + * @param arg0 + * @return + * returns java.lang.String + */ + @WebMethod(operationName = "SendDeliveryDateToPLM") + @WebResult(targetNamespace = "") + @RequestWrapper(localName = "SendDeliveryDateToPLM", targetNamespace = "http://teamcenter.com.ysr/", className = "ysr.com.teamcenter.SendDeliveryDateToPLM") + @ResponseWrapper(localName = "SendDeliveryDateToPLMResponse", targetNamespace = "http://teamcenter.com.ysr/", className = "ysr.com.teamcenter.SendDeliveryDateToPLMResponse") + @Action(input = "http://teamcenter.com.ysr/YSRServerDelegate/SendDeliveryDateToPLMRequest", output = "http://teamcenter.com.ysr/YSRServerDelegate/SendDeliveryDateToPLMResponse") + public String sendDeliveryDateToPLM( + @WebParam(name = "arg0", targetNamespace = "") + String arg0, + @WebParam(name = "arg1", targetNamespace = "") + String arg1); + + /** + * + * @param arg0 + * @return + * returns java.lang.String + */ + @WebMethod(operationName = "SendAccepComToPLM") + @WebResult(targetNamespace = "") + @RequestWrapper(localName = "SendAccepComToPLM", targetNamespace = "http://teamcenter.com.ysr/", className = "ysr.com.teamcenter.SendAccepComToPLM") + @ResponseWrapper(localName = "SendAccepComToPLMResponse", targetNamespace = "http://teamcenter.com.ysr/", className = "ysr.com.teamcenter.SendAccepComToPLMResponse") + @Action(input = "http://teamcenter.com.ysr/YSRServerDelegate/SendAccepComToPLMRequest", output = "http://teamcenter.com.ysr/YSRServerDelegate/SendAccepComToPLMResponse") + public String sendAccepComToPLM( + @WebParam(name = "arg0", targetNamespace = "") + String arg0); + +} diff --git a/src/ysr/com/teamcenter/YSRServerService.class b/src/ysr/com/teamcenter/YSRServerService.class new file mode 100644 index 0000000000000000000000000000000000000000..73acce4d08cc7131c4714dc7642453c4e2bed9aa GIT binary patch literal 2351 zcmb7FT~pgu5IxrrWDD~hXhND$zz}1D)sQqaHYFj(G!&aJ69|(BMwlC-#Fjjg2=uYP zpg*Ip4Lr~(Gijgt&>z)iS5_U{cv{ypUdi|FIlFsy@AaR5{rUmG18l1p#C(X%H!6m( zz~-@nCqX<4BCg^Z78N|@)ij$W_RO$Z4q{Hhw?U*-^x&C-6$Rg^7{IE6tb&}toxS{4 zKC`ux@$5=Ev%i~P%I;^^(~H|H>uUnt**E$-T{EStJ>SZv1ct95GB47Zjf(e}=Y6W3 zmWtYmqwUIrytLmL1(`W5$g*o#CNT_MVc1+-%w+^_)u2tiB%QKeklN-Ny%MZr-Y^Y! zL7*)||u@WvuIMy_@DmcsWQNtXpBou$2D*{(n|I+gw2v9*F#(p;&R3et3?tyR62WKkaJ zE{l3|>)3RSlH4&IgVb9zP0Q7}PY!jurjm+`8S}7g8Kz6XcCJmJt4dl4z0!jCt>)IZ zzfZO8I)}xqRq&D$=%vyc2C^&f>V>yCz3lftIA17wlR}eE<4!{_pysV(yC9bh9+1Im z&i-&Fm{DNlO1=Jmx@eGsRCI46lIG9VZOW2o)Eifl?X~NclUj}P32H=w8zK-ssVgV> ziZV)S>7@4Dk+!2P9+oI|$F+6Wvb81YymhVer^fx0FO!5ZgG3m&@Oc=w5n(ey{p3qjr7!wQZg7?MF8oM(N@oqW_IH z40GS;ZJ3+rJ!x9#sX~zGcgT*=ue;y{W3$(qbpVT_CDgtC<^o-*N0*(5h zDB8W9un&q~puG{5KqoZvzl|{;H9?`6FBFS64>XG)?t6j8eaIvQYU4ya$aIr14-vwg z7bfCk#tFd~B^D>Zm1>gcK*|d;;R7NRq@4gk0?afCu>b{+$#;^(3V5Q;(4Q`gHW<6a zwY~n1e&qte{?G-~-x2zmHY)OUcuvm{rIk*4pQ3Nf@wA-8w9l0wE>>lzo{J>yY(lnu zl}zQUfS9?PtOS3$&k+6t3fbSz(8U=AyoPpr%Df;6_Nb{ZsX;s`LM7q9td7KwzUZ@l zaotqhIRau;WG~UP*WY`AzSW=5mAk~i9!Y#X8#_l={2bx;6uzH^Y=mqjAkPlyn(8L@ zUT=Mr_9OH*MhT6RBombWB<_*6oXh|Mf750_!94}D5DM;xi0Xk?!B<}KgB0W;Wlc)X M;cEwvkaUpx2%@<%jQ{`u literal 0 HcmV?d00001 diff --git a/src/ysr/com/teamcenter/YSRServerService.java b/src/ysr/com/teamcenter/YSRServerService.java new file mode 100644 index 0000000..a33803f --- /dev/null +++ b/src/ysr/com/teamcenter/YSRServerService.java @@ -0,0 +1,94 @@ + +package ysr.com.teamcenter; + +import java.net.MalformedURLException; +import java.net.URL; +import javax.xml.namespace.QName; +import javax.xml.ws.Service; +import javax.xml.ws.WebEndpoint; +import javax.xml.ws.WebServiceClient; +import javax.xml.ws.WebServiceException; +import javax.xml.ws.WebServiceFeature; + + +/** + * This class was generated by the JAX-WS RI. + * JAX-WS RI 2.2.9-b130926.1035 + * Generated source version: 2.2 + * + */ +@WebServiceClient(name = "YSRServerService", targetNamespace = "http://teamcenter.com.ysr/", wsdlLocation = "file:/C:/Users/Administrator/Desktop/YSRServerService.wsdl") +public class YSRServerService + extends Service +{ + + private final static URL YSRSERVERSERVICE_WSDL_LOCATION; + private final static WebServiceException YSRSERVERSERVICE_EXCEPTION; + private final static QName YSRSERVERSERVICE_QNAME = new QName("http://teamcenter.com.ysr/", "YSRServerService"); + + static { + URL url = null; + WebServiceException e = null; + try { + url = new URL("file:/C:/Users/Administrator/Desktop/YSRServerService.wsdl"); + } catch (MalformedURLException ex) { + e = new WebServiceException(ex); + } + YSRSERVERSERVICE_WSDL_LOCATION = url; + YSRSERVERSERVICE_EXCEPTION = e; + } + + public YSRServerService() { + super(__getWsdlLocation(), YSRSERVERSERVICE_QNAME); + } + + public YSRServerService(WebServiceFeature... features) { + super(__getWsdlLocation(), YSRSERVERSERVICE_QNAME, features); + } + + public YSRServerService(URL wsdlLocation) { + super(wsdlLocation, YSRSERVERSERVICE_QNAME); + } + + public YSRServerService(URL wsdlLocation, WebServiceFeature... features) { + super(wsdlLocation, YSRSERVERSERVICE_QNAME, features); + } + + public YSRServerService(URL wsdlLocation, QName serviceName) { + super(wsdlLocation, serviceName); + } + + public YSRServerService(URL wsdlLocation, QName serviceName, WebServiceFeature... features) { + super(wsdlLocation, serviceName, features); + } + + /** + * + * @return + * returns YSRServerDelegate + */ + @WebEndpoint(name = "YSRServerPort") + public YSRServerDelegate getYSRServerPort() { + return super.getPort(new QName("http://teamcenter.com.ysr/", "YSRServerPort"), YSRServerDelegate.class); + } + + /** + * + * @param features + * A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy. Supported features not in the features parameter will have their default values. + * @return + * returns YSRServerDelegate + */ + @WebEndpoint(name = "YSRServerPort") + public YSRServerDelegate getYSRServerPort(WebServiceFeature... features) { + return super.getPort(new QName("http://teamcenter.com.ysr/", "YSRServerPort"), YSRServerDelegate.class, features); + } + + private static URL __getWsdlLocation() { + if (YSRSERVERSERVICE_EXCEPTION!= null) { + throw YSRSERVERSERVICE_EXCEPTION; + } + return YSRSERVERSERVICE_WSDL_LOCATION; + } + +} diff --git a/src/ysr/com/teamcenter/package-info.class b/src/ysr/com/teamcenter/package-info.class new file mode 100644 index 0000000000000000000000000000000000000000..fae14c7dd5c31587e69a1506027864658390371a GIT binary patch literal 250 zcmYk1y-q_h424h1&!z1`7bIAi7`a}UU}EWngw#qEt8XxEO5#*EX;og0fd}BBs^)g6 zYRNvbKFi1c-~Ijpc*3wkzrw&^FpcZh%Gh}^7_HcT^IRUCe#Lsp8#cI|tTnqJGnZWB zTPwheizZmqDgQT*&c-$>=UOf|K;b29xw6%?) x{z)wv+;>vi6H2Ey8C-Xc