ludc
2024-04-08 bcb1aaaadad892fe02e4de9a1fdb10cb99fea9bc
Func工具类添加
已修改3个文件
已删除256个文件
已添加23个文件
3153 ■■■■ 文件已修改
.idea/modules.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/client/flatlaf-2.3.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/client/icegridgui.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/client/jgoodies-common-1.8.1.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/client/jgoodies-looks-2.5.3.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/client/jgraph.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/client/jgraphx-3.1.0.0.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/client/nativeskin.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/client/pinyin4j-2.5.0.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/client/plt-client.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/client/plt-clientbase.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/client/poi-3.9-20121203.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/client/poi-ooxml-3.9-20121203.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/client/poi-ooxml-schemas-3.9-20121203.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/client/poi-scratchpad-3.9-20121203.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/client/protege35.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/client/skinlf.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/client/swingx-1.6.1.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/client/swixml.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/client/uitheme-1.3.1.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/commons-lang3-3.1.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/dom4j-1.6.1.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/fastjson-1.2.83.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/freemarker.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/icegridgui.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/junit-4.8.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/log4j-api-2.12.4.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/log4j-core-2.12.4.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/mail.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/META-INF/MANIFEST.MF 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/ServiceNames.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/annotaion/CustomAnnotaion.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/annotaion/CustomAnnotaionHelper.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/annotaion/MethodTypeAnnotation.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/exception/LocaleCommonDisplay.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/exception/ORAUniqueProperties.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/exception/VciException.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/exception/VciExceptionTool.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/file/FileDigest.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/locale/LocaleDisplay.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/log/LogByType.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/log/LogType.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/log/ServerWithLog4j.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/objects/AbstractEntity.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/objects/AbstractHistorizable.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/objects/Historizable.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/objects/QueryParam.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/objects/QueryResult.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/objects/UserEntity.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/portal/constants/PLDefinationConstants.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/portal/constants/PRMConstants.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/portal/constants/TemplateTypeConstants.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/portal/enums/AreaType.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/portal/enums/ComponentType.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/portal/enums/ControlType.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/portal/enums/GetByType.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/portal/enums/PortalVIType.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/portal/enums/PortalVITypeFlag.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/portal/utils/PortalUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/qt/interfaces/IParserFactory.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/qt/object/CItemRelation.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/qt/object/ChildrenInfo.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/qt/object/ComparatorOrderInfo.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/qt/object/Condition.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/qt/object/ConditionItem.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/qt/object/Connector.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/qt/object/LeafInfo.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/qt/object/LeafValue.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/qt/object/Operator.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/qt/object/OrderInfo.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/qt/object/PageInfo.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/qt/object/ParserHelper.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/qt/object/QTConstants.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/qt/object/QueryTemplate.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/qt/object/Symbol.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/qt/object/Version.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/resource/CommonProperties.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/resource/IceClientProperties.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/timer/VCITimeInterface.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/util/CollectionUtils$EnumerationIterator.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/util/CollectionUtils.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/util/IceProxyUtility.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/utility/ClassLoaderUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/utility/Converter.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/utility/ObjectUtility.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/utility/RandomGUID20.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/utility/RandomGUID36.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/utility/RandomGUID8.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/common/utility/SnowFlake.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/mw/ClientContextVariable.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/mw/IInvocationContext.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/mw/InvocationUtility.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/mw/LaunchModeEnum.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/omd/constants/AttributeConstants.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/omd/constants/BusinessConstants.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/omd/constants/FileObjectType.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/omd/constants/LinkConstants.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/omd/constants/LinkTypeConstants.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/omd/constants/OmdConstants.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/omd/constants/SystemAttribute.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/omd/dataType/VTDataType.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/omd/objects/OtherInfo.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/omd/utils/AbComparator.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/omd/utils/BTComparator.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/omd/utils/LinkTypeComparator.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/com/vci/omd/utils/ObjectTool.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/properties/conf.properties 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-common/properties/log4j2.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/plt-slice.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/common/spring-core-3.2.0.RELEASE.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/BOFService.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/CacheService.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/FrameService.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/OMDService.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/OQService.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/ServiceBase.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/META-INF/MANIFEST.MF 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/UIBoxService.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/PortalServiceImpl.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/cache/ActionCacheUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/cache/ActionClsCacheUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/cache/ActionParamCacheUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/cache/ButtonParamCacheUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/cache/ComponentBtnCacheUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/cache/ComponentCacheUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/cache/PortalVICacheUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/cache/TabPageCacheUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/cache/UICacheBaseUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/cache/UICacheNames.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/cache/UIContextCacheUtil.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/dao/PLActionClsEntityDao.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/dao/PLActionEntityDao.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/dao/PLActionParamEntityDao.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/dao/PLCommandParameterEntityDao.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/dao/PLPageDefinationEntityDao.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/dao/PLTabButtonEntityDao.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/dao/PLTabPageEntityDao.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/dao/PLTypeActionEntityDao.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/dao/PLUILayoutEntityDao.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/dao/PortalVIEntityDao.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/dao/impl/PLActionClsEntityDaoImp.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/dao/impl/PLActionEntityDaoImpl.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/dao/impl/PLActionParamEntityDaoImp.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/dao/impl/PLCommandParameterEntityDaoImpl.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/dao/impl/PLPageDefinationEntityDaoImpl.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/dao/impl/PLTabButtonEntityDaoImpl.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/dao/impl/PLTabPageEntityDaoImpl.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/dao/impl/PLTypeActionEntityDaoImpl.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/dao/impl/PLUILayoutEntityDaoImpl.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/dao/impl/PortalVIEntityDaoImpl.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/delegate/IPortalServiceDelegate.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/delegate/PortalServiceDelegate$1.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/delegate/PortalServiceDelegate$2.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/delegate/PortalServiceDelegate.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/entity/PLActionClsEntity.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/entity/PLActionEntity.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/entity/PLActionParamEntity.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/entity/PLCommandParameterEntity.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/entity/PLPageDefinationEntity.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/entity/PLTabButtonEntity.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/entity/PLTabPageEntity.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/entity/PLTypeActionEntity.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/entity/PLUILayoutEntity.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/entity/PortalVIEntity.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/hbm/PLActionClsEntity.hbm.xml 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/hbm/PLActionEntity.hbm.xml 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/hbm/PLActionParamEntity.hbm.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/hbm/PLCommandParameterEntity.hbm.xml 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/hbm/PLPageDefinationEntity.hbm.xml 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/hbm/PLTabButtonEntity.hbm.xml 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/hbm/PLTabPageEntity.hbm.xml 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/hbm/PLTypeActionEntity.hbm.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/hbm/PLUILayoutEntity.hbm.xml 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/hbm/PortalVIEntity.hbm.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/service/PLActionEntityService.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/service/PLCommandParameterEntityService.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/service/PLPageDefinationEntityService.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/service/PLTabButtonEntityService.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/service/PLTabPageEntityService.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/service/PLTypeActionEntityService.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/service/PLUILayoutEntityService.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/service/PortalVIEntityService.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/service/UIDeleteService.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/com/vci/server/portal/tools/ServerTool.class 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/properties/PLMUIService.properties 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/properties/PLMUIService_zh.properties 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/properties/PLMUIService_zhNative.properties 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/UIService/properties/hibernate.map.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/VciServiceMain.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/VolumeService.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/WFPlugins.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/service/WFService.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/IKAnalyzer2012FF_u1.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/XmlSchema-1.1.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/activation.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/antlr-2.7.6.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/avalon-framework-4.1.5.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/axis-ant.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/axis.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/bsf-2.3.0.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/bsh.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/c3p0-0.9.1.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/commons-codec-1.3.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/commons-collections-3.1.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/commons-dbcp-1.1.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/commons-discovery-0.2.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/commons-fileupload-1.2.2.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/commons-httpclient-3.0.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/commons-io-2.0.1.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/commons-logging-1.0.4.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/commons-net-1.4.1.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/commons-pool2-2.6.2.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/geronimo-stax-api_1.0_spec-1.0.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/guava-20.0.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/hibernate-jpa-2.0-api-1.0.1.Final.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/hibernate3.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/inforbroker-core-5.1.0.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/javassist-3.12.0.GA.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/jaxen-1.1-beta-9.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/jaxrpc.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/jbpm-4.3.2.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/jcalendar-1.3.3.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/jcommon-1.0.17.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/jdom-1.0.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/jdsl.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/jedis-2.9.0.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/jee-management-1.1.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/jfreechart-1.0.14.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/jms-1.1.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/jta-1.1.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/juel-engine.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/juel-impl.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/juel.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/livetribe-jsr223.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/logkit-1.2.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/ognl-2.6.11.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/ojdbc8.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/picocontainer-1.2.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/plugin.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/poi-3.9-20121203.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/poi-ooxml-3.9-20121203.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/poi-ooxml-schemas-3.9-20121203.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/poi-scratchpad-3.9-20121203.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/portalcustom.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/proxool-0.8.3.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/quartz-all-1.8.6.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/rsyntax.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/saaj.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/sapjco.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/slf4j-api-1.7.14.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/slf4j-jdk14-1.7.14.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/xml-apis.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/xmlbeans-2.3.0.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/xmlsec-1.3.0.jar 补丁 | 查看 | 原始文档 | blame | 历史
Bin/lib/thrid/xstream-1.3.1.jar 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/service/impl/UIEngineServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/BeanUtil.java 424 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/ClassUtil.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/ConvertUtil.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/Func.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/ReflectUtil.java 180 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/Unchecked.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/UrlUtil.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/beans/BeanProperty.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/beans/BladeBeanCopier.java 404 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/beans/BladeBeanCopierKey.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/beans/BladeBeanMap.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/beans/BladeBeanMapEmitter.java 192 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/beans/BladeBeanMapKey.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/beans/CopyProperty.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/convert/BladeConversionService.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/convert/BladeConverter.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/convert/EnumToStringConverter.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/convert/StringToEnumConverter.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/function/CheckedCallable.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/function/CheckedComparator.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/function/CheckedConsumer.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/function/CheckedFunction.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/function/CheckedRunnable.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/function/CheckedSupplier.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/modules.xml
@@ -3,6 +3,10 @@
  <component name="ProjectModuleManager">
    <modules>
      <module fileurl="file://$PROJECT_DIR$/.idea/PLTWEB.iml" filepath="$PROJECT_DIR$/.idea/PLTWEB.iml" />
      <module fileurl="file://$PROJECT_DIR$/Source/platformProject/platform-parent.iml" filepath="$PROJECT_DIR$/Source/platformProject/platform-parent.iml" />
      <module fileurl="file://$PROJECT_DIR$/Source/platformProject/vci-platform-server-starter/vci-platform-server-starter.iml" filepath="$PROJECT_DIR$/Source/platformProject/vci-platform-server-starter/vci-platform-server-starter.iml" />
      <module fileurl="file://$PROJECT_DIR$/Source/platformProject/vci-platform-starter/vci-platform-starter.iml" filepath="$PROJECT_DIR$/Source/platformProject/vci-platform-starter/vci-platform-starter.iml" />
      <module fileurl="file://$PROJECT_DIR$/Source/platformProject/vci-platform-web/vci-platform-web.iml" filepath="$PROJECT_DIR$/Source/platformProject/vci-platform-web/vci-platform-web.iml" />
    </modules>
  </component>
</project>
Bin/lib/client/flatlaf-2.3.jar
Binary files differ
Bin/lib/client/icegridgui.jar
Binary files differ
Bin/lib/client/jgoodies-common-1.8.1.jar
Binary files differ
Bin/lib/client/jgoodies-looks-2.5.3.jar
Binary files differ
Bin/lib/client/jgraph.jar
Binary files differ
Bin/lib/client/jgraphx-3.1.0.0.jar
Binary files differ
Bin/lib/client/nativeskin.jar
Binary files differ
Bin/lib/client/pinyin4j-2.5.0.jar
Binary files differ
Bin/lib/client/plt-client.jar
Binary files differ
Bin/lib/client/plt-clientbase.jar
Binary files differ
Bin/lib/client/poi-3.9-20121203.jar
Binary files differ
Bin/lib/client/poi-ooxml-3.9-20121203.jar
Binary files differ
Bin/lib/client/poi-ooxml-schemas-3.9-20121203.jar
Binary files differ
Bin/lib/client/poi-scratchpad-3.9-20121203.jar
Binary files differ
Bin/lib/client/protege35.jar
Binary files differ
Bin/lib/client/skinlf.jar
Binary files differ
Bin/lib/client/swingx-1.6.1.jar
Binary files differ
Bin/lib/client/swixml.jar
Binary files differ
Bin/lib/client/uitheme-1.3.1.jar
Binary files differ
Bin/lib/common/commons-lang3-3.1.jar
Binary files differ
Bin/lib/common/dom4j-1.6.1.jar
Binary files differ
Bin/lib/common/fastjson-1.2.83.jar
Binary files differ
Bin/lib/common/freemarker.jar
Binary files differ
Bin/lib/common/icegridgui.jar
Binary files differ
Bin/lib/common/junit-4.8.jar
Binary files differ
Bin/lib/common/log4j-api-2.12.4.jar
Binary files differ
Bin/lib/common/log4j-core-2.12.4.jar
Binary files differ
Bin/lib/common/mail.jar
Binary files differ
Bin/lib/common/plt-common.jar
Binary files differ
Bin/lib/common/plt-common/META-INF/MANIFEST.MF
ÎļþÒÑɾ³ý
Bin/lib/common/plt-common/com/vci/common/ServiceNames.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/annotaion/CustomAnnotaion.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/annotaion/CustomAnnotaionHelper.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/annotaion/MethodTypeAnnotation.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/exception/LocaleCommonDisplay.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/exception/ORAUniqueProperties.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/exception/VciException.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/exception/VciExceptionTool.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/file/FileDigest.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/locale/LocaleDisplay.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/log/LogByType.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/log/LogType.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/log/ServerWithLog4j.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/objects/AbstractEntity.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/objects/AbstractHistorizable.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/objects/Historizable.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/objects/QueryParam.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/objects/QueryResult.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/objects/UserEntity.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/portal/constants/PLDefinationConstants.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/portal/constants/PRMConstants.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/portal/constants/TemplateTypeConstants.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/portal/enums/AreaType.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/portal/enums/ComponentType.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/portal/enums/ControlType.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/portal/enums/GetByType.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/portal/enums/PortalVIType.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/portal/enums/PortalVITypeFlag.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/portal/utils/PortalUtil.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/qt/interfaces/IParserFactory.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/qt/object/CItemRelation.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/qt/object/ChildrenInfo.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/qt/object/ComparatorOrderInfo.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/qt/object/Condition.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/qt/object/ConditionItem.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/qt/object/Connector.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/qt/object/LeafInfo.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/qt/object/LeafValue.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/qt/object/Operator.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/qt/object/OrderInfo.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/qt/object/PageInfo.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/qt/object/ParserHelper.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/qt/object/QTConstants.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/qt/object/QueryTemplate.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/qt/object/Symbol.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/qt/object/Version.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/resource/CommonProperties.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/resource/IceClientProperties.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/timer/VCITimeInterface.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/util/CollectionUtils$EnumerationIterator.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/util/CollectionUtils.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/util/IceProxyUtility.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/utility/ClassLoaderUtil.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/utility/Converter.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/utility/ObjectUtility.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/utility/RandomGUID20.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/utility/RandomGUID36.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/utility/RandomGUID8.class
Binary files differ
Bin/lib/common/plt-common/com/vci/common/utility/SnowFlake.class
Binary files differ
Bin/lib/common/plt-common/com/vci/mw/ClientContextVariable.class
Binary files differ
Bin/lib/common/plt-common/com/vci/mw/IInvocationContext.class
Binary files differ
Bin/lib/common/plt-common/com/vci/mw/InvocationUtility.class
Binary files differ
Bin/lib/common/plt-common/com/vci/mw/LaunchModeEnum.class
Binary files differ
Bin/lib/common/plt-common/com/vci/omd/constants/AttributeConstants.class
Binary files differ
Bin/lib/common/plt-common/com/vci/omd/constants/BusinessConstants.class
Binary files differ
Bin/lib/common/plt-common/com/vci/omd/constants/FileObjectType.class
Binary files differ
Bin/lib/common/plt-common/com/vci/omd/constants/LinkConstants.class
Binary files differ
Bin/lib/common/plt-common/com/vci/omd/constants/LinkTypeConstants.class
Binary files differ
Bin/lib/common/plt-common/com/vci/omd/constants/OmdConstants.class
Binary files differ
Bin/lib/common/plt-common/com/vci/omd/constants/SystemAttribute.class
Binary files differ
Bin/lib/common/plt-common/com/vci/omd/dataType/VTDataType.class
Binary files differ
Bin/lib/common/plt-common/com/vci/omd/objects/OtherInfo.class
Binary files differ
Bin/lib/common/plt-common/com/vci/omd/utils/AbComparator.class
Binary files differ
Bin/lib/common/plt-common/com/vci/omd/utils/BTComparator.class
Binary files differ
Bin/lib/common/plt-common/com/vci/omd/utils/LinkTypeComparator.class
Binary files differ
Bin/lib/common/plt-common/com/vci/omd/utils/ObjectTool.class
Binary files differ
Bin/lib/common/plt-common/properties/conf.properties
ÎļþÒÑɾ³ý
Bin/lib/common/plt-common/properties/log4j2.xml
ÎļþÒÑɾ³ý
Bin/lib/common/plt-slice.jar
Binary files differ
Bin/lib/common/spring-core-3.2.0.RELEASE.jar
Binary files differ
Bin/lib/service/BOFService.jar
Binary files differ
Bin/lib/service/CacheService.jar
Binary files differ
Bin/lib/service/FrameService.jar
Binary files differ
Bin/lib/service/OMDService.jar
Binary files differ
Bin/lib/service/OQService.jar
Binary files differ
Bin/lib/service/ServiceBase.jar
Binary files differ
Bin/lib/service/UIService.jar
Binary files differ
Bin/lib/service/UIService/META-INF/MANIFEST.MF
ÎļþÒÑɾ³ý
Bin/lib/service/UIService/com/vci/server/UIBoxService.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/PortalServiceImpl.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/cache/ActionCacheUtil.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/cache/ActionClsCacheUtil.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/cache/ActionParamCacheUtil.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/cache/ButtonParamCacheUtil.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/cache/ComponentBtnCacheUtil.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/cache/ComponentCacheUtil.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/cache/PortalVICacheUtil.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/cache/TabPageCacheUtil.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/cache/UICacheBaseUtil.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/cache/UICacheNames.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/cache/UIContextCacheUtil.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/dao/PLActionClsEntityDao.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/dao/PLActionEntityDao.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/dao/PLActionParamEntityDao.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/dao/PLCommandParameterEntityDao.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/dao/PLPageDefinationEntityDao.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/dao/PLTabButtonEntityDao.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/dao/PLTabPageEntityDao.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/dao/PLTypeActionEntityDao.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/dao/PLUILayoutEntityDao.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/dao/PortalVIEntityDao.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/dao/impl/PLActionClsEntityDaoImp.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/dao/impl/PLActionEntityDaoImpl.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/dao/impl/PLActionParamEntityDaoImp.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/dao/impl/PLCommandParameterEntityDaoImpl.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/dao/impl/PLPageDefinationEntityDaoImpl.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/dao/impl/PLTabButtonEntityDaoImpl.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/dao/impl/PLTabPageEntityDaoImpl.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/dao/impl/PLTypeActionEntityDaoImpl.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/dao/impl/PLUILayoutEntityDaoImpl.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/dao/impl/PortalVIEntityDaoImpl.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/delegate/IPortalServiceDelegate.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/delegate/PortalServiceDelegate$1.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/delegate/PortalServiceDelegate$2.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/delegate/PortalServiceDelegate.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/entity/PLActionClsEntity.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/entity/PLActionEntity.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/entity/PLActionParamEntity.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/entity/PLCommandParameterEntity.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/entity/PLPageDefinationEntity.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/entity/PLTabButtonEntity.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/entity/PLTabPageEntity.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/entity/PLTypeActionEntity.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/entity/PLUILayoutEntity.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/entity/PortalVIEntity.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/hbm/PLActionClsEntity.hbm.xml
ÎļþÒÑɾ³ý
Bin/lib/service/UIService/com/vci/server/portal/hbm/PLActionEntity.hbm.xml
ÎļþÒÑɾ³ý
Bin/lib/service/UIService/com/vci/server/portal/hbm/PLActionParamEntity.hbm.xml
ÎļþÒÑɾ³ý
Bin/lib/service/UIService/com/vci/server/portal/hbm/PLCommandParameterEntity.hbm.xml
ÎļþÒÑɾ³ý
Bin/lib/service/UIService/com/vci/server/portal/hbm/PLPageDefinationEntity.hbm.xml
ÎļþÒÑɾ³ý
Bin/lib/service/UIService/com/vci/server/portal/hbm/PLTabButtonEntity.hbm.xml
ÎļþÒÑɾ³ý
Bin/lib/service/UIService/com/vci/server/portal/hbm/PLTabPageEntity.hbm.xml
ÎļþÒÑɾ³ý
Bin/lib/service/UIService/com/vci/server/portal/hbm/PLTypeActionEntity.hbm.xml
ÎļþÒÑɾ³ý
Bin/lib/service/UIService/com/vci/server/portal/hbm/PLUILayoutEntity.hbm.xml
ÎļþÒÑɾ³ý
Bin/lib/service/UIService/com/vci/server/portal/hbm/PortalVIEntity.hbm.xml
ÎļþÒÑɾ³ý
Bin/lib/service/UIService/com/vci/server/portal/service/PLActionEntityService.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/service/PLCommandParameterEntityService.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/service/PLPageDefinationEntityService.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/service/PLTabButtonEntityService.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/service/PLTabPageEntityService.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/service/PLTypeActionEntityService.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/service/PLUILayoutEntityService.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/service/PortalVIEntityService.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/service/UIDeleteService.class
Binary files differ
Bin/lib/service/UIService/com/vci/server/portal/tools/ServerTool.class
Binary files differ
Bin/lib/service/UIService/properties/PLMUIService.properties
ÎļþÒÑɾ³ý
Bin/lib/service/UIService/properties/PLMUIService_zh.properties
ÎļþÒÑɾ³ý
Bin/lib/service/UIService/properties/PLMUIService_zhNative.properties
ÎļþÒÑɾ³ý
Bin/lib/service/UIService/properties/hibernate.map.xml
ÎļþÒÑɾ³ý
Bin/lib/service/VciServiceMain.jar
Binary files differ
Bin/lib/service/VolumeService.jar
Binary files differ
Bin/lib/service/WFPlugins.jar
Binary files differ
Bin/lib/service/WFService.jar
Binary files differ
Bin/lib/thrid/IKAnalyzer2012FF_u1.jar
Binary files differ
Bin/lib/thrid/XmlSchema-1.1.jar
Binary files differ
Bin/lib/thrid/activation.jar
Binary files differ
Bin/lib/thrid/antlr-2.7.6.jar
Binary files differ
Bin/lib/thrid/avalon-framework-4.1.5.jar
Binary files differ
Bin/lib/thrid/axis-ant.jar
Binary files differ
Bin/lib/thrid/axis.jar
Binary files differ
Bin/lib/thrid/bsf-2.3.0.jar
Binary files differ
Bin/lib/thrid/bsh.jar
Binary files differ
Bin/lib/thrid/c3p0-0.9.1.jar
Binary files differ
Bin/lib/thrid/commons-codec-1.3.jar
Binary files differ
Bin/lib/thrid/commons-collections-3.1.jar
Binary files differ
Bin/lib/thrid/commons-dbcp-1.1.jar
Binary files differ
Bin/lib/thrid/commons-discovery-0.2.jar
Binary files differ
Bin/lib/thrid/commons-fileupload-1.2.2.jar
Binary files differ
Bin/lib/thrid/commons-httpclient-3.0.jar
Binary files differ
Bin/lib/thrid/commons-io-2.0.1.jar
Binary files differ
Bin/lib/thrid/commons-logging-1.0.4.jar
Binary files differ
Bin/lib/thrid/commons-net-1.4.1.jar
Binary files differ
Bin/lib/thrid/commons-pool2-2.6.2.jar
Binary files differ
Bin/lib/thrid/geronimo-stax-api_1.0_spec-1.0.jar
Binary files differ
Bin/lib/thrid/guava-20.0.jar
Binary files differ
Bin/lib/thrid/hibernate-jpa-2.0-api-1.0.1.Final.jar
Binary files differ
Bin/lib/thrid/hibernate3.jar
Binary files differ
Bin/lib/thrid/inforbroker-core-5.1.0.jar
Binary files differ
Bin/lib/thrid/javassist-3.12.0.GA.jar
Binary files differ
Bin/lib/thrid/jaxen-1.1-beta-9.jar
Binary files differ
Bin/lib/thrid/jaxrpc.jar
Binary files differ
Bin/lib/thrid/jbpm-4.3.2.jar
Binary files differ
Bin/lib/thrid/jcalendar-1.3.3.jar
Binary files differ
Bin/lib/thrid/jcommon-1.0.17.jar
Binary files differ
Bin/lib/thrid/jdom-1.0.jar
Binary files differ
Bin/lib/thrid/jdsl.jar
Binary files differ
Bin/lib/thrid/jedis-2.9.0.jar
Binary files differ
Bin/lib/thrid/jee-management-1.1.jar
Binary files differ
Bin/lib/thrid/jfreechart-1.0.14.jar
Binary files differ
Bin/lib/thrid/jms-1.1.jar
Binary files differ
Bin/lib/thrid/jta-1.1.jar
Binary files differ
Bin/lib/thrid/juel-engine.jar
Binary files differ
Bin/lib/thrid/juel-impl.jar
Binary files differ
Bin/lib/thrid/juel.jar
Binary files differ
Bin/lib/thrid/livetribe-jsr223.jar
Binary files differ
Bin/lib/thrid/logkit-1.2.jar
Binary files differ
Bin/lib/thrid/ognl-2.6.11.jar
Binary files differ
Bin/lib/thrid/ojdbc8.jar
Binary files differ
Bin/lib/thrid/picocontainer-1.2.jar
Binary files differ
Bin/lib/thrid/plugin.jar
Binary files differ
Bin/lib/thrid/poi-3.9-20121203.jar
Binary files differ
Bin/lib/thrid/poi-ooxml-3.9-20121203.jar
Binary files differ
Bin/lib/thrid/poi-ooxml-schemas-3.9-20121203.jar
Binary files differ
Bin/lib/thrid/poi-scratchpad-3.9-20121203.jar
Binary files differ
Bin/lib/thrid/portalcustom.jar
Binary files differ
Bin/lib/thrid/proxool-0.8.3.jar
Binary files differ
Bin/lib/thrid/quartz-all-1.8.6.jar
Binary files differ
Bin/lib/thrid/rsyntax.jar
Binary files differ
Bin/lib/thrid/saaj.jar
Binary files differ
Bin/lib/thrid/sapjco.jar
Binary files differ
Bin/lib/thrid/slf4j-api-1.7.14.jar
Binary files differ
Bin/lib/thrid/slf4j-jdk14-1.7.14.jar
Binary files differ
Bin/lib/thrid/xml-apis.jar
Binary files differ
Bin/lib/thrid/xmlbeans-2.3.0.jar
Binary files differ
Bin/lib/thrid/xmlsec-1.3.0.jar
Binary files differ
Bin/lib/thrid/xstream-1.3.1.jar
Binary files differ
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/service/impl/UIEngineServiceImpl.java
@@ -1571,5 +1571,6 @@
        //return UIContentDO2VO(context,true);
        return UIContentDO2VO(null,true);
    }
}
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/BeanUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,424 @@
/*
 *      Copyright (c) 2018-2028, DreamLu All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: DreamLu å¢æ˜¥æ¢¦ (596392912@qq.com)
 */
package com.vci.web.util;
import com.vci.web.util.beans.BeanProperty;
import com.vci.web.util.beans.BladeBeanCopier;
import com.vci.web.util.convert.BladeConverter;
import com.vci.web.util.beans.BladeBeanMap;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeansException;
import org.springframework.beans.PropertyAccessorFactory;
import org.springframework.cglib.beans.BeanGenerator;
import org.springframework.lang.Nullable;
import java.util.*;
/**
 * å®žä½“工具类
 *
 * @author L.cm
 */
public class BeanUtil extends org.springframework.beans.BeanUtils {
    /**
     * å®žä¾‹åŒ–对象
     *
     * @param clazz ç±»
     * @param <T>   æ³›åž‹æ ‡è®°
     * @return å¯¹è±¡
     */
    @SuppressWarnings("unchecked")
    public static <T> T newInstance(Class<?> clazz) {
        return (T) instantiateClass(clazz);
    }
    /**
     * å®žä¾‹åŒ–对象
     *
     * @param clazzStr ç±»å
     * @param <T>      æ³›åž‹æ ‡è®°
     * @return å¯¹è±¡
     */
    public static <T> T newInstance(String clazzStr) {
        try {
            Class<?> clazz = ClassUtil.forName(clazzStr, null);
            return newInstance(clazz);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
    /**
     * èŽ·å–Bean的属性, æ”¯æŒ propertyName å¤šçº§ ï¼štest.user.name
     *
     * @param bean         bean
     * @param propertyName å±žæ€§å
     * @return å±žæ€§å€¼
     */
    @Nullable
    public static Object getProperty(@Nullable Object bean, String propertyName) {
        if (bean == null) {
            return null;
        }
        BeanWrapper beanWrapper = PropertyAccessorFactory.forBeanPropertyAccess(bean);
        return beanWrapper.getPropertyValue(propertyName);
    }
    /**
     * è®¾ç½®Bean属性, æ”¯æŒ propertyName å¤šçº§ ï¼štest.user.name
     *
     * @param bean         bean
     * @param propertyName å±žæ€§å
     * @param value        å±žæ€§å€¼
     */
    public static void setProperty(Object bean, String propertyName, Object value) {
        Objects.requireNonNull(bean, "bean Could not null");
        BeanWrapper beanWrapper = PropertyAccessorFactory.forBeanPropertyAccess(bean);
        beanWrapper.setPropertyValue(propertyName, value);
    }
    /**
     * æ·±å¤åˆ¶
     *
     * <p>
     * æ”¯æŒ map bean
     * </p>
     *
     * @param source æºå¯¹è±¡
     * @param <T>    æ³›åž‹æ ‡è®°
     * @return T
     */
    @SuppressWarnings("unchecked")
    @Nullable
    public static <T> T clone(@Nullable T source) {
        if (source == null) {
            return null;
        }
        return (T) BeanUtil.copy(source, source.getClass());
    }
    /**
     * copy å¯¹è±¡å±žæ€§ï¼Œé»˜è®¤ä¸ä½¿ç”¨Convert
     *
     * <p>
     * æ”¯æŒ map bean copy
     * </p>
     *
     * @param source æºå¯¹è±¡
     * @param clazz  ç±»å
     * @param <T>    æ³›åž‹æ ‡è®°
     * @return T
     */
    @Nullable
    public static <T> T copy(@Nullable Object source, Class<T> clazz) {
        if (source == null) {
            return null;
        }
        return BeanUtil.copy(source, source.getClass(), clazz);
    }
    /**
     * copy å¯¹è±¡å±žæ€§ï¼Œé»˜è®¤ä¸ä½¿ç”¨Convert
     *
     * <p>
     * æ”¯æŒ map bean copy
     * </p>
     *
     * @param source      æºå¯¹è±¡
     * @param sourceClazz æºç±»åž‹
     * @param targetClazz è½¬æ¢æˆçš„类型
     * @param <T>         æ³›åž‹æ ‡è®°
     * @return T
     */
    @Nullable
    public static <T> T copy(@Nullable Object source, Class sourceClazz, Class<T> targetClazz) {
        if (source == null) {
            return null;
        }
        BladeBeanCopier copier = BladeBeanCopier.create(sourceClazz, targetClazz, false);
        T to = newInstance(targetClazz);
        copier.copy(source, to, null);
        return to;
    }
    /**
     * copy åˆ—表对象,默认不使用Convert
     *
     * <p>
     * æ”¯æŒ map bean copy
     * </p>
     *
     * @param sourceList  æºåˆ—表
     * @param targetClazz è½¬æ¢æˆçš„类型
     * @param <T>         æ³›åž‹æ ‡è®°
     * @return T
     */
    public static <T> List<T> copy(@Nullable Collection<?> sourceList, Class<T> targetClazz) {
        if (sourceList == null || sourceList.isEmpty()) {
            return Collections.emptyList();
        }
        List<T> outList = new ArrayList<>(sourceList.size());
        Class<?> sourceClazz = null;
        for (Object source : sourceList) {
            if (source == null) {
                continue;
            }
            if (sourceClazz == null) {
                sourceClazz = source.getClass();
            }
            T bean = BeanUtil.copy(source, sourceClazz, targetClazz);
            outList.add(bean);
        }
        return outList;
    }
    /**
     * æ‹·è´å¯¹è±¡
     *
     * <p>
     * æ”¯æŒ map bean copy
     * </p>
     *
     * @param source     æºå¯¹è±¡
     * @param targetBean éœ€è¦èµ‹å€¼çš„对象
     */
    public static void copy(@Nullable Object source, @Nullable Object targetBean) {
        if (source == null || targetBean == null) {
            return;
        }
        BladeBeanCopier copier = BladeBeanCopier
            .create(source.getClass(), targetBean.getClass(), false);
        copier.copy(source, targetBean, null);
    }
    /**
     * æ‹·è´å¯¹è±¡ï¼Œsource å±žæ€§åš null åˆ¤æ–­ï¼ŒMap ä¸æ”¯æŒï¼Œmap ä¼šåš instanceof åˆ¤æ–­ï¼Œä¸ä¼š
     *
     * <p>
     * æ”¯æŒ bean copy
     * </p>
     *
     * @param source     æºå¯¹è±¡
     * @param targetBean éœ€è¦èµ‹å€¼çš„对象
     */
    public static void copyNonNull(@Nullable Object source, @Nullable Object targetBean) {
        if (source == null || targetBean == null) {
            return;
        }
        BladeBeanCopier copier = BladeBeanCopier
            .create(source.getClass(), targetBean.getClass(), false, true);
        copier.copy(source, targetBean, null);
    }
    /**
     * æ‹·è´å¯¹è±¡å¹¶å¯¹ä¸åŒç±»åž‹å±žæ€§è¿›è¡Œè½¬æ¢
     *
     * <p>
     * æ”¯æŒ map bean copy
     * </p>
     *
     * @param source æºå¯¹è±¡
     * @param targetClazz è½¬æ¢æˆçš„ç±»
     * @param <T>    æ³›åž‹æ ‡è®°
     * @return T
     */
    @Nullable
    public static <T> T copyWithConvert(@Nullable Object source, Class<T> targetClazz) {
        if (source == null) {
            return null;
        }
        return BeanUtil.copyWithConvert(source, source.getClass(), targetClazz);
    }
    /**
     * æ‹·è´å¯¹è±¡å¹¶å¯¹ä¸åŒç±»åž‹å±žæ€§è¿›è¡Œè½¬æ¢
     *
     * <p>
     * æ”¯æŒ map bean copy
     * </p>
     *
     * @param source æºå¯¹è±¡
     * @param sourceClazz æºç±»
     * @param targetClazz è½¬æ¢æˆçš„ç±»
     * @param <T>    æ³›åž‹æ ‡è®°
     * @return T
     */
    @Nullable
    public static <T> T copyWithConvert(@Nullable Object source, Class<?> sourceClazz, Class<T> targetClazz) {
        if (source == null) {
            return null;
        }
        BladeBeanCopier copier = BladeBeanCopier.create(sourceClazz, targetClazz, true);
        T to = newInstance(targetClazz);
        copier.copy(source, to, new BladeConverter(sourceClazz, targetClazz));
        return to;
    }
    /**
     * æ‹·è´åˆ—表并对不同类型属性进行转换
     *
     * <p>
     * æ”¯æŒ map bean copy
     * </p>
     *
     * @param sourceList æºå¯¹è±¡åˆ—表
     * @param targetClazz è½¬æ¢æˆçš„ç±»
     * @param <T>    æ³›åž‹æ ‡è®°
     * @return List
     */
    public static <T> List<T> copyWithConvert(@Nullable Collection<?> sourceList, Class<T> targetClazz) {
        if (sourceList == null || sourceList.isEmpty()) {
            return Collections.emptyList();
        }
        List<T> outList = new ArrayList<>(sourceList.size());
        Class<?> sourceClazz = null;
        for (Object source : sourceList) {
            if (source == null) {
                continue;
            }
            if (sourceClazz == null) {
                sourceClazz = source.getClass();
            }
            T bean = BeanUtil.copyWithConvert(source, sourceClazz, targetClazz);
            outList.add(bean);
        }
        return outList;
    }
    /**
     * Copy the property values of the given source bean into the target class.
     * <p>Note: The source and target classes do not have to match or even be derived
     * from each other, as long as the properties match. Any bean properties that the
     * source bean exposes but the target bean does not will silently be ignored.
     * <p>This is just a convenience method. For more complex transfer needs,
     *
     * @param source the source bean
     * @param targetClazz the target bean class
     * @param <T>    æ³›åž‹æ ‡è®°
     * @return T
     * @throws BeansException if the copying failed
     */
    @Nullable
    public static <T> T copyProperties(@Nullable Object source, Class<T> targetClazz) throws BeansException {
        if (source == null) {
            return null;
        }
        T to = newInstance(targetClazz);
        BeanUtil.copyProperties(source, to);
        return to;
    }
    /**
     * Copy the property values of the given source bean into the target class.
     * <p>Note: The source and target classes do not have to match or even be derived
     * from each other, as long as the properties match. Any bean properties that the
     * source bean exposes but the target bean does not will silently be ignored.
     * <p>This is just a convenience method. For more complex transfer needs,
     *
     * @param sourceList the source list bean
     * @param targetClazz the target bean class
     * @param <T>    æ³›åž‹æ ‡è®°
     * @return List
     * @throws BeansException if the copying failed
     */
    public static <T> List<T> copyProperties(@Nullable Collection<?> sourceList, Class<T> targetClazz) throws BeansException {
        if (sourceList == null || sourceList.isEmpty()) {
            return Collections.emptyList();
        }
        List<T> outList = new ArrayList<>(sourceList.size());
        for (Object source : sourceList) {
            if (source == null) {
                continue;
            }
            T bean = BeanUtil.copyProperties(source, targetClazz);
            outList.add(bean);
        }
        return outList;
    }
    /**
     * å°†å¯¹è±¡è£…成map形式
     *
     * @param bean æºå¯¹è±¡
     * @return {Map}
     */
    @SuppressWarnings("unchecked")
    public static Map<String, Object> toMap(@Nullable Object bean) {
        if (bean == null) {
            return new HashMap<>(0);
        }
        return BladeBeanMap.create(bean);
    }
    /**
     * å°†map è½¬ä¸º bean
     *
     * @param beanMap   map
     * @param valueType å¯¹è±¡ç±»åž‹
     * @param <T>       æ³›åž‹æ ‡è®°
     * @return {T}
     */
    public static <T> T toBean(Map<String, Object> beanMap, Class<T> valueType) {
        Objects.requireNonNull(beanMap, "beanMap Could not null");
        T to = newInstance(valueType);
        if (beanMap.isEmpty()) {
            return to;
        }
        BeanUtil.copy(beanMap, to);
        return to;
    }
    /**
     * ç»™ä¸€ä¸ªBean添加字段
     *
     * @param superBean çˆ¶çº§Bean
     * @param props     æ–°å¢žå±žæ€§
     * @return {Object}
     */
    @Nullable
    public static Object generator(@Nullable Object superBean, BeanProperty... props) {
        if (superBean == null) {
            return null;
        }
        Class<?> superclass = superBean.getClass();
        Object genBean = generator(superclass, props);
        BeanUtil.copy(superBean, genBean);
        return genBean;
    }
    /**
     * ç»™ä¸€ä¸ªclass添加字段
     *
     * @param superclass çˆ¶çº§
     * @param props      æ–°å¢žå±žæ€§
     * @return {Object}
     */
    public static Object generator(Class<?> superclass, BeanProperty... props) {
        BeanGenerator generator = new BeanGenerator();
        generator.setSuperclass(superclass);
        generator.setUseCache(true);
        for (BeanProperty prop : props) {
            generator.addProperty(prop.getName(), prop.getType());
        }
        return generator.create();
    }
}
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/ClassUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,130 @@
/*
 *      Copyright (c) 2018-2028, DreamLu All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: DreamLu å¢æ˜¥æ¢¦ (596392912@qq.com)
 */
package com.vci.web.util;
import org.springframework.core.BridgeMethodResolver;
import org.springframework.core.DefaultParameterNameDiscoverer;
import org.springframework.core.MethodParameter;
import org.springframework.core.ParameterNameDiscoverer;
import org.springframework.core.annotation.AnnotatedElementUtils;
import org.springframework.core.annotation.SynthesizingMethodParameter;
import org.springframework.web.method.HandlerMethod;
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
/**
 * ç±»æ“ä½œå·¥å…·
 *
 * @author L.cm
 */
public class ClassUtil extends org.springframework.util.ClassUtils {
    private static final ParameterNameDiscoverer PARAMETER_NAME_DISCOVERER = new DefaultParameterNameDiscoverer();
    /**
     * èŽ·å–æ–¹æ³•å‚æ•°ä¿¡æ¯
     *
     * @param constructor    æž„造器
     * @param parameterIndex å‚数序号
     * @return {MethodParameter}
     */
    public static MethodParameter getMethodParameter(Constructor<?> constructor, int parameterIndex) {
        MethodParameter methodParameter = new SynthesizingMethodParameter(constructor, parameterIndex);
        methodParameter.initParameterNameDiscovery(PARAMETER_NAME_DISCOVERER);
        return methodParameter;
    }
    /**
     * èŽ·å–æ–¹æ³•å‚æ•°ä¿¡æ¯
     *
     * @param method         æ–¹æ³•
     * @param parameterIndex å‚数序号
     * @return {MethodParameter}
     */
    public static MethodParameter getMethodParameter(Method method, int parameterIndex) {
        MethodParameter methodParameter = new SynthesizingMethodParameter(method, parameterIndex);
        methodParameter.initParameterNameDiscovery(PARAMETER_NAME_DISCOVERER);
        return methodParameter;
    }
    /**
     * èŽ·å–Annotation
     *
     * @param method         Method
     * @param annotationType æ³¨è§£ç±»
     * @param <A>            æ³›åž‹æ ‡è®°
     * @return {Annotation}
     */
    public static <A extends Annotation> A getAnnotation(Method method, Class<A> annotationType) {
        Class<?> targetClass = method.getDeclaringClass();
        // The method may be on an interface, but we need attributes from the target class.
        // If the target class is null, the method will be unchanged.
        Method specificMethod = ClassUtil.getMostSpecificMethod(method, targetClass);
        // If we are dealing with method with generic parameters, find the original method.
        specificMethod = BridgeMethodResolver.findBridgedMethod(specificMethod);
        // å…ˆæ‰¾æ–¹æ³•,再找方法上的类
        A annotation = AnnotatedElementUtils.findMergedAnnotation(specificMethod, annotationType);
        ;
        if (null != annotation) {
            return annotation;
        }
        // èŽ·å–ç±»ä¸Šé¢çš„Annotation,可能包含组合注解,故采用spring的工具类
        return AnnotatedElementUtils.findMergedAnnotation(specificMethod.getDeclaringClass(), annotationType);
    }
    /**
     * èŽ·å–Annotation
     *
     * @param handlerMethod  HandlerMethod
     * @param annotationType æ³¨è§£ç±»
     * @param <A>            æ³›åž‹æ ‡è®°
     * @return {Annotation}
     */
    public static <A extends Annotation> A getAnnotation(HandlerMethod handlerMethod, Class<A> annotationType) {
        // å…ˆæ‰¾æ–¹æ³•,再找方法上的类
        A annotation = handlerMethod.getMethodAnnotation(annotationType);
        if (null != annotation) {
            return annotation;
        }
        // èŽ·å–ç±»ä¸Šé¢çš„Annotation,可能包含组合注解,故采用spring的工具类
        Class<?> beanType = handlerMethod.getBeanType();
        return AnnotatedElementUtils.findMergedAnnotation(beanType, annotationType);
    }
    /**
     * åˆ¤æ–­æ˜¯å¦æœ‰æ³¨è§£ Annotation
     *
     * @param method         Method
     * @param annotationType æ³¨è§£ç±»
     * @param <A>            æ³›åž‹æ ‡è®°
     * @return {boolean}
     */
    public static <A extends Annotation> boolean isAnnotated(Method method, Class<A> annotationType) {
        // å…ˆæ‰¾æ–¹æ³•,再找方法上的类
        boolean isMethodAnnotated = AnnotatedElementUtils.isAnnotated(method, annotationType);
        if (isMethodAnnotated) {
            return true;
        }
        // èŽ·å–ç±»ä¸Šé¢çš„Annotation,可能包含组合注解,故采用spring的工具类
        Class<?> targetClass = method.getDeclaringClass();
        return AnnotatedElementUtils.isAnnotated(targetClass, annotationType);
    }
}
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/ConvertUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,81 @@
package com.vci.web.util;
import com.vci.web.util.convert.BladeConversionService;
import org.springframework.core.convert.TypeDescriptor;
import org.springframework.core.convert.support.GenericConversionService;
import org.springframework.lang.Nullable;
/**
 * åŸºäºŽ spring ConversionService ç±»åž‹è½¬æ¢
 *
 * @author L.cm
 */
@SuppressWarnings("unchecked")
public class ConvertUtil {
    /**
     * Convenience operation for converting a source object to the specified targetType.
     * {@link TypeDescriptor#forObject(Object)}.
     * @param source the source object
     * @param targetType the target type
     * @param <T> æ³›åž‹æ ‡è®°
     * @return the converted value
     * @throws IllegalArgumentException if targetType is {@code null},
     * or sourceType is {@code null} but source is not {@code null}
     */
    @Nullable
    public static <T> T convert(@Nullable Object source, Class<T> targetType) {
        if (source == null) {
            return null;
        }
        if (ClassUtil.isAssignableValue(targetType, source)) {
            return (T) source;
        }
        GenericConversionService conversionService = BladeConversionService.getInstance();
        return conversionService.convert(source, targetType);
    }
    /**
     * Convenience operation for converting a source object to the specified targetType,
     * where the target type is a descriptor that provides additional conversion context.
     * {@link TypeDescriptor#forObject(Object)}.
     * @param source the source object
     * @param sourceType the source type
     * @param targetType the target type
     * @param <T> æ³›åž‹æ ‡è®°
     * @return the converted value
     * @throws IllegalArgumentException if targetType is {@code null},
     * or sourceType is {@code null} but source is not {@code null}
     */
    @Nullable
    public static <T> T convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
        if (source == null) {
            return null;
        }
        GenericConversionService conversionService = BladeConversionService.getInstance();
        return (T) conversionService.convert(source, sourceType, targetType);
    }
    /**
     * Convenience operation for converting a source object to the specified targetType,
     * where the target type is a descriptor that provides additional conversion context.
     * Simply delegates to {@link #convert(Object, TypeDescriptor, TypeDescriptor)} and
     * encapsulates the construction of the source type descriptor using
     * {@link TypeDescriptor#forObject(Object)}.
     * @param source the source object
     * @param targetType the target type
     * @param <T> æ³›åž‹æ ‡è®°
     * @return the converted value
     * @throws IllegalArgumentException if targetType is {@code null},
     * or sourceType is {@code null} but source is not {@code null}
     */
    @Nullable
    public static <T> T convert(@Nullable Object source, TypeDescriptor targetType) {
        if (source == null) {
            return null;
        }
        GenericConversionService conversionService = BladeConversionService.getInstance();
        return (T) conversionService.convert(source, targetType);
    }
}
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/Func.java
@@ -1,12 +1,8 @@
package com.vci.web.util;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import com.aspose.words.ConvertUtil;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.sun.jndi.toolkit.url.UrlUtil;
import com.vci.web.util.jackson.JsonUtil;
import org.springframework.util.StringUtils;
import org.springframework.beans.BeansException;
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/ReflectUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,180 @@
/*
 *      Copyright (c) 2018-2028, DreamLu All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: DreamLu å¢æ˜¥æ¢¦ (596392912@qq.com)
 */
package com.vci.web.util;
import org.springframework.beans.BeansException;
import org.springframework.cglib.core.CodeGenerationException;
import org.springframework.core.convert.Property;
import org.springframework.core.convert.TypeDescriptor;
import org.springframework.lang.Nullable;
import org.springframework.util.ReflectionUtils;
import java.beans.PropertyDescriptor;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
/**
 * åå°„工具类
 *
 * @author L.cm
 */
public class ReflectUtil extends ReflectionUtils {
    /**
     * èŽ·å– Bean çš„æ‰€æœ‰ get方法
     *
     * @param type ç±»
     * @return PropertyDescriptor数组
     */
    public static PropertyDescriptor[] getBeanGetters(Class type) {
        return getPropertiesHelper(type, true, false);
    }
    /**
     * èŽ·å– Bean çš„æ‰€æœ‰ set方法
     *
     * @param type ç±»
     * @return PropertyDescriptor数组
     */
    public static PropertyDescriptor[] getBeanSetters(Class type) {
        return getPropertiesHelper(type, false, true);
    }
    /**
     * èŽ·å– Bean çš„æ‰€æœ‰ PropertyDescriptor
     *
     * @param type ç±»
     * @param read è¯»å–方法
     * @param write å†™æ–¹æ³•
     * @return PropertyDescriptor数组
     */
    public static PropertyDescriptor[] getPropertiesHelper(Class type, boolean read, boolean write) {
        try {
            PropertyDescriptor[] all = BeanUtil.getPropertyDescriptors(type);
            if (read && write) {
                return all;
            } else {
                List<PropertyDescriptor> properties = new ArrayList<>(all.length);
                for (PropertyDescriptor pd : all) {
                    if (read && pd.getReadMethod() != null) {
                        properties.add(pd);
                    } else if (write && pd.getWriteMethod() != null) {
                        properties.add(pd);
                    }
                }
                return properties.toArray(new PropertyDescriptor[0]);
            }
        } catch (BeansException ex) {
            throw new CodeGenerationException(ex);
        }
    }
    /**
     * èŽ·å– bean çš„属性信息
     * @param propertyType ç±»åž‹
     * @param propertyName å±žæ€§å
     * @return {Property}
     */
    @Nullable
    public static Property getProperty(Class<?> propertyType, String propertyName) {
        PropertyDescriptor propertyDescriptor = BeanUtil.getPropertyDescriptor(propertyType, propertyName);
        if (propertyDescriptor == null) {
            return null;
        }
        return ReflectUtil.getProperty(propertyType, propertyDescriptor, propertyName);
    }
    /**
     * èŽ·å– bean çš„属性信息
     * @param propertyType ç±»åž‹
     * @param propertyDescriptor PropertyDescriptor
     * @param propertyName å±žæ€§å
     * @return {Property}
     */
    public static Property getProperty(Class<?> propertyType, PropertyDescriptor propertyDescriptor, String propertyName) {
        Method readMethod = propertyDescriptor.getReadMethod();
        Method writeMethod = propertyDescriptor.getWriteMethod();
        return new Property(propertyType, readMethod, writeMethod, propertyName);
    }
    /**
     * èŽ·å– bean çš„属性信息
     * @param propertyType ç±»åž‹
     * @param propertyName å±žæ€§å
     * @return {Property}
     */
    @Nullable
    public static TypeDescriptor getTypeDescriptor(Class<?> propertyType, String propertyName) {
        Property property = ReflectUtil.getProperty(propertyType, propertyName);
        if (property == null) {
            return null;
        }
        return new TypeDescriptor(property);
    }
    /**
     * èŽ·å– ç±»å±žæ€§ä¿¡æ¯
     * @param propertyType ç±»åž‹
     * @param propertyDescriptor PropertyDescriptor
     * @param propertyName å±žæ€§å
     * @return {Property}
     */
    public static TypeDescriptor getTypeDescriptor(Class<?> propertyType, PropertyDescriptor propertyDescriptor, String propertyName) {
        Method readMethod = propertyDescriptor.getReadMethod();
        Method writeMethod = propertyDescriptor.getWriteMethod();
        Property property = new Property(propertyType, readMethod, writeMethod, propertyName);
        return new TypeDescriptor(property);
    }
    /**
     * èŽ·å– ç±»å±žæ€§
     * @param clazz ç±»ä¿¡æ¯
     * @param fieldName å±žæ€§å
     * @return Field
     */
    @Nullable
    public static Field getField(Class<?> clazz, String fieldName) {
        while (clazz != Object.class) {
            try {
                return clazz.getDeclaredField(fieldName);
            } catch (NoSuchFieldException e) {
                clazz = clazz.getSuperclass();
            }
        }
        return null;
    }
    /**
     * èŽ·å– æ‰€æœ‰ field å±žæ€§ä¸Šçš„æ³¨è§£
     * @param clazz ç±»
     * @param fieldName å±žæ€§å
     * @param annotationClass æ³¨è§£
     * @param <T> æ³¨è§£æ³›åž‹
     * @return æ³¨è§£
     */
    @Nullable
    public static <T extends Annotation> T getAnnotation(Class<?> clazz, String fieldName, Class<T> annotationClass) {
        Field field = ReflectUtil.getField(clazz, fieldName);
        if (field == null) {
            return null;
        }
        return field.getAnnotation(annotationClass);
    }
}
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/Unchecked.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,106 @@
/*
 *      Copyright (c) 2018-2028, DreamLu All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: DreamLu å¢æ˜¥æ¢¦ (596392912@qq.com)
 */
package com.vci.web.util;
import com.vci.web.util.function.*;
import java.util.Comparator;
import java.util.Objects;
import java.util.concurrent.Callable;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
/**
 * Lambda å—检异常处理
 *
 * <p>
 * https://segmentfault.com/a/1190000007832130
 * https://github.com/jOOQ/jOOL
 * </p>
 *
 * @author L.cm
 */
public class Unchecked {
    public static <T, R> Function<T, R> function(CheckedFunction<T, R> mapper) {
        Objects.requireNonNull(mapper);
        return t -> {
            try {
                return mapper.apply(t);
            } catch (Throwable e) {
                throw Exceptions.unchecked(e);
            }
        };
    }
    public static <T> Consumer<T> consumer(CheckedConsumer<T> mapper) {
        Objects.requireNonNull(mapper);
        return t -> {
            try {
                mapper.accept(t);
            } catch (Throwable e) {
                throw Exceptions.unchecked(e);
            }
        };
    }
    public static <T> Supplier<T> supplier(CheckedSupplier<T> mapper) {
        Objects.requireNonNull(mapper);
        return () -> {
            try {
                return mapper.get();
            } catch (Throwable e) {
                throw Exceptions.unchecked(e);
            }
        };
    }
    public static Runnable runnable(CheckedRunnable runnable) {
        Objects.requireNonNull(runnable);
        return () -> {
            try {
                runnable.run();
            } catch (Throwable e) {
                throw Exceptions.unchecked(e);
            }
        };
    }
    public static <T> Callable<T> callable(CheckedCallable<T> callable) {
        Objects.requireNonNull(callable);
        return () -> {
            try {
                return callable.call();
            } catch (Throwable e) {
                throw Exceptions.unchecked(e);
            }
        };
    }
    public static <T> Comparator<T> comparator(CheckedComparator<T> comparator) {
        Objects.requireNonNull(comparator);
        return (T o1, T o2) -> {
            try {
                return comparator.compare(o1, o2);
            } catch (Throwable e) {
                throw Exceptions.unchecked(e);
            }
        };
    }
}
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/UrlUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,92 @@
/*
 *      Copyright (c) 2018-2028, DreamLu All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: DreamLu å¢æ˜¥æ¢¦ (596392912@qq.com)
 */
package com.vci.web.util;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.Charset;
/**
 * url处理工具类
 *
 * @author L.cm
 */
public class UrlUtil extends org.springframework.web.util.UriUtils {
    /**
     * url ç¼–码
     *
     * @param source source
     * @return sourced String
     */
    public static String encode(String source) {
        return UrlUtil.encode(source, Charsets.UTF_8);
    }
    /**
     * url è§£ç 
     *
     * @param source source
     * @return decoded String
     */
    public static String decode(String source) {
        return UrlUtil.decode(source, Charsets.UTF_8);
    }
    /**
     * url ç¼–码
     *
     * @param source  url
     * @param charset å­—符集
     * @return ç¼–码后的url
     */
    @Deprecated
    public static String encodeURL(String source, Charset charset) {
        return UrlUtil.encode(source, charset.name());
    }
    /**
     * url è§£ç 
     *
     * @param source  url
     * @param charset å­—符集
     * @return è§£ç url
     */
    @Deprecated
    public static String decodeURL(String source, Charset charset) {
        return UrlUtil.decode(source, charset.name());
    }
    /**
     * èŽ·å–url路径
     *
     * @param uriStr è·¯å¾„
     * @return url路径
     */
    public static String getPath(String uriStr) {
        URI uri;
        try {
            uri = new URI(uriStr);
        } catch (URISyntaxException var3) {
            throw new RuntimeException(var3);
        }
        return uri.getPath();
    }
}
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/beans/BeanProperty.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.vci.web.util.beans;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
 * Bean属性
 *
 * @author Chill
 */
@Getter
@AllArgsConstructor
public class BeanProperty {
    private final String name;
    private final Class<?> type;
}
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/beans/BladeBeanCopier.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,404 @@
/*
 *      Copyright (c) 2018-2028, DreamLu All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: DreamLu å¢æ˜¥æ¢¦ (596392912@qq.com)
 */
package com.vci.web.util.beans;
import com.vci.web.util.BeanUtil;
import com.vci.web.util.ClassUtil;
import com.vci.web.util.ReflectUtil;
import com.vci.web.util.StringUtil;
import org.springframework.asm.ClassVisitor;
import org.springframework.asm.Label;
import org.springframework.asm.Opcodes;
import org.springframework.asm.Type;
import org.springframework.cglib.core.*;
import org.springframework.lang.Nullable;
import org.springframework.util.ClassUtils;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.security.ProtectionDomain;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
/**
 * spring cglib é­”改
 *
 * <p>
 *     1. æ”¯æŒé“¾å¼ bean,支持 map
 *     2. ClassLoader è·Ÿ target ä¿æŒä¸€è‡´
 * </p>
 *
 * @author L.cm
 */
public abstract class BladeBeanCopier {
    private static final Type CONVERTER = TypeUtils.parseType("org.springframework.cglib.core.Converter");
    private static final Type BEAN_COPIER = TypeUtils.parseType(BladeBeanCopier.class.getName());
    private static final Type BEAN_MAP = TypeUtils.parseType(Map.class.getName());
    private static final Signature COPY = new Signature("copy", Type.VOID_TYPE, new Type[]{Constants.TYPE_OBJECT, Constants.TYPE_OBJECT, CONVERTER});
    private static final Signature CONVERT = TypeUtils.parseSignature("Object convert(Object, Class, Object)");
    private static final Signature BEAN_MAP_GET = TypeUtils.parseSignature("Object get(Object)");
    private static final Type CLASS_UTILS = TypeUtils.parseType(ClassUtils.class.getName());
    private static final Signature IS_ASSIGNABLE_VALUE = TypeUtils.parseSignature("boolean isAssignableValue(Class, Object)");
    /**
     * The map to store {@link BladeBeanCopier} of source type and class type for copy.
     */
    private static final ConcurrentMap<BladeBeanCopierKey, BladeBeanCopier> BEAN_COPIER_MAP = new ConcurrentHashMap<>();
    public static BladeBeanCopier create(Class source, Class target, boolean useConverter) {
        return BladeBeanCopier.create(source, target, useConverter, false);
    }
    public static BladeBeanCopier create(Class source, Class target, boolean useConverter, boolean nonNull) {
        BladeBeanCopierKey copierKey = new BladeBeanCopierKey(source, target, useConverter, nonNull);
        // åˆ©ç”¨ ConcurrentMap ç¼“å­˜ æé«˜æ€§èƒ½ï¼ŒæŽ¥è¿‘ ç›´æŽ¥ get set
        return BEAN_COPIER_MAP.computeIfAbsent(copierKey, key -> {
            Generator gen = new Generator();
            gen.setSource(key.getSource());
            gen.setTarget(key.getTarget());
            gen.setUseConverter(key.isUseConverter());
            gen.setNonNull(key.isNonNull());
            return gen.create(key);
        });
    }
    /**
     * Bean copy
     *
     * @param from from Bean
     * @param to to Bean
     * @param converter Converter
     */
    abstract public void copy(Object from, Object to, @Nullable Converter converter);
    public static class Generator extends AbstractClassGenerator {
        private static final Source SOURCE = new Source(BladeBeanCopier.class.getName());
        private Class source;
        private Class target;
        private boolean useConverter;
        private boolean nonNull;
        Generator() {
            super(SOURCE);
        }
        public void setSource(Class source) {
            if (!Modifier.isPublic(source.getModifiers())) {
                setNamePrefix(source.getName());
            }
            this.source = source;
        }
        public void setTarget(Class target) {
            if (!Modifier.isPublic(target.getModifiers())) {
                setNamePrefix(target.getName());
            }
            this.target = target;
        }
        public void setUseConverter(boolean useConverter) {
            this.useConverter = useConverter;
        }
        public void setNonNull(boolean nonNull) {
            this.nonNull = nonNull;
        }
        @Override
        protected ClassLoader getDefaultClassLoader() {
            // L.cm ä¿è¯ å’Œ è¿”回使用同一个 ClassLoader
            return target.getClassLoader();
        }
        @Override
        protected ProtectionDomain getProtectionDomain() {
            return ReflectUtils.getProtectionDomain(source);
        }
        @Override
        public BladeBeanCopier create(Object key) {
            return (BladeBeanCopier) super.create(key);
        }
        @Override
        public void generateClass(ClassVisitor v) {
            Type sourceType = Type.getType(source);
            Type targetType = Type.getType(target);
            ClassEmitter ce = new ClassEmitter(v);
            ce.begin_class(Constants.V1_2,
                Constants.ACC_PUBLIC,
                getClassName(),
                BEAN_COPIER,
                null,
                Constants.SOURCE_FILE);
            EmitUtils.null_constructor(ce);
            CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC, COPY, null);
            // map å•独处理
            if (Map.class.isAssignableFrom(source)) {
                generateClassFormMap(ce, e, sourceType, targetType);
                return;
            }
            // 2018.12.27 by L.cm æ”¯æŒé“¾å¼ bean
            // æ³¨æ„ï¼šæ­¤å¤„需兼容链式bean ä½¿ç”¨äº† spring çš„æ–¹æ³•,比较耗时
            PropertyDescriptor[] getters = ReflectUtil.getBeanGetters(source);
            PropertyDescriptor[] setters = ReflectUtil.getBeanSetters(target);
            Map<String, PropertyDescriptor> names = new HashMap<>(16);
            for (PropertyDescriptor getter : getters) {
                names.put(getter.getName(), getter);
            }
            Local targetLocal = e.make_local();
            Local sourceLocal = e.make_local();
            e.load_arg(1);
            e.checkcast(targetType);
            e.store_local(targetLocal);
            e.load_arg(0);
            e.checkcast(sourceType);
            e.store_local(sourceLocal);
            for (PropertyDescriptor setter : setters) {
                String propName = setter.getName();
                CopyProperty targetIgnoreCopy = ReflectUtil.getAnnotation(target, propName, CopyProperty.class);
                // set ä¸Šæœ‰å¿½ç•¥çš„ æ³¨è§£
                if (targetIgnoreCopy != null) {
                    if (targetIgnoreCopy.ignore()) {
                        continue;
                    }
                    // æ³¨è§£ä¸Šçš„别名,如果别名不为空,使用别名
                    String aliasTargetPropName = targetIgnoreCopy.value();
                    if (StringUtil.isNotBlank(aliasTargetPropName)) {
                        propName = aliasTargetPropName;
                    }
                }
                // æ‰¾åˆ°å¯¹åº”çš„ get
                PropertyDescriptor getter = names.get(propName);
                // æ²¡æœ‰ get è·³å‡º
                if (getter == null) {
                    continue;
                }
                MethodInfo read = ReflectUtils.getMethodInfo(getter.getReadMethod());
                Method writeMethod = setter.getWriteMethod();
                MethodInfo write = ReflectUtils.getMethodInfo(writeMethod);
                Type returnType = read.getSignature().getReturnType();
                Type setterType = write.getSignature().getArgumentTypes()[0];
                Class<?> getterPropertyType = getter.getPropertyType();
                Class<?> setterPropertyType = setter.getPropertyType();
                // L.cm 2019.01.12 ä¼˜åŒ–逻辑,先判断类型,类型一致直接 set,不同再判断 æ˜¯å¦ ç±»åž‹è½¬æ¢
                // nonNull Label
                Label l0 = e.make_label();
                // åˆ¤æ–­ç±»åž‹æ˜¯å¦ä¸€è‡´ï¼ŒåŒ…括 åŒ…装类型
                if (ClassUtil.isAssignable(setterPropertyType, getterPropertyType)) {
                    // 2018.12.27 by L.cm æ”¯æŒé“¾å¼ bean
                    e.load_local(targetLocal);
                    e.load_local(sourceLocal);
                    e.invoke(read);
                    boolean getterIsPrimitive = getterPropertyType.isPrimitive();
                    boolean setterIsPrimitive = setterPropertyType.isPrimitive();
                    if (nonNull) {
                        // éœ€è¦è½æ ˆï¼Œå¼ºåˆ¶è£…ç®±
                        e.box(returnType);
                        Local var = e.make_local();
                        e.store_local(var);
                        e.load_local(var);
                        // nonNull Label
                        e.ifnull(l0);
                        e.load_local(targetLocal);
                        e.load_local(var);
                        // éœ€è¦è½æ ˆï¼Œå¼ºåˆ¶æ‹†ç®±
                        e.unbox_or_zero(setterType);
                    } else {
                        // å¦‚æžœ get ä¸ºåŽŸå§‹ç±»åž‹ï¼Œéœ€è¦è£…ç®±
                        if (getterIsPrimitive && !setterIsPrimitive) {
                            e.box(returnType);
                        }
                        // å¦‚æžœ set ä¸ºåŽŸå§‹ç±»åž‹ï¼Œéœ€è¦æ‹†ç®±
                        if (!getterIsPrimitive && setterIsPrimitive) {
                            e.unbox_or_zero(setterType);
                        }
                    }
                    // æž„造 set æ–¹æ³•
                    invokeWrite(e, write, writeMethod, nonNull, l0);
                } else if (useConverter) {
                    e.load_local(targetLocal);
                    e.load_arg(2);
                    e.load_local(sourceLocal);
                    e.invoke(read);
                    e.box(returnType);
                    if (nonNull) {
                        Local var = e.make_local();
                        e.store_local(var);
                        e.load_local(var);
                        e.ifnull(l0);
                        e.load_local(targetLocal);
                        e.load_arg(2);
                        e.load_local(var);
                    }
                    EmitUtils.load_class(e, setterType);
                    // æ›´æ”¹æˆäº†å±žæ€§åï¼Œä¹‹å‰æ˜¯ set æ–¹æ³•名
                    e.push(propName);
                    e.invoke_interface(CONVERTER, CONVERT);
                    e.unbox_or_zero(setterType);
                    // æž„造 set æ–¹æ³•
                    invokeWrite(e, write, writeMethod, nonNull, l0);
                }
            }
            e.return_value();
            e.end_method();
            ce.end_class();
        }
        private static void invokeWrite(CodeEmitter e, MethodInfo write, Method writeMethod, boolean nonNull, Label l0) {
            // è¿”回值,判断 é“¾å¼ bean
            Class<?> returnType = writeMethod.getReturnType();
            e.invoke(write);
            // é“¾å¼ bean,有返回值需要 pop
            if (!returnType.equals(Void.TYPE)) {
                e.pop();
            }
            if (nonNull) {
                e.visitLabel(l0);
            }
        }
        @Override
        protected Object firstInstance(Class type) {
            return BeanUtil.newInstance(type);
        }
        @Override
        protected Object nextInstance(Object instance) {
            return instance;
        }
        /**
         * å¤„理 map çš„ copy
         * @param ce ClassEmitter
         * @param e CodeEmitter
         * @param sourceType sourceType
         * @param targetType targetType
         */
        public void generateClassFormMap(ClassEmitter ce, CodeEmitter e, Type sourceType, Type targetType) {
            // 2018.12.27 by L.cm æ”¯æŒé“¾å¼ bean
            PropertyDescriptor[] setters = ReflectUtil.getBeanSetters(target);
            // å…¥å£å˜é‡
            Local targetLocal = e.make_local();
            Local sourceLocal = e.make_local();
            e.load_arg(1);
            e.checkcast(targetType);
            e.store_local(targetLocal);
            e.load_arg(0);
            e.checkcast(sourceType);
            e.store_local(sourceLocal);
            Type mapBox = Type.getType(Object.class);
            for (PropertyDescriptor setter : setters) {
                String propName = setter.getName();
                // set ä¸Šæœ‰å¿½ç•¥çš„ æ³¨è§£
                CopyProperty targetIgnoreCopy = ReflectUtil.getAnnotation(target, propName, CopyProperty.class);
                if (targetIgnoreCopy != null) {
                    if (targetIgnoreCopy.ignore()) {
                        continue;
                    }
                    // æ³¨è§£ä¸Šçš„别名
                    String aliasTargetPropName = targetIgnoreCopy.value();
                    if (StringUtil.isNotBlank(aliasTargetPropName)) {
                        propName = aliasTargetPropName;
                    }
                }
                Method writeMethod = setter.getWriteMethod();
                MethodInfo write = ReflectUtils.getMethodInfo(writeMethod);
                Type setterType = write.getSignature().getArgumentTypes()[0];
                e.load_local(targetLocal);
                e.load_local(sourceLocal);
                e.push(propName);
                // æ‰§è¡Œ map get
                e.invoke_interface(BEAN_MAP, BEAN_MAP_GET);
                // box è£…箱,避免 array[] æ•°ç»„问题
                e.box(mapBox);
                // ç”Ÿæˆå˜é‡
                Local var = e.make_local();
                e.store_local(var);
                e.load_local(var);
                // å…ˆåˆ¤æ–­ ä¸ä¸ºnull,然后做类型判断
                Label l0 = e.make_label();
                e.ifnull(l0);
                EmitUtils.load_class(e, setterType);
                e.load_local(var);
                // ClassUtils.isAssignableValue(Integer.class, id)
                e.invoke_static(CLASS_UTILS, IS_ASSIGNABLE_VALUE);
                Label l1 = new Label();
                // è¿”回值,判断 é“¾å¼ bean
                Class<?> returnType = writeMethod.getReturnType();
                if (useConverter) {
                    e.if_jump(Opcodes.IFEQ, l1);
                    e.load_local(targetLocal);
                    e.load_local(var);
                    e.unbox_or_zero(setterType);
                    e.invoke(write);
                    if (!returnType.equals(Void.TYPE)) {
                        e.pop();
                    }
                    e.goTo(l0);
                    e.visitLabel(l1);
                    e.load_local(targetLocal);
                    e.load_arg(2);
                    e.load_local(var);
                    EmitUtils.load_class(e, setterType);
                    e.push(propName);
                    e.invoke_interface(CONVERTER, CONVERT);
                    e.unbox_or_zero(setterType);
                    e.invoke(write);
                } else {
                    e.if_jump(Opcodes.IFEQ, l0);
                    e.load_local(targetLocal);
                    e.load_local(var);
                    e.unbox_or_zero(setterType);
                    e.invoke(write);
                }
                // è¿”回值,判断 é“¾å¼ bean
                if (!returnType.equals(Void.TYPE)) {
                    e.pop();
                }
                e.visitLabel(l0);
            }
            e.return_value();
            e.end_method();
            ce.end_class();
        }
    }
}
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/beans/BladeBeanCopierKey.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.vci.web.util.beans;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
/**
 * copy key
 *
 * @author L.cm
 */
@Getter
@EqualsAndHashCode
@AllArgsConstructor
public class BladeBeanCopierKey {
    private final Class<?> source;
    private final Class<?> target;
    private final boolean useConverter;
    private final boolean nonNull;
}
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/beans/BladeBeanMap.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,125 @@
package com.vci.web.util.beans;
import org.springframework.asm.ClassVisitor;
import org.springframework.cglib.beans.BeanMap;
import org.springframework.cglib.core.AbstractClassGenerator;
import org.springframework.cglib.core.ReflectUtils;
import java.security.ProtectionDomain;
/**
 * é‡å†™ cglib BeanMap,支持链式bean
 *
 * @author L.cm
 */
public abstract class BladeBeanMap extends BeanMap {
    protected BladeBeanMap() {
    }
    protected BladeBeanMap(Object bean) {
        super(bean);
    }
    public static BladeBeanMap create(Object bean) {
        BladeGenerator gen = new BladeGenerator();
        gen.setBean(bean);
        return gen.create();
    }
    /**
     * newInstance
     *
     * @param o Object
     * @return BladeBeanMap
     */
    @Override
    public abstract BladeBeanMap newInstance(Object o);
    public static class BladeGenerator extends AbstractClassGenerator {
        private static final Source SOURCE = new Source(BladeBeanMap.class.getName());
        private Object bean;
        private Class beanClass;
        private int require;
        public BladeGenerator() {
            super(SOURCE);
        }
        /**
         * Set the bean that the generated map should reflect. The bean may be swapped
         * out for another bean of the same type using {@link #setBean}.
         * Calling this method overrides any value previously set using {@link #setBeanClass}.
         * You must call either this method or {@link #setBeanClass} before {@link #create}.
         *
         * @param bean the initial bean
         */
        public void setBean(Object bean) {
            this.bean = bean;
            if (bean != null) {
                beanClass = bean.getClass();
            }
        }
        /**
         * Set the class of the bean that the generated map should support.
         * You must call either this method or {@link #setBeanClass} before {@link #create}.
         *
         * @param beanClass the class of the bean
         */
        public void setBeanClass(Class beanClass) {
            this.beanClass = beanClass;
        }
        /**
         * Limit the properties reflected by the generated map.
         *
         * @param require any combination of {@link #REQUIRE_GETTER} and
         *                {@link #REQUIRE_SETTER}; default is zero (any property allowed)
         */
        public void setRequire(int require) {
            this.require = require;
        }
        @Override
        protected ClassLoader getDefaultClassLoader() {
            return beanClass.getClassLoader();
        }
        @Override
        protected ProtectionDomain getProtectionDomain() {
            return ReflectUtils.getProtectionDomain(beanClass);
        }
        /**
         * Create a new instance of the <code>BeanMap</code>. An existing
         * generated class will be reused if possible.
         *
         * @return {BladeBeanMap}
         */
        public BladeBeanMap create() {
            if (beanClass == null) {
                throw new IllegalArgumentException("Class of bean unknown");
            }
            setNamePrefix(beanClass.getName());
            BladeBeanMapKey key = new BladeBeanMapKey(beanClass, require);
            return (BladeBeanMap) super.create(key);
        }
        @Override
        public void generateClass(ClassVisitor v) throws Exception {
            new BladeBeanMapEmitter(v, getClassName(), beanClass, require);
        }
        @Override
        protected Object firstInstance(Class type) {
            return ((BeanMap) ReflectUtils.newInstance(type)).newInstance(bean);
        }
        @Override
        protected Object nextInstance(Object instance) {
            return ((BeanMap) instance).newInstance(bean);
        }
    }
}
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/beans/BladeBeanMapEmitter.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,192 @@
package com.vci.web.util.beans;
import com.vci.web.util.ReflectUtil;
import org.springframework.asm.ClassVisitor;
import org.springframework.asm.Label;
import org.springframework.asm.Type;
import org.springframework.cglib.core.*;
import java.beans.PropertyDescriptor;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
 * é‡å†™ cglib BeanMap å¤„理器
 *
 * @author L.cm
 */
class BladeBeanMapEmitter extends ClassEmitter {
    private static final Type BEAN_MAP = TypeUtils.parseType(BladeBeanMap.class.getName());
    private static final Type FIXED_KEY_SET = TypeUtils.parseType("org.springframework.cglib.beans.FixedKeySet");
    private static final Signature CSTRUCT_OBJECT = TypeUtils.parseConstructor("Object");
    private static final Signature CSTRUCT_STRING_ARRAY = TypeUtils.parseConstructor("String[]");
    private static final Signature BEAN_MAP_GET = TypeUtils.parseSignature("Object get(Object, Object)");
    private static final Signature BEAN_MAP_PUT = TypeUtils.parseSignature("Object put(Object, Object, Object)");
    private static final Signature KEY_SET = TypeUtils.parseSignature("java.util.Set keySet()");
    private static final Signature NEW_INSTANCE = new Signature("newInstance", BEAN_MAP, new Type[]{Constants.TYPE_OBJECT});
    private static final Signature GET_PROPERTY_TYPE = TypeUtils.parseSignature("Class getPropertyType(String)");
    public BladeBeanMapEmitter(ClassVisitor v, String className, Class type, int require) {
        super(v);
        begin_class(Constants.V1_2, Constants.ACC_PUBLIC, className, BEAN_MAP, null, Constants.SOURCE_FILE);
        EmitUtils.null_constructor(this);
        EmitUtils.factory_method(this, NEW_INSTANCE);
        generateConstructor();
        Map<String, PropertyDescriptor> getters = makePropertyMap(ReflectUtil.getBeanGetters(type));
        Map<String, PropertyDescriptor> setters = makePropertyMap(ReflectUtil.getBeanSetters(type));
        Map<String, PropertyDescriptor> allProps = new HashMap<>(32);
        allProps.putAll(getters);
        allProps.putAll(setters);
        if (require != 0) {
            for (Iterator it = allProps.keySet().iterator(); it.hasNext(); ) {
                String name = (String) it.next();
                if ((((require & BladeBeanMap.REQUIRE_GETTER) != 0) && !getters.containsKey(name)) ||
                    (((require & BladeBeanMap.REQUIRE_SETTER) != 0) && !setters.containsKey(name))) {
                    it.remove();
                    getters.remove(name);
                    setters.remove(name);
                }
            }
        }
        generateGet(type, getters);
        generatePut(type, setters);
        String[] allNames = getNames(allProps);
        generateKeySet(allNames);
        generateGetPropertyType(allProps, allNames);
        end_class();
    }
    private Map<String, PropertyDescriptor> makePropertyMap(PropertyDescriptor[] props) {
        Map<String, PropertyDescriptor> names = new HashMap<>(16);
        for (PropertyDescriptor prop : props) {
            String propName = prop.getName();
            // è¿‡æ»¤ getClass,Spring çš„工具类会拿到该方法
            if (!"class".equals(propName)) {
                names.put(propName, prop);
            }
        }
        return names;
    }
    private String[] getNames(Map<String, PropertyDescriptor> propertyMap) {
        return propertyMap.keySet().toArray(new String[0]);
    }
    private void generateConstructor() {
        CodeEmitter e = begin_method(Constants.ACC_PUBLIC, CSTRUCT_OBJECT, null);
        e.load_this();
        e.load_arg(0);
        e.super_invoke_constructor(CSTRUCT_OBJECT);
        e.return_value();
        e.end_method();
    }
    private void generateGet(Class type, final Map<String, PropertyDescriptor> getters) {
        final CodeEmitter e = begin_method(Constants.ACC_PUBLIC, BEAN_MAP_GET, null);
        e.load_arg(0);
        e.checkcast(Type.getType(type));
        e.load_arg(1);
        e.checkcast(Constants.TYPE_STRING);
        EmitUtils.string_switch(e, getNames(getters), Constants.SWITCH_STYLE_HASH, new ObjectSwitchCallback() {
            @Override
            public void processCase(Object key, Label end) {
                PropertyDescriptor pd = getters.get(key);
                MethodInfo method = ReflectUtils.getMethodInfo(pd.getReadMethod());
                e.invoke(method);
                e.box(method.getSignature().getReturnType());
                e.return_value();
            }
            @Override
            public void processDefault() {
                e.aconst_null();
                e.return_value();
            }
        });
        e.end_method();
    }
    private void generatePut(Class type, final Map<String, PropertyDescriptor> setters) {
        final CodeEmitter e = begin_method(Constants.ACC_PUBLIC, BEAN_MAP_PUT, null);
        e.load_arg(0);
        e.checkcast(Type.getType(type));
        e.load_arg(1);
        e.checkcast(Constants.TYPE_STRING);
        EmitUtils.string_switch(e, getNames(setters), Constants.SWITCH_STYLE_HASH, new ObjectSwitchCallback() {
            @Override
            public void processCase(Object key, Label end) {
                PropertyDescriptor pd = setters.get(key);
                if (pd.getReadMethod() == null) {
                    e.aconst_null();
                } else {
                    MethodInfo read = ReflectUtils.getMethodInfo(pd.getReadMethod());
                    e.dup();
                    e.invoke(read);
                    e.box(read.getSignature().getReturnType());
                }
                // move old value behind bean
                e.swap();
                // new value
                e.load_arg(2);
                MethodInfo write = ReflectUtils.getMethodInfo(pd.getWriteMethod());
                e.unbox(write.getSignature().getArgumentTypes()[0]);
                e.invoke(write);
                e.return_value();
            }
            @Override
            public void processDefault() {
                // fall-through
            }
        });
        e.aconst_null();
        e.return_value();
        e.end_method();
    }
    private void generateKeySet(String[] allNames) {
        // static initializer
        declare_field(Constants.ACC_STATIC | Constants.ACC_PRIVATE, "keys", FIXED_KEY_SET, null);
        CodeEmitter e = begin_static();
        e.new_instance(FIXED_KEY_SET);
        e.dup();
        EmitUtils.push_array(e, allNames);
        e.invoke_constructor(FIXED_KEY_SET, CSTRUCT_STRING_ARRAY);
        e.putfield("keys");
        e.return_value();
        e.end_method();
        // keySet
        e = begin_method(Constants.ACC_PUBLIC, KEY_SET, null);
        e.load_this();
        e.getfield("keys");
        e.return_value();
        e.end_method();
    }
    private void generateGetPropertyType(final Map allProps, String[] allNames) {
        final CodeEmitter e = begin_method(Constants.ACC_PUBLIC, GET_PROPERTY_TYPE, null);
        e.load_arg(0);
        EmitUtils.string_switch(e, allNames, Constants.SWITCH_STYLE_HASH, new ObjectSwitchCallback() {
            @Override
            public void processCase(Object key, Label end) {
                PropertyDescriptor pd = (PropertyDescriptor) allProps.get(key);
                EmitUtils.load_class(e, Type.getType(pd.getPropertyType()));
                e.return_value();
            }
            @Override
            public void processDefault() {
                e.aconst_null();
                e.return_value();
            }
        });
        e.end_method();
    }
}
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/beans/BladeBeanMapKey.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.vci.web.util.beans;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
/**
 * bean map key,提高性能
 *
 * @author L.cm
 */
@EqualsAndHashCode
@AllArgsConstructor
public class BladeBeanMapKey {
    private final Class type;
    private final int require;
}
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/beans/CopyProperty.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.vci.web.util.beans;
import java.lang.annotation.*;
/**
 * copy å­—段 é…ç½®
 *
 * @author L.cm
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CopyProperty {
    /**
     * å±žæ€§åï¼Œç”¨äºŽæŒ‡å®šåˆ«åï¼Œé»˜è®¤ä½¿ç”¨ï¼šfield name
     * @return å±žæ€§å
     */
    String value() default "";
    /**
     * å¿½ç•¥ï¼šé»˜è®¤ä¸º false
     * @return æ˜¯å¦å¿½ç•¥
     */
    boolean ignore() default false;
}
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/convert/BladeConversionService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
package com.vci.web.util.convert;
import com.vci.web.util.convert.EnumToStringConverter;
import org.springframework.boot.convert.ApplicationConversionService;
import org.springframework.core.convert.support.GenericConversionService;
import org.springframework.lang.Nullable;
import org.springframework.util.StringValueResolver;
/**
 * ç±»åž‹ è½¬æ¢ æœåŠ¡ï¼Œæ·»åŠ äº† IEnum è½¬æ¢
 *
 * @author L.cm
 */
public class BladeConversionService extends ApplicationConversionService {
    @Nullable
    private static volatile BladeConversionService SHARED_INSTANCE;
    public BladeConversionService() {
        this(null);
    }
    public BladeConversionService(@Nullable StringValueResolver embeddedValueResolver) {
        super(embeddedValueResolver);
        super.addConverter(new EnumToStringConverter());
        super.addConverter(new StringToEnumConverter());
    }
    /**
     * Return a shared default application {@code ConversionService} instance, lazily
     * building it once needed.
     * <p>
     * Note: This method actually returns an {@link BladeConversionService}
     * instance. However, the {@code ConversionService} signature has been preserved for
     * binary compatibility.
     * @return the shared {@code BladeConversionService} instance (never{@code null})
     */
    public static GenericConversionService getInstance() {
        BladeConversionService sharedInstance = BladeConversionService.SHARED_INSTANCE;
        if (sharedInstance == null) {
            synchronized (BladeConversionService.class) {
                sharedInstance = BladeConversionService.SHARED_INSTANCE;
                if (sharedInstance == null) {
                    sharedInstance = new BladeConversionService();
                    BladeConversionService.SHARED_INSTANCE = sharedInstance;
                }
            }
        }
        return sharedInstance;
    }
}
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/convert/BladeConverter.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,77 @@
package com.vci.web.util.convert;
import com.vci.web.util.ClassUtil;
import com.vci.web.util.ConvertUtil;
import com.vci.web.util.ReflectUtil;
import com.vci.web.util.Unchecked;
import com.vci.web.util.function.CheckedFunction;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cglib.core.Converter;
import org.springframework.core.convert.TypeDescriptor;
import org.springframework.lang.Nullable;
import java.lang.reflect.Field;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
/**
 * ç»„合 spring cglib Converter å’Œ spring ConversionService
 *
 * @author L.cm
 */
@Slf4j
@AllArgsConstructor
public class BladeConverter implements Converter {
    private static final ConcurrentMap<String, TypeDescriptor> TYPE_CACHE = new ConcurrentHashMap<>();
    private final Class<?> sourceClazz;
    private final Class<?> targetClazz;
    /**
     * cglib convert
     *
     * @param value     æºå¯¹è±¡å±žæ€§
     * @param target    ç›®æ ‡å¯¹è±¡å±žæ€§ç±»
     * @param fieldName ç›®æ ‡çš„field名,原为 set æ–¹æ³•名,BladeBeanCopier é‡Œåšäº†æ›´æ”¹
     * @return {Object}
     */
    @Override
    @Nullable
    public Object convert(Object value, Class target, final Object fieldName) {
        if (value == null) {
            return null;
        }
        // ç±»åž‹ä¸€æ ·ï¼Œä¸éœ€è¦è½¬æ¢
        if (ClassUtil.isAssignableValue(target, value)) {
            return value;
        }
        try {
            TypeDescriptor targetDescriptor = BladeConverter.getTypeDescriptor(targetClazz, (String) fieldName);
            // 1. åˆ¤æ–­ sourceClazz ä¸º Map
            if (Map.class.isAssignableFrom(sourceClazz)) {
                return ConvertUtil.convert(value, targetDescriptor);
            } else {
                TypeDescriptor sourceDescriptor = BladeConverter.getTypeDescriptor(sourceClazz, (String) fieldName);
                return ConvertUtil.convert(value, sourceDescriptor, targetDescriptor);
            }
        } catch (Throwable e) {
            log.warn("BladeConverter error", e);
            return null;
        }
    }
    private static TypeDescriptor getTypeDescriptor(final Class<?> clazz, final String fieldName) {
        String srcCacheKey = clazz.getName() + fieldName;
        // å¿½ç•¥æŠ›å‡ºå¼‚常的函数,定义完整泛型,避免编译问题
        CheckedFunction<String, TypeDescriptor> uncheckedFunction = (key) -> {
            // è¿™é‡Œ property ç†è®ºä¸Šä¸ä¼šä¸º null
            Field field = ReflectUtil.getField(clazz, fieldName);
            if (field == null) {
                throw new NoSuchFieldException(fieldName);
            }
            return new TypeDescriptor(field);
        };
        return TYPE_CACHE.computeIfAbsent(srcCacheKey, Unchecked.function(uncheckedFunction));
    }
}
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/convert/EnumToStringConverter.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,126 @@
/*
 *      Copyright (c) 2018-2028, DreamLu All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: DreamLu å¢æ˜¥æ¢¦ (596392912@qq.com)
 */
package com.vci.web.util.convert;
import com.fasterxml.jackson.annotation.JsonValue;
import com.vci.web.util.ConvertUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.convert.TypeDescriptor;
import org.springframework.core.convert.converter.ConditionalGenericConverter;
import org.springframework.lang.Nullable;
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
/**
 * æŽ¥æ”¶å‚æ•° åŒ jackson Enum -》 String è½¬æ¢
 *
 * @author L.cm
 */
@Slf4j
public class EnumToStringConverter implements ConditionalGenericConverter {
    /**
     * ç¼“å­˜ Enum ç±»ä¿¡æ¯ï¼Œæä¾›æ€§èƒ½
     */
    private static final ConcurrentMap<Class<?>, AccessibleObject> ENUM_CACHE_MAP = new ConcurrentHashMap<>(8);
    @Nullable
    private static AccessibleObject getAnnotation(Class<?> clazz) {
        Set<AccessibleObject> accessibleObjects = new HashSet<>();
        // JsonValue METHOD, FIELD
        Field[] fields = clazz.getDeclaredFields();
        Collections.addAll(accessibleObjects, fields);
        // methods
        Method[] methods = clazz.getDeclaredMethods();
        Collections.addAll(accessibleObjects, methods);
        for (AccessibleObject accessibleObject : accessibleObjects) {
            // å¤ç”¨ jackson çš„ JsonValue æ³¨è§£
            JsonValue jsonValue = accessibleObject.getAnnotation(JsonValue.class);
            if (jsonValue != null && jsonValue.value()) {
                accessibleObject.setAccessible(true);
                return accessibleObject;
            }
        }
        return null;
    }
    @Override
    public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
        return true;
    }
    @Override
    public Set<ConvertiblePair> getConvertibleTypes() {
        Set<ConvertiblePair> pairSet = new HashSet<>(3);
        pairSet.add(new ConvertiblePair(Enum.class, String.class));
        pairSet.add(new ConvertiblePair(Enum.class, Integer.class));
        pairSet.add(new ConvertiblePair(Enum.class, Long.class));
        return Collections.unmodifiableSet(pairSet);
    }
    @Override
    public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
        if (source == null) {
            return null;
        }
        Class<?> sourceClazz = sourceType.getType();
        AccessibleObject accessibleObject = ENUM_CACHE_MAP.computeIfAbsent(sourceClazz, EnumToStringConverter::getAnnotation);
        Class<?> targetClazz = targetType.getType();
        // å¦‚果为null,走默认的转换
        if (accessibleObject == null) {
            if (String.class == targetClazz) {
                return ((Enum) source).name();
            }
            int ordinal = ((Enum) source).ordinal();
            return ConvertUtil.convert(ordinal, targetClazz);
        }
        try {
            return EnumToStringConverter.invoke(sourceClazz, accessibleObject, source, targetClazz);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
        return null;
    }
    @Nullable
    private static Object invoke(Class<?> clazz, AccessibleObject accessibleObject, Object source, Class<?> targetClazz)
        throws IllegalAccessException, InvocationTargetException {
        Object value = null;
        if (accessibleObject instanceof Field) {
            Field field = (Field) accessibleObject;
            value = field.get(source);
        } else if (accessibleObject instanceof Method) {
            Method method = (Method) accessibleObject;
            Class<?> paramType = method.getParameterTypes()[0];
            // ç±»åž‹è½¬æ¢
            Object object = ConvertUtil.convert(source, paramType);
            value = method.invoke(clazz, object);
        }
        if (value == null) {
            return null;
        }
        return ConvertUtil.convert(value, targetClazz);
    }
}
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/convert/StringToEnumConverter.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,126 @@
/*
 *      Copyright (c) 2018-2028, DreamLu All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: DreamLu å¢æ˜¥æ¢¦ (596392912@qq.com)
 */
package com.vci.web.util.convert;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.vci.web.util.ConvertUtil;
import com.vci.web.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.convert.TypeDescriptor;
import org.springframework.core.convert.converter.ConditionalGenericConverter;
import org.springframework.lang.Nullable;
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
/**
 * æŽ¥æ”¶å‚æ•° åŒ jackson String -》 Enum è½¬æ¢
 *
 * @author L.cm
 */
@Slf4j
public class StringToEnumConverter implements ConditionalGenericConverter {
    /**
     * ç¼“å­˜ Enum ç±»ä¿¡æ¯ï¼Œæä¾›æ€§èƒ½
     */
    private static final ConcurrentMap<Class<?>, AccessibleObject> ENUM_CACHE_MAP = new ConcurrentHashMap<>(8);
    @Nullable
    private static AccessibleObject getAnnotation(Class<?> clazz) {
        Set<AccessibleObject> accessibleObjects = new HashSet<>();
        // JsonCreator METHOD, CONSTRUCTOR
        Constructor<?>[] constructors = clazz.getConstructors();
        Collections.addAll(accessibleObjects, constructors);
        // methods
        Method[] methods = clazz.getDeclaredMethods();
        Collections.addAll(accessibleObjects, methods);
        for (AccessibleObject accessibleObject : accessibleObjects) {
            // å¤ç”¨ jackson çš„ JsonCreator注解
            JsonCreator jsonCreator = accessibleObject.getAnnotation(JsonCreator.class);
            if (jsonCreator != null && JsonCreator.Mode.DISABLED != jsonCreator.mode()) {
                accessibleObject.setAccessible(true);
                return accessibleObject;
            }
        }
        return null;
    }
    @Override
    public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
        return true;
    }
    @Override
    public Set<ConvertiblePair> getConvertibleTypes() {
        return Collections.singleton(new ConvertiblePair(String.class, Enum.class));
    }
    @Nullable
    @Override
    public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
        if (StringUtil.isBlank((String) source)) {
            return null;
        }
        Class<?> clazz = targetType.getType();
        AccessibleObject accessibleObject = ENUM_CACHE_MAP.computeIfAbsent(clazz, StringToEnumConverter::getAnnotation);
        String value = ((String) source).trim();
        // å¦‚果为null,走默认的转换
        if (accessibleObject == null) {
            return valueOf(clazz, value);
        }
        try {
            return StringToEnumConverter.invoke(clazz, accessibleObject, value);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
        return null;
    }
    @SuppressWarnings("unchecked")
    private static <T extends Enum<T>> T valueOf(Class<?> clazz, String value){
        return Enum.valueOf((Class<T>) clazz, value);
    }
    @Nullable
    private static Object invoke(Class<?> clazz, AccessibleObject accessibleObject, String value)
        throws IllegalAccessException, InvocationTargetException, InstantiationException {
        if (accessibleObject instanceof Constructor) {
            Constructor constructor = (Constructor) accessibleObject;
            Class<?> paramType = constructor.getParameterTypes()[0];
            // ç±»åž‹è½¬æ¢
            Object object = ConvertUtil.convert(value, paramType);
            return constructor.newInstance(object);
        }
        if (accessibleObject instanceof Method) {
            Method method = (Method) accessibleObject;
            Class<?> paramType = method.getParameterTypes()[0];
            // ç±»åž‹è½¬æ¢
            Object object = ConvertUtil.convert(value, paramType);
            return method.invoke(clazz, object);
        }
        return null;
    }
}
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/function/CheckedCallable.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
/*
 *      Copyright (c) 2018-2028, DreamLu All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: DreamLu å¢æ˜¥æ¢¦ (596392912@qq.com)
 */
package com.vci.web.util.function;
import org.springframework.lang.Nullable;
/**
 * å—检的 Callable
 *
 * @author L.cm
 */
@FunctionalInterface
public interface CheckedCallable<T> {
    /**
     * Run this callable.
     *
     * @return result
     * @throws Throwable CheckedException
     */
    @Nullable
    T call() throws Throwable;
}
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/function/CheckedComparator.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
/*
 *      Copyright (c) 2018-2028, DreamLu All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: DreamLu å¢æ˜¥æ¢¦ (596392912@qq.com)
 */
package com.vci.web.util.function;
/**
 * å—检的 Comparator
 *
 * @author L.cm
 */
@FunctionalInterface
public interface CheckedComparator<T> {
    /**
     * Compares its two arguments for order.
     *
     * @param o1 o1
     * @param o2 o2
     * @return int
     * @throws Throwable CheckedException
     */
    int compare(T o1, T o2) throws Throwable;
}
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/function/CheckedConsumer.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
/*
 *      Copyright (c) 2018-2028, DreamLu All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: DreamLu å¢æ˜¥æ¢¦ (596392912@qq.com)
 */
package com.vci.web.util.function;
import org.springframework.lang.Nullable;
/**
 * å—检的 Consumer
 *
 * @author L.cm
 */
@FunctionalInterface
public interface CheckedConsumer<T> {
    /**
     * Run the Consumer
     *
     * @param t T
     * @throws Throwable UncheckedException
     */
    @Nullable
    void accept(@Nullable T t) throws Throwable;
}
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/function/CheckedFunction.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
/*
 *      Copyright (c) 2018-2028, DreamLu All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: DreamLu å¢æ˜¥æ¢¦ (596392912@qq.com)
 */
package com.vci.web.util.function;
import org.springframework.lang.Nullable;
/**
 * å—检的 function
 *
 * @author L.cm
 */
@FunctionalInterface
public interface CheckedFunction<T, R> {
    /**
     * Run the Function
     *
     * @param t T
     * @return R R
     * @throws Throwable CheckedException
     */
    @Nullable
    R apply(@Nullable T t) throws Throwable;
}
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/function/CheckedRunnable.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
/*
 *      Copyright (c) 2018-2028, DreamLu All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: DreamLu å¢æ˜¥æ¢¦ (596392912@qq.com)
 */
package com.vci.web.util.function;
/**
 * å—检的 runnable
 *
 * @author L.cm
 */
@FunctionalInterface
public interface CheckedRunnable {
    /**
     * Run this runnable.
     *
     * @throws Throwable CheckedException
     */
    void run() throws Throwable;
}
Source/platformProject/vci-platform-web/src/main/java/com/vci/web/util/function/CheckedSupplier.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
/*
 *      Copyright (c) 2018-2028, DreamLu All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: DreamLu å¢æ˜¥æ¢¦ (596392912@qq.com)
 */
package com.vci.web.util.function;
import org.springframework.lang.Nullable;
/**
 * å—检的 Supplier
 *
 * @author L.cm
 */
@FunctionalInterface
public interface CheckedSupplier<T> {
    /**
     * Run the Supplier
     *
     * @return T
     * @throws Throwable CheckedException
     */
    @Nullable
    T get() throws Throwable;
}